Skip to content

Commit

Permalink
fix: relax condition on sanitizing "reversed" column
Browse files Browse the repository at this point in the history
  • Loading branch information
FabianHofmann committed Feb 3, 2025
1 parent 7dd41d7 commit 82e46b5
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 26 deletions.
19 changes: 19 additions & 0 deletions scripts/_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

import fiona
import pandas as pd
import pypsa
import pytz
import requests
import yaml
Expand Down Expand Up @@ -895,6 +896,24 @@ def get_snapshots(snapshots, drop_leap_day=False, freq="h", **kwargs):
return time


def sanitize_custom_columns(n: pypsa.Network):
"""
Sanitize non-standard columns used throughout the workflow.
Parameters
----------
n (pypsa.Network): The network object.
Returns
-------
None
"""
if "reversed" in n.links.columns:
# Replace NA values with default value False
n.links.loc[n.links.reversed.isna(), "reversed"] = False
n.links.reversed = n.links.reversed.astype(bool)


def rename_techs(label: str) -> str:
"""
Rename technology labels for better readability.
Expand Down
23 changes: 2 additions & 21 deletions scripts/add_existing_baseyear.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import xarray as xr
from _helpers import (
configure_logging,
sanitize_custom_columns,
set_scenario_config,
update_config_from_wildcards,
)
Expand Down Expand Up @@ -620,25 +621,6 @@ def add_heating_capacities_installed_before_baseyear(
)


def set_defaults(n):
"""
Set default values for missing values in the network.
Parameters
----------
n (pypsa.Network): The network object.
Returns
-------
None
"""
if "Link" in n.components:
if "reversed" in n.links.columns:
# Replace NA values with default value False
n.links.loc[n.links.reversed.isna(), "reversed"] = False
n.links.reversed = n.links.reversed.astype(bool)


# %%
if __name__ == "__main__":
if "snakemake" not in globals():
Expand Down Expand Up @@ -706,13 +688,12 @@ def set_defaults(n):
)

# Set defaults for missing missing values
set_defaults(n)

if options.get("cluster_heat_buses", False):
cluster_heat_buses(n)

n.meta = dict(snakemake.config, **dict(wildcards=dict(snakemake.wildcards)))

sanitize_custom_columns(n)
sanitize_carriers(n, snakemake.config)

n.export_to_netcdf(snakemake.output[0])
9 changes: 5 additions & 4 deletions scripts/prepare_perfect_foresight.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,11 @@
import pypsa
from _helpers import (
configure_logging,
sanitize_custom_columns,
set_scenario_config,
update_config_from_wildcards,
)
from add_electricity import sanitize_carriers
from add_existing_baseyear import add_build_year_to_new_assets
from pypsa.descriptors import expand_series
from six import iterkeys
Expand Down Expand Up @@ -105,7 +107,6 @@ def hvdc_transport_model(n):
carrier="DC",
length=n.lines.length,
capital_cost=n.lines.capital_cost,
reversed=False,
)

# Remove AC lines
Expand Down Expand Up @@ -233,9 +234,6 @@ def concat_networks(years):
n.investment_period_weightings["years"], social_discountrate
)
n.investment_period_weightings["objective"] = objective_w
if "reversed" in n.links.columns:
# adjust boolean dtype
n.links["reversed"] = n.links["reversed"].astype(bool)
# all former static loads are now time-dependent -> set static = 0
n.loads["p_set"] = 0
n.loads_t.p_set.fillna(0, inplace=True)
Expand Down Expand Up @@ -577,5 +575,8 @@ def update_heat_pump_efficiency(n: pypsa.Network, years: list[int]):

# update heat pump efficiency
update_heat_pump_efficiency(n=n, years=years)

# export network
sanitize_custom_columns(n)
sanitize_carriers(n, snakemake.config)
n.export_to_netcdf(snakemake.output[0])
2 changes: 1 addition & 1 deletion scripts/solve_network.py
Original file line number Diff line number Diff line change
Expand Up @@ -784,7 +784,7 @@ def add_battery_constraints(n):


def add_lossy_bidirectional_link_constraints(n):
if not n.links.p_nom_extendable.any() or "reversed" not in n.links.columns:
if not n.links.p_nom_extendable.any() or not any(n.links.get("reversed", [])):
return

carriers = n.links.loc[n.links.reversed, "carrier"].unique() # noqa: F841
Expand Down

0 comments on commit 82e46b5

Please sign in to comment.