API Reference
Network
- class pypsa.Network(import_name=None, name='', ignore_standard_types=False, override_components=None, override_component_attrs=None, **kwargs)
Network container for all buses, one-ports and branches.
- Parameters
import_name (string) – Name of netCDF file, HDF5 .h5 store or folder from which to import CSVs of network data.
name (string, default "") – Network name.
ignore_standard_types (boolean, default False) – If True, do not read in PyPSA standard types into standard types DataFrames.
csv_folder_name (string) – Name of folder from which to import CSVs of network data. Overrides import_name.
override_components (pandas.DataFrame) – If you want to override the standard PyPSA components in pypsa.components.components, pass it a DataFrame with index of component name and columns of list_name and description, following the format of pypsa.components.components. See git repository examples/new_components/.
override_component_attrs (pypsa.descriptors.Dict of pandas.DataFrame) – If you want to override pypsa.component_attrs, follow its format. See git repository examples/new_components/.
kwargs – Any remaining attributes to set
- Return type
None
Examples
>>> nw1 = pypsa.Network("my_store.h5") >>> nw2 = pypsa.Network("/my/folder")
- add(class_name, name, **kwargs)
Add a single component to the network.
Adds it to component DataFrame.
Any attributes which are not specified will be given the default value from Components.
This method is slow for many components; instead use
madd
orimport_components_from_dataframe
(see below).- Parameters
class_name (string) – Component class name in [“Bus”,”Generator”,”Load”,”StorageUnit”,”Store”,”ShuntImpedance”,”Line”,”Transformer”,”Link”]
name (string) – Component name
kwargs – Component attributes, e.g. x=0.1, length=123
Examples
>>> network.add("Bus","my_bus_0") >>> network.add("Bus","my_bus_1",v_nom=380) >>> network.add("Line","my_line_name",bus0="my_bus_0",bus1="my_bus_1",length=34,r=2,x=4)
- adjacency_matrix(branch_components=None, busorder=None, weights=None)
Construct a sparse adjacency matrix (directed)
- Parameters
branch_components (iterable sublist of branch_components) – Buses connected by any of the selected branches are adjacent (default: branch_components (network) or passive_branch_components (sub_network))
busorder (pd.Index subset of network.buses.index) – Basis to use for the matrix representation of the adjacency matrix (default: buses.index (network) or buses_i() (sub_network))
weights (pd.Series or None (default)) – If given must provide a weight for each branch, multi-indexed on branch_component name and branch name.
- Returns
adjacency_matrix – Directed adjacency matrix
- Return type
sp.sparse.coo_matrix
- calculate_dependent_values()
Calculate per unit impedances and append voltages to lines and shunt impedances.
- consistency_check()
Checks the network for consistency; e.g. that all components are connected to existing buses and that no impedances are singular.
Prints warnings if anything is potentially inconsistent.
Examples
>>> network.consistency_check()
- copy(with_time=True, ignore_standard_types=False)
Returns a deep copy of the Network object with all components and time-dependent data.
- Returns
network
- Return type
- Parameters
with_time (boolean, default True) – Copy snapshots and time-varying network.component_names_t data too.
ignore_standard_types (boolean, default False) – Ignore the PyPSA standard types.
Examples
>>> network_copy = network.copy()
- determine_network_topology()
Build sub_networks from topology.
- df(component_name)
Return the DataFrame of static components for component_name, i.e. network.component_names
- Parameters
component_name (string) –
- Return type
pandas.DataFrame
- export_to_csv_folder(csv_folder_name, encoding=None, export_standard_types=False)
Export network and components to a folder of CSVs.
Both static and series attributes of all components are exported, but only if they have non-default values.
If
csv_folder_name
does not already exist, it is created.Static attributes are exported in one CSV file per component, e.g.
generators.csv
.Series attributes are exported in one CSV file per component per attribute, e.g.
generators-p_set.csv
.- Parameters
csv_folder_name (string) – Name of folder to which to export.
encoding (str, default None) – Encoding to use for UTF when reading (ex. ‘utf-8’). List of Python standard encodings
export_standard_types (boolean, default False) – If True, then standard types are exported too (upon reimporting you should then set “ignore_standard_types” when initialising the network).
Examples
>>> network.export_to_csv_folder(csv_folder_name)
- export_to_hdf5(path, export_standard_types=False, **kwargs)
Export network and components to an HDF store.
Both static and series attributes of components are exported, but only if they have non-default values.
If path does not already exist, it is created.
- Parameters
path (string) – Name of hdf5 file to which to export (if it exists, it is overwritten)
export_standard_types (boolean, default False) – If True, then standard types are exported too (upon reimporting you should then set “ignore_standard_types” when initialising the network).
**kwargs – Extra arguments for pd.HDFStore to specify f.i. compression (default: complevel=4)
Examples
>>> network.export_to_hdf5(filename)
- export_to_netcdf(path=None, export_standard_types=False, least_significant_digit=None)
Export network and components to a netCDF file.
Both static and series attributes of components are exported, but only if they have non-default values.
If path does not already exist, it is created.
If no path is passed, no file is exported, but the xarray.Dataset is still returned.
Be aware that this cannot export boolean attributes on the Network class, e.g. network.my_bool = False is not supported by netCDF.
- Parameters
path (string|None) – Name of netCDF file to which to export (if it exists, it is overwritten); if None is passed, no file is exported.
export_standard_types (boolean, default False) – If True, then standard types are exported too (upon reimporting you should then set “ignore_standard_types” when initialising the network).
least_significant_digit – This is passed to the netCDF exporter, but currently makes no difference to file size or float accuracy. We’re working on improving this…
- Returns
ds
- Return type
xarray.Dataset
Examples
>>> network.export_to_netcdf("my_file.nc")
- graph(branch_components=None, weight=None, inf_weight=False)
Build NetworkX graph.
- Parameters
network (Network|SubNetwork) –
branch_components ([str]) – Components to use as branches. The default are passive_branch_components in the case of a SubNetwork and branch_components in the case of a Network.
weight (str) – Branch attribute to use as weight
inf_weight (bool|float) – How to treat infinite weights (default: False). True keeps the infinite weight. False skips edges with infinite weight. If a float is given it is used instead.
- Returns
graph – NetworkX graph
- Return type
OrderedGraph
- import_components_from_dataframe(dataframe, cls_name)
Import components from a pandas DataFrame.
If columns are missing then defaults are used.
If extra columns are added, these are left in the resulting component dataframe.
- Parameters
dataframe (pandas.DataFrame) – A DataFrame whose index is the names of the components and whose columns are the non-default attributes.
cls_name (string) – Name of class of component, e.g.
"Line","Bus","Generator", "StorageUnit"
Examples
>>> import pandas as pd >>> buses = ['Berlin', 'Frankfurt', 'Munich', 'Hamburg'] >>> network.import_components_from_dataframe( pd.DataFrame({"v_nom" : 380, "control" : 'PV'}, index=buses), "Bus") >>> network.import_components_from_dataframe( pd.DataFrame({"carrier" : "solar", "bus" : buses, "p_nom_extendable" : True}, index=[b+" PV" for b in buses]), "Generator")
See also
- import_from_csv_folder(csv_folder_name, encoding=None, skip_time=False)
Import network data from CSVs in a folder.
The CSVs must follow the standard form, see
pypsa/examples
.- Parameters
csv_folder_name (string) – Name of folder
encoding (str, default None) –
Encoding to use for UTF when reading (ex. ‘utf-8’). List of Python standard encodings
skip_time (bool, default False) – Skip reading in time dependent attributes
Examples
>>> network.import_from_csv_folder(csv_folder_name)
- import_from_hdf5(path, skip_time=False)
Import network data from HDF5 store at path.
- Parameters
path (string) – Name of HDF5 store
skip_time (bool, default False) – Skip reading in time dependent attributes
- import_from_netcdf(path, skip_time=False)
Import network data from netCDF file or xarray Dataset at path.
- Parameters
path (string|xr.Dataset) – Path to netCDF dataset or instance of xarray Dataset
skip_time (bool, default False) – Skip reading in time dependent attributes
- import_from_pandapower_net(net, extra_line_data=False)
Import network from pandapower net.
Importing from pandapower is still in beta; not all pandapower data is supported.
Unsupported features include: - three-winding transformers - switches - in_service status, - shunt impedances, and - tap positions of transformers.”
- Parameters
net (pandapower network) –
extra_line_data (boolean, default: False) – if True, the line data for all parameters is imported instead of only the type
Examples
>>> network.import_from_pandapower_net(net) OR >>> import pandapower as pp >>> import pandapower.networks as pn >>> net = pn.create_cigre_network_mv(with_der='all') >>> pp.runpp(net) >>> network.import_from_pandapower_net(net, extra_line_data=True)
- import_from_pypower_ppc(ppc, overwrite_zero_s_nom=None)
Import network from PYPOWER PPC dictionary format version 2.
Converts all baseMVA to base power of 1 MVA.
For the meaning of the pypower indices, see also pypower/idx_*.
- Parameters
ppc (PYPOWER PPC dict) –
overwrite_zero_s_nom (Float or None, default None) –
Examples
>>> from pypower.api import case30 >>> ppc = case30() >>> network.import_from_pypower_ppc(ppc)
- import_series_from_dataframe(dataframe, cls_name, attr)
Import time series from a pandas DataFrame.
- Parameters
dataframe (pandas.DataFrame) – A DataFrame whose index is
network.snapshots
and whose columns are a subset of the relevant components.cls_name (string) – Name of class of component
attr (string) – Name of time-varying series attribute
Examples
>>> import numpy as np >>> network.set_snapshots(range(10)) >>> network.import_series_from_dataframe( pd.DataFrame(np.random.rand(10,4), columns=network.generators.index, index=range(10)), "Generator", "p_max_pu")
See also
- incidence_matrix(branch_components=None, busorder=None)
Construct a sparse incidence matrix (directed)
- Parameters
branch_components (iterable sublist of branch_components) – Buses connected by any of the selected branches are adjacent (default: branch_components (network) or passive_branch_components (sub_network))
busorder (pd.Index subset of network.buses.index) – Basis to use for the matrix representation of the adjacency matrix (default: buses.index (network) or buses_i() (sub_network))
- Returns
incidence_matrix – Directed incidence matrix
- Return type
sp.sparse.csr_matrix
- iplot(fig=None, bus_colors='blue', bus_colorscale=None, bus_colorbar=None, bus_sizes=10, bus_text=None, line_colors='green', line_widths=2, line_text=None, title='', branch_components=['Line', 'Link'], iplot=True, jitter=None)
Plot the network buses and lines interactively using plotly.
- Parameters
fig (dict, default None) – If not None, figure is built upon this fig.
bus_colors (dict/pandas.Series) – Colors for the buses, defaults to “b”
bus_colorscale (string) – Name of colorscale if bus_colors are floats, e.g. ‘Jet’, ‘Viridis’
bus_colorbar (dict) – Plotly colorbar, e.g. {‘title’ : ‘my colorbar’}
bus_sizes (dict/pandas.Series) – Sizes of bus points, defaults to 10
bus_text (dict/pandas.Series) – Text for each bus, defaults to bus names
line_colors (dict/pandas.Series) – Colors for the lines, defaults to “g” for Lines and “cyan” for Links. Colors for branches other than Lines can be specified using a pandas Series with a MultiIndex.
line_widths (dict/pandas.Series) – Widths of lines, defaults to 2. Widths for branches other than Lines can be specified using a pandas Series with a MultiIndex.
line_text (dict/pandas.Series) – Text for lines, defaults to line names. Text for branches other than Lines can be specified using a pandas Series with a MultiIndex.
title (string) – Graph title
branch_components (list of str) – Branch components to be plotted, defaults to Line and Link.
iplot (bool, default True) – Automatically do an interactive plot of the figure.
jitter (None|float) – Amount of random noise to add to bus positions to distinguish overlapping buses
- Returns
fig
- Return type
dictionary for plotly figure
- lopf(snapshots=None, pyomo=True, solver_name='glpk', solver_options={}, solver_logfile=None, formulation='kirchhoff', keep_files=False, extra_functionality=None, **kwargs)
Linear optimal power flow for a group of snapshots.
- Parameters
snapshots (list or index slice) – A list of snapshots to optimise, must be a subset of network.snapshots, defaults to network.snapshots
pyomo (bool, default True) – Whether to use pyomo for building and solving the model, setting this to False saves a lot of memory and time.
solver_name (string) – Must be a solver name that pyomo recognises and that is installed, e.g. “glpk”, “gurobi”
solver_options (dictionary) – A dictionary with additional options that get passed to the solver. (e.g. {‘threads’:2} tells gurobi to use only 2 cpus)
solver_logfile (None|string) – If not None, sets the logfile option of the solver.
keep_files (bool, default False) – Keep the files that pyomo constructs from OPF problem construction, e.g. .lp file - useful for debugging
formulation (string) – Formulation of the linear power flow equations to use; must be one of [“angles”,”cycles”,”kirchhoff”,”ptdf”]
extra_functionality (callable function) – This function must take two arguments extra_functionality(network,snapshots) and is called after the model building is complete, but before it is sent to the solver. It allows the user to add/change constraints and add/change the objective function.
ptdf_tolerance (float) – Only taking effect when pyomo is True. Value below which PTDF entries are ignored
free_memory (set, default {'pyomo'}) – Only taking effect when pyomo is True. Any subset of {‘pypsa’, ‘pyomo’}. Allows to stash pypsa time-series data away while the solver runs (as a pickle to disk) and/or free pyomo data after the solution has been extracted.
solver_io (string, default None) – Only taking effect when pyomo is True. Solver Input-Output option, e.g. “python” to use “gurobipy” for solver_name=”gurobi”
skip_pre (bool, default False) – Only taking effect when pyomo is True. Skip the preliminary steps of computing topology, calculating dependent values and finding bus controls.
extra_postprocessing (callable function) – Only taking effect when pyomo is True. This function must take three arguments extra_postprocessing(network,snapshots,duals) and is called after the model has solved and the results are extracted. It allows the user to extract further information about the solution, such as additional shadow prices.
warmstart (bool or string, default False) – Only taking effect when pyomo is False. Use this to warmstart the optimization. Pass a string which gives the path to the basis file. If set to True, a path to a basis file must be given in network.basis_fn.
store_basis (bool, default True) – Only taking effect when pyomo is False. Whether to store the basis of the optimization results. If True, the path to the basis file is saved in network.basis_fn. Note that a basis can only be stored if simplex, dual-simplex, or barrier with crossover is used for solving.
keep_references (bool, default False) – Only taking effect when pyomo is False. Keep the references of variable and constraint names withing the network. These can be looked up in n.vars and n.cons after solving.
keep_shadowprices (bool or list of component names) – Only taking effect when pyomo is False. Keep shadow prices for all constraints, if set to True. If a list is passed the shadow prices will only be parsed for those constraint names. Defaults to [‘Bus’, ‘Line’, ‘GlobalConstraint’]. After solving, the shadow prices can be retrieved using
pypsa.linopt.get_dual()
with corresponding namesolver_dir (str, default None) – Only taking effect when pyomo is False. Path to directory where necessary files are written, default None leads to the default temporary directory used by tempfile.mkstemp().
- lpf(snapshots=None, skip_pre=False)
Linear power flow for generic network.
- Parameters
snapshots (list-like|single snapshot) – A subset or an elements of network.snapshots on which to run the power flow, defaults to network.snapshots
skip_pre (bool, default False) – Skip the preliminary steps of computing topology, calculating dependent values and finding bus controls.
- Return type
None
- lpf_contingency(snapshots=None, branch_outages=None)
Computes linear power flow for a selection of branch outages.
- Parameters
snapshots (list-like|single snapshot) – A subset or an elements of network.snapshots on which to run the power flow, defaults to network.snapshots NB: currently this only works for a single snapshot
branch_outages (list-like) – A list of passive branches which are to be tested for outages. If None, it’s take as all network.passive_branches_i()
- Returns
p0 – num_passive_branch x num_branch_outages DataFrame of new power flows
- Return type
pandas.DataFrame
Examples
>>> network.lpf_contingency(snapshot, branch_outages)
- madd(class_name, names, suffix='', **kwargs)
Add multiple components to the network, along with their attributes.
Make sure when adding static attributes as pandas Series that they are indexed by names. Make sure when adding time-varying attributes as pandas DataFrames that their index is a superset of network.snapshots and their columns are a subset of names.
Any attributes which are not specified will be given the default value from Components.
- Parameters
class_name (string) – Component class name in [“Bus”,”Generator”,”Load”,”StorageUnit”,”Store”,”ShuntImpedance”,”Line”,”Transformer”,”Link”]
names (list-like or pandas.Index) – Component names
suffix (string, default '') – All components are named after names with this added suffix. It is assumed that all Series and DataFrames are indexed by the original names.
kwargs – Component attributes, e.g. x=[0.1,0.2], can be list, pandas.Series of pandas.DataFrame for time-varying
- Returns
new_names – Names of new components (including suffix)
- Return type
pandas.index
Examples
Short Example:
>>> network.madd("Load", ["load 1", "load 2"], ... bus=["1","2"], ... p_set=np.random.rand(len(network.snapshots),2))
Long Example:
>>> import pandas as pd, numpy as np >>> buses = range(13) >>> snapshots = range(7) >>> n = pypsa.Network() >>> n.set_snapshots(snapshots) >>> n.madd("Bus", buses) >>> # add load as numpy array >>> n.madd("Load", ... n.buses.index + " load", ... bus=buses, ... p_set=np.random.rand(len(snapshots),len(buses))) >>> # add wind availability as pandas DataFrame >>> wind = pd.DataFrame(np.random.rand(len(snapshots),len(buses)), ... index=n.snapshots, ... columns=buses) >>> #use a suffix to avoid boilerplate to rename everything >>> n.madd("Generator", ... buses, ... suffix=' wind', ... bus=buses, ... p_nom_extendable=True, ... capital_cost=1e5, ... p_max_pu=wind)
- mremove(class_name, names)
Removes multiple components from the network.
Removes them from component DataFrames.
- Parameters
class_name (string) – Component class name
name (list-like) – Component names
Examples
>>> network.mremove("Line", ["line x", "line y"])
- opf(snapshots=None)
Optimal power flow for snapshots.
- pf(snapshots=None, skip_pre=False, x_tol=1e-06, use_seed=False, distribute_slack=False, slack_weights='p_set')
Full non-linear power flow for generic network.
- Parameters
snapshots (list-like|single snapshot) – A subset or an elements of network.snapshots on which to run the power flow, defaults to network.snapshots
skip_pre (bool, default False) – Skip the preliminary steps of computing topology, calculating dependent values and finding bus controls.
x_tol (float) – Tolerance for Newton-Raphson power flow.
use_seed (bool, default False) – Use a seed for the initial guess for the Newton-Raphson algorithm.
distribute_slack (bool, default False) – If
True
, distribute the slack power across generators proportional to generator dispatch by default or according to the distribution scheme provided inslack_weights
. IfFalse
only the slack generator takes up the slack.slack_weights (dict|str, default 'p_set') – Distribution scheme describing how to determine the fraction of the total slack power (of each sub network individually) a bus of the subnetwork takes up. Default is to distribute proportional to generator dispatch (‘p_set’). Another option is to distribute proportional to (optimised) nominal capacity (‘p_nom’ or ‘p_nom_opt’). Custom weights can be specified via a dictionary that has a key for each subnetwork index (
network.sub_networks.index
) and a pandas.Series/dict with buses or generators of the corresponding subnetwork as index/keys. When specifying custom weights with buses as index/keys the slack power of a bus is distributed among its generators in proportion to their nominal capacity (p_nom
) if given, otherwise evenly.
- Returns
Dictionary with keys ‘n_iter’, ‘converged’, ‘error’ and dataframe values indicating number of iterations, convergence status, and iteration error for each snapshot (rows) and sub_network (columns)
- Return type
- plot(margin=0.05, ax=None, geomap=True, projection=None, bus_colors='b', line_colors={'Line': 'g', 'Link': 'cyan'}, bus_sizes=10, line_widths={'Line': 2, 'Link': 2}, flow=None, title='', line_cmap=None, bus_cmap=None, boundaries=None, geometry=False, branch_components=['Line', 'Link'], jitter=None, basemap=None, basemap_parameters=None, color_geomap=None)
Plot the network buses and lines using matplotlib and Basemap.
- Parameters
margin (float) – Margin at the sides as proportion of distance between max/min x,y
ax (matplotlib ax, defaults to plt.gca()) – Axis to which to plot the network
geomap (bool/str, default True) – Switch to use Basemap or Cartopy (depends on what is installed). If string is passed, it will be used as a resolution argument. For Basemap users ‘c’ (crude), ‘l’ (low), ‘i’ (intermediate), ‘h’ (high), ‘f’ (full) are valid resolutions options. For Cartopy users ‘10m’, ‘50m’, ‘110m’ are valid resolutions options.
projection (cartopy.crs.Projection, defaults to None) – Define the projection of your geomap, only valid if cartopy is installed. If None (default) is passed the projection for cartopy is set to cartopy.crs.PlateCarree
bus_colors (dict/pandas.Series) – Colors for the buses, defaults to “b”
bus_sizes (dict/pandas.Series) – Sizes of bus points, defaults to 10
line_colors (dict/pandas.Series) – Colors for the lines, defaults to “g” for Lines and “cyan” for Links. Colors for branches other than Lines can be specified using a pandas Series with a MultiIndex.
line_widths (dict/pandas.Series) – Widths of lines, defaults to 2. Widths for branches other than Lines can be specified using a pandas Series with a MultiIndex.
flow (snapshot/pandas.Series/function/string) – Flow to be displayed in the plot, defaults to None. If an element of network.snapshots is given, the flow at this timestamp will be displayed. If an aggregation function is given, is will be applied to the total network flow via pandas.DataFrame.agg (accepts also function names). Otherwise flows can be specified by passing a pandas Series with MultiIndex including all necessary branch components. Use the line_widths argument to additionally adjust the size of the flow arrows.
title (string) – Graph title
line_cmap (plt.cm.ColorMap/str|dict) – If line_colors are floats, this color map will assign the colors. Use a dict to specify colormaps for more than one branch type.
bus_cmap (plt.cm.ColorMap/str) – If bus_colors are floats, this color map will assign the colors
boundaries (list of four floats) – Boundaries of the plot in format [x1,x2,y1,y2]
branch_components (list of str) – Branch components to be plotted, defaults to Line and Link.
jitter (None|float) – Amount of random noise to add to bus positions to distinguish overlapping buses
basemap_parameters (dict) – Specify a dict with additional constructor parameters for the Basemap. Will disable Cartopy. Use this feature to set a custom projection. (e.g. {‘projection’: ‘tmerc’, ‘lon_0’:10.0, ‘lat_0’:50.0})
color_geomap (dict or bool) – Specify colors to paint land and sea areas in. If True, it defaults to {‘ocean’: ‘lightblue’, ‘land’: ‘whitesmoke’}. If no dictionary is provided, colors are white.
- Returns
bus_collection, branch_collection1, … – Collections for buses and branches.
- Return type
tuple of Collections
- pnl(component_name)
Return the dictionary of DataFrames of varying components for component_name, i.e. network.component_names_t
- Parameters
component_name (string) –
- Return type
dict of pandas.DataFrame
- remove(class_name, name)
Removes a single component from the network.
Removes it from component DataFrames.
- Parameters
class_name (string) – Component class name
name (string) – Component name
Examples
>>> network.remove("Line","my_line 12345")
- sclopf(snapshots=None, branch_outages=None, solver_name='glpk', skip_pre=False, extra_functionality=None, solver_options={}, keep_files=False, formulation='angles', ptdf_tolerance=0.0)
Computes Security-Constrained Linear Optimal Power Flow (SCLOPF).
This ensures that no branch is overloaded even given the branch outages.
- Parameters
snapshots (list or index slice) – A list of snapshots to optimise, must be a subset of network.snapshots, defaults to network.snapshots
branch_outages (list-like) – A list of passive branches which are to be tested for outages. If None, it’s take as all network.passive_branches_i()
solver_name (string) – Must be a solver name that pyomo recognises and that is installed, e.g. “glpk”, “gurobi”
skip_pre (bool, default False) – Skip the preliminary steps of computing topology, calculating dependent values and finding bus controls.
extra_functionality (callable function) – This function must take two arguments extra_functionality(network,snapshots) and is called after the model building is complete, but before it is sent to the solver. It allows the user to add/change constraints and add/change the objective function.
solver_options (dictionary) – A dictionary with additional options that get passed to the solver. (e.g. {‘threads’:2} tells gurobi to use only 2 cpus)
keep_files (bool, default False) – Keep the files that pyomo constructs from OPF problem construction, e.g. .lp file - useful for debugging
formulation (string) – Formulation of the linear power flow equations to use; must be one of [“angles”,”cycles”,”kirchoff”,”ptdf”]
ptdf_tolerance (float) –
- Return type
None
Examples
>>> network.sclopf(network, branch_outages)
Sub-Network
- class pypsa.SubNetwork(network, name='')
Connected network of electric buses (AC or DC) with passive flows or isolated non-electric buses.
Generated by network.determine_network_topology().
- adjacency_matrix(branch_components=None, busorder=None, weights=None)
Construct a sparse adjacency matrix (directed)
- Parameters
branch_components (iterable sublist of branch_components) – Buses connected by any of the selected branches are adjacent (default: branch_components (network) or passive_branch_components (sub_network))
busorder (pd.Index subset of network.buses.index) – Basis to use for the matrix representation of the adjacency matrix (default: buses.index (network) or buses_i() (sub_network))
weights (pd.Series or None (default)) – If given must provide a weight for each branch, multi-indexed on branch_component name and branch name.
- Returns
adjacency_matrix – Directed adjacency matrix
- Return type
sp.sparse.coo_matrix
- calculate_BODF(skip_pre=False)
Calculate the Branch Outage Distribution Factor (BODF) for sub_network.
Sets sub_network.BODF as a (dense) numpy array.
The BODF is a num_branch x num_branch 2d array.
For the outage of branch l, the new flow on branch k is given in terms of the flow before the outage
f_k^after = f_k^before + BODF_{kl} f_l^before
Note that BODF_{ll} = -1.
- Parameters
sub_network (pypsa.SubNetwork) –
skip_pre (bool, default False) – Skip the preliminary step of computing the PTDF.
Examples
>>> sub_network.caculate_BODF()
- calculate_B_H(skip_pre=False)
Calculate B and H matrices for AC or DC sub-networks.
- calculate_PTDF(skip_pre=False)
Calculate the Power Transfer Distribution Factor (PTDF) for sub_network.
Sets sub_network.PTDF as a (dense) numpy array.
- Parameters
sub_network (pypsa.SubNetwork) –
skip_pre (bool, default False) – Skip the preliminary steps of computing topology, calculating dependent values, finding bus controls and computing B and H.
- calculate_Y(skip_pre=False)
Calculate bus admittance matrices for AC sub-networks.
- find_bus_controls()
Find slack and all PV and PQ buses for a sub_network. This function also fixes sub_network.buses_o, a DataFrame ordered by control type.
- find_slack_bus()
Find the slack bus in a connected sub-network.
- graph(branch_components=None, weight=None, inf_weight=False)
Build NetworkX graph.
- Parameters
network (Network|SubNetwork) –
branch_components ([str]) – Components to use as branches. The default are passive_branch_components in the case of a SubNetwork and branch_components in the case of a Network.
weight (str) – Branch attribute to use as weight
inf_weight (bool|float) – How to treat infinite weights (default: False). True keeps the infinite weight. False skips edges with infinite weight. If a float is given it is used instead.
- Returns
graph – NetworkX graph
- Return type
OrderedGraph
- incidence_matrix(branch_components=None, busorder=None)
Construct a sparse incidence matrix (directed)
- Parameters
branch_components (iterable sublist of branch_components) – Buses connected by any of the selected branches are adjacent (default: branch_components (network) or passive_branch_components (sub_network))
busorder (pd.Index subset of network.buses.index) – Basis to use for the matrix representation of the adjacency matrix (default: buses.index (network) or buses_i() (sub_network))
- Returns
incidence_matrix – Directed incidence matrix
- Return type
sp.sparse.csr_matrix
- lpf(snapshots=None, skip_pre=False)
Linear power flow for connected sub-network.
- Parameters
snapshots (list-like|single snapshot) – A subset or an elements of network.snapshots on which to run the power flow, defaults to network.snapshots
skip_pre (bool, default False) – Skip the preliminary steps of computing topology, calculating dependent values and finding bus controls.
- Return type
None
- pf(snapshots=None, skip_pre=False, x_tol=1e-06, use_seed=False, distribute_slack=False, slack_weights='p_set')
Non-linear power flow for connected sub-network.
- Parameters
snapshots (list-like|single snapshot) – A subset or an elements of network.snapshots on which to run the power flow, defaults to network.snapshots
skip_pre (bool, default False) – Skip the preliminary steps of computing topology, calculating dependent values and finding bus controls.
x_tol (float) – Tolerance for Newton-Raphson power flow.
use_seed (bool, default False) – Use a seed for the initial guess for the Newton-Raphson algorithm.
distribute_slack (bool, default False) – If
True
, distribute the slack power across generators proportional to generator dispatch by default or according to the distribution scheme provided inslack_weights
. IfFalse
only the slack generator takes up the slack.slack_weights (pandas.Series|str, default 'p_set') – Distribution scheme describing how to determine the fraction of the total slack power a bus of the subnetwork takes up. Default is to distribute proportional to generator dispatch (‘p_set’). Another option is to distribute proportional to (optimised) nominal capacity (‘p_nom’ or ‘p_nom_opt’). Custom weights can be provided via a pandas.Series/dict that has the buses or the generators of the subnetwork as index/keys. When using custom weights with buses as index/keys the slack power of a bus is distributed among its generators in proportion to their nominal capacity (
p_nom
) if given, otherwise evenly.
- Returns
Tuple of three pandas.Series indicating number of iterations,
remaining error, and convergence status for each snapshot