Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • master
1 result

Target

Select target project
No results found
Select Git revision
  • master
1 result
Show changes

Commits on Source 3

1 file
+ 139
0
Compare changes
  • Side-by-side
  • Inline

Files

+139 −0
Original line number Diff line number Diff line
# 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