diff --git a/Snakefile b/Snakefile index 1f02b877..344b0934 100644 --- a/Snakefile +++ b/Snakefile @@ -93,6 +93,13 @@ rule all: default_target: True +rule create_scenarios: + output: + config["run"]["scenarios"]["file"], + script: + "config/create_scenarios.py" + + rule purge: run: import builtins diff --git a/config/create_scenarios.py b/config/create_scenarios.py index 40a3c331..4c407058 100644 --- a/config/create_scenarios.py +++ b/config/create_scenarios.py @@ -1,11 +1,15 @@ # -*- coding: utf-8 -*- -# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors +# SPDX-FileCopyrightText: : 2023-2024 The PyPSA-Eur Authors # # SPDX-License-Identifier: MIT # This script helps to generate a scenarios.yaml file for PyPSA-Eur. # You can modify the template to your needs and define all possible combinations of config values that should be considered. +if "snakemake" in globals(): + filename = snakemake.output[0] +else: + filename = "../config/scenarios.yaml" import itertools @@ -14,23 +18,23 @@ import itertools template = """ scenario{scenario_number}: config_section: - config_value: {config_value} - + config_key: {config_value} config_section2: config_key2: {config_value2} """ # Define all possible combinations of config values. # This must define all config values that are used in the template. -config_values = dict(config_values=["true", "false"], config_values2=[1, 2, 3, 4, 5]) +config_values = dict( + config_value=["true", "false"], + config_value2=[1, 2, 3, 4] +) combinations = [ dict(zip(config_values.keys(), values)) for values in itertools.product(*config_values.values()) ] -# write the scenarios to a file -filename = "../config/scenarios.yaml" with open(filename, "w") as f: for i, config in enumerate(combinations): f.write(template.format(scenario_number=i, **config))