From 5cc62ccabd30aecf94fe7895c1feb6bb5d8bb169 Mon Sep 17 00:00:00 2001 From: Guille Date: Wed, 7 Jun 2023 12:55:03 -0400 Subject: [PATCH] Complete the merge cities --- hub/city_model_structure/building.py | 4 +-- hub/city_model_structure/city.py | 7 ++++- tests/test_city_merge.py | 43 +++++++++++++++++++--------- tests/test_construction_factory.py | 1 - tests/test_db_factory.py | 2 +- tests/test_results_import.py | 4 +-- tests/test_systems_catalog.py | 6 ++-- 7 files changed, 43 insertions(+), 24 deletions(-) diff --git a/hub/city_model_structure/building.py b/hub/city_model_structure/building.py index 8111bb5e..06fcbf9b 100644 --- a/hub/city_model_structure/building.py +++ b/hub/city_model_structure/building.py @@ -302,7 +302,7 @@ class Building(CityObject): Set heating demand in Wh :param value: dict{DataFrame(float)} """ - self._heating = value + self._heating_demand = value @property def cooling_demand(self) -> dict: @@ -318,7 +318,7 @@ class Building(CityObject): Set cooling demand in Wh :param value: dict{DataFrame(float)} """ - self._cooling = value + self._cooling_demand = value @property def lighting_electrical_demand(self) -> dict: diff --git a/hub/city_model_structure/city.py b/hub/city_model_structure/city.py index e95348dc..282ab619 100644 --- a/hub/city_model_structure/city.py +++ b/hub/city_model_structure/city.py @@ -472,11 +472,16 @@ class City: for surface in building.surfaces: if surface.global_irradiance: parameter_city_building_total_radiation += surface.global_irradiance[cte.YEAR].iloc[0, 0] + merged_city_building_total_radiation = 0 for surface in merged_city.city_object(building.name).surfaces: if surface.global_irradiance: merged_city_building_total_radiation += surface.global_irradiance[cte.YEAR].iloc[0, 0] - if merged_city_building_total_radiation < parameter_city_building_total_radiation: + + if merged_city_building_total_radiation == 0: + merged_city.remove_city_object(merged_city.city_object(building.name)) + merged_city.add_city_object(building) + elif merged_city_building_total_radiation > parameter_city_building_total_radiation > 0: merged_city.remove_city_object(merged_city.city_object(building.name)) merged_city.add_city_object(building) diff --git a/tests/test_city_merge.py b/tests/test_city_merge.py index 5335798d..08f8b2f5 100644 --- a/tests/test_city_merge.py +++ b/tests/test_city_merge.py @@ -10,6 +10,8 @@ import subprocess from pathlib import Path from unittest import TestCase +import pandas as pd + from hub.city_model_structure.city import City from hub.imports.geometry_factory import GeometryFactory from hub.imports.results_factory import ResultFactory @@ -65,23 +67,36 @@ class TestCityMerge(TestCase): ResultFactory('sra', full_city, output_path).enrich() self.assertEqual(17, len(full_city.buildings), 'Wrong number of buildings') merged_city = full_city.merge(par_city) - buildings_with_radiation = 0 + merged_city_building_total_radiation = 0 for building in merged_city.buildings: - radiation = True for surface in building.surfaces: - if not surface.global_irradiance: - radiation = False - if radiation: - buildings_with_radiation += 1 - self.assertEqual(17, buildings_with_radiation, 'Some buildings have radiation') + if surface.global_irradiance: + merged_city_building_total_radiation += surface.global_irradiance[cte.YEAR].iloc[0, 0] + self.assertEqual(447383461, merged_city_building_total_radiation) merged_city = par_city.merge(full_city) - buildings_with_radiation = 0 + merged_city_building_total_radiation = 0 for building in merged_city.buildings: - radiation = True for surface in building.surfaces: - if not surface.global_irradiance: - radiation = False - if radiation: - buildings_with_radiation += 1 - self.assertEqual(17, buildings_with_radiation, 'Some buildings have radiation') + if surface.global_irradiance: + merged_city_building_total_radiation += surface.global_irradiance[cte.YEAR].iloc[0, 0] + self.assertEqual(447383461, merged_city_building_total_radiation) + + for building in par_city.buildings: + for surface in building.surfaces: + surface.global_irradiance[cte.YEAR] = pd.DataFrame([3], columns=['sra_mockup_value']) + + merged_city = full_city.merge(par_city) + merged_city_building_total_radiation = 0 + for building in merged_city.buildings: + for surface in building.surfaces: + if surface.global_irradiance: + merged_city_building_total_radiation += surface.global_irradiance[cte.YEAR].iloc[0, 0] + self.assertEqual(202699159, merged_city_building_total_radiation) + merged_city = par_city.merge(full_city) + merged_city_building_total_radiation = 0 + for building in merged_city.buildings: + for surface in building.surfaces: + if surface.global_irradiance: + merged_city_building_total_radiation += surface.global_irradiance[cte.YEAR].iloc[0, 0] + self.assertEqual(202699159, merged_city_building_total_radiation) diff --git a/tests/test_construction_factory.py b/tests/test_construction_factory.py index 4fc3d224..a7b40de1 100644 --- a/tests/test_construction_factory.py +++ b/tests/test_construction_factory.py @@ -104,7 +104,6 @@ class TestConstructionFactory(TestCase): self.assertIsNone(building.households, 'building households is not none') self.assertFalse(building.is_conditioned, 'building is conditioned') self.assertIsNotNone(building.shell, 'building shell is none') - self.assertIsNone(building.aliases, 'building alias is not none') def _check_thermal_zones(self, internal_zone): for thermal_zone in internal_zone.thermal_zones: diff --git a/tests/test_db_factory.py b/tests/test_db_factory.py index 3123c39d..3e5c18ea 100644 --- a/tests/test_db_factory.py +++ b/tests/test_db_factory.py @@ -80,7 +80,7 @@ class Control: ConstructionFactory('nrcan', self._city).enrich() UsageFactory('nrcan', self._city).enrich() WeatherFactory('epw', self._city).enrich() - ExportsFactory('sra', self._city, output_path, weather_file=weather_file, weather_format='epw').export() + ExportsFactory('sra', self._city, output_path).export() sra_file = str((output_path / f'{self._city.name}_sra.xml').resolve()) subprocess.run([self.sra, sra_file], stdout=subprocess.DEVNULL) ResultFactory('sra', self._city, output_path).enrich() diff --git a/tests/test_results_import.py b/tests/test_results_import.py index 471931fe..3534e454 100644 --- a/tests/test_results_import.py +++ b/tests/test_results_import.py @@ -49,7 +49,7 @@ class TestResultsImport(TestCase): self.assertIsNotNone(surface.global_irradiance) def test_meb_import(self): - ExportsFactory('sra', self._city, self._output_path, weather_file='CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw', weather_format='epw').export() + ExportsFactory('sra', self._city, self._output_path).export() sra_path = (self._output_path / f'{self._city.name}_sra.xml').resolve() subprocess.run(['sra', str(sra_path)]) ResultFactory('sra', self._city, self._output_path).enrich() @@ -67,7 +67,7 @@ class TestResultsImport(TestCase): def test_peak_loads(self): # todo: this is not technically a import - ExportsFactory('sra', self._city, self._output_path, weather_file='CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw', weather_format='epw').export() + ExportsFactory('sra', self._city, self._output_path).export() sra_path = (self._output_path / f'{self._city.name}_sra.xml').resolve() subprocess.run(['sra', str(sra_path)]) ResultFactory('sra', self._city, self._output_path).enrich() diff --git a/tests/test_systems_catalog.py b/tests/test_systems_catalog.py index d6b0dd32..25562b4a 100644 --- a/tests/test_systems_catalog.py +++ b/tests/test_systems_catalog.py @@ -15,11 +15,11 @@ class TestSystemsCatalog(TestCase): catalog = EnergySystemsCatalogFactory('montreal_custom').catalog catalog_categories = catalog.names() archetypes = catalog.names('archetypes') - self.assertEqual(18, len(archetypes['archetypes'])) + self.assertEqual(19, len(archetypes['archetypes'])) systems = catalog.names('systems') - self.assertEqual(16, len(systems['systems'])) + self.assertEqual(18, len(systems['systems'])) generation_equipments = catalog.names('generation_equipments') - self.assertEqual(6, len(generation_equipments['generation_equipments'])) + self.assertEqual(7, len(generation_equipments['generation_equipments'])) distribution_equipments = catalog.names('distribution_equipments') self.assertEqual(8, len(distribution_equipments['distribution_equipments'])) emission_equipments = catalog.names('emission_equipments')