helpers: importing networks with override_components (#128)

* helpers: importing networks with override_components (closes #122) [skip travis]

* Update scripts/plot_network.py

Co-Authored-By: FabianHofmann <hofmann@fias.uni-frankfurt.de>

Co-authored-by: FabianHofmann <hofmann@fias.uni-frankfurt.de>
This commit is contained in:
Fabian Neumann 2020-02-13 15:51:24 +01:00 committed by GitHub
parent 543bb95759
commit cd85d61470
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 49 additions and 3 deletions

View File

@ -40,11 +40,57 @@ def configure_logging(snakemake, skip_handlers=False):
})
logging.basicConfig(**kwargs)
def load_network(import_name=None, custom_components=None):
"""
Helper for importing a pypsa.Network with additional custom components.
Parameters
----------
import_name : str
As in pypsa.Network(import_name)
custom_components : dict
Dictionary listing custom components.
For using ``snakemake.config['override_components']``
in ``config.yaml`` define:
.. code:: yaml
override_components:
ShadowPrice:
component: ["shadow_prices","Shadow price for a global constraint.",np.nan]
attributes:
name: ["string","n/a","n/a","Unique name","Input (required)"]
value: ["float","n/a",0.,"shadow value","Output"]
Returns
-------
pypsa.Network
"""
import pypsa
from pypsa.descriptors import Dict
override_components = None
override_component_attrs = None
if custom_components is not None:
override_components = pypsa.components.components.copy()
override_component_attrs = Dict({k : v.copy() for k,v in pypsa.components.component_attrs.items()})
for k, v in custom_components.items():
override_components.loc[k] = v['component']
override_component_attrs[k] = pd.DataFrame(columns = ["type","unit","default","description","status"])
for attr, val in v['attributes'].items():
override_component_attrs[k].loc[attr] = val
return pypsa.Network(import_name=import_name,
override_components=override_components,
override_component_attrs=override_component_attrs)
def pdbcast(v, h):
return pd.DataFrame(v.values.reshape((-1, 1)) * h.values,
index=v.index, columns=h.index)
def load_network(fn, tech_costs, config, combine_hydro_ps=True):
def load_network_for_plots(fn, tech_costs, config, combine_hydro_ps=True):
import pypsa
from add_electricity import update_transmission_costs, load_costs

View File

@ -172,7 +172,7 @@ def plot_map(n, ax=None, attribute='p_nom', opts={}):
return fig
#n = load_network(snakemake.input.network, opts, combine_hydro_ps=False)
#n = load_network_for_plots(snakemake.input.network, opts, combine_hydro_ps=False)
def plot_total_energy_pie(n, ax=None):
@ -261,7 +261,7 @@ if __name__ == "__main__":
map_figsize = opts['map']['figsize']
map_boundaries = opts['map']['boundaries']
n = load_network(snakemake.input.network, snakemake.input.tech_costs, snakemake.config)
n = load_network_for_plots(snakemake.input.network, snakemake.input.tech_costs, snakemake.config)
scenario_opts = snakemake.wildcards.opts.split('-')