コード例 #1
0
ファイル: test_core_time.py プロジェクト: suvayu/calliope
    def test_invalid_csv_columns(self):
        override = {
            "locations": {
                "2.techs": {
                    "test_supply_elec": None,
                    "test_demand_elec": None
                },
                "3.techs": {
                    "test_supply_elec": None,
                    "test_demand_elec": None
                },
            },
            "links": {
                "0,1": {
                    "exists": False
                },
                "2,3.techs": {
                    "test_transmission_elec": None
                },
            },
        }
        with pytest.raises(exceptions.ModelError) as excinfo:
            build_test_model(override_dict=override, scenario="one_day")

        assert check_error_or_warning(
            excinfo,
            [
                "column `2` not found in file `demand_elec.csv`, but was requested by loc::tech `2::test_demand_elec`.",
                "column `3` not found in file `demand_elec.csv`, but was requested by loc::tech `3::test_demand_elec`.",
            ],
        )
コード例 #2
0
    def test_predefined_clusters(self):
        override = {
            'model.subset_time': ['2005-01-01', '2005-01-04'],
            'model.time': {
                'function': 'apply_clustering',
                'function_options': {
                    'clustering_func': 'file=clusters.csv:0', 'how': 'mean'
                }
            }
        }

        model = build_test_model(override, scenario='simple_supply')

        assert np.array_equal(model._model_data.clusters.to_pandas().unique(), [0, 1, 2])

        override2 = {**override, **{
            'model.time.function_options.clustering_func': 'file=cluster_days.csv:1'
        }}

        model = build_test_model(override2, scenario='simple_supply')

        assert np.array_equal(model._model_data.clusters.to_pandas().unique(), [0, 1, 2])

        override3 = {**override, **{
            'model.time.function_options.clustering_func': 'file=cluster_days.csv:1',
            'model.time.function_options.how': 'closest'
        }}

        model = build_test_model(override3, scenario='simple_supply')

        assert np.array_equal(model._model_data.clusters.to_pandas().unique(), [0])
コード例 #3
0
    def test_invalid_csv_columns(self):
        override = {
            'locations': {
                '2.techs': {
                    'test_supply_elec': None,
                    'test_demand_elec': None
                },
                '3.techs': {
                    'test_supply_elec': None,
                    'test_demand_elec': None
                }
            },
            'links': {
                '0,1': {
                    'exists': False
                },
                '2,3.techs': {
                    'test_transmission_elec': None
                }
            }
        }
        with pytest.raises(exceptions.ModelError) as excinfo:
            build_test_model(override_dict=override, scenario='one_day')

        assert check_error_or_warning(excinfo, [
            'column `2` not found in file `demand_elec.csv`, but was requested by loc::tech `2::test_demand_elec`.',
            'column `3` not found in file `demand_elec.csv`, but was requested by loc::tech `3::test_demand_elec`.'
        ])
コード例 #4
0
ファイル: test_core_time.py プロジェクト: knut0815/calliope
    def test_15min_resampling_to_6h(self):
        # The data is identical for '2005-01-01' and '2005-01-03' timesteps,
        # it is only different for '2005-01-02'
        override = {
            'techs.test_demand_elec.constraints.resource':
            'file=demand_elec_15mins.csv',
            'model.subset_time': None,
            'model.time': {
                'function': 'resample',
                'function_options': {
                    'resolution': '6H'
                }
            }
        }

        model = build_test_model(override, scenario='simple_supply,one_day')
        data = model._model_data

        dtindex = pd.DatetimeIndex([
            '2005-01-01 00:00:00', '2005-01-01 06:00:00',
            '2005-01-01 12:00:00', '2005-01-01 18:00:00',
            '2005-01-02 00:00:00', '2005-01-02 06:00:00',
            '2005-01-02 12:00:00', '2005-01-02 18:00:00',
            '2005-01-03 00:00:00', '2005-01-03 06:00:00',
            '2005-01-03 12:00:00', '2005-01-03 18:00:00'
        ])

        assert dtindex.equals(data.timesteps.to_index())
コード例 #5
0
    def test_15min_to_2h_resampling_to_2h(self):
        """
        CSV has daily timeseries varying from 15min to 2h resolution, resample all to 2h
        """
        override = {
            'techs.test_demand_elec.constraints.resource': 'file=demand_elec_15T_to_2h.csv',
            'model.subset_time': None,
            'model.time': {
                'function': 'resample', 'function_options': {'resolution': '2H'}
            }
        }

        model = build_test_model(override, scenario='simple_supply,one_day')
        data = model._model_data

        dtindex = pd.DatetimeIndex([
            '2005-01-01 00:00:00', '2005-01-01 02:00:00', '2005-01-01 04:00:00',
            '2005-01-01 06:00:00', '2005-01-01 08:00:00', '2005-01-01 10:00:00',
            '2005-01-01 12:00:00', '2005-01-01 14:00:00', '2005-01-01 16:00:00',
            '2005-01-01 18:00:00', '2005-01-01 20:00:00', '2005-01-01 22:00:00',
            '2005-01-02 00:00:00', '2005-01-02 02:00:00', '2005-01-02 04:00:00',
            '2005-01-02 06:00:00', '2005-01-02 08:00:00', '2005-01-02 10:00:00',
            '2005-01-02 12:00:00', '2005-01-02 14:00:00', '2005-01-02 16:00:00',
            '2005-01-02 18:00:00', '2005-01-02 20:00:00', '2005-01-02 22:00:00',
            '2005-01-03 00:00:00', '2005-01-03 02:00:00', '2005-01-03 04:00:00',
            '2005-01-03 06:00:00', '2005-01-03 08:00:00', '2005-01-03 10:00:00',
            '2005-01-03 12:00:00', '2005-01-03 14:00:00', '2005-01-03 16:00:00',
            '2005-01-03 18:00:00', '2005-01-03 20:00:00', '2005-01-03 22:00:00'
        ])

        assert dtindex.equals(data.timesteps.to_index())
コード例 #6
0
    def test_15min_to_2h_masking_1D(self):
        # The data is identical for '2005-01-01' and '2005-01-03' timesteps,
        # it is only different for '2005-01-02'
        override = {
            'techs.test_demand_elec.constraints.resource': 'file=demand_elec_15T_to_2h.csv',
            'model.subset_time': None
        }

        model = build_test_model(override, scenario='simple_supply,one_day')
        data = model._model_data

        mask = masks.extreme(
            data, 'test_demand_elec', var='resource', how='max', length='1D'
        )

        dtindex = pd.DatetimeIndex([
            '2005-01-02 00:00:00', '2005-01-02 00:15:00', '2005-01-02 00:30:00',
            '2005-01-02 00:45:00', '2005-01-02 01:00:00', '2005-01-02 01:30:00',
            '2005-01-02 02:00:00', '2005-01-02 02:30:00', '2005-01-02 03:00:00',
            '2005-01-02 04:00:00', '2005-01-02 05:00:00', '2005-01-02 06:00:00',
            '2005-01-02 08:00:00', '2005-01-02 10:00:00', '2005-01-02 12:00:00',
            '2005-01-02 14:00:00', '2005-01-02 16:00:00', '2005-01-02 17:00:00',
            '2005-01-02 18:00:00', '2005-01-02 20:00:00', '2005-01-02 22:00:00'
        ])

        assert dtindex.equals(mask)
コード例 #7
0
ファイル: test_core_time.py プロジェクト: suvayu/calliope
    def test_15min_resampling_to_6h(self):
        # The data is identical for '2005-01-01' and '2005-01-03' timesteps,
        # it is only different for '2005-01-02'
        override = {
            "techs.test_demand_elec.constraints.resource":
            "file=demand_elec_15mins.csv",
            "model.subset_time": None,
            "model.time": {
                "function": "resample",
                "function_options": {
                    "resolution": "6H"
                },
            },
        }

        model = build_test_model(override, scenario="simple_supply,one_day")
        data = model._model_data

        dtindex = pd.DatetimeIndex([
            "2005-01-01 00:00:00",
            "2005-01-01 06:00:00",
            "2005-01-01 12:00:00",
            "2005-01-01 18:00:00",
            "2005-01-02 00:00:00",
            "2005-01-02 06:00:00",
            "2005-01-02 12:00:00",
            "2005-01-02 18:00:00",
            "2005-01-03 00:00:00",
            "2005-01-03 06:00:00",
            "2005-01-03 12:00:00",
            "2005-01-03 18:00:00",
        ])

        assert dtindex.equals(data.timesteps.to_index())
コード例 #8
0
ファイル: test_core_time.py プロジェクト: suvayu/calliope
    def test_15min_to_2h_resampling_to_2h(self):
        """
        CSV has daily timeseries varying from 15min to 2h resolution, resample all to 2h
        """
        override = {
            "techs.test_demand_elec.constraints.resource":
            "file=demand_elec_15T_to_2h.csv",
            "model.subset_time": None,
            "model.time": {
                "function": "resample",
                "function_options": {
                    "resolution": "2H"
                },
            },
        }

        model = build_test_model(override, scenario="simple_supply,one_day")
        data = model._model_data

        dtindex = pd.DatetimeIndex([
            "2005-01-01 00:00:00",
            "2005-01-01 02:00:00",
            "2005-01-01 04:00:00",
            "2005-01-01 06:00:00",
            "2005-01-01 08:00:00",
            "2005-01-01 10:00:00",
            "2005-01-01 12:00:00",
            "2005-01-01 14:00:00",
            "2005-01-01 16:00:00",
            "2005-01-01 18:00:00",
            "2005-01-01 20:00:00",
            "2005-01-01 22:00:00",
            "2005-01-02 00:00:00",
            "2005-01-02 02:00:00",
            "2005-01-02 04:00:00",
            "2005-01-02 06:00:00",
            "2005-01-02 08:00:00",
            "2005-01-02 10:00:00",
            "2005-01-02 12:00:00",
            "2005-01-02 14:00:00",
            "2005-01-02 16:00:00",
            "2005-01-02 18:00:00",
            "2005-01-02 20:00:00",
            "2005-01-02 22:00:00",
            "2005-01-03 00:00:00",
            "2005-01-03 02:00:00",
            "2005-01-03 04:00:00",
            "2005-01-03 06:00:00",
            "2005-01-03 08:00:00",
            "2005-01-03 10:00:00",
            "2005-01-03 12:00:00",
            "2005-01-03 14:00:00",
            "2005-01-03 16:00:00",
            "2005-01-03 18:00:00",
            "2005-01-03 20:00:00",
            "2005-01-03 22:00:00",
        ])

        assert dtindex.equals(data.timesteps.to_index())
コード例 #9
0
ファイル: test_core_time.py プロジェクト: suvayu/calliope
    def test_predefined_clusters(self):
        override = {
            "model.subset_time": ["2005-01-01", "2005-01-04"],
            "model.time": {
                "function": "apply_clustering",
                "function_options": {
                    "clustering_func": "file=clusters.csv:0",
                    "how": "mean",
                },
            },
        }

        model = build_test_model(override, scenario="simple_supply")

        assert np.array_equal(model._model_data.clusters.to_pandas().unique(),
                              [0, 1, 2])

        override2 = {
            **override,
            **{
                "model.time.function_options.clustering_func":
                "file=cluster_days.csv:1"
            },
        }

        model = build_test_model(override2, scenario="simple_supply")

        assert np.array_equal(model._model_data.clusters.to_pandas().unique(),
                              [0, 1, 2])

        override3 = {
            **override,
            **{
                "model.time.function_options.clustering_func": "file=cluster_days.csv:1",
                "model.time.function_options.how": "closest",
            },
        }

        model = build_test_model(override3, scenario="simple_supply")

        assert np.array_equal(model._model_data.clusters.to_pandas().unique(),
                              [0])
コード例 #10
0
    def test_invalid_csv_columns(self):
        override = {
            "nodes": {
                "c.techs": {"test_supply_elec": None, "test_demand_elec": None},
                "d.techs": {"test_supply_elec": None, "test_demand_elec": None},
            },
            "links": {
                "a,b": {"exists": False},
                "c,d.techs": {"test_transmission_elec": None},
            },
        }
        with pytest.raises(exceptions.ModelError) as excinfo:
            build_test_model(override_dict=override, scenario="one_day")

        assert check_error_or_warning(
            excinfo,
            [
                "file:column combinations `[('demand_elec.csv', 'c') ('demand_elec.csv', 'd')]` not found, but are requested by parameter `resource`."
            ],
        )
コード例 #11
0
    def test_predefined_clusters_fail(self):
        override = {
            'model.subset_time': ['2005-01-01', '2005-01-04'],
            'model.time': {
                'function': 'apply_clustering',
                'function_options': {
                    'clustering_func': 'file=clusters.csv:0', 'how': 'mean'
                }
            }
        }
        # should fail - no CSV data column defined
        override1 = {**override, **{
            'model.time.function_options.clustering_func': 'file=clusters.csv'
        }}
        with pytest.raises(exceptions.ModelError) as error:
            build_test_model(override1, scenario='simple_supply')

        assert check_error_or_warning(error, 'No time clustering column given')

        # should fail - unknown CSV data column defined
        override2 = {**override, **{
            'model.time.function_options.clustering_func': 'file=clusters.csv:1'
        }}

        with pytest.raises(KeyError) as error:
            build_test_model(override2, scenario='simple_supply')

        assert check_error_or_warning(error, 'time clustering column 1 not found')

        # should fail - more than one cluster given to any one day
        override3 = {**override, **{
            'model.time.function_options.clustering_func': 'file=clusters.csv:b'
        }}

        with pytest.raises(exceptions.ModelError) as error:
            build_test_model(override3, scenario='simple_supply')

        assert check_error_or_warning(
            error, 'More than one cluster value assigned to a day in `clusters.csv:b`'
        )

        # should fail - not enough data in clusters.csv to cover subset_time
        override4 = {**override, **{
            'model.subset_time': ['2005-01-01', '2005-01-06'],
            'model.time.function_options.clustering_func': 'file=cluster_days.csv:1'
        }}

        with pytest.raises(exceptions.ModelError) as error:
            build_test_model(override4, scenario='simple_supply')

        assert check_error_or_warning(error, 'Missing cluster days')
コード例 #12
0
ファイル: test_core_time.py プロジェクト: suvayu/calliope
    def test_15min_clustering(self):
        # The data is identical for '2005-01-01' and '2005-01-03' timesteps,
        # it is only different for '2005-01-02'
        override = {
            "techs.test_demand_elec.constraints.resource":
            "file=demand_elec_15mins.csv",
            "model.subset_time": None,
        }

        model = build_test_model(override, scenario="simple_supply,one_day")
        data = model._model_data

        data_clustered_kmeans = funcs.apply_clustering(
            data,
            timesteps=None,
            clustering_func="kmeans",
            how="mean",
            normalize=True,
            k=2,
        )

        data_clustered_hierarchical = funcs.apply_clustering(
            data,
            timesteps=None,
            clustering_func="hierarchical",
            how="mean",
            normalize=True,
            k=2,
        )
        assert len(data_clustered_kmeans.clusters.to_pandas().unique()) == 2
        assert len(
            data_clustered_hierarchical.clusters.to_pandas().unique()) == 2

        days = np.unique(
            data_clustered_kmeans.timesteps.to_index().strftime("%Y-%m-%d"))
        # not sure which of '2005-01-01' and '2005-01-03' it will choose to
        # label the cluster of those two days
        assert "2005-01-02" in days and ("2005-01-01" in days
                                         or "2005-01-03" in days)

        assert np.array_equal(
            data_clustered_kmeans.timestep_resolution.values,
            [0.25 for i in range(24 * 4 * 2)],
        )
コード例 #13
0
    def test_15min_to_2h_clustering(self):
        # The data is identical for '2005-01-01' and '2005-01-03' timesteps,
        # it is only different for '2005-01-02'
        override = {
            'techs.test_demand_elec.constraints.resource': 'file=demand_elec_15T_to_2h.csv',
            'model.subset_time': None
        }

        model = build_test_model(override, scenario='simple_supply,one_day')
        data = model._model_data

        data_clustered_kmeans = funcs.apply_clustering(
            data,
            timesteps=None,
            clustering_func='kmeans',
            how='mean',
            normalize=True,
            k=2
        )

        data_clustered_hierarchical = funcs.apply_clustering(
            data,
            timesteps=None,
            clustering_func='hierarchical',
            how='mean',
            normalize=True,
            k=2
        )
        assert len(data_clustered_kmeans.clusters.to_pandas().unique()) == 2
        assert len(data_clustered_hierarchical.clusters.to_pandas().unique()) == 2

        days = np.unique(data_clustered_kmeans.timesteps.to_index().strftime('%Y-%m-%d'))
        # not sure which of '2005-01-01' and '2005-01-03' it will choose to
        # label the cluster of those two days
        assert '2005-01-02' in days and ('2005-01-01' in days or '2005-01-03' in days)

        assert np.array_equal(
            data_clustered_kmeans.timestep_resolution.values,
            [
                0.25, 0.25, 0.25, 0.25, 0.5, 0.5, 0.5, 0.5, 1, 1, 1, 2, 2, 2, 2,
                2, 1, 1, 2, 2, 2, 0.25, 0.25, 0.25, 0.25, 0.5, 0.5, 0.5, 0.5, 1,
                1, 1, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2
            ]
        )
コード例 #14
0
ファイル: test_core_time.py プロジェクト: suvayu/calliope
    def test_15min_to_2h_masking_1D(self):
        # The data is identical for '2005-01-01' and '2005-01-03' timesteps,
        # it is only different for '2005-01-02'
        override = {
            "techs.test_demand_elec.constraints.resource":
            "file=demand_elec_15T_to_2h.csv",
            "model.subset_time": None,
        }

        model = build_test_model(override, scenario="simple_supply,one_day")
        data = model._model_data

        mask = masks.extreme(data,
                             "test_demand_elec",
                             var="resource",
                             how="max",
                             length="1D")

        dtindex = pd.DatetimeIndex([
            "2005-01-02 00:00:00",
            "2005-01-02 00:15:00",
            "2005-01-02 00:30:00",
            "2005-01-02 00:45:00",
            "2005-01-02 01:00:00",
            "2005-01-02 01:30:00",
            "2005-01-02 02:00:00",
            "2005-01-02 02:30:00",
            "2005-01-02 03:00:00",
            "2005-01-02 04:00:00",
            "2005-01-02 05:00:00",
            "2005-01-02 06:00:00",
            "2005-01-02 08:00:00",
            "2005-01-02 10:00:00",
            "2005-01-02 12:00:00",
            "2005-01-02 14:00:00",
            "2005-01-02 16:00:00",
            "2005-01-02 17:00:00",
            "2005-01-02 18:00:00",
            "2005-01-02 20:00:00",
            "2005-01-02 22:00:00",
        ])

        assert dtindex.equals(mask)
コード例 #15
0
    def test_15min_resampling_to_6h(self):
        # The data is identical for '2005-01-01' and '2005-01-03' timesteps,
        # it is only different for '2005-01-02'
        override = {
            'techs.test_demand_elec.constraints.resource': 'file=demand_elec_15mins.csv',
            'model.subset_time': None,
            'model.time': {
                'function': 'resample', 'function_options': {'resolution': '6H'}
            }
        }

        model = build_test_model(override, scenario='simple_supply,one_day')
        data = model._model_data

        dtindex = pd.DatetimeIndex([
            '2005-01-01 00:00:00', '2005-01-01 06:00:00', '2005-01-01 12:00:00',
            '2005-01-01 18:00:00', '2005-01-02 00:00:00', '2005-01-02 06:00:00',
            '2005-01-02 12:00:00', '2005-01-02 18:00:00', '2005-01-03 00:00:00',
            '2005-01-03 06:00:00', '2005-01-03 12:00:00', '2005-01-03 18:00:00'
        ])

        assert dtindex.equals(data.timesteps.to_index())
コード例 #16
0
    def test_15min_masking_1D_resampling_to_2h(self):
        # The data is identical for '2005-01-01' and '2005-01-03' timesteps,
        # it is only different for '2005-01-02'
        override = {
            'techs.test_demand_elec.constraints.resource': 'file=demand_elec_15mins.csv',
            'model.subset_time': None,
            'model.time': {
                'masks': [{
                    'function': 'extreme',
                    'options': {'tech': 'test_demand_elec', 'how': 'max'}
                }],
                'function': 'resample', 'function_options': {'resolution': '2H'}
            }
        }

        model = build_test_model(override, scenario='simple_supply,one_day')
        data = model._model_data

        dtindex = pd.DatetimeIndex([
            '2005-01-01 00:00:00', '2005-01-01 02:00:00', '2005-01-01 04:00:00',
            '2005-01-01 06:00:00', '2005-01-01 08:00:00', '2005-01-01 10:00:00',
            '2005-01-01 12:00:00', '2005-01-01 14:00:00', '2005-01-01 16:00:00',
            '2005-01-01 18:00:00', '2005-01-01 20:00:00', '2005-01-01 22:00:00',
            '2005-01-02 00:00:00', '2005-01-02 00:15:00', '2005-01-02 00:30:00',
            '2005-01-02 00:45:00', '2005-01-02 01:00:00', '2005-01-02 01:15:00',
            '2005-01-02 01:30:00', '2005-01-02 01:45:00', '2005-01-02 02:00:00',
            '2005-01-02 02:15:00', '2005-01-02 02:30:00', '2005-01-02 02:45:00',
            '2005-01-02 03:00:00', '2005-01-02 03:15:00', '2005-01-02 03:30:00',
            '2005-01-02 03:45:00', '2005-01-02 04:00:00', '2005-01-02 04:15:00',
            '2005-01-02 04:30:00', '2005-01-02 04:45:00', '2005-01-02 05:00:00',
            '2005-01-02 05:15:00', '2005-01-02 05:30:00', '2005-01-02 05:45:00',
            '2005-01-02 06:00:00', '2005-01-02 06:15:00', '2005-01-02 06:30:00',
            '2005-01-02 06:45:00', '2005-01-02 07:00:00', '2005-01-02 07:15:00',
            '2005-01-02 07:30:00', '2005-01-02 07:45:00', '2005-01-02 08:00:00',
            '2005-01-02 08:15:00', '2005-01-02 08:30:00', '2005-01-02 08:45:00',
            '2005-01-02 09:00:00', '2005-01-02 09:15:00', '2005-01-02 09:30:00',
            '2005-01-02 09:45:00', '2005-01-02 10:00:00', '2005-01-02 10:15:00',
            '2005-01-02 10:30:00', '2005-01-02 10:45:00', '2005-01-02 11:00:00',
            '2005-01-02 11:15:00', '2005-01-02 11:30:00', '2005-01-02 11:45:00',
            '2005-01-02 12:00:00', '2005-01-02 12:15:00', '2005-01-02 12:30:00',
            '2005-01-02 12:45:00', '2005-01-02 13:00:00', '2005-01-02 13:15:00',
            '2005-01-02 13:30:00', '2005-01-02 13:45:00', '2005-01-02 14:00:00',
            '2005-01-02 14:15:00', '2005-01-02 14:30:00', '2005-01-02 14:45:00',
            '2005-01-02 15:00:00', '2005-01-02 15:15:00', '2005-01-02 15:30:00',
            '2005-01-02 15:45:00', '2005-01-02 16:00:00', '2005-01-02 16:15:00',
            '2005-01-02 16:30:00', '2005-01-02 16:45:00', '2005-01-02 17:00:00',
            '2005-01-02 17:15:00', '2005-01-02 17:30:00', '2005-01-02 17:45:00',
            '2005-01-02 18:00:00', '2005-01-02 18:15:00', '2005-01-02 18:30:00',
            '2005-01-02 18:45:00', '2005-01-02 19:00:00', '2005-01-02 19:15:00',
            '2005-01-02 19:30:00', '2005-01-02 19:45:00', '2005-01-02 20:00:00',
            '2005-01-02 20:15:00', '2005-01-02 20:30:00', '2005-01-02 20:45:00',
            '2005-01-02 21:00:00', '2005-01-02 21:15:00', '2005-01-02 21:30:00',
            '2005-01-02 21:45:00', '2005-01-02 22:00:00', '2005-01-02 22:15:00',
            '2005-01-02 22:30:00', '2005-01-02 22:45:00', '2005-01-02 23:00:00',
            '2005-01-02 23:15:00', '2005-01-02 23:30:00', '2005-01-02 23:45:00',
            '2005-01-03 00:00:00', '2005-01-03 02:00:00', '2005-01-03 04:00:00',
            '2005-01-03 06:00:00', '2005-01-03 08:00:00', '2005-01-03 10:00:00',
            '2005-01-03 12:00:00', '2005-01-03 14:00:00', '2005-01-03 16:00:00',
            '2005-01-03 18:00:00', '2005-01-03 20:00:00', '2005-01-03 22:00:00'
        ])

        assert dtindex.equals(data.timesteps.to_index())
コード例 #17
0
ファイル: test_core_time.py プロジェクト: suvayu/calliope
    def test_15min_masking_1D_resampling_to_2h(self):
        # The data is identical for '2005-01-01' and '2005-01-03' timesteps,
        # it is only different for '2005-01-02'
        override = {
            "techs.test_demand_elec.constraints.resource":
            "file=demand_elec_15mins.csv",
            "model.subset_time": None,
            "model.time": {
                "masks": [{
                    "function": "extreme",
                    "options": {
                        "tech": "test_demand_elec",
                        "how": "max"
                    },
                }],
                "function":
                "resample",
                "function_options": {
                    "resolution": "2H"
                },
            },
        }

        model = build_test_model(override, scenario="simple_supply,one_day")
        data = model._model_data

        dtindex = pd.DatetimeIndex([
            "2005-01-01 00:00:00",
            "2005-01-01 02:00:00",
            "2005-01-01 04:00:00",
            "2005-01-01 06:00:00",
            "2005-01-01 08:00:00",
            "2005-01-01 10:00:00",
            "2005-01-01 12:00:00",
            "2005-01-01 14:00:00",
            "2005-01-01 16:00:00",
            "2005-01-01 18:00:00",
            "2005-01-01 20:00:00",
            "2005-01-01 22:00:00",
            "2005-01-02 00:00:00",
            "2005-01-02 00:15:00",
            "2005-01-02 00:30:00",
            "2005-01-02 00:45:00",
            "2005-01-02 01:00:00",
            "2005-01-02 01:15:00",
            "2005-01-02 01:30:00",
            "2005-01-02 01:45:00",
            "2005-01-02 02:00:00",
            "2005-01-02 02:15:00",
            "2005-01-02 02:30:00",
            "2005-01-02 02:45:00",
            "2005-01-02 03:00:00",
            "2005-01-02 03:15:00",
            "2005-01-02 03:30:00",
            "2005-01-02 03:45:00",
            "2005-01-02 04:00:00",
            "2005-01-02 04:15:00",
            "2005-01-02 04:30:00",
            "2005-01-02 04:45:00",
            "2005-01-02 05:00:00",
            "2005-01-02 05:15:00",
            "2005-01-02 05:30:00",
            "2005-01-02 05:45:00",
            "2005-01-02 06:00:00",
            "2005-01-02 06:15:00",
            "2005-01-02 06:30:00",
            "2005-01-02 06:45:00",
            "2005-01-02 07:00:00",
            "2005-01-02 07:15:00",
            "2005-01-02 07:30:00",
            "2005-01-02 07:45:00",
            "2005-01-02 08:00:00",
            "2005-01-02 08:15:00",
            "2005-01-02 08:30:00",
            "2005-01-02 08:45:00",
            "2005-01-02 09:00:00",
            "2005-01-02 09:15:00",
            "2005-01-02 09:30:00",
            "2005-01-02 09:45:00",
            "2005-01-02 10:00:00",
            "2005-01-02 10:15:00",
            "2005-01-02 10:30:00",
            "2005-01-02 10:45:00",
            "2005-01-02 11:00:00",
            "2005-01-02 11:15:00",
            "2005-01-02 11:30:00",
            "2005-01-02 11:45:00",
            "2005-01-02 12:00:00",
            "2005-01-02 12:15:00",
            "2005-01-02 12:30:00",
            "2005-01-02 12:45:00",
            "2005-01-02 13:00:00",
            "2005-01-02 13:15:00",
            "2005-01-02 13:30:00",
            "2005-01-02 13:45:00",
            "2005-01-02 14:00:00",
            "2005-01-02 14:15:00",
            "2005-01-02 14:30:00",
            "2005-01-02 14:45:00",
            "2005-01-02 15:00:00",
            "2005-01-02 15:15:00",
            "2005-01-02 15:30:00",
            "2005-01-02 15:45:00",
            "2005-01-02 16:00:00",
            "2005-01-02 16:15:00",
            "2005-01-02 16:30:00",
            "2005-01-02 16:45:00",
            "2005-01-02 17:00:00",
            "2005-01-02 17:15:00",
            "2005-01-02 17:30:00",
            "2005-01-02 17:45:00",
            "2005-01-02 18:00:00",
            "2005-01-02 18:15:00",
            "2005-01-02 18:30:00",
            "2005-01-02 18:45:00",
            "2005-01-02 19:00:00",
            "2005-01-02 19:15:00",
            "2005-01-02 19:30:00",
            "2005-01-02 19:45:00",
            "2005-01-02 20:00:00",
            "2005-01-02 20:15:00",
            "2005-01-02 20:30:00",
            "2005-01-02 20:45:00",
            "2005-01-02 21:00:00",
            "2005-01-02 21:15:00",
            "2005-01-02 21:30:00",
            "2005-01-02 21:45:00",
            "2005-01-02 22:00:00",
            "2005-01-02 22:15:00",
            "2005-01-02 22:30:00",
            "2005-01-02 22:45:00",
            "2005-01-02 23:00:00",
            "2005-01-02 23:15:00",
            "2005-01-02 23:30:00",
            "2005-01-02 23:45:00",
            "2005-01-03 00:00:00",
            "2005-01-03 02:00:00",
            "2005-01-03 04:00:00",
            "2005-01-03 06:00:00",
            "2005-01-03 08:00:00",
            "2005-01-03 10:00:00",
            "2005-01-03 12:00:00",
            "2005-01-03 14:00:00",
            "2005-01-03 16:00:00",
            "2005-01-03 18:00:00",
            "2005-01-03 20:00:00",
            "2005-01-03 22:00:00",
        ])

        assert dtindex.equals(data.timesteps.to_index())
コード例 #18
0
ファイル: test_core_time.py プロジェクト: suvayu/calliope
    def test_predefined_clusters_fail(self):
        override = {
            "model.subset_time": ["2005-01-01", "2005-01-04"],
            "model.time": {
                "function": "apply_clustering",
                "function_options": {
                    "clustering_func": "file=clusters.csv:0",
                    "how": "mean",
                },
            },
        }
        # should fail - no CSV data column defined
        override1 = {
            **override,
            **{
                "model.time.function_options.clustering_func": "file=clusters.csv"
            },
        }
        with pytest.raises(exceptions.ModelError) as error:
            build_test_model(override1, scenario="simple_supply")

        assert check_error_or_warning(error, "No time clustering column given")

        # should fail - unknown CSV data column defined
        override2 = {
            **override,
            **{
                "model.time.function_options.clustering_func":
                "file=clusters.csv:1"
            },
        }

        with pytest.raises(KeyError) as error:
            build_test_model(override2, scenario="simple_supply")

        assert check_error_or_warning(error,
                                      "time clustering column 1 not found")

        # should fail - more than one cluster given to any one day
        override3 = {
            **override,
            **{
                "model.time.function_options.clustering_func":
                "file=clusters.csv:b"
            },
        }

        with pytest.raises(exceptions.ModelError) as error:
            build_test_model(override3, scenario="simple_supply")

        assert check_error_or_warning(
            error,
            "More than one cluster value assigned to a day in `clusters.csv:b`"
        )

        # should fail - not enough data in clusters.csv to cover subset_time
        override4 = {
            **override,
            **{
                "model.subset_time": ["2005-01-01", "2005-01-06"],
                "model.time.function_options.clustering_func":
                "file=cluster_days.csv:1",
            },
        }

        with pytest.raises(exceptions.ModelError) as error:
            build_test_model(override4, scenario="simple_supply")

        assert check_error_or_warning(error, "Missing cluster days")