From 11f78ccb89a59222d9ae1d0b22b29b76d50506f7 Mon Sep 17 00:00:00 2001 From: Saeed Ranjbar Date: Wed, 10 Jan 2024 16:10:42 -0500 Subject: [PATCH 1/6] added storage_medium attribute to thermal_storage_system.py to enable us use water thermodynamic characteristics in the modelling --- .../energy_systems/thermal_storage_system.py | 23 +++++++-- .../north_america_energy_system_catalog.py | 48 +++++++++++++++++-- .../energy_systems/north_america_systems.xml | 2 +- 3 files changed, 66 insertions(+), 7 deletions(-) diff --git a/hub/catalog_factories/data_models/energy_systems/thermal_storage_system.py b/hub/catalog_factories/data_models/energy_systems/thermal_storage_system.py index db10840b..9c54b4c1 100644 --- a/hub/catalog_factories/data_models/energy_systems/thermal_storage_system.py +++ b/hub/catalog_factories/data_models/energy_systems/thermal_storage_system.py @@ -8,7 +8,7 @@ Code contributors: Saeed Ranjbar saeed.ranjbar@concordia.ca from hub.catalog_factories.data_models.energy_systems.energy_storage_system import EnergyStorageSystem from hub.catalog_factories.data_models.construction.layer import Layer - +from hub.catalog_factories.data_models.construction.material import Material class ThermalStorageSystem(EnergyStorageSystem): """" @@ -17,7 +17,7 @@ class ThermalStorageSystem(EnergyStorageSystem): def __init__(self, storage_id, model_name=None, manufacturer=None, storage_type=None, nominal_capacity=None, losses_ratio=None, volume=None, height=None, layers=None, - maximum_operating_temperature=None): + maximum_operating_temperature=None, storage_medium=None): super().__init__(storage_id, model_name, manufacturer, nominal_capacity, losses_ratio) self._type_energy_stored = 'thermal' @@ -26,6 +26,7 @@ class ThermalStorageSystem(EnergyStorageSystem): self._height = height self._layers = layers self._maximum_operating_temperature = maximum_operating_temperature + self._storage_medium = storage_medium @property def type_energy_stored(self): @@ -75,13 +76,28 @@ class ThermalStorageSystem(EnergyStorageSystem): """ return self._maximum_operating_temperature + @property + def storage_medium(self) -> Material: + """ + Get thermodynamic characteristics of the storage medium + :return: [material + """ + return self._storage_medium + def to_dictionary(self): """Class content to dictionary""" _layers = None + # _medias = None if self.layers is not None: _layers = [] for _layer in self.layers: _layers.append(_layer.to_dictionary()) + + # if self.storage_medium is not None: + # _medias = [] + # for _media in self.storage_medium: + # _medias.append(_media.to_dictionary()) + content = { 'Storage component': { @@ -95,7 +111,8 @@ class ThermalStorageSystem(EnergyStorageSystem): 'volume [m3]': self.volume, 'height [m]': self.height, 'layers': _layers, - 'maximum operating temperature [Celsius]': self.maximum_operating_temperature + 'maximum operating temperature [Celsius]': self.maximum_operating_temperature, + 'storage_medium': self.storage_medium.to_dictionary() } } return content diff --git a/hub/catalog_factories/energy_systems/north_america_energy_system_catalog.py b/hub/catalog_factories/energy_systems/north_america_energy_system_catalog.py index 3e6c649a..41573149 100644 --- a/hub/catalog_factories/energy_systems/north_america_energy_system_catalog.py +++ b/hub/catalog_factories/energy_systems/north_america_energy_system_catalog.py @@ -28,7 +28,8 @@ class NorthAmericaEnergySystemCatalog(Catalog): def __init__(self, path): path = str(path / 'north_america_systems.xml') with open(path, 'r', encoding='utf-8') as xml: - self._archetypes = xmltodict.parse(xml.read(), force_list=['photovoltaicModules', 'templateStorages', 'demand']) + self._archetypes = xmltodict.parse(xml.read(), + force_list=['photovoltaicModules', 'templateStorages', 'demand', 'medias']) self._storage_components = self._load_storage_components() self._generation_components = self._load_generation_components() @@ -208,6 +209,9 @@ class NorthAmericaEnergySystemCatalog(Catalog): insulation_layer = Layer(None, 'insulation', insulation_material, thickness) thickness = float(tes['physical_characteristics']['@tankThickness']) / 100 # from cm to m tank_layer = Layer(None, 'tank', tank_material, thickness) + medias = self._load_medias() + media_id = tes['medium']['@media_id'] + medium = self._search_medias(medias, media_id) # the convention is from outside to inside layers = [insulation_layer, tank_layer] storage_component = ThermalStorageSystem(storage_id, @@ -219,7 +223,8 @@ class NorthAmericaEnergySystemCatalog(Catalog): volume, height, layers, - maximum_operating_temperature) + maximum_operating_temperature, + medium) storage_components.append(storage_component) for template in template_storages: @@ -238,6 +243,9 @@ class NorthAmericaEnergySystemCatalog(Catalog): tank_layer = Layer(None, 'tank', tank_material, thickness) # the convention is from outside to inside layers = [insulation_layer, tank_layer] + medias = self._load_medias() + media_id = template['medium']['@media_id'] + medium = self._search_medias(medias, media_id) storage_component = ThermalStorageSystem(storage_id, None, None, @@ -247,7 +255,8 @@ class NorthAmericaEnergySystemCatalog(Catalog): None, height, layers, - maximum_temperature) + maximum_temperature, + medium) storage_components.append(storage_component) return storage_components @@ -316,6 +325,39 @@ class NorthAmericaEnergySystemCatalog(Catalog): raise ValueError(f'Material with the id = [{material_id}] not found in catalog ') return _material + def _load_medias(self): + medias = [] + _medias = self._archetypes['EnergySystemCatalog']['medias'] + for _media in _medias: + media_id = _media['media']['@media_id'] + name = _media['media']['@media_name'] + density = _media['media']['@density'] + thermal_conductivity = _media['media']['@thermalConductivity'] + specific_heat = _media['media']['@heatCapacity'] + media = Material(media_id, + name, + None, + None, + None, + False, + None, + thermal_conductivity, + density, + specific_heat) + medias.append(media) + return medias + + @staticmethod + def _search_medias(medias, media_id): + _media = None + for media in medias: + if int(media.id) == int(media_id): + _media = media + break + if _media is None: + raise ValueError(f'media with the id = [{media_id}] not found in catalog ') + return _media + @staticmethod def _search_generation_equipment(generation_systems, generation_id): _generation_systems = [] diff --git a/hub/data/energy_systems/north_america_systems.xml b/hub/data/energy_systems/north_america_systems.xml index ce575841..eaa4c29a 100644 --- a/hub/data/energy_systems/north_america_systems.xml +++ b/hub/data/energy_systems/north_america_systems.xml @@ -2,7 +2,7 @@ ./schemas/ - + From 673cbac77a5cc63232fc2a27fd657088949328d7 Mon Sep 17 00:00:00 2001 From: Saeed Ranjbar Date: Wed, 17 Jan 2024 13:05:10 -0500 Subject: [PATCH 2/6] added storage_medium attribute to thermal_storage_system.py to enable us use water thermodynamic characteristics in the modelling --- .../energy_systems/thermal_storage_system.py | 8 +-- .../north_america_energy_system_catalog.py | 72 +++++++++---------- .../energy_systems/north_america_systems.xml | 18 ++--- 3 files changed, 48 insertions(+), 50 deletions(-) diff --git a/hub/catalog_factories/data_models/energy_systems/thermal_storage_system.py b/hub/catalog_factories/data_models/energy_systems/thermal_storage_system.py index 9c54b4c1..6c5382d7 100644 --- a/hub/catalog_factories/data_models/energy_systems/thermal_storage_system.py +++ b/hub/catalog_factories/data_models/energy_systems/thermal_storage_system.py @@ -87,16 +87,14 @@ class ThermalStorageSystem(EnergyStorageSystem): def to_dictionary(self): """Class content to dictionary""" _layers = None - # _medias = None + _medias = None if self.layers is not None: _layers = [] for _layer in self.layers: _layers.append(_layer.to_dictionary()) - # if self.storage_medium is not None: - # _medias = [] - # for _media in self.storage_medium: - # _medias.append(_media.to_dictionary()) + if self.storage_medium is not None: + _medias = self.storage_medium.to_dictionary() content = { 'Storage component': diff --git a/hub/catalog_factories/energy_systems/north_america_energy_system_catalog.py b/hub/catalog_factories/energy_systems/north_america_energy_system_catalog.py index 41573149..6ba78dfb 100644 --- a/hub/catalog_factories/energy_systems/north_america_energy_system_catalog.py +++ b/hub/catalog_factories/energy_systems/north_america_energy_system_catalog.py @@ -29,7 +29,7 @@ class NorthAmericaEnergySystemCatalog(Catalog): path = str(path / 'north_america_systems.xml') with open(path, 'r', encoding='utf-8') as xml: self._archetypes = xmltodict.parse(xml.read(), - force_list=['photovoltaicModules', 'templateStorages', 'demand', 'medias']) + force_list=['photovoltaicModules', 'templateStorages', 'demand']) self._storage_components = self._load_storage_components() self._generation_components = self._load_generation_components() @@ -209,9 +209,9 @@ class NorthAmericaEnergySystemCatalog(Catalog): insulation_layer = Layer(None, 'insulation', insulation_material, thickness) thickness = float(tes['physical_characteristics']['@tankThickness']) / 100 # from cm to m tank_layer = Layer(None, 'tank', tank_material, thickness) - medias = self._load_medias() - media_id = tes['medium']['@media_id'] - medium = self._search_medias(medias, media_id) + media = self._load_media() + media_id = tes['medium']['@medium_id'] + medium = self._search_media(media, media_id) # the convention is from outside to inside layers = [insulation_layer, tank_layer] storage_component = ThermalStorageSystem(storage_id, @@ -243,9 +243,9 @@ class NorthAmericaEnergySystemCatalog(Catalog): tank_layer = Layer(None, 'tank', tank_material, thickness) # the convention is from outside to inside layers = [insulation_layer, tank_layer] - medias = self._load_medias() - media_id = template['medium']['@media_id'] - medium = self._search_medias(medias, media_id) + media = self._load_media() + media_id = template['medium']['@medium_id'] + medium = self._search_media(media, media_id) storage_component = ThermalStorageSystem(storage_id, None, None, @@ -325,38 +325,38 @@ class NorthAmericaEnergySystemCatalog(Catalog): raise ValueError(f'Material with the id = [{material_id}] not found in catalog ') return _material - def _load_medias(self): - medias = [] - _medias = self._archetypes['EnergySystemCatalog']['medias'] - for _media in _medias: - media_id = _media['media']['@media_id'] - name = _media['media']['@media_name'] - density = _media['media']['@density'] - thermal_conductivity = _media['media']['@thermalConductivity'] - specific_heat = _media['media']['@heatCapacity'] - media = Material(media_id, - name, - None, - None, - None, - False, - None, - thermal_conductivity, - density, - specific_heat) - medias.append(media) - return medias + def _load_media(self): + media = [] + _media = [self._archetypes['EnergySystemCatalog']['media']['medium']] + for _medium in _media: + medium_id = _medium['@medium_id'] + name = _medium['@medium_name'] + density = _medium['@density'] + thermal_conductivity = _medium['@thermalConductivity'] + specific_heat = _medium['@heatCapacity'] + medium = Material(medium_id, + name, + None, + None, + None, + False, + None, + thermal_conductivity, + density, + specific_heat) + media.append(medium) + return media @staticmethod - def _search_medias(medias, media_id): - _media = None - for media in medias: - if int(media.id) == int(media_id): - _media = media + def _search_media(media, medium_id): + _medium = None + for medium in media: + if int(medium.id) == int(medium_id): + _medium = medium break - if _media is None: - raise ValueError(f'media with the id = [{media_id}] not found in catalog ') - return _media + if _medium is None: + raise ValueError(f'media with the id = [{medium_id}] not found in catalog ') + return _medium @staticmethod def _search_generation_equipment(generation_systems, generation_id): diff --git a/hub/data/energy_systems/north_america_systems.xml b/hub/data/energy_systems/north_america_systems.xml index eaa4c29a..f7c9eb3a 100644 --- a/hub/data/energy_systems/north_america_systems.xml +++ b/hub/data/energy_systems/north_america_systems.xml @@ -1,9 +1,9 @@ ./schemas/ - - - + + + @@ -73,32 +73,32 @@ - + - + - + - + - + - + From f976040f45ecd350b03c6a74ab0124b624b456bb Mon Sep 17 00:00:00 2001 From: Saeed Ranjbar Date: Thu, 1 Feb 2024 12:23:58 -0500 Subject: [PATCH 3/6] A new attribute "dual_supply_capability" is added to NonPVGeneration class in non_pv_generation_system.py and the catalogue importer is adjusted --- .../non_pv_generation_system.py | 14 +++++++++++-- .../north_america_energy_system_catalog.py | 20 +++++++++++++++---- .../energy_systems/north_america_systems.xml | 18 ++++++++--------- 3 files changed, 37 insertions(+), 15 deletions(-) diff --git a/hub/catalog_factories/data_models/energy_systems/non_pv_generation_system.py b/hub/catalog_factories/data_models/energy_systems/non_pv_generation_system.py index a33490d4..5b203d01 100644 --- a/hub/catalog_factories/data_models/energy_systems/non_pv_generation_system.py +++ b/hub/catalog_factories/data_models/energy_systems/non_pv_generation_system.py @@ -25,7 +25,7 @@ class NonPvGenerationSystem(GenerationSystem): maximum_cooling_supply_temperature=None, minimum_cooling_supply_temperature=None, heat_output_curve=None, heat_fuel_consumption_curve=None, heat_efficiency_curve=None, cooling_output_curve=None, cooling_fuel_consumption_curve=None, cooling_efficiency_curve=None, - distribution_systems=None, energy_storage_systems=None): + distribution_systems=None, energy_storage_systems=None, dual_supply_capability=False): super().__init__(system_id=system_id, name=name, model_name=model_name, manufacturer=manufacturer, fuel_type=fuel_type, distribution_systems=distribution_systems, energy_storage_systems=energy_storage_systems) self._system_type = system_type @@ -53,6 +53,7 @@ class NonPvGenerationSystem(GenerationSystem): self._cooling_output_curve = cooling_output_curve self._cooling_fuel_consumption_curve = cooling_fuel_consumption_curve self._cooling_efficiency_curve = cooling_efficiency_curve + self._dual_supply_capability = dual_supply_capability @property def system_type(self): @@ -254,6 +255,14 @@ class NonPvGenerationSystem(GenerationSystem): """ return self._cooling_efficiency_curve + @property + def dual_supply_capability(self): + """ + Get dual supply capability + :return: bool + """ + return self._dual_supply_capability + def to_dictionary(self): """Class content to dictionary""" _distribution_systems = [_distribution_system.to_dictionary() for _distribution_system in @@ -294,7 +303,8 @@ class NonPvGenerationSystem(GenerationSystem): 'cooling fuel consumption curve': self.cooling_fuel_consumption_curve, 'cooling efficiency curve': self.cooling_efficiency_curve, 'distribution systems connected': _distribution_systems, - 'storage systems connected': _energy_storage_systems + 'storage systems connected': _energy_storage_systems, + 'dual supply capability': self.dual_supply_capability } } return content diff --git a/hub/catalog_factories/energy_systems/north_america_energy_system_catalog.py b/hub/catalog_factories/energy_systems/north_america_energy_system_catalog.py index 6ba78dfb..fed83211 100644 --- a/hub/catalog_factories/energy_systems/north_america_energy_system_catalog.py +++ b/hub/catalog_factories/energy_systems/north_america_energy_system_catalog.py @@ -56,6 +56,9 @@ class NorthAmericaEnergySystemCatalog(Catalog): boiler_maximum_heat_output = float(boiler['@maximumHeatOutput']) boiler_minimum_heat_output = float(boiler['@minimumHeatOutput']) boiler_heat_efficiency = float(boiler['@nominalEfficiency']) + dual_supply = False + if '@dual_supply' in boiler.keys() and boiler['@dual_supply'] == 'True': + dual_supply = True boiler_component = NonPvGenerationSystem(boiler_id, name=name, system_type=system_type, @@ -65,7 +68,8 @@ class NorthAmericaEnergySystemCatalog(Catalog): nominal_heat_output=boiler_nominal_thermal_output, maximum_heat_output=boiler_maximum_heat_output, minimum_heat_output=boiler_minimum_heat_output, - heat_efficiency=boiler_heat_efficiency) + heat_efficiency=boiler_heat_efficiency, + dual_supply_capability=dual_supply) generation_components.append(boiler_component) for heat_pump in heat_pumps: heat_pump_id = heat_pump['@generation_id'] @@ -89,6 +93,9 @@ class NorthAmericaEnergySystemCatalog(Catalog): parameters = heat_pump['performance_curve']['parameters'] coefficients = list(heat_pump['performance_curve']['coefficients'].values()) cop_curve = PerformanceCurves(cop_curve_type, dependant_variable, parameters, coefficients) + dual_supply = False + if '@dual_supply' in heat_pump.keys() and heat_pump['@dual_supply'] == 'True': + dual_supply = True heat_pump_component = NonPvGenerationSystem(heat_pump_id, name=name, @@ -106,7 +113,8 @@ class NorthAmericaEnergySystemCatalog(Catalog): minimum_heat_supply_temperature=heat_pump_minimum_heat_supply_temperature, maximum_cooling_supply_temperature=heat_pump_maximum_cooling_supply_temperature, minimum_cooling_supply_temperature=heat_pump_minimum_cooling_supply_temperature, - heat_efficiency_curve=cop_curve) + heat_efficiency_curve=cop_curve, + dual_supply_capability=dual_supply) generation_components.append(heat_pump_component) for pv in photovoltaics: pv_id = pv['@generation_id'] @@ -143,6 +151,8 @@ class NorthAmericaEnergySystemCatalog(Catalog): for template in templates: system_id = template['@generation_id'] system_name = template['@name'] + if '@dual_supply' in template.keys() and template['@dual_supply'] == 'True': + dual_supply = True if 'storage_id' in template.keys(): storage_component = template['storage_id'] storage_systems = self._search_storage_equipment(self._load_storage_components(), storage_component) @@ -158,7 +168,8 @@ class NorthAmericaEnergySystemCatalog(Catalog): system_type=system_type, fuel_type=fuel_type, heat_efficiency=heat_efficiency, - energy_storage_systems=energy_storage_system) + energy_storage_systems=energy_storage_system, + dual_supply_capability=dual_supply) generation_components.append(boiler_template) elif "Heat Pump" in system_name: system_type = 'heat pump' @@ -173,7 +184,8 @@ class NorthAmericaEnergySystemCatalog(Catalog): supply_medium=supply_medium, fuel_type=fuel_type, heat_efficiency=heat_efficiency, - energy_storage_systems=energy_storage_system) + energy_storage_systems=energy_storage_system, + dual_supply_capability=dual_supply) generation_components.append(heat_pump_template) else: electricity_efficiency = float(template['@nominalEfficiency']) diff --git a/hub/data/energy_systems/north_america_systems.xml b/hub/data/energy_systems/north_america_systems.xml index f7c9eb3a..9ce9a4fe 100644 --- a/hub/data/energy_systems/north_america_systems.xml +++ b/hub/data/energy_systems/north_america_systems.xml @@ -17,7 +17,7 @@ - + COP source_temperature @@ -25,7 +25,7 @@ - + COP source_temperature @@ -33,7 +33,7 @@ - + COP source_temperature @@ -47,20 +47,20 @@ 6 - + 6 - + 6 - + 6 - - - + + + From ac4742d2c47ffd5595237e426038e8e1d4a0ad8c Mon Sep 17 00:00:00 2001 From: Saeed Ranjbar Date: Thu, 1 Feb 2024 12:24:15 -0500 Subject: [PATCH 4/6] A new attribute "dual_supply_capability" is added to NonPVGeneration class in non_pv_generation_system.py and the catalogue importer is adjusted --- .../energy_systems/montreal_custom_catalog.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hub/catalog_factories/energy_systems/montreal_custom_catalog.py b/hub/catalog_factories/energy_systems/montreal_custom_catalog.py index 0c0abb88..1c6bdba5 100644 --- a/hub/catalog_factories/energy_systems/montreal_custom_catalog.py +++ b/hub/catalog_factories/energy_systems/montreal_custom_catalog.py @@ -84,8 +84,9 @@ class MontrealCustomCatalog(Catalog): heat_efficiency=heating_efficiency, cooling_efficiency=cooling_efficiency, electricity_efficiency=electricity_efficiency, - energy_storage_systems=storage_systems - ) + energy_storage_systems=storage_systems, + dual_supply_capability=False + ) _equipments.append(generation_system) return _equipments From 3e193f04a63d081c58d95f340fca91d27b92a658 Mon Sep 17 00:00:00 2001 From: Saeed Ranjbar Date: Thu, 1 Feb 2024 15:41:05 -0500 Subject: [PATCH 5/6] The dual_supply_capability is added to the city model structure --- .../non_pv_generation_system.py | 19 +++++++++++++++++++ ...america_custom_energy_system_parameters.py | 2 ++ tests/test_systems_factory.py | 3 ++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/hub/city_model_structure/energy_systems/non_pv_generation_system.py b/hub/city_model_structure/energy_systems/non_pv_generation_system.py index 3dc044e5..fea1d7b2 100644 --- a/hub/city_model_structure/energy_systems/non_pv_generation_system.py +++ b/hub/city_model_structure/energy_systems/non_pv_generation_system.py @@ -42,6 +42,7 @@ class NonPvGenerationSystem(GenerationSystem): self._cooling_output_curve = None self._cooling_fuel_consumption_curve = None self._cooling_efficiency_curve = None + self._dual_supply_capability = None @property def nominal_heat_output(self): @@ -427,4 +428,22 @@ class NonPvGenerationSystem(GenerationSystem): """ self._cooling_efficiency_curve = value + @property + def dual_supply_capability(self): + """ + Get the capability of the generation component for simultaneous heat and cold production + + :return: bool + """ + return self._dual_supply_capability + + @dual_supply_capability.setter + def dual_supply_capability(self, value): + """ + Set the capability of the generation component for simultaneous heat and cold production + + :return: bool + """ + self._dual_supply_capability = value + diff --git a/hub/imports/energy_systems/north_america_custom_energy_system_parameters.py b/hub/imports/energy_systems/north_america_custom_energy_system_parameters.py index f898cdfa..92eb866e 100644 --- a/hub/imports/energy_systems/north_america_custom_energy_system_parameters.py +++ b/hub/imports/energy_systems/north_america_custom_energy_system_parameters.py @@ -120,6 +120,8 @@ class NorthAmericaCustomEnergySystemParameters: _generic_storage_system.type_energy_stored = 'thermal' _storage_systems.append(_generic_storage_system) _generation_system.energy_storage_systems = [_storage_systems] + if archetype_generation_system.dual_supply_capability: + _generation_system.dual_supply_capability = True _generation_systems.append(_generation_system) return _generation_systems diff --git a/tests/test_systems_factory.py b/tests/test_systems_factory.py index ce508b46..036048e9 100644 --- a/tests/test_systems_factory.py +++ b/tests/test_systems_factory.py @@ -141,4 +141,5 @@ class TestSystemsFactory(TestCase): self.assertLess(0, building.heating_consumption[cte.YEAR][0]) self.assertEqual(0, building.cooling_consumption[cte.YEAR][0]) self.assertLess(0, building.domestic_hot_water_consumption[cte.YEAR][0]) - self.assertLess(0, building.onsite_electrical_production[cte.YEAR][0]) \ No newline at end of file + self.assertLess(0, building.onsite_electrical_production[cte.YEAR][0]) + print('test') \ No newline at end of file From ebaec9bb7c9a8e5cddbdf5b9722c57ffb962f22f Mon Sep 17 00:00:00 2001 From: Saeed Ranjbar Date: Wed, 7 Feb 2024 18:54:09 -0500 Subject: [PATCH 6/6] Title: Finalizing the energy system data model and system factory A new XML file named montreal_future_systems.xml is created where the elements of the file are the same as attributes of various classes. Therefore, the catalogue importer and energy system importer should have been updated accordingly. The catalog importer is organized in a general method so whenever someone wants to create a new catalogue they can use the created code as the blueprint. --- hub/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 142 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 160 bytes .../__pycache__/catalog.cpython-39.pyc | Bin 0 -> 1360 bytes ...onstruction_catalog_factory.cpython-39.pyc | Bin 0 -> 2352 bytes ...rgy_systems_catalog_factory.cpython-39.pyc | Bin 0 -> 2521 bytes .../usage_catalog_factory.cpython-39.pyc | Bin 0 -> 2262 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 173 bytes .../construction_helper.cpython-39.pyc | Bin 0 -> 2135 bytes .../__pycache__/eilat_catalog.cpython-39.pyc | Bin 0 -> 6726 bytes .../__pycache__/nrcan_catalog.cpython-39.pyc | Bin 0 -> 6781 bytes .../__pycache__/nrel_catalog.cpython-39.pyc | Bin 0 -> 6860 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 172 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 185 bytes .../__pycache__/archetype.cpython-39.pyc | Bin 0 -> 4545 bytes .../__pycache__/construction.cpython-39.pyc | Bin 0 -> 2547 bytes .../__pycache__/content.cpython-39.pyc | Bin 0 -> 1935 bytes .../__pycache__/layer.cpython-39.pyc | Bin 0 -> 1836 bytes .../__pycache__/material.cpython-39.pyc | Bin 0 -> 3470 bytes .../__pycache__/window.cpython-39.pyc | Bin 0 -> 2248 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 187 bytes .../__pycache__/archetype.cpython-39.pyc | Bin 0 -> 1686 bytes .../__pycache__/content.cpython-39.pyc | Bin 0 -> 2056 bytes .../distribution_system.cpython-39.pyc | Bin 0 -> 5257 bytes .../electrical_storage_system.cpython-39.pyc | Bin 0 -> 3593 bytes .../emission_system.cpython-39.pyc | Bin 0 -> 1960 bytes .../energy_storage_system.cpython-39.pyc | Bin 0 -> 2526 bytes .../generation_system.cpython-39.pyc | Bin 0 -> 3319 bytes .../non_pv_generation_system.cpython-39.pyc | Bin 0 -> 10304 bytes .../performance_curves.cpython-39.pyc | Bin 0 -> 2748 bytes .../pv_generation_system.cpython-39.pyc | Bin 0 -> 5487 bytes .../__pycache__/system.cpython-39.pyc | Bin 0 -> 3195 bytes .../thermal_storage_system.cpython-39.pyc | Bin 0 -> 3810 bytes .../electrical_storage_system.py | 4 +- .../energy_systems/pv_generation_system.py | 4 +- .../energy_systems/thermal_storage_system.py | 4 +- .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 179 bytes .../__pycache__/appliances.cpython-39.pyc | Bin 0 -> 2500 bytes .../usages/__pycache__/content.cpython-39.pyc | Bin 0 -> 1407 bytes .../domestic_hot_water.cpython-39.pyc | Bin 0 -> 2393 bytes .../__pycache__/lighting.cpython-39.pyc | Bin 0 -> 2484 bytes .../__pycache__/occupancy.cpython-39.pyc | Bin 0 -> 2778 bytes .../__pycache__/schedule.cpython-39.pyc | Bin 0 -> 2779 bytes .../thermal_control.cpython-39.pyc | Bin 0 -> 3518 bytes .../usages/__pycache__/usage.cpython-39.pyc | Bin 0 -> 4346 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 175 bytes .../montreal_custom_catalog.cpython-39.pyc | Bin 0 -> 7584 bytes ...eal_future_system_catalogue.cpython-39.pyc | Bin 0 -> 14479 bytes ...erica_energy_system_catalog.cpython-39.pyc | Bin 0 -> 13483 bytes .../montreal_future_system_catalogue.py | 539 +++++++ .../energy_systems_catalog_factory.py | 8 + .../usage/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 166 bytes .../__pycache__/comnet_catalog.cpython-39.pyc | Bin 0 -> 7270 bytes .../__pycache__/eilat_catalog.cpython-39.pyc | Bin 0 -> 7229 bytes .../__pycache__/nrcan_catalog.cpython-39.pyc | Bin 0 -> 7551 bytes .../__pycache__/usage_helper.cpython-39.pyc | Bin 0 -> 4232 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 163 bytes .../__pycache__/building.cpython-39.pyc | Bin 0 -> 23721 bytes .../buildings_cluster.cpython-39.pyc | Bin 0 -> 1493 bytes .../__pycache__/city.cpython-39.pyc | Bin 0 -> 15031 bytes .../__pycache__/city_object.cpython-39.pyc | Bin 0 -> 8972 bytes .../city_objects_cluster.cpython-39.pyc | Bin 0 -> 2360 bytes .../level_of_detail.cpython-39.pyc | Bin 0 -> 3325 bytes .../parts_consisting_building.cpython-39.pyc | Bin 0 -> 1541 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 174 bytes .../__pycache__/plane.cpython-39.pyc | Bin 0 -> 2425 bytes .../__pycache__/point.cpython-39.pyc | Bin 0 -> 1321 bytes .../__pycache__/polygon.cpython-39.pyc | Bin 0 -> 11134 bytes .../__pycache__/polyhedron.cpython-39.pyc | Bin 0 -> 6422 bytes .../__pycache__/schedule.cpython-39.pyc | Bin 0 -> 3886 bytes hub/city_model_structure/building.py | 108 +- .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 179 bytes .../__pycache__/appliances.cpython-39.pyc | Bin 0 -> 3032 bytes .../__pycache__/construction.cpython-39.pyc | Bin 0 -> 3899 bytes .../domestic_hot_water.cpython-39.pyc | Bin 0 -> 2779 bytes .../__pycache__/household.cpython-39.pyc | Bin 0 -> 1180 bytes .../__pycache__/internal_gain.cpython-39.pyc | Bin 0 -> 3650 bytes .../__pycache__/internal_zone.cpython-39.pyc | Bin 0 -> 4668 bytes .../__pycache__/layer.cpython-39.pyc | Bin 0 -> 5254 bytes .../__pycache__/lighting.cpython-39.pyc | Bin 0 -> 3008 bytes .../__pycache__/occupancy.cpython-39.pyc | Bin 0 -> 3365 bytes .../__pycache__/surface.cpython-39.pyc | Bin 0 -> 11125 bytes .../thermal_archetype.cpython-39.pyc | Bin 0 -> 4095 bytes .../thermal_boundary.cpython-39.pyc | Bin 0 -> 9464 bytes .../thermal_control.cpython-39.pyc | Bin 0 -> 4876 bytes .../thermal_opening.cpython-39.pyc | Bin 0 -> 5647 bytes .../__pycache__/thermal_zone.cpython-39.pyc | Bin 0 -> 16178 bytes .../__pycache__/usage.cpython-39.pyc | Bin 0 -> 7264 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 178 bytes .../__pycache__/control_system.cpython-39.pyc | Bin 0 -> 1091 bytes .../distribution_system.cpython-39.pyc | Bin 0 -> 5572 bytes .../electrical_storage_system.cpython-39.pyc | Bin 0 -> 3258 bytes .../emission_system.cpython-39.pyc | Bin 0 -> 1898 bytes .../energy_storage_system.cpython-39.pyc | Bin 0 -> 3379 bytes .../__pycache__/energy_system.cpython-39.pyc | Bin 0 -> 4489 bytes .../generation_system.cpython-39.pyc | Bin 0 -> 4182 bytes ...generic_distribution_system.cpython-39.pyc | Bin 0 -> 3365 bytes .../generic_emission_system.cpython-39.pyc | Bin 0 -> 1265 bytes .../generic_energy_system.cpython-39.pyc | Bin 0 -> 3940 bytes .../generic_generation_system.cpython-39.pyc | Bin 0 -> 10538 bytes .../generic_storage_system.cpython-39.pyc | Bin 0 -> 2321 bytes .../non_pv_generation_system.cpython-39.pyc | Bin 0 -> 12455 bytes .../performance_curve.cpython-39.pyc | Bin 0 -> 4023 bytes .../pv_generation_system.cpython-39.pyc | Bin 0 -> 6052 bytes .../thermal_storage_system.cpython-39.pyc | Bin 0 -> 2858 bytes .../energy_systems/energy_system.py | 5 +- .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 172 bytes .../greenery/__pycache__/plant.cpython-39.pyc | Bin 0 -> 2975 bytes .../greenery/__pycache__/soil.cpython-39.pyc | Bin 0 -> 3753 bytes .../__pycache__/vegetation.cpython-39.pyc | Bin 0 -> 2439 bytes .../iot/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 167 bytes .../iot/__pycache__/sensor.cpython-39.pyc | Bin 0 -> 2244 bytes .../__pycache__/sensor_measure.cpython-39.pyc | Bin 0 -> 1471 bytes .../__pycache__/sensor_type.cpython-39.pyc | Bin 0 -> 855 bytes .../iot/__pycache__/station.cpython-39.pyc | Bin 0 -> 1501 bytes .../montreal_future_systems.xml | 1311 +++++++++++++++++ .../energy_systems/north_america_systems.xml | 2 +- .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 150 bytes ...gy_building_exports_factory.cpython-39.pyc | Bin 0 -> 3562 bytes .../exports_factory.cpython-39.pyc | Bin 0 -> 2674 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 166 bytes .../__pycache__/energy_ade.cpython-39.pyc | Bin 0 -> 11315 bytes .../__pycache__/idf.cpython-39.pyc | Bin 0 -> 24517 bytes .../insel/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 172 bytes ...nsel_monthly_energy_balance.cpython-39.pyc | Bin 0 -> 9241 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 158 bytes .../formats/__pycache__/obj.cpython-39.pyc | Bin 0 -> 3270 bytes ...plified_radiosity_algorithm.cpython-39.pyc | Bin 0 -> 4277 bytes .../formats/__pycache__/stl.cpython-39.pyc | Bin 0 -> 821 bytes .../__pycache__/triangular.cpython-39.pyc | Bin 0 -> 1449 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 150 bytes .../configuration_helper.cpython-39.pyc | Bin 0 -> 5964 bytes .../__pycache__/constants.cpython-39.pyc | Bin 0 -> 7358 bytes .../__pycache__/dictionaries.cpython-39.pyc | Bin 0 -> 8959 bytes .../geometry_helper.cpython-39.pyc | Bin 0 -> 9582 bytes .../__pycache__/location.cpython-39.pyc | Bin 0 -> 1791 bytes .../__pycache__/monthly_values.cpython-39.pyc | Bin 0 -> 1495 bytes .../__pycache__/peak_loads.cpython-39.pyc | Bin 0 -> 4068 bytes hub/helpers/__pycache__/utils.cpython-39.pyc | Bin 0 -> 1203 bytes .../data/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 155 bytes ...is_function_to_hub_function.cpython-39.pyc | Bin 0 -> 5750 bytes ...at_function_to_hub_function.cpython-39.pyc | Bin 0 -> 1195 bytes ...ft_function_to_hub_function.cpython-39.pyc | Bin 0 -> 1524 bytes ...eilat_construction_function.cpython-39.pyc | Bin 0 -> 1295 bytes ...treal_custom_costs_function.cpython-39.pyc | Bin 0 -> 2745 bytes ...nrcan_construction_function.cpython-39.pyc | Bin 0 -> 2919 bytes ..._nrel_construction_function.cpython-39.pyc | Bin 0 -> 2955 bytes .../hub_usage_to_comnet_usage.cpython-39.pyc | Bin 0 -> 3146 bytes .../hub_usage_to_eilat_usage.cpython-39.pyc | Bin 0 -> 1203 bytes .../hub_usage_to_hft_usage.cpython-39.pyc | Bin 0 -> 2926 bytes .../hub_usage_to_nrcan_usage.cpython-39.pyc | Bin 0 -> 3080 bytes ...eal_custom_fuel_to_hub_fuel.cpython-39.pyc | Bin 0 -> 1182 bytes ...e_to_hub_energy_demand_type.cpython-39.pyc | Bin 0 -> 1332 bytes ...al_function_to_hub_function.cpython-39.pyc | Bin 0 -> 9126 bytes ...ub_energy_generation_system.cpython-39.pyc | Bin 0 -> 1440 bytes ...ub_energy_generation_system.cpython-39.pyc | Bin 0 -> 2531 bytes ...ica_custom_fuel_to_hub_fuel.cpython-39.pyc | Bin 0 -> 1266 bytes ...e_to_hub_energy_demand_type.cpython-39.pyc | Bin 0 -> 1349 bytes ...orage_system_to_hub_storage.cpython-39.pyc | Bin 0 -> 1288 bytes ...ub_energy_generation_system.cpython-39.pyc | Bin 0 -> 1537 bytes ...to_function_to_hub_function.cpython-39.pyc | Bin 0 -> 3298 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 167 bytes .../loads_calculation.cpython-39.pyc | Bin 0 -> 4801 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 150 bytes .../construction_factory.cpython-39.pyc | Bin 0 -> 2527 bytes .../energy_systems_factory.cpython-39.pyc | Bin 0 -> 2789 bytes .../geometry_factory.cpython-39.pyc | Bin 0 -> 2594 bytes .../results_factory.cpython-39.pyc | Bin 0 -> 3133 bytes .../__pycache__/usage_factory.cpython-39.pyc | Bin 0 -> 2503 bytes .../weather_factory.cpython-39.pyc | Bin 0 -> 1643 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 163 bytes .../eilat_physics_parameters.cpython-39.pyc | Bin 0 -> 4268 bytes .../nrcan_physics_parameters.cpython-39.pyc | Bin 0 -> 4147 bytes .../nrel_physics_parameters.cpython-39.pyc | Bin 0 -> 4228 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 171 bytes .../construction_helper.cpython-39.pyc | Bin 0 -> 2921 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 165 bytes ...om_energy_system_parameters.cpython-39.pyc | Bin 0 -> 5364 bytes ...e_energy_systems_parameters.cpython-39.pyc | Bin 0 -> 5647 bytes ...om_energy_system_parameters.cpython-39.pyc | Bin 0 -> 5659 bytes ...ntreal_future_energy_systems_parameters.py | 161 ++ hub/imports/energy_systems_factory.py | 11 +- .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 159 bytes .../__pycache__/citygml.cpython-39.pyc | Bin 0 -> 5781 bytes .../__pycache__/geojson.cpython-39.pyc | Bin 0 -> 8355 bytes .../geometry/__pycache__/obj.cpython-39.pyc | Bin 0 -> 2576 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 175 bytes .../__pycache__/citygml_base.cpython-39.pyc | Bin 0 -> 1484 bytes .../__pycache__/citygml_lod1.cpython-39.pyc | Bin 0 -> 3040 bytes .../__pycache__/citygml_lod2.cpython-39.pyc | Bin 0 -> 3319 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 167 bytes .../geometry_helper.cpython-39.pyc | Bin 0 -> 3648 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 158 bytes .../__pycache__/energy_plus.cpython-39.pyc | Bin 0 -> 3320 bytes ...energy_plus_single_building.cpython-39.pyc | Bin 0 -> 3379 bytes .../energy_plus_workflow.cpython-39.pyc | Bin 0 -> 3325 bytes .../ep_multiple_buildings.cpython-39.pyc | Bin 0 -> 3727 bytes ...sel_monthly_energry_balance.cpython-39.pyc | Bin 0 -> 3885 bytes ...plified_radiosity_algorithm.cpython-39.pyc | Bin 0 -> 2307 bytes .../usage/__pycache__/__init__.cpython-39.pyc | Bin 0 -> 156 bytes .../comnet_usage_parameters.cpython-39.pyc | Bin 0 -> 7097 bytes .../eilat_usage_parameters.cpython-39.pyc | Bin 0 -> 7082 bytes .../nrcan_usage_parameters.cpython-39.pyc | Bin 0 -> 6130 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 158 bytes .../epw_weather_parameters.cpython-39.pyc | Bin 0 -> 5643 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 166 bytes .../__pycache__/weather.cpython-39.pyc | Bin 0 -> 3284 bytes .../test_results_import.cpython-39.pyc | Bin 0 -> 5470 bytes .../test_systems_catalog.cpython-39.pyc | Bin 0 -> 2539 bytes .../test_systems_factory.cpython-39.pyc | Bin 0 -> 6499 bytes tests/test_systems_catalog.py | 22 + tests/test_systems_factory.py | 38 + 211 files changed, 2167 insertions(+), 50 deletions(-) create mode 100644 hub/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/catalog_factories/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/catalog_factories/__pycache__/catalog.cpython-39.pyc create mode 100644 hub/catalog_factories/__pycache__/construction_catalog_factory.cpython-39.pyc create mode 100644 hub/catalog_factories/__pycache__/energy_systems_catalog_factory.cpython-39.pyc create mode 100644 hub/catalog_factories/__pycache__/usage_catalog_factory.cpython-39.pyc create mode 100644 hub/catalog_factories/construction/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/catalog_factories/construction/__pycache__/construction_helper.cpython-39.pyc create mode 100644 hub/catalog_factories/construction/__pycache__/eilat_catalog.cpython-39.pyc create mode 100644 hub/catalog_factories/construction/__pycache__/nrcan_catalog.cpython-39.pyc create mode 100644 hub/catalog_factories/construction/__pycache__/nrel_catalog.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/construction/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/construction/__pycache__/archetype.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/construction/__pycache__/construction.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/construction/__pycache__/content.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/construction/__pycache__/layer.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/construction/__pycache__/material.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/construction/__pycache__/window.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/energy_systems/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/energy_systems/__pycache__/archetype.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/energy_systems/__pycache__/content.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/energy_systems/__pycache__/distribution_system.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/energy_systems/__pycache__/electrical_storage_system.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/energy_systems/__pycache__/emission_system.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/energy_systems/__pycache__/energy_storage_system.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/energy_systems/__pycache__/generation_system.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/energy_systems/__pycache__/non_pv_generation_system.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/energy_systems/__pycache__/performance_curves.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/energy_systems/__pycache__/pv_generation_system.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/energy_systems/__pycache__/system.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/energy_systems/__pycache__/thermal_storage_system.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/usages/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/usages/__pycache__/appliances.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/usages/__pycache__/content.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/usages/__pycache__/domestic_hot_water.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/usages/__pycache__/lighting.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/usages/__pycache__/occupancy.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/usages/__pycache__/schedule.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/usages/__pycache__/thermal_control.cpython-39.pyc create mode 100644 hub/catalog_factories/data_models/usages/__pycache__/usage.cpython-39.pyc create mode 100644 hub/catalog_factories/energy_systems/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/catalog_factories/energy_systems/__pycache__/montreal_custom_catalog.cpython-39.pyc create mode 100644 hub/catalog_factories/energy_systems/__pycache__/montreal_future_system_catalogue.cpython-39.pyc create mode 100644 hub/catalog_factories/energy_systems/__pycache__/north_america_energy_system_catalog.cpython-39.pyc create mode 100644 hub/catalog_factories/energy_systems/montreal_future_system_catalogue.py create mode 100644 hub/catalog_factories/usage/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/catalog_factories/usage/__pycache__/comnet_catalog.cpython-39.pyc create mode 100644 hub/catalog_factories/usage/__pycache__/eilat_catalog.cpython-39.pyc create mode 100644 hub/catalog_factories/usage/__pycache__/nrcan_catalog.cpython-39.pyc create mode 100644 hub/catalog_factories/usage/__pycache__/usage_helper.cpython-39.pyc create mode 100644 hub/city_model_structure/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/city_model_structure/__pycache__/building.cpython-39.pyc create mode 100644 hub/city_model_structure/__pycache__/buildings_cluster.cpython-39.pyc create mode 100644 hub/city_model_structure/__pycache__/city.cpython-39.pyc create mode 100644 hub/city_model_structure/__pycache__/city_object.cpython-39.pyc create mode 100644 hub/city_model_structure/__pycache__/city_objects_cluster.cpython-39.pyc create mode 100644 hub/city_model_structure/__pycache__/level_of_detail.cpython-39.pyc create mode 100644 hub/city_model_structure/__pycache__/parts_consisting_building.cpython-39.pyc create mode 100644 hub/city_model_structure/attributes/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/city_model_structure/attributes/__pycache__/plane.cpython-39.pyc create mode 100644 hub/city_model_structure/attributes/__pycache__/point.cpython-39.pyc create mode 100644 hub/city_model_structure/attributes/__pycache__/polygon.cpython-39.pyc create mode 100644 hub/city_model_structure/attributes/__pycache__/polyhedron.cpython-39.pyc create mode 100644 hub/city_model_structure/attributes/__pycache__/schedule.cpython-39.pyc create mode 100644 hub/city_model_structure/building_demand/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/city_model_structure/building_demand/__pycache__/appliances.cpython-39.pyc create mode 100644 hub/city_model_structure/building_demand/__pycache__/construction.cpython-39.pyc create mode 100644 hub/city_model_structure/building_demand/__pycache__/domestic_hot_water.cpython-39.pyc create mode 100644 hub/city_model_structure/building_demand/__pycache__/household.cpython-39.pyc create mode 100644 hub/city_model_structure/building_demand/__pycache__/internal_gain.cpython-39.pyc create mode 100644 hub/city_model_structure/building_demand/__pycache__/internal_zone.cpython-39.pyc create mode 100644 hub/city_model_structure/building_demand/__pycache__/layer.cpython-39.pyc create mode 100644 hub/city_model_structure/building_demand/__pycache__/lighting.cpython-39.pyc create mode 100644 hub/city_model_structure/building_demand/__pycache__/occupancy.cpython-39.pyc create mode 100644 hub/city_model_structure/building_demand/__pycache__/surface.cpython-39.pyc create mode 100644 hub/city_model_structure/building_demand/__pycache__/thermal_archetype.cpython-39.pyc create mode 100644 hub/city_model_structure/building_demand/__pycache__/thermal_boundary.cpython-39.pyc create mode 100644 hub/city_model_structure/building_demand/__pycache__/thermal_control.cpython-39.pyc create mode 100644 hub/city_model_structure/building_demand/__pycache__/thermal_opening.cpython-39.pyc create mode 100644 hub/city_model_structure/building_demand/__pycache__/thermal_zone.cpython-39.pyc create mode 100644 hub/city_model_structure/building_demand/__pycache__/usage.cpython-39.pyc create mode 100644 hub/city_model_structure/energy_systems/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/city_model_structure/energy_systems/__pycache__/control_system.cpython-39.pyc create mode 100644 hub/city_model_structure/energy_systems/__pycache__/distribution_system.cpython-39.pyc create mode 100644 hub/city_model_structure/energy_systems/__pycache__/electrical_storage_system.cpython-39.pyc create mode 100644 hub/city_model_structure/energy_systems/__pycache__/emission_system.cpython-39.pyc create mode 100644 hub/city_model_structure/energy_systems/__pycache__/energy_storage_system.cpython-39.pyc create mode 100644 hub/city_model_structure/energy_systems/__pycache__/energy_system.cpython-39.pyc create mode 100644 hub/city_model_structure/energy_systems/__pycache__/generation_system.cpython-39.pyc create mode 100644 hub/city_model_structure/energy_systems/__pycache__/generic_distribution_system.cpython-39.pyc create mode 100644 hub/city_model_structure/energy_systems/__pycache__/generic_emission_system.cpython-39.pyc create mode 100644 hub/city_model_structure/energy_systems/__pycache__/generic_energy_system.cpython-39.pyc create mode 100644 hub/city_model_structure/energy_systems/__pycache__/generic_generation_system.cpython-39.pyc create mode 100644 hub/city_model_structure/energy_systems/__pycache__/generic_storage_system.cpython-39.pyc create mode 100644 hub/city_model_structure/energy_systems/__pycache__/non_pv_generation_system.cpython-39.pyc create mode 100644 hub/city_model_structure/energy_systems/__pycache__/performance_curve.cpython-39.pyc create mode 100644 hub/city_model_structure/energy_systems/__pycache__/pv_generation_system.cpython-39.pyc create mode 100644 hub/city_model_structure/energy_systems/__pycache__/thermal_storage_system.cpython-39.pyc create mode 100644 hub/city_model_structure/greenery/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/city_model_structure/greenery/__pycache__/plant.cpython-39.pyc create mode 100644 hub/city_model_structure/greenery/__pycache__/soil.cpython-39.pyc create mode 100644 hub/city_model_structure/greenery/__pycache__/vegetation.cpython-39.pyc create mode 100644 hub/city_model_structure/iot/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/city_model_structure/iot/__pycache__/sensor.cpython-39.pyc create mode 100644 hub/city_model_structure/iot/__pycache__/sensor_measure.cpython-39.pyc create mode 100644 hub/city_model_structure/iot/__pycache__/sensor_type.cpython-39.pyc create mode 100644 hub/city_model_structure/iot/__pycache__/station.cpython-39.pyc create mode 100644 hub/data/energy_systems/montreal_future_systems.xml create mode 100644 hub/exports/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/exports/__pycache__/energy_building_exports_factory.cpython-39.pyc create mode 100644 hub/exports/__pycache__/exports_factory.cpython-39.pyc create mode 100644 hub/exports/building_energy/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/exports/building_energy/__pycache__/energy_ade.cpython-39.pyc create mode 100644 hub/exports/building_energy/__pycache__/idf.cpython-39.pyc create mode 100644 hub/exports/building_energy/insel/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/exports/building_energy/insel/__pycache__/insel_monthly_energy_balance.cpython-39.pyc create mode 100644 hub/exports/formats/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/exports/formats/__pycache__/obj.cpython-39.pyc create mode 100644 hub/exports/formats/__pycache__/simplified_radiosity_algorithm.cpython-39.pyc create mode 100644 hub/exports/formats/__pycache__/stl.cpython-39.pyc create mode 100644 hub/exports/formats/__pycache__/triangular.cpython-39.pyc create mode 100644 hub/helpers/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/helpers/__pycache__/configuration_helper.cpython-39.pyc create mode 100644 hub/helpers/__pycache__/constants.cpython-39.pyc create mode 100644 hub/helpers/__pycache__/dictionaries.cpython-39.pyc create mode 100644 hub/helpers/__pycache__/geometry_helper.cpython-39.pyc create mode 100644 hub/helpers/__pycache__/location.cpython-39.pyc create mode 100644 hub/helpers/__pycache__/monthly_values.cpython-39.pyc create mode 100644 hub/helpers/__pycache__/peak_loads.cpython-39.pyc create mode 100644 hub/helpers/__pycache__/utils.cpython-39.pyc create mode 100644 hub/helpers/data/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/helpers/data/__pycache__/alkis_function_to_hub_function.cpython-39.pyc create mode 100644 hub/helpers/data/__pycache__/eilat_function_to_hub_function.cpython-39.pyc create mode 100644 hub/helpers/data/__pycache__/hft_function_to_hub_function.cpython-39.pyc create mode 100644 hub/helpers/data/__pycache__/hub_function_to_eilat_construction_function.cpython-39.pyc create mode 100644 hub/helpers/data/__pycache__/hub_function_to_montreal_custom_costs_function.cpython-39.pyc create mode 100644 hub/helpers/data/__pycache__/hub_function_to_nrcan_construction_function.cpython-39.pyc create mode 100644 hub/helpers/data/__pycache__/hub_function_to_nrel_construction_function.cpython-39.pyc create mode 100644 hub/helpers/data/__pycache__/hub_usage_to_comnet_usage.cpython-39.pyc create mode 100644 hub/helpers/data/__pycache__/hub_usage_to_eilat_usage.cpython-39.pyc create mode 100644 hub/helpers/data/__pycache__/hub_usage_to_hft_usage.cpython-39.pyc create mode 100644 hub/helpers/data/__pycache__/hub_usage_to_nrcan_usage.cpython-39.pyc create mode 100644 hub/helpers/data/__pycache__/montreal_custom_fuel_to_hub_fuel.cpython-39.pyc create mode 100644 hub/helpers/data/__pycache__/montreal_demand_type_to_hub_energy_demand_type.cpython-39.pyc create mode 100644 hub/helpers/data/__pycache__/montreal_function_to_hub_function.cpython-39.pyc create mode 100644 hub/helpers/data/__pycache__/montreal_generation_system_to_hub_energy_generation_system.cpython-39.pyc create mode 100644 hub/helpers/data/__pycache__/montreal_system_to_hub_energy_generation_system.cpython-39.pyc create mode 100644 hub/helpers/data/__pycache__/north_america_custom_fuel_to_hub_fuel.cpython-39.pyc create mode 100644 hub/helpers/data/__pycache__/north_america_demand_type_to_hub_energy_demand_type.cpython-39.pyc create mode 100644 hub/helpers/data/__pycache__/north_america_storage_system_to_hub_storage.cpython-39.pyc create mode 100644 hub/helpers/data/__pycache__/north_america_system_to_hub_energy_generation_system.cpython-39.pyc create mode 100644 hub/helpers/data/__pycache__/pluto_function_to_hub_function.cpython-39.pyc create mode 100644 hub/helpers/peak_calculation/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/helpers/peak_calculation/__pycache__/loads_calculation.cpython-39.pyc create mode 100644 hub/imports/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/imports/__pycache__/construction_factory.cpython-39.pyc create mode 100644 hub/imports/__pycache__/energy_systems_factory.cpython-39.pyc create mode 100644 hub/imports/__pycache__/geometry_factory.cpython-39.pyc create mode 100644 hub/imports/__pycache__/results_factory.cpython-39.pyc create mode 100644 hub/imports/__pycache__/usage_factory.cpython-39.pyc create mode 100644 hub/imports/__pycache__/weather_factory.cpython-39.pyc create mode 100644 hub/imports/construction/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/imports/construction/__pycache__/eilat_physics_parameters.cpython-39.pyc create mode 100644 hub/imports/construction/__pycache__/nrcan_physics_parameters.cpython-39.pyc create mode 100644 hub/imports/construction/__pycache__/nrel_physics_parameters.cpython-39.pyc create mode 100644 hub/imports/construction/helpers/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/imports/construction/helpers/__pycache__/construction_helper.cpython-39.pyc create mode 100644 hub/imports/energy_systems/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/imports/energy_systems/__pycache__/montreal_custom_energy_system_parameters.cpython-39.pyc create mode 100644 hub/imports/energy_systems/__pycache__/montreal_future_energy_systems_parameters.cpython-39.pyc create mode 100644 hub/imports/energy_systems/__pycache__/north_america_custom_energy_system_parameters.cpython-39.pyc create mode 100644 hub/imports/energy_systems/montreal_future_energy_systems_parameters.py create mode 100644 hub/imports/geometry/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/imports/geometry/__pycache__/citygml.cpython-39.pyc create mode 100644 hub/imports/geometry/__pycache__/geojson.cpython-39.pyc create mode 100644 hub/imports/geometry/__pycache__/obj.cpython-39.pyc create mode 100644 hub/imports/geometry/citygml_classes/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/imports/geometry/citygml_classes/__pycache__/citygml_base.cpython-39.pyc create mode 100644 hub/imports/geometry/citygml_classes/__pycache__/citygml_lod1.cpython-39.pyc create mode 100644 hub/imports/geometry/citygml_classes/__pycache__/citygml_lod2.cpython-39.pyc create mode 100644 hub/imports/geometry/helpers/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/imports/geometry/helpers/__pycache__/geometry_helper.cpython-39.pyc create mode 100644 hub/imports/results/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/imports/results/__pycache__/energy_plus.cpython-39.pyc create mode 100644 hub/imports/results/__pycache__/energy_plus_single_building.cpython-39.pyc create mode 100644 hub/imports/results/__pycache__/energy_plus_workflow.cpython-39.pyc create mode 100644 hub/imports/results/__pycache__/ep_multiple_buildings.cpython-39.pyc create mode 100644 hub/imports/results/__pycache__/insel_monthly_energry_balance.cpython-39.pyc create mode 100644 hub/imports/results/__pycache__/simplified_radiosity_algorithm.cpython-39.pyc create mode 100644 hub/imports/usage/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/imports/usage/__pycache__/comnet_usage_parameters.cpython-39.pyc create mode 100644 hub/imports/usage/__pycache__/eilat_usage_parameters.cpython-39.pyc create mode 100644 hub/imports/usage/__pycache__/nrcan_usage_parameters.cpython-39.pyc create mode 100644 hub/imports/weather/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/imports/weather/__pycache__/epw_weather_parameters.cpython-39.pyc create mode 100644 hub/imports/weather/helpers/__pycache__/__init__.cpython-39.pyc create mode 100644 hub/imports/weather/helpers/__pycache__/weather.cpython-39.pyc create mode 100644 tests/__pycache__/test_results_import.cpython-39.pyc create mode 100644 tests/__pycache__/test_systems_catalog.cpython-39.pyc create mode 100644 tests/__pycache__/test_systems_factory.cpython-39.pyc diff --git a/hub/__pycache__/__init__.cpython-39.pyc b/hub/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b825b540e5ae185e20733ce37bd032c9a1f0f0c GIT binary patch literal 142 zcmYe~<>g`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HqvsFxJacWU< zOlfXWettlIYq;;_lhPbtkwwF4RU H8HgDGB0nKk literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/__pycache__/__init__.cpython-39.pyc b/hub/catalog_factories/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..28c574d6c23e3d6f29538ccd5a628664de8108d0 GIT binary patch literal 160 zcmYe~<>g`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HkvsFxJacWU< zOlfXWettN(iCBn1(_z2BB!z@)k+!j8-W!^wQ?g zC+Iu)0on)XW9Ztq=&7@7DRtW%lEph7&)?4X&90;EZQr7`^YuIX(y^?c`p5brn{`OL zctV0%W9!6XHgm2m=6rU>HtU>QyKec7oPH3gD3u9ZLs?#p4dxIF4{EPrVDZ`qX!K&84uE*YQ8}p`Hw*QNEGvO*Ug`TeA-D&aOcz5lg{&;mS40W9_to<;|Br8*`Z-wDy8KsTK z3qvO3FvLx&iTdvix3u`fw9z!(sNa$fGjFM9yItS&J!2hG z4C7av%r^@ryU>e149o}&Mwlr`Y6d1j*%DT22ey`N(MX-Z(Q-q$sTX)!cEnQZ2fmhF zv79!8CNa3pymJz)>>F%}`4K9;Z21Smnr!95h83TgK;&BW z<~)g05TDc(PTuz^y7nJArm={M0+hNjM&YcXjJ*TB*n#29WJYPohsuD5oRbst1U}&b z0RGNo<{A0X`pLL&oEf358p=5%=McGPCd^%C07$DlSqHyGPl1>#EENe`o;2b1$_vAO zB6t{9&M1-)K2<~H-*5>V!zg0{_;x{0E}?QG93hcbWfxrZD|f0t_!IGP6<-rOFyM`J{sWQhvH z`(UWh`As}>kE{}(Ox~S$`AtUJvvVBi=!eS94D*p$7bP-_Z zqwXR?%mR&2zJ}5QJ_qnYCcXz-Gl1{h=0vUi{}JlEUPK6``BsD+i^1c&BGlSYQXI)u zDYL&}MaDGUFN1(|BjH&1A@eOvnMtUlFqEn*vVho0FG>pRM&>w=JUdm_<7ug7zQKjmZbMP&Un> z_O{65NEACD)W=(9}e64MGFhLDsbiz z+wxtL_|A3L8r{~Kd;|)Wi*-yS$8`;K;4cC^N(;7v4X8};@6!L{>#Ed_=gMbW=fJEs zN#rbedZ%MtT%E!wypu5<&R54URjPF~Hsk^vRkYy;EQ-2FYad~yevywVZ@Xq-2cxaP PT4lRU(lnvtV|vzKAaiPj literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/__pycache__/energy_systems_catalog_factory.cpython-39.pyc b/hub/catalog_factories/__pycache__/energy_systems_catalog_factory.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fbf450b75e7c653f674fe6438fdccd21ebfce376 GIT binary patch literal 2521 zcma)7L2n#26dupc?o1||w9u9U1!}2qSkx|6D-J|a)M`l!sH|2A1vEsmoUwOzBG1fX zdjh)(2bBB_4sguR0RF{XIdMh^i4)JB*=9FXQM|JEdHnqR{NDFI)3vqGf%esBzw&=t zj`N3^EVc$r9zj<_7?=||3^7-r)QwzZ$3yEIcBdf2@WV=nPMK{c0QFP}_hG8$|A+bMo<|G@*?%d#xd`mm85TSp<_V)kqdL5IpAiaKf4BzqaRclBsB(0L^^?V!G0MKGE4*~q-;$9 z51B5TBL9v{SQyic2`;4%dUC}mH_61LzEOILi(%>48s*A9Rot$fI`SH5{`*aDWAC}* zQtcI~%yYdrn8sr&(;Ag(Z(Qu#9#>EyRplgH?Jc`XmKCPm$<+9qWQiu^CLE8v=-C7?OnX4%af_haC5JdXM|_Y}%!c zD-G7<6&OyDylP|UA_+XA*w+67x=Ug)1f7f zy9-`jGN#o=pqQ5Az&+XjJTzgkuy_>&0}BHT^U45GG)#TXh{eEm2K-jBeVphi9wmo7 z!#cP8Z%Z8)D#=C*^Gc*e2{mvD62NX)*ke*2PE5dBSvjdrw4OogcfyUrz zw2%K8g>|`o@#k!79@NF+pHrHpjp&n0nOG_$vSj~-IRn;c`%>m!cvMwD?djZ7!ENnD uuNYfnE+E9JTj)fn>MgL*H4nneqFV-=RqnP7Qk9`Y&u^o)3*G$Opz$AlLbO!? literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/__pycache__/usage_catalog_factory.cpython-39.pyc b/hub/catalog_factories/__pycache__/usage_catalog_factory.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..81c1376f913d3c818d1d4e738685cb82b4e059ed GIT binary patch literal 2262 zcmbVNPjBl)5ck@S?Yc?J<2`slpU{E?QV|e+)|>cAmpn zD7u|;Emhbp##5CHN1Fb8OLv~{?9gtJ$AuCJr`^MoE*+|3G7kHyxR9}iO(7LMnj~o| z;ichdC1-SK7F1SrhKseVP=%HU@#3^j%){T{)2ueB+&AAE$MOrVKx}o3ESI`l ze=#gHdn)Gno%vw`i2s^zUGg*$@C_`<#)Z;Meq&x5j;#E-UW^ysZ7xg>pqG6Zq!kee zt1U?6hz;Qg_l88SY>0;NZY&6p2eK~$Bl{qmV8MDI8*)voe@{eHv~FBj355;8+pHd& zz|C*}v<}-CuP{!VcUhcziWeaO!sb|`Phg_2j`vO330mN@@ zVPBCSoFA>H)|JIv-O%0@xdwh-*)aEo1+bjnECf&S4-920!rFnd;n*r*Y>=dqvC12B z1zf2bY4NpGRg1-SAQ-w+`Jk-U(4xV{7&@nNOPLNTf5dZ<%5o~>|wXJHT%uvj#d@%xQ`@e~cdy8yp}uZW2jr6*FWL|#f@Jo0jpiV!PG z+qOa;sZAJeiFyfT{N{Ri0#fC(*x0=ZlM?T;8ndmH0BgPffR7psOMJbP?#I3R@EUNT zfu~+Y=^i+b<(OOVz*ddTo4v6Tn^F7!&`ieOhX#fAL1+@we0vG4@h{Mf8k7l7Nj*{d zKR}`fOnhGk0pp7i#`+D(>|jpJnDOIbu9CPesBxmFbeLSqoa(}qSd*SmXp?++XI`t! znQso+twHS4dE%SJ7%u)>L)x7}FOfVZF-h-EXzm3m*h_hKF8KZ~X#Wn~nr*KN(mZ`S zdub8#wA=@wwrks!Ka`qlt<(mXucU%MH~$C}7F<}#)45)o^xEr~hdIx%ZiI|wg_xKc z(q!zb2~X!cK4YSY8B?#o(N!>31r!oJRhYW!H5^{YA;1B%`j`UMBRqd3Q}9aJfuCkt)@9Z>1Z(Xohg88{?e2XfQ;C(w O^_!$=L&wJsoIe2;`9hWe literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/construction/__pycache__/__init__.cpython-39.pyc b/hub/catalog_factories/construction/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f0315105087f16d63b42e02e1a9b489cd841a856 GIT binary patch literal 173 zcmYe~<>g`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_evsFxJacWU< zOlfXWett1KIT%h#3HDbS_c= literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/construction/__pycache__/construction_helper.cpython-39.pyc b/hub/catalog_factories/construction/__pycache__/construction_helper.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e15c98a7f4b66726ffb5ed0a99b1d314a62722c6 GIT binary patch literal 2135 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 MRz~+=*|Vwr7x@|gV*mgE literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/construction/__pycache__/nrcan_catalog.cpython-39.pyc b/hub/catalog_factories/construction/__pycache__/nrcan_catalog.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ec96c428048c42d3742dbe00b2a441b0f36ee8e3 GIT binary patch literal 6781 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 NSy&lgpJmTE^}h=A{1gBH literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/construction/__pycache__/nrel_catalog.cpython-39.pyc b/hub/catalog_factories/construction/__pycache__/nrel_catalog.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ebcb3532c5f8d009e8f2b493b2154ec58efc3120 GIT binary patch literal 6860 zcmb7JO>7&-72aR&a!E>*M9FsSI2$KL%lrtA^Y5gATE%fvIIA^wv{R40;IAOPf9t#S~D`QhmG#6rl?AHu60ON&MK_RYVRwo7MQzw>oC(VD$R+lPccbni3g$Ej(Tyz zx7tZ3>bY${@xy4nHtaJi?+C6vn!a1lOpFas1are>C zPXg{NMjJc4v$~eJzyHKNb@J3HcQNXben+l3)Q7%|@GV`_4Zwf2FAkZJD^k%2W zqN~W+uhPsqeu%tz&ff_*GF41#^u;J!C@1(jWXs>=f7o%|%xu}`y6w=9V<_7iW-$CSk+G2$k>W2P5+zYn zm8nOSUG=7R3v!_4I<2776Ft?LPLuvn|M`OhBQe&^)VNu?rO*d_sHKW$y$N(1`0eVd z(yKqF#6LL+w9)TvB#eMhKX3#)AHlw3gkKd$NR^xATMFLfAXkyODsnZMn?P<-=IY5* zs;t+Mpj$_ab!XQ=uW6=W*~&}(sjb-ahxUx;uXV$I11i91WPPa>D({)MGhH+&vL&jX){iSb#AO5sC9%?l%+dD)a=QTOsqJJL*M4TiIi z#q_Ajo^B>+4zL(TBxiX4G;|$q918rn$@gWC|k=!WCg`V2`#Y_ZoUq zF+KJUsS`RDg%Xc~7ch2UM1X6?T@n&v%5C zgN09GZlbcn{chlKAC!OFd>{#~C9u@mYFpx)kt^8lBs-#m9rQw9!F1*wWuW0h3jR`?B! zT|vw06^-9uwLw|-of!3XdMBl3a-^xqa(z^;%JS5xTuZbe3V?@l>ZFyln$~um!30pE zrxOKaOfPX-Pf;GR0iQsbKThHl)l7k;eD3+nal|(gzt;}uZ!tnS1=%WQjU3&#W42 z#PBpyyZ|wT9RaQ`f07#{Lo^7I+EA;h`+om6oT}PCdM8AOFOJ7RO5a0)rUdC@uFz#=(IG8_1g5cS7Br|bZKH*B*kGD9y zLJ)g23S{KLX=H^ASrSM@EJ6cx2x7cM!h&c{WMI3W6lX|~KNpk5xdL!vYD^*LD>3*I zb)m@$Th5%?I$4e=kCTbB*^|-t60YZeu2f@kG0HYU02_^CXq%?jGPtGqM4c>!GUEs%X2{4N6N>hbX0^a zP-2cs)Szt3@RD2_@CFJk%QA46m06_$G)i4{s2fydxi%_SWtpf_jzIw`Tw_gYi7t!U z34G5aW=OONsswgF7*N1iLhfgSsdQ@HO6%mBf#A4| z-?715I+M<=TUWH}DnF6V4Q5s4y1Kc5bOI=+F{joYqzY0sola+WOM^x_d9#)_@?G)S z=I5KAVOP|W3G9jzoVNwip4_ADbYizE342bu^2U;I_M#^~1CwRDV`5<$$0Z6^C8lqy zZojtB4m(6GUO(yu{h0+GtOOiUZQv2>GM_Us>yry!B~8SG9q=t3+cJu;4|%%nZ}@HS za_8?l5PSkb0{0OH#@I$|E1<13Y`M%kY&D3*EP~_?$JtI2c)+pb}Nee=6Cx}#DK7Z*o@AdQE#WRcNmtMTcB@w(#gUSepI0EjC_-SvyOA4V_uz4tB zj|Zszt0c&7qB=4p(Sg0P)srW0IRfIZg6+i2LDM@=BV8czLlUo%xJZIdpyJTp=*7;6 z><_NUnD!F&f0p{!#+F1_`I#b%>OuJ!#@DR1HtJvrbP##XQN0ggztLwVlj>ly!Il%^q zP$MElt&!J0FKbO%YoZpe7`0|z+mf|JJq-|~My?mNrM&i9?@y_^s&sHJCwGbSwhmJI z!}x4coF)ph`AzRe-qt|dFUIGVw;j&yFTIVtttpAi9nEzPRE~ER=L#w-^%nB>CE5PM zX!dh7`@DTVd$fP5S5I)hPgS@A`(u4qeNRm_I*0eq;c~)t&jyJLz8GFGxj`6oK>)E! zo{;V@T=z6iz}?esv_X{M<6;U-u^RCmm)HaMOVnlwVWHeh(jChHP@Xdm(A}QC)VtD) zuF6ZTY@i?AR^P!HkY)8~`(0kt-HP5yc#5)tPyAw-vgnTw4KP0?3ex7qA5o`n<{ROmzq_&5~4ljdBX9$ zZp5~5n)O80^ES8qFt4#Zk40_I;}79Y@=}7+5s|wj$QSZ85*-pDi9OWGoV?4Zpkfv& zo`ygmuiMjh)jna*+0Q!nJ5!wMn@9Kt9>StqGP=Q`&CMxR7x&`yg4=I-NAHcUyM`K0 zcoa__+=ihSeOeI4^Tp6$J`0@W{f&6~F8dCTu=0Q|p18~2@+c&aTjII9>{|Q+c~%oo z-Ter3NtxYQK696yM==JcNbjrOU7Y0Dnj=1@|0ZOi=`6iFQ{BC@-fvp}KY%mzs{jB1 literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/data_models/__pycache__/__init__.cpython-39.pyc b/hub/catalog_factories/data_models/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c3aa860b803311fdfab92b5b6fbca7ed93d3d8f8 GIT binary patch literal 172 zcmYe~<>g`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_uvsFxJacWU< zOlfXWettg`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_qvsFxJacWU< zOlfXWett zaQ*c2AMBSoP5Toc)GGrI8_$@bRH zHgw%uy#dk}WW}{YE?~-5M>zF^ko^9Ztld~!Bk&R17tFE9=7X;`NnQBuR&hu84Q_`p z$haU|ZO3&v+(MXI@Ghy#4$<^i>w~_gFZ_^i*n`ozQ#{Lyb)A)7 z>8#9V4o&#oG>o5OvvRxy`e`;N^)l%5Y(eTXpf9o|shE|Rrn^`qqje&-YXt%H*kv$qaG`EM+k_TugNXDxpn!o#T9t#~cAM1~UN`Mui1o9EGNpqGL;sY< z+%uo#owC{)#EZ$knf;GzE~oI!VzOhdy^~+ArhnUetBH#cfB(?U^}VkHE`q&wQ}}+k zx6`o?EYa-ef?)5U{Y18YCZaXVhFEZTu*V=b(I(^yH`r5Mvp00~YO50$D6EzfQhEww z{wxTsl+%;`x^u(5v^w~at>X{+7wXvL?#Y1?X$=|o-K((C2-)Hx8Gf5MOm?md9=3(I zP9WN4M@1KyeBSC}7H-lDJ@Fnq#)iW_f_s3wRLgZsBS;QQ31%e$3`W~TI9d3VASiH2 zMqmU~73~JJ0h*Z+8k{gCo|_4H25~x4(tYA_WZ7^v{T(=W&^>-n`BsCFR zeiF6?7}!v-Esgx8Zf__~xn5MHM0zg?sggf2&l56?wB1c*Y+sH+&`nK3y#xcFDX7mV zsFjI=lwj|k0G9NU{WxT0a}*}wT!eug1?RR$yNm!A{KJDS_Wl0Nzjiz}k9M5ix&py?N`)V{lJT!i}l& zdjZUCMD!=5+KXkL}b+_P_;?ulYtfes*Of`d%d}KoDro-Ml8d?fnvn9kr5|X z#gt|xh0vg!LhvBZfU>|XBI(63OM&bxF@(;+KufVg38BG<#t2PH;NK;zhg!lBFegBS zh(d%&j|dSULbx(FuOCT1W1C`Tl11lX;JISaozc3e2u`A6DGlxAz$4{ZVSL9M>YZ#S za*M>3y8r_}D0bfdKX!U!W+Hh&ze*NT1*NXN02bfS?rZyVFN{cktw+Xdo=^Mc48^Grqz~&pk2X#bVLTeUMY$9;U>9)z~bB;P+3_-yGy-v5AlMN3@LwiIXTPjHut+{ z2N__P$982F+wWdUkuG*+ve@qqDeYhn%I()3BdN&?kDo}&~m#`*rj z9A$1F!n;30lV^X;F!iE73#8Xf_%r@4%ygBSKL+_>WdRv9vOP-UB1OL4c2O@;`m}Ai z{gFJS%(p2Omk?y3C45-+uyZ6ddKM$Km2OI5yFfz}<0L^vqAX(%YgcdwL_s$*g=Ir8 z=EvLIk>~MoImbhA?-iIL{sc}M@c#q(|BlfqV^uk2tg5abdl1ql+zv@tj#Y01BFo2Es($LbKlaGM}Cio$?WxCIQuXiy|j6)YI;TBbmW%927N zfj-60&{Gb{(J#;kDEbt<_S9EsFP&LRHd)Api&EIx*_q|?+iz!P6*QYZfoJpQUqs*$ z@;eTyj|qbVXlWaSAYCG;Fk(71x&}qvjLo6dwJ13x!V>lc5%wFSYYXQIX}Oc%;3dD4 zjM7X^!YoQgEDW+BPWmjY82u+FkDsyo>?jK5D3zdnFXSkTP9v%I+0o(25tzPc?}AJe zyB`OcRIuuJs-pf`#(uqId%Jsk489X4N<;zceEUO(^;I$%`zI9IqB$EdKuw1Pj2L2zg57MHAeH2Wk0>yb6jYRS)M0@qIU~m8} zeGNjAE(OXALA$27BTQjk(5@wI0rXsuH?-@3?g~%qF6b-5*SaTdxzeX%^(_?*(Y&x= zt`Gh-v9A5A;BRQ}hS=2Jrq~kO7o@u;3?P1|XjDm`-Sru=Q#pk=NK-H#hc4h;Jg6Jc zI?&S3LF6bnwubv+yZIlHb^UXK-z-92kCLkDNG)T!sgj@ETJ0(Ls_^yM#9pf z$zN&0xC$T)z+MhpZegV|J}uUP?kjk>&SuS^*R=GK&V0p2Z9%6TT@tkgxc_|7+3)?B z!iRg4p-PghcQOsn0yUgRL)tr=ywGhPj{GzTvqVKQ?Fk4_K7?qA(_R%rZO|T13yIc0VO8`&E~8PXT#W`%xZbUBBAa3N@f!^ z+GoI+Hnga+;q^P2DSyL%^E25{y$h4DmTKyI9~=!t$_pMemN>!6H~ur|Cab3E~l*w;yS{gwDGw% z!ihpPUXF4d9J>{i+coaWm2ZjetL5m*WMVp3>lj58W($BTHvz%mO0bZA(vj6C4K>h;C+AQd2jnq%zIATo^c~HO zcgB12o>KDC7xWzJ<-inlLe)dm(06VMsHFp_p#!L(1E`+^7wRh9qHmpuo?E#EwbYt@ z+`;mUsh`0$$g+eX?QnYrYI>~jifK9O1L$OHD5p^Yl{?9<@y0GpO%gx2?Ip;p(|?^Qq5Z zYVjr9DezxG|Gl}sPui9Hqz&9%U2<)ms0slV5B}q;Wqg*q!Eji%k;41Br0yHMVp1%{ JmfN5W^KbH%W#s?> literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/data_models/construction/__pycache__/content.cpython-39.pyc b/hub/catalog_factories/data_models/construction/__pycache__/content.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..606b5b679ac59b6928d42a6491072b87c9b72730 GIT binary patch literal 1935 zcma)6-HO{r6rPb}Th^}kFQoMEVhW|L198Llri4-woU#;_#WWOxaTpZMtgS`XI5RTA zMtimU429k$m-_;}E%Y&T+qdXd&lyXy9d=>IoTD={XO6$~8+JMYfpz%DU*gXOA^+lL zbGfj224p?~CdiPS5J81=O@wph45@HmlCC%Z8!m&sN=>HcQ5LI|MPU{uYRn>)W-`r! zmxC9t*kg7YM=~`Mq+bOb$LF!sPuc0o;1rI2=sf|hG<%$cnbcr#w$Sl-lCgho*zuF& zV+MZ_DJ|lV^?&)T&&FEKXTd$eFQnF7s?J$AIN+OET=i) zBzJ(*+y(CB9&lF>uuRXoUa`YN9Zh7mm`PLYaqzfKktqT`#W=@dVhW$Xi<AnQo)- zj7-jpVB=+H`(b5>dP^7s^OB zc1;j+a$%#i{1(E@*z+V|Ylm5!vTP!&Dz+M3sxkOCRO55&?TYQ)!wS%r)q7(4rp8of{ti4IqPPuD8!o=u zz;jsPsV&|U%hxrQvh?mig57c}5*&EnZ6MjNkd*eeaG*bE$=1yy5XR&Zy6%F!Ag_-u zot(a>x%1xnKt51P-Ufo^G^Uqsj&spje$mH1u7)7X6ce$XkD*=^!SlK`yRI#uq8ZL+ zG8IK9Q+%y?#tBwJ+Xow6&$_1%K-LJZaA6GTBiwG6ZPDT!t~mb@?mmWJC#uvr>+a$} zNW-b*9Hto#k9mUfF6VFOVN%|JO`#&rH4cr!pJ_FdI$NwTVV`I$PL08`==4LB*1)V} uyBsG7>Y7i1`P6g$rbB}*^4l7<&bp5N48C@Ao2|nCX$ALZRJUE~`Tqkh+rn@F literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/data_models/construction/__pycache__/layer.cpython-39.pyc b/hub/catalog_factories/data_models/construction/__pycache__/layer.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..18e0d1f5a6c06393e4036459d7b4c1269d941c0c GIT binary patch literal 1836 zcma)7Pj4eN6t`z4lgTt`yCC2INY+XS&7sk%Xth#>P(?r$QYjTH5XuHwvtu`PnHdM$ zIV1|F?PuV$2RQZ%aO1+qm@6l~0umDMIe(h1cBMM<^YgRk`S<=N@AXmwMPPEXEHLG(%g5m0T|L76-FW}qiC zqsEtx{dL0*9~~Ytc%aZmsGJSH{C2>`Mo%Z{xzSg$aBwK3VJA~nmJ${Rs*Rkpu@{(1 z_s45lrHyv-xL9lJ7kT;*7(g=GBwyp(DlZEZY>x;w$1v^pKqMJba7-X5xF8VWH5o>- zB_h$fCNJnP20j*T&$neuCL(!BMMtF95uA45bVqdkX)1bR7rx#Rd*I0Zrge(`nmYH4lOY9cGki(%qphW8_XJ=xsuY%bpr(}j2ceKt56eP^YyqiJQdcBAuI zahaQH6%{+WoIdw+l@I(PFPt_?+L3?^;T1%!v?GYcCUr*s`Tk_qB%G^SInMXc&IAad zvH#6?y?6TS3kAi))j%Gn_f8DVf?Rn&%s&Q4GIk=}GA)@BUT|cjo0|HF0R}I~sKIdG zP=k+pOP8bv+a^%r9at?!fW-4;2}Ox}g2?WGKp(#m21eST`FB8=4#+-)xkiyLQJ^wN z<9KP&JrNz=L9~wdtEkqM;icdq^z3V)VRQLt3)(7HYpwSL_4yr8o77{fW|f30#j;>* z6TCBBOKcw(rOw?NWcy7Zci`Y)3*_F?f16icL5Yz@bA3iV1V%u;U146~3RQO%{ucdC zMDQ|F^cT9IP<7$_{Q=f4gWPt|?3mL`DBm1&GczG*$s)54i;v~Jw|Sa9t9~@-#H@9D zZV<4SHa(~Lt)?vSN!qkm@7zt4x8S?SFfGfhK0&gDcGwXerRL{ol)NJLzw=lm2!)>96z7ctq&;*WqZAPnV{C NhONV5`A6+;_&=cRt1s8QgHmh|D^f^}3`V8pvY(eWb=!$9LQvlXq+fxgPtv|a;!o!!&=Jm~k? z1FbKx4Yql0G#9n`KTE8aLn}wCHX-Q)aeYTA=y-PQ&cYJX3-toD1~jz~A~s`#8gT)n z85cno;u6SWTn1T+DV4-a@7(8Oy%r4w?E-zWGI~pL<*C6`H3~b&(9_;|;ZJXJmJf>XKlk~?92HYq9YUo>Y^H$=vgMqHXCT*(7m$>Xc0c+2T48M?VKxN6E) z8$ZU}u`(R24G=t@98_0X`m=rwrIouWg#i&HH zBOs4WiSorH3hwlsFc{k80~ELuHz*QK^$1$ZQX8@0d{fdqo21G51@Qv%W~cjNobFfz z9OK`GFPu;hfzf7=E{}5s26i)?Ya`C=m!{-B{BPdpJ8#?50Aqm31zv-Jy$taB2zcyl zOi6q&NjyAjXxz8$o$iwRrG~FmRp$zH#AU{+bf<J1x*Lana&I={APRR&t_~wDN~F#8(20G2%#Yqs3a7GdAg=`HvBctz^S9ImI+^7H#BM^icZmD0qfSkm;N9;C?}r9br@e>hU5lnIwo ziJwZWo)kSU!>gOU7%WFGOfPYKO@p=T#Xf`yGE36gA8Qc3yO?d&S0F62WI@q0_~-jh3DLi4VO_5~m8XK!r)n0$=%2GGLcs zERsv_`S~}m*daR&0~x0h(K8`q74}03$L#dv{1lfSw;!QRfE`A@l7Rlk69@+viv4xX zjvgHyG5kW1fCzoodHQ{a4Is(J-Z>;g87O=xB(Re#j3S8_g|0zP*+4JAC}|HCYoi1b zC7%QfZ|%VM0zARmSRQ}XsQyJGLk=+=dW!Q9WCmpW$CJ&&K8%VCr@f2pCq0Ye;(b3*34}832`o20!U~Ae z9_DpfhrRh{+T#hHjfZilIB!t6>SzqpS^lQYd8pfqU4cnEib0sBjIDwwXXbwd3p@s(b}*igION{Qs@ zqZLYf1*Mf@+mhKAOJ?dq!pM(UGL~@|57^*P7yVo4*>};a;e*2!diM%?Mfq<@?b)5w zitb@A<`h{NvzMQZj=p^h*YaIlspdal;rgK9y3wIqa{lgyGx%{j_5l^0r5RvXN=AMC zDLc5-Qg%S9evtk=iAc^5*14}V2npJ4MUdO%?yD8*i^8P!HNMn9)L^<(KSm%>6Nl8V zbVX$xqAm_m6^CVE{qBV3ujb4|MJ!F zG@UEnytb#6qKc;PE_23oS+O5<#(wr}#!n z+F@9ZX)k{Ny6$wpNbA~mlKci~Ahj~*xyMN^vxsn=^ItMQDxOq07fHZ5?4s}79Rqd= zsL9IN*Jg`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_QvsFxJacWU< zOlfXWettsnIqldMHmV1T>4lDG)#iilmBR6m<$|a!8JTjXuU+d+ICn&~|25lBJ@D5*Y4~91iE3`DVrben4RS@aB#B)g|P2 zTx<>p7EeG-2$LiuBB^94&De-h)ScAH+>uMkF_Et9Toc)O%SIjPosphjeM1Qej&h|Z zGk!KRR%JXER;0y*3ms3Dot5fqUgc70V~av^VYuLNT7jwN#W`2)UDMn(!P)THPy9YV zNn({71={ygiAG_z zHhL1T9EY)hcfl5RESOie(5BDNgi?|}7x@J^;09NrZdcoP|A1tZ96SLlaZ@BZB^dVk*7M!SKZHu^xjeF%kH%cyE}4624ES; zU8vYzz4LTcm-#0F=j#;|MHmA+F*0H`P-h?m5OWu%1znJcEEvoX3wWfbJyv(3Tx6>5 zM$0<(oZ2-iJ+Iwn-(POu5RGK~Qw;j!7X~OXt}^KS8Du^+r8EVHWOy7@WG)b-Eo!1E0~4{U$@FJx_lMN3{q4W?-#G$MqxVIQXYEf9~6E k3pctg-0rrpEpi(XzWHCl)ZND|)Niq;3})Hw?y)`RAAXXq;s5{u literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/data_models/energy_systems/__pycache__/content.cpython-39.pyc b/hub/catalog_factories/data_models/energy_systems/__pycache__/content.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b1756708c3a736bb739ad7fcc94ce0863a717b50 GIT binary patch literal 2056 zcma)7&2HO95Z)yziKZmmap3+J-2y#S1)>H{Q4~Q@Bv68&s4ECH0u+Rb1;brSG$@kZ zr2)M=WhF*=4Z96}hBt z6Xce#3%LdIj&KUu2DvRdg}fuWV)u%;j@T3X@N5eMB6*Ovz(b7J^1j2+Ta=j}dRoJN z=tGL?g|Y!O0MefU%V6(_Ow(b{%G=yi{#2%mMC#n;x=5AIJA5J` zd0rYoK=NHK0-Zvn=Ec6($Sp0y)7;s(+bXZR?TwpmckALcQ9FR@Up{y|eyOF>lSPGj3<<;7^pgcR!hFz9pQad!z=S}3mB|h)j@`t z*nomT`UI$gvR6SV?cEW_QH^6=227sMgJcG|xh+H%Vz~iTez>;6*H*sV!1;NF^G3}( zqW-Q%y;-mSj~g5AM%*86+Sx$<^#<}UD&)85Zehm=;n#}7{04*xxq#+ABhSbm2Ny<0 z-_p!@YrG@xC?)5PpcxJ5g_+?rHkO|ba9&iCm!&ZifseiHsYUKQttUXwEJ`wOdPyQ9 zk$2M=TEEh~wpK-q#p*ii!I8K8RqMT9Q};meTOeKhqZk%-=svZLmzyxw)B$d{+aYgp4o95-0B7&RuUn(k=^4Xe zuY*G;@@A6r+~GK)<{`=*&d=vwSe}4c5&N90Hh$esRGdhaE>^Ix1r<&#wTlb^szYRJ wY=u;e4xCcB(;oq|sbxA%gKm?(qfl$uGt|fMEH*dU%IzOlaDPJeVgOk7f9Ue`YybcN literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/data_models/energy_systems/__pycache__/distribution_system.cpython-39.pyc b/hub/catalog_factories/data_models/energy_systems/__pycache__/distribution_system.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c88c8cf725c80754cee58772677fd8b63104e2f9 GIT binary patch literal 5257 zcmb_g&2!tv6$e1@3;M7u*>Y^l$tI~2GvhFxB!^Vvan+GjPaRdGMs?Dmq`|=4B?THF zm|f5+Y33B2+Eb66$)P>^-{@b^Gp;@L+?gD5sPo$e0f98A%1y!9)x*BU?t5?FzV~}_ z78WcG&*#sdGiycD{wZIwPXR9*XyOq%sx>sKQ^V7Jqha`kM!`25rY^?{UePZ#N{TkU zvR`Rbbd8y`_^sZkKGbN5mQOWW{?=$%w6d?&s{IvR)2!_-1%L@1uMzqj>!@*&xAo2)Ass9#go4c(T@_&V8nxVM9$PwMy32b_H9IU(cL zX3!gOw|yLvzrP?K-~0FzvKe%n0jI7*Hn+dnByAq_d)6KgI;gj`K9;F;cQ4KBab1K!?{a(a#Gz-Cv7y7h3icR`(iFeVkH7D*2%uZ7$sjg-3}HY zLcY~`{5JXRzhGyrR)~s^yU;!|cVLUC{JTMqed+L;9<9VC+YbZov{`I83@>i`t`PVl z9*LG7GMLtp7K}%la^37x#mfeo_y;AN*6vTUJT+IDF)XZ!FK&+a-ti;8xLV~$pA(eL%VfsHHClV{lHEPBVz zUJ4t|CHj6(9pbyTJaOJWW=?2(fe=h!zjo>?W6?x(&6Z>B zfh}T3OBt7KHukh+s5Tdwf_bf|dZw3^QEP5Itdv{M(e3U3uG)Jur%Y-#msM;zN3Ycx zYAsD`^+Mxs;>dq^y19P%STHUQ`#ukX@NjR?Ja)K04jSU{xc@}8aqzNRP7@|`nK+~f zXYu)p!(>}^@?d3rb8N?YZxB^%+wHocZLdm~yMj(Dl=SJ}@a9(L^VqfP$(K!p)%20H zY|4X6AVyk8`Qh*bcsn5vS(sb_m#UF<&fss|bpnraLN!#=xr`MrbdCfOTSb|MzlGPx zaOuzRSICQ^m4;VyM04o{g}R#xrQC%nRLiB9=^D{B7CEqdF6cU&ZTPv_z^~ zIZ~Z@=mn+QPNkEcOjo4bUw7P1X)Y&SeQPiz@i^2Clzx$vhMxv%BO zE$6(p#IN2u;&zeI+MF@6$volqW&9%~|NQ4?NX)N+aX%yQ?Hqw$-TQ*#|0y*%&G>sZ z_7S&5!ed5yh=nrmx126H3HVdugal!c_z3HA{8`}jeHSg2rTr0(4_JZ2PK~M(kvy3*5+d|^ZF3>BECk)hO$humBo+qyM!8A6E zqZQ)((ku;cf^n45Fz=q9$(A643##X*hc!NuG3J=1qAPMMgh?H@6?~b1$*G!`XQ{ac z2Fs{f%Q?tc#%Wx1K~>#pRTJ3p({!D{{;8VFv(&r=hM!UM-8?m?P~L=sMSLuCg2EMl z1R-$+)%!ZXK@D0sRqtD<8@i|{z5#0P=!*LpHOE{%n%}|P z0UEEN`+w}aG+j63?f5*|u~FP{28`D%{tkwQaXF#zAb(d5ti_;$WJ)A*Fvc-Q!}W;} zn5mT{UXZvz0fFiKe}MddH2lSR-zKSO#sWwmN5k7P(v!Hh0=(d4I?o)aX=`WU^3}UP zOg@?!35PdkM-Es`#%nI48JBlm8Bu{^Wj%%3xI`^nCT1?vSFISMdzArHe3a26D$D<3 z;1W$A)_Y*~(NtNi6)G<)y7{uC8!wGnv}x$(#Lv+2``&zME)FMZ@^L*gaT#jW-Q=mQ z$|^}#2DXh-TGm&6)U|drZ`)t@9dFDj+cpiFw#|uDqXGznqX-8VumqPuffr;~mYp)C z40y3UWfc`0RoWn97gd7Dl89H(NfQbQzSgno}{X{=uBTHDtazei#A?=vB~_vm0gs< dr22Vwi7NNw!+Ib~QXz{svvS3l*XNB&;YUsRj(7k7 literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/data_models/energy_systems/__pycache__/electrical_storage_system.cpython-39.pyc b/hub/catalog_factories/data_models/energy_systems/__pycache__/electrical_storage_system.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..595b03c15dd945d0bdee36787557d79d96ce705a GIT binary patch literal 3593 zcma)9&2Jk;6yLSiA93s?P12U~rJ-sG25PES;t)YqFl_`1R@A6zm7Gy zUF4PF(n=K<{sIng%%1^&#$Gvb=fnZ=-mKTL6Fc%+^Za(c{C@A-tWqgi@cgp`=F^w3Q&uDJ|;7xuyo zAUWy*482KqnGl>jVL=-%AR6ClDtVhc`#0#(s@m~dqM+SG3yGRsTpNEDhcEgkV1(7Q z!2%g>gQl;(v0Ap#{zB6cIiBPB*VZe$nFqeWi-s=%zrag|F9N^F%Z6V7zQUIbUjlxa zuNZz2_$z$X@MXTn*I!%B${WkEnoD5UYw`6*BkN6w9o@WHA|y5V(5yql*L|intTx=r z7%=1uFtRZ8*FZw+mGzrFum{O!2;y{=Gkky0=4LQ3N`8uq(_3ge9weNOPWVi<5fvj}?>xD%(c7j}Cg z?aCkEiZvR@ju$YWidM^WJrTJ5c!eIZ5InC>UrIlO3t$@;-SC9U7UiCHPnd$qb*hCw zHev3sR$>RIRcsmJ5hDbkfX;9forSVzR=4hwoM=7v25GL_Slcq(2=1$0@Lxn9_h z%f8fFX#6=(#;a3Mt)^$jKrNrgv^oXS+7v{mcDz8Tix#Hz)cW^Dee>X{7D^xVI!em$ zV5g4?=?vpfADr}#%ot_^iom4ugg)SqAE?2t4^ms1ya2BwryE%|089 z$o|Heq#K`-jqpUM4)Zq-&EZWYz=pvl98q3yZ04%A!k;;{6~=>lcSPPpZW+k?Fmwip zm5)B21?Hj)%?a!I2-eWA5_m&2z89W&y$dxUbI%=*b8WD4!VjCrMBf6VzzA6l&r_#0$tX2x&}Fgp7>T@+AvX8x?0k zxe5!lF(@-FbTJU;1k^AxB%TL|hQUkDf)^1X)=5;CfLWLY<{B(~J`b3S8Dvf{UmCGY z6oJIUq(g>@6b-QlIrTC_V5c(Gr>?`ogE84RX8F{)OgE?CTN8qtS-g^r;Zuf`!Lp5N7()#oRn6ironmn9j!#pob!+)GG5Mf~Ijgq8qT#7(?{Q zETc@REEAA0|1H5Vc^S>jZOqIt@Ee+hb{2*M16qZ49!3EMGz@KM7uwJ)v=@2i*Rp5- z2n_}_3fbr#)0LPG4lG7O37T-BWCl$2qbs|^4#t(8t_)y9wH&22n|M6BI<*KyN!cb? zwiTA7D6Q5et48Z-@TS$8?0Ie3{Z0J?0Nr3Y2o`Qfm5zxY$(^qBZO%=ndvsNYw`*HZ+V$o8t=Khg;4n_1mzj zOu5EZ7Gptw1f*y?4)hYX_1{t@W0wlEhQd>gs-tehcl;RoBlvq^{wbaHMzyits5aRf ljb0OvrAbXw7%=AMF+q*UC}>>#B2m%<>~%E$zjKP^?Ej7****XO literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/data_models/energy_systems/__pycache__/emission_system.cpython-39.pyc b/hub/catalog_factories/data_models/energy_systems/__pycache__/emission_system.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f86ffdd9c985d4f5995a620eeb329181bb70702b GIT binary patch literal 1960 zcma)7-HIDG6xRIMo*l0@2?-4)+oFq7>ijq%DZN-qNpY8@scTG@Kyh7!GSYgrjAtB4 z4%l(8vX9Xh*w^SQ^lol@(`P6YdX7By+Gbf+MrY0(X^uX9=f}L!hzX3JK75e>R0#PS zU)DzeFE3%5Pe2ILCr3nh!apa%|LFHU5ge0dIQa_}MBkuIbNtW_bEuT1mf8-*YWz zR7mtkA)9R-Y)hIOTHE~&K|^+E=?tcG)cKJ zVDBanvDHA`huMZ{_Cd_OIbme(gY@PBNPixJ3}&2K<=GXlx;(%}Nm(nVu9omtNvEC-u_oT4NAw0RDH_ zJ{Y_)Qk%hKr1RVkdeh{T>rok4GdP{Rb+b$^cES^zYbDJ!{6-wlI>%cudU_I#KT?XKpm&!x(dpioHpc`0l1o4uS;DkhBKmX-(PiXsi0sQ1GR%h2aOT)!cl&I-ezb-8y5l$Qf~kS2 zT&9WEJF?8J0Jl46GBvQ~{fuY|@e=dETBX|F%?~=Z# zl~A^lt!UVsT|)aB&No;USfwHU{)?)!{Vm=$K4}KsZns&-O2>?644NJGhe?Y1E@ST| zJS|shjEOv9Ok+1FBES!~u~Wyx7H)kPwyc45HG;@Awu2p*?vFC^!XU2s-sW_Bx^VUT U%MY&dR7Bq{aDIm_UA2YL|B^WFHvj+t literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/data_models/energy_systems/__pycache__/energy_storage_system.cpython-39.pyc b/hub/catalog_factories/data_models/energy_systems/__pycache__/energy_storage_system.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aa6aba54b606ad16578871b4937335935ffb8f66 GIT binary patch literal 2526 zcma)8-EP}96qaPgaTL4F&lX@m7}%m%V65@F78tN#7@B!OkS#NUrX2>)1ILK8qd*e9 zL%M)nU#)qWyv80wx4Y^q>}ETpY)4M*q6~O^cz8&j@BAsORtp>)KfQV--jp5ZAG0V9 z9~Vz?ss~88({{Maz1U5>w&yxW4li;4%Hh87UYFV>zH;W&%Yz-)ae~8CKyOIShDwWs zgiNzo_Q-``n)C$jF&)X2D7zh;o&NAE*&`=WC{iVmJLV$QQ8yB>Pfm_bPf+xv@d&8| zvKKQgAZW_|5Tf3NCVyX($B!OAAx)Wv5_rT&^YB@d^gs^!!70c~5o+Az0>~K?f|F+~ zy*y_?lvy<(Up)<{#~UHT+qobp(GZ;vv;?(JPNNvl{47(&;+H}TauB~{AVvf=U!WQT zh)CZkHIkXq{H<@$iB8?kN(bLJL&F!x%+;4D6;9hlcYEALw{BZEyKP^r@D*OZa$dXb zGV-guV)<3%*LYz03i9i`YWX$fYy6Jo1LW`W4a=|dO}=&Iw5#01fPIi{=fOHdoUAAE zkd3~$9}qH)V!ktt=E1qrz>HI4rWC5RLd>1nFuaGeiBsK2GIqxfb;cf2cU(g1jeVr0 z@d{F(J7|R4s;^}0ROJuRh~px`7{oMXiO6a+Vd- zsgzLEW>&qN`AWpyc2Kx6C|p>byKm#I>#D`ut{u38F#b)N`<)j`fa(kqkWzO}hv5Z- zWRhd5b1^u#bCT}V7%U+Ys>87WazLtM(!V#PdG6mVC(v_oqd&|lltyW!Dcv-Vv~}v0 z-TZI#>4KOwrUyc-z}YaonKm3IHe=_~x_tByLr2Jw&}8Bz5^*cq2Z4@G_fZZ}+Ox8{ z3noLaU0A~(>yVt>#bxG2{3HBTChksow6n;%h%dLRg2%M;m&;vD25(U<|w<43jU-V@9pb71nWv}b#q z0kQ-HK|M{r%n?m$<{iLH@hyx{4L1%7z!pZR*eRETx>ewx*iVQ3!eSW`EeVf8^DhB| zVGFjG7?jntq&JGkGt<1$y+uBs)2{n19QB&%t0spj%>rtAGKL-bDy4r8SUlNTrIgE% zQrN&ZvPvIhUw|IMma*(ZLrj^0NntSI2jeQ(F~oc-3dFQWC?PRw_H$TqeIGmWe?i4_ sgVjaT>bL4Xe2izZ5<3sUG*&AvTy0;n?YHu6j^jJi=#}Zyex+LaA662HivR!s literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/data_models/energy_systems/__pycache__/generation_system.cpython-39.pyc b/hub/catalog_factories/data_models/energy_systems/__pycache__/generation_system.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..868a79fad47afd2381533bb3248ca2d43a3cc425 GIT binary patch literal 3319 zcmbtW+iu%N5G5(|B@EYL$;{{JAs7mfb9=dBz@-ahq6M?S$hzkNGC#}kihm_j|2NY3>5d?$w;!N-a8I* z$b@9C!9C;vF6+^vhCf}j?MyaqI2`rjTAYb+c|Qt4ZLxhWrC_gkaDp2!MWY6!qx0YX zN$#lYafJs#7$qi9ILtl$rdc;)bJtZ-oPQmlWpH*iHQ_$$;9Z#-5~r^|!&QlHT$au{ zv~Bju<6xUS{R=WuYwPH3L+I_CxFvGJJk{H#%!|AzoN6ESb^-askH{C1FAFP~FCkwM z)r2o2UlW%S-a`JeSV{N_@>j&wUv;r6uAQ2=LltM%l9_dJJ(;PA8{+1v*1jYRjE{|Y z<@q!KQvAca7Gp0cG-i@hio7-(np%DjSQsvD2LP-nMiY^ zJW_L1K$;&Fkrsr8AoNzf7+ZE4ezq&(yd7{~#ueK~_j>7|X8SzoA8{w@g9KcD)JIV? z=*f7^78x&$_fhe6n@-jp*eZ3}L{Klqrjp)KT%Kt(6NOerU-g{2@=V*ch04|!>pIim z1{&lqx4G4Mtt6;U--j@aI(q}>n1eq~2-P|6A13cOH*Gp-2(DBef!UfGLUkrel0;RV zS?-R{*60o5l5M+z8`<_cDpr?}XhuPw{f0MZeoZ~zn0(=2t(ZQ<)0=p;fXqlcL2sSu z!v`1v45K5OgoP`TnJtj$oM4L`c_ELIsk#nW{O}`K!N0^7DY=Qm*l-2Ie?`Hg6^5&G zz+7<=NOgVq@KZ?S&-0)tPlN6R6%}W=O@#b2!vt4x_yxWbP-}CbXzS&$C>bK{XI0`N-Vh13EMG)i4IBsdjM;WNM=b&a5E=N4`Eo|U! z=&}m_Ez%6DDEKm?abr&7EQ2nh5Ir|D(7(B?x(wAd6l`Zu-I+&~DIFKYbux9_H1*jL zgg$!Z5oOdJJ=ZiovHmO39TUR!py zH59zaobA@!*{1M@_mXDywiN~ljoR1S`R;UZfL*JQCh7$(;Z7})t$b>n{EFIdfG5YM z8-*-7cGZGA1r>~Gc~}H1(Se4bdbKe0sG99%3~_JH5LtAST0gu$XOo?zDV%HM2L~54 z#g9`{q?MSBTg(5j#UeNpV_aTljO!?%d*h@?eLiQ56yK+h#IY3X2gr zR=5sb5;+W7@YxbvaV-k57f%-cFhyt#Kbu2%ZfQN=qNjeD+7}f9+r}18ZLjYUU$yO@ z`rI2!inc96$F|`XYKTic2zwHu0o);6RKS4|p=t$G9DuS2D1v}22X~3g>VCpeLjtnG z6@1kLBqiN6u><~XS%z*E7r!ewzfw%TYt?ITA3r19M}4}bAVBJDagHB4kRz^uB^#R% z(B&WKUfBK?8$VuTlMDH*={GV>zcF!T+VrQxbC(*RA|5~c&zmjC87LAsvcw`2#ig%O Vr+iI!14T92ELHWYzG5KF{R1n!a2@~v literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/data_models/energy_systems/__pycache__/non_pv_generation_system.cpython-39.pyc b/hub/catalog_factories/data_models/energy_systems/__pycache__/non_pv_generation_system.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..711df024b43bbddd45dde497756f7f443eabbbef GIT binary patch literal 10304 zcmb_iO>o=B6$U7Zl4wcR|F12re-%2iqS#67D30qyaoltqSGDV;rR70kE+hjb31&em z6$iN_?qsGjJ+#M84sCDlv4a?f!*d98QL(^{;Sa3-K3ayA5tRD6) zci*=^Z{O}mb7Um1;WPY~KUzP1Ueo@;U(`<)FE{Xb*N{-Hs8O9}%6cVJ%;;S1EB95h z#jKFC<^D>pnA5de8ttdKCmPLJxlj6v19ae?Rv2u|>6(_mS+&^iKDoE=)vXFCnRT=5 z?vkooC0p;2T?<;XZsW}p1@iZ{-ueN#NN(FDtLj;h-l0~tZtvI@+aR}ZZQVxJ<+XLB zE+ZGqX5C`>O}Dns?A^z8^2JkfY5me=vguY!E~BChi7I~w*XELivs73BG`;p0*O=`T*S|u)Yqa-U{E175)Wsy@y@kZTc z-Uhj6S{5aD&8mY6h{xa7Soqfd-G8EcwSpe>->(8agz+tl?YOLBR!i1qgY8)!GRJPk z9Taw8iGNM~EJZKgAJEyBR@5wWCxtu=d5TU8c?9wdofYyZY;q%-~^(pmom(mDSm(s_Rg>4JX>=_1w8F_}AsfnX@~ z42DgEY}Kq-LB4`@S2lz^jP=skF-!FZvsf^+(}1GBU$cTKYJ1_j#PTx2D!gEZFQ?so z!^3JdcP*J;I1%)FjT&kgGz`0H*9{{Wj+9Y#M%As@RkLh7w#>TWHtMxTJ(w~o=1=TO zqtcm+Iy!U5!ZOy*j$N{?YH2^1jq5DAZrQHx%4%ohYP%It%^iwKLuRzqZM& zk{E>Ou}G;_f)Z*!C6qW5*CF907wYJgghCVQ2pJ{rUxO22o|rT6;$EXt<2zBLo#`B} zD1SQc>afG2?BzH+rM~&NKx-tT@6H;ufteMVT{3ItBfE?-E1V9po>ksqIV@u~fFw8; zEe1Zv*&xs6Yn|~uJ(x_IqLWE8bh54Eqk$i3ANP^SoM;*x7o*rRJ(!WL$)Sm=nUM{4 z<#&uyRDMF1Q|ngerIJ4pnW)a9F==)@6BndqYAsP~%hI~ENx9tCH3>86w5&neomi#= zYeJcE#gRnwU{PeH%%ACw0f@dcCCvx{M!8EeH>I*Usc&^|_)T_>CN-lf(f?gI^kg+lE zV>jdEZ7vm%a5P>9iI!`gN;XYd{5@Lt{n)x_Q4l_jNH|%DyA!^)x*5^$9zt)A*j4g= zI~aI*vo5iW!Ay3GCml#GAn#2)5=kK$iCm(}BIpItQ@z;ZJ*vRLRn_agI#gRX3pOoz@Y#|NtMJS32;xoy!Qf?(8^66zh0_!{R z3adZ1Na*NExM@a+R{(ism8=NRD+dBNnFe4Dibp*FP(!dD0j$RW#6Y)pg!Z0pTmIbr zCNBRMpl}pB&n0(sM@v0g8agCCt)w%Hwy|&S&!*AczU_nRF(|aFa8C{NNp#;#=M4U~t`7#tg zQ*3@NdEB}i>t)Pf@0HkI#W^X5tOFL$T$;@6KPhz z0>y6?tIsFT7r8^o!$yxb+p*2kQPkWIEfyX4c^sw;s(LFb!!cZT+SNUaVcY!L*la!x z;}s}=r(j%9#wblxOo|Nc5$$_1TD~Q=g=x|Ls2t#WpLB?w`E6(7zH=3d-z(5wPKG9( zq}YGD4`qkLrv`1`1Rvv3W+J**q4>N9bZWqMXmmeJ9KFa<$^hq31BhL2ISt|l6kjM1 zuO2*r(r+IX%4iIa2qj5F`5F{|?g3@TPTGwU+(0foW%e>>pXyDcZB+UEmqC-b4C5|{ zFIJ)GIu45O#@j$AQ6aP#+f!+%IhFKR1@%hu*osA|USsqKt=t6-M+m}iJ~%leul2~0 z;XIv&^K~c!1?P(g;7q=l=@IcxBH~uSbaYtHq+z`d#oraI&mVxbWmtI0)C)>>8%3y`hV7qAYySom|HdOPI$k=s{lkwpyMtEH6X)?Sad&tF ziZ2yQ)(*DhFr$Hh_mz0g@q0nJ540|;g*x^TkHBb%92mZmX84;>fK`sWFeTnizK3j^ zM4Ywe%Tip={RslUo}+q0XA3k#`<{sRx4?c@!Hs^TL#qqzRq&&sR*$tA+7EpO59l!` zi-*7G@PH_DK$AHj$s7=04yY~%RG9;!%mGd2fFyH3kvSm998h8o2r&mVnFBJ+0Tt$e z2y;M#IUvCtP+$%SFbDLP1MEww`{5oQkDq6Ef%@Sv(CWX|exv;&^Fj7rcwL7p+>yF#v??lOg3Q`_ zaSB;oq*=!WUy#36Mxl~hsa+q&*!>3$Y0WFiQ?9L%wQFU!WR|__5M&L91i-$FMhhAC zJ^Tx140(6lM(TCg&F-S?C=6!2f0~Oo!=EK6v?_<>R?*1?5@c-J3~5HfX+}Y^1X+H; z+Y}t5xa)1s%4-O9JALr}!{%&T%p1BM5-QYSQBg$XOLTG6jK~-HdLle_5H;$05FOFb zTBPOYAi}vg@_?U$9ySGMLt5*-DVY&WCqX#M5P+MuAZ0K z>@acqQCnY?t@Ezr+jl}B-9o$?ku)M)>7jH;(#EKJt6TQNfu#kDBY}trqbXRNl<=b| zSRAEG!kxM)S)BHoB#V<)nPhRg>swM6a`b}%;Y6w+ge}^fj|lJtm7slO_qW`8fwZV0 zb{|VfVIMhrAt*?8flK_tobfwm#;;u&zq(}nQh@O@Hsd#hOx&vRi!FAEC;YO8@!Jo^ zkEo0v<`_ToFn%gvJZNS-hGaazVm$I-eD`NJc*1u-#&?oJR!}R!bdneIz_us42`?Dn zzu>{L?{pYjs58%ZryoJk`Ubxmtw|UUQ z(w&1oZx_z;-!E{7h2Jma4Nk2!%3K~cj1RDBN16e{pl-=91d$dD)|d+}xxOz*sPqv$ zc-&g!n>vDge`5SsDLsrOa%?i2>uL;MeN*f8Lo7)M^*1P_WIjftPXwK&i$oI2Mr{WXvO%pf~BtmCim E|CmfXg8%>k literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/data_models/energy_systems/__pycache__/performance_curves.cpython-39.pyc b/hub/catalog_factories/data_models/energy_systems/__pycache__/performance_curves.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8262bcadcd851135988144c25e84d4c1a0ca3828 GIT binary patch literal 2748 zcma)8PmkL~6t^93lJ#y{T2PUoDkFr*CT*jtJs_>vr6`mNX(>^+mC$Y~YvLJay>dKe z#@?>2aB7cy0))8t$QR(i$MBUCUjcF8y>b3{H>p%det9$V=DnHU`)Ar}IR-p`x*zag znuhT=4ysQL1`iFxRG$LFj3a}Y%nHqkb!3^wV}sS0{n}vmE9XgiEI{;!FnPlZ5>BhTOk*{{iWX$P7?m<0F$(o23!#fz|3P3oX0b)1NF*8p<>6fQSpYtOS#BJe0J_CYfY)NR z*T#{}H<-;fUK_8>qdM?)*3f(d_$J%bd=q$wZE1d!ZL=2abJ!Jd&(-4EfJWhr9)EA7kPsFjI4CxW?21YEElFt*H&P z#tblLKIz!Smg}J%H_2jNyzep|^N7(XaRI-8jzSI+@!Y&BTCOL!?+0E0L7+Mtg{^q# z7fwaV^)))2ii+*3hBt<6!8!ju?e7ksD=yVAok$^);UM!)sGQ6~L=8{Uk$z{<>iX0J z*9Tk;8N{zUftU!@5TkdTxn=08VZ21Myr$~KSUPgNT4Er=EE1E;0_WZC{SK8B5N|Bn^{b9t)RuRP}bxyE#~4n)2>WJ~Qh(+TvrL=nKyw zSp>3%;UrjC%Vi+b^`mUCEPFM!Q5op_l>OF{KUOdSgm- zyAHjQT*2WckPqQim_tS@zquL>%Q%0xc*y_IXUWJ8?~Qw;|HFU;k^V#PDv?SL!h}yC zQYoC418CY+t1B?=t=pi|I1aO_4su)DWZiX3gs+({t@@?^0VAv<@;xM&oE3zy9eoaO ziBLWNY!#u^?0-k3e!mbWVW1LBon_$w;LZe8cZLW;HYMOx5=-H6r3h8zxP6X+k+)yW zz&>6D@eWzVq>Pr*D|;mbZwVbt^tG^T!9s5VOJiN&EbsA-aHJRDsMgFyMVa*iefv3H z$8CxzjF5Op7!r=eznmDyRjnlq;QYqhZn+H$Uo37}&u^_dzpC)UJu#yYK3yuhX%0(o2kMiC!#cEnOap27Y9K@k?1yv=ZSi5AzjlQ&>L? z%QEfq_g}M-f3gbCg?&#tTiA*s=*eb$?1}I9qABE)$;X%Bx_aXhOt8 zu}HFY2bb4Dq;guFy}GpFhYMa<-2l=wZM#{wOy>%`4S1XQFHr_Q2_%Z(dHfVB5*SA3 X>D6_ri{_W*!S}HtDlD&dbG!CGMaJW4 literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/data_models/energy_systems/__pycache__/pv_generation_system.cpython-39.pyc b/hub/catalog_factories/data_models/energy_systems/__pycache__/pv_generation_system.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fdc491e22509057d5fc06a7cce2fca0fb9dc580e GIT binary patch literal 5487 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 RTRcq-X7T_Vea9GdnZq*6TKbXZhFP z#h-OT{=m-oV?yUPG<6FICoRG$Hv$?OErTLo3QD2bGBs}o< zwJN-_K^oQc93{lQ8wuI&v5lTeM94fhaf7(cl06|qH()A>rP~%v>1lgo{mx^y%+!z#szyM{T)|IpLKCj zGaN0t?F|oZdM>;d*1|{v%Ts`%R@jCs1ZNN3r~?Nug}tWCdq?;F1j;L+_uZb5z*HX~MBfcO+%W!37ajErFoLuw*vjCvRpRHKlU=YAHxH&-rYPr@c}80n z@D*M?Ai!6EpW?RWtH4k5n&ziOS=epL>n|vu;b#s^SUU~#vwTj^*I>S`XXp8Xo}J-~ z{Okc~oq0}7(wYUkpU)P5$gO(>R{!#4o3Wuc6lO2HVl{A;g4s0>TypdvUx8MFroIM} zkZ0s29ne8(U=FN7dCC)JdJ}i6u|5WbT?oEG?U6cbVB!M zKTJa>hI8G-kJ=76yXI3VvNNNTLc#qsY}7MTiC{Og3-@4j{c9}gpA!22}8ZIc$ekU={N;fdsoIG+guU>L=x$HZm{$zTPh@8+SZ#_qyQ5| zE3id^Bj~XPl~s7nYbwvcpZst{K0OFhIt!a`!zYjL%0fAQ6JYryhixh~?qssH!*hV17s7 zKGfbN@B1+E<%#mkRX{TmZ2BVLI2LxxZMXbEuZ{bj~)v+wRZjDScU|bQrk`W79?G+YE1P_wD==v(0c@ z;w|bg9q;a&g+FggG+$#zZ^|sU+Z7R%KS}HyV%1AB!{<6%Nle39a*45Co<(vF35H6E zAxEOeH_Ca!!^_^PIB0iQwXD2u$|_hqgU;SgA6H=YPtepgAjB}KNp0O`4V&5}LyzF- z;m-iR`nUPUoaBWmadZ`u zRl5>HNYcyIp_On59Sc^iOsxcopHy0Z5|Ke&nb%OB2m(0oFn3*oL5It)3v))3N|hP19wLs|7!Zl^D>j#F4%nbjJFpYbn0 Cz74tn literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/data_models/energy_systems/electrical_storage_system.py b/hub/catalog_factories/data_models/energy_systems/electrical_storage_system.py index 72e22c0e..3d17fba5 100644 --- a/hub/catalog_factories/data_models/energy_systems/electrical_storage_system.py +++ b/hub/catalog_factories/data_models/energy_systems/electrical_storage_system.py @@ -14,12 +14,12 @@ class ElectricalStorageSystem(EnergyStorageSystem): Energy Storage System Class """ - def __init__(self, storage_id, model_name=None, manufacturer=None, storage_type=None, + def __init__(self, storage_id, type_energy_stored=None, model_name=None, manufacturer=None, storage_type=None, nominal_capacity=None, losses_ratio=None, rated_output_power=None, nominal_efficiency=None, battery_voltage=None, depth_of_discharge=None, self_discharge_rate=None): super().__init__(storage_id, model_name, manufacturer, nominal_capacity, losses_ratio) - self._type_energy_stored = 'electrical' + self._type_energy_stored = type_energy_stored self._storage_type = storage_type self._rated_output_power = rated_output_power self._nominal_efficiency = nominal_efficiency diff --git a/hub/catalog_factories/data_models/energy_systems/pv_generation_system.py b/hub/catalog_factories/data_models/energy_systems/pv_generation_system.py index 232d5402..87228afa 100644 --- a/hub/catalog_factories/data_models/energy_systems/pv_generation_system.py +++ b/hub/catalog_factories/data_models/energy_systems/pv_generation_system.py @@ -14,7 +14,7 @@ class PvGenerationSystem(GenerationSystem): Electricity Generation system class """ - def __init__(self, system_id, name, model_name=None, manufacturer=None, electricity_efficiency=None, + def __init__(self, system_id, name, system_type, model_name=None, manufacturer=None, electricity_efficiency=None, nominal_electricity_output=None, nominal_ambient_temperature=None, nominal_cell_temperature=None, nominal_radiation=None, standard_test_condition_cell_temperature=None, standard_test_condition_maximum_power=None, cell_temperature_coefficient=None, width=None, height=None, @@ -22,7 +22,7 @@ class PvGenerationSystem(GenerationSystem): super().__init__(system_id=system_id, name=name, model_name=model_name, manufacturer=manufacturer, fuel_type='renewable', distribution_systems=distribution_systems, energy_storage_systems=energy_storage_systems) - self._system_type = 'PV system' + self._system_type = system_type self._electricity_efficiency = electricity_efficiency self._nominal_electricity_output = nominal_electricity_output self._nominal_ambient_temperature = nominal_ambient_temperature diff --git a/hub/catalog_factories/data_models/energy_systems/thermal_storage_system.py b/hub/catalog_factories/data_models/energy_systems/thermal_storage_system.py index 6c5382d7..d3cdf255 100644 --- a/hub/catalog_factories/data_models/energy_systems/thermal_storage_system.py +++ b/hub/catalog_factories/data_models/energy_systems/thermal_storage_system.py @@ -15,12 +15,12 @@ class ThermalStorageSystem(EnergyStorageSystem): Energy Storage System Class """ - def __init__(self, storage_id, model_name=None, manufacturer=None, storage_type=None, + def __init__(self, storage_id, type_energy_stored=None, model_name=None, manufacturer=None, storage_type=None, nominal_capacity=None, losses_ratio=None, volume=None, height=None, layers=None, maximum_operating_temperature=None, storage_medium=None): super().__init__(storage_id, model_name, manufacturer, nominal_capacity, losses_ratio) - self._type_energy_stored = 'thermal' + self._type_energy_stored = type_energy_stored self._storage_type = storage_type self._volume = volume self._height = height diff --git a/hub/catalog_factories/data_models/usages/__pycache__/__init__.cpython-39.pyc b/hub/catalog_factories/data_models/usages/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..27f39124ebf5866b9c6d84564147b45254453976 GIT binary patch literal 179 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 literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/data_models/usages/__pycache__/lighting.cpython-39.pyc b/hub/catalog_factories/data_models/usages/__pycache__/lighting.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ca7753f527c1cffbd956b1cce5349159aceffada GIT binary patch literal 2484 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 literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/data_models/usages/__pycache__/thermal_control.cpython-39.pyc b/hub/catalog_factories/data_models/usages/__pycache__/thermal_control.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8298ec64597f524673ce1a198e95e758641bf18f GIT binary patch literal 3518 zcmcgvPmkL~6rZsjJDcv`wouwFbc9r?L24+AxU8V6l)?&WwOY}xgwj-l>zO1Djwc;Y zD#c1q?FBvnrykm4zW`^%iO=9GC%yt)cr$Sl=g+Pd32-zoLLz=WT8*$Uw%_3Z7Bx*%CQt( z9w-1Am*ij&MiGZU1*|1cN!u*Qo~X4aYds-_;`iWeV{Wy;ulxZrpsJOXPU29+nR6H> zs*1DngP_CNAmV|>i&qJ5?!icY1Hw@QgX%1X8#c3;{Sq}CUg9ouxYx3-g1TN|<}&Z4 z^8z=@OGufm8Dwn$DY{#Hm>>|4a=iO!w z81r(r`EYDH(6zQ)daXjp{1OQwKS^LY@Ids*rRNrmI*jBNkP#jsibfVtJhFjWBL}EG zDgkvyF3=J~@J@VGb+aq9$NiXgxUa&vO%twYUxcyBcIMWe_`&y+y@3$X{NC%d^UM#Z z|I7~~|4A5yYDkmZfJp}EBKJ9TiQf#ZdYO~(sFl5Y$|<*ttj!_EJC}H7yJsD7x5&oG zKRZLVyToh;zD4p9==@Jw-*28ITqeyyPYR)$$HSoG%U&KNNwYI}Vn!aQwB-j%$dD&Z z2BAxP5JV9?tb;je=21-ZD6aK~S((x>4i%+a+Rp1hkmusbFTFDFDz(Y(BZwteay5`~ zfb~Q9rRRDWuW?~ALS5q%>385@gdA{1a-9(H31W0Y7;l9!XQTzm!k^}vRK%QwF{y(D z;XpemA^YQZ?vo=8!uD1qd}W|2mimQnvD8u+^^M78eY*kVeHe-MY2>Ci7X(}F2j`TH zu9Qu?&A%p^4o7)K6YUoT!Jq`7n=mGV-B=K;=z;n~=M-sXuG~xi19O$NB&%f7zIeMJ z(@JA4Mb9}U`*CV42nSNkEkv}m^XVeTLIq_5vJpv!iQ>I8>}c5OV0$?1bMgfd@yDXo zGOJ78`e;&q9vd87cI`ABYy&Eb9&G@QU{*N z&?!vX=s8sOF1n8%Uwm$j@M}D>UR!U_8;sG@3ZPKyyLOJ+bLcHVp$F(XIqJ-zUop)W zx`QtC23-&O2Yci&>y;bg=cQ2zIt4r3t?S;yw3X055+w)=108z49Hv{j%TKz_s+$s> zr&m;vM|qKWoL(zBvq`}-Z2a`Hm1jFlHJ?uk6BkI*Ni{E|!UDL=b_!O@QipTq`u#qS zS+=1BoyjS+i%V@^Q>CQN=u)S^s%uJFV{6<7P1$8@Q`<@tH`-}3PgiwN;$nfg3g9t} zkEly?yS`v-7&;|k5igesO~SInTGi~rB4Tblp`Lc zOazq5ci@#-xi1Ce12vSo_+}+jvlnEQHbBzRM60Tx6Mg=IOs4#qlCC>;EqU?*kTQ1c z@}`B~^Je3E*}~%?_1>eZCvU)i=Bi;IQoA{gd2jX!v{CTYV7_%`EmW=0Le<7CRBd8} b@liF~RcFh}pN} literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/data_models/usages/__pycache__/usage.cpython-39.pyc b/hub/catalog_factories/data_models/usages/__pycache__/usage.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f87b079c4a55aae1a1fec4a321b0efd5fb184881 GIT binary patch literal 4346 zcmbtXO^@3|7`7e9ah&XTce~qdVFW@VNKM=H0!u+#ZP6CAEKA!JkZ!SzXEy7V9j9Zb zC{{S2_QHSY0WL^AaODT^7r6P#iC=)kiT53U#G4N_5{_m(?k+EHJOP<+ zMfUuz?Q`l_Wbcy)d!)nte$P1K{yDQl04d{Szwfv%gIfqga~6?~c)&fs*~y-HKKDbm zYiFZ1ZOix@m`e>gE+2OtzY7iHZm;J$R@Y_$^z;KH;&eOEu6|+L{T?6#=qx@uW8AY` zpcZo9g(u7Re2)d8W8e3~uW%tY4qd!d=4HG&6UZW6639Y|Eavkp(-na% zrO0xQtkN}stgw~yReA|}67X3`-&@PyTc;c1y-O*wo+Fp(ra(4Q@%zD*p_Qr4mYvWVeyLj3?&cR27#FzlmValnUvzH>828kYo?WJFJ3moL}4cA6(tt0 znKV@xFbK`>QDco-tOm?Ija9*|I-*t`F#>_#3e2 z{~qt{oE!&?2Pb`x`+j(GG=Lr9UTU|&$yxt9QBsd#o?3S3bB6^d6nu#3fnB@sF`jsO zYxV}QZkkTl2~G17o-S6Bp~>UFXi?~+nZ0}n2C8uu_IcL^V-Zr(pfQxr#eqk6 zKvjh7voP^wB=Wl~ZQ@o7bSD{cha4gZ9xMpC02(r{!eFmtz6Lk3A4&Blc9C=gN`NAj zv?%eMO&oSka{IH%2?dZIxI_@Zbe5;CZ-p683?uw4tnkzdEZ3oX3rfavDcR9nVgH{h zDpW8<`a*5z8GyTmwQMKbKB7_ZEpx8xaN4>G#!t{G;gY=DH@p_QQ$i-BeL*w}v)FF}@M(el zM#8=@nec#f62G4l&m9xe1SeE5%IS3TSS?_%$HiHcw*dIEKsnWUKI5ERcXO_p=LD*! zKI91K_otK0k_&-?vsjwN@d^On6gZ~dEt|;}js$SLu#H8yG_>v{`cWC;m=b*?=6VQj zE&F(qX3yf5N1j=3pFxtAMkn#zA%7bNY$(F5#bxozxZgmo7L?R)%(;E{#Q5lLN8x6Y z*|@(Qppv4=YWmaV^!JZmkJeJz6=!Q)!8{BT7Sn`m7IU?} zi|x8;KJ8m>id0NUS#8tg1jdi`9`_+qh69f09G4(j5=)HBBDPFjX&K&3b`SqNi7kw^ zfQ69y@)AD5{p6UqCCjd03)jwZafJno8Fumd5YT{o$Cq5qlkfIQQq17SF{Q;VDczo>;$=i0NZY%L9zss#aI(a{4R%2Pg`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_WvsFxJacWU< zOlfXWettm!#$v$Hd2H=4F<|$LkeT-r}&y%}*)KNwovn_8Ev70MLssDgXcg literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/energy_systems/__pycache__/montreal_custom_catalog.cpython-39.pyc b/hub/catalog_factories/energy_systems/__pycache__/montreal_custom_catalog.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..29d54354bd9f290c52466af2ce07e9b63f3eb778 GIT binary patch literal 7584 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 neDvo>TJxC#AJZ_mPGbHbb4G4MKDg#9 Catalog: """ diff --git a/hub/catalog_factories/usage/__pycache__/__init__.cpython-39.pyc b/hub/catalog_factories/usage/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d126df0a9a1173f793eaa34b563e6995a432083a GIT binary patch literal 166 zcmYe~<>g`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HwvsFxJacWU< zOlfXWett16lGJh#3G7Nh>t~ literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/usage/__pycache__/comnet_catalog.cpython-39.pyc b/hub/catalog_factories/usage/__pycache__/comnet_catalog.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0be06d77e10e041d3764bf8da717b8bf192a24a4 GIT binary patch literal 7270 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 H&NKfDZP5_m literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/usage/__pycache__/nrcan_catalog.cpython-39.pyc b/hub/catalog_factories/usage/__pycache__/nrcan_catalog.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f31ba86cc6f3d5b0c30e06062e00f1fba2fe0fe2 GIT binary patch literal 7551 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 BY9Rms literal 0 HcmV?d00001 diff --git a/hub/catalog_factories/usage/__pycache__/usage_helper.cpython-39.pyc b/hub/catalog_factories/usage/__pycache__/usage_helper.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bd22447d8eaf4d4c60a27e3342bcba87cb3dd85b GIT binary patch literal 4232 zcma)9&2QUA7AN&V$+D8zPHZP}KE_VtSZ!n^ZrW{&ViA>+EdjD5h*I4U0SKBimY7nc zG9-ga2(X6+d)wP$PyPpTS@hJy9{11Su|4%#6ewz-Mc4XlDnBmZ@13>najUO%Zjd<@PfTYP}$u z1D%*q)X)u;qJ7J>RpS+L2r3w_R7!>j6V#^qp-QQa`pjv&H+Fieg#&MEYUU@HJ(uIX zL{ZnAn#Nku-(_e#1+o9ja~$Dh9!QE|UXGK*izJ8uk^)JC%zl(;1$O_0R$n_2z^9IPxP7L%~hX;Mmi}ir`e(<~na=XLc zJfkO09w+5H7x{P6@?G#b%|U=15KiGVp2HbDkF)p^zKpNn1-yut@YUn2ybjhiyo^`C zbA#N&tN8jG?pt1d59}NGrf=T|dkx?6?M<+6<2%0nfZQWn`0g=}5ng|jfT-LU*}(UF zKhu1R*MYk!^4Ar&)%%!|^m2ExU z?09o^O>_IIsSUij(o0wG_h9P|*IHdddzS5}4w8t|w{(;3LCb)U>78Ywvhn2ju4)dK zB|=}pX+Q^TucJ|4F7Bmwn+35|snb5d@X~M^ z;O(Z9OAfO|a-_P3^ZMXxJQ$`V*L+>J3@hjU{7LsYgLVw^0B`6p;! zHQgf^$)%9z33z^lU^K|`F99-b_KwZn$c{mP*RzE9BJpl7PK?)Gw7%8q6*!G?Qi=-Tkgc!E$8V4Cy_ zc+dr=p!RWei3QA`zTc)-83JL!TP>i#q62!3IWL3qC-@O6TC}ILo|9|f`f zRZ}|#ic1bRBS&%jFG6PHt}!Ebw$>%sHOM4^lW53dZp32PJ3-|HNN+$&KAnNO1x;@& zNNU0{T!;zq1$c+7JUP$GgzwY=X53%p89BnR(3AX}A|W^H;~nOx6TC22ADGHXu!CVA zzANfwgo}sgxp;Trj2wJEBL|M&gFO-)FJ^~%ua5F&ShyC1 z-Qhe7lt5KAXUws3VUC*BGoj3!E^C>hRxCX8QmuALV#eG-saOll zbgSHM`k=7etguc&Y6sqBm^K5_61)B~Yw-YPUur7Fl2qBNDLy2%_xC3tdL7H$+9fb!CPYQfFc8PMAdyUWx%Q}>u+Hxs(a)D|c&Zab8|&zcXJVz;G;V&8Zg2bBe} zzXO%#6Nv;L`TI@C_^scC6g>YBgcUx+3sH~I{xueOhV9__YwTxXEixWMe@l$VjPXg`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HAvsFxJacWU< zOlfXWettgzq~^pImlTyImy{Nz#>B^G b=4F<|$LkeT-r}$U%9iG&+JS8N48#lokfka> literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/__pycache__/building.cpython-39.pyc b/hub/city_model_structure/__pycache__/building.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..31b53a55f4c80fd1b2676ccc69c2fa91876ebd6e GIT binary patch literal 23721 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 aI!TP)rVmiHR7xGdQL!I8O5{J5ivK^J$ltjD literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/__pycache__/buildings_cluster.cpython-39.pyc b/hub/city_model_structure/__pycache__/buildings_cluster.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9b668d1fc7cff5d63c37fe16b15fcacda8009db0 GIT binary patch literal 1493 zcma)6&2HQ_5GM7vva&{8r#U!40p=DV@WOC!Mo=VC3nPG&Zjz=clnn@3JB1s<^1RXEgTqiExE?PJ}1jGdu2y z-g6TA^}ldL@UYHukxhM z1>85x@8(B&AAb*o6IcGw$7b-hUl*-r?g9gPi=ziKAJV=w^10+I1%Qy#_ zu1xQj*;M|TsF0e?D63{aAL4CYekQn_OL5<7Lw2$0hhQX$DKKma8ryHl7*p776+@3ptYA#ng4ubGXj{LXg*#;#7@xy01r3|X2dT0?LO zI#@RJUFi7LcfbgGN;s+L8Tr#X1^iS!wF_$2I2;P7IlmwupGJG5 z7g{PkstZ+?)o3_Nj}uia%CASq^FSMxN!?SZGj=){N@+fFao6MwFm!CgfEu}t7FM>kU1;I42ffl$}o5l z<5Csylo`e>GWk4-SJCo4yza8;15WiVn$L4l*J189^e&a}zDQ-Y`r$Ry4yppQ6L8-C zM!@fL{(GI|i`c zaca!Mr;gqCEE@DI+N?YYeRT^Kj0dCxG3^ETbj&u0Z}2tYwUY}{JMAg_F|^3=#uX?H XsHXJ(y*A|^P-Bfio!*Akw|x5(tb>hC literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/__pycache__/city.cpython-39.pyc b/hub/city_model_structure/__pycache__/city.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8cbed17fe61358cd40dace4cdcd060a6bf58581e GIT binary patch literal 15031 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 Zij^r~$LjqrU|*x~T>%GK{r}VE{{q+v-P`~G literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/__pycache__/city_object.cpython-39.pyc b/hub/city_model_structure/__pycache__/city_object.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..450328cbbba082857fc55caedef6b466f0a2796d GIT binary patch literal 8972 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 literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/__pycache__/city_objects_cluster.cpython-39.pyc b/hub/city_model_structure/__pycache__/city_objects_cluster.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..354819ebd061dcf4205310b93e03a18f22e34e1a GIT binary patch literal 2360 zcmbVOOK;mo5Z1@S*OK zE-dI&8^}NCsfXm~OOO2lz4Slu+Ef2RPn}sx32nXB zvkCbNC-ujI$$c2=3m}|$gi~(BG%-AbBHxG`iRqb|H)AWYJzMiu+)NzLp=6VAn>SAh zZwf;=C#Kip&JO9eia$Z1JBae*ul5c_n5#its9Z>vWW0!lyR-fI_v|j)ib9bp0o)@l z(mdLagzU4e&Fw8%`lNRcXeQa+IDo6}AR8acXmpUXKhD_tz4diA$kH&AJPO$0;Wq;| zl36i!w`GPJVUvTt?I;c;`!Y*a5Fd$Lum|x`AjO1n!5+(KFOV`~V?5MLUL3j~&IR|v z!2KJbkS;A74>ktyGPfd?!`t2g(=!QN4QGgF>yJ5`s0lEFcoe*BaOyRll6~+sZ=5=w zDJ*Vs>y(^O&jwz56!<3a4sYpoN3?`{lW_M}%9nWi)by5w1#9iuT8A&6nsBEhI)}@A z1!gF%^OTsxTY-pND_1W^W3uKlc6s>@0%c(wC><0am4b1_tVdE|pEVdq!mkUJ@;; z$aUnFf!u_l3?RgwyuQFVlzp{f4&2Mh&y>?0a%N0!Yo#)Xlu#_qauy}ySR_!vf-@my zR#`QK7+fD_`J5-P z1um(_9ID)|oE~Z?!c}~b$5PPIyA2FRkJAE_PU%ROM%u=;XLL%RQ#y~XG1<^A3^-@0 z_=#1C&+?4r2Vx%Y^PzrHv+xJKHS8L)1v*PR7>`BDVT#c&muiMz^zsU5^lSSc!v%%W zC6-HFqfIC8*YwPqcJIQat0QnOfxp&PVgk>qneB-$@%MY$RSxfB-8Y-??t}&qHrSoa!z0a`w>h^6m+f@G={{l&;QDy)D literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/__pycache__/level_of_detail.cpython-39.pyc b/hub/city_model_structure/__pycache__/level_of_detail.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..23d48333c1caf5a1823167890e0d456d75ecd6f0 GIT binary patch literal 3325 zcmb_eUr*yk5VxJ!F(!cm2iKnZXCL|i(jB63PxMrsnyXMNnxo}fwNa$4>)j+qc9xFU zREc;yK106)?^UI~_G9?9-=a^Q-6SR<4hI6Go$Tx^yEDJv?C$urnrGm*^2c9n4}1SA zW%4Vb@)BFJfr1%LR#{<$Q(JG;B2 zE_#6g7W$2mj*r{9X$ZC*zSzSVgW+(m%(_o z?ZEc}bbji~WBwC|xq(p{O^cb$60=z8!f2Mc&C1NaFy5L?hdU<~=H!~qD$Laum%C_L z$TgdJY*AYl_ySt0xn{E(ThbPfduUnCHJiQ1R{il-j?SMI|Ssvlt+dT!qz<;e`Zj`UOVnYw;<=c26cghG_7lgoaZ z`|AvzOlQmFw1+`^a>X0tX~2r|ep!iYAg|)s)7H&jqz+)9^ z(fN5F4L|3>-IlW-=W{kJ9muG3m?i8T_kBeb-REEP(b2q*OKT@5J52uYQKrMN54X0v|CD*k~ iuTnNW=XSq(g~pZzACH$S+9z{g3`6=tZKz9%vim<$(+isb literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/__pycache__/parts_consisting_building.cpython-39.pyc b/hub/city_model_structure/__pycache__/parts_consisting_building.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b45092d4492dfb1bb113317f960d6170e0a800a6 GIT binary patch literal 1541 zcma)6&2H345bpNhINk|A0fct75`Ex+4;e+_fD|DF7!)A|cC`Em%%GOz?qrPY@zC8y zno(|v#2awp0LQ$*KER&$34Gy_}Z5Y&a}x!hxe;27w}|7DXLrsPx}vEvQ4&^rE;Vtc#nh}nd~5w zYKQIZ_V-}vW^W5@sn}+o7^#A&98XksI5h0ih% zR_*LTEp_MFWGr7KDx~#Bl$psN`}j8<<&_4Ib#S(p;&;mfNyee?gOMbrK(r-jY=0mJ zK)0|@{MeDMaD;n8kYMS`j`V*8f+HYo)1e7Rqu8pcvQz)U59)2>?es46rr}Ayo+Dl&W=jsEviW1YYf6j;r8l3k>n5zpoHN4>y90y*B?( zVtu^8iY&5Oo0u6UhNWdOF5x(vq5N?LucO6@c{4Ai3n0~HG~XAZ&coU@nDaWWuc~8N z6X7qYDAWolD&V}mZ@}+z{;o>$S){|cC{xax#@7B=m7qm4QCAQL@}^Mu4FnKmtFct( zIec-3@&ax_&J}hOd!exypE`EevuMzg`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_;vsFxJacWU< zOlfXWettgzq~^pImlTyImy{Nz#w3=M m6lErrmZTQP#K&jmWtPOp>lIYq;;;cKEX_%^16lSNh#3H=*Dme= literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/attributes/__pycache__/plane.cpython-39.pyc b/hub/city_model_structure/attributes/__pycache__/plane.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..411aab13f0a75d0886fa44c7d1201671c689e3c3 GIT binary patch literal 2425 zcma)8&u<$=6rR~%c5Ek2XrP3mYLGb8kVa8@0HRX0bx?&Ukws~ROsdspXOe8S-rdfw zOKrJanjig}a>~EJ1->`CPV2y-vzq5OJ8x#+eDA$)94s!j7~0A& zzsWxvjQvG}*PD&O4fK2qLb3sqTv{<7S_6xdZpZe(QI>R`@qv4rNmqKuOnT3(fhX;| ztlJpu!JNJ8?zai9(g+3fh-aB}H@)DZMT3-0t7OtE(HEkf|0| z;-FBv)l0Lnjt-9s@yAQCwYjw=dTA1-T1J8Beeq3C9O`tGwfZ`JsKNr1QfbkT;y{b9 z(9Fa z=Ci2<2`?cnBW=mBE8p!pWy4Pac9cL#Qaudfa=}-RMnMs!NxAH&S(fHeq3X%5T{^jn z4@$3I?283?B|6Z zg~dp#y`U%%s!^fxy^M~#k&Vly??*{g`2Kl1Qxk%5&peYQgT%(n0HO1=!bVBR$*gXq zQ#Y7+P^RpmIsN1+;1lAuDunqOQjmZU83o-;ZCBfE3zG-tRhMfD|4XhH@M8{LiA5Sx zfvutE6a?l?I+cgj#&77=wKHB-0E_RRtc&rwm^_&GEXg(!iR2E(Gxz9-dYJ@8JZK{SA^*>OA~NS zE^a;%AB$UKh~5NZM|>_e=Rv%Db6wn87rk|{(={`@nlk3Z2nyxNKWJS?gEpBa98ILl zc9;?^C7`Xm>za%xc~J8Gl7}UiX97?*XWn(OL;e;7^IE)m-s6|>Eb&=V&rCy;No0yf zp`~u(@*|WfH|PWTfKNM;vkUA6f9hbhU9FS$ z`Fag$#tQb84okN{B&Y605E%%>oqT2B+KKWaNJ1s{Rq=yTiJ*WSMvtMHViG|j%{x

UtIAuK7sGvy!W_jSD6n zQcO}^E+nI&(xje^#fq$b_KVav>p#PHa&tqv4*2Cd|ABC&ZA43+PfEuZKg{}G^fd>=PXT+cLoU#6k&>m_ogndvlBx)^K1 z+0i#lZ|vWH|o{Qk-x6V-u=BjGSVg2 zMkq!`&wd$^S4P)WHa7ZHatA>n4H>JP8S=9(Ez8fPljKQ$&Wv0TA;}A)j+rrvRQ}MQ z_;~0sUnL%JmVE&9=!kp0zCKd$J$NOWV4xuqcoK_9#8+sN$c{)v=L%ioNmq154}3k5 z0wEhsCy=q&$p~p_;W@Jwc05|U!rNX(AlCO|iI<21-H-zxUE^kpa_#FcfgjtCn#9Wd zq}g0^UL(_kAO15Q4W}=xGs}O_Dja&eYu1MoyV? zKvfNwOe^2TK{anuN>!;GrMEr002?p1Lp6g{h+~MYmbblxYPw)7(P^k;@em3p)l zY)`=u_#$#1A-=@>=;e18@iKDJyLgFD@iP88MEv(FB%=4x59lH~+lF|ujNapmWSKyR z;>GU)=7{CI_7iN0P}Z@MOL8pTYbndNUQ1L-SV_v=ee$g4xe^j~wqjhiBA&q}ao}MNtn42|mrC-C~oEg{e z1S%(+Yd19=2uss!2vxvKRl01_RTZCc-t4Rb)ae%IH*ifDT+~hQHok{5ytvzT;y-7P z`l+9(k`l#YvLJ5zcxhP!pRk{lP7-yyO2eH0h%j(2t%{n}AAsY5Xr-(NU!U literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/attributes/__pycache__/polygon.cpython-39.pyc b/hub/city_model_structure/attributes/__pycache__/polygon.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0a6154fdb7100106992af567df0ec4d35d6470a7 GIT binary patch literal 11134 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 Ykmj#s!oNxYk|7mbz@5+^Uo-l@0G7e^zW@LL literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/attributes/__pycache__/schedule.cpython-39.pyc b/hub/city_model_structure/attributes/__pycache__/schedule.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0e4387128c5a43cbff4d94b101a35f3e30de2441 GIT binary patch literal 3886 zcmb_f&2Jk;6rWkI*Xxa)k2d{CDKG~_WYL-siiDz4wMwfBDOgdX3go6N+nsT|Wk1~6 z-4vT}YPoSiNSrvpG5-KJF8mpLLgK_3i32Czo3%G~>{MyRS~EK{@9oTczxOqE>UE32 zv-IPy{GT~O{=~`nQ-aA&XmJxdPTGW1uKBc0;a&2zpwun}dRwRDF5x;aKPSBWOlz09 zwnG|5`Wt*??YLdRQ(v$k!k4wPefu+Zm2G*h2x9@GkGTjFuj2{1!M5&hZ^6?0%{AyF z$*%fNBBZq$_4?A=>n7~?L$`AGvr<51~|Z_%p4hiuxv3l znlRUQ;uscOz^iz0tU=p^HgvZGVuRB`4~RmqslKFoUG-(v8=SytwAH9&CEMd!*-rXB zkyY${$4^C^SvGePCttMe#0!KSC!&|lV&5hmr zv5@g@8ptS0cDMU(*O9@{-QwMD`bag`OZqmrx$xltnYu|T#jcYi;B09k;@x-{3e8?W zGi}=oy~MVcP+vTUP-E;jSQ^3A9C4lu*CqJ+fINoiOo?1h=+D|O2$)&}XtcrSfHq@y zMZ!ihFppnh4ogFCA2f4(zmMZ5sQ|(#9vMKxqX0;IA`}urk*j?+qyW{z4F+1Og;t{^ zF$yw0P0;|@Uz0UhQ3&SU0y1bGM`2?FI$~JVqJz0YQIEG8G&Azur?f=}QO<$iqPA%C z!L@14(E5{dwxUpAIvL5^pb|HkDWQ&^zXjA7y^$D$dLbWDT(yc6cyL_!?0J|RKw?a( zJd?oa8C9N3l>y#S0_}_&;7H7#Bb{IzO)V>ds7l5|P1a%KtgM{*7@YDPkgh?gHjP>yER(oBxE1yvs-;6JD{#V0#EksY4^WOFW(x&oIqhWBu>Kq%QsBG_sduN5 z8W(Md)sbW^xq^aSzz)Oc$k`-%+DFiaQk@c;AEvRv{K3#(tRtgfLoqy9b;7*?VdOw2z-c!PJPug`$53e!8Tl&btmY^efi=TnP1J2x zNL7pMcBjy_GB{IMpdg=YgcrJQ?kf|nTi~IP*qHWTi91Rq@+`x=2GkY``;u<^)wF3a zokLuU-h^pl0qAl>Iq*Wry$bs%Rfgh@g8!)yUn&MLL-!Q;S5c#x_!kxBQ&dSsz&QQ| z`TxVeQ2NFAE0Jg6e;EY*0)>4^{GXnHzbc^<1~?_`V4%Km0To8Qn`HzM<~RYx~g*H4N)R;m}cV-p);wjn^lck&@NVVYMC&`cLnBV yK0p4xT-B-CrD4cb+!1fsnE~b73-@w4l>~UuED196dJe!1ym6|Vs$MbaV(CA?glhi) literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/building.py b/hub/city_model_structure/building.py index 344ba391..5474e5dc 100644 --- a/hub/city_model_structure/building.py +++ b/hub/city_model_structure/building.py @@ -90,6 +90,7 @@ class Building(CityObject): self._interior_slabs.append(surface) else: logging.error('Building %s [%s] has an unexpected surface type %s.', self.name, self.aliases, surface.type) + self._heating_consumption_disaggregated = {} @property def shell(self) -> Polyhedron: @@ -702,6 +703,7 @@ class Building(CityObject): Get total electricity consumption for distribution and emission systems in J return: dict """ + _distribution_systems_electrical_consumption = {} if len(self._distribution_systems_electrical_consumption) != 0: return self._distribution_systems_electrical_consumption _peak_load = self.heating_peak_load[cte.YEAR][0] @@ -715,31 +717,33 @@ class Building(CityObject): if self.energy_systems is None: return self._distribution_systems_electrical_consumption for energy_system in self.energy_systems: - emission_system = energy_system.emission_systems.generic_emission_system - parasitic_energy_consumption = 0 - if emission_system is not None: - parasitic_energy_consumption = emission_system.parasitic_energy_consumption - distribution_system = energy_system.distribution_systems.generic_distribution_system - consumption_variable_flow = distribution_system.distribution_consumption_variable_flow - for demand_type in energy_system.demand_types: - if demand_type.lower() == cte.HEATING.lower(): - if _peak_load_type == cte.HEATING.lower(): - _consumption_fix_flow = distribution_system.distribution_consumption_fix_flow - for heating_demand_key in self.heating_demand: - _consumption = [0]*len(self.heating_demand[heating_demand_key]) - _demand = self.heating_demand[heating_demand_key] - for i, _ in enumerate(_consumption): - _consumption[i] += (parasitic_energy_consumption + consumption_variable_flow) * _demand[i] - self._distribution_systems_electrical_consumption[heating_demand_key] = _consumption - if demand_type.lower() == cte.COOLING.lower(): - if _peak_load_type == cte.COOLING.lower(): - _consumption_fix_flow = distribution_system.distribution_consumption_fix_flow - for demand_key in self.cooling_demand: - _consumption = self._distribution_systems_electrical_consumption[demand_key] - _demand = self.cooling_demand[demand_key] - for i, _ in enumerate(_consumption): - _consumption[i] += (parasitic_energy_consumption + consumption_variable_flow) * _demand[i] - self._distribution_systems_electrical_consumption[demand_key] = _consumption + distribution_systems = energy_system.distribution_systems + for distribution_system in distribution_systems: + emission_systems = distribution_system.emission_systems + parasitic_energy_consumption = 0 + if emission_systems is not None: + for emission_system in emission_systems: + parasitic_energy_consumption += emission_system.parasitic_energy_consumption + consumption_variable_flow = distribution_system.distribution_consumption_variable_flow + for demand_type in energy_system.demand_types: + if demand_type.lower() == cte.HEATING.lower(): + if _peak_load_type == cte.HEATING.lower(): + _consumption_fix_flow = distribution_system.distribution_consumption_fix_flow + for heating_demand_key in self.heating_demand: + _consumption = [0]*len(self.heating_demand[heating_demand_key]) + _demand = self.heating_demand[heating_demand_key] + for i, _ in enumerate(_consumption): + _consumption[i] += (parasitic_energy_consumption + consumption_variable_flow) * _demand[i] + self._distribution_systems_electrical_consumption[heating_demand_key] = _consumption + if demand_type.lower() == cte.COOLING.lower(): + if _peak_load_type == cte.COOLING.lower(): + _consumption_fix_flow = distribution_system.distribution_consumption_fix_flow + for demand_key in self.cooling_demand: + _consumption = self._distribution_systems_electrical_consumption[demand_key] + _demand = self.cooling_demand[demand_key] + for i, _ in enumerate(_consumption): + _consumption[i] += (parasitic_energy_consumption + consumption_variable_flow) * _demand[i] + self._distribution_systems_electrical_consumption[demand_key] = _consumption for key, item in self._distribution_systems_electrical_consumption.items(): for i in range(0, len(item)): @@ -758,13 +762,16 @@ class Building(CityObject): if demand_type.lower() == consumption_type.lower(): if consumption_type in (cte.HEATING, cte.DOMESTIC_HOT_WATER): for generation_system in generation_systems: - coefficient_of_performance = generation_system.heat_efficiency + if generation_system.heat_efficiency is not None: + coefficient_of_performance = float(generation_system.heat_efficiency) elif consumption_type == cte.COOLING: for generation_system in generation_systems: - coefficient_of_performance = generation_system.cooling_efficiency + if generation_system.cooling_efficiency is not None: + coefficient_of_performance = float(generation_system.cooling_efficiency) elif consumption_type == cte.ELECTRICITY: for generation_system in generation_systems: - coefficient_of_performance = generation_system.electricity_efficiency + if generation_system.electricity_efficiency is not None: + coefficient_of_performance = float(generation_system.electricity_efficiency) if coefficient_of_performance == 0: values = [0]*len(demand) final_energy_consumed = values @@ -795,16 +802,37 @@ class Building(CityObject): if self.energy_systems is None: return self._onsite_electrical_production for energy_system in self.energy_systems: - if energy_system.generation_systems[0].system_type == cte.PHOTOVOLTAIC: - _efficiency = energy_system.generation_systems[0].electricity_efficiency - self._onsite_electrical_production = {} - for _key in self.roofs[0].global_irradiance.keys(): - _results = [0 for _ in range(0, len(self.roofs[0].global_irradiance[_key]))] - for surface in self.roofs: - if _key in orientation_losses_factor: - _results = [x + y * _efficiency * surface.perimeter_area - * surface.solar_collectors_area_reduction_factor * z - for x, y, z in zip(_results, surface.global_irradiance[_key], - orientation_losses_factor[_key]['south'])] - self._onsite_electrical_production[_key] = _results + for generation_system in energy_system.generation_systems: + if generation_system.system_type == cte.PHOTOVOLTAIC: + if generation_system.electricity_efficiency is not None: + _efficiency = float(generation_system.electricity_efficiency) + else: + _efficiency = 0 + self._onsite_electrical_production = {} + for _key in self.roofs[0].global_irradiance.keys(): + _results = [0 for _ in range(0, len(self.roofs[0].global_irradiance[_key]))] + for surface in self.roofs: + if _key in orientation_losses_factor: + _results = [x + y * _efficiency * surface.perimeter_area + * surface.solar_collectors_area_reduction_factor * z + for x, y, z in zip(_results, surface.global_irradiance[_key], + orientation_losses_factor[_key]['south'])] + self._onsite_electrical_production[_key] = _results return self._onsite_electrical_production + + @property + def heating_consumption_disaggregated(self) -> dict: + """ + Get energy consumed for heating from different fuels in J + return: dict + """ + return self._heating_consumption_disaggregated + + @heating_consumption_disaggregated.setter + def heating_consumption_disaggregated(self, value): + """ + Get energy consumed for heating from different fuels in J + return: dict + """ + self._heating_consumption_disaggregated = value + diff --git a/hub/city_model_structure/building_demand/__pycache__/__init__.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a86a713dd2c933d79c93a28e9fb2d72cb17f3a97 GIT binary patch literal 179 zcmYe~<>g`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_SvsFxJacWU< zOlfXWettgzq~^pImlTyImy{Nz#w3+y r=A>lirN^hF<|gK)#KgyE=4F<|$LkeT-r}$UsxHk*wFBAs8HgDGqLwhi literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/building_demand/__pycache__/appliances.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/appliances.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..021d6c359ed830e0943ca07ad465f8179586cbc7 GIT binary patch literal 3032 zcmbW3&u`;I6vsV|91Y3h+U1iph&x6RRmh91$7lrSy4ilQh`E{HT6teSB@QK z>`IAxYySpLTsZb0;EKeb;VWGD7dY|WByrNz-EQk>CNrL|XWskFn;&dp!8PDn`t=X~ z`!QoLt|GJ>-&(_yzGmiXN@_^Cim)|w%p^Vd>yCdUc;V00@g`_({ z$RzzHjuZ<|L?YB$kO`wrfSk!myTnaiIyc&uC<~igqH%~Xx(QmLa zfz}x7S`cZr6wq~agQ{A?(k8poQ^;A=ol>6S?7WN3(X&5Q;S{edNkqCHp}-E}S9 z7(?o+_|2%Tt;WKM=Mym95(Vky!#M6xFzDDO&HdCeMiZRL2nFV2Ms9-;^nKG#d9=n zg!j=D-mA(x()}c-TkOeAXtgs%XmLSpqV=~#`#g`{;VyX_vT$oCCR>}?abKZfBdqUE zVV#lPk?F@d(?S<+LaMzeLi!F^{rV0_zs-^6$Bcf%S;D^W_XPdy2FO2+Zx=u7?=FbM z!=f;T=kg)iIpfM;b&7E=xSlTdeu^6~T(116n zVQf_Di+DyxtSdY(b3Hs>;fe+2s^|TZvT)Q=@jM>;o+t4f&77W$;Xq6J5(8|w0pV7j z*-9jEb<~@V#N{DzLS+dvTqF`lpW31HUWKQd#5){r80raR4zWs3#Uu|a7IB^H|KD>g zqQ7j_EAkP1nAu6c2bY1NT{vv^1a1$FqMJhl&SkierioCEG4i32XiJfine$?Z=X1OX NC_Jexdy!O2{{yBlyUPFo literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/building_demand/__pycache__/construction.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/construction.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e0aac978651156096bdaa39c807775cde4e0e01f GIT binary patch literal 3899 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 literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/building_demand/__pycache__/household.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/household.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..37e5502a3481b9ddf682dc880e566f5c4d2101e0 GIT binary patch literal 1180 zcma)6!D`z;5M9ZNt%xK|0xcz{x%vIu44sBtIkR(Hn}C= z(0@ojpvNBi8M^i_dg`p4I8N$97j~GL9gW_5vyxa}4;Zbjuixc2m$6?qSX?y<4rrTa zWF+geE|ZRQubFhO+`c1gC#>leKj<(x)P+%F9ZN{GEMgU$^xk}gT{wzDl^R9fJE_t< z8bu1*aMbM`QR+o&kE}-6jYY07=;&;M(b+hMpEt0-x4#b^orW4^B%t&5LkG@K7g^9l zeXhcs4y8iqMX^A5uTvx93zaK)9bX7kQ;-TyF&YZQ2r^sLO6Ele;a%faD1wj}JXmw$ zdz4m;sItB*oqkQavUbh-o?4NfT)AdfPQOlmT{bGeA$^i$wOpOcF?|{U%p(Y6VGLzL zXW@O;C;3^2w%H^j*(KvMOK+x*&T-Q%w|H74Lxo(Ac&2m~tMbW0DimmLoYFHY9^Ejk zQ=i|TI_<%!QD_E5f?DT;-Xt6gOl}o4gK;seb{ORoPLoqHH#rtzUZ5Hbizt>+dd8(n zL@Ed4yBW8#N$GPQrBTlLhDGg>VNTtdZqK>4?h5|mYWY@NEyhcBUNM{=k}LpSmBWlC z=n>3lLaf9E;eaTGe5_!Oqk5u^iqNKQI?by@(?P2yT1=G;Gt;23+Wa0ooj-(Sm4 zoshp!n0-nhJc2jghDMSukyKhf4Xmyel)5E~a>=)Ya<@#$E|In@zap~y(&|=Z<&d1+6*^CV1^4u!ufypRQvOnv1X9z6bu-Di8AtHM}8?}=1l;+=R(@36hygFP7fy!`;$ zNVEICfEAoh)E{WCcbc$2FWB~j?QPbHLO0UV6Rh*i(+=zDDD683I(nhp1SX}@Y&Z3M zU%^)bOKUY`Ju{$#sNI{41(A*t^~jy9)^>&SH)u{;R#tu%dQq6!dtRKhXjVIPPZe6= z;{5DW2H_FBah(#PNS6X(mZaU1v}EZO>DsESD$-Wf6YDOJ^aqs{S$$={q}`gTy;zbp zkcg2+I48#~Nyp%p)iU6gK|vF^3R@4gMZh?fjl`(Ert=%QLj<@Be!8TPBuy;U0Y*X4023uKuHUx%S4r8+e%=JYa z!=MYy~X0A z5z3=Eo!k9ER^woYmvG)hR^ZGMLM!=aczc%C_5`~Raa+*}b_lO9j4T_5E6_P7FARUf zhu{pxc2&YA8ZcxnX2_|T+ZnC5!}g<4;TZ)ZKyfqIq8eAzsGebE)U1M-*|@@8=*8$; zQW-YqRK{7?%-}3M*w3S26NGarX-f5a0=<_Mq5x#@xi#D|dmsLn&V8Xpz|Mr9s-0Pd z_u-tEzyPE6g{2#?PgXX#OZw||nEC+T*oKBwYV?|n{;-JAad^%X4HEnD(_nj^>YVEn zKN87=>MH0_NcHW)$p09XA9MfV9QTFr8#?3ZB4=E~+&M2zO+_b_ji`;ux6p1pbJOV3 z7$BId-qt&Ni@Y+854_qum!W`MtRE<^4%gIk!jDFr@9J;yP7 zZ;r7`z?;wom-*vG@mgrpn_|_NRYdu_V1~K@<-ZnF&hoOr%uA67lQG#tCc*&=)8H7& zSWK;n7bwU;st;42vC}A>8P+1~DKjp`z@YPF`}3swd~U`ss9s*=v87y>F!$BcaC6RA zIb^Yykh*hBvry}sH2a&``AVAo-%OwL?Irv7^*uDd$g}Uk#9(T8YaL6cPy~we%;8vg zK@AW6I_JNn!XM96IhT>kxn6^xX0^VK`bsAQjghW5u)+MFRbrLEACl2|#+;+^($jc= zHHMTfVS~q5qaHI^%H%67gf#wLzzh+80ZonCcCBX7t*T9(Ykc2xY-(26Z&fvxBUuG1 zC#b(hn&S4^Cs1j&i>l1FNT60bP7@WkClN4G7Ii98HmiL#BJ67{7h^2$?CKh=m;MC+ CR$C1K literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/building_demand/__pycache__/internal_zone.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/internal_zone.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fb878f5ebee7ea03fdd1adb65f40dad051d3bf1a GIT binary patch literal 4668 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 literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/building_demand/__pycache__/lighting.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/lighting.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..12d9e8dab06bc4151f92fd2cd7d98706c0ab7819 GIT binary patch literal 3008 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 literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/building_demand/__pycache__/thermal_archetype.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/thermal_archetype.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..732d6d0109da5676e258c30ee9dc55c22f0c3501 GIT binary patch literal 4095 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®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 DwA3$v literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/building_demand/__pycache__/usage.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/usage.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ce6984eb48a8db5870450d888a90932fb13f88e4 GIT binary patch literal 7264 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 literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/energy_systems/__pycache__/control_system.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/control_system.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9d08df8dbd47948cfd7b4e047cd385896f42908d GIT binary patch literal 1091 zcmZuw&1%~~5MIf$t%?}h9zuKDYYs6XxtUT@+z<+>F*Si8T$YV?;wZ?HGP?@M-Ju{Kt~-@9iJ(VUZ^Vs#Nmf(U&2g zVNsRQ7>g@N3=> z2~D$c)+Fqc8yJnvVqbZ2OZlpG&*A{uDp2ivcIU+%=v;MG=h0GKA}DNngxs<+ailEX zM%>Qw*Ta)cYE9n6d(zqJv=lZZ(RNRY-7-Np)$~S7FYXBfZmS4Wm$3AjKtp!1WZ0(U z-(QD=>8S?P(`t@IVW#6cxs*76AWTm$t8*twYHC4?f=p;rpqG#b*oXlHnZ;aJ{O!;ptJDMA-L&`0?aw9GJ!~o~VVAik5&gGl~1cH?h zI3Y~)ne(A-igr70;MHXdHi7-_C21>MoyF@-TsE9I$dqG`)vc_lzV#f{9#QQt4qUs* zv$#r$a?WpLR>20ikwdrRV?bq_woCX2CWaJxL-K%fL@$L{&E*_~Xd+>ELO&1bTS8n{ zGJA-0g-}Hz1a@udu*9MSG_@<&bTkne6w}l+&Ap8R*;tit! literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/energy_systems/__pycache__/distribution_system.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/distribution_system.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..54356ab79dede4a0e3f93cd37f534e476c4de1df GIT binary patch literal 5572 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 Q<_9cJ6#heEmaF;y0nIEwDF6Tf literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/energy_systems/__pycache__/emission_system.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/emission_system.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..77b78e11e4e74424597cc57abfb95c3514b5315e GIT binary patch literal 1898 zcmb7FTW{Mo6sBa^R+P(b*oGAyKw2g4|#icF$Fw;fUe z?B=ccGyWUHeuZB5FZQ%^Xh(`O&uA%-;<=Fg&UX%_aDP8w*nWQfT0Lnq_BRQ)TMLD! z*!3qkNH$?dOghrNX3~A*P8``fVLh+>3ys0EG}b!KGp=XasFbIEP^rQ7b-GnlnVGbPD0?nRfbXr4HHQPx$BMa4>zY73gW1LY|xHcov<9kgn3Ar|0D>+oRabR;OtLWn@ZF)7AdV zV$oBzsvfaa^ov>L3lV3r5n`X>>EOVe4nFfw*U9ML`2B|rBE*tGi?7&)4SxO&^2Yg* zGE|}};lzMd4L~8ZY`_s^oSj+S!U3Wb@Nz7}wy}ecVihzDeu%OrN7k8tb_ZVL6OlU7X#+ zzJmIegnd~PMpd$nD!MNlsq$#$7tP7@kM58}_IIG?K}}Bs>Hmp2AXs}eSSlJm-b3Bj z4XU@~QzT8gFh6YJOdqYs{ooRpw9%Y*7tGn9k1oLT_@;z*w^1c ao}-=%ALH8!oA#^x@0VDgkh{HVp8qe|puraa literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/energy_systems/__pycache__/energy_storage_system.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/energy_storage_system.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2abd5948de5d0d5ec7480c678b77f8e4c6b79074 GIT binary patch literal 3379 zcmcImSx+NJ5T5ac8SDj?J#ws~jX1Wc7=5VUV zNcQr!{2AW!3-UAOHBb2qc}i7}JvJ~Ph&E$&xvQ&>s;`c2QLj4|em}l`t-9FziTJ{TPX~x|XzM!MB4#w_sblmMqHBsU=IQ@TS-;%5ukAs|*%x%W|HE3J!)$#}SAF z#q?0eDrm5seI0{vW9IroYp2ux_9a_q&pcO!T4C>dslwRnc?!1Jv)%SH9NKJbAdP^n z`yy80G^73yyo1A-{dvZoY&_Xy%_wvuke*=8r_Y=00HQ(PX+w0R@StWS6|jy_O0wr7 zJlYq)G;s|`xovl{yx|JmT`GnnF?jm}R9bxW!&OR{`w zy|KF$RXLiIm5eLPIaxK5s;Z)7KI6*LkqbsLujWxw%eb_Qx*lCk$0b1_u1kNO2{ zO>FvOB+@#ucuEly>=z6z8d@^6EG<0WZmm_46&?@!iYpU%oB~hDq;5JGfkv1t@Bsbm z^H2l|Wq}9>J&eWyC`guh7zJJ^eC~?AaJ_hlGyF(vr8$V$i_Yw%q?O-0v!I6B{Ue)O zdoQ#Cy*CITisHTY&^;6oj3ZC)9S-(QqrJulWAqQqd3zH*4OBW~QvmrmU;4wO%DESM zG3QGJ3mt6PmFzcqlmmQYvg8uH1hIj)f}IoV$bdKc1^vX>u8J8U$f6!gl{49kY14x! zV85;^AM*)3SNN-+u+{ibL4e)g%;GIjh+?>fOTY^c%-ER?R6c+zj6p0Vb!3yfmwojP zj%)J2RT+JhXVv8;u9;3t@S}bfK6K`ZZNkUK04a=Z?7VFoTd;^HofTjK|B~{t@CWLG ztw4@r*v7`)&?$|~DU%vX_Fo5f8PCWCyEfjzp-JK$OX-rR*EmCdW=5Ei_GcNTLVTB znI`+Ju2%zgpY+WG>;Ve4r;6S%%0AD$MkSF_f3_xG2izPfl9$@G*&V){YBb7?w%N(I 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 literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/energy_systems/__pycache__/generic_distribution_system.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/generic_distribution_system.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4dd5b6b210d104c11b9a25a4ef52d97534228273 GIT binary patch literal 3365 zcmcgu-EJH;6rP#=o6IJqO$rEskclWXQkqsRSD`{dn<^qomx!noEen=2_HHJfzuGei zyUJa2#}mLC~FFYk|3Csy|$0%%sJore2&?|f@8qbT6isfhtZ!n znS4qx*?^|rfsPw3W6R(sw@wXiy|G#*FYOsC<@65_I$I(X(sK#^b$f(+Dv{oPns`x2 zR8J)$AY633(8CpHZ+G)M@__7kt_YQY(N|oAiP!OjTqiqQyF0M-WbG03kt7d%mI&!I zqPQo$?m#rz|Y z2=b+W#H8qhG2{gp$fWd0jGNYi(WVV|sCdm~jtlNhJtI_pg=Jv?4o1u3W~;<4UOF{e zWl`Z}UO6@1n60X)9@cnuG^_9$x3$C;Hb~}1vkG^3T}$S~97yIzvkG6}x3t6&4oKb_ z%_{shzoR8}Q3uK5aK@J)GIz8022t6Zh{m1{M*p5eNTHOtK2r*IxaNfCIJTfQps8i( zxN&08yax6ORVW~@(jZ2X z(2n;L?fB7g_G$4R2&TvOeUWdRrw4*1)Q^-B>def_O8A{KL(YM*e;qc~+b@)ms+|Th zijwwj&plu=7!XFa57K?zTrcU-0O;dWAaUxVo$Z|0G^es^cXPT=8#;$CJ`id3g` z0kP7D%&ZQ6{pCX3*M_fMz#XyIxL09tVjOC0`_CXm7{-Jkz@#IifPBw9xk`@l$gC16 zI&fqF>oEC2?_HMy+zHnS9?!6=*Un6dVU;!P5URXGtFtmHz6&FTTa0S|!(!uctE;!+ zR(NoXO&gBtPE1W06Nq8;xAn*Ou48=6Bn!w9^HVY9K~v6y_A^V`@RwEehI5`sjKl}f z298`C;fvfQUI=NVD}^8p;VUo26GO-dV&E=Ih6rQQn2GS>Ma3VF&Frrh<9+eP8=-$u zO_5_$@Q=M~%G>DNE$pW0Bk#c4>e!nrg8s7x4QXAJ8;I8-$$=m-iTT#d;jy|NdBXqYXmk2506!m*8dN@rd&kqW-((41W(84T#*^S{3~V*i^Zk%&|lCL z8C+#z8S&H=oZR1jxP2K>7;8LA@zshF|?J zKy6AaJu~_9HVB@N0lOl9@|uI0W#Xc6E;F19`z471Yw^s0*C(`pJ2JA`zgHa9i8rnh zy05i$7`ln~ui{T(D#x4tOu*j-!H;8Knk(~o%L!Q^D9s#-7p4^MVKkek^mWSofuu$$ zk6cP+9p24sI81Q$OM1E-XH_Kvq1b-)yc}^8KNjS^6{kY3{`r_#u5!DBFJn62o)U literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/energy_systems/__pycache__/generic_emission_system.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/generic_emission_system.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..985830ab7629b2ceac35e6d5ba5b9cbc27ca2132 GIT binary patch literal 1265 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 literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/energy_systems/__pycache__/generic_storage_system.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/generic_storage_system.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..57fc0ebc8cffdca47a3ee3bdc54ee39fb9f20a72 GIT binary patch literal 2321 zcmcgt&5qkP5T<0=)@tn_=}&rT05(7l3uN6OK`%yIq;P{pi>=|t2vE2#7_La$TOvh12jBigkLjrjWuhgnz7sMrYN8}`>FLSf6h+TEPjF6w z9!K0r2zu#!0ctuk^tTm#`sC>|+Dnr#1)(_Yy?EK9Q%JLUFo5)2h6a^F0v&QG1%1hr z^D_=q+g%6B-Scqsc_-xPT}X-&1L`a@Dd;X8s0hFLAx$)oE~Jt4o9KdrTvD`rg=QQ; z(YZD1#Ff#m*FP+>tP4-nugF_x z)R2wyrf5{Vx@Zc&(D>3v%|W%Ri$EL}nge-&n$~6~+DO`+{G$`giVBAqET77fx8=it z(zSx>Qd3bHajj7uBHPulYZsrMO_=+*5ag1ua>h7t?FxeDIsKzr-ezl;%q-?IzsHg^ zRtb+-$mcv%W`Pz_sG1!i=@CwkhlSQ(eY#Yd1+mw8a z5^d=ujpb*1gWa|c3rlN_!>+4Du%0iSA`u)U-(3ei{6B;4Lkn-Qa>2(}UccZ`CT|1} zZB#wLXC3o9GWg>TgXE;*jK~x#rhNyodwm#T0f;)EF%{{n>vg7M$-Vy%SJMfqN;<)G+x1q0)r)X#B z=OqnAwMp?0Y}kt3%SLOvKYek1_rEEZZR_`7p$u`u!haBAA3m@V?jz+xRD5+ESpO)n z4Kd-dWGoMuZL65dxNb4_Cgags(_~DfA!Bfe-{$@t(zyh)C`v4EXld{-ydWIx0b7|+ zTve62U5X@#O=lhqFhvl-vq zCY$)*^enjOZo3|<6z;8F|B##{x2+PhT?W5yQD%GAhQ;_2xxKP_8!nw)JPp?2vk$1XXXS|(Y(ad(+)a;H`;ta9fuD|z6gjFVNXY;y9h zW4mT~i+PM(D{q;c)d^+fKDQp4oLi)dnHDQirmLl};>D5)_l3N0#e?iM&*AP8xo0v) z$z9Wa3>6R;Q;XbBHJAMd@Ttvb8v1=3(8G_xm57Ubf(p1cw95E~!z-p;V#_tY#oQ7W zi+@lc{J8(=(ln;6Wk94Znpx|9rfq;!wEJm(Ez5M8rTSCt^UPX~Mtwpa+Dfm-T|DFG}gOpB@yR0xN)LAWG?UkPZpY0d@d9!%<47BXm@F`dA-$ z#-fx?$LWOd^s|2OOhzf49-@bZ=O8->o~bCM(`kA{cm~)2cxIxMPG>0*o;Q2w6(&-EIMd2A{!{C{VQaU|B=Y?m4jezH+D5cYv>4NZ#vQhAyj8ZyX zq^E>ujE#Zkbd=KREA));jI(j@oQ+aCeU+XQo(VPqp4Xz3PS4W|!ZXPx!E-T6>Ff|) zVuv@n4r%oDUu5Vd`o_~NC_KfcAm3$3q25!hHQyC_Rpgsy(~$2Pq%hxfTfR5xvdDLY z9f5q;A%*#lwB@@&-xB#|*bL-bffVMOY0Gz$-V*s{*(~IH8&a5Wwk_W~^tQ-H7=e86 zLJIQ{=)*;NNBlm@j)G@3Og+=G+S)OgV%}?v!Su4a)jE>uM+<}~J)~4NT^GD1n46*x z{)W+{b;H;FH5gC(T>E9_R~k%n+NYY)C2Y5_Sz&cybHerrn-{iM*n+SJgzXcyU)Y1f z4hTCa?2xd-!j1?#D(slB7d~{HC|#yg;A?kX^ezvSXO`&)2ngT z7z!^|KzC!K>^x~exmvYa-VV!=2!voPaK0^;#U(WGj<@O+Tpx?5_6Z9v&qkLM>N^x=kV*t)Ck$GHo)t8^WLC|G zRv9$g$uzPqD{sL6Uc(S$%rJJee{U`?t>1SUch_qb?l|81>UQao$t%Ii?5;nmJrrLd zd4UjX84_(=%?f{!hTd|YDLHCB zh!Nwb8JGtl0EBs`tNxK_*1hk7vTAa(Lbl9ujm4oB`5fGAr;8the+^yuTOjij;5rZA z0Ad-Gpad|bZ&vn2~p>E6=)3GrWPn3NI9~Vi2}v*cOXzP5~w3MO@zlfU6G$dNGiHt z1IH5yBqiOaBf3QhDdQ$_UA?3qz$U0z9cZcJGufQ_3+j&FQlbN9&qd6()Zw?hi9s2W z6ge)yN&+u{N(_ILr5xe z-vq~>W&2Z-dm|z@3{2$)4?Z|kw#gYI%dG5LHQd}IM7`wV4uO*D;r5FEDw~Of}{I3gGeOx1_Dv_;gUwbJ*S2a z^jnJtRvbG#0Ef?+Dc~n*HJ{<*Nou_fjtL1g<*;i}E4~TyUDV>YlC=tAy#%dhC4@w+ zcCTS?TE&p>k5)bfs&VxWa5E=irc}z`RSx$o!oC$mb{+IB<`gTPrCk`IcR)hY0OPlj2$g8>g5$hIx;N2+PPR{?9ZD807$M1gUy)D} zMSE@~dlPNXBqWMfOcL!5I94RmBAg+~`TakQe(+kvXj;s0$_lq2#H&XPOK_DFj<(lU zqHGjux1L=QUU-~7oTTEAm?7gYC+|oo^*QxOYb(=%Mm|`4Zxvw*-puU}*do81B-A}{ zJdo&8s#9)L2d8d)ZwpgG^d6Y(PwPRdsU)eU1nue<#)gDde`OcZ)TPtP2QRmLHsbPq zk8BkA{Uj|v0LP{Tol?sUrIvEfW&c#1PEv79s3>pgztwjnl={oN=+|1V1Lb_|t;)#? z_X&HEf0U%z8aSRvplLMY??D+D6i1Ti91T~W_!Rb;yh;5fHJhqpX~~3LuZN-|g=B_H z?LJRr>q$g@0*+@AV=5xw_lcZIB622VL_I}(A#YcIb$3eD6{IDXKfo6L5REEAGQjbr zY)dNWA3_=EL$g@tQ8dl(&Kr{Wc_l6!L@Rry&77L+#~Y?iVVNsaQsoYXGeL0V zsUT{PLXL;<)4?GXCx}jGw?sufWq|7}O~lhB#)`$b%ekzRuegCvh4% zmwB)yB~F2GJbA$Jl{Lo~sT^Mha(wB;@pTNx7Zv;}8r%rxxH-vjGmYa$49Dktj*pHU zA4NEZw!8}s9(m>%Kyh4oIZovqry-65lACA{SED~TdRAiPGBj3>wBwisk4teK%m94d zKZ40;vfX{tU712p7QX*K|0jd?r2SvWXEOp>aX!yC0azmkM>ilg67)4L!Xdjw)d9Q3 z<^y(%a%cu8>v%U*wwAg)bc*osx<7~c$|2`5F@!AQ>{|Yk-`_4nhtym=;+D<#b@gTX Gy8j1$9bVr6 literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/energy_systems/__pycache__/performance_curve.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/performance_curve.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e33db28d611d0b84db6527155dbfd5c31a87a7b7 GIT binary patch literal 4023 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 literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/energy_systems/__pycache__/thermal_storage_system.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/thermal_storage_system.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ae8aa5c07838c4489c6af441206f7f48f5912dac GIT binary patch literal 2858 zcmb_eTW=#Z6!uIe$#j~qH$cE@!CDYfkv6Kj5)a{`g|MoCZdEm`ghG(zj-6!6T!KAQ zk!;^uXLyA)R#iWX)p++YSX>lgFRS!*xH6MQS?E` zQ>na8GM=blI7;d77j$QP=OOJRv7aaraN2o%*r7v}WMl6@CCAcFVN*y&4}y>@`Xq@p z4^Lz&>1W{yS8_^)q)%0F#FYx@7@1m8$@Iv-ytw6aco%qKB?a~j)X;6(%d0vYOO?Bf1#yrvme<)y z5@wMEVkFT`fCv#@oxjZ@{!wa1U0x+0B zn60vgs-+v*AXm;=#yzi788>FT^0G-lZnNkpdjz<$6 z_z;c-R5Tfw<(W*g;G{uJ{p=|4X#@eI&}@{pl?1KgHXVcsPtDSWrRwmM+Qi{TIot#) zuN4ox1++#JliKv|N_7f8-|!$GG^DW`We}573!DKm4w&AaGV^x#zbiE6ibwQ>hnZZ| zYG2)gCogQ(fKOgE`~T2Rp|$QqpQ-kerg*Ys3dmXp-t{(kA^MQC*Pvenzz1^?*PvhU zT?75YCG@YS!&<;!Lp|=`u~i==A;XmbG`ElIaE^8jtq5>U6n#Gz*i!D@5-G0)m)|N&dSVk5eT5lwr5*3W#^GG)ttOVf7;*@dK96Db$wH(XjQyDLaJExtOe8*IrpV;(SfLry ziOFDjP0JJ#ya_XfMOdM;D10ez&I+L~!w`Pt7R*1Z{_Ku@02nE)8AtN4(mI=o~NtAm* YA)}fpTJFaMil1UBHD%Os8&;$8H*q!LhyVZp literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/energy_systems/energy_system.py b/hub/city_model_structure/energy_systems/energy_system.py index f76a93ae..d3a21f00 100644 --- a/hub/city_model_structure/energy_systems/energy_system.py +++ b/hub/city_model_structure/energy_systems/energy_system.py @@ -9,7 +9,8 @@ from typing import Union, List from pathlib import Path from hub.city_model_structure.energy_systems.distribution_system import DistributionSystem -from hub.city_model_structure.energy_systems.generation_system import GenerationSystem +from hub.city_model_structure.energy_systems.non_pv_generation_system import NonPvGenerationSystem +from hub.city_model_structure.energy_systems.pv_generation_system import PvGenerationSystem from hub.city_model_structure.energy_systems.control_system import ControlSystem from hub.city_model_structure.city_object import CityObject @@ -60,7 +61,7 @@ class EnergySystem: self._name = value @property - def generation_systems(self) -> List[GenerationSystem]: + def generation_systems(self) -> Union[List[NonPvGenerationSystem], List[PvGenerationSystem]]: """ Get generation systems :return: [GenerationSystem] diff --git a/hub/city_model_structure/greenery/__pycache__/__init__.cpython-39.pyc b/hub/city_model_structure/greenery/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fa613ace03d42688f9136480d00475622a07101b GIT binary patch literal 172 zcmYe~<>g`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_uvsFxJacWU< zOlfXWettgzq~^pImlTyImy{Nz#-tae krskyvNLuz?2kLM z4%qTt^9)?|1@Z!1aLHrrEmyn(SDZ6z$7?6HJl32&^W&LszH{cBVH+DI14`wOKl#O) zVf=%QY{^060II5i;6}^fCbxVuuv(Uhdd|-UcFQ)6LxbBqe`WCeTdS4l&Z$u?^#6iC zl}>yX#w3V%-xsCRlNUdcr{u_UMW_U5FS!U~uj2{XAV-HMN6__I?HR~OlBYh4g)B9r z-avZY^O*d7P3q6;b<&JNHS-9r1(!YS-sG5m=AW>@q4n9_DIq3!Jgiw z7Y`=0MBpiv_B^J67kUBnsfwe3#h^%`z)~!91+3vlb*jXhzEH7bu@{BO8U;uBP0=U> zOtun!C$Tj!XAEU)9!W)a%m7K}WNmDM zfsCTKeKK&*nGD8Wt=i}PGhJPvgTieRcyQTwWrazA-NP? z5o-sS#n|y97V9p+hUb&}D9{*FfJtfUvLD091m|{2+;q^@2Y?w^P`|lA7+=R1$b<`F z4G;CEr%2ywh@tp1~72m$pBuz7n!a0GFxS%%PN~y7mzUxNlVB;XS@^PJs3F3Ak306 zU3o=(FXxOkj*t)*(m+k7ff}7keY(u8))zs(4+B4BAb*&Wx+EO02>-`9_z=U%OeP^N z>oJVOi2m0uX?|ZPkZC-)f{@*o&|hA3mR%TVXU;NqkXzXUULj5zWLG@Pm$%Lm^dK0X z`GV;5GYj@-eBu0}`@o$y7NAXvlN81?kjJ@XGIU(s!5oBM$bl(n`Ee512a1HMD@jh*&i3T(NAKr2Ty^9}@J*a}(1YxzcT7Hkv|PI@ iCD$e?xrRKa$Z(mvkR`?EDLY?b!c~}z>_XWr=l%!wAj50` literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/greenery/__pycache__/soil.cpython-39.pyc b/hub/city_model_structure/greenery/__pycache__/soil.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d5ed8adaffbd09d2ef50c53a7bd01280c64651df GIT binary patch literal 3753 zcmb7H>2BLb5GEz+qA$r;oC{r`?jfYH4W}pqBM4k5tJ? z`{qrJG=<;on5V+OClc3-mxvy2JjQlSm!@snQNe>R?jfKo@E)9z0&Fi&oP7LuC(`hJr8`I6%=0pzQ{_7 zF9L6}1;v+uUt~*)H-TSfD~ewLzRW6$Uj%-Yttoy9_;t3S_+{WX**(Rt@RiFl+ZxYu z>^^&-Bo$r($-{WY9)VXLM+SOiP&NrsuCZN9N|@LS32l+jz^K8H-vSBsP@`Iy0jh^t zpqbDBnhkS6jW7>17Z!l#!y?c^SOQuMO`s*F0X3NhU)N8n3sH`GR+~pA1;;g89+xtz zP$v2m?9aM(;PjlJA1$gSh!2UgRW*|xZbP)#w8gC;TBkvai?-!b>s796F_`MpHRW2!@BULdE2(B z<2ivde;4R)NbX)lhB89w#s=jn6D;6LY=H_+CJnGQOaIEW`fIba|1_oY+i7&a*2ES> z$-l2_2aUIq3)$$lh3^NA)4tuZM0<2QWuw(SSHlLUf}t6AsSE@-9qip`3eG()`V9#Y zy3^@LMXF3nDdeDGuFIpgG0m1JP z^oLqG5FFrm2LzBgUQ?}Ab%FQcS{DdKDLW+hak>oT5e$iYwEUo?;NXENq3lgU83)BY zJeZHfLnLVW1ez6?Zo`PtEGsnQGgCr(ISC1(k0kFWaXj+NZu^Hxgcq)F1!@TlW+1Ft z0LviwA^~ti0lXdlDRCZ5;~ZTXg!rzx+kQ3&W9}}D6%c%xz*rt*9G#vL-r+R7_!1M$ zVhHm4-FMA-hQz3yX~cD<#OUCPAuXmkwg_E{N+OI8HzuT5&3krUZD)ilfw<4r1vph#MgIIRSBK#TjWm zCCKAjRvgzsa#P@-X&cr-y!TiK=eQrc#hDR`{b3^k{E2dZy3&(Ump7BT#N{fzCMUkf zvEjT)UXbRo1DdJPJrJ;jMpdOz{MC64f~~3pyowLR7^Rlb+>v`9VUV6M^OFI-{yrlvDECWdjv+VT{T~O6&hLY5h?L^kJZJjh$)y zMSwBO_|eBHI;`MEhr#E{IVoQHAHF%6^i67w?{v*asO@7Uw+cCdwGhV0BPZ2W?1-?f zpcL9??4RIY74VCc{s!IYNK&Ab`8K8E0lXU(JHqd95%g7;BCt6SSbzmqIDr*JV2&1; z1qJ3Afp=D5G(>sH1NaXn2(H|KQ=Dpiu(86VC7%N+>PEJ>lF`jVnqiFg8M?qzPO2G! WO^ce$`c_nYG1T`ZZdWETivIz^m!b^- literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/greenery/__pycache__/vegetation.cpython-39.pyc b/hub/city_model_structure/greenery/__pycache__/vegetation.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..82f4a9e80639c362e44ea571d96391b86334718a GIT binary patch literal 2439 zcmb7G&2A$_5S|&&Unc*_?xJv^kyd~uV(n(R5FwP67ey5enm`7zz& zNVam@965911@ZuJMdC5$%86ItL{;0K8ABFATV2!LRa5=VSJl;K>+695ZTrVx_|L9k z{Em}mYr*6Qx;g~GjnLpGw-Ph8Ld(Q)D`};6XzQ_^IH?=Drg3a=hr8DXci&i{$GyJM z_Q$`1gWwx66a_2dJR@n&$B78~y=UK&eR2{XTTuR;!sK0>1W>$=CVDwGCcY!OJG!(za{D5$j@O&(Idzd`DYs@?D6=y|NLB z>4SifMqr|ZDFsWB1F#nj#}@Q1boCL4EAz^rkP#r^yFgl37Rc6B3#5HzgLJq7dzq(g zw{&R6Qcx?(mjfc358@72~~w0 zN5xo*!B7g32{{>DRteh~O#m{Dv$&uXw@_;!4AZTC)7_fI&cZS>(Q4jsj9s$`#|?P9 z&>T%41L1@mi-OcU68u`dekcXN$_@!2jI*I$Ynu{1+?Wz^=#QR>9h|O%*n_SxXofr8 zY(PV|cZBtE1*;C+TM+>i4>ptcP#{A!o-(N4e;+gpSoa&SYKusN1~Y6pt}+jc)jab| z$SrHmTOW9e~=+f#RzM;_U|F*>0!pEi8OkH7G3uip3IcZWymo`u&(CbB#wS&m&6ZF1RcGk<3Rz z786~H^oc56B?`E|b^1vBXQAULku-@%T;h!>5m6)Ibn5AvhIbIwHT4jLZ`v*2x6Hu9 zZZAEz^qOT#eB-q3%lF_}y2WG!#Z&JTegNgab6e@}EJ}X|3=q3?sL2X6dr!tTQlL;`U?ntFAe|z literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/iot/__pycache__/__init__.cpython-39.pyc b/hub/city_model_structure/iot/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..148740e4012df921765d4b0434affc888e2c9eb5 GIT binary patch literal 167 zcmYe~<>g`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HIvsFxJacWU< zOlfXWettgzq~^pImlTyImy{Nz#$*CD e#K&jmWtPOp>lIYq;;;d#D9uT=1KIK!h#3G(r7P?J literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/iot/__pycache__/sensor.cpython-39.pyc b/hub/city_model_structure/iot/__pycache__/sensor.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..97f0a1ff9c4d2412769ba30162c612a0d0fad0c8 GIT binary patch literal 2244 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 WcF{9gW1jDXeJvd-q%TIRqyGiKJl+Wa literal 0 HcmV?d00001 diff --git a/hub/city_model_structure/iot/__pycache__/station.cpython-39.pyc b/hub/city_model_structure/iot/__pycache__/station.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7458aa74ea2798122ff49af4593387944c6ee2a5 GIT binary patch literal 1501 zcma)6&2HQ_5GEz9cCFY>f~Gz6QUW;?TOdN<_GARDflcfLH4Gz0fkNGakVRT%Ac-4_ zYOo96;%DfohxX`WE_r}FhR|D2eTAGdLrIHmn?t$a@K?iczWHX;ot=n4yZh@~@uyG7 zU%1$8utyG{*I$7VBq4$dub>Hq(J#ExPkc&_hzP{!nuyVBFA0QqMy6r&20n<+Y-*LR zSgA!*$ms0!@sI2QJ64&jY6-JvLRMB?C~5ZD@zLoqY<(R+1gi~uP^4CxXr>oSqw-73 z-rcahhkJW$rmIXFp;9(`@_fc}qnkx^YV-@4SvVBZu%kv5g@nO^Ya>@IcN?bEaX##o z+Gr~evcX%NrP1F2nw(5&8=e6|Z8BVMwg46f(Cb4mk^m1R@dQnLvEw+PNgzie6yt01 znkFI4Ct}OZ$8sbmITg`wRNNBV*8!YwIj(lwanIB0lZdf_v#dz#8rCO=8D?Q zpx2*)xuREulPeD_%?Vgf5Xb;Mnfk5Im1xJj)aR;@?S$7Zsv1s$S{4^cRCfu2Yi0z# zZitz{@c#SR{``kpntI-pMr%7iU1pc5DSMXd`DJtNdZz3W+zVOo+L|V_jgfN&AM}pn z#S)(7s#2EoI|w-hLud%U)tx@nc({;JJnS3J*MWWxi!1U1h}45(FkB?VI#tkUe+WA-Yo*}~{wlz?5U zog2_b7nL^7{l1Y9V6_kT-5Mx1sE9T|=j{mXH#gLbVb2lSnJv8HDe)EY7CQ%l~d`CjWyhJtqb?%l)5yV9dP<@fMMt0 z3j~S0lW?^=B&a*Wy671ApKzb9;X16H_<;UGSGlV4f#yD2?(!P*PhAE6Jm5wiK8kzX zi~7qA;I{|hgW$cB!)b&{tkP0)-bNf%3;#(l-{$;flNSBSm~){s&JF%CwiA%VLK?d? zyZHWXG)RuQiw0|D!(g5b*5@|#8r43bfgg=L8f`%zd(@pyM+TK(Zh>j + + ./schemas/ + + + 1 + Water + + + + + + 981.0 + 4180.0 + 0.6 + + + + + 1 + Natural-Gas Boiler + boiler + ALP080B + Alpine + 21.0 + 4.7 + 23.5 + 0.95 + True + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + Natural-Gas boiler + boiler + ALP105B + Alpine + 28.0 + 6.15 + 30.8 + 0.95 + True + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + Natural-Gas boiler + boiler + ALP150B + Alpine + 40.0 + 8.8 + 44 + 0.95 + True + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 4 + Natural-Gas boiler + boiler + ALP210B + Alpine + 57.0 + 12.3 + 61.5 + 0.95 + True + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + Natural-Gas boiler + boiler + ALTAC-136 + Alta + 33.0 + 4.0 + 35.2 + 0.95 + True + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 6 + Natural-Gas boiler + boiler + ALTA-120 + Alta + 33.0 + 4.0 + 35.2 + 0.95 + False + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 7 + Natural-Gas boiler + boiler + ASPN-085 + Aspen + 23.15 + 2.5 + 25.0 + 0.96 + + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 8 + Natural-Gas boiler + boiler + ASPN-110 + Aspen + 30.19 + 3.2 + 32.0 + 0.96 + + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 9 + Natural-Gas boiler + boiler + ASPNC-155 + Aspen + 42.5 + 4.5 + 45.0 + 0.95 + True + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 10 + Natural-Gas boiler + boiler + K2WTC-135B + K2 + 32.8 + 3.5 + 35.0 + 0.95 + True + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 11 + Natural-Gas boiler + boiler + K2WTC-180B + K2 + 49.5 + 5.3 + 53.0 + 0.95 + True + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 12 + Photovoltaic Module + Photovoltaic + 445MS + Canadian Solar + + + + + + + + + 2.01 + 1.048 + + + + + 13 + Air-to-Water heat pump + heat pump + CMAA 012 + TRANE + 51.7 + 0 + 51.7 + 3.32 + + Electricity + Air + water + + + + + + + + + 55.0 + 6.0 + 30.0 + 11.0 + + + + second degree multivariable function + COP + source_temperature + supply_temperature + + + + + + + + False + + + 14 + Air-to-Water heat pump + heat pump + CMAA 70 + TRANE + 279.3 + 0 + 279.3 + 3.07 + + Electricity + Air + water + + + + + + + + + 55.0 + 6.0 + 30.0 + 11.0 + + + + second degree multivariable function + COP + source_temperature + supply_temperature + + + + + + + + False + + + 15 + Air-to-Water heat pump + heat pump + CMAA 140 + TRANE + 557 + 0 + 557 + 3.46 + + Electricity + Air + water + + + + + + + + + 55.0 + 6.0 + 30.0 + 11.0 + + + + second degree multivariable function + COP + source_temperature + supply_temperature + + + + + + + + False + + + 16 + template Natural-Gas boiler + boiler + + + + + + 0.90 + + natural gas + + + + + + + + + + + + + + + + + + + + + + + 6 + + + + + 17 + template Electric boiler + boiler + + + + + + 0.95 + + electricity + + + + + + + + + + + + + + + + + + + + + + + 6 + + + + + 18 + template Air-to-Water heat pump + heat pump + + + + + + 3 + + electricity + Air + water + + + + 4.5 + + + + + + + + + + + + + + + + + 6 + + True + + + 19 + template Groundwater-to-Water heat pump + heat pump + + + + + + 3.5 + + electricity + Ground + water + + + + + + + + + + + + + + + + + + + + + 6 + + True + + + 20 + template Water-to-Water heat pump + heat pump + + + + + + 3.5 + + electricity + Water + water + + + + + + + + + + + + + + + + + + + + + 6 + + True + + + 21 + template Natural-Gas boiler + boiler + + + + + + 0.90 + + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 22 + template Electric boiler + boiler + + + + + + 0.95 + + electricity + + + + + + + + + + + + + + + + + + + + + + + + + + 23 + template Air-to-Water heat pump + heat pump + + + + + + 3 + + electricity + Air + water + + + + + + + + + + + + + + + + + + + + + True + + + 24 + template Groundwater-to-Water heat pump + heat pump + + + + + + 3.5 + + electricity + Ground + water + + + + + + + + + + + + + + + + + + + + + True + + + 25 + template Water-to-Water heat pump + heat pump + + + + + + 3.5 + + electricity + Water + water + + + + + + + + + + + + + + + + + + + + + True + + + 26 + template Photovoltaic Module + Photovoltaic + + + + 0.2 + + + + + + + 1.0 + 1.0 + + + + + + + 1 + Hot Water Storage Tank + thermal + HF 200 + reflex + 95.0 + + 1 + 90.0 + + + 2 + 0 + 1.5 + Steel + 0.5 + + + 1 + + sensible + + + + + 2 + Hot Water Storage Tank + thermal + HF 300 + reflex + 95.0 + + 1 + 90.0 + + + 2 + 0 + 1.5 + Steel + 0.6 + + + 1 + + sensible + + + + + 3 + Hot Water Storage Tank + thermal + HF 500 + reflex + 95.0 + + 1 + 90.0 + + + 2 + 0 + 1.5 + Steel + 0.5 + + + 1 + + sensible + + + + + 4 + Hot Water Storage Tank + thermal + HF 200 + reflex + 95.0 + + 1 + 90.0 + + 2 + 0 + 1.5 + Steel + 0.5 + + + 1 + + sensible + + + + + 5 + Hot Water Storage Tank + thermal + HF 200 + reflex + 95.0 + + 1 + 90.0 + + + 2 + 0 + 1.5 + Steel + 0.5 + + + 1 + + sensible + + + + + 6 + template Hot Water Storage Tank + thermal + HF 200 + + 95.0 + + 1 + 90.0 + + + 2 + 0 + 1.5 + Steel + + + + 1 + + sensible + + + + + + + 1 + Polyurethane + + + + + + + + 0.028 + + + 2 + Steel + + + + + + + + 18 + + + + + + + + + + + 1 + 4 pipe storage equipped air source heat pump and gas boiler + schemas/ASHP+TES+GasBoiler.jpg + + heating + cooling + domestic_hot_water + + + 21 + 18 + + + + 2 + 4 pipe storage equipped air source heat pump and electrical boiler + schemas/ASHP+TES+GasBoiler.jpg + + heating + cooling + domestic_hot_water + + + 22 + 18 + + + + 3 + 4 pipe storage equipped ground source heat pump and gas boiler + schemas/GSHP+TES+GasBoiler.jpg + + heating + cooling + domestic_hot_water + + + 21 + 19 + + + + 4 + 4 pipe storage equipped ground source heat pump and electrical boiler + schemas/GSHP+TES+ElectricBoiler.jpg + + heating + cooling + domestic_hot_water + + + 22 + 19 + + + + 5 + 4 pipe storage equipped ground source heat pump and gas boiler + schemas/WSHP+TES+GasBoiler.jpg + + heating + cooling + domestic_hot_water + + + 21 + 20 + + + + 6 + 4 pipe storage equipped ground source heat pump and electrical boiler + schemas/WSHP+TES+ElectricBoiler.jpg + + heating + cooling + domestic_hot_water + + + 22 + 20 + + + + 7 + Photovoltaic System + schemas/PV.jpg + + electricity + + + 26 + + + + + + PV+ASHP+GasBoiler+TES + + 7 + 1 + + + + PV+ASHP+ElectricBoiler+TES + + 7 + 2 + + + + PV+GSHP+GasBoiler+TES + + 7 + 3 + + + + PV+GSHP+ElectricBoiler+TES + + 7 + 4 + + + + PV+WSHP+GasBoiler+TES + + 7 + 5 + + + + PV+WSHP+ElectricBoiler+TES + + 7 + 6 + + + + ASHP+GasBoiler+TES + + 1 + + + + ASHP+ElectricBoiler+TES + + 2 + + + + GSHP+GasBoiler+TES + + 3 + + + + GSHP+ElectricBoiler+TES + + 4 + + + + WSHP+GasBoiler+TES + + 5 + + + + WSHP+ElectricBoiler+TES + + 6 + + + + + diff --git a/hub/data/energy_systems/north_america_systems.xml b/hub/data/energy_systems/north_america_systems.xml index 9ce9a4fe..ca090cda 100644 --- a/hub/data/energy_systems/north_america_systems.xml +++ b/hub/data/energy_systems/north_america_systems.xml @@ -6,7 +6,7 @@ - + diff --git a/hub/exports/__pycache__/__init__.cpython-39.pyc b/hub/exports/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9dc178b149a02cbaa0d86c4e3a454a438f48b2b3 GIT binary patch literal 150 zcmYe~<>g`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HuvsFxJacWU< zOlfXWettVg>+RZ6wbC literal 0 HcmV?d00001 diff --git a/hub/exports/__pycache__/energy_building_exports_factory.cpython-39.pyc b/hub/exports/__pycache__/energy_building_exports_factory.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c14b747ba79796737395d49411f4c358d7f728f GIT binary patch literal 3562 zcma)8&2JpH6(?tAzh+mqh(Q}w6FZW5C4G*(ptaf=4z^* zHu?=m*HtrZ^;?c^s4#8!+m3FkPP)>+Ldhc{S|WT&L^$*MSB3wSblU~Ylkj0C_1^dw zMWRHK?U{$qN4d7JM77$?I$qxwI6v78ZrnY&%h0v(NL)aCIQ9WDnE<*K)#y zWQ9%!TyP0b3eK@Z zHJ+=FE1t#3bK`)kM8G4WBt=a|l?Ed_9^rE1nFPsF$9T}`Z|MP_!K@^G3SQs|3Rb@& z0#SQO`+=;9x@f#4Gup2M-4rcHH-HXB+tE$Y5i2iAzvV1^wS4bV>rOrl8LK$h(gBtx z-<`Wathh12Sk}cypZw(0Pq*Uwsf#0xci)6&@a|J@N+R&tDLtacD*t<&afD` zHV>~I>EdR2m-#DAG`B%-G%lMF+&{5V^fsJeR-q%bPOs1qeodh2baL}jYxfocVhH=? zhxF2ZS72blV*3=DH}k*_bg~V$2RCs*fH96r*-I5WOze>H(MTmRw@IEck*6FYUp}`G z=rDm!!`K}yZK1O}Y%9;Co9X%*Pt*W}MB_tVQT-OusJp7W4piBW=4#ioGo&A-mhcWw=w}0iBQu2(5 zW~lbP>rPw-)rm;hmHsfOhP1aHIeh{f)c zym8S^*vALpY;mu8*n|0*r*;A0vysjZ;4F9X@kMfm0K#~YWx^V%!Yp5nuFFtPnmb`K zPCz$sqEWM3llJF;87WsikTYq| z{R0M~OEuz1_gaON04{h+6qWT6ygajI10I<}8U@+IvI(a-1{bqsTgyFAQWQhlE$i9< z1lY1JpC`teGRQ|VD{F^3v9fGx`DGz-+6SyH8{j+u4ps+nwhMiI4R29%@!wy;*WxQH z-1ZBt`kncM-IV?j?mGt)K?K{nuwYOYS-D16=}myd4*i(ELxcZJe((mofbD010#%9^ zbU=YJPaqLO(Vt=QL?`#pL}AWcQGnIQYgK_`eBIpLKqDlbz@T2k;SKE0J@LJH>VmQb zr7v)CP*oj2haC%S{Mnn{>Qdmva$ZvcUhj+&;Q16QQ>Zmi3I1eoMhOcj+Di@)aPlew zuzX+zy*OIsjhif@pK^gy(hr^ z4KyE$}AuGYH?Wdc{`9uSp)u2(j|iMfUHVg=+}Xeo#Stok0odS#N@%+K%t3R9~qnlR-M*}(coB?E^P`U9Bi--P<5SH0Bq z&OugBR<#TyZI|Zz-@A+%V$Xp=|K6os=(WA7e7o3pT_}}nC}b!VD8uv$n<(RI#PWwY uU)AHLHwTm@-+ZhasF?S$!z$q-wUy1gl|AmE54svGXmq@$*8#9`KmWg3=mdKJ literal 0 HcmV?d00001 diff --git a/hub/exports/__pycache__/exports_factory.cpython-39.pyc b/hub/exports/__pycache__/exports_factory.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..863f4f38484222016b8da6af95b92b499027a57d GIT binary patch literal 2674 zcmb_e&2J+$6d%t_Cdsth-F8_Dln;voC@XEWDz~y)Ep$J$(kfJ2A+1IgmNRyfsXTG8 zon;e+3+1PTYn312KpFPj-{oeEQ@N3s%51!jU z72=n==lzC*vrhnn2hi+uAi_&LL4>bJ?k7G$K2Sj(CSl2ks+LDdRPr@d&l^djV?C%5q3KO*1#9*}!RPc=q=~onaBQ+( z-_f6s>E_+dO}ecIsWu|xboG>mtQK9H${Ng)k=GRl;a&^b_T*u&^ z*D2^WUUHQQu$sYgfQD6&FgG5`6g8iHPJ;9WNTrt$2$U~K5{Ok1i13Icp{$9Th>pBN zl0?9lVF11kd{e}wyaD`@ST6Y{@Ylpj$;aZlxN+n`z`U=`h#F@NEXCSZ*7ZN^V@# zk*r--aqOAbVdFnP-QL>!+)88jM!C`2?d^=yJ~#O+1MOaa)Gb>TeY-d7*$n6Qa13s; zY>+v|UIUHx1`v-#WQD}=Hh_!BWc_@^+Vd|`f~#i_^4QAYG=Op5H$)JGcX9_pIS(?0 z!-)R&a#c#VjC3P2*rFXhkfo$^Op2Qw?VduS%N($i;*l}h922t&dP~k4uI_6E#V>XZ=)aUopN^!wI0C}~azhJ*=&87WL@^=Nkc95|L z1e$+{XM;>WJ_l4^Rt2mlbuJy$HLPRqD%e_qsiCD!B&dC%^&tZdw_$dU)Xj^*h57&8 zYTZ4!BG_OxLh`RxgNDt2vKrG(b{r&uHA2f=qxH@^2bFan|QzYPHYVDe%i z{s8-F)ukt8m!8yJ`YNB_ELXTWX)tSe8`iamxdrC5Y9@s4)bAo3@LZbfC|s0w5IDoP zVAkT{@}h{Wk?^m{x2+(F4+!c7(-993UGg!$@l)F!tU>W2%X(^|&Li6LXGh#AYZ z7%AkJ8T)d?)oiBDn9wO><_*wVG=@eGrEz2PHX4Bi%e;q#BEc**SX3@TfMu?{f3P~+ zw}3QA7{swp;ySco)+666*MW5g&v;SCJ4I#P@}5f8;W}tnPTKbDN2m=4r#ykl=Av19 z^0&dv{C9)#`Ts_l!i&{H6)DS6v5IQ@Qi0#L4L>}}p5CX694#96DlG3~e%NIoVSU+O ICgmIa4Z%>Q@c;k- literal 0 HcmV?d00001 diff --git a/hub/exports/building_energy/__pycache__/__init__.cpython-39.pyc b/hub/exports/building_energy/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d31106861591a249439cf345aa979947ce76167d GIT binary patch literal 166 zcmYe~<>g`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HwvsFxJacWU< zOlfXWett6J0@ e@tJv*k$}4gJ literal 0 HcmV?d00001 diff --git a/hub/exports/building_energy/__pycache__/energy_ade.cpython-39.pyc b/hub/exports/building_energy/__pycache__/energy_ade.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a21918845eedce4b51b2e040327f33aff824100f GIT binary patch literal 11315 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 WFZbka9G&75!A35R9j09#*Z&jyDfr+3 literal 0 HcmV?d00001 diff --git a/hub/exports/building_energy/__pycache__/idf.cpython-39.pyc b/hub/exports/building_energy/__pycache__/idf.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6286a2fd7b6087e086883af38d355102cd2a4815 GIT binary patch literal 24517 zcmcJ132({TlU%&4E|NFnXi@m*>5dJQF`?ouv|DI6jH+j?f7sbs* z{M^?7RLBacu!>Z|Rv6c4C9)N@qG9I6DzUA&6_<3RlGsW{LgCO>%1TR4ypq|mW6!oNB$aUUKwAe*W^(JhDDEejc!<^N&}G zbw_8WYTJ9dw6R&w|NQ&;3+FFf$WPU(Yc;J(#r)LF@>G69*LJrvOS)Ee*6Mhu9G$<6 z_g5VMqPJ?}mv`%UiFO)SYr0lS&p)~ar? za?7bZ`N_(yBC6+6auvmjT9@+MEHu8=D%9O-{?5NeU8+^`my5TG6;;fy)XFm5j5 z=PpD-AtwYp2w4#owxTLx#Z=UatC*EgaVx13R!SwUv`SeSmA0}fWA&)4)vJ0i*S%K1 z>a%jH-x^RkYfueXLu$|(Rzub?HEfNjW7cssVvVZf)(JIgom3~RQ|hF3TAi})Q>U#n z>OSj!b;io8`>nGoZ=F+Ttq0UO>p|zC^26!@z>g@VA5jmLqShEvkE(|OKdMdxKBn#i zd|aIY99Q?3;?@&LomU?Ld{R9EctNqw$JC>MPpOXrKCK=Dd`3ME_;EE3_^e{BPpI>y zj5VQ}>SOAux5CyZ)zj*kw?fu)&hzTy>e;tKZ-%WGkp6_4ko1e{lj=DbiOv*9B+MSyHcjF`_K>nYUurr_~MhD)N`rw<#Of zf_hCAaa~b2)f%p=N+}1|YieC>;CfwcsuHd*tFn3>*H=_UZQ*LEs;c4o8MUo;aJ`|l za&diC)zvPp-==P<+ql~54Yh~sYpS8X9oM3|0P5cdHmdc;iA+8}<5T}yslG?52bLn& zN?lr=o1dOrxa`HO#f2FwF+X?t%1XiNTU@y^vpn z)f%Hg9}26>vy)RZ6Vo#*lXLSk(~T2_E0gTpL{Osr=#>9xX?byJW_jh6iRGEu`I)Je z$%UyI>-Z&~zZG`%dU4H}cIw4a#Zgwz)Z#*6WqEaKWo~i7N?qm0%uUWW`h(QO!s6A* zLZNZIm9f0IID2j8GP=Y%jnlI;3o~d!?(XRDx$AQa(~H+zl?!tim6^-)lNP?he6E$f z>ZsE0)^crkW3zETM`dndc5dEp5?@%DySy+vzjz(*m}#70foqt8IgBnkaQOL9Vd~1v z^y)lDZSs|gD~qek^RF~=t<0&#t4o-iMsF(zubQz2gWHu?mS*PXuFkC#8i~c~6N~HX zUTRhs*XpHOwUL>u?&TMDw{AMx0u#ncP~ENVx>jns5kOxJ4bjYO^bL=A6EfS0S{o|jzNbzCOW z*BwPaw^n%l4vIIJc;KqDVahlDycM5aY<$B*@K>DsGNE)jCQj~rSZ$W89~inq)DV>s3dZR{bxwq$2L&L9%&|3Xg8$4qEagT z7Hfsd$EVHL9IK8ulhdJBAK6be!v~{H^lLxeOqWlfMp%Ef8H$CRfGMR-&Y#dU=`&a}Qid)X_1Y_zazWU-=Odmt0H85Yh?Pz zRz-)#B3@+tyq5~39(@881blsVYU0MK>uC4J?iTQ|eq(8GZL_Gid~wCSvAKIwe!lc{ zBWS~Rs*c{+yMgZ>-`?{w&s9opeXX{&{lW$s{{#F&4Tw+ct58YYcHuCw+89P>#=LQ_3hody$umVpG4E`tab1; z+?np#b&QzRXP1<+`9Lbj{d(8EvwgdLuQ`rZ#&znb#^Lf}XkgvzsXDiDt=**D=JneF z%dmxCcv*XL;T3yf_3EXWWiM^dE`!a0KOrAHc4cm1b#b-eCGEupdvSIa1*Yc;Q_C|e zGv0t*FX|1aZU;l@dP8c`Nku&FO2A*37@ z)Q<>>pR7k!_|5QVNemGcc|D|`K~9u+U{|qs!H(ovOiEwDGq5E;CxOxmIZ2d`p>(QM zIxeMe;aS=*9ak*UtdM{tC)$>J{EZtFh6kpvqbFbph=Nl)-^UKc8Zb>^TzXclH+TF@m ziZm(~$ZnQ0DMr$nAJ)NWD#iiq3 z(tr0@L_f{;a?+mLZtxIo=(8wQ!_Pej5CXzysD2brM$#;4FZSj^;BeWgX)Ww!AhFDH-f}o zkZ5>WQ^Dpk;Kk*}&$H{h5R(p#8dxuMb6tAFuGgf_XVC*U2M_|g;C~FibK#zFV@SrU zyL1=tAm3>5j>m9=k%2gakvW4=gWAcF;i#-fIC>a|sEh-|0*phna~wG6Sl4H8(U%FX z5X=#@mRG|O2Rr(ILCGh)jbg6YNh0igj-4Ml)Oo*X*Nk(i>cLND{D+Y+ybln4##fB+ zE6U__vDYKI&j=_x6sAIDd}ld+M5(9zQcsa9>1`=X5h~7BaK*Qm(<=OSEF7vn)p|WeEs{S(Th|)&4FmQvgjKg*tgbm@X(^@W z@o`>yWwW&Qx)kk!{H@5GZgGK2PQyUML~mi+S%ZOQ&AtLY;0*;0PTq8DdRtob1`0LU zLF~?~p=%|#bQ1zXN9Ndo{s>>1DFutZi)A}dWlXO`_Qf8wMoz zJ0;f;_zkATJ>bhP620f^idYbP&U8+JhuInOoTpJfOxQ8aU zux_n;r|$l=I+pNyg70j=mS-J@Y~RsV>jS-$cmI0OR8YY z_W0=c{usW`C0h@Htr9_dM65KcL?7pGh;G8GHsc*>Ue0byx1!sKO zj4=^A>(5kTLGPi}F47|w@O?x0$!Cb!Befs?oNx4KV=9F5Qz+$yZAh!}4sJp%Ri6R) z6DIBlXgu5b?IP(Hp^8hL_Rt+=z%bSs;`&(6p-I+nvH81FA}8023+MLdSpQ{K_)da0 z&HWYLie8-$X7+CV`wEI4F|{YdjR(J#&s*bM27kRsB=Hl9dk%&t!;k=toOuR|Y>adV zEf!k#7eenwyX4J|eAK}*N|~C{Crx)>jPA!(d_Pgga{eZl`hy#h{iL**+)t?lOmDGr z3i+e^nPytddFf{6LG|BR{7 zwP{wglCveJqUwX$iYgoWSUgb58SGI$-# zxgqyaRHw{4OhExQtH_@wqA}=a2@xJf!l#j+3!lfcLHswygt92_{#mWBarlEj%D^f7 zguHGcQ4iIro<(3C$8r`Bm5RI@gJnHNn>*y-ILHX(1Iu>wd(MlLn-C(2Lv~HpfpTwx z5LMz`Bj-+B2lB=6|7H}5Tkgq_yLld;$p2UHYeumcCKvQ~*mRILB9CRpQu-W9X)<5^Ac3r84R?@5*<_f11ypjORO=h zGHF=cp(#3MOYPQVxMHy!;gpD)9DWePo(Vq{Zk&)IKdN*W2aDs?{K*hoNMLx44lEjS zFvRbIGrb+bV3JEgf}j<|244b9!eSV+Q*brJ?6krl+ZmMr%z`7u>>lu-nB6P%oi@X$ zhw&O?BtgGJrDri}R(z_qwNJ$T2QmFa#!K!synVt$HW{IgR%IbIn{rQoougCGMTbU4GO8r zj0bdeA19G6ict6rD2if7@bB9^NIzXwx@MB=P-`ZC5jQ|}tQ%0_LORFsSDe2nNMU3@ zPBJLN_N$_=$MmR*?Zr+ z;za1Z2yAAd1K5MjeKYYM2#W7*wVAp{o1gdF{5;waNffH2U!UYh(P8$39|l|zQk1m; z*8FJ2C#yCu)<1$$#tiX3Q$Gseib#$eSa2ki?t2HPAmXrN1qOrssL zL&FNuG)C2@QyJBlAm@k6Faf|s5Z1Fui_6jE(Te_V6qY*5{FFdm_D8!}d7xov*Noo2g` zZGgWWZNv|?apsOTS`y1U;hpE?yJ-!Kh>Vi#kWo?#vUFPg)6RNvw^F~#MI3gb_akP( z?_J!jyCnsQgmxrBQ$b!tOfbV1yD+rWw&>7HM_4P^!0Q9wp@YjczGp9U%YhS2R8DU| zWLn?%U|dTlffMG<39($cdKo#^3ApK?T1gkNkheV+u6~U*zKh`R5Rk*dm}m_1fz<+D zGs*ya`b9jo`rBPFFSS|m+X((4!50V)2o6!ifKWu|>z^l4JcFXfU^YTaLxhI249LM) z`DuNCJtEQ<9tlUnDOevMPJmD-R5XsY$fUE?E=nOEq>L_<^0$#_VX=|PAExbBEZD#_ z;=QqC18=%)!Sy&K;{g9rlf3e{2pCxDkRmM*S6NTRDXU9qT7(VO1d=UQNtC9$Kc2|r)9TISA!Aq{rLg<1k<&-hU(q3y{E|#kHRLxn31-At3FesJUs1zFzK5Sno)<1=> z)jthj4MX8pwcA}&Z|lE@N0{q2?j5&HAWGX(Ya&s+{@N|brHlvJF#R76tN|7kAJSi?>Qd`{6 zCKY=dQ5s|Mg@%cbtU-mS=NtEtFz}&y;aMg#Sgl<=o~pt2bhpPo!B}VfM(l!97YCbN z2-HduCC~V++~qk8y%}+F8a!^z5rP}q;ce{+>zoYBSi+^>QX4jExHze5fzOeTV!|k09GQZBA_+uKw2-@TjG=z{$!mz)%LjoXh5T6DOItuKBfp<57&H51 zr&FMNUd{#ccCRwQ+})$h=!%1YGYa-At-+U0K$mOJ=7=rfh&JO9ZNwwmCPGjDOAMX< zB?6M8{^tZF+dvN>(RpdojLfi=DVDTPmzu`kL({CkjJ&_Zsim`oe9J6|87zY)9whdS z#_<*{b`yHn1d}33!!p6NppmNJ*aS5W!&9UT*t;IO5)2Et?&Dpt2v&${rIOsR#p3O9m{u;~zE5f$l+Tc;?75%0)`;=pJGXb6Tz zq2y2iO8{f(kSEs01Z!E^m_lO^#G+IjIo!=F>X03XMVej_IE930ygnCFsgH=abbBKxSn;}ojr_J z#-Sc`|8EkjjM&C_6$X6J57~)Rkw5Nmp9l52(1)ZhSdd(4^lX+A&I(3 z??4T(JD?O}*+i=ZN~OT)4EjW2X9o)eIx+m#e?qp(FY~12hI75R+1=re_d$w!H;`9)?;33RS>q)||%hWRUDcsx)j|y9mRg zz1zqX#4r6{2>vU8bz(^Zi)f8HggI7!i=E8_XMhYuCH>z3#nOA5i} z0Zjz1PW>A!P5jZnNpJ{h5aGGBG(X3P`hr26%pt^qZIeBx9b9n8>JOT>&8zfpvEAP$ z_#J}ZB{(Ga8zHFO*B>LQJcxoJAc_fZ5_G{@3AM3<34sy)QHM~}ZlMclx`ZN{AUh;k zqKPMvynq%m=h7d!^i)x?=ghKEg`U@Le~gVFU#U5Ebs;r!rEFAAXphSF|41!a__1QP~T!<;i94nj3vE6g)n5djxf7TybTK?d~xY*ehgN_+lGa_G&z9B;5~Q-upUx%@AL+YLJ$){i|As*PB%m?zI%t8k?d$lyIS4WPybdg(FC^>wUoufZA)E@1w0$rWzM>$TAjP}n&*{OpN zJqx(X)+$`ZoK%j{ufXv(3aU+UAK{MEp?4y${;=$DNK5)Wa5z%Vs4&7Nmv&xYTJlH4 zM3;q8>IE+7*kol|jB)!EN{97#BDWv*3*5`QV&xo48@~o(8ko29&dyC3v@(Ttdr^CTOoZ7Z5(4rB$bkb5yp`tUK|65yW?H?P)PiImV#nk9xb2f$bn0{e6oD1 zBL_+ha!z;Tz_Wv#`#N$E{#ia#zP}>}@@qNYm4ndG^4V6-ImP(o2kH-&9}Ip@WYgQX~bhU+`@`trDZMDeMu|`+5YPo?lkI`c+~Zw$<6U=8blsirx_h$g?n2ky$J%#0*MK1* zY&`Bqza#or{F%h8z7uhOpgpg6_6xWpR)vxN3H0n~cs>1oR^c}~fElHA&oBHqEoZ=( z3rIiPPM1GXo=`b8pa#{DF$eoO!*}EyyCY}hj-2B`4gxK?S@09(PXazC#@9=T>>1tX zra_bYyyTAV_ceRUFEsngFXEe{`ZaZ8zxSQ!&TCCT_oZg`;9|3fJx3nyKmmjMG-ZF{ zV6v6}y>fr4K85S_oARB^fmm>|s6hYNJ{)W-rmZ#)K9{E#8*2mh7c*xAhK*{To7ToN zQhIK^b@G7AO~{bH#AM^-VLHh}zPJSsn|cgK6jZQDd9#Ky2yWw`fILKdsL5P(*sR&y zmB)VnQW16*7v+(yZ-}g+yK%Y}j&5OE+6y!(thyKru{};thF(;#gt zu6LH0%>5E_YoZel6=`j$@SV9O1h)Sq+x`;4kF(WLU+D-O%q{O3wlws4!{~T+H zGWi5k=LvQR{w~2A1pf}e8)}*P+Hn-^m~6!R2mUEIsEx~|r7C!*){N7}ruX{LL;dS~ z#or+Kp9FtQ@Eri&h+v=y+oDkT^1o5jHd$f_J9ls4u#&FFZ?l14A^493|A7UEealB{ zC~1h*zrg2TCip{wuMzwj!3PBYo8X%S4+B8EmoPVf=eTDAeYUBOv^LH4m?E37`@&!c z%MYaUn@KBdL>+b_ma)tJBR>771Q!9YFSsixM&i<}7)|@oXpPO7lWO%CAF3-m zx4eY8!!CZt5_m~Jp5c&~uAjmi{s2_q{yY+)EVUMRYvo5f4r~Y9hJgDFeu?m?T$!c} z-~Pvrn-61=9BQ*Hw<{!2FZN*szZe1x`VRdMBJVUx#|~*{p9)W%C4Jtu~`)u3qe~7&8|pn%2>?mMF-#wH#?zm5Cg2o3hSV2<@_Db z3fo;7Wq_Sw!5(Pste4(cfU-h8#f$3QstIDu#RRTUK2+02T;~v3gfQdSdu?S2y8|pAZQFHczh%GORIhW$d zJjC}{xd*8S;Sq>pTU`j->f+`8a_&S3?#l(F2cWDDLinohETHTV%H|l3Q65JAG30;O zP6KdaXL@IX?>QI=f|;-h0vacovX=#C!cj$4aDQwQ+T_mix|N0H8v(62^~Z6?j_XgM zpp~J49VQTvm3{zYBco}h+axZ{WwwfMz*Emw#JK7W2gdZ`O{#c23#qDv324Rz(hVEZ z{QzE!_Fu0D^c{o_=A@aH?`|UN=j@MR=?1_3nU=ZU)zMq ztIZUWhWYvp(^rE-5rUAQi+s*X#~tTk#G@io@c;-DIDE=!Xc5q!4l=$z7b#~Y z-p17IF*Om94mT!AYzMo~L1fsdMip43ma(WcTrixui^E#aPnXu$cj-m-(|nd zp=OI)Fud7Egr70KKsaw;egYNKtBqJ2Y~H5&i-_M;pzdMXYS%1JCh$80kLLqb;6KlV4L`d*JiEhd*60BS!Bg{r4Kh}21_XT8Fo`k

}SlN3qothz#OFV)TNSxGbE;i!anr*-I?cSnqc@aiP$!zvw0XD&ASVMdBJS`FsH3 zXjN5`op6ih=#P_kFXG|VRa?3PNyzKvOIo-3`|vJ9d?R`sbFCRVYxtQ+#A|qto?^G~ z!n8L4yBALY!HEbqFbAhLv}wffN>YYC&nCL*K|jenL}Z0D4#Df>sYVVq0*h79}?KQBL6KVjl z&?oo%QTjE!En7a->=#RsZ{{5vUeGw)Af%rrc!uEP1kVzDf?$H+lLXx3rWwSmUm$pq z;3C22h<{^DwW!%TW+3_;4%Rz zTF)^h-6q56AlR39dq|8LMc$W4rYopQ*C`bpL#lLWlTd^EQRFj1!nnSnHbJ2o+RZyK6^eblGdk7Ih)O`{LyX$rN2^A2{wbz@8enDCSAdM{ z{g0XdPY8Ynz<29fLr37Xl?;NOlYUgTmMHn|8TPOvoV)5^4LG6=_jfr`!*~-!+$vf*HY2Wa-~W0<=$Y3EWncsJoqk0u{^`vJhk?+!+1~TzS3; zH`1+e-zjYP;F;yra0q)yu{YGePs=^_U-<2x1=kwt*!mM}+R&dSqvy!#6@pcQYXsK; za8ebg;qXF`!=v9Ld!ux2Hvh<841am!0+sXs2Ym??3!eXPmcS$6S2`AyBYKLJiB5-w zv70<@Poe>A*jw$b8c$rdZ5)Vb?*RGzCrR5@wKdz;e~L=_=L!A?!T%!oPXyl}_(g(W zCJ@ui6a4az0aydAXobLBE8AmaN0u(I!V=4#CXkh7m3jY%;ExD?jNtnTeuQ9*;BkVF z5qdicDUNv?5}amoP^wniEgnLNPDXaq?m+IB!vZ zo{th&5fp|4bCN5oGX*Bn*Jq}2LKBmzl`E^ul1j`j&q+>Ua%FXysYC&~8S7nHoR>!f z*jR)^b8T}>t<7fxh1IK9yR!6OXRjv+&hqU&+}crEGXbVr^f(&T^lJpW1aA<02Z5OH z-(%{1f*&OiSHw>;^>YNjK=4ZhUncl90*V#J6y7%8{~`0fM(|An@yEbA6f!=Vr=$jN zY30(iZfNRLn$nsUsdAAiVt5DE%fc_lG1@T(@N?N8$ZU|t?)e{SJ#DADYs6$@@Hb=0 zV1sbt8?jU?4f65-|8J}p;@pRs)2SiEVrTG6rcMH$z^@NK<_@JsQpr>{bu4v%Du+}L z{)ch{sbS=0Q@yD~Dwc|-ZsW-So;;j-5_f6MZ-O7e;Wt;1_L6kpR!TQz_q$~d2;9br z?-b#@V>lgkeAB6bF}venU6^K`gqQTQJopg(JQJk&7|TnH4=5FZqvpIttYqT|F_y#K z9d|r%8_9Vh-qUxj61Zc*eYao}9}i@Gdd>_w@MDgeIWP5`;S|($LT(>GEJY6kH{Ae6 F{~xz9qA>sf literal 0 HcmV?d00001 diff --git a/hub/exports/building_energy/insel/__pycache__/__init__.cpython-39.pyc b/hub/exports/building_energy/insel/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e57d6fa29f28cbd90ee0e3dcc238cbfa8a0dab57 GIT binary patch literal 172 zcmYe~<>g`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_uvsFxJacWU< zOlfXWett6I~= kdBv$YG4b)4d6^~g@p=W7w>WHa^HWN5Qtd!ieFkC%06y|9?*IS* literal 0 HcmV?d00001 diff --git a/hub/exports/building_energy/insel/__pycache__/insel_monthly_energy_balance.cpython-39.pyc b/hub/exports/building_energy/insel/__pycache__/insel_monthly_energy_balance.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bbaf23f09690df159392522bccd8ef379152d346 GIT binary patch literal 9241 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 literal 0 HcmV?d00001 diff --git a/hub/exports/formats/__pycache__/__init__.cpython-39.pyc b/hub/exports/formats/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..df68a86ee423a63097d461e7ca87fbdaa833034a GIT binary patch literal 158 zcmYe~<>g`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HsvsFxJacWU< zOlfXWettPO2Tq@XtWZ006N(C@%m2 literal 0 HcmV?d00001 diff --git a/hub/exports/formats/__pycache__/obj.cpython-39.pyc b/hub/exports/formats/__pycache__/obj.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4967b77d9ad3cf6cf47215b25ce60899389d35a4 GIT binary patch literal 3270 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 z zvf9E)0W>jtDxQ^78QIZ*msU6cYB5of>&UB_s7fNkvru5Hz*Qz`;=Ck30VylU4KhG* zD=Y0`A6YJb`r7?GKLZw#cec~g zYRf;J`cE_74u^3Te9bx7lXDQ;QjglCrDpW2D%BdRB)%i}p(F7TuY!9VKfedr&r#AC zga9*FWIC!Dpf%JMBq(24Rs&e-s&7jArDZHrSCe?_{A zsXooR_!WAT_5jz^INDQJB5@re|4CdMHgH3L7o;19<7;dH>y`J|aU4G-d+e(lY`TGH znF1R!Tze*>vNDs2AIllN$NE3K1_$FILVAzV>%VQPbk2{@=vA3Lr_%ThtEM^laf`I3 F{|8%AaZ3OI literal 0 HcmV?d00001 diff --git a/hub/exports/formats/__pycache__/stl.cpython-39.pyc b/hub/exports/formats/__pycache__/stl.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a6f0e629b4bc90d26065653a97206b417776c5d2 GIT binary patch literal 821 zcmYjQF>4z!6qfE3+r8Q?ZI@0(Ll+M@g1dzh0&WNe6HJ{#ISfKM$@T@^$&qxV4%rgO z)U{)G|AEe>KSOJ${)J9`vM(V5J-zqo?$f95-SJ*8K`>r?|0#Z8g#Lu$@gPtf!nAK8 z2$Ug#MWk>UWf4ZlNW_BNB0*$y6KAp5nV^2F{soUF^6OF?M>)+4x1vSmG@Up_XWEq9 zC6n=oFLalVidV~&NqN5bvnPtN^P{0hxt8Q zn)Bo@+yV8mPfkt2t9h-s$piFw#7$u-Bobv9{D}n4;yW}0mqdKq$;cfdC=0$2AAj{v_b51m^Old@KqP?n?49=1u+#bC1XBe zL1(Q(-ev5f=Bn9gGbVJ-*oMsa8hN=?3a}o~Zo|`%Jqsb&6)GFP)D9-`207^y^AdpU n4QNgqy=kL2bq_r?LF(p>N93Dh0=e(J-^x6IUt@a$X?NrQ?m^ks literal 0 HcmV?d00001 diff --git a/hub/exports/formats/__pycache__/triangular.cpython-39.pyc b/hub/exports/formats/__pycache__/triangular.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8d0588144ea351f9f8f0a0fae711207441be9b5c GIT binary patch literal 1449 zcmZuxPjBNy6rZujcH*YH-7G8;Tt;Y-2+~HSdt0s0itMUlRZ2vQfGB9>dM1gD?eUIn zN-F1+UJ(~QK+A2v1>$4O4RPWtaN>=fY%5@__vZP{ynny<>|l4-N3cHnP4mwQLVuc< z+slTRXF$ae7)KMtF}D(&S`!N!*-q?~ObAAYh!gHyBJQlMiNoC!H1MiFz{nRr=2De3 zpkY)l=}gI#mMTg`v7k{_N_wiIAe&c7py*7hG$`qZ@+_uO(V|QS{>k|HH}nxbib9bU z0;JEl$jWFI3H5{?9gdGc^?0}s94sCsK`E3!lKE0a^F>L2e@zee4-V)^W}#F(3h3y? zmm@k?vdaCjlCcO&IOIan!zxM=0b2>KmAIhuMxjzUoNslhRI(J$!mYPq82Eodk!XN5 z83*M8b`J_N)rCfXd%eN(eb5Rt!GNd5@x9M{dgFbV zFLj5pD2qzQjMJhSd+ctWi~FZYgZtP#0>4`~X_n!+X{pe9^z%%r@xp04p=}1J}%f3CfuE znVHcF&|td9*sCf?HYXlqT!xIPdtlSVyOo2PAJrrRe@tX*DVpiP#P&U9bjJf%eE_@m iOif92*5YbvYv61y{hvqOdD>?5iJ85|EpdCeXa572r-A1H literal 0 HcmV?d00001 diff --git a/hub/helpers/__pycache__/__init__.cpython-39.pyc b/hub/helpers/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..be58587fd1876fd4a0730feb36b9aa4763277725 GIT binary patch literal 150 zcmYe~<>g`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HuvsFxJacWU< zOlfXWett=r#g^jOF@hq26F6;+z)0GrP+br-cO}uKNOeg% zv5@p)qbN|Ir=q>|U?2Sj+Iv3+uRZlE^wgQ9L{m0pS*cSAq{JaPyYu6Jmb;@44rV3z zjQsLDogS5>zwjXZiNnD|*z8-dqf$wtGL0E>NrvCJ5v#>ZaamfFXo4oUB%0iel@c`e zLdvDwKj4P!f@PNVipy0;w@gxHMxF8Oi{-~(l1Z|pYs|D6{QH}OaFQ}k z7G2#i82mWknzII}2m`NK`AW-Hv$*B3hg!>9UQ@GwL)WEeIoV4rt4>wJqwpsI2M=Mh z=VVD@60nd;F)EkhG)CiFQYpcbEJYK)$uvn*TZv7%lnyLunh};vVCkb-Vd)Dj{d7QB zvVmog4hc(tU^zjDg=HYHjL?(9G8kA!>6ow#1(s8ETv$#7meX`XScU`38G2S&Mgq$@ zdR|yg29^u-qOgnxmP?cf%UEE!Os@#bslalTUK5sadL0zR*#n#|ioRc=??f8!LR(2BG$sOs9q@>xAe)j(Cz5B)K;@!D>h2r$gEW2HtniE%feXEeAaC61>hQJ??Z28K? zcpr4d%T$)+e$5a6i^%ZR z*GCBdu;}>+GzW33uS0R~#zov5253nr%HSB@{;*Gh?L2IUhu!A6=dfQzg^feB=@2o> z6RS*g6NYRPWKdCc({wX@Iunp+55tip9ujv zyFZq__B%s51AsmZLCPNm(w^gR>6F}YKowY~+TRA|NYCMWY z*An#++Ui-9$Ar;xoh}>;Q}2k8z3ztbG9WaM1!JqNo-ry>YP2mK7l9^qaqg=-8|~6_ zELW@IS^&j|l^b*4q`!#7!nzwlk2uN&9y@F63IJITLAf5Ktpomg4*aW*fjd=Q`^IFp z-DA{KkZ`q7vJHt&2HrYHd=;YoE);R(g16mS&*5ST=D>R2u3GTwd!^#?hLv&liBryf zVOL=|qLz8XAyvE(9-{4V6b6(8p|qn{Ot$awPvwgt4CA5|1zS-YOr2X0le6I^ zMHNQWTR2u9IIg!jt|vLJm^dy7I8JmqPT@FCKsdfMIl&zcUL2E^qkcI)HIBiA>Ka%f zv2o6vkrVMuGA0kFyKEUak6Xlb96jceJO@8K4LdJghib2(uZqf_I33j! VFY~~s^byv`M4c^>%E$xpe*r1IKD__{ literal 0 HcmV?d00001 diff --git a/hub/helpers/__pycache__/constants.cpython-39.pyc b/hub/helpers/__pycache__/constants.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bdf6694aed46775095c90748d883bac10004eab2 GIT binary patch literal 7358 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 JjlM;k{{cLc!J7a8 literal 0 HcmV?d00001 diff --git a/hub/helpers/__pycache__/dictionaries.cpython-39.pyc b/hub/helpers/__pycache__/dictionaries.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dffe6758cd4df1806cfb8580d0498be7ec791e11 GIT binary patch literal 8959 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 ALjV8( literal 0 HcmV?d00001 diff --git a/hub/helpers/__pycache__/location.cpython-39.pyc b/hub/helpers/__pycache__/location.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac83e9481b0df6c63f9ef290092ba1c2d5996a39 GIT binary patch literal 1791 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 Yv3FZ6E4|QG{`1D*vAG~Eluq^k2Mb=>LI3~& literal 0 HcmV?d00001 diff --git a/hub/helpers/data/__pycache__/eilat_function_to_hub_function.cpython-39.pyc b/hub/helpers/data/__pycache__/eilat_function_to_hub_function.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c4cd43f1c00732608f1bc4c51939a43db9725d40 GIT binary patch literal 1195 zcmah}&1xGl5SDh=KUpWG4YZV=1f@`i)`a9{N=dNY#NZ^xNlLpI#AYSO8+KQ&qz%|j zPsua%lo!Yg^a1(^J?^!=^c8w29j)yo&_69R%#3D6qi;s*FD%sIEb0<-o}wUB-Tcefb^Iuwa7L#{|H zSQ>FM5R$aQ$k$|$Ciynef(+B6Yu(-NHs6rvq!R`_Q5>W;#9kJk;d#6X1VXaVCyiFGL5`(JM{ZY&6CP;TWL%Oi)FH`^ zNR%I)a?QzRbm~h!A&iql86NpkhGb-%YVozxMlerY3w-xG+!O5vhTmQeC>ua(1sF#j z2Iwq?J)2p~zCfPC3%tmjOUw$ac;TF5uf$3KTseD`gY#;J&4JiXkLJo`#U=m2js%gf z6u1Q#4xTR~n~EAh>LD5{>qfnQsJK-9G?qf>es>%UeHqW1r1~%wQ{vIcxG`V*eQt(_&WDF;LBZ`> zuZ_l8nbI%`HKljWeapZQcFgy4^7!xQ*5*-FoE0V4sZ4$Y(Eyo)SOnn=ofydQi z$QIW`4>`HHZ*HznQ`O1)54m2&vIN1>l$FCUWff2}_a^oM=n5VrLdD6Ge-wQau?xck zH&6VSQ<}MyP9Ge|iLmz6xX{&1RNR;*yt+LY0lr3D_r1`7lv41)$E5DeQ{?fp$ K%-}kuW&0OEa7eoV literal 0 HcmV?d00001 diff --git a/hub/helpers/data/__pycache__/hft_function_to_hub_function.cpython-39.pyc b/hub/helpers/data/__pycache__/hft_function_to_hub_function.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6d72189eb262175b55ea471a67531f0e97a0b7d3 GIT binary patch literal 1524 zcmaJ>&2HO95MEN$A7wdpf+9g%6x;R^6^#%$$i*lM3lc36rG6k$NFxYXFx-_zgXF5a zOB7PmQ~V4)*(iS=t~Qs z-*e;cDu8hckWWESG(*&&W^5#;i42q!W|o1vh!&`IiKz9?oE51#L5*Ve8-&}PC{z(o z0}(Na6Hc?3;RP4Cw@`SIrQ1!cI9_INZftup>U@WvVJ`|yA8d zy=XoM37MY7fnvgL^VM2J=Sziuy~4-OkB@Piry&ShX33%0p-h=ez9e0?ssVyEFgTQdyoKj72QAk5|61?=sZ`Vtg|W(KfjQe#%2 zCM{f|nZ=5%M6LG*Ez;7Z_0E`;X&Jbx=qJF(*)<(L?`3cH#^$Mw|CcNr#(|U&6dHF* z$@N1(8z4_XD0E=}Oh5r(0g8YUpbV%0ssI~M0~`SA)OcTii^w5GP@_3$)OAfT8EtzJ z#G6MlO3(9l21yjJ@sekfZH|&GhECma>EaUji*;qmO4E4_6{e0;czr|A>uWe zw0pxLY&o528*&W?y54s>?zB&aXJ>BP(Fa~@+;#R=jnMu5Szj62k}O_aA@LD3^e?}C zGM`E&{-lB_q%#6)fFv}QsnZjzx z@a^|+-6y+LC-}#owsyl1kKwR*l8c;{o%k3uZQq{7U`rDODs8^Fx8&RS0bEI7A`KEo zh_(sY{kcFtAmsZjh_83bgisz5B66a1WhFQ;t=8JgQ;AQ(d8eptd3j|bucQW$6%ZA} zDpZb4W9w~{#OL7CA3|T6%U$D|Fzr$Wsgk;U?b6j7pQu9o_UwPXN>{$#mHtgmw#e=kam<|%_ZCyLP%c?i`|0F8u}ReoY2i#t~CeB%~knG!*1C zR-~7nkkd5Ef<(te$dG9g#8IMEI`&S({$Z>3iL8*O3`CR&ST(qav^+LEzQ*k=*TPi*mfrcO#inIWP zB6|RWg%?5#QVB1Z5+lL|Ia2b3DJ99kCYAelNm~GVT(}%C|0g^e?FZJ*4i7e4Fq79{ z1nOeo(c!r3a)-M&sOyQG$aC)-<~g3f@vd>Vzze`)(Y)MEPqrsSb>h0E30`u?(lj)B z=Mw^{|B#wxKTIkKLY5?OCcuDbI_%muLltHww?^lfW3T`gteaVnJFo_sW$p^mJVyZ3 z-R~~7MItk0SV&J&8FCq&jofIJl?uiUv@rAS`eCD1-|sXkO_SR_=+v8Lu6EGgYjh6U zpN(IubShN{*W1S1uC({eJmu5=8Qx;!B_ce%MQQ=y{SK;|$47}!$#L3OajcJ9!=T4h ze&NQAF2g=?z@Yr-?IRy>e|jH!5?F~?Ur=g%O2;2HtQRQ#lCp3TDNxGe zfKv6uUSAxj7(~!R#5qoZN&cT_tlvhjOGcQ2Ga&N3@ nITMaWIx&Tb%go*Rl>O(*&OUUNDZU>=|6r+4>=)`4p1Xemu&ZoW literal 0 HcmV?d00001 diff --git a/hub/helpers/data/__pycache__/hub_function_to_montreal_custom_costs_function.cpython-39.pyc b/hub/helpers/data/__pycache__/hub_function_to_montreal_custom_costs_function.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..67a9783645f3db40e40be4996527a6e7ffc64bd8 GIT binary patch literal 2745 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 literal 0 HcmV?d00001 diff --git a/hub/helpers/data/__pycache__/hub_function_to_nrel_construction_function.cpython-39.pyc b/hub/helpers/data/__pycache__/hub_function_to_nrel_construction_function.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2f78d51756f02febd3ff76fcee60b7539e393a8e GIT binary patch literal 2955 zcmc&$TXWmS6$VI(7m$)=DYl$6P0=)NqahX$hMSv;1kdrKM-l2s z($Ac^`c#3r3vc!|0FlllB9lrYPb(EkmZsISnk)?@QYEz~5~=-IIolu=U)tX&{t4a(f#0j`JC~`1Oqs3A{r)hUBvr?Mo(OvMgwALMm%D*5` z$sTjO`qY5A3vc!gKqQ^Xkh=N$u}4*&y{NwIAiP25CU%n(X$l zxZhtUCrE7?CE)!!Gpmusp`xmw`CJ}np!`4bsH$TbJXt-QUcjrvoBb8ITzV)I84#QV z1UCU|0->Zp*GUzyL27_avH{o{J3+rC zX5AL}dx3utzP&Bzec|Cd0^b$*p1=cvU4ieDU9fg2@B<;aBk)6k9|`OZXaWtKEVi=NVjfYj|6PhmD;5gWZl?oa{oVUI&;_-Jc8DXuzfcZ&UWYPYY ztUAsk*7gh^^$a^en#p#3WDiUO_caTdr+Da$e1q*+BQrqH%UYguvK~e~>>=O4nyYz% z1*X{U5DkVe3SV{leWZh$-NRbXLN@XPPYaM^vyN|Rrin`hwrLqXG_qD~$JD%mvEmfn z8F@kJS*MRY1N*_!h-=s=5RrJNY|C{_zS?TE?K*z2GSV>7SDpr1Eu%Nm%jsLLhb)j` zUmrS-$zFS&$0sNlVt?qI7#`d94c)POSG1LpjqVwqkAhS7hN*q!Kx7UWOb6`5Q0fT{tOx7GazKa5=!Jab;unRtcG9DV53Crr5XR!8F=5?3{!SifG z9V|$X2Y>ERv$cW2AW4=5A81}v1+t7>%oEJo{>U{vi1OG7*zIy@9+NAg;|qI6-$Mff zyf=Ed?>Ig7=8I}C(NQ48KpS}))c)2tBcvZ=-|+77{9hT_>yMzwFB#YvI)P!b9q|t@ ztFN1y?}NvpGfIVa*$E}n>N%c;c#_$cagXQ0be5&O4#nXTXsuPwYeNzLz%vYc*|<$) z_ePMMQ`S6jyknjQ);fVqm(6u^O+FVeyXL!&7x>Rs>nsH@)7DsPaBA6_5B>Pisum$_V7FNsF+|@>b!;RhJTT@3S@3Jk} zZO44-K=XLbTX6QH0fH^d6dMBPiy1wp^t3=*HeRi-c@}G9vbs)OK9yN5i;|0{5*@+` z_V4@p(fJ6zDA{>2rD>XzBqteuo`si!fAvtQ!p+slt6bd{=Nv4FT27i8=P^h~8TZ%P5D_#GBXFlUM#ad&h`XAI?S=s;q literal 0 HcmV?d00001 diff --git a/hub/helpers/data/__pycache__/hub_usage_to_comnet_usage.cpython-39.pyc b/hub/helpers/data/__pycache__/hub_usage_to_comnet_usage.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4a67fa4e964242be70d56de6f33bc4c8c270fe6b GIT binary patch literal 3146 zcmc&$+jiT=6$LM%c#&jVvLxHF6~wLED2*xC=~YcqLm)_E88-upSuBqsNb-G9D+CguW;%wk)2~ zBtL6gGdmn z#1p*fXMjLBt{_xZQaP@XDyh8{j_biv&>;0cSI81+ysdv%IbJ5q2voD!9Of@aEEaB3 zMuHQw2W?Tr%w?FySHdKYBR@?cF|J^{#lyxkyfWVOTTq$sszNG2SOTnZtaDuA*x3H(g0o~%fRcT3A{mCz;%ur9B*>m!OhVcV(9rz=TKjxfI$qjIJ$vW^e zjz1wA7=KP~0w0o1V3%wG_sBNz5yzjBTNpnkw}D@fJHVfjkAOcXcY(hk_kh17JHTI& zkAc4?B5H5)9%X za+1?*lH_SHy9Tl!(m-@FpPd%Yu!10N;4+B5SCSxB)$Wa)F1*a=5{oi^1IlIG+xQKCWY^Cg4xY3!$AJ}oy&xHT5;Ex0MV zlYreYJb5~D1*tnwVg(ep*p%5KF>MPmmM53`amqF+bGZeUlxN8lieCqprt_5g^c$vQ z;8Ps`*(OBoAPP@Il!bVJ`-xz7_qRoDoCQV4Rvfjb7_KU5#fGCA15NSzlCEk;-q0L5 zO0lkwG*^9}*RsvSi)ppz*{Y*>k|o)$4pqg*P#p}v&%AB+`>G5vqvuIIT{Tq4wIx?I zjbg>oB~9~6fnrrxdg@4DkSm&G50nMfmd%mvmX@vbRa@~Kcdo=z4AteH*hj^hWom4< z#cani9e1H*SyK;e2~sVkHGsG_pDVVbx<|#1CLNgY%!D%LEF!E(wmkG?7>CvCu!+S$GYtikuB2*3b7(r2>LLf* z=E(Id*aTs3s7M;Nl_gs#I#-FiSO@1>w2=oL;j!_xhLRx-lmbE0b^JrIoVF2V)$&+? zi;gq06dPVXRovo1xi$02;@+{1ZKZFk0|nMAJ+E(?z2g4Ê@hKsH=vL)pH*0Yf+ zKlL2Ne$L{5WoElSLXtl)u{1PYMJv|%k2lZ0tVxaoi+N>~0-drFN}|;>ZCzzSF4mOi zEDoAEPvs3HhjCC^i~_LqxhPuC0sVdkz=Z z9Luy_=W@4|IRh&Vsb~$3bVG7bzr~hrauY07c1I{w7YTHc$cBz%h52pdqR*T#1|Ck1 zb0M&Xb763;Wod3mBiCfgp0lGVs~W4aHJrAmZ0SISK>`w#FE83n{_QM#j zc;4@GKbp@hdmc%~o=5v^x8@m5kihJ`s54b`2<8=wxNXcV%FO8CO`CvbrCx7J)e7hC zHmC+(v5E9|CuKc!(bJ}xA7^Q?JZBZH3m#=nKVSQyt%~NCrRiU@NT;mxtuL?F{tFLI BiSqye literal 0 HcmV?d00001 diff --git a/hub/helpers/data/__pycache__/hub_usage_to_eilat_usage.cpython-39.pyc b/hub/helpers/data/__pycache__/hub_usage_to_eilat_usage.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..750e7d877b8400291a113ec21cf04e431b39b8be GIT binary patch literal 1203 zcmZuw&2AGh5Vm(WKivXF6(Dgy_`rc62o>BSgc>EGt(2xwno1B=vfQ=XY_+=%wzpCO zoakfl0(}LJ+&FXdfeR-d0k|;UG_(@6$B~I;##AgcNhQw{ zK@O!NAI3s8NOz;(1=I8T8X%nV z1mc7WTXHg0@zL0jFK6W0+Oy}RC9_B>9y8MF3|iz!$$S#_l{^-aflV$H>BFUpY|Biu zI;GJ;%yW7Mv9F>_JEfY+T6~i4vwY zI7ApOTMQ?=qPAcaWi#j)a}4Nl576g6V88>w5)b0idqm3|xw7@_@<8agAe|+%l}%|x zLPR=A2p04PG?|+jg1qMQcpYunn|G4$qLf0U7`9w;KCV4>*`4Y**xp8KgGti=?sF75-mYS>e$<$UUjkDNLdebp-4FGv%d_Moo?p?)ueGyZ` zwycE7RrVjrj_88qG6?U{v7->r9z#6{*${@9u^<=kEX{VCU>Wg{mFCEd^eXO9e>i-4!Tt>|R literal 0 HcmV?d00001 diff --git a/hub/helpers/data/__pycache__/hub_usage_to_hft_usage.cpython-39.pyc b/hub/helpers/data/__pycache__/hub_usage_to_hft_usage.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eaf1214cca316b2b2129f36449b50176efad2ccb GIT binary patch literal 2926 zcmc&$%XZtw83ss-B0)*EC0nv{u~D~atR#{hr&l#ejern|BU~5&v?3j!GY95CB78tX z#iglOcNITIU%;=>W%~p@-OaYEK0p`ks^1JqNlv^kBz&Czn}25h+h8VKT~#DJfBDCM z=)YGa>7QJ<`qUvj!J9t-Q0Z8rGOZ=@q*jw;X;MFK$Wl+Db=r6((Z+YR<0V@2rR}Bi z?@(8|@u-N?X_&=Pu1-=~CXsrQX6m?nu9kUt8mUF9_D_mRQ2asn8+Avu;!!lsBeYB! zO^f&>jJ2PVpY1*ZVve08ETT-&)3fs|J{=e8Utg<_A3c7o>gjZpW;6~}-SBkv zG)v1fWss#WqEUfP8f9v)j1!pBD+^4WMYB1PP14;9&Q7zmh@OlVv+a&TKClcqx%Dsf2vqc33Bi@>o=Dn9MfvczVi9KAgnKxjIhEJeu8@lnHA3Ds?A4 zIYG^<;gqT&oy5~PFS3yDoY{Il8mDQZej68KH6N$nMj2~Iv>a94x2|-jWii*7-Alsf zDP~Bsb1^B5io$F(REXFYAG@^W;rP^jY&Xj(;#wc;r)5fLcoXK8k+JgZM1hBIZFPIur3 z%-H@dtB;C^bv(m2yM_~(n#DGJ)9G0T+1G5-IwE~{=o@U^9$JC5-zV?5`}?L2HK$9ou5CJ|A9z||x(-|MZOyVsrNCBgqiYWBg}7pA zUe8!aitY}*pt5Xb-}DUP2lGh=hGPc86Yq$v4P1+_w&?8)Tt8S$vTT`Oc^b6ZMt7)J z!`B9$X@eua-gjM#z4N9_4$YuX{Jwi=cK);HV1?Un05T&!0_PZff29|s-?M41K}NC z*faJ$vuD71qf7Q(x6AH-U+pbA3S11dp{F7Dx4#~m`T_9`?loHymcy{DJEQ{^e>ba{?nBjkSA6wxju| zU$$wx!i0gT2SXHUfCL6eWYfmBLjM+WvCo}wdIUSizff4izHr2>RcUT$!@%W}J>^?d zH!WUeYuIfEd}vSec+T6NVVOM>Tb3yf9OsJ}U8Z!kK${m{V_)-Z)**Cp*EoMIvql~z zC$FXK0B7QV9ewZFFvn-_Svkqlw0Jf+AC1FoGQSh#&u|^7-Y7ZaYBVfDPLPrx&7?>P zj^IkzJv(PDLhy+$2)WKr+?N2U)|CHGe}9|3`@=iL?!v-tnek73nN5FiW#HEaab;+t z@ltxh4={Q532qmv+KUR6p8=OK74%*;)t>stKM8qT&iWXfnH+eiE3nXF%H`OvA?G!K z)SSKl7Gp0p9bAbJ-Dx<92w@5#)twRT6+(VjhRM8VnGl+e2+3@|RO>8Dk+Q!S!Dal~ ZEXKZVDc1VDGW|;)=A2&;8_VnU{{ggQOTPdB literal 0 HcmV?d00001 diff --git a/hub/helpers/data/__pycache__/hub_usage_to_nrcan_usage.cpython-39.pyc b/hub/helpers/data/__pycache__/hub_usage_to_nrcan_usage.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c88afaf048be08a7d7c2a4caa8fc1ca615d55a2 GIT binary patch literal 3080 zcmc&$*?QZ?6$Te^muyS6JR1d3Mt#d_DbPq^2+Oo~wpTx(a8u~$;1sEwLi1Y9`4AMPO z9hfReU+z2sLdxUF%Y(GlO-|3!@MMyU|9B@pee(3F*iB+TNlEC5UD@i2Cuvfgw#+nn z8TdICNsx+zB8;HSpvWOQ4Q2~MI!$)YX3aP!V{!kj%NgaM_(3`{JXvAFMBzo$5F(1!9 zZiylmE}RszwZ+tryetEQU&3L_hmB`=yLhwjG0TOQB~k)H4`793mE#J>8pk>*W3|Dt z$+5+;O)8*wNENtBR)A}y2E0bllAQ zHh_=GP2di>1>7Z@z$YAkLAEe{N^S$cBzJ(nBzJ+oBKLs5Cij8AArFARB@cnWBaeW4 zLLE22DnT*P56ra>0+B=#cl2w6wM_+(r&j*pS! zV2)G!@!I3iRgna`cW8%{_I{4Kk*4_ z>&Q#RC@JETU^fcFtU!I-KVS5{;{atBdb`ISbU02DGHVY}DABIQkT!csIt}xLDTGRV z#cW7o5fz<7P}52N8jBMzie{B~*PCr>UR)e|eqN;PaE!tTijNxyN&4q(lAO}!0hFA( z=$ia}koqBRhK00_eVU|s#>|VoadU7sjlC=^rVyL(Q%`XNL4Pry1Rjnb*EF~q>sw}! z;wGB1Gd(6@!7$r$QZLS!R33+Og=QO4ktb6~eT6%0q2+ANhMnvlJMq}hY~2c?@FYY$ z&ttv)2U_v-fVM5!R(i7TD3VGyY(*cavfGz5MLl$f#>kfGx;9cB<$YSyG7ip{m7Z%U zw(Lr#WH}l{(T$-p82*@e$LRN!F4***EA=!*S8T_U9L3OS$JQiOb>|FpRg-(lNLx-j zs$>o1<*d~;MwT zKd@w3UnFir(R(8}=a4oI3~Qgc0Ywc@&y#EOeE6Qh^qOrNmSbO>)>#m+Q;+n+`5Q#1jE#7?#|Uo0ngusc zT;3AQr#q)-wBfqAzjN2U&N_fM0HItf{X~ENoISXzui07ZxLu;PG{DUq|6dcs8X4Zi z)G&A>ykwu$((DWLJEAxUa&}RR7k=gBy}778@%7*Me7ls&*qrtmFn7;E!HBjl_I`(X zRt5;Q*`q7fz2Mc+s=>ptHw|2uwp@4K&0^ef-MPiqrF6rb7M{OPt;C@6xLIfxjsq10OtY2C(HNJD5V)+I1(cP7o2%}$(|MH1_& z{SIDw7JBeY_!Yd3M^AnQLGaBcX$w|od5`yJ-kUeS_hzHzWgo%%{N)?_!~5m_V?uEB#4=oJW5HND=mhkpYxPxK?eC@A^UsXtpl=3+DXha#X;I;Jkv=(;j%&6t!^7k zPwQ*IA=_#iX)gUhjK(rK8ffzMf~>EtuaiJzv5+i@NYLC3$dMHJ$nQ#V%wr8s#wBUx zNeV@^at)~^pUez$DC(EC9U+D08}U3_J&ydJa6QzCEx*1zP&R;|H6#KX`~cv zj4_-&Uskq71wiT^FpZ8ekOSm0eD0ng>M;Z*IGvgsx<`=;7kLT*$s|tnI9!lCSv2I7 z8lTeX8v}WX(sy~3&O8-LnTRQsOZLp_ND9DLkBw(j$y;E&R+sISw8cqVj1>w*tJrg^ z6$cmAT3N1u!`y)`)Cbdc)!~6C9c5aX%FJXIE^X5ONQ&5-jxyC})6$i{9WY<}ona zbDur3chaym1+u2FE5_#p%Vx*av$j7cYia(@{##E~fO`R^MY6 z8ByHaBfSeq|GY^LXD^M=X0|G|Qg$|}^99r8gTQ76&DEMHmcEQb6V5=zrZZ{F7xk@3 zt)fs&+fLkG87ynpqf}PXQu?tcsd-E|YQMkM`|qjM;PH??c3my(N>~39!i&)e(S_hO zy7iRf^_QR-A*aF;yAWhUN0UBmk2)kj{oKs^SbKna$2-qb>pp_WC7ZpUz}y7jPNNl)8k{_T@wTA*Da8Sn;qDQ_59NsrJmd-cl>j!PYMFN9iY!+``zP z^+2@;=6}HS!1Ztx_Tm6H*?w0)g`9f|Y7G{xtOIzA#wVoq|HgA~{F9C1z3^|4wtCwD literal 0 HcmV?d00001 diff --git a/hub/helpers/data/__pycache__/montreal_function_to_hub_function.cpython-39.pyc b/hub/helpers/data/__pycache__/montreal_function_to_hub_function.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1b30646682525d385c57c399afed6a990418f5a6 GIT binary patch literal 9126 zcmeI2TW@1m702z2XC{;Bz4QhYOrfO%?cj6wsSs+EI1{UO9Bij$qLGf$*waas#Dn8J z%uocP{Q$hvXQX}wBwqLmNIY1)@x(`fC;q>6yk^{?D$huh(cWjDwb%Nu>t6e`$-$FP zu2uB&r@#Jd^ylAID*xbR`R9UO-qkpJQ`4xjUl~EUELIy$ItwE7$MkEWCJyKB4C$;acvnKnn` zY5m6e(Xp($aXu6DbbNn7n4V0oKcICd)5&c7?xCYyKRj6br~Iqz95OHe)b#SM#@UZF zjVt?Ag=}S1-M=te8D03SvR@lt9A6sMKCg~0jxK#x`?R`$d30F;Tb;k^LD^cwWH{MA z|IlCVzr9xf-(jmC9v_^YiSw{3_5Q>9qm@c!L(j86Ua3@Om5-|$D;gIxYKw7E&r1s$ zbRU-G?0H%<0*}&HNas!qX7nT&uX|H*3W4?zo7B%yx-6oec&LA zJ#H&|(6AdG)-PzhxbzMdwj$3HK4`q74;ja1&A=9TS>p%xvc}$*G#m>a26TTq2L7`4 znDPz}^3XkoZnxV2A3nNo@L~_|j_LB~#TV#2U)F#RJ#Hhi=x`s14RUUq?}72kf)AVF z0gD_u4^ObYCRh_go<95?d}7Bta@gTI(dAe!=lk$5cwfecA3C}{-p-4?_{*Nlc--M} z9nkQJCj%Wkec$nUhfWRhB(6N!_a|#&&eLPoge+sp`nwr=(a%rmIgHr zrq>T^m&Z1@3;o~L;OR8@JTH&xX3qz?_O(CJ0~UIbb-k<|-)ZpSgXb0u-*dcIMPu#q zj>|i~A`1?~dEIBHI~FnVIJzzHxXsJ_>^qL@rv_Zkdx&FG53IrGe8a~8+kFBb9_;>( z2Kgp`PKV#?%ys%6wjk&A?)dEc8r|R3K-TM*wGX%7G2JfY!F4{K(3YR_* z&-Yx`aq8N0e%B9=ul>19b6Moj!4p2GKl-FsEY~*s%eY_@N1kpAYxs!QGB#%joy#3zMYx`qk5M2S)=y{8k{@w z_UOL9KdR&P1@9Y6GVq}90q>~#`<2gce^M!aII8HIaAoJs+xl$VuLX@pW4{(Qnz`0_ z7}y-{*K%#_*HYU}8iCe%oNJE5T%2i?X-<+T(mKf{m4*Sb33Jkf9wd=)(i}>jfDq&$ zNQ-u}Fw}0+XuuP|lSbtXe$os?j|B=&tT_vVSd=D|JPC!91@NS1PZFo1$0-`KI25N4 zpacOHnpB!2mC6WqZO+SeB>pgEotoY>jkS(!H;|K}+d4H%H{Axx}@?3h;C}vhTgiywzjA5Q8=8yB5-iM8WCg(7Fgr_MVvv(EZVDn6TCDPz2$y!o zB|p(i8W!6Gk7O12O|l$Y#?ve@jX?$-jjJepNj zrD@c}Lc`IntO^pVt|qgh1V!a*m>@(ThhZ#=@};%vN(gC|iV|l;Oms;p7-S^0-DadL zs7ftI)VV5L{8?x*k8|-Sa#9Fo#8l`|7SU!m1XE!KM+FVCor~0}I%X|Hu&_KYNzfF< zsx)e1ZP)-a3-L>6c%5Q%QdVqYCo#zIrNoI6=}N=YII%X#Q(35DG#s*{uqhYviyBKf zJBf~;)-nzXx*|IxsW!B06{47kN0HPVh8f5K_Qz$lFKol+sO%CtDRbFRb|R}oWlGw^ z5KB~y%z3HT>LFuSeqn=k8&#mzVI#()gxV7txrj1RLaWI%wKHY?L;$6QM70^|q$Fw< zmNh7Otk^~g^(K$t%yVkePF86C24ξLI$u(j^-r<59welV+AL^F3^^8)w8&WbLZ| zV66_e&GINJdx9L3&4wvEwN@6y6K8Zwl?<{0XEU={<&o8MVw9MCHNC6IHbqieB8yn4 zx1MF8dVrL4!4kEkOud>o3 zJ8^Q9*hch5r5zsYY>{pZsk}o-}S$z*2%Zr)>vR1un zFz}c!YRT9v$HZy&tEb7@B(R$zu$~iJWvU$uvuWo&V6D3qS@T`(lW17yiJPFs&9Y-~ zj+9MNqL|YyDMeTb6uqeyBdL)3mlw=-yD7iQmmHE7RWh@RPr57@nuVq#A~YdWjXG@D zOlEa1h@lQMyXLj^ZQYFG%oDN@sim5%q~ww4iFN5Du&f!H5Tqrs6A@-~MP-D!Nv71& zz_Dnn2MQsyI!t41jshx5_XV~o+1d^1@H+3xRBE-VR0|<4Z=dF(+X!FLLpHGP6mVMA z8L%WOGmA&M=V@ z2sHHs)^X0MjPY725|1FYo5%FSIHLv>22o^*X7vr`MSLvIR*gwaUybb+(={cYXwhk# ziiskl_^AJAR&7M(hTO8kU8i z$!;2|&Lgu&>5>+;1n_gT=qeMBE)8Ovf~@NiEq0<6VeBuvP1El8jGiw}?6%ne+^$=-PhtaOIqbuO{Q8dsMl6{5TVn_`qQJF8kIrUwq z-BgD`v)!bM0Q`1C$x}SCyDzdDP$$Hm94V<1LTKNC$|jKs?b|~~QBq2YW`Ux`DyNZ& zU&mbtItyrw;8&|w1f&Z~tZRuMdS<<`y!FZ(s_YU$toVo4bHpi3^$;{#rqr~wmS384 ztIWu(m0IxaOFOl^OQU23FJ1aN62CHqM-5^w9Om4<-!kqpb#lB8EK{M~7k2xop0U4y z&5`x+sQe0*8Z4n2b+hBO+J|gNuq3iCUd>vo{bNa!6Q?60PTjc{0kWxYBxXIdTY6-- zjF3f9TA_hdu`bU7 zH6KOR6Y`K6vp7Wd?WF!gmhBeP6$DyB<;ynNub4nl#PECfN<23q)j*2$F?>5`PP55IkTN4h3OkIHjIHL9zKM;}>Qs~;j|k(9Nf z=o&EuJ8L>@+O=C!b8zj=`Gv#Tcz(6t8nicCJHz&RXTI9r+1wip`#0xTK3MO!wtIVn z)_iTJw^MAl)`zXl`IFt&W_zz&^tQIz8?E_sgW>wlX0hJs?X-%1Yq;L-%wH+@3ftK1 zws+bBTpzZ3JM-5|mSV8o+buq54~0LJ*jB%Nqa~KsX0g@lZO*T3_WIrSuqQJvZuf?* z&ivVp-p>2jC`&f$~gyVOP}o(}Ue!e>f;Qy^T`gnpC%Ui|%@- zGhf^2b-VhV5PrV2wb$tsgI522c_9nr#$JD22v4<8^AO-AEZh|sRK=h(+%7g0nfYsv zy7Co%JTqv??#=c7&0?^z-RpJcPwn>G-KF=d157JQCtv>gUVG!cud-@&yEoWv4`uj^ z-JS(ux4kjk>$i#_d67BK58697I;~=Bz1!~G6d;Max@_>;-cI}dR)5eQ-kjIA3CN|c znD)B!waxY6`XZ`VZ}eL&W!vOmd{6^la!#S&>kQjp*0uUUum2u-ov$s0^Ga)TZ;^`H z)_T7?zgmor7QZ08_eFJHI~yP0{-QFyuHRGr`{u?wxAxA))3aOWC)3Gfc5CO(nXSek0!g7p{@4_}Zm>t|YS^Q$L@Lwzzvq>S&2k+PK-kYx$#nI`}tSFx07h-?o zS9aCfU>ixI$7Y6nEjq$8LyECpo?BPa!r-XW^{;OZx`?c!y#}b~t#YAf_r=Msw zUwbHfPyeU;Oruh{bpOq-xBH>cj{a^!-Td_6WLy;UwW28h#zgBUisF~&2gi$@%SADo z92Uj2f!5W#(}}K(*}ZuUsA(wTl4WKi=1no@s>T@?#cH)yTm4O?{CBcawcTr%rm6Pk zFX)cBey6;NuIuka&SnRvv$Of-1!;ce0d2~4W3peRa=!Z0(uJQ9`7?NHm!G@vA8)!3 AGXMYp literal 0 HcmV?d00001 diff --git a/hub/helpers/data/__pycache__/montreal_generation_system_to_hub_energy_generation_system.cpython-39.pyc b/hub/helpers/data/__pycache__/montreal_generation_system_to_hub_energy_generation_system.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..de2ff300c262769d9eed43629ad1667a602ea9db GIT binary patch literal 1440 zcmbVM&2Aev5GGfvm9&W)w15w}@lc>u(Fj3&GlIbKT9AY))1oSMq|4l2~L~z--7x zW|GT9s6#U9ha(6bbY6mou9Pft zKUDHs#0ECGP$W!JR+Xn&`au{$y6Fd|#ENi1&Q)^3luAf$4|NtY+Z;NIw~0G3^Z$az z(P?b`!{Nf>2u%M3PM`<_mJY{JjXS({iy~Llg~#2`nAf>?>wdyfgEs)lW_hqhtG~nL ztb%PS2gOCN!tCE$tAS5;DF2`zL;8P^lQ?BsLy{Onz1v~u4X^-Ae-F-}YYgUq)xcb^ zI+(}tXYV7T4UV7%=d|rb-i1t3p`ylRp)wYW$cv?fz-nKlfWJ!O#O$b-YSjwgZP;J6 z=7JfL7mFOwsKrK<-tl-i>P^blardluJnl|T%0@64j%;kdH|hn`$uJmBf1~~0X>Zb< zjwj{Qa4?>Z-;GDp?l34@gI;$^!}GUc`GoSVN|$%IbhSt??~vMq?!KttaCWYR(z9Zr zq%^Z|8PAzoY(%4HpxU*GG`Gh%Gi(ORsMJmGg-q8%r$$n^Lf1lnyx+-}Ws}k*OAMvY zEXd!0Lyn7gzb~uTU!jN2HfbA|o)QK)ctorvw<6Yq$wzc;sl%(EK?8*Jg&}4x$URh5 z_;8)-klg%Ut=m}H*F-(B&LX&Wwu#cezxy24+5v~W)tj&B=04RaNCFVc*g{ZR`joC; z8JIt%^nJn7%}#?-E@MiSMYU|^N&;VIS-Lir`WAu@>a8lbMJrpRZALf2HL+W3`VOw5 zZBOk(tlS4aJM%UD9e4<|VVTioV-qS{yO^?1X?6F%{;F)gUYGvH@}TW=;Woaj{R2HR BqZ$AJ literal 0 HcmV?d00001 diff --git a/hub/helpers/data/__pycache__/montreal_system_to_hub_energy_generation_system.cpython-39.pyc b/hub/helpers/data/__pycache__/montreal_system_to_hub_energy_generation_system.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3f4e009f273aca9b53d3074fcb8607c6180506e GIT binary patch literal 2531 zcmb7G%~In=5SCt)Ss>xV0wg+U5GBetZ zmCb2+hCS^I@B(>&Jch10<&s-2Ii*LEu_+7&xn`{S>F%$;?wJ;upRZW(y#MA8`lf7I zf0@DfQ-HxLH1!#D)M{DOrjBp-9mle*exc>s)|N#J)V;8%``T&EQ0K_1&P4yh_R0qL zG#3GpoGH{7H1Zkh2#NMYpd}+dQUj$~A8CPlQ5&&<$?gDk%|9`M`FiE3vGEgHM7!K$ zfnxBsLs_7Chcmf?cDEY4F!ikV6nap;=o8Ikr7psOCIbT@jTn#m_6~irdHPp6nveCrW{&X9Kk1W8Oc2R)?mV&}r+; zzN0z$n)xqGXl_0?L+!T%j{~lW93a9a0xl^xv4?298bin~BL`RDdMZmzw=3?euCz1gHJtP26hb*Xc zm?FzGrw597Dn7rbg~?zaXzYh^V|{YY7NanY-^i0I$Z6of`;mj!!*?=W*BIuTY7IXd z+dpRNNBqZ)y~x*mF=f0RabFvZ`HeF0x3^ez119k(BD&JG*9XuCaa4JUBVnZLaOqliBUfwI*&H?=_M~m=5dR;L=W9 z#r)2tCFkJs{I6SIIX#AGsne(rhhCpH240WIeqMgmDb&BLF+VihDAD8;YD`)uahA1M z3k>^kRwwbOPUh>iaFCQS=5U!{{I0pUKZVY6Tzl&8A7CptHnq&uh9;_ZQj|=?HFcwO znDUX9jv~Cgvd+w9Z^uud${@7GG}1kWMr@_iE19Yl^xN<0xN6H;5SHfqBqcHH=3$sr zMzWv4SUJ#H#d!JtK8zIXLyZO20@7y~Cl!pd4;6Ty!}yno`1wi+V=6q1Xatx&jx-?Lwf%XWRg0Cy9Y`cZ>$Bv!OR*UjOm`gr_nAUn(+-q>IP5IC& hDdkhi?A4q!Ut_84BvVQG+YI`5hJ9teINZ`g;eX&3DJcK| literal 0 HcmV?d00001 diff --git a/hub/helpers/data/__pycache__/north_america_custom_fuel_to_hub_fuel.cpython-39.pyc b/hub/helpers/data/__pycache__/north_america_custom_fuel_to_hub_fuel.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bc03122bc17c2eb90ddb45c344d2b0e701722e0a GIT binary patch literal 1266 zcmah|-HIDG6qaVjKWk^(5Sq}t=rRtC3CW!)VYd@^yTmnSy`imf5%NfD&oVP|jx;Iu zrdQd=$P4Ui^f3gv%2i*XQ0URj{*@M@;T+Dd^v!o9vAf$LxL%!|sgD66pS*K>h3M>| zm`A82nGs24kkLE{2qk$qizqoDGL+FdkWIE=sGx4A>;iu;)iz7?HhIRu1VGBxzNnvH z7yWzJKaof>PQ1RoB6Rjp%wtrF%qWr_NIDB;Aj5Mqi&R53W%Pl{hHRck@9C^1TS#@= zJsfMWtNmO-nuxeGR_EWBDm&IclnZZczv(a!*@6-oOR55Pf(d3dTa}C2PBLK(7A82j z>*Z|^EJiV3qq5|bq68?Rq#wd}gh!Gfj9}agx7|Y667Z0vFs`dIl zWUAM2VPcgF5B8_7I~)z;IpU%wiPt1>PXf1^V@GB8 z*BjU7JS|eo`Ir8m+o(toQT+biKKcyN{j1guT()h@cObJP0(eS=S$kmmOB=aApDjqyey z2L)2ax$AJAYguOAzQg&OQe>Bz7UxnYoWmFX-1ZtYl8uv&{8n%mgSW8x!GQ+|9#9vh zVzy1Au-yu1740?QD@?fiIF0_Qo?RbbpRuB_#TJ5fQs1Ry3joOGbjoPe$D3axl-Na>P9BgON zq|4LxGxi7i8+?XedEyt4khq>{H$lL|I=WZa*Vp!$bFRa7cM}BTyPF$v8Y1+&pKK4v zp#w1UIXI4{h+`h)xCjD-Q4vlfjE)fxd31|-^g5WfcyNKbtyK#nlpM*-N>wr~g&~FF zt6Y#PrOBx(trjdNrZQF(Bx9E4YEHN)Sjma4mQZgMS*$LJD21L^|5!>c#z#Mp$7Coo zQ5pf!fQ!<~D=G9o86J;^kb2g80v;}VoHHwQlB#8;<$PhuZ+GPBlc&!}s>)1hE*VMt z=P8+MwOS@)t*%98VUY_>#xiF$T*LC0!U}Sjzhqjh0S;Ul z?qw|b19(HD%=_&T!Q=qUd;w0NDF$u>j;A3HczBDZk!XoFkKSP3;_ch$HJ-*i24*|% z%aPJ{aaaf~Gj>!nHUYvW>ST4sWA#K%d zyD+oD#V7s4$zXKs;`Hon=!3nZv(x^?WRTL6vkCqFaMC|_JN;olotzKS!Q@A`L-|9O zRd?7$M&ws_NWTwA|NJT4pS>_bo7t++O4-@C$`(u)_ad7aG+1LIU-~i*jW{bkzmzou z(}pzady-m3VFztma(kt>tXzjuSxQT(zuMHV3P;WFul4hH5UuxcP#3$l7Ivk}e<|Ws zsTFBM@Csdf?(zC75RZ^!VToM`vf-sp?>9&7lbc`bc^B(PuvzbV=P@_#1BhI*+4~91 zO#lwH*I&QOS8R?LLDvF1B~VJKODJvr3Lt(&>CY>c-><}!a+Oi4KlB(nORYc@Te-*| zr9Xn?7S0;62dh1}9Wc`Y*TGTPi340`yKVg`@qPHyp)#;om$~f@A;y literal 0 HcmV?d00001 diff --git a/hub/helpers/data/__pycache__/north_america_storage_system_to_hub_storage.cpython-39.pyc b/hub/helpers/data/__pycache__/north_america_storage_system_to_hub_storage.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b50b01083d44ad6015df96b30df09721a27ca6cf GIT binary patch literal 1288 zcmb7E&2AGh5Vm(W={A6bkl@PPApArK5Qhj*AylQJL=kBPiXvI=+9X>x>oE2rB`qiV z7`#AVgQq}y<-{v+fpIqdLFIxak37FS{=QkuOP3mq)~o$}{XJmphgZ(7kd!sr_9h9% z2261kWPB0?jI&8Nh&bC|Dpb)SQ_+`TP*XvlHEYE+&RAnT*EpI%e`cMYKq8&Y%m~I> zIv8p4Ntc=&?84pX_g=h%yReleI=7lmn@Z;{eV=M?`ci8JZ)Co=D-o>MT3Bgo z$#HrskyKr2AdACvw{Qk+8+vI*Ij>D_W%fxs4bQSq67?J?a)-hsVhU3q)S8?G{ay7Z z0m-_FmuFW*${KBZi-cwaPGAR$4?-2F@Q@86UDI_HedVgA>W9%6K3GvJ1a(~A?izIC zXA_NSBKy>*9O(-3ZS%6&tw>nf=T92o+jppCcEc{Q2WMbh?1JZn_&Uc8B$>39G81C; zWcf3V4C~Ogmq{q@*d9;$0TY2@)LYPz4W8APeOU4o>OM>l?Zc%NW zO?{Z6nH%OFA0aD%gsl(~)z}GV1SK6?Thmz?3z6oj6T;ugdR|yi|2=>BA27F$OEh^| zN9_vC&q3$mTR>N*!vWj#fbsbqLK$E~J8)wSr${W!?W$B8_CGK5CdV2jqpz?4s1mEB zmW|WgtE5}c6syl4{m(57Ksv*?@iPU}rEkHWYX@P)NmM^8g}l}KuhD^^?dPg*B)XUmnP dsa!p=p?|U#x&Qi989%OCf9mmHup7l!!ao~6aEJf^ literal 0 HcmV?d00001 diff --git a/hub/helpers/data/__pycache__/north_america_system_to_hub_energy_generation_system.cpython-39.pyc b/hub/helpers/data/__pycache__/north_america_system_to_hub_energy_generation_system.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3079abd149774f307f942f2960428412370a0188 GIT binary patch literal 1537 zcmb7E-EP}96eeZ)CvGwf!#Wh`fN@uyhuJ7vU?_~OsOuR{Fvk({vlWH`f)QC;fh>B5 zR0=!oRr45qfxN~ZL$|xyBWzbYlpG~Pb5k0mcz$?%^nD*Cc6OQs$FCO`s_7H*mosjU z3K}nPn(uItWI`mBUQ8FBM<`iTCO#!YA}i9rB+`HHO{&s6BCTrr6(yuONEFOg>}X}I zTCh-95$hS7D`DA8VNBRaC(PvG=27s=E7oSCC{&42xZ9H|vC->DL6?n&!3bSXJCAYI zz}m5}3YvYrTtPIOTlVJ_d-C|nQ`Xl>s6j@8^#_N2HUph5n*r!E6%@roTv^3>@wouCW|(<`X#yZ( zOPADHlu7@u`Zoee#-Uqp4+Ose`g`0cGNA~zC+VajJz2RV6JJ$TP5K|GtjgM@|DI0j zvW`$Uvi4Ymo%a?BqEHlAAM4%pv_OAY0$qgGKR20s0SijRkIV*rW;L6qr_3cIV;`}@ z!dMuCCqv}59B$vh*~gg+#F8_*nI1l`X9f4Zq#x>U39m|mU3=qJef3Fg}Ba~)fOt?X-=#ww$#Rm&=&Rax!j!QNn3Jk0KK8HG;x0#;Wv^NosMUlG_w4F8S$-RX%@V5aE;w6@b=70v}L zHUc(NDj|t>&1_3qtt~p__PTxyl-xM@eKk|J?EC7UKEz z*6*M7kDsKi&UL{S&1#^K)8r$)IL+jGso~}=Idf{D>mN{Bj184#cCOeBK)JhHl-A0uN$Vog@xxU#L%2ksM+pS|m^vc^wE>(3nn#^w5rFDm~5Nm;}g literal 0 HcmV?d00001 diff --git a/hub/helpers/data/__pycache__/pluto_function_to_hub_function.cpython-39.pyc b/hub/helpers/data/__pycache__/pluto_function_to_hub_function.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..77acccdbba5d1da0ac03cf5a26fa7c8fcd91a813 GIT binary patch literal 3298 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 literal 0 HcmV?d00001 diff --git a/hub/imports/__pycache__/construction_factory.cpython-39.pyc b/hub/imports/__pycache__/construction_factory.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a45a82dbd6cdafeb722eb91338b756d3e1185401 GIT binary patch literal 2527 zcmcguPj4GV6rcTLd+j=HLusG|!O#;%)Cvg)6h%=gH;s^jWi_gVEThqSXJT(OyX(%3 z1Gd5``3#)fWA2C#z{l7tr=GcS;=NhNIH_CU0AtPDnKy6V%=`0u<8WoAMxd?!^b7yF zLdb78S!^CmcA@JhKsf0V?r>K+iQ9D@9DCAB{H|}uzAPo>ZrP4YvXTVdz#;pDmwDx! z@XDFnt@7ZIG^*psA*9yIQf<^YGI5qZ2_uuK3H`J$jxr@^XE@Puq-X2~Rl=xPoCs=$ zg6ffo;-fgC(Sin=WPB_Ih3!^o5TA$?_6raLG$Dl^L-MmoKz6qYw_`0?h#{`(yBg-lCmYhKhaz zCWi7v7(pM&lMq#cg*?hDGl|?s_61QlLFkYD)>iMC2AB56iOMq5>rA3ysFGRk=-zPL zx4j6D?m;HZtzt(7HkzXe+i%zd#Q?}p@kcoOZyW#)^R$Z z?WcPOG)@7FNr>>a(y#F7cB8C(_$n+r`E6k}us)!K!$zIol7Mo_vLnWY31gYp7k!ae z=aLt$x`8T!OOADQL2ltfiKURd@54|BK!}fysyowrOI?Ms|AC*r{5wCj9<^U{lv;)B zqN6ZQ)=}ym9AVJayGZULSwn*PwP17^j0P-!0^F-s-+zPEApHNEZHvd7%`Tx$m>>Vb zY=QOYvwvu|6~1CNA_R}M)d6z`QGp1+=kA=Gd1r_X4|3n1_Lj!9cyCNrpaCn;3=8;T z*@{F9ky(YXO19u#8>@7SwzE`NP6TIPX?U|k=o(RDtCG`Ri2Ako2ir1C`aImhdiy(c zGW~p6QLz5=lu!Wl%DAT literal 0 HcmV?d00001 diff --git a/hub/imports/__pycache__/energy_systems_factory.cpython-39.pyc b/hub/imports/__pycache__/energy_systems_factory.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b050cce29900e89a7d5a34ce2de88f2dbea45d63 GIT binary patch literal 2789 zcmb_e&2HO95MKUBq8Qmp5f^Feq}ZYjP#vrW?xBET1S#Ys4Uh^#i~tScVnK0N5{)IP zESGL2I4Ao-lA|A^eGFcE$~m{5IUbCnwMU;m?mvaD?>qNE!t5Ox zYN7mYHkqn;G}iRb3%Yx6cb9gvG|Ci@L)v}#tV>5KD<*zlWyd1YFvx|X{aA*I{+y+G zC{KhIbb=k7WYO^;nj7iB0$fmN!j1+7>@MGMKz6I>w&y>ELk zcl=`_R2+pL&|TPkROmv9^)@5)bNN|7W)FG=2`qq(&8@)U8{FaUxfQs)#_Q)Ks8w(X z>b%K)XgByZ-h$HOHb7&u+*)4o5*9P+Q@U<|Ml#HE80u_x_)Y%0n$%xXg5wBkRB)CoYR}#gu@8G z69$*8!ew4stld;LtWtW64Pz-7E9;X`0RqdK%zhIJ2F78^rBDjpQVmqDu_)Hl(r1G( z7i@wj?v`#Ys#~)=>%!i-oD)GJFCGlRBI>)) z&=ApMi1usy4MA4G*0IA}Q`Qd1udP=W^qRhx)BwPlJ%`i8!v?I5O`>B6=wM2VJWfZz z0u|(GWH7(V5jl3iN?=@qgotAiy}+pfqt-x3KmZiqBDefnpm4B6%rdo6IcC<_q72 z(baf;y*^$mvp#mT)R*7}Y^RRCB5eNic9sAzG*sI8*M>d>fNI{#mJr4mTElD@RLn8V zC%mK2$(eJ8ndSgnxwE6S$6Vc;I;(OE>2sc0c;gy6rIpH@gN%_qxR(o+?$KVB3eyw8 z+A9xwb_idN8D{v>>Mb4ddx!1q%P<-6@cuq%zk`p=cGezmm86}0nMI+@??a`U*K6Bl zV+3icwNl7hZOdfj(vl_*>y?2YKqE(NlG<$hiiO%%uiZpWOaX?#<358t#{Ukew-|d_ zgmOO8V2o!GW9m~ds_vkmD8530;9c^>Y#!Y)%#Xxjh}N@Q*Y~_8zGkG?ZmBkmmJPfP zWIU*@l}~`pJ7XayK=_?P$1*q9NYKUpIm36v%B6&VB<9y(&OU5q7;c-(-vdL4!B1CM yTFI{unnQ2~2UnO|I98#1)vFrksb02|c!s#|zb_<9VUi%*cPXu=W literal 0 HcmV?d00001 diff --git a/hub/imports/__pycache__/geometry_factory.cpython-39.pyc b/hub/imports/__pycache__/geometry_factory.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..df4111b6b7b55e01597f9a50a64508e23dab59a6 GIT binary patch literal 2594 zcmbUjO>g5w)Z;j|wyL1H+EBe)UvEU zaB+1sV6hKVKLx<8(Bg#KDaq{6CWtrEM&^W$!JV|3xuI+DX6j{r=o{QkTUihW#5%CJ z$Nh7Q`*S;7GSS=fKt(W zX;cUm^yGM=lEJW`zdxrt_jh(^Pv)^yJc(%U(bFCsC|Qn!V=I1=uK}2lrGU|oJLv${V4W9 zuZw{=rdSWA-UqZLxBmfSl(t6 z5h*773__<1RmMdk^Tp;S>zDae!q!VdA=$7z>-d$UMcS`gmnu{a$_>|F72AGA>a8~j z-B^;jdAY7dKDX31*!QB>+dchO3#CuXOi5Xs9#7(7q_Rcs>Qhk9%sSch>7ueGtX~&k zcRZ^92I4ME6Ye{J6cFYS zfeGOqL2yS9+EH`f9JvrmGW`w`hSEp5O5&j@@)*j1o=s?}lYBr;QG9bqle{i_hz^Z3 zg))k$mZge?Ilo(LvTOJarQ<0Fq^mUq>j*XwY$8BID+dKVC+Y@L(4{qaANPEQn}aO< z7*@Isz;a#U)Zf1=e6nD_<_Q~48c*OIwI}9egf&H`CvUd=$(N7c!s>=X=hs%F_tjkl zOXfLDo{c_(4UPI)?)2uhAOpiSW3aA_F%*#1VTI7Tb9dzZpU{F#Y;td5q_408)<&XZ zSH)Mo)_R{oDWK#p;Hbu|xDs6A{Iepwiv!m@f@&C#yaNb&1nejHe4bnL2Kb;cJzW{( z`XPg-4c|V~HW%ssa$U0wqnxMkaAA#H&+!;_zdEq^PGD+GebXz+(UssYrGft-jj}Ty z?L7wWzhPR_PnHt_6TAB$m2s5nJwWOM9lP=dqKJw@Dg1M>D$7g&9>V5plML_fG>>p} z*02}lQ6?CJhR*88AMiF~Ka^3r*zp+SGGn$HXDCw8OLyVlL8{H06y8Dlq7`=`oy=b$a}K(U=~S;_S)`uH_;7pWEl{g<)nkD! Xhr8})4{C?*VS<=`=6G$g_!|EKAHJuX literal 0 HcmV?d00001 diff --git a/hub/imports/__pycache__/results_factory.cpython-39.pyc b/hub/imports/__pycache__/results_factory.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ca7a3735f1d94279270175385cf11d7a8256acaf GIT binary patch literal 3133 zcmbVOOK;pZ5SFysm%PpkK^~3M@|1R4c#}G(E`l_%;|4*Ktq~(dAs8jNBE2hvdX%D^ z?#4Z>e@Jrl-{{ZSYfnA5r=B`P?aTHi2qHn$h@2VCkl%bHTV3@mxPE-|MnrYX`U^i6 zuM&Jbf+zbG8gBU(x49$j$nhN;<&rE#uJ0PzmF1}7SBzYi)u`szj9iiR$n!lTSLI67 z@Ef-E)Z#T>Kel*%yyE{*QA?xIM7>GC%AU)$E*5FL2HhKPZ z=Q(uUZ{347QDj{*EtI#FqyrW9`kMTCLN@MgY>=%a4id#fMz*$JZjqi!^3>Z=$$#nIbQe zIAiiqXh9y!LxwIv^A)Hur9zUTQY)G%o%Z@Stee%e$L8Gp%mm}D@ok7X}Wq3%cMyD-?1 zdG-PpCQPN+gxq-;_c9p1F(2NAuK8eqF)m&+)NMkquzVYk=WyFE@r%5~-DBH#d6`#^ zEx*jGyaw+IuX7LHRldR-@UHPyegWQf?f|kbjaLg){ZN2vc+(@~R1XOx%QEQg1m%TD zP{wBqp6q96j!N9lEw!dCxb2aB;2b#Ixn+&)KT5oGWWO!Fv);Pg<)wGdb?eBYWnIzL zBYOnpa^%2wO@oh-4O0Ech1TOX1Xv#a>%q?nX{SuFi1Y!{5`mc}VGKwFywA{XBE^m_ zz=Z+S_@X6Zy=}0M5=pv<%teJR%LGjU422d-bMGX{b(%x*g;FdU^-~%FJY}1Fm83dM zVkVpBCw;**N%JTrW}NIp@x1PbLEl)<3KUASD`3rM)m+5f88)z5?@si_HXYlfxuP7H z>2Zxx41>~f1ttY*bzGLoYoW$fB~r-(0UDEeQV1ATL#r~yyvH7$<>}YyH2h|H>;k;^ z$JL49*frYqxpHl)dt#|;;PAiAt@hrlOsH%xk5rQAy`4eOXDXT$eYV%nyXGnCDchSQ zLnj2*N(Y!q7>Alt^q5_M#;VustM)b9vn%inubl#8YpNaqAI>h6F;9a}%CHWI)xbgnvC+ViZxaV@M zeq^p|)9la-%?vZs?u57RFQoeQnN%l}vdrvLGF7+XUx2yFN5=idsko!bhBJ#i`)(oh z^$&!8-tt`Zvn}8T_{6fq!o!o$u{A1wAq?5!2B?l10sSAl=7oH5!%|UG1odrOjfp+bIWKoy1hfhHJ zA9$?cozt^Z6nX1`OkjJ-9)eI9behh%+7p^-t<*&@Tvj@!roM;4qCm>StIM1>old9e zAuq-(LW=h&ZZNr_`v#@IgQUtnXZc%G$^kdVxVfV^cG zw`RMpcez$6ZZp9_iufDL?6TQWimK^Zin1vY8{+kw%M1l<#pkeYipIaYRNpWnT~?*aPy}w9 bXW?S_y!N12l7|Q|Gly=q;WTWxv333jN@rwg literal 0 HcmV?d00001 diff --git a/hub/imports/__pycache__/usage_factory.cpython-39.pyc b/hub/imports/__pycache__/usage_factory.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8bc421bb459d6ffe7c0275d1c1842c7222e848f0 GIT binary patch literal 2503 zcmcf?%WfMtko%CdQj~|Aq)l6(U;`AW3PcF(OJM|o1H}mnB&v}IPzWvvdPz%baF+^6 zIhEj^>~HAVxfI9`^aJ`Cd+jOb-g@c`S5~FOZP7!s3l7PdA&2wk7caI5d}}}bB2F8G z{Dzz5FM`b$4Eq3pAOj)-5vm{$2VsEgNJV)(i2XWNwY)y4`*lq<@??+%CXM{=q>svOJ!jttiBPlaPUfLHtC~>JC6Xh(Y*~2o_R~b zA=B#V@zi9)k)yx9rt7!Y*J)1|sWu|xw731FM~6mF#;qNr4`k|qDB!IRCmFmPCI?p= zIio|5FuCpy&v3am+Q}_YrMj(~au6oqxw-&5?oGg^c9ZU8iW~YE6z1wsI!W)TLr`i) zf%7@Aabq$%My77QU|PNP4Y-|jg7VWtt}+2yu`C~J$!wcQo1aqjCnYVWO~k9(2c35Y4h8 zbBtYu`z%T(!KI)T%&sqM-aX?=At4tZK6at`I&2(hd=MN5r{ODt*^Rq{h{b-c-6!9- ze+gMw+oY{qbl)0LHaUtBij4+aew>SJiAr4XSkVq?l&m9->DlE zZ?H0zSERpz?Lig@$YEPvR!}Dt)B8+F$1_#dy!K^t!SXsZ7w~LyhVfRdz-1&fSnA{T z25f8sfW&B=b}+lPYMzSif3VK_-&?2uq<61>j&aNyyc3NR!|aV?KEM@v*jz(!9l?hP zFp8G+t+N8t@N>Yfs(W=+UC;G?we@x2pR}!^Di{j?L0gH%<*R?w)^n|Bi&=p3e9mKV zVB}+zW7j(&$I&sye+2Oz&&0VNteTUn+KI0#pxasN@o~E7ITh@jA_ETPT*5&Nt92ddUe4Da9GS;Qk$)YR7LN1nplwv=nIUMEyk*r4(m2! zFD6{gDGkPiP8l;-;3|U-FdrlM1i@zr{!-Ad@DaYQ;=;B8BtaY{wWNu^r}R55a}x;V z8Whd$NUAZ^)h={WWqny5bPzu;q+Rc#Zk6`TZ`gRz&wN=LeEBZF&zpDI(MRX8`@nmb d-A6i>>hrWLlRK5s?qUd7Oo%vXL&<_a`V&g|jRXJy literal 0 HcmV?d00001 diff --git a/hub/imports/__pycache__/weather_factory.cpython-39.pyc b/hub/imports/__pycache__/weather_factory.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c0ac64d914641459668bd744d73b77f5dd8849d0 GIT binary patch literal 1643 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 W?RH_}k11o2Ybb2D2LD<7EB^-`MH?9a literal 0 HcmV?d00001 diff --git a/hub/imports/construction/__pycache__/nrcan_physics_parameters.cpython-39.pyc b/hub/imports/construction/__pycache__/nrcan_physics_parameters.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4f79b7673f4a7403ec4280cf0c976bcf7902d292 GIT binary patch literal 4147 zcma)9-HzMF6(%YEi7V}oY;V?%ldu8YMu@XD+!P25BZ#|>(<1I-Vb^HFt})X)OMX&n=bK9%DLNAJbGZeL2+W}01^K<6R;mn+KzH=sS zw*v#u*WZ1|UR*Ma|ESLL(?I77e4>Yf8j(RwYGr0*qHbi?un{#(MYA(|=tPcgJDEH5 zB2Ty7%pW$Rrfz##FkFdNblcBb!*85(huw*p1z;DX-vvi_PxDWtz|kdYi8km8+VPzf1fp`je%V{C&s`%GWqS&d+AdPw5Fn;0wA7lR->wa*_heK zTT|m@08QDTtUzw-)SfwiHu9UcQMM;Pn1*__93{J{`ObI&58p!Ow?=N=Fv`^vW9CBM z+SHvorsY9HUbQtFamv#;ymm5T2g-M?* z_9ic?HIt%8miNwA)SCRS+2l(#n=5~ptE5r~If}C}6LK}p0nvG!X*U&e1F=DY;hFHR z&y^+fwwm6ayY_sae!WkA5u;Iau_FGS<~}D}du~;%snKR!e(f>wk75K&yq(<6r%ZN4_dIv6amEqmatMr#mwA=dZpvVpGDNE zRdi+*0Q+T=t^Q1a_-QF#Q8eFz)KBpV1>J@fm_GD(-3*luKl&LRzGmZz^04|*mc3Bo zE=~$?3PmD-nFAHHOw=lrAJYiNdVa{+AHAaGp}qxvOo0(?Ws@N zs8?srX%nFALw<9xhI&oa{NE_o(Ob{A(Aq$219b;=2lWNi7f@eBeG&B~)R$0iqTZak zFW;H^rzTAB2Y|LsR`CBVwelAx|4g-K!890L#>f@a@1nkn`aRU|Pc6(vpvTdeUbqk&_>?zm_~ESs|Dpbj%cz)yQ$cQ+fz!S+5C6Jc?C3 zmzUCz?vMX#1a{#B8rJ9*^m^uy#Dsgy`F3@ zTdCj*2&AoYJg&mKY(2w@if8k6xS2}w1Xq?Nn`J*up5#mb!t2yndU-*H08rVf_r{q> zMHwTXksdN(p|;t=PpQhRk5sQMMl3;soajx<4N)LxCGmkM_^6tAp%!+Ic$A9tAY#Y2IN4^m27RSohZorPnMY<2l3ToZ%IEcSS>av@s8D zX9$2$a_(@Wi#5wKSs%tC^NL!e0B+@_)~fVKb>h*Qu9svxnh zSK;PesPA)pVh@F3`G6ZAAw!imfTwCz;iaW%DxlOH2t4x{)jaU)&{Ox0ul*cgor|lu zb=>PVRWhkUHX$+~WLVHK^hsokkf-A~n~!*e&>|s(uVc0R7bs*47FDJRE^YmSYWU=8 zQ%f6FNXk_dbqfhlss*wKeO2wb6&@GfY MZO@1GEZ)Zd0q(Txng9R* literal 0 HcmV?d00001 diff --git a/hub/imports/construction/__pycache__/nrel_physics_parameters.cpython-39.pyc b/hub/imports/construction/__pycache__/nrel_physics_parameters.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..69de5f7e4d28ef8f6ebc0819a52c5f195f998e62 GIT binary patch literal 4228 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 A82|tP literal 0 HcmV?d00001 diff --git a/hub/imports/energy_systems/__pycache__/__init__.cpython-39.pyc b/hub/imports/energy_systems/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3f5dca6179fae93b82f585ca3ae941ce1c560480 GIT binary patch literal 165 zcmYe~<>g`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HQvsFxJacWU< zOlfXWettMKA literal 0 HcmV?d00001 diff --git a/hub/imports/energy_systems/__pycache__/montreal_custom_energy_system_parameters.cpython-39.pyc b/hub/imports/energy_systems/__pycache__/montreal_custom_energy_system_parameters.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b0a194d0689fe8c2b001829d7dc308406299b23c GIT binary patch literal 5364 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 literal 0 HcmV?d00001 diff --git a/hub/imports/energy_systems/__pycache__/north_america_custom_energy_system_parameters.cpython-39.pyc b/hub/imports/energy_systems/__pycache__/north_america_custom_energy_system_parameters.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2467f58ff4cd7a3be66d587512ad275f495dffa1 GIT binary patch literal 5659 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 literal 0 HcmV?d00001 diff --git a/hub/imports/geometry/__pycache__/geojson.cpython-39.pyc b/hub/imports/geometry/__pycache__/geojson.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8010f6face80ef278ad167708cac2483ddbfad57 GIT binary patch literal 8355 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 a=Kpe&@~=<*|1PyQNe**7AEBe6U;8gNA+Hnw literal 0 HcmV?d00001 diff --git a/hub/imports/geometry/citygml_classes/__pycache__/__init__.cpython-39.pyc b/hub/imports/geometry/citygml_classes/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e0369454f6ada269429c15b12629a7b02aff68af GIT binary patch literal 175 zcmYe~<>g`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;x_WvsFxJacWU< zOlfXWettA5-a n$vKI|#i_+H@$s2?nI-Y@dIgoYIBatBQ%ZAE?LfAD24V&P+VC$+ literal 0 HcmV?d00001 diff --git a/hub/imports/geometry/citygml_classes/__pycache__/citygml_base.cpython-39.pyc b/hub/imports/geometry/citygml_classes/__pycache__/citygml_base.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2d0cf012b2c357f719bc255d5a0106f02ea29604 GIT binary patch literal 1484 zcmb_c&5qMZ5N`h@@i-X}0|#~`q(nmB3(IqO4>{LUuE3^QZsN1k7jO6>Kh7j9 zsNNxer3jZzGr))ZczAkDR}TjF>D0&%T}6x&T`n=3%`N}B=12FBj(DOMQlrXJp1k}c z;WN}#8K0tl3&bhW3Xl)0EGMSJ%2H{B6`wU1Sm?oQdsk@G7M{v&wSi3I?=&*&dv);a zc_LlByGYlKhQCn&Y~+!SzVb*fUj^rE6hcdds&&pjd80OTR9khLIHEXGdriDYajd#c z9IGDbykB>BG+zB4bH0;bXq+wPfSCowC(A};Q-UPjHG-pSgl_k^i%no2N~ga-2In&BP+|9X==9KSYzW?U7hwH==>n zSCeLEMXAx6@eFhU7MEj5=9v|_Xp92pM?N7p4a#L536U)_E5voj%F$!q>ekNqgDv1+ zv$%PhS=tnQU~g%TzPGwVV{<+P%gYoE$+exSxyKe^vEvRm*yeCr)X^4qK-q>!>oSoo zKsGE1<(7+o5Q!+U>?672jG_D9NXMHe+PKKQJyfBCY-;3L{-7oD1ancX*HUa7& bok(;BX|8`(v5p>Zct3F-GR`t#rx*MUOq6Zq literal 0 HcmV?d00001 diff --git a/hub/imports/geometry/citygml_classes/__pycache__/citygml_lod1.cpython-39.pyc b/hub/imports/geometry/citygml_classes/__pycache__/citygml_lod1.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3236c7a9b62756c2aef52c1c92cb273e06326103 GIT binary patch literal 3040 zcmbtWUvJb#5Z|?ZcRuF=^nes-DQ=;Zs9=Q@RVqS=a-e_|qKLFAwNhD*cXKhaZ;xF& z?VZ9)6N%@(^qD-~7w8A*$M9>P`rNllh0d&f;nE~jRehSh+1YlSyJ3&HaoQI$bF&TZcDYD-CI@cZ%Y>HTZg>Ds9F@sD%5uq_ zmF0U++-vS)9Pyswz&&KVm&NNbmp9$Th2=#Medf(UE2MiZ2{SI8j_40$+}+6BUq|lz z-2A-T5xq!A7Kd)<{^O3@l_Kvu%The$Q3ivIOLrlU6R>O{&tPlGhi+F3WGcMwSe6PY zGJYo-@8(6J^E-H)%+li6LS@hcp7gl{$yDXIyP@LHZLH*SJ&ZKFERsPNcEPoipILR( zGBBL@6tFZH^-XRugPA*IoBFjEWSugL)pl&Z4swkf$N@QKv!@(?bh1Eeq@8CfACx-=pqqcEdH z6>Z!g5Nqi5Am!;AINFAZy7}`-=jQ6yic7Vcr&5S)b$JkNgfgvQQmY&Jnx-;{)ap2b zR&m>jFx=}WV5Qd|6s;i5lPnIRTyFAHsGio_7@nCh-`Nqq!OMz+aIx(n8B z(Jc}fTjZs=MV=bF*t5`V*??)YwW6kSh=sxqg18rFLExVZ4*H;I25}kG17KAdC2H0v zEX9*`IR#sdD2$Y876hfwS|FCkp*aJj>d+AC&^jHS+GkXC@Sz52q~>5Dqg!;7$Tk=P zChgJ{!VE3B1QHlSNd}T_`XfXnM3T8wG|{^&B8gdX0@+9C;&F(ZMLke@>{#X2%Bb8#B)mW&zcJ>OhUN*stPGtntpg;ytrQR;M{3qj?1sm364VD!){{c!{ zEM(y<#yuX&$8oP)H2Oj<#wr`uE@m)cWJ)~HZ}$aMRTZpDkp@spVXA*#@>Fc{07`Wh z=<&&6NKwO^E2w&tkP;)TaBd~Ae} z0`P^Q`iC7p4`Y7-;hoa_YS8C8MF3gM16>UKmiBZB;y(eC@4~c?fm9nBVi>e;&iv(A zE&boB4ciAXJCHn>KstHQ+ef8NnKrDkFZ}Jdg#UkqPF{r5-;UJhFr!4uz>sXe9(w!C zE9-t0T8D*ZVc&&oo*ZUXfUVbvS7ais|YCig=QYFCneuNt~xO#k9bs3NKlkT9!c_vsHt(0d&lu5@#&U zI?{uG|0>+*UUi#$Hju5{BD&J?Kl# KvRhRD%)bGz-sXb< literal 0 HcmV?d00001 diff --git a/hub/imports/geometry/citygml_classes/__pycache__/citygml_lod2.cpython-39.pyc b/hub/imports/geometry/citygml_classes/__pycache__/citygml_lod2.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1d503b9c63f5f8bca43295a45b3d42d245b38762 GIT binary patch literal 3319 zcmZ`*OK&5`5$>KDzDAT*(khCy@n#1}fS7hn>?(i{izL`A*N_d!vS8(54-^cj>6SG1 zJgAzSt$RUUP24k){@x+M|F$|?M=&Mwwj*p(x zDD?cWpHllI2vL6#WM@t&FJ$N>CytO=KM0*CPCph-5DgNQIoX+XPGu6wOpTl%&JwMm z*=PY7+G(bSel}FnK0J8wiSv%L7x*$xC8Q68jI-b*km{+kw|lS$)la*RQ76iIC+ufZ z*}Y^iQo-q2=KTA{*?GLPsd(Np!h6DRRC7($@L#L3+*&PNUPPRMD zFtw6n=Ts|HlypxkU6iOKlh6EWwyxi|{|Aq=4lkBUH$CsC63vy}@_g^ha3B>ljl-cj z>HE~#I7q_LDQ2Ou^FOm}q-PK$b2+dy1b59Z*$EI8=F6sQ$(pc4?IpY9Ze2E}xIu10 z-xMvaZ$Y-jl9p}AZLzH7CCDq{o|fBRGK;y(zwLV?!=UMH+UZs&yVGAi8u=WR;5olwY8`%p$FBJy6Nc9O2paThjj1*7LW4fi zWYAplKY&3%*xD~zw5!7;3`DU?;)la93rb2BD>F@Rs4is3D(YUUZCAXA3@gtT?XvBY zU2%Uu$v%h%p^R`TrFc)NMBNyL>4&LW!PeEbSnBRUqd)$6F?{UHhaN- z_n(P5Ud>p>bDZgtPpsdvc++B;F?yHd;&ApUJ8yr=V&gFzZ|VzV=GHd5=10b)HmR4^ z)=1p8&b3`$+h%!v8${Bp{bte-X5N4&|CK|U>EE0*^X6Q8bJEIN5yjKl@F)aceR(`O-O@G9+u&;QCPA3eO6e| z;d=iH*l1p-;)vCaB z?^T*~cuXcmeHvrjHNV4-6ig_NXukXtg5VPqXyRD_UW6I&zu@W(QJa{ezNpX94|MkzwZt{i z*k%(e-dOA*`-zpCqV~C={v?`{T5f@r>yvt3`-+KHUjK^y)tuDMRbIP7`x*?*_?3YI zeqAE~O&Xb%H^AIxR?ER6^we|kMc98d!HK2)q5;_V0=)D!9HwXja;btu74}{b%f9*; z*Q+pLGhTj{s`N#G5R(Q;Jg)sPBYLoJxYOaPgTb9fQ4cXuFi_;NVttSxsYtyOl|&xt zG1EgOqvS$*$W$^<_s@6hJt)eeigk+U6%n$;L-g;orj&XM{dz&SiG6u-Ka#FZ=F|1u zwO4YvtlOHYz&^sXw58MQ6yP>(evCDKj*`BCifFTexU$6`7#kpqr3qt$GEF{yv_P2G zFTz5!p{O~FoNY7^Enhtk#{PIohj~Ybb@dPi>H$@^;y1b5+P~&pRLX z!?LI0c_Q&WPe0GalFn|BiJm1wKTp6Z>t}&qs&vrNyCY;2IY7~#isdqg@MRccvR96} zM<)8Uqw7j7jU~`C+cksREfo50psb;o23KUckI3~D-{J`<*DaHcZk23w{l#Qs);>nQ zsR)kZCwGoJ)A?sQo5-6grZ?p=4WXIISrWXj^6u_2vR``PJRu`w?%mSI(>wC^{~gxP qaNUlFnM}JC!RdPI1J3zKdy9NjG=DaQ=@<02r$i2`*+z84-~1M?$aYKs literal 0 HcmV?d00001 diff --git a/hub/imports/geometry/helpers/__pycache__/__init__.cpython-39.pyc b/hub/imports/geometry/helpers/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8db72b36e70359c865ae1b06088d0970175f9191 GIT binary patch literal 167 zcmYe~<>g`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HIvsFxJacWU< zOlfXWettDi%d601w)2EFuF^wfiNDUd^tJ+_Db3%%_%z3A9mkxTn~vrCzzgQ7qw%-fkaGjC>o z^LuZeg5~7~!|#uO`g{29GGkv+WBO;KaUUhyf(Tigg*>!k-sa|OwJr0t+YY{VZ1>%^ z%h?VKozQ*3Lif~ad!e<*n%?j)FwoeMX2l%roJ4$2DsOXl?l`z z8>Giq8$wJ}6ZD1XaO`yQvrwTUY@=k?A#!$v`@YUjc+SpvjypfMPN2mC*7#R2D8w&R zkYtCc>We@O(kRj57@*^_P)#p&{XnbextXvv2vpE7$7WmN^XD64v?0bDqN<2itM#}X zsiYpN1Y|3B`X}2KFhvjY60WE-rL^V z|1^^-+aLB-n(F=CQKuKEenpgQzc)NECF&1SrL+BRMb`b2tS=RQsb~#G#i~yIaxuR= zj$0y#ak@f{R<{4yQ7Ha}JDGXJHMmy!RPk2ox8^0P`JG zG&=$*wFy7JwNJRV&zzi}b5NB78hd=toO4@A#Ec9?tbA4+s+72zfsjdej%T|>;F5e_ za{(T?p&kunVP|sCbPFpP6b+hRPA=TTI0dn7Y)36ZV8UW2r9hO>qN+w6M7?RCDzcCn zzqIo4R(a!9kY1fJ0}U-teA^~7WDC9u)({jSKe2Mlc&??boSz~_ud`oU*Vs9M z^wwoDA`YsrB92NzU5D$wF$!&S`DJq#vG;o>*QB} zo8eT~1iBB|<5j@M3B=qww>W!RH=MG@@0qiIk{nA_;$p5w5M0x!AY#qJLWmHtBfN1+ zR}d(oap4*h^AIdYW{oPcyiZ52Lokp0XoZh&&K-JY_{<^60WaBc8ynH!2YA4rFm+S& zBkRl#t#i&1TM$*?NQg4dH4|&Dv2}K0X*^ctoKp+X+&-~$mfKS!;C9+Q^KvV9&aEE< z!l(D}Qc$GIEBoHWe$Gx@tl`0?4Vy0Z;jA-b_de{pWcQ>--_UuTpwV@9wG+CQ6ed?DOuDBk|fpQ zK#EQfcZQVfgyL>Xd_W8SRNQG8$GRXcT~Ijuf6Q)9nQhh;y)+1Nqpa{UjciF3?lTo> zS-5!JyV69s;wq}K^be$dCS~H6&wN(c!9mt+Oq@C%^n$`gpMSUDQCZt;zt&4tG)@y8 z#1*9rhhR`|V&Qfpk`7 zWQqR}a+SXgIleyUFjEFQ1m@&NVe2vl`W+hd&YW2}0wz7gnW)+bujXOCqwOQ-%&lAq zK~*!j0>evWy_|VtVg<8qz@>8Jf=?Wk(03i~23Jhr7FMzjjf>V7)C01681+Ty!U=0< zb;KeLCxM%So~faixe+kN+(?yp(Q_|UfMhtSXjvv)=1#V%K_y>bc5KdeOcJjtA`|V# zA72ugQlu=44q_>g=3Nq2%rZ&9Zmrg&A5arMBYPMS3xMVwGA>hz$1YpEZR zW|m5-30)T@y8^-L!cgcozrsBfho0Ztb5!|8+COZr6m{RH{L1%>hVS>&a0u`4izVMj zWQePtn(v2cht!!4bksq(=%t~_7St*>V2-MYf$AEGTO__q;w}l=?bHd(Stz0#k6b|| zqeld(m2L4xqbzF+7B_|3w=8bPHfxGr5%nGk!m@CaVITiT5!B`Slt+BiT1EZ+@^JTv P116($ygIL2a54KoKhnDy literal 0 HcmV?d00001 diff --git a/hub/imports/results/__pycache__/__init__.cpython-39.pyc b/hub/imports/results/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b836a7234bd6c7eec27a75243325e722053b940c GIT binary patch literal 158 zcmYe~<>g`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HsvsFxJacWU< zOlfXWettPO2Tq@XtWZ006TMC_VrH literal 0 HcmV?d00001 diff --git a/hub/imports/results/__pycache__/energy_plus.cpython-39.pyc b/hub/imports/results/__pycache__/energy_plus.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a6322ff395aaafde760fb79e4174001d4f93de6f GIT binary patch literal 3320 zcmZ`*&2QYs6`$evuJ%(}$+4Oi1d0INq7fXYNDILzV#sdfLQw=eZk&Y@g5r#{RJr78 zNXn7GJ;{e$+WJ_aDIgsK^w49^J@wGPV6N$h;f(7ZP!SF5yH;?2%`@5eW9KHiVx zx7$quzt%Y6e;*L?6)KBA9h7%L(rsuM84*UA7SV||(kS-zNFV9&Z$!q#9GR8Pn%Ekl zWa5k(l)Oin$*dQISr^)<$@C{=Xy*aLdE`!#I2%W2E|0l5I&%;F$d3cwe6si8 znfs=@69yb$(0jyqoP~!W7n|;z?`}POyyYH=B%e0-L~_i744jM$_leIrb07Qh@qsVg6txXeYVQX1>l=YT ze=SI&$UjJgpTWp`VFYizpTwyjo$`#k_oGu^@N<`O_o)aWqzK(9f;M2H73gN%|G?6c zA(h6SpN)5+(}r-kB)|2eoTmZ07k~3T`59O_8By35jZxSKjp;AQ$lxY3nE8TS(2>O~ zW`oUU4y=1aHXo{0-iz||{8rO-OVyo%?go*creF(jfcl4h4P*->?Lkw}f_S9RpoM`U zDBT@u()5BbJCjZCz)!h1g^3JxX~6a#N<(=XbH|rN;F){%>#fcGrzscdem)UNlI`!E z1!G@Ks@+NV$N7Pha57CqmhKCl<`Mjt2gSpjH>PLO@w_k&GtXPW6b)zywdncE^-MQv zL;$C5{<{S|2Sm+Gf+r&x%LcgF7$S249+N?QSVrH>)N<>zemv+&-qLiFGW0tagURVn@ zTiL!S>;;>nY=0}91zSVeo)wL2TcN>tU(Z^sIctM-K)N73kbYr;Z!lXf+L=?disjod z*I$rX`{dt+!Io|lh|`P{T7~Qb@(+OQDP$j!C;$8i zXvu)*LZ>8Nev7=M>A&s(`QY<0NMXPk?e9t|q>*Qbzl8d7IFJGhC}9!80u4R6WU7mCMA@@$%C-eDM(B`X~Wrqodr zd!=96V--D>w+`|!!gceiD2z}1n5CluAaFrEpvHU>Lp?J7*=P`yt9jGfW8>#HEo+cu zxxP2;t5LPiH_Xyh(WO;pB@NgxJ{n}W3tpW^nOJSD^C+#dS7I@b3b$5TuJfqutEGLO zM`do;!<6%E*YQiWfq~0z_c~%}=*&YYT@hi~Ea9%c=6%l!BUh!LLPNB5+N6%A(dzle zvJF~4J?hZbcSUpNegk~Vv;*xxwXZGo2lS41{^Lc`{GMEHkf;eMp(qml6P)6L9Ft=p zy_fWp&u6rt$J(EPO#h+*b?V?V3hf6-vE~(->4ko2T@m3FNIg2xs{zHW-G)!hv6D59 zoA;o2nXdGuxo#-EHP=n0x97U0^iHW~-OFAb?KZi>d@yqV9;rMkZso!LwMUImd9Z)& zQDape>|cA-sFer%=vl7EL=royGgzrSYRtI@wc4Y`oO@8KJ!;Ik2esOx#+-Xl1J8-W zY@k5r{8RY0;}>6q!Pw2l+{F*GdvNCFDUuml%DOJE1J4ujJD`o{Zb<_!(u5*F6=qZL zEEn;nyPL#ZS|Kk&Q5t7{_o_QrHsB5b<-~V9u!)>Xj`9vBYKfM2VXbKyVPCY}}Q2eT9`9tss z7aP0*Efl^5ybimv1J-l{8e(>!ke8uQo3vLy`Z`_LdjDil#&v}2LY|BWyLkBNL zII8Etwal9&EC-tRWXtnTazCm(w&$@V@I29iL1in=fX9Og&&CN;YcJjb`$D!VZ{#Y0 z7p*QxiYA~K-7z%U{JF9Zm&7JmrHvQCC_E^)7fDR6!>w*(%%dq>{P0GM_gwE(U3AMO vUR?yh{Tot>vlKr<>K)mb+r&>Hpc?Q0B`BSH<(z+o-&U2SVFNj8u&(;I&yAF$ literal 0 HcmV?d00001 diff --git a/hub/imports/results/__pycache__/energy_plus_single_building.cpython-39.pyc b/hub/imports/results/__pycache__/energy_plus_single_building.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..afb0019d9562f95f9d8a19d583ee0a535c578d37 GIT binary patch literal 3379 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 jUX+cwj{gMkYR)%>D4o0IVt=yE**4O_J`OKXT literal 0 HcmV?d00001 diff --git a/hub/imports/results/__pycache__/ep_multiple_buildings.cpython-39.pyc b/hub/imports/results/__pycache__/ep_multiple_buildings.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f39e2667ad57398759e024730ad3695998491065 GIT binary patch literal 3727 zcmc&%&2JmI6(?s#(n#^wI{T40=`Oq77Ey}`skdkg!w90h#tec_PvpSZpTVbhF zf<7xO_bLXVq-S@klzc|~l3#vK{PHuSQ}eBLQm@1|C8W08mpo*>sIR)=KI45ZcJ|qp z8@hdu*VfyMzhyVsO5kyL4Qk6i@2g-t;9`!geAZrpu1_1cKt_Vy3|+-VZ6O-$i(sd# z*w?Sv?5){Zwh;BbNce%v7FufyY)3@#pw<@AF836GJ{N4=<=kg$Zhv>n6-;8QA=1_z zFCX6U++vs)g`v9@30HyUb`Zj-dr@Dy;S;VnYlcr;!H3M}?4bx?N)fODzSMw)W-pzc z_usI!q)rp7?W!*PkHc)ZBfoLOn9EfU;nR-+jXO}}Cm=ZKP&gL@&*eGkn7-*-@NcDi z4(CyU{kD^9Exo(#FqZe?Pz8gK|0)hbKj`mB4-Ywiu#O5ApvWl@BRV1u85tl!5llu` z>qb&?yg=(ZW@5o{ZYP#Tss-?h2=uYz_QKreL&=5QjC&%A)Mk6%>$;+s zorc`(##_1sy+I_D+!S1bsdAGKoL*+Lvy~g&80;su;{^RcIS$$>Ef9p3>F|>a*4oI2 zc(};?DM7`Cf{T~`0TGY`LlH$s^cg)gjisSdSxU=<5psd=qdD#=MLiZ-5xLk*e5Q5NNV$8Ae9&O2Dh)H<#^m>)A+`q zW3Pux7kW%FCD$?J_`K)#ec6}~BhL-xZK&i^A6N6JV#k*Y>lgI^cH?gS|F@G1Q52rP zlLDhhOrv-YMX_h%189C9%9+iAb>(wiu&xRW(;o6MRJ4c8q#oj9lwdT_m*y!iF^1OS z(gqveoZCPqXFwFJwHF729*};qk!ygl&o>Gus2c*37D+69*ti6A+x)!VSjmq7)+A9j zjMvAL4E5zJ*!Zp|^9!fhZm%piR~K4y_f;2GaAJKcgk&QEq(w+GXIF6X=KuH&lbaA8 z0cJuLP0V7`>>+Z)+HBQ-0~<8jE>FdaG?7+9|+Ry5#!foM_zK93+rCKiTE zVtVpPQdwZ>h@!vaY-spf|##WiTxO9DM9xt@jI0P>d;#cB{MXFCYf%+tA2406tf zXkvpB{bHwvwREKR3veCe0r5Tx%@9|LL^BRdPhL`aAO^L$uZm!TJfJwPpy`PY|s&L$H2=XssE7bws9f zoya~rxdoRqMC&XNY~_g7Ss>WT5v{X8u$3cPXMtb~kiB`|hP+rE{;tO0Y4w2`x(qmj zX@=O^XR*Wp!k*Nf8M-}t8j0US#(TOS4Q4edtF$E>++;-AFl4k=Y#_o#WTtg3uhEv7{U3=uDV#$=jH~n_4ot z!ZHCgB^foY)gLCzR&gu2k2pfg~R29q){ z7#z{3Fi;}dk*h+bM z2JYRBE)NHAHOFrh{Pb|1=x-0b&Ef|zQ}W*Fx8So#Dz~p>QppA;)uK=Q1m4#=&oeNw W=hMaA#!IC{!>!5~9iz4}ZT=6+vClXF literal 0 HcmV?d00001 diff --git a/hub/imports/results/__pycache__/insel_monthly_energry_balance.cpython-39.pyc b/hub/imports/results/__pycache__/insel_monthly_energry_balance.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..790ad3beeff288edfee631916a02302c6f5341e5 GIT binary patch literal 3885 zcmaJ^UvJyU5#J>#iIQbmRuo^HQ3W5|-SZnVp%P znVlIrv$G|F-xptg>HVcn$iL-c`ln;@DMq}8hf7+-rLGpx7R6f+w4UD5X$mu1hQj4~ zd5uugE3`~Xt`paAb5DtzJJMQ3SKB0w{NS%(Rk|6*USRd2kavPZ%L_fWe`xJGffKg9 z(&on6ed}ZEmf!Y3hS^Qm3%S4Nd+dsJ>-xqmfPT7k3D1aG9|sQiSZOutA2NTx!>zx6 zV=Z4=Uba@FupKeicdXU*yQ|hdiw6DD28+60n*-^3%(_1CgTQ0GXzBWZgFEwvw<8vD z@6+~p^HSR>J%`4m*`UJMaCoOJSJS_Vk$wiKM_?S%(p=ioUCq^>l9u7+QZpRUR^H9K z1;7ff=@#)e-4cv4BNmlGZm0HGSLV2uT4Q**WLY9pC1RH?+kh@iulgPVY}n7US{KXr!&}9!&lnJJDG+%>KJzBd|Nr69YV13{!;%? zn6~YQKDX_fRNBCUXn8vP@U2E#8gFP*Nu2$pmL`Te`gfS@lM%(xIN>nD5k1yURP?&~ zZ}s1QJJPv+Y$W;#9T|zSMjn1O%JE#116^J^@I=Equik|dGRkw)g&U7FP+lDsl6+EF zByRDM&c5Qsbag~|sXJ3AZmCX2CU}`gRAR1@gZu8xc$U!PvfSZf{}DZ*6wb*Y7w1W^6J zX?r3U_XD4c9CN~btoDM);h^W9IJLd9wY6#AxO4BWy>-X_{NAngO_6u{VDC1HVj&HJ zXu$geZtwX)8g!!2@f;3?MWG!#*?8PuR>Xo;HiJgv|&U7!`ML~C@J4wv2$Yj0rsO581g zw~Rd%cVEMn3F(q9T_evl#FUCaM4^shJfp+!652(&SR`HDB?H1XT)K}ei--XUD@yEH1|J<~0ZN_fxWJ;N)YoI8>_(T6)b z+NeC5b?K;rF^5rA^i@RmjnO>TwPe0Kk5zeeDyb!>eojWUgMR>41MK^wdNP;P!0%Kt zyGWAyBB_%E5f4cH90Bdz!M_gvmgvW)L6@%+72#43$-nsu|H@1L&*;I$Ou`Q#q57Hx z+^dO%DyTofIGY%dQk{}wDkD9CeuKL!sj_n(e7#M=s|Mj`o@s|y()&8`kyRzoMShEeEQ%<*H-wVcpGm5kVrQMzMp1^y!s<(qdrYj?b_v3f z+w1FJ*lQ~fHtiK#?O+$6BKttX6zi>=dk3@YB9REZLgG*2T{oirp3FA-{xItR`}nf((r%P&ONLD#5WI!5qQ}9b^aD zL@{Y6c3J`peyrLUc2TY>S)Y>yh)P)OCkm4_K4Z)^$w8W$-NB<_s2j*WlcYt}Hz{G3 zB>2B@%%hXT;d?;EvXdscvI+rHGhZxdXVLTwt+$6ly19v74ehv;VcYmT!1atW_J zTADZ46sA#P4NdNH?x-&=*c`SQL1ro&xEVZ+g a_9iuic{M%WC$bxkrDjInl$TSh>Hh<07dI6E literal 0 HcmV?d00001 diff --git a/hub/imports/results/__pycache__/simplified_radiosity_algorithm.cpython-39.pyc b/hub/imports/results/__pycache__/simplified_radiosity_algorithm.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85680212d88d7bcf9cec8729219c39e91a6c3478 GIT binary patch literal 2307 zcma)7OK%%D5GHq5tJV4yw@sQy4@8TgP}>MbatL4;K@7)nQaFxbIdvmAAl6GtT6MLQ zNy?~%RS$KpIrLn#aE`h4Clvh|y!MoHZ#i|il5C}ipcFV7&XAnp%r~>q!a|5(eD$Yc z2W5o*wu{-}!s0$mwFZQt24a{wDQ-B$zuWa3gi*KD@UhjnX}KFT0*tm0^H}L6Vx?23 zQDIIURsH@Sa79>8y1g`MCY+JIh$TWLdO+6GmXL{VcfJ zm#buZYj+z&cWNs@g(SDqNOKu(h~7XZt+pnAy&<<(Zr>&wB8!D&Nkld__clmNiheKL zm7>FA4NAr(+3F{0%4Jv7w)z@wmwfm{NTK=tczU=NN8wxW8SPZDS$HBc-A)JJMQNX_ z*otR|1B?4G6#>Fg14FDJMh%xa%zcR(-Z&nO67wMzW%JoZ9L~dV9);o6kdVjSo{*Z< z_tuHzs-J2F!r10xIy_)(_BLRuA&?yBh@#v93S7rd)Ny`=%>3ruKxgi21R8HhbgAQm z&a=KT@0HsrGw|z`JsljNtmYwI8EA|~E=I#Ey28q*ICp<`4$yPJz{vf{&BF2j3R(dP zyeQZi&QT>JT0f|Xz8<=V>T8L?r>bLI#e2qY^9bT@yfjf7;^{-eA+y7)JEC|a9P0Ho zX(lNrP0`O-H8dp}13FAdk0QlsFVbz}Wl@)#GDJkAC%kcqCK()~_SkrX(_6um;i7{oI0EsJXGh1r*evT8ch*j>kYs;ct)ZrUACEA z1cDqN`}jI`Fu{v>c=JPOsZCGEHr~@Q2aE+s0S;Sv77P#2i&Y7E+V4n}N63EKAf9B<7kOaDP=I0)86&I}RCK}> zNiuQ-Rm+mBMO0rlqZov`%?Z>x1iL3P+bc*SZJ47h<|NXDCCw(6R<4sSzop_Rg;R|8 zcvf5_vf_#^G=;)c(!4N|D6%6m{tZd=#DyqL&(-S73opPm3qjcV{&CgganbB%?hsiz z0Gp8>KW)4tKEIZn6dk5eu1c=^GFv4XxKT*n;nnxjZ2OK)a~-C-0;C0rez7>hIo8kt zZlGVBW3N7jur0+{bMx`R`u={MK6?6WkM2LE-#**ktb@*}tr+}c0roMm*O_q57HllK zy?Zxd{SQnuy!$~s@=PXiySA1J2)4Qh%=Cu07NKvg&pXviatZ!TNx|np%fRw;w*II% zvTfQdOj1mb1~g&P9x_WUuBjF}N@>@&V`wc zF3q?<)&$e5OgOcZFjJoJjm6>->0r{E8Vds+$@ArZGvSZpdILOCp94YV5PLYppWpz` z!whGBffIsk_{IOo(@xd54amNPQs}i1S=NVcO3gf_$NeasXv&l_5mPEZ1=I45CAKfl z5Q`USKTr!Wl@BDqo*RUPtQyL@ATfR~%2=f2yj@&|o>^=2v;7G_*wTX0+mIZR}Sz;c;5XNpr@P! literal 0 HcmV?d00001 diff --git a/hub/imports/usage/__pycache__/__init__.cpython-39.pyc b/hub/imports/usage/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..146165821b2d7f32b3b28c6fbfa863f2bee35733 GIT binary patch literal 156 zcmYe~<>g`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HcvsFxJacWU< zOlfXWettWHa^HWN5Qtd!Se+FU(09KbLKL7v# literal 0 HcmV?d00001 diff --git a/hub/imports/usage/__pycache__/comnet_usage_parameters.cpython-39.pyc b/hub/imports/usage/__pycache__/comnet_usage_parameters.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ca7436f3c53363d904db7e567c67646b5bcfab70 GIT binary patch literal 7097 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 literal 0 HcmV?d00001 diff --git a/hub/imports/usage/__pycache__/nrcan_usage_parameters.cpython-39.pyc b/hub/imports/usage/__pycache__/nrcan_usage_parameters.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..efa05c03e2261fccfc958f63c01177358f86fb99 GIT binary patch literal 6130 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 H*iZitBmeBX literal 0 HcmV?d00001 diff --git a/hub/imports/weather/__pycache__/__init__.cpython-39.pyc b/hub/imports/weather/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..21a79cd8c06f7843c8d8d769946c4e5005438acc GIT binary patch literal 158 zcmYe~<>g`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HsvsFxJacWU< zOlfXWett-Ni6|TZ literal 0 HcmV?d00001 diff --git a/hub/imports/weather/__pycache__/epw_weather_parameters.cpython-39.pyc b/hub/imports/weather/__pycache__/epw_weather_parameters.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dbbb01ba0968c607685aa24c2fdc6a443baf0f43 GIT binary patch literal 5643 zcmcIoO>7&-6`ox#DT)@UAIq|3`DgtvB{n5HO&U9jYgG~QQ^!#(yLJ{%2P@8yTza`n z%`PQVAb|k#v1!zzDA1+>q#OzaXzw}qP~_g*poaqO#XwKJH5d1rAt_U`Vgv7V8ls{A*c18^HHer1%{g|-y zhUpw+<`S9euiFM8nT6WgJ?_S3E*4$kR(Z@tWEXrlitISF`J-64h1gzeZ?S97_7p`} zwOyO>q8D&x3tsZV!1e+=&ueRTF%(rdwkHzaH70W2Q1oi*MbxFWEP}0uLgN z*}IGfu~+oCxMtscd+{bfujFSihQhw&yAUZeAJ!VeE0tsW&tKVBX0BYZ=fj{73g)@? z{KD;dyClMTEwd=X3WvP&A>+bc^n6#??}tI;`m4B^J?F2wg0Dkp`>yboT_HTXrZ(lP zJDYA4x{UJ$H}eE0BDbatX)QuY_|1Y{T=pA3b^SVz6k^_s8~E+(+^?W0dOthnJ^?5v zFf&mmb`soT=I>!@W<9oG;3SNalB4?>WZll#_I`-ArGQj|6d*{!>^XW2^L{+@c%ok? zm9sSoB~1gP5t|!iE73G6*0x$F<5b+YVN}xU%K)h)xB8jM65Dvj$>-z?bAoJTwiSm1 zz#iBd*e20$;;fo8Ys36(vSl{Stz0}<8B)|N$x@%1mEmo}Aop;xh3`hfAi>aO68(Gz z?yJ5Z;n_6SQyo5VQr7=z;m6rX2b!6!qwz#{U-Q6W!tjif4MW{|(^z@0nQ5k*{j+L5xl0ElmjR1@ z)vJYjBzVap@v%*#@l9Jd@$sz_Y((jI+cZdga?9S<8Vk%BrL$aos&ZOuKgR}2gdP0S zV56T}+QOs)J5@;K3_JAD94A|6w=r)GGzVDjp|xoWJ3d)Cx0PdKivDxL4u6qQGAkNQ zcb*;Dp*!D0cYhDv_#V0oJ#-g(=r;Gz9o<7W*+VzkL-)-dx`}6Wl__?N9sgAMF8nLF zqIH*O40LqYzTb(?{Z6*&cIyy0qw*3w<=?F=?3As%9AB(lnkDdsTz552fS+s)#`$NE z=Ag1M8=fGoq2^G@Xy%%OuyJDLHO$&vre_Iw&0uwT6&UeY%@pKKtzTxtTRV_h!cMW% zkK6Dw>bwmDxGQQmaA$XL=XP+fba3Z)a2IxPKWO80bidj?W1Jwyvz1rdI7q7OuJ68S ze0;x^jbB49_~D-2N?vF~-(1VCZ#_9daO1Y@>Xuzf&AaEEE@cM}eRU}n1e6_lrpF1( zA-;yOejU30OKYS#Qn|`V-Pp9mmue2^A6o~T2P@YqZvaj;pa&)(%y#?uTLn8{Ahwa+XMTJHZ=`>V;8@#^{RW;HO0LRQG7-Pjgg4<^`p1jf+oGAbQfL zhBOADcsx-x;mMF11~9CDvLHl=Qrj)+MbGEKyy3F=~ zQT4tY$F=C%^fcFHy@s-$4|v>_+;#(I*L=6Y6#-g-V(6_zW)%HBO=>pbw{GT3z)7noAv$eIU>w{M|r!Fb8ZX;@U_&`y;`&R`rW?MDwAv=FXx z;S7Z}ccspIAlX$f@|HbcDeqy`87^?lgAy%sG?JRhgt9VvPug)#8ZJj%tZH*QhxQ^7 zWIWQ~f>-lmciHE3O?9WVT6IpiT!c~R)36qM1xUtt4OhE7LtmkBIdZa5fcR|#3svU` zTt1?ar?u%uF;(ayg4{{D{xWBwbKLh<>K;>$*gj7CSepUPJGn1*;rpnw! z_{nti(5s1XEt1Iq9ez~$-EZ;v&;1+g{r6lEKqc4g^{a^2RS>IAUiHcSKIV$-?g7Pp1l)2nf1Bv!=dB5-@)R03DNee z{W(a>_o5g%HHFxKW2{ehbEOD_Qs=EEhQ^dycI8iLWW-Tq*MiEp-H%GV7M>+Mk?O`v zDDx-+M$?E25*B;!3t40s%RS|~qgT+Rn?22mV{U>@*t}pAytJXphN4?p1$Jw8~%;jqh znVD5rFND?F^%W(qk~?LXPuDN+_u`SK)I;o2nxFMUxO;RRlPN09^ZH=me zDi5^Zh>@KbcPv^LzEJKU(^TUrl_?kiJ|h99d3*6D1BByse@@#0u^*q&HBvxs4Tk53k@HJwuV>9Heb6Wm?t1xX!rj z_uY3x-wMMVR-aDx(;2^1cga%(u6$z%~-KrAy$jR=vy@JI>khouq%K_*caLm?AU z1Cm1GSeiA~7Kaw1RUH&ESwLR_eo>5sB(#5M+Xb7}-~Zs&op*3vy(+Db7UphCONEOZMcw5hK<4csk;BiGOWD`SA<|mrZdHyI z(4=(ocn_seukFqtbWE$<4QR*IIaQDKDN0$9Ow}W|gx?VsBC{g%qpG5usH!0QYutT^ zW+hz1ne8Gj532ftKR$K|nMKqu+@^0W+**3~&PO^4VEN9%+#NbUw>USifP+3?<)|)2 z)DW~mzU=FypQ$lvMcgk6)%1yJr6Nl^AW|93X?W70PA;fdmr zXFF8}Js>)usw$Ar?{@}zw1s}O;*50;=@gRgVKUvds`yapbnJOvG=eK1=;0@av{iZ` z*JR=cgVPCWQ?5gnrRs$_|0^_Ibd?efMH=A z(&K4k2J@6*J+;gnb`Kb-r|B`v$UM!M8Dk84UNAF9%^db9j*91yaYWB?USb41(@%3| z?`S7-<_P$nXphzqq#Dq2=0L3^9l>dqnFbd?Otmtfn${>J88Ft5zc5AL!rw|zhpPR^ zIvGllvy)iHE1eU!4WK&epaRn*k*OsRUNv#@%@7{#NraN4jELP4fRMXV^^ zR>Qj(WS>f6zPGH?p17(&$an#BBk>cpID{INFLNI~c$7yPL+2eJt@U+4vVRAr1K&B? zyI;RJ_>E3j>R^?})drR0)CCbM=+)~5^-`dL`c}>vwWm`Q^PLFV5u&pe_@|7Byc*Qa f_EUmP&$g9#U6uPtsl)0^8)+B=Bg~`BK9Kk?^m(Xz literal 0 HcmV?d00001 diff --git a/hub/imports/weather/helpers/__pycache__/__init__.cpython-39.pyc b/hub/imports/weather/helpers/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2aea33725b39ca441751618d0c13079160be46d6 GIT binary patch literal 166 zcmYe~<>g`k0>Nq9Qb6=$5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HwvsFxJacWU< zOlfXWettWHa^HWN5Qtd#Nd@JIIV8HE0>2IDOSgPYKUbs!8i5W`G!a04fAt)V6Fl&fn9 zBRAd1U~~tu6w@CgroW>#vP`R^VmkaiEH899m2ECan>!sY3iaCUACYTh$F{f^aNxEX z_oUslxwt`g?$mZbv}}}t`hr|@sDw3DzjG|?R$G!kyiY3SN`+K?&+-McDXDJVuacJV z!%m?l{72l9Fv(!Qn(a_Q?)qLpog*$e*>sMm;61`P*%S6dDuhisO383fm2O(24;vOO zoPhmk*HU!6Dd*jU9{d0ZN8lEuT+&D}4V*A|be3irmSwqL<{LUsvpg$2M(^N82KWg! znebUQ#V$QYjU1Z>cg@7vHwLci%@zn5^2Bmz5Wu+iZd=MuaHCY>9v7|SjuQsghQ2j| zWrMo3=XGpp81({a6mzY+&XF?dI;M6g;J?R*mH860svNmSm zXXqqmzI_ohc_{o2A9vSk>Gsy1>SkSrQnsj&#!`808T_=Z{PcfklFfg2kAWy**YB60n_H0l(pV`kUB6y7@7A}^6{;p(kJQWp>Zc<7 zM2}KWF-C{E2t#$zdkrWegxukh1P8}Nau=#Gm7(CIDSVeu_n{4tIWu8IRTklUB#dNH@Z~(-q zj^B+_mgI5f)vcY^w|C+#j4pr(>gY98ZH+#`pg!Y!F;l zf0Ng74$tAqXByU@>Dnaj%@2#S@!Xm-k(`93Ip|3w{|bzXB*PFztq*5JUr(ZXtDlb2 zOouq87ZJWMEU^|bHM9|b5SbNA?9$_ zuzaMk!U9rA=;zcqGaAEu9`-Lp7?5!k%0<&`#@UO*B*QfQi4ME!}V02XNM zg?SX^qAa_-2s#o!NktP+vHCX4EP%bBtuLYkV?T`wfU(&zj9I?JNLQWSXApH^s4?4; z3C4uV5_{p}XV2_^!2RST55tqRB1BEBe;pkBi+5G~^9X&9H%?ws3g1vfEpIj0cmDFj zpZ#m&WLk+Diu_g)m2oE;kfJVB%!EqASnJqvDzLrcq)@vxuABo?vq{^6du?vZ#wE1pr#Ju{mX6z)P^ zkfgTn0Z#(b71}eIoNN#T8S%!$Gu@N)r&cIg(H~ zqzRWn#SashG;Ig!)==28kGMx1-%>8})V-1MCJh})u8!^vgi%S0XRBBsMIz|ktarEt zH&E;J^Gch9-htX6=o*3S~EOkp&Wo#^7xzYMvkOvBhD6OJWz`dDK1Wr|o`8a2q9$f59 zGcK5>>$A{N{G@3fhSV9(WKEO#mT3ye5EM@a61-%&T(*5CR2qn{De^5vKD8#{6oiC| zrWyqV2%saa;pd+JWTrG+n1+5O(Jto1i=Zo1+6@xvOHhZ6VaDL9RKGKjN7QJg=O e36+V-SI#pg&V6_AliyR>ocKr2<^ZFYQ=b5PQN8>C literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_results_import.cpython-39.pyc b/tests/__pycache__/test_results_import.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..72ee752b717a776b86c46273021d3ce9ec598126 GIT binary patch literal 5470 zcmb_gNpBm;74D5&i=;#?wqHJAxoq^0;;FdNR1ImO$-e7Has6h9T5 z3(u4Dx^_>ab=r8P(FQ9WnB)RA9&7F9@Gr1P`w0_r?d2fmQaBQL$BU@*!V7%rN#@9H z=5&3z>oC>C*@}7SNnt;JxcaGc#kucyStJ;6>y$;(-|`v1;oQIX@IHvX-MI=h=FXJ> zhT`^0JlN%aZ(BNldhIMU+-0+M^Yx$K&C^e#qlK>q@Akj63&+eh@Ht zNf?^5J*TGxJd8WNTo%SWmh5&nAFb2%>^HDCZKJIx)Q9hRK`a3588R^SnPK%^%11HBJ>xuhMMN7_hp ztwLrLvJy4-^^w-MMp?UkLzbyEGH40+EGq|Eze=k=FZXLOf-R>gy!-ZnaacbBBa#hj zkC*8bK)t^AKCCp|t|MTr1690{F8hYF5l2i(h>hD7E@0myjg*gvaxj!)&sl*D2i`8@ z!i^ZleXd*#9En)~$0`u+8G zDX|6sOj1vqx?nj0B^P&@$K80#1vM1t%Icc=$!F#1qAX)~d$>tT5$}2tDR<*AVsfM1 z!^{_mXRyC#N*#*2umLbB;ij1E3}9+d>(c@FWKAH^O7r@>Zs|>U zjO<_jmtC3B_s%~#X$l?HcLKfW$V>1j^p1d$;I;u*_!tK!;#UU*_YIWwtzT=@_$^|% zbfoR;vV2&fx~z@>?>*y42UON3dfQoVy+5_8Jzv^4Mn=C5+|0f?(heIVv){yCJ9LLo z4e)DjB&Oir7gZN%=VchQr#Y^U&moxw0>`Z!bYewb$oLG3Y%$y%@VLu_NK8JAU<}E5 z4ZF-^eQh)Mf21mge9MED$uu|t#^t)$h$Wf@Y4w756IAbW?t!O{x~y&S1?*pi#iYQg z<|C0xHjq+lN-kjAX;dDrK2zBh5Q-)c4b*f&pVjA$x^C-xmrpC_M9))dLWn9gZGijv z^3?z%ns{L0u3aH)aH|2DH zW>G`sXOh+_3AUL%)n-yMcd8dkCfm%PYJ-xj&CVYb@X8w;t%+X(LY5#bu)sxUupR8W zOvO+auz{f1D|b{iDXCX`;RHbW5{~l@5(FoI7s-1_93%xQIa(gSjN~golIAw^B*bW! zvJf(p#Oz9zlz#kRVF6|sr5>e)3kJ;uWASSzDdg?lU8nOkawgtwX6m*l97cq z#mFB4tW6keMz;F1AV+>KcMo+tNV~7{nFU69&4|4 zj!B5p-fJTi-?qq~`tK7R$etFO{P|Jh4oE6=a{H{2Guqbs+8e|JSMtgCecmpo)!=R&GayC@FC- z>M{O4PX7%ciS@~Yr;m6W7g18~|JZDjGF%siOppbLL6EsKTKEV&rxV-CLP0T=xDR6r z2Z&~5p#bctt~ZTYy$Uu|RV9?1X+_6lO`JbkP!SxipB)?^ey?i3(4Wsk-l_LXX)Mnj zJH+%d#B_6H9#)Pt{#S6z5ZC*Vr5+i|N!OrcXO@Hf)EHkM<8$l6Hp;r>H1?D;{njE{ zmIWivjv(t*vbjZ#TJV&POvoPcmh(l+>f2jFZ&=x9CSQWl7H}+I%hrjdsfkj3qSTlu zHPh10QWgftrOe$Af+6O-Q4f;FJnBPU0*Pa%D_#)e+Ojf)H)y5pbE#ifSxO58D(^_0 zdl3neiZ4`xnoOms$J)-&3zYLu;fI(@-lcG@64LLw+p%;%$NQvc03ZmN zC!{P{$XFV4{-3 z1R9gD2|=1)%UBl6I%yW~sXS-=lqZwipTQggmx2MOi3S3uf$#i3qhHkVu|b;t_pY7c z)6SmdYy(PQ<}<=jkpQcUo1rdlmidq^#xq+gtA3RuC_3kax$AC4~Ehk2j+n zaC`*`UY}B;^6cePC_2576St?&VFZEMSqdzKRSqe9r?A>v{V$;OAE#>DcpF9I zfZM3;LYSaKbu+EIE}B|aQ*m7ycU_k+;^w}N4}0 zDw!y$6*8qf@*%cQFJYpSAt}cWT(i{&HW%(#_=QO&x#ZGBj}t90c##X^YoKEvpwfG} zgVpI3I9p=&J*t=oZ{lQWycv9=P~WGDCV0(Hmy(Z^`<;BT2y?PHKFAP1U=<_a4PPDZ c+cc6?Z>Czl1p!zSs3fbR5C-vm9A|a&-z{*FPyhe` literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_systems_catalog.cpython-39.pyc b/tests/__pycache__/test_systems_catalog.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..26324a1a32e2b8cafab22017119221443a342310 GIT binary patch literal 2539 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