use mock_snakemake from pypsa-eur

This commit is contained in:
Fabian Neumann 2023-03-06 19:09:45 +01:00
parent 93d9e13f52
commit 3bdf3b6f5e
36 changed files with 35 additions and 103 deletions

View File

@ -125,7 +125,7 @@ def add_brownfield(n, n_p, year):
# %%
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake(
"add_brownfield",

View File

@ -606,7 +606,7 @@ def add_heating_capacities_installed_before_baseyear(
# %%
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake(
"add_existing_baseyear",

View File

@ -35,7 +35,7 @@ country_to_alpha2 = {
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake("build_ammonia_production")

View File

@ -206,7 +206,7 @@ def convert_nuts2_to_regions(bio_nuts2, regions):
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake("build_biomass_potentials", simpl="", clusters="5")

View File

@ -14,7 +14,7 @@ import xarray as xr
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake(
"build_clustered_population_layouts",

View File

@ -27,7 +27,7 @@ def coefficient_of_performance(delta_T, source="air"):
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake(
"build_cop_profiles",

View File

@ -751,7 +751,7 @@ def build_transport_data(countries, population, idees):
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake("build_energy_totals")

View File

@ -80,7 +80,7 @@ def build_gas_input_locations(lng_fn, entry_fn, prod_fn, countries):
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake(
"build_gas_input_locations",

View File

@ -144,7 +144,7 @@ def prepare_dataset(
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake("build_gas_network")

View File

@ -16,7 +16,7 @@ from dask.distributed import Client, LocalCluster
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake(
"build_heat_demands",

View File

@ -138,7 +138,7 @@ def build_nodal_distribution_key(hotmaps, regions):
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake(
"build_industrial_distribution_key",

View File

@ -196,7 +196,7 @@ def industrial_energy_demand(countries):
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake("build_industrial_energy_demand_per_country_today")

View File

@ -11,7 +11,7 @@ import pandas as pd
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake(
"build_industrial_energy_demand_per_node",

View File

@ -69,7 +69,7 @@ def build_nodal_industrial_energy_demand():
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake(
"build_industrial_energy_demand_per_node_today",

View File

@ -294,7 +294,7 @@ def separate_basic_chemicals(demand):
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake("build_industrial_production_per_country")

View File

@ -12,7 +12,7 @@ from prepare_sector_network import get
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake("build_industrial_production_per_country_tomorrow")

View File

@ -66,7 +66,7 @@ def build_nodal_industrial_production():
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake(
"build_industrial_production_per_node",

View File

@ -1462,7 +1462,7 @@ def other_industrial_sectors():
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake("build_industry_sector_ratios")

View File

@ -21,7 +21,7 @@ import xarray as xr
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake("build_population_layouts")

View File

@ -11,7 +11,7 @@ import pandas as pd
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake(
"build_population_weighted_energy_totals",

View File

@ -1032,7 +1032,7 @@ def sample_dE_costs_area(
# %% --- MAIN --------------------------------------------------------------
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake(
"build_retro_cost",

View File

@ -77,7 +77,7 @@ def salt_cavern_potential_by_region(caverns, regions):
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake(
"build_salt_cavern_potentials", simpl="", clusters="37"

View File

@ -30,7 +30,7 @@ def allocate_sequestration_potential(
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake(
"build_sequestration_potentials", simpl="", clusters="181"

View File

@ -14,7 +14,7 @@ import pandas as pd
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake(
"build_shipping_demand_per_node",

View File

@ -16,7 +16,7 @@ from dask.distributed import Client, LocalCluster
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake(
"build_solar_thermal_profiles",

View File

@ -16,7 +16,7 @@ from dask.distributed import Client, LocalCluster
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake(
"build_temperature_profiles",

View File

@ -159,7 +159,7 @@ def bev_dsm_profile(snapshots, nodes, options):
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake(
"build_transport_demand",

View File

@ -108,7 +108,7 @@ def aggregate_parallel_pipes(df):
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake("cluster_gas_network", simpl="", clusters="37")

View File

@ -17,7 +17,7 @@ files = {
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake("copy_config")

View File

@ -55,74 +55,6 @@ def override_component_attrs(directory):
return attrs
# from pypsa-eur/_helpers.py
def mock_snakemake(rulename, **wildcards):
"""
This function is expected to be executed from the 'scripts'-directory of '
the snakemake project. It returns a snakemake.script.Snakemake object,
based on the Snakefile.
If a rule has wildcards, you have to specify them in **wildcards.
Parameters
----------
rulename: str
name of the rule for which the snakemake object should be generated
**wildcards:
keyword arguments fixing the wildcards. Only necessary if wildcards are
needed.
"""
import os
import snakemake as sm
from packaging.version import Version, parse
from pypsa.descriptors import Dict
from snakemake.script import Snakemake
script_dir = Path(__file__).parent.resolve()
assert (
Path.cwd().resolve() == script_dir
), f"mock_snakemake has to be run from the repository scripts directory {script_dir}"
os.chdir(script_dir.parent)
for p in sm.SNAKEFILE_CHOICES:
if os.path.exists(p):
snakefile = p
break
kwargs = dict(rerun_triggers=[]) if parse(sm.__version__) > Version("7.7.0") else {}
workflow = sm.Workflow(snakefile, overwrite_configfiles=[], **kwargs)
workflow.include(snakefile)
workflow.global_resources = {}
rule = workflow.get_rule(rulename)
dag = sm.dag.DAG(workflow, rules=[rule])
wc = Dict(wildcards)
job = sm.jobs.Job(rule, dag, wc)
def make_accessable(*ios):
for io in ios:
for i in range(len(io)):
io[i] = os.path.abspath(io[i])
make_accessable(job.input, job.output, job.log)
snakemake = Snakemake(
job.input,
job.output,
job.params,
job.wildcards,
job.threads,
job.resources,
job.log,
job.dag.workflow.config,
job.rule.name,
None,
)
# create log and output dir if not existent
for path in list(snakemake.log) + list(snakemake.output):
Path(path).parent.mkdir(parents=True, exist_ok=True)
os.chdir(script_dir)
return snakemake
# from pypsa-eur/_helpers.py
def progress_retrieve(url, file):
import urllib

View File

@ -673,7 +673,7 @@ def to_csv(df):
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake("make_summary")

View File

@ -911,7 +911,7 @@ def plot_series(network, carrier="AC", name="test"):
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake(
"plot_network",

View File

@ -541,7 +541,7 @@ def plot_carbon_budget_distribution(input_eurostat):
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake("plot_summary")

View File

@ -3227,7 +3227,7 @@ def set_temporal_aggregation(n, opts, solver_name):
# %%
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake(
"prepare_sector_network",

View File

@ -18,7 +18,7 @@ logger = logging.getLogger(__name__)
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake("retrieve_gas_network_data")
rootpath = ".."

View File

@ -318,7 +318,7 @@ def solve_network(n, config, opts="", **kwargs):
# %%
if __name__ == "__main__":
if "snakemake" not in globals():
from helper import mock_snakemake
from _helpers import mock_snakemake
snakemake = mock_snakemake(
"solve_network_myopic",