diff --git a/pyproject.toml b/pyproject.toml index 9e778e69..43220c55 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,7 +35,9 @@ dependencies = [ "xlrd", "mypy-extensions", "pypubsub", - "tomlkit" + "tomlkit", + "duckdb", + "fsspec" ] dynamic = ["version"] diff --git a/src/muse/data/example/default_new_input/agent_objectives.csv b/src/muse/data/example/default_new_input/agent_objectives.csv new file mode 100644 index 00000000..5bf0e59e --- /dev/null +++ b/src/muse/data/example/default_new_input/agent_objectives.csv @@ -0,0 +1,4 @@ +agent_id,objective_type,decision_weight,objective_sort +A1_RES,LCOE,1,TRUE +A1_PWR,LCOE,1,TRUE +A1_GAS,LCOE,1,TRUE diff --git a/src/muse/data/example/default_new_input/agents.csv b/src/muse/data/example/default_new_input/agents.csv new file mode 100644 index 00000000..d13223d4 --- /dev/null +++ b/src/muse/data/example/default_new_input/agents.csv @@ -0,0 +1,4 @@ +id,description,region_id,sector_id,search_rule,decision_rule,quantity +A1_RES,Residential sector agent,R1,residential,all,single,1 +A1_PWR,Power sector agent,R1,power,all,single,1 +A1_GAS,Gas sector agent,R1,gas,all,single,1 diff --git a/src/muse/data/example/default_new_input/assets.csv b/src/muse/data/example/default_new_input/assets.csv new file mode 100644 index 00000000..1659aa9e --- /dev/null +++ b/src/muse/data/example/default_new_input/assets.csv @@ -0,0 +1,6 @@ +agent_id,process_id,region_id,commission_year,capacity +A1_GAS,gassupply1,R1,1995,7.5 +A1_GAS,gassupply1,R1,2000,7.5 +A1_PWR,gasCCGT,R1,1995,1 +A1_RES,gasboiler,R1,2015,5 +A1_RES,gasboiler,R1,2020,5 diff --git a/src/muse/data/example/default_new_input/commodities.csv b/src/muse/data/example/default_new_input/commodities.csv new file mode 100644 index 00000000..b4d546a7 --- /dev/null +++ b/src/muse/data/example/default_new_input/commodities.csv @@ -0,0 +1,6 @@ +id,description,type,unit +electricity,Electricity,energy,PJ +gas,Gas,energy,PJ +heat,Heat,energy,PJ +wind,Wind,energy,PJ +CO2f,Carbon dioxide,energy,kt diff --git a/src/muse/data/example/default_new_input/commodity_costs.csv b/src/muse/data/example/default_new_input/commodity_costs.csv new file mode 100644 index 00000000..88a4ee1c --- /dev/null +++ b/src/muse/data/example/default_new_input/commodity_costs.csv @@ -0,0 +1,22 @@ +commodity_id,region_id,year,value +electricity,R1,2020,19.5 +electricity,R1,2025,21.93518528 +electricity,R1,2030,26.50925917 +electricity,R1,2035,26.51851861 +electricity,R1,2040,23.85185194 +electricity,R1,2045,23.97222222 +electricity,R1,2050,24.06481472 +gas,R1,2020,7.15275 +gas,R1,2025,8.10645 +gas,R1,2030,9.06015 +gas,R1,2035,9.2191 +gas,R1,2040,9.37805 +gas,R1,2045,9.193829337 +gas,R1,2050,9.009608674 +CO2f,R1,2020,0.08314119 +CO2f,R1,2025,0.120069795 +CO2f,R1,2030,0.156998399 +CO2f,R1,2035,0.214877567 +CO2f,R1,2040,0.272756734 +CO2f,R1,2045,0.35394801 +CO2f,R1,2050,0.435139285 diff --git a/src/muse/data/example/default_new_input/demand.csv b/src/muse/data/example/default_new_input/demand.csv new file mode 100644 index 00000000..b26c1b54 --- /dev/null +++ b/src/muse/data/example/default_new_input/demand.csv @@ -0,0 +1,3 @@ +commodity_id,region_id,year,demand +heat,R1,2020,10 +heat,R1,2050,30 diff --git a/src/muse/data/example/default_new_input/demand_slicing.csv b/src/muse/data/example/default_new_input/demand_slicing.csv new file mode 100644 index 00000000..edf969b5 --- /dev/null +++ b/src/muse/data/example/default_new_input/demand_slicing.csv @@ -0,0 +1,7 @@ +commodity_id,region_id,time_slice,fraction +heat,R1,all-year.all-week.night,0.1 +heat,R1,all-year.all-week.morning,0.15 +heat,R1,all-year.all-week.afternoon,0.1 +heat,R1,all-year.all-week.early-peak,0.15 +heat,R1,all-year.all-week.late-peak,0.3 +heat,R1,all-year.all-week.evening,0.2 diff --git a/src/muse/data/example/default_new_input/process_availabilities.csv b/src/muse/data/example/default_new_input/process_availabilities.csv new file mode 100644 index 00000000..6c6901e0 --- /dev/null +++ b/src/muse/data/example/default_new_input/process_availabilities.csv @@ -0,0 +1,4 @@ +process_id,region_id,year,timeslice,limit_type,value +gassupply1,R1,2020,annual,up,0.9 +gasCCGT,R1,2020,annual,up,0.9 +windturbine,R1,2020,annual,up,0.4 diff --git a/src/muse/data/example/default_new_input/process_flows.csv b/src/muse/data/example/default_new_input/process_flows.csv new file mode 100644 index 00000000..76415278 --- /dev/null +++ b/src/muse/data/example/default_new_input/process_flows.csv @@ -0,0 +1,12 @@ +process_id,commodity_id,region_id,year,coeff +gassupply1,gas,R1,2020,1 +gasCCGT,gas,R1,2020,-1.67 +gasCCGT,electricity,R1,2020,1 +gasCCGT,CO2f,R1,2020,91.67 +windturbine,wind,R1,2020,-1 +windturbine,electricity,R1,2020,1 +gasboiler,gas,R1,2020,-1.16 +gasboiler,heat,R1,2020,1 +gasboiler,CO2f,R1,2020,64.71 +heatpump,electricity,R1,2020,-0.4 +heatpump,heat,R1,2020,1 diff --git a/src/muse/data/example/default_new_input/process_parameters.csv b/src/muse/data/example/default_new_input/process_parameters.csv new file mode 100644 index 00000000..4a7f294b --- /dev/null +++ b/src/muse/data/example/default_new_input/process_parameters.csv @@ -0,0 +1,6 @@ +process_id,region_id,year,cap_par,fix_par,var_par,max_capacity_addition,max_capacity_growth,total_capacity_limit,lifetime,discount_rate +gassupply1,R1,2020,0,0,2.55,5,1,60,35,0.1 +gasCCGT,R1,2020,23.78234399,0,0,2,1,60,35,0.1 +windturbine,R1,2020,36.30771182,0,0,2,1,60,25,0.1 +gasboiler,R1,2020,3.8,0,0,10,0.02,60,10,0.1 +heatpump,R1,2020,8.866667,0,0,10,0.02,60,10,0.1 diff --git a/src/muse/data/example/default_new_input/processes.csv b/src/muse/data/example/default_new_input/processes.csv new file mode 100644 index 00000000..e68ad288 --- /dev/null +++ b/src/muse/data/example/default_new_input/processes.csv @@ -0,0 +1,6 @@ +id,description,sector_id +gassupply1,Gas supply,energy +gasCCGT,Gas CCGT,power +windturbine,Wind turbine,power +gasboiler,Gas boiler,residential +heatpump,Heat pump,residential diff --git a/src/muse/data/example/default_new_input/regions.csv b/src/muse/data/example/default_new_input/regions.csv new file mode 100644 index 00000000..1ce17d1c --- /dev/null +++ b/src/muse/data/example/default_new_input/regions.csv @@ -0,0 +1,2 @@ +id,description +R1,Region 1 diff --git a/src/muse/data/example/default_new_input/sectors.csv b/src/muse/data/example/default_new_input/sectors.csv new file mode 100644 index 00000000..7488adac --- /dev/null +++ b/src/muse/data/example/default_new_input/sectors.csv @@ -0,0 +1,4 @@ +id,description +gas,Gas sector +power,Power sector +residential,Residential sector diff --git a/src/muse/data/example/default_new_input/time_slices.csv b/src/muse/data/example/default_new_input/time_slices.csv new file mode 100644 index 00000000..7c750927 --- /dev/null +++ b/src/muse/data/example/default_new_input/time_slices.csv @@ -0,0 +1,7 @@ +season,day,time_of_day,fraction +all-year,all-week,night,0.166667 +all-year,all-week,morning,0.166667 +all-year,all-week,afternoon,0.1666667 +all-year,all-week,early-peak,0.166667 +all-year,all-week,late-peak,0.166667 +all-year,all-week,evening,0.166667 diff --git a/src/muse/examples.py b/src/muse/examples.py index 189a82c8..6bfaa6e7 100644 --- a/src/muse/examples.py +++ b/src/muse/examples.py @@ -52,6 +52,7 @@ "multiple_agents", "minimum_service", "trade", + "default_new_input", ] @@ -137,6 +138,8 @@ def copy_model( _copy_minimum_service(path) elif name.lower() == "trade": _copy_trade(path) + elif name.lower() == "default_new_input": + _copy_default_new_input(path) return path @@ -316,6 +319,12 @@ def update_lpsolver(data): modify_toml(path / "settings.toml", update_lpsolver) +def _copy_default_new_input(path: Path): + from shutil import copytree + + copytree(example_data_dir() / "default_new_input", path) + + def _copy_default_timeslice(path: Path): copytree(example_data_dir() / "default_timeslice", path) diff --git a/tests/test_fullsim_regression.py b/tests/test_fullsim_regression.py index 21897c66..49197e70 100644 --- a/tests/test_fullsim_regression.py +++ b/tests/test_fullsim_regression.py @@ -5,6 +5,9 @@ from muse.examples import AVAILABLE_EXAMPLES +# temporary skip for default_new_input as this is not yet working +AVAILABLE_EXAMPLES.remove("default_new_input") + @mark.regression @mark.example