Skip to content
Snippets Groups Projects
test_data_buildings_dk.py 5.04 KiB
Newer Older
  • Learn to ignore specific revisions
  • # 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
        #             ]
        #         )
    
    # *****************************************************************************
    # *****************************************************************************