forked from s_ranjbar/city_retrofit
checking a problem with lists assignation where a single value should be assigned
This commit is contained in:
parent
11dc02d0e8
commit
84f5ebe4a0
@ -9,7 +9,8 @@ Code contributors: Saeed Ranjbar saeed.ranjbar@concordia.ca
|
|||||||
from typing import Union, List
|
from typing import Union, List
|
||||||
|
|
||||||
from hub.catalog_factories.data_models.energy_systems.generation_system import GenerationSystem
|
from hub.catalog_factories.data_models.energy_systems.generation_system import GenerationSystem
|
||||||
|
from hub.catalog_factories.data_models.energy_systems.energy_storage_system import EnergyStorageSystem
|
||||||
|
from hub.catalog_factories.data_models.energy_systems.emission_system import EmissionSystem
|
||||||
|
|
||||||
class DistributionSystem:
|
class DistributionSystem:
|
||||||
"""
|
"""
|
||||||
@ -18,7 +19,7 @@ class DistributionSystem:
|
|||||||
|
|
||||||
def __init__(self, system_id, model_name=None, system_type=None, supply_temperature=None,
|
def __init__(self, system_id, model_name=None, system_type=None, supply_temperature=None,
|
||||||
distribution_consumption_fix_flow=None, distribution_consumption_variable_flow=None, heat_losses=None,
|
distribution_consumption_fix_flow=None, distribution_consumption_variable_flow=None, heat_losses=None,
|
||||||
generation_systems=None):
|
generation_systems=None, energy_storage_systems=None, emission_systems=None):
|
||||||
self._system_id = system_id
|
self._system_id = system_id
|
||||||
self._model_name = model_name
|
self._model_name = model_name
|
||||||
self._type = system_type
|
self._type = system_type
|
||||||
@ -27,6 +28,8 @@ class DistributionSystem:
|
|||||||
self._distribution_consumption_variable_flow = distribution_consumption_variable_flow
|
self._distribution_consumption_variable_flow = distribution_consumption_variable_flow
|
||||||
self._heat_losses = heat_losses
|
self._heat_losses = heat_losses
|
||||||
self._generation_systems = generation_systems
|
self._generation_systems = generation_systems
|
||||||
|
self._energy_storage_systems = energy_storage_systems
|
||||||
|
self._emission_systems = emission_systems
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def id(self):
|
def id(self):
|
||||||
@ -93,10 +96,30 @@ class DistributionSystem:
|
|||||||
"""
|
"""
|
||||||
return self._generation_systems
|
return self._generation_systems
|
||||||
|
|
||||||
|
@property
|
||||||
|
def energy_storage_systems(self) -> Union[None, List[EnergyStorageSystem]]:
|
||||||
|
"""
|
||||||
|
Get energy storage systems connected to this distribution system
|
||||||
|
:return: [EnergyStorageSystem]
|
||||||
|
"""
|
||||||
|
return self._energy_storage_systems
|
||||||
|
|
||||||
|
@property
|
||||||
|
def emission_systems(self) -> Union[None, List[EmissionSystem]]:
|
||||||
|
"""
|
||||||
|
Get energy emission systems connected to this distribution system
|
||||||
|
:return: [EmissionSystem]
|
||||||
|
"""
|
||||||
|
return self._emission_systems
|
||||||
|
|
||||||
def to_dictionary(self):
|
def to_dictionary(self):
|
||||||
"""Class content to dictionary"""
|
"""Class content to dictionary"""
|
||||||
_generation_systems = [_generation_system.to_dictionary() for _generation_system in
|
_generation_systems = [_generation_system.to_dictionary() for _generation_system in
|
||||||
self.generation_systems] if self.generation_systems is not None else None
|
self.generation_systems] if self.generation_systems is not None else None
|
||||||
|
_energy_storage_systems = [_energy_storage_system.to_dictionary() for _energy_storage_system in
|
||||||
|
self.energy_storage_systems] if self.energy_storage_systems is not None else None
|
||||||
|
_emission_systems = [_emission_system.to_dictionary() for _emission_system in
|
||||||
|
self.emission_systems] if self.emission_systems is not None else None
|
||||||
|
|
||||||
content = {
|
content = {
|
||||||
'Layer': {
|
'Layer': {
|
||||||
@ -107,7 +130,9 @@ class DistributionSystem:
|
|||||||
'distribution consumption if fix flow over peak power [W/W]': self.distribution_consumption_fix_flow,
|
'distribution consumption if fix flow over peak power [W/W]': self.distribution_consumption_fix_flow,
|
||||||
'distribution consumption if variable flow over peak power [J/J]': self.distribution_consumption_variable_flow,
|
'distribution consumption if variable flow over peak power [J/J]': self.distribution_consumption_variable_flow,
|
||||||
'heat losses per energy produced [J/J]': self.heat_losses,
|
'heat losses per energy produced [J/J]': self.heat_losses,
|
||||||
'generation systems connected': _generation_systems
|
'generation systems connected': _generation_systems,
|
||||||
|
'energy storage systems connected': _energy_storage_systems,
|
||||||
|
'emission systems connected': _emission_systems
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return content
|
return content
|
||||||
|
@ -9,6 +9,8 @@ Code contributors: Saeed Ranjbar saeed.ranjbar@concordia.ca
|
|||||||
from abc import ABC
|
from abc import ABC
|
||||||
from typing import List, Union, TypeVar
|
from typing import List, Union, TypeVar
|
||||||
|
|
||||||
|
from hub.catalog_factories.data_models.energy_systems.energy_storage_system import EnergyStorageSystem
|
||||||
|
|
||||||
DistributionSystem = TypeVar('DistributionSystem')
|
DistributionSystem = TypeVar('DistributionSystem')
|
||||||
|
|
||||||
|
|
||||||
@ -17,12 +19,14 @@ class GenerationSystem(ABC):
|
|||||||
Heat Generation system class
|
Heat Generation system class
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, system_id, model_name=None, manufacturer=None, fuel_type=None, distribution_systems=None):
|
def __init__(self, system_id, model_name=None, manufacturer=None, fuel_type=None,
|
||||||
|
distribution_systems=None, energy_storage_systems=None):
|
||||||
self._system_id = system_id
|
self._system_id = system_id
|
||||||
self._model_name = model_name
|
self._model_name = model_name
|
||||||
self._manufacturer = manufacturer
|
self._manufacturer = manufacturer
|
||||||
self._fuel_type = fuel_type
|
self._fuel_type = fuel_type
|
||||||
self._distribution_systems = distribution_systems
|
self._distribution_systems = distribution_systems
|
||||||
|
self._energy_storage_systems = energy_storage_systems
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def id(self):
|
def id(self):
|
||||||
@ -68,10 +72,18 @@ class GenerationSystem(ABC):
|
|||||||
def distribution_systems(self) -> Union[None, List[DistributionSystem]]:
|
def distribution_systems(self) -> Union[None, List[DistributionSystem]]:
|
||||||
"""
|
"""
|
||||||
Get distributions systems connected to this generation system
|
Get distributions systems connected to this generation system
|
||||||
:return: [DistributionSystems]
|
:return: [DistributionSystem]
|
||||||
"""
|
"""
|
||||||
return self._distribution_systems
|
return self._distribution_systems
|
||||||
|
|
||||||
|
@property
|
||||||
|
def energy_storage_systems(self) -> Union[None, List[EnergyStorageSystem]]:
|
||||||
|
"""
|
||||||
|
Get energy storage systems connected to this generation system
|
||||||
|
:return: [EnergyStorageSystem]
|
||||||
|
"""
|
||||||
|
return self._energy_storage_systems
|
||||||
|
|
||||||
def to_dictionary(self):
|
def to_dictionary(self):
|
||||||
"""Class content to dictionary"""
|
"""Class content to dictionary"""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
@ -24,8 +24,10 @@ class NonPvGenerationSystem(GenerationSystem):
|
|||||||
maximum_heat_supply_temperature=None, minimum_heat_supply_temperature=None,
|
maximum_heat_supply_temperature=None, minimum_heat_supply_temperature=None,
|
||||||
maximum_cooling_supply_temperature=None, minimum_cooling_supply_temperature=None, heat_output_curve=None,
|
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,
|
heat_fuel_consumption_curve=None, heat_efficiency_curve=None, cooling_output_curve=None,
|
||||||
cooling_fuel_consumption_curve=None, cooling_efficiency_curve=None):
|
cooling_fuel_consumption_curve=None, cooling_efficiency_curve=None,
|
||||||
super().__init__(system_id=system_id, model_name=model_name, manufacturer=manufacturer, fuel_type=fuel_type)
|
distribution_systems=None, energy_storage_systems=None):
|
||||||
|
super().__init__(system_id=system_id, 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
|
self._system_type = system_type
|
||||||
self._nominal_thermal_output = nominal_thermal_output
|
self._nominal_thermal_output = nominal_thermal_output
|
||||||
self._maximum_heat_output = maximum_heat_output
|
self._maximum_heat_output = maximum_heat_output
|
||||||
@ -256,6 +258,9 @@ class NonPvGenerationSystem(GenerationSystem):
|
|||||||
"""Class content to dictionary"""
|
"""Class content to dictionary"""
|
||||||
_distribution_systems = [_distribution_system.to_dictionary() for _distribution_system in
|
_distribution_systems = [_distribution_system.to_dictionary() for _distribution_system in
|
||||||
self.distribution_systems] if self.distribution_systems is not None else None
|
self.distribution_systems] if self.distribution_systems is not None else None
|
||||||
|
_energy_storage_systems = [_energy_storage_system.to_dictionary() for _energy_storage_system in
|
||||||
|
self.energy_storage_systems] if self.energy_storage_systems is not None else None
|
||||||
|
|
||||||
content = {
|
content = {
|
||||||
'Energy Generation component':
|
'Energy Generation component':
|
||||||
{
|
{
|
||||||
@ -288,7 +293,8 @@ class NonPvGenerationSystem(GenerationSystem):
|
|||||||
'cooling output curve': self.cooling_output_curve,
|
'cooling output curve': self.cooling_output_curve,
|
||||||
'cooling fuel consumption curve': self.cooling_fuel_consumption_curve,
|
'cooling fuel consumption curve': self.cooling_fuel_consumption_curve,
|
||||||
'cooling efficiency curve': self.cooling_efficiency_curve,
|
'cooling efficiency curve': self.cooling_efficiency_curve,
|
||||||
'distribution systems connected': _distribution_systems
|
'distribution systems connected': _distribution_systems,
|
||||||
|
'storage systems connected': _energy_storage_systems
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return content
|
return content
|
||||||
|
@ -17,9 +17,11 @@ class PvGenerationSystem(GenerationSystem):
|
|||||||
def __init__(self, system_id, model_name=None, manufacturer=None, electricity_efficiency=None,
|
def __init__(self, system_id, model_name=None, manufacturer=None, electricity_efficiency=None,
|
||||||
nominal_electricity_output=None, nominal_ambient_temperature=None, nominal_cell_temperature=None,
|
nominal_electricity_output=None, nominal_ambient_temperature=None, nominal_cell_temperature=None,
|
||||||
nominal_radiation=None, standard_test_condition_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):
|
standard_test_condition_maximum_power=None, cell_temperature_coefficient=None, width=None, height=None,
|
||||||
|
distribution_systems=None, energy_storage_systems=None):
|
||||||
super().__init__(system_id=system_id, model_name=model_name,
|
super().__init__(system_id=system_id, model_name=model_name,
|
||||||
manufacturer=manufacturer, fuel_type='renewable')
|
manufacturer=manufacturer, fuel_type='renewable', distribution_systems=distribution_systems,
|
||||||
|
energy_storage_systems=energy_storage_systems)
|
||||||
self._system_type = 'PV'
|
self._system_type = 'PV'
|
||||||
self._electricity_efficiency = electricity_efficiency
|
self._electricity_efficiency = electricity_efficiency
|
||||||
self._nominal_electricity_output = nominal_electricity_output
|
self._nominal_electricity_output = nominal_electricity_output
|
||||||
@ -124,6 +126,8 @@ class PvGenerationSystem(GenerationSystem):
|
|||||||
"""Class content to dictionary"""
|
"""Class content to dictionary"""
|
||||||
_distribution_systems = [_distribution_system.to_dictionary() for _distribution_system in
|
_distribution_systems = [_distribution_system.to_dictionary() for _distribution_system in
|
||||||
self.distribution_systems] if self.distribution_systems is not None else None
|
self.distribution_systems] if self.distribution_systems is not None else None
|
||||||
|
_energy_storage_systems = [_energy_storage_system.to_dictionary() for _energy_storage_system in
|
||||||
|
self.energy_storage_systems] if self.energy_storage_systems is not None else None
|
||||||
content = {
|
content = {
|
||||||
'Energy Generation component':
|
'Energy Generation component':
|
||||||
{
|
{
|
||||||
@ -142,7 +146,8 @@ class PvGenerationSystem(GenerationSystem):
|
|||||||
'cell temperature coefficient': self.cell_temperature_coefficient,
|
'cell temperature coefficient': self.cell_temperature_coefficient,
|
||||||
'width': self.width,
|
'width': self.width,
|
||||||
'height': self.height,
|
'height': self.height,
|
||||||
'distribution systems connected': _distribution_systems
|
'distribution systems connected': _distribution_systems,
|
||||||
|
'storage systems connected': _energy_storage_systems
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return content
|
return content
|
||||||
|
@ -24,16 +24,12 @@ class System:
|
|||||||
name=None,
|
name=None,
|
||||||
generation_systems=None,
|
generation_systems=None,
|
||||||
distribution_systems=None,
|
distribution_systems=None,
|
||||||
emission_systems=None,
|
|
||||||
energy_storage_systems=None,
|
|
||||||
configuration_schema=None):
|
configuration_schema=None):
|
||||||
self._system_id = system_id
|
self._system_id = system_id
|
||||||
self._name = name
|
self._name = name
|
||||||
self._demand_types = demand_types
|
self._demand_types = demand_types
|
||||||
self._distribution_systems = distribution_systems
|
self._distribution_systems = distribution_systems
|
||||||
self._emission_systems = emission_systems
|
|
||||||
self._generation_systems = generation_systems
|
self._generation_systems = generation_systems
|
||||||
self._energy_storage_systems = energy_storage_systems
|
|
||||||
self._configuration_schema = configuration_schema
|
self._configuration_schema = configuration_schema
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -96,7 +92,8 @@ class System:
|
|||||||
'name': self.name,
|
'name': self.name,
|
||||||
'demand types': self.demand_types,
|
'demand types': self.demand_types,
|
||||||
'generation system(s)': _generation_systems,
|
'generation system(s)': _generation_systems,
|
||||||
'distribution system(s)': _distribution_systems
|
'distribution system(s)': _distribution_systems,
|
||||||
|
'configuration schema path': self.configuration_schema
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return content
|
return content
|
||||||
|
@ -30,7 +30,7 @@ class MontrealCustomCatalog(Catalog):
|
|||||||
self._archetypes = xmltodict.parse(xml.read(), force_list=('system', 'system_cluster', 'equipment',
|
self._archetypes = xmltodict.parse(xml.read(), force_list=('system', 'system_cluster', 'equipment',
|
||||||
'demand', 'system_id'))
|
'demand', 'system_id'))
|
||||||
|
|
||||||
self._catalog_generation_equipments, self._catalog_storage_equipments = self._load_generation_and_storage_equipments()
|
self._catalog_generation_equipments = self._load_generation_equipments()
|
||||||
self._catalog_distribution_equipments = self._load_distribution_equipments()
|
self._catalog_distribution_equipments = self._load_distribution_equipments()
|
||||||
self._catalog_emission_equipments = self._load_emission_equipments()
|
self._catalog_emission_equipments = self._load_emission_equipments()
|
||||||
self._catalog_systems = self._load_systems()
|
self._catalog_systems = self._load_systems()
|
||||||
@ -41,7 +41,7 @@ class MontrealCustomCatalog(Catalog):
|
|||||||
self._catalog_generation_equipments,
|
self._catalog_generation_equipments,
|
||||||
self._catalog_distribution_equipments)
|
self._catalog_distribution_equipments)
|
||||||
|
|
||||||
def _load_generation_and_storage_equipments(self):
|
def _load_generation_equipments(self):
|
||||||
_equipments = []
|
_equipments = []
|
||||||
_storages = []
|
_storages = []
|
||||||
equipments = self._archetypes['catalog']['generation_equipments']['equipment']
|
equipments = self._archetypes['catalog']['generation_equipments']['equipment']
|
||||||
@ -73,16 +73,16 @@ class MontrealCustomCatalog(Catalog):
|
|||||||
cooling_efficiency=cooling_efficiency,
|
cooling_efficiency=cooling_efficiency,
|
||||||
electricity_efficiency=electricity_efficiency,
|
electricity_efficiency=electricity_efficiency,
|
||||||
)
|
)
|
||||||
_equipments.append(generation_system)
|
|
||||||
storage = literal_eval(equipment['storage'].capitalize())
|
storage = literal_eval(equipment['storage'].capitalize())
|
||||||
if storage:
|
if storage:
|
||||||
if equipment_type == 'electricity generator':
|
if equipment_type == 'electricity generator':
|
||||||
storage_system = ElectricalStorageSystem(equipment_id)
|
storage_system = ElectricalStorageSystem(equipment_id)
|
||||||
else:
|
else:
|
||||||
storage_system = ThermalStorageSystem(equipment_id)
|
storage_system = ThermalStorageSystem(equipment_id)
|
||||||
_storages.append(storage_system)
|
generation_system.energy_storage_systems = [storage_system]
|
||||||
|
_equipments.append(generation_system)
|
||||||
|
|
||||||
return _equipments, _storages
|
return _equipments
|
||||||
|
|
||||||
def _load_distribution_equipments(self):
|
def _load_distribution_equipments(self):
|
||||||
_equipments = []
|
_equipments = []
|
||||||
@ -143,10 +143,6 @@ class MontrealCustomCatalog(Catalog):
|
|||||||
for equipment_archetype in self._catalog_generation_equipments:
|
for equipment_archetype in self._catalog_generation_equipments:
|
||||||
if int(equipment_archetype.id) == int(generation_equipment):
|
if int(equipment_archetype.id) == int(generation_equipment):
|
||||||
_generation_equipments = [equipment_archetype]
|
_generation_equipments = [equipment_archetype]
|
||||||
_storage_equipments = None
|
|
||||||
for equipment_archetype in self._catalog_storage_equipments:
|
|
||||||
if int(equipment_archetype.id) == int(generation_equipment):
|
|
||||||
_storage_equipments = [equipment_archetype]
|
|
||||||
distribution_equipment = system['equipments']['distribution_id']
|
distribution_equipment = system['equipments']['distribution_id']
|
||||||
_distribution_equipments = None
|
_distribution_equipments = None
|
||||||
for equipment_archetype in self._catalog_distribution_equipments:
|
for equipment_archetype in self._catalog_distribution_equipments:
|
||||||
@ -158,13 +154,18 @@ class MontrealCustomCatalog(Catalog):
|
|||||||
if int(equipment_archetype.id) == int(emission_equipment):
|
if int(equipment_archetype.id) == int(emission_equipment):
|
||||||
_emission_equipments = [equipment_archetype]
|
_emission_equipments = [equipment_archetype]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_catalog_systems.append(System(system_id,
|
_catalog_systems.append(System(system_id,
|
||||||
demands,
|
demands,
|
||||||
name=name,
|
name=name,
|
||||||
generation_systems=_generation_equipments,
|
generation_systems=_generation_equipments,
|
||||||
distribution_systems=_distribution_equipments,
|
distribution_systems=_distribution_equipments))
|
||||||
emission_systems=_emission_equipments,
|
|
||||||
energy_storage_systems=_storage_equipments))
|
|
||||||
return _catalog_systems
|
return _catalog_systems
|
||||||
|
|
||||||
def _load_archetypes(self):
|
def _load_archetypes(self):
|
||||||
|
@ -31,8 +31,6 @@ class TestSystemsCatalog(TestCase):
|
|||||||
for value in catalog_categories[category]:
|
for value in catalog_categories[category]:
|
||||||
catalog.get_entry(value)
|
catalog.get_entry(value)
|
||||||
|
|
||||||
print(catalog.entries())
|
|
||||||
|
|
||||||
with self.assertRaises(IndexError):
|
with self.assertRaises(IndexError):
|
||||||
catalog.get_entry('unknown')
|
catalog.get_entry('unknown')
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user