mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-07-12 13:29:04 +00:00
structure[C for parity largely complete
This commit is contained in:
parent
ae02561cd0
commit
87ebc672b8
4 changed files with 36 additions and 26 deletions
|
|
@ -1,4 +1,5 @@
|
||||||
from backend.onboarders.epc_descriptions import EpcConstructionAgeBand, EpcFloorDescriptions
|
from datatypes.epc.construction_age_band import EpcConstructionAgeBand
|
||||||
|
from datatypes.epc.floor import EpcFloorDescriptions
|
||||||
|
|
||||||
|
|
||||||
def unknown_floor_as_built(age_band: EpcConstructionAgeBand) -> EpcFloorDescriptions:
|
def unknown_floor_as_built(age_band: EpcConstructionAgeBand) -> EpcFloorDescriptions:
|
||||||
|
|
@ -25,7 +26,7 @@ def unknown_floor_retrofitted(age_band: EpcConstructionAgeBand) -> EpcFloorDescr
|
||||||
return EpcFloorDescriptions.suspended_insulated
|
return EpcFloorDescriptions.suspended_insulated
|
||||||
|
|
||||||
|
|
||||||
def solid_floor_as_built(age_band: EpcConstructionAgeBand) -> EpcFloorDescriptions:
|
def map_solid_floor_as_built(age_band: EpcConstructionAgeBand) -> EpcFloorDescriptions:
|
||||||
year = age_band.start_year()
|
year = age_band.start_year()
|
||||||
|
|
||||||
if year >= 2003:
|
if year >= 2003:
|
||||||
|
|
@ -35,7 +36,7 @@ def solid_floor_as_built(age_band: EpcConstructionAgeBand) -> EpcFloorDescriptio
|
||||||
return EpcFloorDescriptions.solid_no_insulation_assumed
|
return EpcFloorDescriptions.solid_no_insulation_assumed
|
||||||
|
|
||||||
|
|
||||||
def suspended_floor_as_built(age_band: EpcConstructionAgeBand) -> EpcFloorDescriptions:
|
def map_suspended_floor_as_built(age_band: EpcConstructionAgeBand) -> EpcFloorDescriptions:
|
||||||
year = age_band.start_year()
|
year = age_band.start_year()
|
||||||
|
|
||||||
if year >= 2003:
|
if year >= 2003:
|
||||||
|
|
@ -44,3 +45,15 @@ def suspended_floor_as_built(age_band: EpcConstructionAgeBand) -> EpcFloorDescri
|
||||||
return EpcFloorDescriptions.suspended_limited_insulation_assumed
|
return EpcFloorDescriptions.suspended_limited_insulation_assumed
|
||||||
|
|
||||||
return EpcFloorDescriptions.suspended_no_insulation_assumed
|
return EpcFloorDescriptions.suspended_no_insulation_assumed
|
||||||
|
|
||||||
|
|
||||||
|
as_built_floor_classifiers = {
|
||||||
|
"Solid": map_solid_floor_as_built,
|
||||||
|
"SuspendedTimber": map_suspended_floor_as_built,
|
||||||
|
"SuspendedNotTimber": map_suspended_floor_as_built,
|
||||||
|
}
|
||||||
|
|
||||||
|
unknown_as_built_floor_classifiers = {
|
||||||
|
"RetroFitted": unknown_floor_retrofitted,
|
||||||
|
"AsBuilt": unknown_floor_as_built,
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
from backend.onboarders.epc_descriptions import EpcConstructionAgeBand, EpcRoofDescriptions
|
from backend.onboarders.epc_descriptions import EpcConstructionAgeBand, EpcRoofDescriptions
|
||||||
|
|
||||||
|
|
||||||
def classify_flat_roof(age_band: EpcConstructionAgeBand) -> EpcRoofDescriptions:
|
def map_flat_roof(age_band: EpcConstructionAgeBand) -> EpcRoofDescriptions:
|
||||||
"""
|
"""
|
||||||
For a flat, as built roof, these are the breakdowns:
|
For a flat, as built roof, these are the breakdowns:
|
||||||
|
|
||||||
|
|
@ -26,7 +26,7 @@ def classify_flat_roof(age_band: EpcConstructionAgeBand) -> EpcRoofDescriptions:
|
||||||
return EpcRoofDescriptions.flat_no_insulation
|
return EpcRoofDescriptions.flat_no_insulation
|
||||||
|
|
||||||
|
|
||||||
def classify_sloping_ceiling_roof(age_band: EpcConstructionAgeBand) -> EpcRoofDescriptions:
|
def map_sloping_ceiling_roof(age_band: EpcConstructionAgeBand) -> EpcRoofDescriptions:
|
||||||
"""
|
"""
|
||||||
For a sloping ceiling, as built roof, these are the breakdowns:
|
For a sloping ceiling, as built roof, these are the breakdowns:
|
||||||
2023 onwards → Sloping pitched, insulated
|
2023 onwards → Sloping pitched, insulated
|
||||||
|
|
@ -48,8 +48,8 @@ def classify_sloping_ceiling_roof(age_band: EpcConstructionAgeBand) -> EpcRoofDe
|
||||||
return EpcRoofDescriptions.sloping_pitched_no_insulation
|
return EpcRoofDescriptions.sloping_pitched_no_insulation
|
||||||
|
|
||||||
|
|
||||||
AS_BUILT_ROOF_CLASSIFIERS = {
|
as_built_roof_classifiers = {
|
||||||
# Only need to apply this to flat and sloping ceiling roofs
|
# Only need to apply this to flat and sloping ceiling roofs
|
||||||
"Flat": classify_flat_roof,
|
"Flat": map_flat_roof,
|
||||||
"PitchedWithSlopingCeiling": classify_sloping_ceiling_roof,
|
"PitchedWithSlopingCeiling": map_sloping_ceiling_roof,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -101,7 +101,7 @@ def map_cob_wall_insulation(age_band: EpcConstructionAgeBand):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
AS_BUILT_WALL_CLASSIFIERS = {
|
as_built_wall_classifiers = {
|
||||||
"Cavity": map_cavity_wall_insulation,
|
"Cavity": map_cavity_wall_insulation,
|
||||||
"Solid Brick": map_solid_wall_insulation,
|
"Solid Brick": map_solid_wall_insulation,
|
||||||
"Timber Frame": map_timber_frame_wall_insulation,
|
"Timber Frame": map_timber_frame_wall_insulation,
|
||||||
|
|
|
||||||
|
|
@ -8,11 +8,11 @@ from backend.onboarders.mappings.parity.built_form import parity_map as built_fo
|
||||||
from backend.onboarders.mappings.parity.walls import wall_map, wall_unknown_age_fallback
|
from backend.onboarders.mappings.parity.walls import wall_map, wall_unknown_age_fallback
|
||||||
from backend.onboarders.epc_descriptions import EpcWallDescriptions, EpcConstructionAgeBand, EpcEfficiency, \
|
from backend.onboarders.epc_descriptions import EpcWallDescriptions, EpcConstructionAgeBand, EpcEfficiency, \
|
||||||
WALL_DESCRIPTION_EFFICIENCIES, resolve_roof_efficiency
|
WALL_DESCRIPTION_EFFICIENCIES, resolve_roof_efficiency
|
||||||
from backend.onboarders.mappings.parity.as_built_wall_classifiers import AS_BUILT_WALL_CLASSIFIERS
|
from backend.onboarders.mappings.parity.as_built_wall_classifiers import as_built_wall_classifiers
|
||||||
from backend.onboarders.mappings.parity.as_built_roof_classifiers import AS_BUILT_ROOF_CLASSIFIERS
|
from backend.onboarders.mappings.parity.as_built_roof_classifiers import as_built_roof_classifiers
|
||||||
from backend.onboarders.mappings.parity.as_built_floor_classifiers import unknown_floor_as_built, \
|
from backend.onboarders.mappings.parity.as_built_floor_classifiers import (
|
||||||
unknown_floor_retrofitted, \
|
as_built_floor_classifiers, unknown_as_built_floor_classifiers
|
||||||
solid_floor_as_built, suspended_floor_as_built
|
)
|
||||||
from datatypes.epc.roof import EpcRoofDescriptions
|
from datatypes.epc.roof import EpcRoofDescriptions
|
||||||
from datatypes.epc.floor import EpcFloorDescriptions
|
from datatypes.epc.floor import EpcFloorDescriptions
|
||||||
from onboarders.mappings.parity.roof import roof_map, roof_unknown_age_fallback
|
from onboarders.mappings.parity.roof import roof_map, roof_unknown_age_fallback
|
||||||
|
|
@ -58,7 +58,7 @@ class ParityOnboarder(OnboarderBase):
|
||||||
self.assert_no_nulls(self.data, self.landlord_built_form)
|
self.assert_no_nulls(self.data, self.landlord_built_form)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _fill_as_built(row: pd.Series) -> EpcWallDescriptions | None:
|
def _fill_wall_as_built(row: pd.Series) -> EpcWallDescriptions | None:
|
||||||
"""
|
"""
|
||||||
Utility function, used by map_wall_construction in parity transformation module
|
Utility function, used by map_wall_construction in parity transformation module
|
||||||
:param row: row of input sustainability data, being transformed
|
:param row: row of input sustainability data, being transformed
|
||||||
|
|
@ -75,7 +75,7 @@ class ParityOnboarder(OnboarderBase):
|
||||||
if pd.isnull(row.construction_age_band):
|
if pd.isnull(row.construction_age_band):
|
||||||
return wall_unknown_age_fallback.get(wall_type)
|
return wall_unknown_age_fallback.get(wall_type)
|
||||||
|
|
||||||
classifier = AS_BUILT_WALL_CLASSIFIERS.get(wall_type)
|
classifier = as_built_wall_classifiers.get(wall_type)
|
||||||
if classifier is None:
|
if classifier is None:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
@ -111,7 +111,7 @@ class ParityOnboarder(OnboarderBase):
|
||||||
.map(wall_map)
|
.map(wall_map)
|
||||||
)
|
)
|
||||||
|
|
||||||
self.data[self.landlord_wall_construction] = self.data.progress_apply(self._fill_as_built, axis=1)
|
self.data[self.landlord_wall_construction] = self.data.progress_apply(self._fill_wall_as_built, axis=1)
|
||||||
|
|
||||||
# Sanity check
|
# Sanity check
|
||||||
self.assert_no_nulls(self.data, self.landlord_wall_construction)
|
self.assert_no_nulls(self.data, self.landlord_wall_construction)
|
||||||
|
|
@ -134,7 +134,7 @@ class ParityOnboarder(OnboarderBase):
|
||||||
|
|
||||||
roof_type = row["Roof Construction"]
|
roof_type = row["Roof Construction"]
|
||||||
|
|
||||||
classifier = AS_BUILT_ROOF_CLASSIFIERS.get(roof_type)
|
classifier = as_built_roof_classifiers.get(roof_type)
|
||||||
if classifier is None:
|
if classifier is None:
|
||||||
raise NotImplementedError(f"No roof classifier for roof type '{roof_type}'")
|
raise NotImplementedError(f"No roof classifier for roof type '{roof_type}'")
|
||||||
|
|
||||||
|
|
@ -214,17 +214,14 @@ class ParityOnboarder(OnboarderBase):
|
||||||
return EpcFloorDescriptions.unknown
|
return EpcFloorDescriptions.unknown
|
||||||
|
|
||||||
# 3. Known floor types
|
# 3. Known floor types
|
||||||
if floor_type == "Solid":
|
if floor_type in ["Solid", "SuspendedTimber", "SuspendedNotTimber"]:
|
||||||
return solid_floor_as_built(age_band)
|
classifier = as_built_floor_classifiers[floor_type]
|
||||||
|
return classifier(age_band)
|
||||||
if floor_type in {"SuspendedTimber", "SuspendedNotTimber"}:
|
|
||||||
return suspended_floor_as_built(age_band)
|
|
||||||
|
|
||||||
# 4. Unknown floor type
|
# 4. Unknown floor type
|
||||||
if floor_type == "Unknown":
|
if floor_type == "Unknown":
|
||||||
if insulation == "RetroFitted":
|
classifier = unknown_as_built_floor_classifiers[insulation]
|
||||||
return unknown_floor_retrofitted(age_band)
|
return classifier(age_band)
|
||||||
return unknown_floor_as_built(age_band)
|
|
||||||
|
|
||||||
# 5. Truly missing / garbage input
|
# 5. Truly missing / garbage input
|
||||||
return EpcFloorDescriptions.unknown
|
return EpcFloorDescriptions.unknown
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue