diff --git a/tests/test_data_buildings_dk.py b/tests/test_data_buildings_dk.py new file mode 100644 index 0000000000000000000000000000000000000000..280c990245eaca8f2b3766e9c88d911eccc26168 --- /dev/null +++ b/tests/test_data_buildings_dk.py @@ -0,0 +1,139 @@ +# imports + +# standard + +import math +import random +from numbers import Real +from statistics import mean + +import geopandas as gpd + +# ***************************************************************************** +# ***************************************************************************** + +# local, internal +from src.topupopt.data.gis.utils import read_gdf_file +from src.topupopt.data.buildings.dk import heat +from src.topupopt.data.buildings.dk import bbr + +# ***************************************************************************** +# ***************************************************************************** + +class TestDataBuildingsDK: + + # ************************************************************************* + # ************************************************************************* + + def test_demand_dict(self): + + # heat_demand_dict_by_building_entrance + + osm_data_filename = 'tests/data/gdf_osm.gpkg' + building_data_filename = 'tests/data/gdf_buildings.gpkg' + bdg_gdf_container_columns = ('ejerskaber','koordinater','bygningspunkt') + number_time_intervals = 12 + min_to_max_ratio = 0.1 + intraperiod_time_interval_duration = [ + 30*24*3600 + for i in range(number_time_intervals) + ] + annual_heat_demand_scenario = 1000 + total_area = 1000 + air_temperature_scenario = [10 for i in range(number_time_intervals)] + + gdf_osm = gpd.read_file(osm_data_filename) + gdf_osm.set_index(['element_type', 'osmid'], drop=True, inplace=True) + + gdf_buildings = read_gdf_file( + filename=building_data_filename, + packed_columns=bdg_gdf_container_columns, + index='index' + ) + + # order by state + + heat_demand_dict = heat.heat_demand_dict_by_building_entrance( + gdf_osm=gdf_osm, + gdf_buildings=gdf_buildings, + number_intervals=number_time_intervals, + time_interval_durations=intraperiod_time_interval_duration, + bdg_min_to_max_ratio={ + index: min_to_max_ratio for index in gdf_buildings.index + }, + bdg_specific_demand={ + index: annual_heat_demand_scenario/total_area + for index in gdf_buildings.index + }, + bdg_demand_phase_shift=None, + avg_state=air_temperature_scenario, + state_correlates_with_output=False + ) + assert type(heat_demand_dict) == dict + assert len(heat_demand_dict) == len(gdf_osm) + + # no state preference, use phase shift + + heat_demand_dict2 = heat.heat_demand_dict_by_building_entrance( + gdf_osm=gdf_osm, + gdf_buildings=gdf_buildings, + number_intervals=number_time_intervals, + time_interval_durations=intraperiod_time_interval_duration, + bdg_min_to_max_ratio={ + index: min_to_max_ratio for index in gdf_buildings.index + }, + bdg_specific_demand={ + index: annual_heat_demand_scenario/total_area + for index in gdf_buildings.index + }, + bdg_demand_phase_shift={ + index: 2*math.pi*random.random() for index in gdf_buildings.index + }, + avg_state=None, + state_correlates_with_output=False + ) + assert type(heat_demand_dict2) == dict + assert len(heat_demand_dict2) == len(gdf_osm) + + # total heating area + + heating_area = heat.total_heating_area(gdf_osm, gdf_buildings) + assert isinstance(heating_area, Real) + assert math.isclose(heating_area, 100882, abs_tol=1e-3) + + # ************************************************************************* + # ************************************************************************* + + # def test_bbr(self): + + # # test get_bbr_building_data_geodataframe + + # osm_data_filename = 'tests/data/gdf_osm.gpkg' + + # gdf_osm = gpd.read_file(osm_data_filename) + # gdf_osm.set_index(['element_type', 'osmid'], drop=True, inplace=True) + + # error_raised = False + # try: + # gdf_buildings, drop_list = bbr.get_bbr_building_data_geodataframe( + # list(gdf_osm[heat.label_osm_entrance_id]), + # None, + # None, + # None) + # except UnboundLocalError: + # error_raised = True + # assert error_raised + + # # drop the rows with no data + # gdf_osm = gdf_osm.drop( + # index=[ + # (gdf_osm[ + # gdf_osm[ + # heat.label_osm_entrance_id + # ]==bdg_entrance_id].index)[0] + # for bdg_entrance_id in drop_list + # ] + # ) + +# ***************************************************************************** +# ***************************************************************************** \ No newline at end of file