Merge remote-tracking branch 'origin/master'

This commit is contained in:
Guille 2020-12-21 09:43:03 -05:00
commit 15f6312992
6 changed files with 35 additions and 35 deletions

View File

@ -1,12 +1,12 @@
""" """
Geometry helper Schedules helper
SPDX - License - Identifier: LGPL - 3.0 - or -later SPDX - License - Identifier: LGPL - 3.0 - or -later
Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca
""" """
class OccupancyHelper: class SchedulesHelper:
occupancy_pluto_function = { comnet_pluto_function = {
'C1': 'C-12 Residential', 'C1': 'C-12 Residential',
'C5': 'C-12 Residential', 'C5': 'C-12 Residential',
'D3': 'C-12 Residential', 'D3': 'C-12 Residential',
@ -17,18 +17,18 @@ class OccupancyHelper:
'U0': 'C-10 Warehouse', 'U0': 'C-10 Warehouse',
'W4': 'C-9 School', 'W4': 'C-9 School',
} }
occupancy_function = { comnet_function = {
'residential': 'C-12 Residential' 'residential': 'C-12 Residential'
} }
@staticmethod @staticmethod
def pluto_occupancy_function(building_pluto_function): def comnet_pluto_schedules_function(building_pluto_function):
""" """
Get nrel function from the given pluto function Get Comnet function from the given pluto function
:param building_pluto_function: str :param building_pluto_function: str
:return: str :return: str
""" """
try: try:
return OccupancyHelper.occupancy_pluto_function[building_pluto_function] return SchedulesHelper.comnet_pluto_function[building_pluto_function]
except KeyError: except KeyError:
return OccupancyHelper.occupancy_function[building_pluto_function] return SchedulesHelper.comnet_function[building_pluto_function]

View File

@ -1,25 +1,24 @@
""" """
PhysicsFactory retrieve the specific physics module for the given region Schedules retrieve the specific usage schedules module for the given standard
SPDX - License - Identifier: LGPL - 3.0 - or -later SPDX - License - Identifier: LGPL - 3.0 - or -later
Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca
contributors Pilar Monsalvete pilar_monsalvete@yahoo.es contributors Pilar Monsalvete pilar_monsalvete@yahoo.es
""" """
import pandas as pd import pandas as pd
from factories.occupancy_feeders.helpers.occupancy_helper import OccupancyHelper from factories.occupancy_feeders.helpers.schedules_helper import SchedulesHelper
from enum import Enum
class DemoOccupancyParameters: class ComnetSchedules:
def __init__(self, city, base_path): def __init__(self, city, base_path):
self._city = city self._city = city
self._demo_schedules_path = base_path / 'demo_schedules.xlsx' self._comnet_schedules_path = base_path / 'comnet_archetypes.xlsx'
xls = pd.ExcelFile(self._demo_schedules_path) xls = pd.ExcelFile(self._comnet_schedules_path)
# todo: review for more than one usage_zones per building # todo: review for more than one usage_zones per building
for building in city.buildings: for building in city.buildings:
schedules = dict() schedules = dict()
occupancy = pd.read_excel(xls, sheet_name=OccupancyHelper.pluto_occupancy_function(building.function), usage_schedules = pd.read_excel(xls, sheet_name=SchedulesHelper.comnet_pluto_schedules_function(building.function),
skiprows=[0, 1, 2, 3], nrows=39, usecols="A:AA") skiprows=[0, 1, 2, 3], nrows=39, usecols="A:AA")
# todo: should we save the data type? How? # todo: should we save the data type? How?
number_of_schedule_types = 13 number_of_schedule_types = 13
schedules_per_schedule_type = 3 schedules_per_schedule_type = 3
@ -29,7 +28,7 @@ class DemoOccupancyParameters:
columns_names = [] columns_names = []
name = '' name = ''
for schedule_day in range(0, schedules_per_schedule_type): for schedule_day in range(0, schedules_per_schedule_type):
row_cells = occupancy.iloc[schedules_per_schedule_type*schedule_types + schedule_day] row_cells = usage_schedules.iloc[schedules_per_schedule_type*schedule_types + schedule_day]
if schedule_day == day_types['week_day']: if schedule_day == day_types['week_day']:
name = row_cells[0] name = row_cells[0]
columns_names.append(row_cells[2]) columns_names.append(row_cells[2])

View File

@ -1,16 +1,16 @@
""" """
PhysicsFactory retrieve the specific physics module for the given region SchedulesFactory retrieve the specific schedules module for the given standard
SPDX - License - Identifier: LGPL - 3.0 - or -later SPDX - License - Identifier: LGPL - 3.0 - or -later
Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca
""" """
from pathlib import Path from pathlib import Path
from factories.occupancy_feeders.demo_occupancy_parameters import DemoOccupancyParameters from factories.occupancy_feeders.usage_schedules import ComnetSchedules
class OccupancyFactory: class SchedulesFactory:
""" """
PhysicsFactor class SchedulesFactor class
""" """
def __init__(self, handler, city, base_path=Path(Path(__file__).parent.parent / 'data/occupancy')): def __init__(self, handler, city, base_path=Path(Path(__file__).parent.parent / 'data/occupancy')):
self._handler = '_' + handler.lower().replace(' ', '_') self._handler = '_' + handler.lower().replace(' ', '_')
@ -18,12 +18,12 @@ class OccupancyFactory:
self._base_path = base_path self._base_path = base_path
self.factory() self.factory()
def _demo(self): def _comnet(self):
DemoOccupancyParameters(self._city, self._base_path) ComnetSchedules(self._city, self._base_path)
def factory(self): def factory(self):
""" """
Enrich the city with the physics information Enrich the city with the schedules information
:return: None :return: None
""" """
getattr(self, self._handler, lambda: None)() getattr(self, self._handler, lambda: None)()

View File

@ -8,7 +8,7 @@ from unittest import TestCase
from factories.geometry_factory import GeometryFactory from factories.geometry_factory import GeometryFactory
from factories.physics_factory import PhysicsFactory from factories.physics_factory import PhysicsFactory
from factories.usage_factory import UsageFactory from factories.usage_factory import UsageFactory
from factories.occupancy_factory import OccupancyFactory from factories.schedules_factory import SchedulesFactory
from helpers.idf_helper import IdfHelper from helpers.idf_helper import IdfHelper
import os import os
import glob import glob
@ -35,7 +35,7 @@ class TestIdf(TestCase):
PhysicsFactory('us_new_york', self._city_gml) PhysicsFactory('us_new_york', self._city_gml)
UsageFactory('us_new_york', self._city_gml) UsageFactory('us_new_york', self._city_gml)
UsageFactory('us_new_york', self._city_gml) UsageFactory('us_new_york', self._city_gml)
OccupancyFactory('demo', self._city_gml) SchedulesFactory('demo', self._city_gml)
return self._city_gml return self._city_gml
def test_idf_blocks(self): def test_idf_blocks(self):

View File

@ -1,21 +1,20 @@
""" """
TestOccupancyFactory test and validate the city model structure occupancy parameters TestSchedulesFactory test and validate the city model structure schedules
SPDX - License - Identifier: LGPL - 3.0 - or -later SPDX - License - Identifier: LGPL - 3.0 - or -later
Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca Copyright © 2020 Project Author Guille Gutierrez guillermo.gutierrezmorote@concordia.ca
Contributors Pilar Monsalvete pilar_monsalvete@yahoo.es
""" """
from pathlib import Path from pathlib import Path
from unittest import TestCase from unittest import TestCase
from factories.geometry_factory import GeometryFactory from factories.geometry_factory import GeometryFactory
from factories.usage_factory import UsageFactory from factories.usage_factory import UsageFactory
from factories.occupancy_factory import OccupancyFactory from factories.schedules_factory import SchedulesFactory
from city_model_structure.attributes.lighting import Lighting
from city_model_structure.attributes.domestic_hot_water import DomesticHotWater
class TestOccupancyFactory(TestCase): class TestSchedulesFactory(TestCase):
""" """
TestOccupancyFactory TestCase TestSchedulesFactory TestCase
""" """
def setUp(self) -> None: def setUp(self) -> None:
@ -30,7 +29,8 @@ class TestOccupancyFactory(TestCase):
def _handler(self): def _handler(self):
if self._city_gml_with_usage.name == 'New York': if self._city_gml_with_usage.name == 'New York':
handler = '{0}_{1}' handler = '{0}_{1}'
return handler.format(self._city_gml_with_usage.country_code, self._city_gml_with_usage.name.lower().replace(' ', '_')) return handler.format(self._city_gml_with_usage.country_code,
self._city_gml_with_usage.name.lower().replace(' ', '_'))
return self._city_gml_with_usage.country_code return self._city_gml_with_usage.country_code
def _get_citygml_with_usage(self): def _get_citygml_with_usage(self):
@ -42,9 +42,10 @@ class TestOccupancyFactory(TestCase):
self.assertIsNotNone(self._city_gml_with_usage, 'city with usage is none') self.assertIsNotNone(self._city_gml_with_usage, 'city with usage is none')
return self._city_gml_with_usage return self._city_gml_with_usage
def test_demo(self): def test_comnet_archetypes(self):
city = self._get_citygml_with_usage() city = self._get_citygml_with_usage()
OccupancyFactory('demo', city) occupancy_handler = 'comnet'
SchedulesFactory(occupancy_handler, city)
for building in city.buildings: for building in city.buildings:
for usage_zone in building.usage_zones: for usage_zone in building.usage_zones:
self.assertTrue(usage_zone.schedules) self.assertTrue(usage_zone.schedules)