diff --git a/.idea/Model.iml b/.idea/Model.iml
index df6c4faa..850c0cda 100644
--- a/.idea/Model.iml
+++ b/.idea/Model.iml
@@ -7,7 +7,7 @@
-
+
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 50cad4ca..e4070118 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,7 +3,7 @@
-
+
diff --git a/backend/app/plan/schemas.py b/backend/app/plan/schemas.py
index c1a51769..f84912fe 100644
--- a/backend/app/plan/schemas.py
+++ b/backend/app/plan/schemas.py
@@ -1,4 +1,4 @@
-from pydantic import BaseModel, Field, BeforeValidator, field_validator
+from pydantic import BaseModel, Field, BeforeValidator
from typing import Annotated, List, Optional
# Example constants for validation
diff --git a/model_data/requirements/requirements.txt b/model_data/requirements/requirements.txt
index 1d84fc3d..845166d9 100644
--- a/model_data/requirements/requirements.txt
+++ b/model_data/requirements/requirements.txt
@@ -1,8 +1,9 @@
-pydantic==1.10.11
+pydantic==2.9.2
+pydantic-settings==2.6.0
epc-api-python==1.0.2
-pandas==2.0.3
-numpy==1.25.1
-pytz==2023.3
+numpy==2.1.2
+pandas==2.2.3
+pytz==2024.2
tzdata==2023.3
tqdm
mypy
@@ -20,4 +21,6 @@ pyspellchecker
textblob
boto3
pyarrow
-msgpack==1.0.5
+msgpack==1.1.0
+
+
diff --git a/recommendations/tests/test_data/heating_recommendations_data.py b/recommendations/tests/test_data/heating_recommendations_data.py
index 51bf0378..26263826 100644
--- a/recommendations/tests/test_data/heating_recommendations_data.py
+++ b/recommendations/tests/test_data/heating_recommendations_data.py
@@ -946,9 +946,10 @@ testing_examples = [
},
"heating_measure_types": [
'high_heat_retention_storage_heater',
+ 'air_source_heat_pump',
],
"heating_controls_measure_types": [],
- "notes": "This is an end-terrace house, without mains gas connection, so all we recommend is HHR"
+ "notes": "This is an end-terrace house, without mains gas connection, so we recommend is HHR & ASHP"
},
{
"epc": {
diff --git a/recommendations/tests/test_roof_recommendations.py b/recommendations/tests/test_roof_recommendations.py
index 6dbc3b72..214ea6c0 100644
--- a/recommendations/tests/test_roof_recommendations.py
+++ b/recommendations/tests/test_roof_recommendations.py
@@ -57,10 +57,10 @@ class TestRoofRecommendations:
assert len(roof_recommender2.recommendations) == 1
- assert roof_recommender2.recommendations[0]["total"] == 1610.0000000000002
- assert roof_recommender2.recommendations[0]["new_u_value"] == 0.14
+ assert roof_recommender2.recommendations[0]["total"] == 1653
+ assert roof_recommender2.recommendations[0]["new_u_value"] == 0.13
assert roof_recommender2.recommendations[0]["starting_u_value"] == 0.68
- assert roof_recommender2.recommendations[0]["parts"][0]["depth"] == 270
+ assert roof_recommender2.recommendations[0]["parts"][0]["depth"] == 300
epc_record = EPCRecord()
epc_record.prepared_epc = {"county": "Greater London Authority", "roof-energy-eff": "Very Poor"}
@@ -85,7 +85,7 @@ class TestRoofRecommendations:
assert roof_recommender3.recommendations
assert len(roof_recommender3.recommendations) == 1
- assert roof_recommender3.recommendations[0]["parts"][0]["depth"] == 270
+ assert roof_recommender3.recommendations[0]["parts"][0]["depth"] == 300.0
def test_loft_insulation_recommendation_150mm_insulation(self):
epc_record = EPCRecord()
@@ -107,14 +107,14 @@ class TestRoofRecommendations:
assert not roof_recommender4.recommendations
- roof_recommender4.recommend(phase=0)
+ roof_recommender4.recommend(phase=0, default_u_values=True)
assert len(roof_recommender4.recommendations) == 1
- assert roof_recommender4.recommendations[0]["total"] == 1552.5
- assert roof_recommender4.recommendations[0]["new_u_value"] == 0.13
+ assert roof_recommender4.recommendations[0]["total"] == 1653.0
+ assert roof_recommender4.recommendations[0]["new_u_value"] == 0.14
assert roof_recommender4.recommendations[0]["starting_u_value"] == 0.3
- assert roof_recommender4.recommendations[0]["parts"][0]["depth"] == 200
+ assert roof_recommender4.recommendations[0]["parts"][0]["depth"] == 300
epc_record = EPCRecord()
epc_record.prepared_epc = {"county": "Somerset", "roof-energy-eff": "Good"}
@@ -139,7 +139,7 @@ class TestRoofRecommendations:
assert roof_recommender5.recommendations
assert len(roof_recommender5.recommendations) == 1
- assert roof_recommender5.recommendations[0]["parts"][0]["depth"] == 200
+ assert roof_recommender5.recommendations[0]["parts"][0]["depth"] == 300
def test_loft_insulation_recommendation_270mm_insulation(self):
# We shouldn't recommend anything in this case
diff --git a/recommendations/tests/test_window_recommendations.py b/recommendations/tests/test_window_recommendations.py
index ae6c6377..baef3574 100644
--- a/recommendations/tests/test_window_recommendations.py
+++ b/recommendations/tests/test_window_recommendations.py
@@ -48,13 +48,13 @@ class TestWindowRecommendations:
'starting_u_value': None, 'new_u_value': None, 'sap_points': None, 'already_installed': False,
'total': 7980.0, 'labour_hours': 0.0, 'labour_days': 0.0, 'is_secondary_glazing': False,
'description_simulation': {
- 'multi-glaze-proportion': 100, 'windows-energy-eff': 'Average',
+ 'multi-glaze-proportion': 100, 'windows-energy-eff': 'Good',
'windows-description': 'Fully double glazed',
'glazed-type': 'double glazing installed during or after 2002'
},
'simulation_config': {
'has_glazing_ending': True, 'glazing_type_ending': 'double',
- 'multi_glaze_proportion_ending': 100, 'windows_energy_eff_ending': 'Average',
+ 'multi_glaze_proportion_ending': 100, 'windows_energy_eff_ending': 'Good',
'glazed_type_ending': 'double glazing installed during or after 2002'
}
}
@@ -401,14 +401,14 @@ class TestWindowRecommendations:
'sap_points': None, 'already_installed': False, 'total': 7980.0, 'labour_hours': 0.0,
'labour_days': 0.0, 'is_secondary_glazing': False,
'description_simulation': {
- 'multi-glaze-proportion': 100, 'windows-energy-eff': 'Average',
+ 'multi-glaze-proportion': 100, 'windows-energy-eff': 'Good',
'windows-description': 'Fully double glazed',
'glazed-type': 'double glazing installed during or after 2002'
},
'simulation_config': {
'has_glazing_ending': True, 'glazing_coverage_ending': 'full',
'glazing_type_ending': 'double', 'multi_glaze_proportion_ending': 100,
- 'windows_energy_eff_ending': 'Average',
+ 'windows_energy_eff_ending': 'Good',
'glazed_type_ending': 'double glazing installed during or after 2002'
}
}
@@ -624,7 +624,7 @@ class TestWindowRecommendations:
'total_floor_area_ending': 61.0, 'floor_height_starting': 2.37, 'floor_height_ending': 2.37,
'hot_water_energy_eff_starting': 'Good', 'hot_water_energy_eff_ending': 'Good',
'floor_energy_eff_starting': 'NO_RATING', 'floor_energy_eff_ending': 'NO_RATING',
- 'windows_energy_eff_starting': 'Very Poor', 'windows_energy_eff_ending': 'Average',
+ 'windows_energy_eff_starting': 'Very Poor', 'windows_energy_eff_ending': 'Good',
'walls_energy_eff_starting': 'Very Poor', 'walls_energy_eff_ending': 'Very Poor',
'sheating_energy_eff_starting': 'NO_RATING', 'sheating_energy_eff_ending': 'NO_RATING',
'roof_energy_eff_starting': 'Very Poor', 'roof_energy_eff_ending': 'Very Poor',
@@ -666,7 +666,7 @@ class TestWindowRecommendations:
{'variable': 'glazed_type_ending', 'starting': 'not defined',
'simulated': 'double glazing installed during or after 2002'},
{'variable': 'multi_glaze_proportion_ending', 'starting': 0.0, 'simulated': 100},
- {'variable': 'windows_energy_eff_ending', 'starting': 'Very Poor', 'simulated': 'Average'},
+ {'variable': 'windows_energy_eff_ending', 'starting': 'Very Poor', 'simulated': 'Good'},
]
assert different == expected_different