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`.", ], )
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])
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`.' ])
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())
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())
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)
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())
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())
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])
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`." ], )
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')
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)], )
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 ] )
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)
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())
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())
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())
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")