Пример #1
0
def mock_model_with_conversion():
    model = Mock()
    model.name = 'test_model'
    model.parameters = ParameterList()
    model.parameters.add_parameter({
        'name': 'smart_meter_savings',
        'description': 'The savings from smart meters',
        'absolute_range': (0, 100),
        'suggested_range': (3, 10),
        'default_value': 3,
        'units': '%',
        'parent': None
    })
    regions = Mock()
    regions.name = 'test_regions'
    intervals = Mock()
    intervals.name = 'test_intervals'
    model.inputs = MetadataSet(
        [Metadata('test', regions, intervals, 'liters')])
    source_model = Mock()
    source_model.name = 'test_source'
    model.deps = {
        'test':
        Dependency(source_model,
                   Metadata('test_output', regions, intervals, 'milliliters'),
                   Metadata('test', regions, intervals, 'liters'))
    }
    return model
Пример #2
0
 def test_access_region_names_with_register(self, region_set, interval_set):
     """Metadata should expose region names when a register is available
     """
     rreg = region_set
     metadata = Metadata("total_lane_kilometres", region_set, interval_set, "unparseable")
     metadata.region_register = rreg
     assert metadata.get_region_names() == ["a", "b"]
Пример #3
0
    def test_metadata_order(self, interval_set, region_set):
        """Expect list of Metadata to be sorted by name
        """
        metadata_list = [
            {
                "name": "total_lane_kilometres",
                "spatial_resolution": region_set,
                "temporal_resolution": interval_set,
                "units": "kilometer"
            },
            {
                "name": "heat_demand",
                "spatial_resolution": region_set,
                "temporal_resolution": interval_set,
                "units": "kilowatt"
            },
        ]
        metadata_set = MetadataSet(metadata_list)

        assert len(metadata_set) == 2
        assert metadata_set.metadata == [
            Metadata("heat_demand", region_set, interval_set, "kilowatt"),
            Metadata("total_lane_kilometres", region_set, interval_set,
                     "kilometer")
        ]
Пример #4
0
 def test_access_interval_names(self, interval_set, region_set):
     """Metadata should expose interval names when a register is available
     """
     metadata = Metadata("total_lane_kilometres", region_set, interval_set,
                         "unparseable")
     assert metadata.get_interval_names() == [
         "winter", "spring", "summer", "autumn"
     ]
Пример #5
0
 def test_metadata_equality(self):
     """Metadata with same attributes should compare equal
     """
     one_m = Metadata("total_lane_kilometres", region_set, interval_set,
                      "kilometer")
     other = Metadata("total_lane_kilometres", region_set, interval_set,
                      "kilometer")
     assert one_m == other
Пример #6
0
 def test_serialise_metadata(self, interval_set, region_set):
     """Create Metadata to hold name, spatial and temporal resolution, and units
     """
     metadata = Metadata("total_lane_kilometres", region_set, interval_set,
                         "kilometer")
     actual = metadata.as_dict()
     expected = {
         'name': 'total_lane_kilometres',
         'spatial_resolution': 'half_squares',
         'temporal_resolution': 'seasons',
         'units': 'kilometer'
     }
     assert actual == expected
Пример #7
0
    def test_hanging_inputs(self, get_sector_model):
        """
        sos_model_high
            sos_model_lo
               -> em

        """
        SectorModel = get_sector_model
        energy_model = SectorModel('energy_sector_model')
        input_metadata = {
            'name': 'electricity_demand_input',
            'spatial_resolution': Mock(),
            'temporal_resolution': Mock(),
            'units': 'unit'
        }

        energy_model._inputs = MetadataSet([input_metadata])

        sos_model_lo = SosModel('lower')
        sos_model_lo.add_model(energy_model)

        expected = Metadata(input_metadata['name'],
                            input_metadata['spatial_resolution'],
                            input_metadata['temporal_resolution'],
                            input_metadata['units'])

        assert energy_model.free_inputs.names == ['electricity_demand_input']
        assert sos_model_lo.free_inputs.names == ['electricity_demand_input']

        sos_model_high = SosModel('higher')
        sos_model_high.add_model(sos_model_lo)
        actual = sos_model_high.free_inputs['electricity_demand_input']

        assert actual == expected
Пример #8
0
    def test_create_metadata_set(self, interval_set, region_set):
        """Create MetadataSet to hold a list of Metadata
        """
        metadata_list = [{
            "name": "heat_demand",
            "spatial_resolution": region_set,
            "temporal_resolution": interval_set,
            "units": "kilowatt"
        }]
        metadata_set = MetadataSet(metadata_list)

        # direct access to single metadata
        metadata = metadata_set["heat_demand"]
        assert metadata.name == "heat_demand"
        assert metadata.spatial_resolution == region_set
        assert metadata.temporal_resolution == interval_set
        assert metadata.units == "kilowatt"

        # direct access to list of contained metadata
        assert len(metadata_set) == 1
        assert metadata_set.metadata == [
            Metadata("heat_demand", region_set, interval_set, "kilowatt")
        ]

        # access single metadata attribute
        assert metadata_set.get_spatial_res("heat_demand") == region_set
        assert metadata_set.get_temporal_res("heat_demand") == interval_set
        assert metadata_set.get_units("heat_demand") == "kilowatt"

        # access list of metadata attributes
        assert metadata_set.names == ["heat_demand"]
        assert metadata_set.spatial_resolutions == [region_set]
        assert metadata_set.temporal_resolutions == [interval_set]
        assert metadata_set.units == ["kilowatt"]
Пример #9
0
    def test_one_free_input(self, get_sector_model):
        SectorModel = get_sector_model
        energy_model = SectorModel('energy_sector_model')
        expected = Metadata('electricity_demand_input', Mock(), Mock(), 'unit')
        energy_model._inputs = MetadataSet([expected])

        actual = energy_model.free_inputs['electricity_demand_input']
        assert actual == expected
Пример #10
0
 def test_create_metadata(self, interval_set, region_set):
     """Create Metadata to hold name, spatial and temporal resolution, and units
     """
     metadata = Metadata("total_lane_kilometres", region_set, interval_set,
                         "kilometer")
     assert metadata.name == "total_lane_kilometres"
     assert metadata.spatial_resolution == region_set
     assert metadata.temporal_resolution == interval_set
     assert metadata.units == "kilometer"
Пример #11
0
    def test_add_meta_object(self):
        metadata = Metadata("total_lane_kilometres", region_set, interval_set,
                            "kilometer")
        metadata_set = MetadataSet([])
        metadata_set.add_metadata_object(metadata)

        # access list of metadata attributes
        assert metadata_set.names == ["total_lane_kilometres"]
        assert metadata_set.spatial_resolutions == [region_set]
        assert metadata_set.temporal_resolutions == [interval_set]
        assert metadata_set.units == ["kilometer"]
Пример #12
0
    def test_add_input(self):

        model = EmptySectorModel('test_model')
        model.add_input('input_name', [], [], 'units')

        inputs = model.model_inputs

        assert inputs.names == ['input_name']
        assert inputs.units == ['units']

        assert inputs['input_name'] == Metadata('input_name', [], [], 'units')
Пример #13
0
    def test_iterate_over_populated(self):
        metadata_list = [
            {
                "name": "total_lane_kilometres",
                "spatial_resolution": region_set,
                "temporal_resolution": interval_set,
                "units": "kilometers"
            }
        ]
        metadata_set = MetadataSet(metadata_list)

        actual = metadata_set.metadata
        assert actual == [Metadata("total_lane_kilometres",
                                   region_set,
                                   interval_set,
                                   "kilometers")]

        assert [x for x in metadata_set] == [Metadata("total_lane_kilometres",
                                                      region_set,
                                                      interval_set,
                                                      "kilometers")]
Пример #14
0
    def test_iterate_over_populated(self):
        """Should initialise with list of metadata if provided
        """
        metadata_list = [{
            "name": "total_lane_kilometres",
            "spatial_resolution": region_set,
            "temporal_resolution": interval_set,
            "units": "kilometers"
        }]
        metadata_set = MetadataSet(metadata_list)
        expected_metadata = Metadata("total_lane_kilometres", region_set,
                                     interval_set, "kilometers")

        actual = metadata_set.metadata
        assert actual == [expected_metadata]

        actual = [(k, v) for k, v in metadata_set.items()]
        assert actual == [("total_lane_kilometres", expected_metadata)]
Пример #15
0
 def test_unit_normalisation(self):
     """Expect units to be set to full names from abbreviation
     """
     metadata = Metadata("total_lane_kilometres", region_set, interval_set,
                         "km")
     assert metadata.units == "kilometer"
Пример #16
0
 def test_unit_unparseable(self):
     """Expect unrecognised units to be passed through unchanged
     """
     metadata = Metadata("total_lane_kilometres", region_set, interval_set,
                         "unparseable")
     assert metadata.units == "unparseable"