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