diff --git a/pandapower/__init__.py b/pandapower/__init__.py index 28b3e84a4..fa8ea64ae 100644 --- a/pandapower/__init__.py +++ b/pandapower/__init__.py @@ -3,6 +3,8 @@ from pandapower._version import __version__, __format_version__ +from pandapower.network import ADict, pandapowerNet + from pandapower.auxiliary import * # TODO: some functions shouldn't be available with import pandapower from pandapower.std_types import * from pandapower.create import * diff --git a/pandapower/auxiliary.py b/pandapower/auxiliary.py index 6ca526a6a..411579a1d 100644 --- a/pandapower/auxiliary.py +++ b/pandapower/auxiliary.py @@ -3,33 +3,8 @@ # Copyright (c) 2016-2026 by University of Kassel and Fraunhofer Institute for Energy Economics # and Energy System Technology (IEE), Kassel. All rights reserved. - -# Additional copyright for modified code by Brendan Curran-Johnson (ADict class): -# Copyright (c) 2013 Brendan Curran-Johnson -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# (https://github.com/bcj/AttrDict/blob/master/LICENSE.txt) - -import copy import numbers import warnings -from collections.abc import MutableMapping from importlib.metadata import PackageNotFoundError from importlib.metadata import version as version_str from typing import ( @@ -60,6 +35,7 @@ from pandapower.pypower.idx_ssc import SSC_STATUS, SSC_BUS, SSC_INTERNAL_BUS from pandapower.pypower.idx_tcsc import TCSC_STATUS, TCSC_F_BUS, TCSC_T_BUS from pandapower.pypower.idx_vsc import VSC_STATUS, VSC_BUS, VSC_INTERNAL_BUS, VSC_BUS_DC, VSC_INTERNAL_BUS_DC +from pandapower.network import pandapowerNet try: from lightsim2grid.newtonpf import newtonpf_new as newtonpf_ls @@ -173,351 +149,11 @@ def warn_and_fix_parameter_renaming( return new_parameter -class ADict(dict[str, Any], MutableMapping[str, Any]): - _allow_invalid_attributes: bool - - def __init__(self, *args: Any, **kwargs: Any) -> None: - super().__init__(*args, **kwargs) - - # to prevent overwrite of internal attributes by new keys - # see _valid_name() - self._setattr('_allow_invalid_attributes', False) - - def _build(self, obj: T, **kwargs: Any) -> T: - """ - We only want dict like elements to be treated as recursive AttrDicts. - """ - return obj - - # --- taken from AttrDict - - def __getstate__(self) -> tuple[dict[str, Any], bool]: - return self.copy(), self._allow_invalid_attributes - - def __dir__(self) -> list[str]: - return list(self.keys()) - - def __setstate__(self, state: tuple[dict[str, Any], bool]) -> None: - mapping, allow_invalid_attributes = state - self.update(mapping) - self._setattr('_allow_invalid_attributes', allow_invalid_attributes) - - @classmethod - def _constructor(cls, mapping: dict[str, Any]) -> "ADict": - return cls(mapping) - - # --- taken from MutableAttr - - def _setattr(self, key: str, value: Any) -> None: - """ - Add an attribute to the object, without attempting to add it as - a key to the mapping (i.e. internals) - """ - super(MutableMapping, self).__setattr__(key, value) - - def __setattr__(self, key: str, value: Any) -> None: - """ - Add an attribute. - - key: The name of the attribute - value: The attributes contents - """ - if self._valid_name(key): - self[key] = value - elif getattr(self, '_allow_invalid_attributes', True): - super(MutableMapping, self).__setattr__(key, value) - else: - raise TypeError( - "'{cls}' does not allow attribute creation.".format( - cls=self.__class__.__name__ - ) - ) - - def _delattr(self, key: str) -> None: - """ - Delete an attribute from the object, without attempting to - remove it from the mapping (i.e. internals) - """ - super(MutableMapping, self).__delattr__(key) - - def __delattr__(self, key: str, force: bool = False) -> None: - """ - Delete an attribute. - - key: The name of the attribute - """ - if self._valid_name(key): - del self[key] - elif getattr(self, '_allow_invalid_attributes', True): - super(MutableMapping, self).__delattr__(key) - else: - raise TypeError( - "'{cls}' does not allow attribute deletion.".format( - cls=self.__class__.__name__ - ) - ) - - def __call__(self, key: str) -> Any: - """ - Dynamically access a key-value pair. - - key: A key associated with a value in the mapping. - - This differs from __getitem__, because it returns a new instance - of an Attr (if the value is a Mapping object). - """ - if key not in self: - raise AttributeError( - "'{cls} instance has no attribute '{name}'".format( - cls=self.__class__.__name__, name=key - ) - ) - - return self._build(self[key]) - - def __getattr__(self, key: str) -> Any: - """ - Access an item as an attribute. - """ - if key not in self or not self._valid_name(key): - raise AttributeError( - "'{cls}' instance has no attribute '{name}'".format( - cls=self.__class__.__name__, name=key - ) - ) - - return self._build(self[key]) - - def __deepcopy__(self, memo: dict[int, Any]) -> "ADict": - """ - overloads the deepcopy function of pandapower if at least one DataFrame with column - "object" is in net - - in addition, line geodata can contain mutable objects like lists, and it is also treated - specially - - reason: some of these objects contain a reference to net which breaks the default deepcopy - function. Also, the DataFrame doesn't deepcopy its elements if geodata changes in the - lists, it affects both net instances - This fix was introduced in pandapower 2.2.1 - - """ - deep_columns = {'object', 'coords', 'geometry'} - cls = self.__class__ - result = cls.__new__(cls) - memo[id(self)] = result - for k, v in self.items(): - if isinstance(v, pd.DataFrame) and not set(v.columns).isdisjoint(deep_columns): - if k not in result: - result[k] = v.__class__(index=v.index, columns=v.columns) - for col in v.columns: - if col in deep_columns: - result[k][col] = v[col].apply(lambda x: copy.deepcopy(x, memo)) - else: - result[k][col] = copy.deepcopy(v[col], memo) - _preserve_dtypes(result[k], v.dtypes) - else: - setattr(result, k, copy.deepcopy(v, memo)) - - result._setattr('_allow_invalid_attributes', self._allow_invalid_attributes) - return result - - @classmethod - def _valid_name(cls, key: Any) -> bool: - """ - Check whether a key is a valid attribute name. - - A key may be used as an attribute if: - * It is a string - * The key doesn't overlap with any class attributes (for Attr, - those would be 'get', 'items', 'keys', 'values', 'mro', and - 'register'). - """ - return ( - isinstance(key, str) and - not hasattr(cls, key) - ) - - -class pandapowerNet(ADict): - """ - pandapowerNet constructor - given dict needs to contain the pandapower network dataframes, for example use classmethod create_dataframes - """ - bus: pd.DataFrame - load: pd.DataFrame - sgen: pd.DataFrame - motor: pd.DataFrame - asymmetric_load: pd.DataFrame - asymmetric_sgen: pd.DataFrame - storage: pd.DataFrame - gen: pd.DataFrame - switch: pd.DataFrame - shunt: pd.DataFrame - svc: pd.DataFrame - ssc: pd.DataFrame - ext_grid: pd.DataFrame - line: pd.DataFrame - trafo: pd.DataFrame - trafo3w: pd.DataFrame - impedance: pd.DataFrame - tcsc: pd.DataFrame - dcline: pd.DataFrame - ward: pd.DataFrame - xward: pd.DataFrame - measurement: pd.DataFrame - pwl_cost: pd.DataFrame - poly_cost: pd.DataFrame - characteristic: pd.DataFrame - controller: pd.DataFrame - group: pd.DataFrame - line_geodata: pd.DataFrame - bus_geodata: pd.DataFrame - res_bus: pd.DataFrame - res_line: pd.DataFrame - res_trafo: pd.DataFrame - res_trafo3w: pd.DataFrame - res_impedance: pd.DataFrame - res_ext_grid: pd.DataFrame - res_load: pd.DataFrame - res_motor: pd.DataFrame - res_sgen: pd.DataFrame - res_storage: pd.DataFrame - res_shunt: pd.DataFrame - res_gen: pd.DataFrame - res_ward: pd.DataFrame - res_xward: pd.DataFrame - res_dcline: pd.DataFrame - res_asymmetric_load: pd.DataFrame - res_asymmetric_sgen: pd.DataFrame - res_switch: pd.DataFrame - res_tcsc: pd.DataFrame - res_svc: pd.DataFrame - res_ssc: pd.DataFrame - res_bus_est: pd.DataFrame - res_line_est: pd.DataFrame - res_trafo_est: pd.DataFrame - res_trafo3w_est: pd.DataFrame - res_impedance_est: pd.DataFrame - res_switch_est: pd.DataFrame - res_bus_sc: pd.DataFrame - res_line_sc: pd.DataFrame - res_trafo_sc: pd.DataFrame - res_trafo3w_sc: pd.DataFrame - res_ext_grid_sc: pd.DataFrame - res_gen_sc: pd.DataFrame - res_sgen_sc: pd.DataFrame - res_switch_sc: pd.DataFrame - res_bus_3ph: pd.DataFrame - res_line_3ph: pd.DataFrame - res_trafo_3ph: pd.DataFrame - res_ext_grid_3ph: pd.DataFrame - res_shunt_3ph: pd.DataFrame - res_load_3ph: pd.DataFrame - res_sgen_3ph: pd.DataFrame - res_storage_3ph: pd.DataFrame - res_asymmetric_load_3ph: pd.DataFrame - res_asymmetric_sgen_3ph: pd.DataFrame - _empty_res_bus: pd.DataFrame - _empty_res_ext_grid: pd.DataFrame - _empty_res_line: pd.DataFrame - _empty_res_trafo: pd.DataFrame - _empty_res_load: pd.DataFrame - _empty_res_asymmetric_load: pd.DataFrame - _empty_res_asymmetric_sgen: pd.DataFrame - _empty_res_motor: pd.DataFrame - _empty_res_sgen: pd.DataFrame - _empty_res_shunt: pd.DataFrame - _empty_res_svc: pd.DataFrame - _empty_res_ssc: pd.DataFrame - _empty_res_switch: pd.DataFrame - _empty_res_impedance: pd.DataFrame - _empty_res_tcsc: pd.DataFrame - _empty_res_dcline: pd.DataFrame - _empty_res_ward: pd.DataFrame - _empty_res_xward: pd.DataFrame - _empty_res_trafo_3ph: pd.DataFrame - _empty_res_trafo3w: pd.DataFrame - _empty_res_bus_3ph: pd.DataFrame - _empty_res_ext_grid_3ph: pd.DataFrame - _empty_res_line_3ph: pd.DataFrame - _empty_res_asymmetric_load_3ph: pd.DataFrame - _empty_res_asymmetric_sgen_3ph: pd.DataFrame - _empty_res_storage: pd.DataFrame - _empty_res_storage_3ph: pd.DataFrame - _empty_res_gen: pd.DataFrame - _empty_res_protection: pd.DataFrame - _empty_res_load_3ph: pd.DataFrame - _empty_res_sgen_3ph: pd.DataFrame - - version: str - format_version: str - converged: bool - OPF_converged: bool - name: str - f_hz: float - sn_mva: float - std_types: dict[str, Any] - user_pf_options: dict[str, Any] - _ppc: PyPowerNetwork | None - _ppc0: PyPowerNetwork | None - _ppc1: PyPowerNetwork | None - _ppc2: PyPowerNetwork | None - _is_elements: pd.DataFrame | None - _pd2ppc_lookups: dict[str, Any] - - def __init__(self, *args: Any, **kwargs: Any): - super().__init__(*args, **kwargs) - if isinstance(args[0], self.__class__): - net = args[0] - self.clear() - self.update(**copy.deepcopy(net)) - - for key in self: - if isinstance(self[key], list) and len(self[key]) == 1: - self[key] = self[key][0] - - @classmethod - def create_dataframes(cls, data): - for key in data: #TODO: change index dtype to np.uint32 - if isinstance(data[key], dict): - data[key] = pd.DataFrame(columns=data[key].keys(), index=pd.Index([], dtype=np.int64)).astype(data[key]) - return data - - def __repr__(self) -> str: # pragma: no cover - """ - See Also - -------- - count_elements - """ - par = [] - res = [] - for et in list(self.keys()): - if not et.startswith("_") and isinstance(self[et], pd.DataFrame) and len(self[et]) > 0: - n_rows = self[et].shape[0] - if 'res_' in et: - res.append(f" - {et} ({n_rows} element{plural_s(n_rows)})") - elif et == 'group': - n_groups = len(set(self[et].index)) - par.append(f" - {et} ({n_groups} group{plural_s(n_groups)}, {n_rows} row{plural_s(n_rows)})") - else: - par.append(f" - {et} ({n_rows} element{plural_s(n_rows)})") - res_cost = [" and the following result values:", - " - %s" % "res_cost"] if "res_cost" in self.keys() else [] - if not len(par) + len(res): - return "This pandapower network is empty" - if len(res): - res = [" and the following results tables:"] + res - lines = ["This pandapower network includes the following parameter tables:"] + \ - par + res + res_cost - return "\n".join(lines) - - @pd.api.extensions.register_series_accessor("geojson") class GeoAccessor: """ pandas Series accessor for the geo column. It facilitates the use of geojson strings. - NaN entrys are dropped using the accessor! + NaN entries are dropped using the accessor! """ def __init__(self, pandas_obj: "pdt.Series[str]") -> None: @@ -544,8 +180,6 @@ def _extract_coords(x: GeoJSON) -> NDArray[np.float64] | list[NDArray[np.float64 def _coords(self): """ Extracts the geometry coordinates from the GeoJSON strings. - It is not recommended to use the standalone coordinates. - Important informations like the crs or latlon/lonlat are lost as a result. """ return self._obj.dropna().apply(loads).apply(self._extract_coords) @@ -566,14 +200,14 @@ def type(self) -> pdt.Series[str]: @property def as_shapely_obj(self) -> pdt.Series: """ - Converts the GeoJSON strings to shapely geometrys. + Converts the GeoJSON strings to shapely geometries. """ return self._obj.dropna().apply(from_geojson) @property def as_geoseries(self) -> "GeoSeries": """ - Converts the PandasSeries to a GeoSeries with shapely geometrys. + Converts the PandasSeries to a GeoSeries with shapely geometries. """ return GeoSeries(self._obj.dropna().pipe(from_geojson), crs=4326, index=self._obj.dropna().index) @@ -594,10 +228,6 @@ def wrapper(*args, **kwargs): raise AttributeError(f"'GeoAccessor' object has no attribute '{item}'") -def plural_s(number: int | float) -> str: - return "" if number == 1 else "s" - - EtType = Literal["b", "l", "t", "t3", "i"] ElementType = Literal["bus", "line", "trafo", "trafo3w", "impedance"] diff --git a/pandapower/build_branch.py b/pandapower/build_branch.py index aac76dba4..2b9f436b8 100644 --- a/pandapower/build_branch.py +++ b/pandapower/build_branch.py @@ -14,7 +14,8 @@ from numpy.typing import NDArray import pandas as pd -from pandapower.auxiliary import get_values, pandapowerNet +from pandapower.auxiliary import get_values +from pandapower import pandapowerNet from pandapower.pypower.idx_brch import F_BUS, T_BUS, BR_R, BR_X, BR_B, BR_G, TAP, SHIFT, BR_STATUS, RATE_A, \ BR_R_ASYM, BR_X_ASYM, BR_G_ASYM, BR_B_ASYM, branch_cols from pandapower.pypower.idx_brch_dc import branch_dc_cols, DC_RATE_A, DC_RATE_B, DC_RATE_C, DC_BR_STATUS, DC_F_BUS, \ diff --git a/pandapower/contingency/contingency_parallel.py b/pandapower/contingency/contingency_parallel.py index 973fded17..c37076f64 100644 --- a/pandapower/contingency/contingency_parallel.py +++ b/pandapower/contingency/contingency_parallel.py @@ -4,7 +4,7 @@ import multiprocessing as mp from functools import partial from pandapower.run import runpp -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet import logging diff --git a/pandapower/control/controller/dmr_control.py b/pandapower/control/controller/dmr_control.py index 914c70eb7..ec7fe45da 100644 --- a/pandapower/control/controller/dmr_control.py +++ b/pandapower/control/controller/dmr_control.py @@ -3,7 +3,7 @@ # Copyright (c) 2016-2026 by University of Kassel and Fraunhofer Institute for Energy Economics # and Energy System Technology (IEE), Kassel. All rights reserved. -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from pandapower.control.basic_controller import Controller import numpy as np import logging diff --git a/pandapower/convert_format.py b/pandapower/convert_format.py index 4a8fcd4ab..d2e9b2005 100644 --- a/pandapower/convert_format.py +++ b/pandapower/convert_format.py @@ -10,11 +10,12 @@ from packaging.version import Version from pandapower._version import __version__, __format_version__ -from pandapower.create import create_empty_network, create_poly_cost -from pandapower.results import reset_results +from pandapower import pandapowerNet from pandapower.control import TrafoController, BinarySearchControl, DroopControl +from pandapower.create import create_poly_cost +from pandapower.results import reset_results +from pandapower.network_structure import get_structure_dict from pandapower.plotting.geo import convert_geodata_to_geojson, _is_valid_number -from pandapower.auxiliary import pandapowerNet import logging @@ -142,7 +143,7 @@ def correct_dtypes(net, error): Corrects all dtypes of pp element tables if possible. If not and error is True, an Error is raised. """ - empty_net = create_empty_network() + empty_net = pandapowerNet(name='') not_corrected = [] failed = {} for key, table in empty_net.items(): @@ -203,8 +204,7 @@ def _convert_trafo_controller_parameter_names(net): def _convert_bus_pq_meas_to_load_reference(net, elements_to_deserialize): if _check_elements_to_deserialize('measurement', elements_to_deserialize): - bus_pq_meas_mask = net.measurement.measurement_type.isin(["p", "q"]) & \ - (net.measurement.element_type == "bus") + bus_pq_meas_mask = net.measurement.measurement_type.isin(["p", "q"]) & (net.measurement.element_type == "bus") net.measurement.loc[bus_pq_meas_mask, "value"] *= -1 @@ -265,11 +265,9 @@ def _add_nominal_power(net): def _add_missing_tables(net): - net_new = create_empty_network() + net_new = pandapowerNet(name='') for key in net_new.keys(): - if key.startswith("_empty_res"): - net[key] = net_new[key] - elif key not in net.keys(): + if key.startswith("_empty_res") or key not in net.keys(): net[key] = net_new[key] @@ -283,13 +281,13 @@ def _create_seperate_cost_tables(net, elements_to_deserialize): "cost_per_kw" in net.sgen: for index, cost in net.sgen.cost_per_kw.items(): if not np.isnan(cost): - create_poly_cost(net, index, "sgen", cp1_eur_per_kw=cost) + create_poly_cost(net, index, "sgen", cp1_eur_per_mw=cost*1000) if _check_elements_to_deserialize('ext_grid', elements_to_deserialize) and \ "cost_per_kw" in net.ext_grid: for index, cost in net.ext_grid.cost_per_kw.items(): if not np.isnan(cost): - create_poly_cost(net, index, "ext_grid", cp1_eur_per_kw=cost) + create_poly_cost(net, index, "ext_grid", cp1_eur_per_mw=cost*1000) if _check_elements_to_deserialize('gen', elements_to_deserialize) and \ "cost_per_kvar" in net.gen: @@ -332,7 +330,9 @@ def _rename_columns(net, elements_to_deserialize): if _check_elements_to_deserialize('measurement', elements_to_deserialize): if "measurement" in net and "type" in net.measurement and "measurement": if net.measurement.empty: - net["measurement"] = create_empty_network()["measurement"] + ms = "measurement" + net[ms] = pandapowerNet.create_dataframes({ms: get_structure_dict()[ms]})[ms] + # TODO: improve this code to avoid this complex structure just so create_dataframes only creates one df else: net.measurement["side"] = None bus_measurements = net.measurement.element_type == "bus" @@ -576,7 +576,7 @@ def _update_column(column): def _set_data_type_of_columns(net): - new_net = create_empty_network() + new_net = pandapowerNet(name='') for key, item in net.items(): if isinstance(item, pd.DataFrame): for col in item.columns: diff --git a/pandapower/converter/cim/cim2pp/build_pp_net.py b/pandapower/converter/cim/cim2pp/build_pp_net.py index 53ac0d99f..1c9f60c16 100644 --- a/pandapower/converter/cim/cim2pp/build_pp_net.py +++ b/pandapower/converter/cim/cim2pp/build_pp_net.py @@ -10,8 +10,7 @@ from pandapower.toolbox.grid_modification import fuse_buses from pandapower.run import runpp -from pandapower.create import create_empty_network -from pandapower.auxiliary import pandapowerNet +from pandapower.network import pandapowerNet from .convert_measurements import CreateMeasurements from .. import cim_classes from .. import cim_tools @@ -33,7 +32,10 @@ def __init__(self, cim_parser: cim_classes.CimParser, converter_classes: Dict, self.cim_version = cim_version.lower() if cim_version is not None else '2.4.15' self.kwargs = kwargs self.cim: Dict[str, Dict[str, pd.DataFrame]] = self.cim_parser.get_cim_dict() - self.net: pandapowerNet = create_empty_network() + name = self.cim_parser.file_names.get("eq", "CimConverter") + if name.endswith("_eq"): + name = name[:-3] + self.net: pandapowerNet = pandapowerNet(name=name) self.bus_merge: pd.DataFrame = pd.DataFrame() self.power_trafo2w: pd.DataFrame = pd.DataFrame() self.power_trafo3w: pd.DataFrame = pd.DataFrame() diff --git a/pandapower/converter/cim/cim2pp/convert_measurements.py b/pandapower/converter/cim/cim2pp/convert_measurements.py index 7b35695d7..edaefdf43 100644 --- a/pandapower/converter/cim/cim2pp/convert_measurements.py +++ b/pandapower/converter/cim/cim2pp/convert_measurements.py @@ -7,7 +7,7 @@ from typing import Dict import pandas as pd import numpy as np -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from .. import cim_tools diff --git a/pandapower/converter/cim/cim2pp/from_cim.py b/pandapower/converter/cim/cim2pp/from_cim.py index 81ef53f87..93758212f 100644 --- a/pandapower/converter/cim/cim2pp/from_cim.py +++ b/pandapower/converter/cim/cim2pp/from_cim.py @@ -7,7 +7,7 @@ import time from typing import Union, List, Type, Dict -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from . import build_pp_net from . import converter_classes as std_converter_classes from .. import cim_classes @@ -68,8 +68,8 @@ def from_cim_dict(cim_parser: cim_classes.CimParser, log_debug=False, convert_li return pp_net -def get_converter_classes(): - converter_classes: Dict[str, classmethod] = { +def get_converter_classes() -> dict[str, object]: + converter_classes: dict[str, object] = { 'ConnectivityNodesCim16': std_converter_classes.connectivitynodes.connectivityNodesCim16.ConnectivityNodesCim16, 'externalNetworkInjectionsCim16': std_converter_classes.externalnetworks.externalNetworkInjectionsCim16.ExternalNetworkInjectionsCim16, diff --git a/pandapower/converter/cim/cim_tools.py b/pandapower/converter/cim/cim_tools.py index 29e0272b8..bb9c8e6ad 100644 --- a/pandapower/converter/cim/cim_tools.py +++ b/pandapower/converter/cim/cim_tools.py @@ -6,7 +6,7 @@ import json from typing import Dict, List import numpy as np -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet import pandas as pd logger = logging.getLogger(__name__) diff --git a/pandapower/converter/cim/pp_classes.py b/pandapower/converter/cim/pp_classes.py index e3f3772bd..6b6af7ea0 100644 --- a/pandapower/converter/cim/pp_classes.py +++ b/pandapower/converter/cim/pp_classes.py @@ -8,7 +8,7 @@ from . import cim_tools from pandapower.diagnostic import diagnostic -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet class PandapowerDiagnostic: diff --git a/pandapower/converter/cim/pp_tools.py b/pandapower/converter/cim/pp_tools.py index ec29029c2..3e22e2559 100644 --- a/pandapower/converter/cim/pp_tools.py +++ b/pandapower/converter/cim/pp_tools.py @@ -8,7 +8,7 @@ import pandas as pd -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from pandapower.create import create_bus, create_ext_grid, create_lines from pandapower.network_structure import get_structure_dict from pandapower.std_types import create_std_type diff --git a/pandapower/converter/jao/from_jao.py b/pandapower/converter/jao/from_jao.py index c44047855..81813abde 100644 --- a/pandapower/converter/jao/from_jao.py +++ b/pandapower/converter/jao/from_jao.py @@ -11,9 +11,10 @@ import numpy as np import pandas as pd from pandas.api.types import is_integer_dtype, is_object_dtype -from pandapower.io_utils import pandapowerNet -from pandapower.create import create_empty_network, create_buses, create_lines_from_parameters, \ - create_transformers_from_parameters +from pandapower.network import pandapowerNet +from pandapower.create import ( + create_buses, create_lines_from_parameters, create_transformers_from_parameters +) from pandapower.topology import create_nxgraph, connected_components from pandapower.plotting import set_line_geodata_from_bus_geodata from pandapower.toolbox.grid_modification import drop_buses, fuse_buses @@ -119,8 +120,10 @@ def from_jao(excel_file_path: str, logger.error(f"html data were ignored due to this error:\n{e}") # --- create the pandapower net - net = create_empty_network(name=os.path.splitext(os.path.basename(excel_file_path))[0], - **{key: val for key, val in kwargs.items() if key == "sn_mva"}) + net = pandapowerNet( + name=os.path.splitext(os.path.basename(excel_file_path))[0], + sn_mva=kwargs.get("sn_mva", 1.) + ) _create_buses_from_line_data(net, data) _create_lines(net, data, max_i_ka_fillna) _create_transformers_and_buses(net, data, **kwargs) diff --git a/pandapower/converter/pandamodels/from_pm.py b/pandapower/converter/pandamodels/from_pm.py index 3fb66c7c1..450c73e62 100644 --- a/pandapower/converter/pandamodels/from_pm.py +++ b/pandapower/converter/pandamodels/from_pm.py @@ -8,7 +8,8 @@ import numpy as np import pandas as pd from copy import deepcopy -from pandapower.auxiliary import _clean_up, pandapowerNet +from pandapower.auxiliary import _clean_up +from pandapower import pandapowerNet from pandapower.pypower.idx_brch import PF, PT, QF, QT, BR_STATUS from pandapower.pypower.idx_bus import VA, VM from pandapower.pypower.idx_gen import PG, QG diff --git a/pandapower/converter/powerfactory/pp_import_functions.py b/pandapower/converter/powerfactory/pp_import_functions.py index ef079aa10..2031ec8dd 100644 --- a/pandapower/converter/powerfactory/pp_import_functions.py +++ b/pandapower/converter/powerfactory/pp_import_functions.py @@ -4,33 +4,37 @@ import re from itertools import combinations from typing import Literal, Optional, Union +import logging import geojson import networkx as nx import numpy as np from pandas import DataFrame, Series, concat, isna -from pandapower.auxiliary import ADict, get_free_id -from pandapower.control import ContinuousTapControl, DiscreteTapControl, _create_trafo_characteristics, \ - BinarySearchControl, DroopControl, VDroopControl_local - -from pandapower.create import create_empty_network, create_bus, create_bus_dc, create_load, create_switch, \ - create_shunt, create_line, create_line_from_parameters, create_line_dc, create_sgen, create_gen, create_ext_grid, \ - create_asymmetric_sgen, create_line_dc_from_parameters, create_asymmetric_load, create_transformer, \ - create_transformer_from_parameters, create_transformer3w_from_parameters, create_impedance, create_xward, \ - create_ward, create_series_reactor_as_impedance, create_vsc as _create_vsc +from pandapower.auxiliary import get_free_id +from pandapower.control import ( + ContinuousTapControl, DiscreteTapControl, BinarySearchControl, DroopControl, VDroopControl_local +) +from pandapower.create import ( + create_bus, create_bus_dc, create_load, create_switch, create_shunt, create_line, + create_line_from_parameters, create_line_dc, create_sgen, create_gen, create_ext_grid, create_asymmetric_sgen, + create_line_dc_from_parameters, create_asymmetric_load, create_transformer, create_transformer_from_parameters, + create_transformer3w_from_parameters, create_impedance, create_xward, create_ward, + create_series_reactor_as_impedance, create_vsc as _create_vsc +) +from pandapower.network import ADict, pandapowerNet from pandapower.results import reset_results from pandapower.run import set_user_pf_options -from pandapower.std_types import add_zero_impedance_parameters, std_type_exists, create_std_type, available_std_types, \ - load_std_type +from pandapower.std_types import ( + add_zero_impedance_parameters, std_type_exists, create_std_type, available_std_types, load_std_type +) from pandapower.toolbox.grid_modification import set_isolated_areas_out_of_service, drop_inactive_elements, drop_buses -from pandapower.topology import create_nxgraph, calc_distance_to_bus -from pandapower.control.util.auxiliary import create_q_capability_characteristics_object, \ - get_min_max_q_mvar_from_characteristics_object +from pandapower.topology import create_nxgraph +from pandapower.control.util.auxiliary import ( + create_q_capability_characteristics_object, get_min_max_q_mvar_from_characteristics_object +) from pandapower.control.util.characteristic import SplineCharacteristic -import logging - logger = logging.getLogger(__name__) # Define global variables @@ -45,6 +49,7 @@ def ga(element, attr): return element.GetAttribute(attr) + def from_pf( dict_net, pv_as_slack=True, @@ -74,7 +79,7 @@ def from_pf( logger.debug('collecting grid') grid_name = dict_net['ElmNet'].loc_name base_sn_mva = dict_net['global_parameters']['base_sn_mva'] - net = create_empty_network(grid_name, sn_mva=base_sn_mva) + net = pandapowerNet(name=grid_name, sn_mva=base_sn_mva) reset_results(net, mode="pf_3ph") if max_iter is not None: diff --git a/pandapower/converter/pypower/from_ppc.py b/pandapower/converter/pypower/from_ppc.py index b2a4ed120..6b6fb9e2d 100644 --- a/pandapower/converter/pypower/from_ppc.py +++ b/pandapower/converter/pypower/from_ppc.py @@ -6,17 +6,15 @@ from math import pi import numpy as np import pandas as pd -from pandapower.auxiliary import pandapowerNet -from pandapower.pypower.idx_bus import \ - BUS_I, BUS_TYPE, PD, QD, GS, BS, BUS_AREA, VM, VA, BASE_KV, ZONE, VMAX, VMIN -from pandapower.pypower.idx_gen import \ - GEN_BUS, PG, QG, QMAX, QMIN, VG, MBASE, GEN_STATUS, PMAX, PMIN -from pandapower.pypower.idx_brch import \ - F_BUS, T_BUS, BR_R, BR_X, BR_G, BR_B, RATE_A, RATE_B, RATE_C, TAP, SHIFT, BR_STATUS, ANGMIN, ANGMAX +from pandapower.network import pandapowerNet +from pandapower.pypower.idx_bus import BUS_I, BUS_TYPE, PD, QD, GS, BS, VA, BASE_KV, ZONE, VMAX, VMIN +from pandapower.pypower.idx_gen import GEN_BUS, PG, QG, QMAX, QMIN, VG, MBASE, GEN_STATUS, PMAX, PMIN +from pandapower.pypower.idx_brch import F_BUS, T_BUS, BR_R, BR_X, BR_B, RATE_A, TAP, SHIFT, BR_STATUS from pandapower.pypower.idx_cost import MODEL, COST, NCOST -from pandapower.create import create_empty_network, create_buses, create_ext_grid, create_loads, \ - create_sgens, create_gens, create_lines_from_parameters, create_transformers_from_parameters, \ - create_shunts, create_ext_grid, create_pwl_costs, create_poly_costs, create_impedances +from pandapower.create import ( + create_buses, create_loads, create_sgens, create_gens, create_lines_from_parameters, create_shunts, create_ext_grid, + create_transformers_from_parameters, create_pwl_costs, create_poly_costs, create_impedances +) from pandapower.run import runpp import logging @@ -53,7 +51,7 @@ def from_ppc(ppc, f_hz=50, validate_conversion=False, **kwargs) -> pandapowerNet if np.any(ppc['bus'][:, BASE_KV] <= 0): logger.info('There are false baseKV given in the pypower case file.') - net = create_empty_network(f_hz=f_hz, sn_mva=ppc["baseMVA"]) + net = pandapowerNet(name="from_ppc", f_hz=f_hz, sn_mva=ppc["baseMVA"]) net._from_ppc_lookups = dict() _from_ppc_bus(net, ppc) diff --git a/pandapower/converter/ucte/from_ucte.py b/pandapower/converter/ucte/from_ucte.py index 0688b677a..e4afb6865 100644 --- a/pandapower/converter/ucte/from_ucte.py +++ b/pandapower/converter/ucte/from_ucte.py @@ -4,10 +4,11 @@ # and Energy System Technology (IEE), Kassel. All rights reserved. import logging +from pathlib import Path import time from pandapower.converter.ucte.ucte_converter import UCTE2pandapower from pandapower.converter.ucte.ucte_parser import UCTEParser -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet logger = logging.getLogger('ucte.from_ucte') @@ -23,7 +24,8 @@ def from_ucte_dict(ucte_parser: UCTEParser, slack_as_gen: bool = True) -> pandap :rtype: pandapowerNet """ - ucte_converter = UCTE2pandapower(slack_as_gen=slack_as_gen) + file_name = Path(ucte_parser.path_ucte_file).stem + ucte_converter = UCTE2pandapower(slack_as_gen=slack_as_gen, name=file_name) net = ucte_converter.convert(ucte_parser.get_data()) return net diff --git a/pandapower/converter/ucte/ucte_converter.py b/pandapower/converter/ucte/ucte_converter.py index 6c8b6e3d5..c59005676 100644 --- a/pandapower/converter/ucte/ucte_converter.py +++ b/pandapower/converter/ucte/ucte_converter.py @@ -11,24 +11,24 @@ import numpy as np import pandas as pd -from pandapower.auxiliary import pandapowerNet -from pandapower.create import create_empty_network +from pandapower.network import pandapowerNet class UCTE2pandapower: - def __init__(self, slack_as_gen: bool = True): + def __init__(self, slack_as_gen: bool = True, name: str | None = None): """ Convert UCTE data to pandapower. """ self.logger = logging.getLogger(self.__class__.__name__) self.u_d: dict = {} self.net = self._create_empty_network() + if name is not None: + self.net.name = name self.net.bus["node_name"] = "" self.slack_as_gen = slack_as_gen @staticmethod def _create_empty_network() -> pandapowerNet: - net: pandapowerNet = create_empty_network() new_columns: dict[str, dict] = { "trafo": { "tap2_min": int, @@ -44,6 +44,7 @@ def _create_empty_network() -> pandapowerNet: "line": {"amica_name": str}, "bus": {"ucte_country": str}, } + net: pandapowerNet = pandapowerNet(name="UCTE Converter") for pp_element in new_columns.keys(): for col, dtype in new_columns[pp_element].items(): net[pp_element][col] = pd.Series(dtype=dtype) diff --git a/pandapower/create/_utils.py b/pandapower/create/_utils.py index 7129ac925..433c10d66 100644 --- a/pandapower/create/_utils.py +++ b/pandapower/create/_utils.py @@ -16,12 +16,12 @@ from pandas.api.types import is_object_dtype from pandapower.auxiliary import ( - pandapowerNet, get_free_id, _preserve_dtypes, ensure_iterability, empty_defaults_per_dtype, ) +from pandapower.network import pandapowerNet from pandapower.plotting.geo import _is_valid_number from pandapower.pp_types import Int diff --git a/pandapower/create/bus_create.py b/pandapower/create/bus_create.py index 0a39a938e..7794c2f90 100644 --- a/pandapower/create/bus_create.py +++ b/pandapower/create/bus_create.py @@ -11,7 +11,7 @@ from numpy import nan import numpy.typing as npt -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from pandapower.plotting.geo import _is_valid_number from pandapower.pp_types import BusType, Int from pandapower.create._utils import ( diff --git a/pandapower/create/cost_create.py b/pandapower/create/cost_create.py index 079bb1774..f7374b701 100644 --- a/pandapower/create/cost_create.py +++ b/pandapower/create/cost_create.py @@ -11,7 +11,7 @@ import numpy as np import numpy.typing as npt -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from pandapower.pp_types import Int, CostElementType, PWLPowerType from pandapower.create._utils import ( _cost_existance_check, diff --git a/pandapower/create/ext_grid_create.py b/pandapower/create/ext_grid_create.py index 9ed4bfe20..08deeb582 100644 --- a/pandapower/create/ext_grid_create.py +++ b/pandapower/create/ext_grid_create.py @@ -9,7 +9,7 @@ from numpy import nan, bool_ -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from pandapower.pp_types import Int from pandapower.create._utils import ( _check_element, diff --git a/pandapower/create/gen_create.py b/pandapower/create/gen_create.py index 8b4a56b83..9bf70f2b0 100644 --- a/pandapower/create/gen_create.py +++ b/pandapower/create/gen_create.py @@ -11,7 +11,7 @@ from numpy import nan, bool_ import numpy.typing as npt -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from pandapower.pp_types import Int from pandapower.create._utils import ( _add_to_entries_if_not_nan, diff --git a/pandapower/create/group_create.py b/pandapower/create/group_create.py index 0a2914677..54250c587 100644 --- a/pandapower/create/group_create.py +++ b/pandapower/create/group_create.py @@ -9,7 +9,7 @@ import numpy as np -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from pandapower.create._utils import ( _check_elements_existence, _get_index_with_check, diff --git a/pandapower/create/impedance_create.py b/pandapower/create/impedance_create.py index 98946cd32..f19f2ac53 100644 --- a/pandapower/create/impedance_create.py +++ b/pandapower/create/impedance_create.py @@ -11,7 +11,7 @@ import numpy as np import numpy.typing as npt -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from pandapower.pp_types import Int from pandapower.create._utils import ( _check_branch_element, diff --git a/pandapower/create/line_create.py b/pandapower/create/line_create.py index 23668b049..6fec9be9f 100644 --- a/pandapower/create/line_create.py +++ b/pandapower/create/line_create.py @@ -12,7 +12,7 @@ from numpy import nan, isnan, any as np_any, bool_, all as np_all, float64 import numpy.typing as npt -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from pandapower.std_types import load_std_type from pandapower.pp_types import Int, LineType from pandapower.create._utils import ( diff --git a/pandapower/create/load_create.py b/pandapower/create/load_create.py index 6dd6201da..5efcc48bc 100644 --- a/pandapower/create/load_create.py +++ b/pandapower/create/load_create.py @@ -11,7 +11,7 @@ from numpy import nan, bool_ import numpy.typing as npt -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from pandapower.pp_types import Int, UnderOverExcitedType, WyeDeltaType from pandapower.create._utils import ( _add_to_entries_if_not_nan, @@ -354,7 +354,7 @@ def create_asymmetric_load( # net.impedance_load.loc[index, ["name", "bus", "r_A","r_B","r_C", "scaling", # "x_A","x_B","x_C","sn_mva", "in_service", "type"]] = \ # [name, bus, r_A,r_B,r_C, scaling, -# x_A,x_B,x_C,sn_mva, in_service, type] +# x_A,x_B,x_C, sn_mva, in_service, type] # # # and preserve dtypes # _preserve_dtypes(net.impedance_load, dtypes) diff --git a/pandapower/create/measurement_create.py b/pandapower/create/measurement_create.py index 82e91c77f..01156d532 100644 --- a/pandapower/create/measurement_create.py +++ b/pandapower/create/measurement_create.py @@ -10,7 +10,7 @@ import pandas as pd -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from pandapower.pp_types import Int, MeasurementElementType, MeasurementType from pandapower.create._utils import _get_index_with_check, _set_entries diff --git a/pandapower/create/motor_create.py b/pandapower/create/motor_create.py index 4606728e1..32a25d251 100644 --- a/pandapower/create/motor_create.py +++ b/pandapower/create/motor_create.py @@ -8,7 +8,7 @@ import logging from numpy import nan -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from pandapower.pp_types import Int from pandapower.create._utils import _check_element, _get_index_with_check, _set_entries diff --git a/pandapower/create/network_create.py b/pandapower/create/network_create.py index c2d0f9dfc..a325e55db 100644 --- a/pandapower/create/network_create.py +++ b/pandapower/create/network_create.py @@ -3,53 +3,12 @@ # Copyright (c) 2016-2026 by University of Kassel and Fraunhofer Institute for Energy Economics # and Energy System Technology (IEE), Kassel. All rights reserved. -from __future__ import annotations - -import logging +from typing_extensions import deprecated from pandapower.auxiliary import pandapowerNet -from pandapower.network_structure import get_structure_dict -from pandapower.results import reset_results -from pandapower.std_types import add_basic_std_types - -logger = logging.getLogger(__name__) - +@deprecated('Use the pandapowerNet constructor instead: pandapowerNet(name="Name", ...)') def create_empty_network( name: str = "", f_hz: float = 50.0, sn_mva: float = 1, add_stdtypes: bool = True ) -> pandapowerNet: - """ - This function initializes the pandapower data structure. - - Parameters: - f_hz: power system frequency in hertz - name: name for the network - sn_mva: reference apparent power for per unit system - add_stdtypes: Includes standard types to net - - Returns: - net: pandapower attrdict with empty tables - - Example: - >>> net = create_empty_network() - - """ - network_structure_dict = get_structure_dict() - network_structure_dict["name"] = name - network_structure_dict["f_hz"] = f_hz - network_structure_dict["sn_mva"] = sn_mva - - net = pandapowerNet(pandapowerNet.create_dataframes(network_structure_dict)) - - net._empty_res_load_3ph = net._empty_res_load - net._empty_res_sgen_3ph = net._empty_res_sgen - net._empty_res_storage_3ph = net._empty_res_storage - - if add_stdtypes: - add_basic_std_types(net) - else: - net.std_types = {"line": {}, "line_dc": {}, "trafo": {}, "trafo3w": {}, "fuse": {}} - for mode in ["pf", "se", "sc", "pf_3ph"]: - reset_results(net, mode) - net["user_pf_options"] = {} - return net + return pandapowerNet(name=name, f_hz=f_hz, sn_mva=sn_mva, add_stdtypes=add_stdtypes) diff --git a/pandapower/create/sgen_create.py b/pandapower/create/sgen_create.py index e85fc260f..a70b73eb1 100644 --- a/pandapower/create/sgen_create.py +++ b/pandapower/create/sgen_create.py @@ -13,7 +13,7 @@ from numpy import nan, bool_ import numpy.typing as npt -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from pandapower.pp_types import GeneratorType, Int, UnderOverExcitedType, WyeDeltaType from pandapower.create._utils import ( _add_to_entries_if_not_nan, diff --git a/pandapower/create/shunt_create.py b/pandapower/create/shunt_create.py index e52034e56..084563c39 100644 --- a/pandapower/create/shunt_create.py +++ b/pandapower/create/shunt_create.py @@ -11,7 +11,7 @@ import numpy as np import numpy.typing as npt -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from pandapower.pp_types import Int from pandapower.create._utils import ( _check_element, diff --git a/pandapower/create/source_create.py b/pandapower/create/source_create.py index 037bf3b2a..a16acb5f1 100644 --- a/pandapower/create/source_create.py +++ b/pandapower/create/source_create.py @@ -7,7 +7,7 @@ import logging -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from pandapower.pp_types import Int from pandapower.create._utils import _check_element, _get_index_with_check, _set_entries diff --git a/pandapower/create/storage_create.py b/pandapower/create/storage_create.py index 03141b1b8..2320dcfcc 100644 --- a/pandapower/create/storage_create.py +++ b/pandapower/create/storage_create.py @@ -11,7 +11,7 @@ from numpy import nan, bool_ import numpy.typing as npt -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from pandapower.pp_types import Int from pandapower.create._utils import ( _add_to_entries_if_not_nan, diff --git a/pandapower/create/switch_create.py b/pandapower/create/switch_create.py index 7927c2cc6..7af73ca5d 100644 --- a/pandapower/create/switch_create.py +++ b/pandapower/create/switch_create.py @@ -11,7 +11,7 @@ import numpy as np from numpy import nan, any as np_any -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from pandapower.pp_types import Int, SwitchElementType, SwitchType from pandapower.create._utils import ( _check_element, diff --git a/pandapower/create/trafo_create.py b/pandapower/create/trafo_create.py index 21ab2b1fb..b9202ef0a 100644 --- a/pandapower/create/trafo_create.py +++ b/pandapower/create/trafo_create.py @@ -14,7 +14,7 @@ from numpy import nan, isnan, isin, array, bool_, float64, full, integer, all as all_ import numpy.typing as npt -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from pandapower.std_types import load_std_type from pandapower.pp_types import HVMVLVType, HVLVType, Int, TapChangerType, TapChangerWithTabularType from pandapower.create._utils import ( diff --git a/pandapower/create/ward_create.py b/pandapower/create/ward_create.py index 37c1197d8..4b77762ad 100644 --- a/pandapower/create/ward_create.py +++ b/pandapower/create/ward_create.py @@ -11,7 +11,7 @@ import numpy as np import numpy.typing as npt -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from pandapower.pp_types import Int from pandapower.create._utils import ( _check_element, diff --git a/pandapower/diagnostic/diagnostic.py b/pandapower/diagnostic/diagnostic.py index 928fdd04a..57f7ac674 100644 --- a/pandapower/diagnostic/diagnostic.py +++ b/pandapower/diagnostic/diagnostic.py @@ -7,7 +7,7 @@ from typing import Literal, Any from collections.abc import Callable -from pandapower.auxiliary import ADict +from pandapower.network import ADict from pandapower.diagnostic.diagnostic_functions import default_diagnostic_functions, default_argument_values from pandapower.diagnostic.diagnostic_helpers import logger, DiagnosticFunction, NotCompactFilter, NotDetailedFilter, LogCount diff --git a/pandapower/diagnostic/diagnostic_functions.py b/pandapower/diagnostic/diagnostic_functions.py index 90d7b3f30..0956425f6 100644 --- a/pandapower/diagnostic/diagnostic_functions.py +++ b/pandapower/diagnostic/diagnostic_functions.py @@ -12,11 +12,10 @@ select_subnet, replace_xward_by_ward, create_continuous_bus_index, get_connected_buses_at_element, get_connected_elements ) +from pandapower.network import ADict, pandapowerNet from pandapower.create import create_impedance, create_switch from pandapower.run import runpp from pandapower.auxiliary import ( - ADict, - pandapowerNet, LoadflowNotConverged, OPFNotConverged, ControllerNotConverged, diff --git a/pandapower/diagnostic/diagnostic_helpers.py b/pandapower/diagnostic/diagnostic_helpers.py index bc6cdfa6f..cad572671 100644 --- a/pandapower/diagnostic/diagnostic_helpers.py +++ b/pandapower/diagnostic/diagnostic_helpers.py @@ -10,8 +10,7 @@ import numpy as np -from pandapower import pandapowerNet -from pandapower.auxiliary import ADict +from pandapower.network import ADict, pandapowerNet logger = logging.getLogger(__name__) diff --git a/pandapower/estimation/algorithm/base.py b/pandapower/estimation/algorithm/base.py index fd18cce95..43fc209df 100644 --- a/pandapower/estimation/algorithm/base.py +++ b/pandapower/estimation/algorithm/base.py @@ -4,6 +4,7 @@ # and Energy System Technology (IEE), Kassel. All rights reserved. import numpy as np +from numpy.linalg import LinAlgError from scipy.sparse import csr_matrix, vstack, hstack from scipy.sparse.linalg import spsolve, norm, inv @@ -144,7 +145,7 @@ def estimate(self, eppci: ExtendedPPCI, debug_mode=False, **kwargs): # prepare next iteration cur_it += 1 - except np.linalg.LinAlgError: + except LinAlgError: self.logger.error("A problem appeared while using the linear algebra methods." "Check and change the measurement set.") return False @@ -227,7 +228,7 @@ def estimate(self, eppci: ExtendedPPCI, **kwargs): cur_it += 1 current_error = np.max(np.abs(d_E_ext[:len(eppci.non_slack_buses) + num_bus])) self.logger.debug("Current error: {:.7f}".format(current_error)) - except np.linalg.LinAlgError: + except LinAlgError: self.logger.error("A problem appeared while using the linear algebra methods." "Check and change the measurement set.") return False @@ -269,7 +270,7 @@ def estimate(self, eppci: ExtendedPPCI, estimator="wls", **kwargs): cur_it += 1 current_error = np.max(np.abs(d_E)) self.logger.debug("Current error: {:.7f}".format(current_error)) - except np.linalg.LinAlgError: + except LinAlgError: self.logger.error("A problem appeared while using the linear algebra methods." "Check and change the measurement set.") return False @@ -350,12 +351,12 @@ def estimate(self, eppci: ExtendedPPCI, debug_mode=False, **kwargs): # prepare next iteration cur_it += 1 - except np.linalg.LinAlgError: + except LinAlgError: self.logger.error("A problem appeared while using the linear algebra methods." "Check and change the measurement set.") return False - # check if the estimation is successfull + # check if the estimation is successful self.check_result(current_error, cur_it) self.iterations = cur_it if debug_mode: diff --git a/pandapower/estimation/algorithm/matrix_base.py b/pandapower/estimation/algorithm/matrix_base.py index 745f7de1e..69d81ba7d 100644 --- a/pandapower/estimation/algorithm/matrix_base.py +++ b/pandapower/estimation/algorithm/matrix_base.py @@ -11,6 +11,11 @@ from pandapower.estimation.ppc_conversion import ExtendedPPCI +try: + from numpy import isin +except ImportError: + from numpy import in1d as isin + __all__ = ['BaseAlgebra', 'BaseAlgebraZeroInjConstraints'] @@ -295,8 +300,8 @@ def _define_mask(self, idx, mask1, mask2): @staticmethod def _merge_mask(mask1, mask2): new_mask_tot = np.unique(np.concatenate((mask1,mask2),0)) - new_mask1 = np.isin(new_mask_tot, mask1) - new_mask2 = np.isin(new_mask_tot, mask2) + new_mask1 = isin(new_mask_tot, mask1) + new_mask2 = isin(new_mask_tot, mask2) return new_mask_tot, new_mask1, new_mask2 diff --git a/pandapower/estimation/ppc_conversion.py b/pandapower/estimation/ppc_conversion.py index ffc652a94..ba1c62599 100644 --- a/pandapower/estimation/ppc_conversion.py +++ b/pandapower/estimation/ppc_conversion.py @@ -10,7 +10,8 @@ import pandas as pd from pandapower.pypower.idx_bus import BUS_TYPE as pypower_BUS_TYPE, VM as pypower_VM, VA as pypower_VA -from pandapower.auxiliary import _init_runse_options, pandapowerNet +from pandapower.auxiliary import _init_runse_options +from pandapower import pandapowerNet from pandapower.estimation.util import estimate_voltage_vector from pandapower.pd2ppc import _pd2ppc from pandapower.pf.run_newton_raphson_pf import _run_dc_pf diff --git a/pandapower/file_io.py b/pandapower/file_io.py index 16dbe86e4..49ee11d49 100644 --- a/pandapower/file_io.py +++ b/pandapower/file_io.py @@ -25,11 +25,9 @@ except ImportError: openpyxl_INSTALLED = False -from pandapower._version import __version__ as pp_version from pandapower.auxiliary import soft_dependency_error -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from pandapower.std_types import basic_std_types -from pandapower.create import create_empty_network from pandapower.convert_format import convert_format from pandapower.io_utils import to_dict_with_coord_transform, to_dict_of_dfs, PPJSONEncoder, encrypt_string, \ get_raw_data_from_pickle, transform_net_with_df_and_geo, check_net_version, from_dict_of_dfs, decrypt_string, \ @@ -160,7 +158,7 @@ def from_pickle(filename, convert=True): >>> net2 = from_pickle("example2.p") #relative path """ - net = pandapowerNet(get_raw_data_from_pickle(filename)) + net = pandapowerNet(net=get_raw_data_from_pickle(filename)) transform_net_with_df_and_geo(net, ["bus_geodata"], ["line_geodata"]) if convert: @@ -211,7 +209,7 @@ def from_excel(filename, convert=True): def _from_excel_old(xls): par = xls["parameters"]["parameter"] name = None if pd.isnull(par.at["name"]) else par.at["name"] - net = create_empty_network(name=name, f_hz=par.at["f_hz"]) + net = pandapowerNet(name=name, f_hz=par.at["f_hz"]) net.update(par) for item, table in xls.items(): if item == "parameters": @@ -257,7 +255,7 @@ def from_json( :param replace_elements: Keys are replaced by values found in json string. Both key and value are supposed to be strings, default None :type replace_elements: dict or None - :param empty_dict_like_object: If None, the output of pandapower.create_empty_network() is used as an empty element + :param empty_dict_like_object: If None, the output of pandapowerNet() is used as an empty element to be filled by the data of the json string. Give another dict-like object to start filling that alternative object with the json data, default None :type empty_dict_like_object: dict or pandapowerNet or None @@ -316,31 +314,28 @@ def from_json_string( The index of the returned network is not necessarily in the same order as the original network. Index columns of all pandas DataFrames are sorted in ascending order. - :param str json_string: The json string representation of the network - :param bool convert: If True, converts the format of the net loaded from json_string - from the older version of pandapower to the newer version format, default False - :param encryption_key: If given, key to decrypt an encrypted json_string, default None - :type encryption_key: str or None - :param elements_to_deserialize: Deserialize only certain pandapower elements. If None all elements are deserialized, - default None - :type elements_to_deserialize: list or None - :param bool keep_serialized_elements: Keep serialized elements if given. Default: Serialized elements are kept, - default True - :param bool add_basic_std_types: Add missing standard-types from pandapower standard type library, default False - :param replace_elements: Keys are replaced by values found in json string. - Both key and value are supposed to be strings, default None - :type replace_elements: dict or None - :param empty_dict_like_object: If None, the output of pandapower.create_empty_network() is used as an empty element - to be filled by the data of the json string. Give another dict-like object to start filling that alternative - object with the json data, default None - :type empty_dict_like_object: dict or pandapowerNet or None - :param bool ignore_unknown_objects: If set to True, ignore any objects that cannot be deserialized instead of - raising an error, default False - - :return: The pandapower network - :rtype: pandapowerNet - - :example: + Parameters: + json_string: The json string representation of the network + convert: If True, converts the format of the net loaded from json_string from the older version of pandapower + to the newer version format, default False + encryption_key: If given, key to decrypt an encrypted json_string, default None + elements_to_deserialize: Deserialize only certain pandapower elements. If None all elements are deserialized, + default None + keep_serialized_elements: Keep serialized elements if given. Default: Serialized elements are kept, + default True + add_basic_std_types: Add missing standard-types from pandapower standard type library, default False + replace_elements: Keys are replaced by values found in json string. + Both key and value are supposed to be strings, default None + empty_dict_like_object: If None, the output of pandapowerNet is used as an empty element to be filled by the + data of the json string. Give another dict-like object to start filling that alternative object with the + json data, default None + ignore_unknown_objects: If set to True, ignore any objects that cannot be deserialized instead of + raising an error, default False + + Returns: + The pandapower network + + Example: >>> from pandapower import from_json_string >>> net = from_json_string("{…}") """ @@ -370,7 +365,7 @@ def from_json_string( omit_tables=omit_tables, omit_modules=omit_modules ) - net_dummy = create_empty_network() + net_dummy = pandapowerNet(name='') if ('version' not in net.keys()) | (Version(net.version) < Version('2.1.0')): raise UserWarning('table selection is only possible for nets above version 2.0.1. ' 'Convert and save your net first.') @@ -378,13 +373,12 @@ def from_json_string( for key in elements_to_deserialize: net[key] = json.loads(net[key], cls=PPJSONDecoder) else: - if (('version' not in net.keys()) or (net['version'] != net_dummy.version)) and \ - not convert: + if (('version' not in net.keys()) or (net['version'] != net_dummy.version)) and not convert: raise UserWarning( - 'The version of your net %s you are trying to load differs from the actual ' - 'pandapower version %s. Before you can load only distinct tables, convert ' - 'and save your net first or set convert to True!' - % (net['version'], net_dummy.version)) + f"The version of your net {net['version']} you are trying to load differs from the actual " + f"pandapower version {net_dummy.version}. Before you can load only distinct tables, convert and " + f"save your net first or set convert to True!" + ) for key in net.keys(): if key in elements_to_deserialize: net[key] = json.loads(net[key], cls=PPJSONDecoder) @@ -432,8 +426,11 @@ def from_json_dict(json_dict): >>> net = from_json_dict(json.loads(json_str)) """ name = json_dict["name"] if "name" in json_dict else None - f_hz = json_dict["f_hz"] if "f_hz" in json_dict else 50 - net = create_empty_network(name=name, f_hz=f_hz) + f_hz = json_dict["f_hz"] if "f_hz" in json_dict else 50. + if name is None: + logger.warning('pandapowerNet.name not present or empty. Please set a name and resave the network') + name = "" + net = pandapowerNet(name=name, f_hz=f_hz) if "parameters" in json_dict: for par, value in json_dict["parameters"]["parameter"].items(): net[par] = value diff --git a/pandapower/groups.py b/pandapower/groups.py index 7f68dd2f1..b893eecc5 100644 --- a/pandapower/groups.py +++ b/pandapower/groups.py @@ -11,11 +11,13 @@ import uuid from pandapower.auxiliary import ensure_iterability, log_to_level -from pandapower.create import create_empty_network, _group_parameter_list, _set_multiple_entries, _check_elements_existence +from pandapower.create import _group_parameter_list, _set_multiple_entries, _check_elements_existence from pandapower.toolbox.power_factor import signing_system_value -from pandapower.toolbox.element_selection import branch_element_bus_dict, element_bus_tuples, \ - pp_elements, get_connected_elements_dict +from pandapower.toolbox.element_selection import ( + branch_element_bus_dict, element_bus_tuples, pp_elements, get_connected_elements_dict +) from pandapower.toolbox.result_info import res_power_columns +from pandapower.network import pandapowerNet import logging @@ -959,12 +961,10 @@ def set_group_reference_column(net, index, reference_column, element_type=None): dupl_elements = [] for et in element_type: - if reference_column is None: # determine duplicated indices which would corrupt Groups functionality if len(set(net[et].index)) != net[et].shape[0]: dupl_elements.append(et) - else: # fill nan values in net[et][reference_column] with unique names if reference_column not in net[et].columns: @@ -1035,9 +1035,10 @@ def return_group_as_net(net, index, keep_everything_else=False, verbose=True, ** "dropped now.") remove_not_existing_group_members(net, verbose=verbose) else: - group_net = create_empty_network( + group_net = pandapowerNet( name=group_name(net, index), f_hz=net.f_hz, sn_mva=net.sn_mva, - add_stdtypes=kwargs.get("add_stdtypes", True)) + add_stdtypes=kwargs.get("add_stdtypes", True) + ) group_net["group"] = net.group.loc[[index]] for et in net.group.loc[[index], "element_type"].tolist(): idx = group_element_index(net, index, et) diff --git a/pandapower/io_utils.py b/pandapower/io_utils.py index 99e829171..3c86c1adf 100644 --- a/pandapower/io_utils.py +++ b/pandapower/io_utils.py @@ -67,8 +67,8 @@ except ImportError: zlib_INSTALLED = False -from pandapower.auxiliary import pandapowerNet, get_free_id, soft_dependency_error, _preserve_dtypes -from pandapower.create import create_empty_network +from pandapower.auxiliary import get_free_id, soft_dependency_error, _preserve_dtypes +from pandapower import pandapowerNet from pandapower.network_structure import get_std_type_structure_dict from functools import singledispatch @@ -240,7 +240,7 @@ def df_to_coords(net, item, table): def from_dict_of_dfs(dodfs, net=None): if net is None: - net = create_empty_network() + net = pandapowerNet(name='') for item, table in dodfs.items(): if item == "dtypes": continue @@ -486,8 +486,10 @@ def __get__(self, instance, owner): _class = (class_module[0], '') _module = ('', class_module[1]) if (_class in self.registry) and (_module in self.registry): - logger.error('the saved object %s is ambiguous. There are at least two possibilites' - ' to decode the object' % class_module) + logger.error( + f"the saved object {class_module} is ambiguous. There are at least two possibilites to decode the " + f"object" + ) elif _class in self.registry: class_module = _class elif _module in self.registry: @@ -612,14 +614,16 @@ def DataFrame(self): df.loc[pd.isnull(df[col]), col] = None return df + # removing the pandapower.auxiliary registration is not possible otherwise old networks cannot be loaded anymore + @from_serializable.register(class_name='pandapowerNet', module_name='pandapower.network') @from_serializable.register(class_name='pandapowerNet', module_name='pandapower.auxiliary') - def pandapowerNet(self): + def to_pandapower_net(self): if isinstance(self.obj, str): # backwards compatibility from pandapower import from_json_string return from_json_string(self.obj) else: if self.empty_dict_like_object is None: - net = create_empty_network() + net = pandapowerNet(name='from_serializable') else: net = self.empty_dict_like_object net.update(self.obj) @@ -733,8 +737,7 @@ def shapely(self): class PPJSONDecoder(json.JSONDecoder): def __init__(self, **kwargs): - # net = pandapowerNet.__new__(pandapowerNet) - # net = create_empty_network() + # net = pandapowerNet(name="") deserialize_pandas = kwargs.pop('deserialize_pandas', True) empty_dict_like_object = kwargs.pop('empty_dict_like_object', None) registry_class = kwargs.pop("registry_class", FromSerializableRegistry) @@ -764,15 +767,15 @@ def pp_hook( omit_modules=None ): try: - if not omit_tables is None: + if omit_tables is not None: for ot in omit_tables: if ot in d: d[ot].drop(d[ot].index, inplace=True) if '_module' in d and '_class' in d: - if not omit_modules is None: + if omit_modules is not None: for om in omit_modules: if om in d['_module']: - return + return None if 'pandas' in d['_module'] and not deserialize_pandas: return json.dumps(d) elif "_object" in d: diff --git a/pandapower/network.py b/pandapower/network.py new file mode 100644 index 000000000..9ac3546e1 --- /dev/null +++ b/pandapower/network.py @@ -0,0 +1,380 @@ +# Copyright (c) 2016-2026 by University of Kassel and Fraunhofer Institute for Energy Economics +# and Energy System Technology (IEE), Kassel. All rights reserved. + + +# Additional copyright for modified code by Brendan Curran-Johnson (ADict class): +# Copyright (c) 2013 Brendan Curran-Johnson +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# (https://github.com/bcj/AttrDict/blob/master/LICENSE.txt) + +import copy +import logging +from typing import overload +from typing_extensions import deprecated +from collections.abc import MutableMapping + +import numpy as np +import pandas as pd + +from pandapower.network_structure import get_structure_dict +from pandapower.std_types import add_basic_std_types +from pandapower.pp_types import StandardTypesDict + +logger = logging.getLogger(__name__) + + +def plural_s(number): + return "" if number == 1 else "s" + + +def _preserve_dtypes(df, dtypes): + for item, dtype in list(dtypes.items()): + if df.dtypes.at[item] != dtype: + if (dtype == bool or dtype == np.bool_) and np.any(df[item].isnull()): + raise UserWarning(f"Encountered NaN value(s) in a boolean column {item}! " + f"NaN are casted to True by default, which can lead to errors. " + f"Replace NaN values with True or False first.") + try: + df[item] = df[item].astype(dtype) + except ValueError: + df[item] = df[item].astype(float) + + +class ADict(dict, MutableMapping): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + # to prevent overwrite of internal attributes by new keys + # see _valid_name() + self._setattr('_allow_invalid_attributes', False) + + def _build(self, obj, **kwargs): + """ + We only want dict like elements to be treated as recursive AttrDicts. + """ + return obj + + # --- taken from AttrDict + + def __getstate__(self): + return self.copy(), self._allow_invalid_attributes + + def __dir__(self): + return list(self.keys()) + + def __setstate__(self, state): + mapping, allow_invalid_attributes = state + self.update(mapping) + self._setattr('_allow_invalid_attributes', allow_invalid_attributes) + + @classmethod + def _constructor(cls, mapping): + return cls(mapping) + + # --- taken from MutableAttr + + def _setattr(self, key, value): + """ + Add an attribute to the object, without attempting to add it as + a key to the mapping (i.e. internals) + """ + super(MutableMapping, self).__setattr__(key, value) + + def __setattr__(self, key, value): + """ + Add an attribute. + + key: The name of the attribute + value: The attributes contents + """ + if self._valid_name(key): + self[key] = value + elif getattr(self, '_allow_invalid_attributes', True): + super(MutableMapping, self).__setattr__(key, value) + else: + raise TypeError( + "'{cls}' does not allow attribute creation.".format( + cls=self.__class__.__name__ + ) + ) + + def _delattr(self, key): + """ + Delete an attribute from the object, without attempting to + remove it from the mapping (i.e. internals) + """ + super(MutableMapping, self).__delattr__(key) + + def __delattr__(self, key, force=False): + """ + Delete an attribute. + + key: The name of the attribute + """ + if self._valid_name(key): + del self[key] + elif getattr(self, '_allow_invalid_attributes', True): + super(MutableMapping, self).__delattr__(key) + else: + raise TypeError( + "'{cls}' does not allow attribute deletion.".format( + cls=self.__class__.__name__ + ) + ) + + def __call__(self, key): + """ + Dynamically access a key-value pair. + + key: A key associated with a value in the mapping. + + This differs from __getitem__, because it returns a new instance + of an Attr (if the value is a Mapping object). + """ + if key not in self: + raise AttributeError( + "'{cls} instance has no attribute '{name}'".format( + cls=self.__class__.__name__, name=key + ) + ) + + return self._build(self[key]) + + def __getattr__(self, key): + """ + Access an item as an attribute. + """ + if key not in self or not self._valid_name(key): + raise AttributeError( + "'{cls}' instance has no attribute '{name}'".format( + cls=self.__class__.__name__, name=key + ) + ) + + return self._build(self[key]) + + def __deepcopy__(self, memo): + """ + overloads the deepcopy function of pandapower if at least one DataFrame with column + "object" is in net + + reason: some of these objects contain a reference to net which breaks the default deepcopy + function. Also, the DataFrame doesn't deepcopy its elements if geodata changes in the + lists, it affects both net instances + This fix was introduced in pandapower 2.2.1 + + """ + deep_columns = {'object', 'coords', 'geometry'} + cls = self.__class__ + result = cls.__new__(cls) + memo[id(self)] = result + for k, v in self.items(): + if isinstance(v, pd.DataFrame) and not set(v.columns).isdisjoint(deep_columns): + if k not in result: + result[k] = v.__class__(index=v.index, columns=v.columns) + for col in v.columns: + if col in deep_columns: + result[k][col] = v[col].apply(lambda x: copy.deepcopy(x, memo)) + else: + result[k][col] = copy.deepcopy(v[col], memo) + _preserve_dtypes(result[k], v.dtypes) + else: + setattr(result, k, copy.deepcopy(v, memo)) + + result._setattr('_allow_invalid_attributes', self._allow_invalid_attributes) + return result + + @classmethod + def _valid_name(cls, key): + """ + Check whether a key is a valid attribute name. + + A key may be used as an attribute if: + * It is a string + * The key doesn't overlap with any class attributes (for Attr, + those would be 'get', 'items', 'keys', 'values', 'mro', and + 'register'). + """ + return ( + isinstance(key, str) and + not hasattr(cls, key) + ) + + +class pandapowerNet(ADict): + """ + pandapowerNet constructor + + Parameters: + name: Network name + f_hz: power system frequency in hertz, default: 50. + sn_mva: reference apparent power for per unit system, default: 1. + add_stdtypes: Includes standard types to net, dafault: True + custom_data: custom data to add to the network + + Example: + net = pandapowerNet(name="My Network") + """ + @overload + def __init__( + self, + name: str, + f_hz: float = 50., + sn_mva: float = 1., + add_stdtypes: bool = True, + custom_data: dict | None = None + ) -> None: ... + + @overload + @deprecated("Calling pandapowerNet to copy a network is no longer supported. Use copy.deepcopy(net) instead.") + def __init__(self, *, net: "pandapowerNet | dict") -> None: ... + + + def __init__( + self, + name: str | None = None, + f_hz: float = 50., + sn_mva: float = 1., + add_stdtypes: bool = True, + custom_data: dict | None = None, + *, + net: "pandapowerNet | dict | None" = None, + **kwargs + ) -> None: + # TODO: remove once deprecations are removed + if net is not None: + if ( + name is not None or + not np.isclose(f_hz, 50., rtol=1e-12, atol=1e-12) or + not np.isclose(sn_mva, 1., rtol=1e-12, atol=1e-12) or + not add_stdtypes or + custom_data is not None + ): + raise AttributeError( + 'Passing net and other attributes is not supported. Do not pass a net to pandapowerNet()' + ) + super().__init__(net, **kwargs) + if isinstance(net, self.__class__): + self.clear() + self.update(**copy.deepcopy(net)) + + for key in self: + if isinstance(self[key], list) and len(self[key]) == 1: + self[key] = self[key][0] + if net is None and name is not None: + # ---- new code for the remaining version ---- + super().__init__(**kwargs) + if name == "": + logger.warning("When calling pandapowerNet() name should not be empty.") + network_structure_dict = get_structure_dict() + network_structure_dict["name"] = name + network_structure_dict["f_hz"] = f_hz + network_structure_dict["sn_mva"] = sn_mva + + # create dataframes from network_structure_dict + data = pandapowerNet.create_dataframes(network_structure_dict) + # set data on self + for key, value in data.items(): + self[key] = value + # to avoid creating dataframes where dicts are required they are stored in single entry lists and + # unpacked here + if isinstance(value, list) and len(value) == 1: + self[key] = value[0] + + # add custom data + if custom_data is not None: + for key, value in custom_data.items(): + self[key] = value + + self._empty_res_load_3ph = self._empty_res_load + self._empty_res_sgen_3ph = self._empty_res_sgen + self._empty_res_storage_3ph = self._empty_res_storage + + if add_stdtypes: + add_basic_std_types(self) # TODO: Test this + else: + self.std_types: StandardTypesDict = {"line": {}, "line_dc": {}, "trafo": {}, "trafo3w": {}, "fuse": {}} + # reset res_… objects: + for suffix in [None, "est", "sc", "3ph"]: + elements = [] + match suffix: + case "sc": + elements = ["bus", "line", "trafo", "trafo3w", "ext_grid", "gen", "sgen", "switch"] + case "est": + elements = ["bus", "line", "trafo", "trafo3w", "impedance", "switch", "shunt"] + case "3ph": + elements = [ + "bus", "line", "trafo", "ext_grid", "shunt", "load", "sgen", "storage", "asymmetric_load", + "asymmetric_sgen" + ] + case None: + elements = [ + "bus", "bus_dc", "line", "line_dc", "trafo", "trafo3w", "impedance", "ext_grid", "load", + "load_dc", "motor", "sgen", "storage", "shunt", "gen", "ward", "xward", "dcline", + "asymmetric_load", "asymmetric_sgen", "source_dc", "switch", "tcsc", "svc", "ssc", "vsc", + "vsc_stacked", "vsc_bipolar" + ] + for element in elements: # FIXME: is this related to @heckstrahler removing res_ if empty? + res_element = f"res_{element}" if suffix is None else f"res_{element}_{suffix}" + res_empty_element = f"_empty_{f'res_{element}' if suffix == 'est' else res_element}" + if res_empty_element in self: + self[res_element] = self[res_empty_element].copy() + else: + self[res_element] = pd.DataFrame( + columns=pd.Index([], dtype=object), index=pd.Index([], dtype=np.int64) + ) + if "res_cost" in self.keys(): + del self["res_cost"] + self.user_pf_options: dict = {} + + + @staticmethod + def create_dataframes(data): + for key in data: # TODO: change index dtype to np.uint32 + if isinstance(data[key], dict): + data[key] = pd.DataFrame(columns=data[key].keys(), index=pd.Index([], dtype=np.int64)).astype(data[key]) + return data + + def __repr__(self): # pragma: no cover + """ + See Also + -------- + count_elements + """ + par = [] + res = [] + for et in list(self.keys()): + if not et.startswith("_") and isinstance(self[et], pd.DataFrame) and len(self[et]) > 0: + n_rows = self[et].shape[0] + if 'res_' in et: + res.append(f" - {et} ({n_rows} element{plural_s(n_rows)})") + elif et == 'group': + n_groups = len(set(self[et].index)) + par.append(f" - {et} ({n_groups} group{plural_s(n_groups)}, {n_rows} row{plural_s(n_rows)})") + else: + par.append(f" - {et} ({n_rows} element{plural_s(n_rows)})") + res_cost = [" and the following result values:", + " - %s" % "res_cost"] if "res_cost" in self.keys() else [] + if not len(par) + len(res): + return "This pandapower network is empty" + if len(res): + res = [" and the following results tables:"] + res + lines = ["This pandapower network includes the following parameter tables:"] + par + res + res_cost + return "\n".join(lines) diff --git a/pandapower/network_structure.py b/pandapower/network_structure.py index bcfaa2508..2acbe81f5 100644 --- a/pandapower/network_structure.py +++ b/pandapower/network_structure.py @@ -1,5 +1,6 @@ from numpy import dtype import pandas as pd + from pandapower._version import __version__, __format_version__ diff --git a/pandapower/networks/cigre_networks.py b/pandapower/networks/cigre_networks.py index 8902ad2d3..0da35d882 100644 --- a/pandapower/networks/cigre_networks.py +++ b/pandapower/networks/cigre_networks.py @@ -5,9 +5,11 @@ from numpy import nan -from pandapower.create import create_empty_network, create_bus, create_line, create_load, \ - create_transformer_from_parameters, create_shunt, create_gen, create_ext_grid, create_buses, create_switch, \ - create_load_from_cosphi, create_sgen, create_storage +from pandapower.create import ( + create_bus, create_line, create_load, create_transformer_from_parameters, create_shunt, create_gen, create_ext_grid, + create_buses, create_switch, create_load_from_cosphi, create_sgen, create_storage +) +from pandapower.network import pandapowerNet from pandapower.std_types import create_std_type import logging @@ -27,7 +29,7 @@ def create_cigre_network_hv(length_km_6a_6b=0.1): OUTPUT: **net** - The pandapower format network. """ - net_cigre_hv = create_empty_network() + net_cigre_hv = pandapowerNet(name="CIGRE HV Grid") # Linedata # Line220kV @@ -145,7 +147,7 @@ def create_cigre_network_mv(with_der=False): if with_der not in [False, "pv_wind", "all"]: raise ValueError("'with_der' is unknown. It should be in [False, 'pv_wind', 'all'].") - net_cigre_mv = create_empty_network() + net_cigre_mv = pandapowerNet(name="CIGRE MV Grid") # Linedata line_data = {'c_nf_per_km': 151.1749, 'r_ohm_per_km': 0.501, @@ -273,7 +275,7 @@ def create_cigre_network_lv(): OUTPUT: **net** - The pandapower format network. """ - net_cigre_lv = create_empty_network() + net_cigre_lv = pandapowerNet(name="CIGRE LV Grid") # Linedata # UG1 diff --git a/pandapower/networks/create_examples.py b/pandapower/networks/create_examples.py index 2dd7decec..5c98829de 100644 --- a/pandapower/networks/create_examples.py +++ b/pandapower/networks/create_examples.py @@ -6,9 +6,12 @@ import pandas as pd -from pandapower.create import create_switch, create_empty_network, create_bus, create_ext_grid, create_load, \ - create_gen, create_sgen, create_line, create_shunt, create_transformer, create_transformer_from_parameters, \ - create_transformer3w_from_parameters, create_impedance, create_xward +from pandapower.create import ( + create_switch, create_bus, create_ext_grid, create_load, create_gen, create_sgen, create_line, create_shunt, + create_transformer, create_transformer_from_parameters, create_transformer3w_from_parameters, create_impedance, + create_xward +) +from pandapower.network import pandapowerNet from pandapower.run import runpp from pandapower.toolbox.element_selection import get_element_index @@ -25,7 +28,7 @@ def example_simple(): >>> net = example_simple() """ - net = create_empty_network() + net = pandapowerNet(name="example_simple") # create buses bus1 = create_bus(net, name="HV Busbar", vn_kv=110., type="b") @@ -92,7 +95,7 @@ def example_multivoltage(): >>> net = example_multivoltage() """ - net = create_empty_network() + net = pandapowerNet(name="example_multivoltage") # --- Busses diff --git a/pandapower/networks/dickert_lv_networks.py b/pandapower/networks/dickert_lv_networks.py index c3552571b..847a29b74 100644 --- a/pandapower/networks/dickert_lv_networks.py +++ b/pandapower/networks/dickert_lv_networks.py @@ -2,8 +2,8 @@ from numpy import append, ceil -from pandapower.create import create_load, create_buses, create_line, create_empty_network, create_bus, \ - create_ext_grid, create_transformer +from pandapower import pandapowerNet +from pandapower.create import create_load, create_buses, create_line, create_bus, create_ext_grid, create_transformer from pandapower.std_types import change_std_type, create_std_type from pandapower.toolbox.element_selection import get_connected_elements from pandapower.toolbox.power_factor import pq_from_cosphi @@ -243,9 +243,9 @@ def create_dickert_lv_network(feeders_range='short', linetype='cable', customer= >>> net = create_dickert_lv_network() """ # --- create network - net = create_empty_network(name='dickert_lv_network with' + feeders_range + - '-range feeders, ' + linetype + 'and ' + customer + - 'customers in ' + case + 'case') + net = pandapowerNet( + name=f'dickert_lv_network with {feeders_range}-range feeders, {linetype} and {customer}customers in {case} case' + ) # assumptions mv_vn_kv = 20 lv_vn_kv = 0.4 diff --git a/pandapower/networks/kerber_networks.py b/pandapower/networks/kerber_networks.py index c400a22b7..1212847a9 100644 --- a/pandapower/networks/kerber_networks.py +++ b/pandapower/networks/kerber_networks.py @@ -6,8 +6,8 @@ import random as rd -from pandapower.create import create_empty_network, create_bus, create_ext_grid, create_line, create_load, \ - create_transformer +from pandapower.create import create_bus, create_ext_grid, create_line, create_load, create_transformer +from pandapower.network import pandapowerNet from pandapower.std_types import create_std_type @@ -21,7 +21,7 @@ def _create_empty_network_with_transformer(trafotype, V_OS=10., V_US=0.4): The voltage levels can be set manually and the transformer parameter can \ be set with "ti" """ - pd_net = create_empty_network() + pd_net = pandapowerNet(name='') NFA2X4x70 = {"c_nf_per_km": 0, "r_ohm_per_km": 0.443, "x_ohm_per_km": 0.069, "max_i_ka": 0.270, "type": "ol", "q_mm2": 70} NAYY4x50 = {"c_nf_per_km": 670, "r_ohm_per_km": 0.6417, "x_ohm_per_km": 0.084823, diff --git a/pandapower/networks/simple_pandapower_test_networks.py b/pandapower/networks/simple_pandapower_test_networks.py index 4a60aef05..9b155a7f5 100644 --- a/pandapower/networks/simple_pandapower_test_networks.py +++ b/pandapower/networks/simple_pandapower_test_networks.py @@ -3,8 +3,10 @@ # Copyright (c) 2016-2026 by University of Kassel and Fraunhofer Institute for Energy Economics # and Energy System Technology (IEE), Kassel. All rights reserved. -from pandapower.create import create_bus, create_ext_grid, create_line, create_load, create_switch, create_sgen, \ - create_transformer, create_empty_network +from pandapower import pandapowerNet +from pandapower.create import ( + create_bus, create_ext_grid, create_line, create_load, create_switch, create_sgen, create_transformer +) def panda_four_load_branch(): @@ -19,7 +21,7 @@ def panda_four_load_branch(): >>> from pandapower.networks.simple_pandapower_test_networks import panda_four_load_branch >>> net_four_load = panda_four_load_branch() """ - net = create_empty_network() + net = pandapowerNet(name='four_load_branch') busnr1 = create_bus(net, name="bus1", vn_kv=10., geodata=(0, 0)) busnr2 = create_bus(net, name="bus2", vn_kv=.4, geodata=(0, -1)) @@ -61,7 +63,7 @@ def four_loads_with_branches_out(): >>> from pandapower.networks.simple_pandapower_test_networks import four_loads_with_branches_out >>> net_four_load_with_branches = four_loads_with_branches_out() """ - net = create_empty_network() + net = pandapowerNet(name='four_loads_with_branches_out') busnr1 = create_bus(net, name="bus1ref", vn_kv=10., geodata=(0, 0)) create_ext_grid(net, busnr1) @@ -112,7 +114,7 @@ def simple_four_bus_system(): >>> from pandapower.networks.simple_pandapower_test_networks import simple_four_bus_system >>> net_simple_four_bus = simple_four_bus_system() """ - net = create_empty_network() + net = pandapowerNet(name='simple_four_bus_system') busnr1 = create_bus(net, name="bus1ref", vn_kv=10, geodata=(0, 0)) create_ext_grid(net, busnr1) busnr2 = create_bus(net, name="bus2", vn_kv=.4, geodata=(0, -1)) @@ -142,7 +144,7 @@ def simple_mv_open_ring_net(): >>> net_simple_open_ring = simple_mv_open_ring_net() """ - net = create_empty_network() + net = pandapowerNet(name='simple_mv_open_ring_net') create_bus(net, name="110 kV bar", vn_kv=110, type='b', geodata=(0, 0)) create_bus(net, name="20 kV bar", vn_kv=20, type='b', geodata=(0, -1)) diff --git a/pandapower/networks/synthetic_voltage_control_lv_networks.py b/pandapower/networks/synthetic_voltage_control_lv_networks.py index 679d0458e..d818958dd 100644 --- a/pandapower/networks/synthetic_voltage_control_lv_networks.py +++ b/pandapower/networks/synthetic_voltage_control_lv_networks.py @@ -7,7 +7,8 @@ from geojson import Point, dumps from numpy import nan, append -from pandapower.create import create_empty_network, create_bus, create_ext_grid, create_transformer, create_buses, \ +from pandapower import pandapowerNet +from pandapower.create import create_bus, create_ext_grid, create_transformer, create_buses, \ create_line, create_load, create_sgen from pandapower.std_types import create_std_type @@ -68,7 +69,7 @@ def create_synthetic_voltage_control_lv_network(network_class="rural_1"): 'suburb_1': 'NAYY 4x35'} # create network - net = create_empty_network(name='synthetic_voltage_control_lv_network: ' + network_class) + net = pandapowerNet(name=f'synthetic_voltage_control_lv_network: {network_class}') # create std_types # cable data (r, x, i_max) from www.faberkabel.de diff --git a/pandapower/plotting/collections.py b/pandapower/plotting/collections.py index 667ae74d1..84e3c3c05 100644 --- a/pandapower/plotting/collections.py +++ b/pandapower/plotting/collections.py @@ -43,7 +43,10 @@ class TextPath: # so that the test does not fail pass -from pandapower.auxiliary import soft_dependency_error, pandapowerNet +from pandapower.auxiliary import soft_dependency_error +from pandapower import pandapowerNet +from pandapower.plotting.patch_makers import load_patches, node_patches, gen_patches, \ + sgen_patches, ext_grid_patches, trafo_patches, storage_patches, ward_patches, xward_patches, vsc_patches from pandapower.plotting.plotting_toolbox import _rotate_dim2, coords_from_node_geodata, \ position_on_busbar, get_index_array diff --git a/pandapower/plotting/geo.py b/pandapower/plotting/geo.py index 5673d3f1b..8638d2faf 100644 --- a/pandapower/plotting/geo.py +++ b/pandapower/plotting/geo.py @@ -12,7 +12,8 @@ import pandas as pd from numpy import array -from pandapower.auxiliary import soft_dependency_error, pandapowerNet, ADict +from pandapower.auxiliary import soft_dependency_error +from pandapower.network import ADict, pandapowerNet # ADict is used as a type to ensure compatibility with pandapipes diff --git a/pandapower/plotting/patch_makers.py b/pandapower/plotting/patch_makers.py index db238cb01..dc2929ba5 100644 --- a/pandapower/plotting/patch_makers.py +++ b/pandapower/plotting/patch_makers.py @@ -4,6 +4,8 @@ # and Energy System Technology (IEE), Kassel. All rights reserved. import sys import math +import logging +from typing import TYPE_CHECKING import geojson.utils from geojson import Point @@ -22,15 +24,17 @@ from pandapower.plotting.plotting_toolbox import _rotate_dim2, get_color_list, get_angle_list, \ get_linewidth_list, get_list -import logging + +if TYPE_CHECKING: + from matplotlib import Patch logger = logging.getLogger(__name__) -def wye_patch(node_geo, offset, size, r_triangle, angle, facecolor, edgecolor) -> tuple[list[Patch], list]: +def wye_patch(node_geo, offset, size, r_triangle, angle, facecolor, edgecolor) -> tuple[list["Patch"], list]: if not MATPLOTLIB_INSTALLED: soft_dependency_error(str(sys._getframe().f_code.co_name) + "()", "matplotlib") - polys: list[Patch] = [] + polys: list["Patch"] = [] lines = [] mid_circ = node_geo + _rotate_dim2(np.array([0, offset + size]), angle) circ_edge = node_geo + _rotate_dim2(np.array([0, offset]), angle) @@ -76,7 +80,7 @@ def wp_patch( blade_coord2: float, hub_size: float, path: any -) -> tuple[list[Patch], list]: +) -> tuple[list["Patch"], list]: """ Generate Patch for wind power plant. @@ -98,7 +102,7 @@ def wp_patch( """ if not MATPLOTLIB_INSTALLED: soft_dependency_error(str(sys._getframe().f_code.co_name) + "()", "matplotlib") - polys: list[Patch] = [] + polys: list["Patch"] = [] lines = [] mid_circ = node_geo + _rotate_dim2(np.array([0, offset + size]), angle) circ_edge = node_geo + _rotate_dim2(np.array([0, offset]), angle) @@ -161,7 +165,7 @@ def pv_patch(node_geo, offset, size, angle, pv_rect_size, pv_tri_size, facecolor """ if not MATPLOTLIB_INSTALLED: soft_dependency_error(str(sys._getframe().f_code.co_name) + "()", "matplotlib") - polys: list[Patch] = [] + polys: list["Patch"] = [] lines = [] mid_rect = node_geo + _rotate_dim2(np.array([0, 2 * size]), angle) rect_lbottom = (mid_rect[0] - (pv_rect_size / 4), mid_rect[1]) @@ -432,7 +436,7 @@ def sgen_patches(node_coords, size, angles, patch_type, draw_by_type: bool = Tru if not MATPLOTLIB_INSTALLED: soft_dependency_error(str(sys._getframe().f_code.co_name) + "()", "matplotlib") lines = [] - polys: list[Patch] = [] + polys: list["Patch"] = [] offset = kwargs.get("offset", 2 * size) r_triangle = kwargs.get("r_triangles", size * 0.4) hub_size = size * 0.15 # Hub size diff --git a/pandapower/plotting/plotly/traces.py b/pandapower/plotting/plotly/traces.py index aab297ed2..b797a481a 100644 --- a/pandapower/plotting/plotly/traces.py +++ b/pandapower/plotting/plotly/traces.py @@ -13,7 +13,8 @@ import pandas as pd import geojson -from pandapower.auxiliary import soft_dependency_error, version_check, ADict +from pandapower.auxiliary import soft_dependency_error, version_check +from pandapower.network import ADict from pandapower.plotting.plotly.get_colors import get_plotly_color, get_plotly_cmap from pandapower.plotting.plotly.mapbox_plot import _on_map_test diff --git a/pandapower/pp_types.py b/pandapower/pp_types.py index 0dd8599aa..cca4e6c9a 100644 --- a/pandapower/pp_types.py +++ b/pandapower/pp_types.py @@ -1,4 +1,4 @@ -from typing import Literal, Union +from typing import Literal, Union, TypedDict, Any import numpy as np @@ -18,9 +18,10 @@ "ext_grid"] PWLPowerType = Literal["p", "q"] SwitchElementType = Literal[ - "b", # bus - "l", # line - "t", # transformer + "b", # bus + "l", # line + "t", # transformer + "t3", # 3 winding transformer ] SwitchType = Literal[ "LS", # load switch @@ -31,4 +32,18 @@ TapChangerType = Literal["Ratio", "Symmetrical", "Ideal"] TapChangerWithTabularType = Literal["Ratio", "Symmetrical", "Ideal", "Tabular"] UnderOverExcitedType = Literal["underexcited", "overexcited"] -WyeDeltaType = Literal["wye", "delta"] \ No newline at end of file +WyeDeltaType = Literal["wye", "delta"] + + +class StandardTypesDict(TypedDict): + """ + Typing for the Standard Types. + """ + line: dict[str, Any] + line_dc: dict[str, Any] + trafo: dict[str, Any] + trafo3w: dict[str, Any] + fuse: dict[str, Any] + + +StandardTypesDictKeys = Literal["line", "line_dc", "trafo", "trafo3w", "fuse"] diff --git a/pandapower/protection/example_grids.py b/pandapower/protection/example_grids.py index 1c95ba718..623c12dc1 100644 --- a/pandapower/protection/example_grids.py +++ b/pandapower/protection/example_grids.py @@ -12,7 +12,7 @@ def three_radial_bus_net(): - net = create_empty_network() # create an empty network + net = pandapowerNet(name="three_radial_bus_net") # create an empty network create_buses(net, nr_buses=16, vn_kv=20, index=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], name=None, type="n", geodata=[(0, 0), (0, -1), (0, -2), (-2, -3), (-2, -4), (-2, -5), (0, -6), @@ -40,7 +40,7 @@ def three_radial_bus_net(): def dtoc_relay_net(open_loop=True): - net = create_empty_network() # create an empty network + net = pandapowerNet(name="dtoc_relay_net") # create an empty network # create buses create_buses(net, nr_buses=7, vn_kv=20, index=[0, 1, 2, 3, 4, 5, 6], name=None, type="n", @@ -70,7 +70,7 @@ def dtoc_relay_net(open_loop=True): def idmt_relay_net(open_loop=True): - net = create_empty_network() # create an empty network + net = pandapowerNet(name="idmt_relay_net") # create an empty network #create buses create_buses(net, nr_buses=7, vn_kv=20, index=[0, 1, 2, 3, 4, 5, 6], name=None, type="n", @@ -100,7 +100,7 @@ def idmt_relay_net(open_loop=True): def idtoc_relay_net(open_loop=True): - net = create_empty_network() # create an empty network + net = pandapowerNet(name="idtoc_relay_net") # create an empty network # create buses create_buses(net, nr_buses=7, vn_kv=20, index=[0, 1, 2, 3, 4, 5, 6], name=None, type="n", diff --git a/pandapower/protection/utility_functions.py b/pandapower/protection/utility_functions.py index bd5bc17fe..a7b0ea40c 100644 --- a/pandapower/protection/utility_functions.py +++ b/pandapower/protection/utility_functions.py @@ -12,7 +12,7 @@ import networkx as nx import logging as log -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from pandapower.topology.create_graph import create_nxgraph from pandapower.create import create_bus, create_line_from_parameters from pandapower.plotting.collections import create_annotation_collection, create_line_collection, \ diff --git a/pandapower/results.py b/pandapower/results.py index 5e270a284..17b4da235 100644 --- a/pandapower/results.py +++ b/pandapower/results.py @@ -3,6 +3,7 @@ # Copyright (c) 2016-2026 by University of Kassel and Fraunhofer Institute for Energy Economics # and Energy System Technology (IEE), Kassel. All rights reserved. +from typing import Literal import numpy as np import pandas as pd @@ -182,7 +183,7 @@ def init_element(net, element, suffix=None): empty_res_element(net, element, suffix) -def get_relevant_elements(mode="pf"): +def get_relevant_elements(mode: Literal["pf", "opf", "dc", "sc", "se", "pf_3ph"] = "pf") -> list[str]: if mode == "pf" or mode == "opf" or mode == "dc": return ["bus", "bus_dc", "line", "line_dc", "trafo", "trafo3w", "impedance", "ext_grid", "load", "load_dc", "motor", "sgen", "storage", "shunt", "gen", "ward", @@ -195,6 +196,7 @@ def get_relevant_elements(mode="pf"): elif mode == "pf_3ph": return ["bus", "line", "trafo", "ext_grid", "shunt", "load", "sgen", "storage", "asymmetric_load", "asymmetric_sgen"] + return [] def init_results(net, mode="pf"): diff --git a/pandapower/results_branch.py b/pandapower/results_branch.py index 66aaf638c..1cf747584 100644 --- a/pandapower/results_branch.py +++ b/pandapower/results_branch.py @@ -5,7 +5,7 @@ import numpy as np -import pandas as pd + from pandapower.auxiliary import _sum_by_group, I_from_SV_elementwise, sequence_to_phase, S_from_VI_elementwise from pandapower.pypower.idx_brch import F_BUS, T_BUS, PF, QF, PT, QT, BR_R from pandapower.pypower.idx_brch_dc import DC_IF, DC_IT, DC_F_BUS, DC_T_BUS, DC_PF, DC_PT, DC_BR_R, DC_TDPF diff --git a/pandapower/results_bus.py b/pandapower/results_bus.py index d3baff815..5b9785cf8 100644 --- a/pandapower/results_bus.py +++ b/pandapower/results_bus.py @@ -8,12 +8,12 @@ import pandas as pd from numpy import complex128 from pandapower.auxiliary import _sum_by_group, sequence_to_phase, _sum_by_group_nvals -from pandapower.pypower.idx_bus import VM, VA, PD, QD, LAM_P, LAM_Q, BASE_KV, NONE, BS, BUS_TYPE, BUS_I +from pandapower.build_bus import _get_motor_pq, _get_symmetric_pq_of_unsymetric_element +from pandapower.network import pandapowerNet +from pandapower.pypower.idx_bus import VM, VA, PD, QD, LAM_P, LAM_Q, BASE_KV, NONE, BUS_TYPE, BUS_I from pandapower.pypower.idx_bus_dc import DC_VM, DC_BUS_TYPE, DC_NONE, DC_PD, DC_BUS_I - from pandapower.pypower.idx_gen import PG, QG -from pandapower.build_bus import _get_motor_pq, _get_symmetric_pq_of_unsymetric_element -from pandapower.pypower.idx_ssc import SSC_X_CONTROL_VM, SSC_X_CONTROL_VA, SSC_Q, SSC_INTERNAL_BUS +from pandapower.pypower.idx_ssc import SSC_Q, SSC_INTERNAL_BUS from pandapower.pypower.idx_svc import SVC_THYRISTOR_FIRING_ANGLE, SVC_Q, SVC_X_PU from pandapower.pypower.idx_vsc import VSC_Q, VSC_P, VSC_P_DC, VSC_BUS_DC, VSC_INTERNAL_BUS_DC, VSC_INTERNAL_BUS @@ -187,13 +187,19 @@ def write_voltage_dependend_load_results(net, p, q, b): return p, q, b -def write_pq_results_to_element(net, ppc, element, suffix=None): +# TODO: many tests fail if this function fails, yet i could not find tests for it +def write_pq_results_to_element( + net: pandapowerNet, ppc: pd.DataFrame, element, suffix=None +) -> pandapowerNet: """ get p_mw and q_mvar for a specific pq element ("load", "sgen"...). This function basically writes values element table to res_element table - :param net: pandapower net - :param element: element name (str) - :return: + + Parameter: + net: the pandapower net + ppc: a ppc DataFrame + element: element name (str) + suffix: the suffix for the res tables """ # info from net _is_elements = net["_is_elements"] @@ -201,10 +207,8 @@ def write_pq_results_to_element(net, ppc, element, suffix=None): # info element el_data = net[element] - res_ = "res_%s" % element - if suffix is not None: - res_ += "_%s" % suffix - ctrl_ = "%s_controllable" % element + res_ = f"res_{element}_{suffix}" if suffix is not None else f"res_{element}" + ctrl_ = f"{element}_controllable" is_controllable = False if ctrl_ in _is_elements: @@ -225,9 +229,8 @@ def write_pq_results_to_element(net, ppc, element, suffix=None): return net # Wards and xwards have different names in their element table, but not in res table. Also no scaling -> Fix... - p_mw = "ps_mw" if element in ["ward", "xward"] else "p_mw" - q_mvar = "qs_mvar" if element in ["ward", "xward"] else "q_mvar" - scaling = el_data["scaling"].values if element not in ["ward", "xward"] else 1.0 + p_mw, q_mvar, scaling = \ + ("ps_mw", "qs_mvar", 1.) if element in ["ward", "xward"] else ("p_mw", "q_mvar", el_data["scaling"].values) element_in_service = _is_elements[element] diff --git a/pandapower/shortcircuit/calc_sc.py b/pandapower/shortcircuit/calc_sc.py index e9f53a79d..2f4b588d0 100644 --- a/pandapower/shortcircuit/calc_sc.py +++ b/pandapower/shortcircuit/calc_sc.py @@ -4,6 +4,7 @@ # and Energy System Technology (IEE), Kassel. All rights reserved. from numbers import Number +from typing import Final, Literal import numpy as np from scipy.sparse.linalg import factorized @@ -27,7 +28,7 @@ def calc_sc(net, bus=None, fault="3ph", case='max', lv_tol_percent=10, topology="auto", ip=False, - ith=False, tk_s=1., kappa_method="C", r_fault_ohm=0., x_fault_ohm=0., + ith=False, tk_s=1., kappa_method: Literal["B", "C"] = "C", r_fault_ohm=0., x_fault_ohm=0., branch_results=False, check_connectivity=True, return_all_currents=False, inverse_y=True, use_pre_fault_voltage=False): """ @@ -124,14 +125,18 @@ def calc_sc(net, bus=None, if branch_results: logger.warning("Branch results are in beta mode and might not always be reliable, " "especially for transformers") - + + init_vm_pu: Literal["results", "flat"] + init_va_degree: Literal["results", "flat"] if use_pre_fault_voltage: - init_vm_pu = init_va_degree = "results" + init_vm_pu = "results" + init_va_degree = "results" trafo_model = net._options["trafo_model"] # trafo model for SC must match the trafo model for PF calculation if not isinstance(bus, Number) and len(net.sgen.query("in_service")) > 0: raise NotImplementedError("Short-circuit with Type C method and sgen is only implemented for a single bus") else: - init_vm_pu = init_va_degree = "flat" + init_vm_pu = "flat" + init_va_degree = "flat" trafo_model = "pi" # Convert bus to numpy array @@ -142,14 +147,17 @@ def calc_sc(net, bus=None, kappa = ith or ip net["_options"] = {} - _add_ppc_options(net, calculate_voltage_angles=False, trafo_model=trafo_model, - check_connectivity=check_connectivity, mode="sc", switch_rx_ratio=2, - init_vm_pu=init_vm_pu, init_va_degree=init_va_degree, enforce_q_lims=False, - enforce_p_lims=False, recycle=None) - _add_sc_options(net, fault=fault, case=case, lv_tol_percent=lv_tol_percent, tk_s=tk_s, topology=topology, - r_fault_ohm=r_fault_ohm, x_fault_ohm=x_fault_ohm, kappa=kappa, ip=ip, ith=ith, - branch_results=branch_results, kappa_method=kappa_method, return_all_currents=return_all_currents, - inverse_y=inverse_y, use_pre_fault_voltage=use_pre_fault_voltage) + _add_ppc_options( + net, calculate_voltage_angles=False, trafo_model=trafo_model, check_connectivity=check_connectivity, mode="sc", + switch_rx_ratio=2, init_vm_pu=init_vm_pu, init_va_degree=init_va_degree, enforce_p_lims=False, + enforce_q_lims=False, recycle=None + ) + _add_sc_options( + net, fault=fault, case=case, lv_tol_percent=lv_tol_percent, tk_s=tk_s, topology=topology, + r_fault_ohm=r_fault_ohm, x_fault_ohm=x_fault_ohm, kappa=kappa, ip=ip, ith=ith, branch_results=branch_results, + kappa_method=kappa_method, return_all_currents=return_all_currents, inverse_y=inverse_y, + use_pre_fault_voltage=use_pre_fault_voltage + ) init_results(net, "sc") if fault in ("2ph", "3ph"): @@ -157,7 +165,7 @@ def calc_sc(net, bus=None, elif fault == "1ph": _calc_sc_1ph(net, bus) else: - raise ValueError("Invalid fault %s" % fault) + raise ValueError(f"Invalid fault {fault}") def _calc_current(net, ppci_orig, bus): @@ -202,8 +210,7 @@ def _calc_current(net, ppci_orig, bus): else: _calc_branch_currents(net, this_ppci, this_ppci_bus) - _copy_result_to_ppci_orig(ppci_orig, this_ppci, this_ppci_bus, - calc_options=net._options) + _copy_result_to_ppci_orig(ppci_orig, this_ppci, this_ppci_bus, calc_options=net._options) def _calc_sc(net, bus): diff --git a/pandapower/shortcircuit/impedance.py b/pandapower/shortcircuit/impedance.py index 05d6bf099..426535608 100644 --- a/pandapower/shortcircuit/impedance.py +++ b/pandapower/shortcircuit/impedance.py @@ -61,7 +61,7 @@ def _calc_zbus(net, ppci): ppci["internal"]["Zbus"] = inv(Ybus.toarray()) except Exception as e: _clean_up(net, res=False) - raise (e) + raise e def _calc_zbus_diag(net, ppci, bus_idx=None): diff --git a/pandapower/std_types.py b/pandapower/std_types.py index 4d543f7b9..72e09bf46 100644 --- a/pandapower/std_types.py +++ b/pandapower/std_types.py @@ -6,11 +6,14 @@ import warnings import logging -from typing import Literal, cast, get_args +from typing import Literal, cast, get_args, TYPE_CHECKING import pandas as pd -from pandapower.auxiliary import pandapowerNet +from pandapower.pp_types import StandardTypesDictKeys + +if TYPE_CHECKING: + from pandapower.network import pandapowerNet logger = logging.getLogger(__name__) @@ -38,10 +41,10 @@ def required_std_type_parameters(element: DefaultStandardTypes = "line"): def create_std_type( - net: pandapowerNet, + net: 'pandapowerNet', data: dict, name: str, - element: str = "line", + element: StandardTypesDictKeys = "line", overwrite=True, check_required=True): """ @@ -120,6 +123,7 @@ def create_std_types(net, data, element="line", overwrite=True, check_required=T - "line_dc" - "trafo" - "trafo3w" + - "fuse" overwrite: whether overwriteing existing standard type is allowed check_required: check if required standard type parameters are present diff --git a/pandapower/test/api/test_auxiliary.py b/pandapower/test/api/test_auxiliary.py index c14f11316..ade198577 100644 --- a/pandapower/test/api/test_auxiliary.py +++ b/pandapower/test/api/test_auxiliary.py @@ -10,8 +10,6 @@ import numpy as np import pandas as pd -from pandapower.control import SplineCharacteristic, Characteristic -from pandapower.control.util.characteristic import LogSplineCharacteristic from math import isclose try: @@ -21,20 +19,27 @@ except ImportError: GEOPANDAS_INSTALLED = False -from pandapower.toolbox.element_selection import get_gc_objects_dict -from pandapower.file_io import from_json_string, to_json, create_empty_network +from pandapower import pandapowerNet +from pandapower.file_io import from_json_string, to_json from pandapower.create import create_bus, create_lines, create_line, create_buses, create_shunt -from pandapower.auxiliary import get_indices, pandapowerNet +from pandapower.auxiliary import get_indices from pandapower.networks import example_simple, example_multivoltage, mv_oberrhein from pandapower.timeseries import DFData +from pandapower.toolbox.element_selection import get_gc_objects_dict from pandapower.control import ( SplineCharacteristic, ContinuousTapControl, + Characteristic, ConstControl, create_trafo_characteristic_object, ) -from pandapower.control.util.auxiliary import (create_shunt_characteristic_object, _create_trafo_characteristics, - create_q_capability_characteristics_object, get_min_max_q_mvar_from_characteristics_object) +from pandapower.control.util.characteristic import LogSplineCharacteristic +from pandapower.control.util.auxiliary import ( + create_shunt_characteristic_object, + _create_trafo_characteristics, + create_q_capability_characteristics_object, + get_min_max_q_mvar_from_characteristics_object +) class MemoryLeakDemo: @@ -164,7 +169,7 @@ def test_memory_leaks_no_copy(): types_dict0 = get_gc_objects_dict() num = 3 for _ in range(num): - net = create_empty_network() + net = pandapowerNet(name='test_memory_leaks_no_copy') # In each net copy it has only one controller ConstControl(net, 'sgen', 'p_mw', 0) @@ -332,7 +337,7 @@ def test_create_trafo_characteristics(): def test_creation_of_shunt_characteristics(): - net = create_empty_network() + net = pandapowerNet(name="test_creation_of_shunt_characteristics") b = create_buses(net, 2, 110) create_shunt(net, bus=b[1], q_mvar=-50, p_mw=0, step=1, max_step=5) net["shunt_characteristic_table"] = pd.DataFrame( @@ -421,6 +426,7 @@ def test_creation_of_q_capability_characteristics(): assert pd.notna(net.q_capability_characteristic.loc [net.gen.id_q_capability_characteristic.at[0], 'q_min_characteristic']) + def test_get_min_max_q_capability(): net = example_multivoltage() sgen_indices_with_char = [1, 2] @@ -454,9 +460,10 @@ def test_get_min_max_q_capability(): assert qmax[1] == q_max_mvar_sgen1[i] assert qmax[2] == q_max_mvar_sgen2[j] + @pytest.mark.parametrize("file_io", (False, True), ids=("Without JSON I/O", "With JSON I/O")) def test_characteristic(file_io): - net = create_empty_network() + net = pandapowerNet(name='test_characteristic') c1 = SplineCharacteristic(net, [0, 1, 2], [0, 1, 4], fill_value=(0, 4)) c2 = SplineCharacteristic(net, [0, 1, 2], [0, 1, 4], interpolator_kind="Pchip", extrapolate=False) c3 = SplineCharacteristic(net, [0, 1, 2], [0, 1, 4], interpolator_kind="hello") @@ -478,14 +485,14 @@ def test_characteristic(file_io): def test_log_characteristic_property(): - net = create_empty_network() + net = pandapowerNet(name='test_log_characteristic_property') c = LogSplineCharacteristic(net, [10, 1000, 10000], [1000, 0.1, 0.001], interpolator_kind="Pchip", extrapolate=False) c._x_vals c([2]) def test_geo_accessor_geojson(): - net = create_empty_network() + net = pandapowerNet(name='test_geo_accessor_geojson') b1 = create_bus(net, 10, geodata=(1, 1)) b2 = create_bus(net, 10, geodata=(2, 2)) l = create_lines( @@ -521,8 +528,9 @@ def test_geo_accessor_geopandas(): circle_polygon = gpd.GeoSeries([shapely.geometry.Point(reference_point)], crs=4326).to_crs(epsg=31467).buffer(radius_m).to_crs(epsg=4326).iloc[0] assert net.line.geo.geojson.within(circle_polygon).sum() == 11 - assert all(net.line[net.line.geo.geojson.within(circle_polygon)].index == [14, 17, 46, 47, 55, 116, - 117, 118, 120, 121, 134]) + assert all(net.line[net.line.geo.geojson.within(circle_polygon)].index == [ + 14, 17, 46, 47, 55, 116, 117, 118, 120, 121, 134 + ]) line = shapely.geometry.LineString([[7.8947079593416, 48.40549007606241], [7.896048283667894, 48.41060722903666], diff --git a/pandapower/test/api/test_convert_format.py b/pandapower/test/api/test_convert_format.py index 8f7ddffe1..18273fe85 100644 --- a/pandapower/test/api/test_convert_format.py +++ b/pandapower/test/api/test_convert_format.py @@ -21,25 +21,23 @@ @pytest.mark.slow @pytest.mark.parametrize("version", found_versions) def test_convert_format(version): - filename = os.path.join(folder, "example_%s.json" % version) + filename = os.path.join(folder, f"example_{version}.json") if not os.path.isfile(filename): - raise ValueError("File for version %s does not exist" % version) + raise ValueError(f"File for version {version} does not exist") try: net = from_json(filename, convert=False) if ('version' in net) and (vs.parse(str(net.version)) > vs.parse('2.0.1')): _ = from_json(filename, elements_to_deserialize=['bus', 'load']) except: - raise UserWarning("Can not load network saved in pandapower version %s" % version) + raise UserWarning(f"Can not load network saved in pandapower version {version}") vm_pu_old = net.res_bus.vm_pu.copy() convert_format(net) try: runpp(net, run_control="controller" in net and len(net.controller) > 0) except: - raise UserWarning("Can not run power flow in network " - "saved with pandapower version %s" % version) + raise UserWarning(f"Can not run power flow in network saved with pandapower version {version}") if not np.allclose(vm_pu_old.values, net.res_bus.vm_pu.values): - raise UserWarning("Power flow results mismatch " - "with pandapower version %s" % version) + raise UserWarning(f"Power flow results mismatch with pandapower version {version}") def test_convert_format_pq_bus_meas(): diff --git a/pandapower/test/api/test_create.py b/pandapower/test/api/test_create.py index 11c43e1f4..d98962495 100644 --- a/pandapower/test/api/test_create.py +++ b/pandapower/test/api/test_create.py @@ -11,8 +11,9 @@ import pandas as pd import pytest +from pandapower.network import pandapowerNet from pandapower.create import ( - create_empty_network, create_bus, create_ext_grid, create_line_from_parameters, + create_bus, create_ext_grid, create_line_from_parameters, create_load_from_cosphi, create_shunt_as_capacitor, create_sgen_from_cosphi, create_series_reactor_as_impedance, create_transformer_from_parameters, create_load, create_sgen, create_dcline, create_gen, create_ward, create_xward, create_shunt, create_line, create_transformer, create_transformer3w, @@ -31,7 +32,7 @@ def test_convenience_create_functions(): - net = create_empty_network() + net = pandapowerNet(name="test_convenience_create_functions") b1 = create_bus(net, 110.0) b2 = create_bus(net, 110.0) b3 = create_bus(net, 20) @@ -119,7 +120,7 @@ def test_convenience_create_functions(): def test_nonexistent_bus(): from functools import partial - net = create_empty_network() + net = pandapowerNet(name="test_nonexistent_bus") create_functions = [ partial(create_load, net=net, p_mw=0, q_mvar=0, bus=0, index=0), partial(create_sgen, net=net, p_mw=0, q_mvar=0, bus=0, index=0), @@ -244,7 +245,7 @@ def test_nonexistent_bus(): def test_tap_changer_type_default(): expected_default = math.nan # comment: wanted to implement "None" as default, but some test rely on that some function converts NaN to ratio tap changer. - net = create_empty_network() + net = pandapowerNet(name="test_tap_changer_type_default") create_bus(net, 110) create_bus(net, 20) data = load_std_type(net, "25 MVA 110/20 kV", "trafo") @@ -258,7 +259,7 @@ def test_tap_changer_type_default(): def test_create_line_conductance(): - net = create_empty_network() + net = pandapowerNet(name="test_create_line_conductance") create_bus(net, 20) create_bus(net, 20) create_std_type( @@ -281,7 +282,7 @@ def test_create_line_conductance(): def test_create_buses(): - net = create_empty_network() + net = pandapowerNet(name="test_create_buses") # standard b1 = create_buses(net, 3, 110, test_kwargs="dummy_string") # with geodata @@ -300,8 +301,7 @@ def test_create_buses(): def test_create_lines(): - # standard - net = create_empty_network() + net = pandapowerNet(name="test_create_lines 0") b1 = create_bus(net, 10) b2 = create_bus(net, 10) l = create_lines( @@ -317,7 +317,7 @@ def test_create_lines(): assert len(set(net.line.r_ohm_per_km)) == 1 assert all(net.line.test_kwargs == "dummy_string") - net = create_empty_network() + net = pandapowerNet(name="test_create_lines 1") b1 = create_bus(net, 10) b2 = create_bus(net, 10) l = create_lines( @@ -332,7 +332,7 @@ def test_create_lines(): assert sum(net.line.std_type == "NA2XS2Y 1x240 RM/25 6/10 kV") == 1 # with geodata - net = create_empty_network() + net = pandapowerNet(name="test_create_lines 2") b1 = create_bus(net, 10) b2 = create_bus(net, 10) l = create_lines( @@ -349,7 +349,7 @@ def test_create_lines(): assert net.line.at[l[1], "geo"] == geojson.dumps(geojson.LineString([(1, 1), (1, 2)]), sort_keys=True) # setting params as single value - net = create_empty_network() + net = pandapowerNet(name="test_create_lines 3") b1 = create_bus(net, 10) b2 = create_bus(net, 10) l = create_lines( @@ -382,7 +382,7 @@ def test_create_lines(): assert net.line.at[l[1], "parallel"] == 1 # setting params as array - net = create_empty_network() + net = pandapowerNet(name="test_create_lines 4") b1 = create_bus(net, 10) b2 = create_bus(net, 10) l = create_lines( @@ -417,7 +417,7 @@ def test_create_lines(): def test_create_lines_from_parameters(): # standard - net = create_empty_network() + net = pandapowerNet(name="test_create_lines_from_parameters 0") b1 = create_bus(net, 10) b2 = create_bus(net, 10) l = create_lines_from_parameters( @@ -440,7 +440,7 @@ def test_create_lines_from_parameters(): assert net.line.test_kwargs.at[l[0]] == "dummy_string" # with geodata - net = create_empty_network() + net = pandapowerNet(name="test_create_lines_from_parameters 1") b1 = create_bus(net, 10) b2 = create_bus(net, 10) l = create_lines_from_parameters( @@ -460,7 +460,7 @@ def test_create_lines_from_parameters(): assert net.line.at[l[1], "geo"] == geojson.dumps(geojson.LineString([(1, 1), (1, 2)]), sort_keys=True) # setting params as single value - net = create_empty_network() + net = pandapowerNet(name="test_create_lines_from_parameters 2") b1 = create_bus(net, 10) b2 = create_bus(net, 10) l = create_lines_from_parameters( @@ -506,7 +506,7 @@ def test_create_lines_from_parameters(): assert all(net.line.test_kwargs == "dummy_string") # setting params as array - net = create_empty_network() + net = pandapowerNet(name="test_create_lines_from_parameters 3") b1 = create_bus(net, 10) b2 = create_bus(net, 10) l = create_lines_from_parameters( @@ -562,7 +562,7 @@ def test_create_lines_from_parameters(): def test_create_lines_raise_errorexcept(): # standard - net = create_empty_network() + net = pandapowerNet(name="test_create_lines_raise_errorexcept") b1 = create_bus(net, 10) b2 = create_bus(net, 10) create_lines_from_parameters( @@ -615,8 +615,7 @@ def test_create_lines_raise_errorexcept(): def test_create_lines_optional_columns(): - # - net = create_empty_network() + net = pandapowerNet(name="test_create_lines_optional_columns") create_buses(net, 5, 110) create_line(net, 0, 1, 10, "48-AL1/8-ST1A 10.0") create_line_from_parameters(net, 3, 4, 10, 1, 1, 1, 100) @@ -645,9 +644,9 @@ def test_create_lines_optional_columns(): def test_create_line_alpha_temperature(): - net = create_empty_network() + net = pandapowerNet(name="test_create_line_alpha_temperature") create_buses(net, 5, 110) - + l1 = create_line(net, 0, 1, 10, "48-AL1/8-ST1A 10.0") l2 = create_line( net, @@ -678,7 +677,7 @@ def test_create_line_alpha_temperature(): def test_create_transformers_from_parameters(): # standard - net = create_empty_network() + net = pandapowerNet(name="test_create_transformers_from_parameters 0") b1 = create_bus(net, 15) b2 = create_bus(net, 0.4) index = create_transformers_from_parameters( @@ -718,7 +717,7 @@ def test_create_transformers_from_parameters(): assert len(net.trafo.foo) == 2 # setting params as single value - net = create_empty_network() + net = pandapowerNet(name="test_create_transformers_from_parameters 1") b1 = create_bus(net, 15) b2 = create_bus(net, 0.4) create_transformers_from_parameters( @@ -763,7 +762,7 @@ def test_create_transformers_from_parameters(): assert all(net.trafo.test_kwargs == "dummy_string") # setting params as array - net = create_empty_network() + net = pandapowerNet(name="test_create_transformers_from_parameters 2") b1 = create_bus(net, 10) b2 = create_bus(net, 10) t = create_transformers_from_parameters( @@ -807,7 +806,7 @@ def test_create_transformers_from_parameters(): def test_create_transformers_raise_errorexcept(): # standard - net = create_empty_network() + net = pandapowerNet(name="test_create_transformers_raise_errorexcept 0") b1 = create_bus(net, 10) b2 = create_bus(net, 10) create_transformers_from_parameters( @@ -823,7 +822,6 @@ def test_create_transformers_raise_errorexcept(): i0_percent=0.3, foo=2, ) - with pytest.raises(UserWarning, match=r"Trafos with indexes \[1\] already exist."): create_transformers_from_parameters( net, @@ -838,7 +836,8 @@ def test_create_transformers_raise_errorexcept(): i0_percent=0.3, index=[2, 1], ) - net = create_empty_network() + + net = pandapowerNet(name="test_create_transformers_raise_errorexcept 1") b1 = create_bus(net, 10) b2 = create_bus(net, 10) create_transformers_from_parameters( @@ -889,7 +888,7 @@ def test_create_transformers_raise_errorexcept(): def test_trafo_2_tap_changers(): - net = create_empty_network() + net = pandapowerNet(name="test_trafo_2_tap_changers") b1 = create_bus(net, 110) b2 = create_bus(net, 20) create_transformer(net, b1, b2, "40 MVA 110/20 kV") @@ -917,7 +916,7 @@ def test_trafo_2_tap_changers(): def test_trafo_2_tap_changers_parameters(): - net = create_empty_network() + net = pandapowerNet(name="test_trafo_2_tap_changers_parameters") b1 = create_bus(net, 110) b2 = create_bus(net, 20) @@ -943,7 +942,7 @@ def test_trafo_2_tap_changers_parameters(): def test_trafos_2_tap_changers_parameters(): - net = create_empty_network() + net = pandapowerNet(name="test_trafos_2_tap_changers_parameters") b1 = create_bus(net, 110) b2 = create_bus(net, 20) @@ -971,7 +970,7 @@ def test_trafos_2_tap_changers_parameters(): def test_create_transformers(): - net = create_empty_network() + net = pandapowerNet(name="test_create_transformers") b1 = create_bus(net, 10) b2 = create_bus(net, .4) b3 = create_bus(net, .4) @@ -1016,7 +1015,7 @@ def test_create_transformers(): assert dataframes_equal(net.trafo, res_df) def test_create_transformers_for_single(): - net = create_empty_network() + net = pandapowerNet(name="test_create_transformers_for_single") b1 = create_bus(net, 10) b2 = create_bus(net, .4) create_transformers( @@ -1062,7 +1061,7 @@ def test_create_transformers_for_single(): def test_create_transformers3w(): - net = create_empty_network() + net = pandapowerNet(name="test_create_transformers3w") b1 = create_bus(net, 110) b2 = create_bus(net, 20) b3 = create_bus(net, 20) @@ -1115,8 +1114,11 @@ def test_create_transformers3w(): }).set_index(pd.Index([5, 6])) assert dataframes_equal(net.trafo3w, res_df) + def net_transformer3w_from_parameters(**kwargs): - net = create_empty_network() + # setting params as single value + net = pandapowerNet(name="net_transformers3w_from_parameters 0") + b1 = create_bus(net, 15) b2 = create_bus(net, 0.4) b3 = create_bus(net, 0.9) @@ -1174,7 +1176,7 @@ def test_create_transformers3w_from_parameters(): assert all(net.trafo3w.test_kwargs == "dummy_string") # setting params as array - net = create_empty_network() + net = pandapowerNet(name="test_create_transformers3w_from_parameters 1") b1 = create_bus(net, 10) b2 = create_bus(net, 0.4) b3 = create_bus(net, 0.9) @@ -1257,7 +1259,7 @@ def test_create_transformers3w_raise_errorexcept(): mag0_percent=30, index=[2, 1], ) - net = create_empty_network() + net = pandapowerNet(name="test_create_transformers3w_raise_errorexcept 1") b1 = create_bus(net, 15) b2 = create_bus(net, 0.4) b3 = create_bus(net, 0.9) @@ -1344,7 +1346,7 @@ def test_create_transformers3w_raise_errorexcept(): def test_create_switches(): - net = create_empty_network() + net = pandapowerNet(name="test_create_switches") # standard b1 = create_bus(net, 110) b2 = create_bus(net, 110) @@ -1380,7 +1382,7 @@ def test_create_switches(): def test_create_switches_raise_errorexcept(): - net = create_empty_network() + net = pandapowerNet(name="test_create_switches_raise_errorexcept") # standard b1 = create_bus(net, 110) b2 = create_bus(net, 110) @@ -1502,7 +1504,7 @@ def test_create_switches_raise_errorexcept(): def test_create_loads(): - net = create_empty_network() + net = pandapowerNet(name="test_create_loads") # standard b1 = create_bus(net, 110) b2 = create_bus(net, 110) @@ -1544,7 +1546,7 @@ def test_create_loads(): def test_create_loads_raise_errorexcept(): - net = create_empty_network() + net = pandapowerNet(name="test_create_loads_raise_errorexcept") # standard b1 = create_bus(net, 110) b2 = create_bus(net, 110) @@ -1594,7 +1596,7 @@ def test_create_loads_raise_errorexcept(): def test_const_percent_values_deprecated_handling(): # This test checks that passing const_z_percent and const_i_percent to create_load # sets all four percent columns and triggers the deprecation warning. - net = create_empty_network() + net = pandapowerNet(name="test_const_percent_values_deprecated_handling") b1 = create_bus(net, 20) with pytest.warns(DeprecationWarning, match="const_z_percent and const_i_percent will be deprecated"): idx = create_load( @@ -1609,7 +1611,7 @@ def test_const_percent_values_deprecated_handling(): assert load_idx.const_i_q_percent == 22 def test_create_storages(): - net = create_empty_network() + net = pandapowerNet(name="test_create_storage") b1 = create_bus(net, 110) b2 = create_bus(net, 110) b3 = create_bus(net, 110) @@ -1666,7 +1668,7 @@ def test_create_storages(): def test_create_wards(): - net = create_empty_network() + net = pandapowerNet(name="test_create_wards") b1 = create_bus(net, 110) b2 = create_bus(net, 110) b3 = create_bus(net, 110) @@ -1705,7 +1707,7 @@ def test_create_wards(): def test_create_sgens(): - net = create_empty_network() + net = pandapowerNet(name="test_create_sgens") # standard b1 = create_bus(net, 110) b2 = create_bus(net, 110) @@ -1756,7 +1758,7 @@ def test_create_sgens(): def test_create_sgen_controllable(): - net = create_empty_network() + net = pandapowerNet(name="test_create_sgen_controllable") # drop controllable column (it is created by network schema but is not required by pandera) # TODO remove this step with pandera merged fully del net.sgen['controllable'] @@ -1772,7 +1774,7 @@ def test_create_sgen_controllable(): def test_create_sgens_controllable(): - net = create_empty_network() + net = pandapowerNet(name="test_create_sgens_controllable") # drop controllable column (it is created by network schema but is not required by pandera) # TODO remove this step with pandera merged fully del net.sgen['controllable'] @@ -1788,7 +1790,7 @@ def test_create_sgens_controllable(): def test_create_sgens_raise_errorexcept(): - net = create_empty_network() + net = pandapowerNet(name="test_create_sgens_raise_errorexcept") # standard b1 = create_bus(net, 110) b2 = create_bus(net, 110) @@ -1846,7 +1848,7 @@ def test_create_sgens_raise_errorexcept(): def test_create_gens(): - net = create_empty_network() + net = pandapowerNet(name="test_create_gens") # standard b1 = create_bus(net, 110) b2 = create_bus(net, 110) @@ -1899,7 +1901,7 @@ def test_create_gens(): def test_create_gen_controllable(): - net = create_empty_network() + net = pandapowerNet(name="test_create_gen_controllable") # drop controllable column (it is created by network schema but is not required by pandera) # TODO remove this step with pandera merged fully del net.gen['controllable'] @@ -1915,7 +1917,7 @@ def test_create_gen_controllable(): def test_create_gens_controllable(): - net = create_empty_network() + net = pandapowerNet(name="test_create_gens_controllable") # drop controllable column (it is created by network schema but is not required by pandera) # TODO remove this step with pandera merged fully del net.gen['controllable'] @@ -1930,7 +1932,7 @@ def test_create_gens_controllable(): assert not net.gen.loc[s2, 'controllable'] def test_create_gens_raise_errorexcept(): - net = create_empty_network() + net = pandapowerNet(name="test_create_gens_raise_errorexcept") # standard b1 = create_bus(net, 110) b2 = create_bus(net, 110) diff --git a/pandapower/test/api/test_diagnostic.py b/pandapower/test/api/test_diagnostic.py index 164b03367..625a9190b 100644 --- a/pandapower/test/api/test_diagnostic.py +++ b/pandapower/test/api/test_diagnostic.py @@ -8,7 +8,7 @@ import pytest import numpy as np -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet from pandapower.create import create_ext_grid, create_switch from pandapower.toolbox.grid_modification import drop_trafos, change_std_type from pandapower.networks import example_multivoltage, example_simple diff --git a/pandapower/test/api/test_file_io.py b/pandapower/test/api/test_file_io.py index 64b7c0d82..90e5173c8 100644 --- a/pandapower/test/api/test_file_io.py +++ b/pandapower/test/api/test_file_io.py @@ -13,14 +13,13 @@ import pytest from pandas.testing import assert_frame_equal, assert_series_equal -from pandapower import pp_dir -from pandapower.auxiliary import pandapowerNet -from pandapower.control import DiscreteTapControl, ConstControl, ContinuousTapControl, Characteristic, \ - SplineCharacteristic +from pandapower import pp_dir, pandapowerNet +from pandapower.control import ( + DiscreteTapControl, ConstControl, ContinuousTapControl, Characteristic, SplineCharacteristic +) from pandapower.create import create_transformer from pandapower.convert_format import convert_format -from pandapower.file_io import to_pickle, from_pickle, to_excel, from_excel, from_json, to_json, \ - from_json_string, create_empty_network +from pandapower.file_io import to_pickle, from_pickle, to_excel, from_excel, from_json, to_json, from_json_string from pandapower.io_utils import PPJSONEncoder, PPJSONDecoder from pandapower.networks import mv_oberrhein, simple_four_bus_system, case9, case14, create_kerber_dorfnetz from pandapower.run import set_user_pf_options, runpp @@ -31,7 +30,7 @@ from pandapower.topology.create_graph import create_nxgraph try: - import cryptography.fernet # type: ignore + import cryptography.fernet # type: ignore cryptography_INSTALLED = True except ImportError: @@ -70,6 +69,7 @@ def net_in(request): net.line.at[1, "geo"] = geojson.dumps(geojson.LineString([(5.5, 5.5), (6.6, 6.6), (7.7, 7.7)])) return net + @pytest.fixture() def net_charactistics(): return from_json(os.path.join(pp_dir, "test", "test_files", "from_excel_characteristics.json")) @@ -143,11 +143,10 @@ def test_json_basic(net_in, tmp_path): def test_json_controller_none(): - try: - from_json(os.path.join(pp_dir, 'test', 'test_files', - 'controller_containing_NoneNan.json'), convert=False) - except: - raise (UserWarning("empty net with controller containing Nan/None can't be loaded")) + """ + empty net with controller containing Nan/None can't be loaded + """ + from_json(os.path.join(pp_dir, 'test', 'test_files', 'controller_containing_NoneNan.json'), convert=False) def test_json(net_in, tmp_path): @@ -435,8 +434,7 @@ def test_elements_to_deserialize_wo_keep(tmp_path): net = mv_oberrhein() filename = os.path.abspath(str(tmp_path)) + "testfile.json" to_json(net, filename) - net_select = from_json(filename, elements_to_deserialize=['bus', 'load'], - keep_serialized_elements=False) + net_select = from_json(filename, elements_to_deserialize=['bus', 'load'], keep_serialized_elements=False) for key, item in net_select.items(): if key in ['bus', 'load']: assert isinstance(item, pd.DataFrame) @@ -464,16 +462,6 @@ def test_elements_to_deserialize_wo_keep(tmp_path): assert_net_equal(net, net_select, name_selection=['bus', 'load']) -@pytest.mark.skipif(not GEOPANDAS_INSTALLED, reason="requires the GeoPandas library") -def test_empty_geo_dataframe(): - net = create_empty_network() - net['bus_geodata'] = pd.DataFrame(columns=['geometry']) - net['bus_geodata'] = gpd.GeoDataFrame(net['bus_geodata']) - s = to_json(net) - net1 = from_json_string(s) - assert_net_equal(net, net1) - - def test_json_io_with_characteristics(net_in): c1 = Characteristic.from_points(net_in, [(0, 0), (1, 1)]) c2 = SplineCharacteristic.from_points(net_in, [(2, 2), (3, 4), (4, 5)]) @@ -491,16 +479,16 @@ def test_replace_elements_json_string(net_in): net_orig = copy.deepcopy(net_in) ConstControl(net_orig, 'load', 'p_mw', 0) json_string = to_json(net_orig) - net_load = from_json_string(json_string, - replace_elements={r'pandapower.control.controller.const_control': - r'pandapower.test.api.input_files.test_control', - r'ConstControl': r'MyTestControl'}) + net_load = from_json_string(json_string, replace_elements={ + r'pandapower.control.controller.const_control': r'pandapower.test.api.input_files.test_control', + r'ConstControl': r'MyTestControl' + }) assert net_orig.controller.at[0, 'object'] != net_load.controller.at[0, 'object'] assert not nets_equal(net_orig, net_load) - net_load = from_json_string(json_string, - replace_elements={r'pandapower.control.controller.const_control': - r'pandapower.test.api.input_files.test_control'}) + net_load = from_json_string(json_string, replace_elements={ + r'pandapower.control.controller.const_control': r'pandapower.test.api.input_files.test_control' + }) assert net_orig.controller.at[0, 'object'] == net_load.controller.at[0, 'object'] assert nets_equal(net_orig, net_load) runpp(net_load, run_control=True) @@ -511,7 +499,7 @@ def test_replace_elements_json_string(net_in): def test_json_generalized(): - general_net0 = pandapowerNet(pandapowerNet.create_dataframes({ + general_net0 = pandapowerNet(name='test_json_generalized', custom_data=pandapowerNet.create_dataframes({ # structure data "df1": {'col1': np.dtype(object), 'col2': 'f8'}, @@ -524,8 +512,8 @@ def test_json_generalized(): for general_in in [general_net0, general_net1]: out = from_json_string(to_json(general_in), - empty_dict_like_object=pandapowerNet({})) - assert sorted(out.keys()) == ["df1", "df2"] + empty_dict_like_object=pandapowerNet(name='')) + assert sorted(out.keys()) == sorted(general_in.keys()) assert nets_equal(out, general_in) diff --git a/pandapower/test/api/test_group.py b/pandapower/test/api/test_group.py index fd4de4c1d..2015b365e 100644 --- a/pandapower/test/api/test_group.py +++ b/pandapower/test/api/test_group.py @@ -11,8 +11,7 @@ import pytest from pandapower.create import ( - create_group, create_group_from_dict, create_empty_network, create_buses, create_lines, create_ext_grid, - create_loads, create_switches + create_group_from_dict, create_group, create_buses, create_lines, create_ext_grid, create_loads, create_switches, ) from pandapower.file_io import to_json, from_json_string from pandapower.groups import ( @@ -22,6 +21,7 @@ set_group_reference_column, remove_not_existing_group_members, ensure_lists_in_group_element_column, check_unique_group_rows, drop_group_and_elements, return_group_as_net ) +from pandapower.network import pandapowerNet from pandapower.networks import case24_ieee_rts, create_cigre_network_mv from pandapower.run import runpp from pandapower.toolbox import pp_elements, dataframes_equal, drop_lines, drop_trafos, drop_buses, drop_elements_simple @@ -191,7 +191,7 @@ def test_remove_not_existing_group_members(nets_to_test_group): def test_check_unique_group_rows(): - net = create_empty_network() + net = pandapowerNet(name="test_check_unique_group_rows") empty_group = deepcopy(net.group) # test with duplicated rows @@ -433,7 +433,7 @@ def test_element_associated_groups(nets_to_test_group): def test_elements_connected_to_group(): # test net - net = create_empty_network() + net = pandapowerNet(name="test_elements_connected_to_group") buses = create_buses(net, 12, 20) create_lines(net, [buses[0]] * 6, list(range(1, 7)), length_km=0.5, std_type="48-AL1/8-ST1A 20.0") diff --git a/pandapower/test/api/test_std_types.py b/pandapower/test/api/test_std_types.py index 85dd8d9c6..54471ee40 100644 --- a/pandapower/test/api/test_std_types.py +++ b/pandapower/test/api/test_std_types.py @@ -6,8 +6,6 @@ import pytest -from pandapower.networks import simple_mv_open_ring_net -from pandapower import create_empty_network, add_temperature_coefficient from pandapower.create import ( create_bus, create_buses, @@ -15,23 +13,26 @@ create_line, create_line_from_parameters ) +from pandapower.network import pandapowerNet +from pandapower.networks import simple_mv_open_ring_net from pandapower.std_types import ( + add_temperature_coefficient, + change_std_type, + copy_std_types, create_std_type, create_std_types, - load_std_type, - change_std_type, + delete_std_type, find_std_type_alternative, find_std_type_by_parameter, - delete_std_type, + load_std_type, + parameter_from_std_type, rename_std_type, - copy_std_types, std_type_exists, - parameter_from_std_type ) def test_create_and_load_std_type_line(): - net = create_empty_network() + net = pandapowerNet(name="test_create_and_load_std_type_line") c = 40 r = 0.01 x = 0.02 @@ -63,7 +64,7 @@ def test_create_and_load_std_type_line(): def test_create_std_types_line(): - net = create_empty_network() + net = pandapowerNet(name="test_create_std_types_line") c = 40 r = 0.01 x = 0.02 @@ -78,8 +79,8 @@ def test_create_std_types_line(): def test_create_std_types_from_net_line(): - net1 = create_empty_network() - net2 = create_empty_network() + net1 = pandapowerNet(name="test_create_std_types_from_net_line 0") + net2 = pandapowerNet(name="test_create_std_types_from_net_line 1") c = 40 r = 0.01 @@ -94,7 +95,7 @@ def test_create_std_types_from_net_line(): def test_create_and_load_std_type_trafo(): - net = create_empty_network() + net = pandapowerNet(name="test_create_and_load_std_type_trafo") sn_mva = 40 vn_hv_kv = 110 vn_lv_kv = 20 @@ -146,7 +147,7 @@ def test_create_and_load_std_type_trafo(): def test_create_and_load_std_type_trafo3w(): - net = create_empty_network() + net = pandapowerNet(name="test_create_and_load_std_type_trafo3w") sn_hv_mva = 40; sn_mv_mva = 20; sn_lv_mva = 20 vn_hv_kv = 110; vn_mv_kv = 50; vn_lv_kv = 20 vk_hv_percent = 5.; vk_mv_percent = 5.; vk_lv_percent = 5. @@ -204,7 +205,7 @@ def test_create_and_load_std_type_trafo3w(): def test_create_std_types_trafo(): - net = create_empty_network() + net = pandapowerNet(name="test_create_std_types_trafo") sn_mva = 40 vn_hv_kv = 110 vn_lv_kv = 20 @@ -224,7 +225,7 @@ def test_create_std_types_trafo(): def test_create_std_types_trafo3w(): - net = create_empty_network() + net = pandapowerNet(name="test_create_std_types_trafo3w") sn_hv_mva = 40; sn_mv_mva = 20; sn_lv_mva = 20 vn_hv_kv = 110; vn_mv_kv = 50; vn_lv_kv = 20 vk_hv_percent = 5.; vk_mv_percent = 5.; vk_lv_percent = 5. @@ -246,7 +247,7 @@ def test_create_std_types_trafo3w(): def test_find_line_type(): - net = create_empty_network() + net = pandapowerNet(name="test_find_line_type") c = 40000 r = 1.5 x = 2.0 @@ -281,7 +282,7 @@ def test_find_std_alternative(): def test_change_type_line(): - net = create_empty_network() + net = pandapowerNet(name="test_change_type_line") r1 = 0.01 x1 = 0.02 c1 = 40 @@ -317,7 +318,7 @@ def test_change_type_line(): def test_parameter_from_std_type_line(): - net = create_empty_network() + net = pandapowerNet(name="test_parameter_from_std_type_line") r1 = 0.01 x1 = 0.02 c1 = 40 @@ -364,7 +365,7 @@ def test_add_temperature_coefficient(): def test_delete_std_type(): - net = create_empty_network() + net = pandapowerNet(name="test_delete_std_type") trafo3w_types = set(net.std_types["trafo3w"].keys()) existing_trafo3w_std_type = sorted(trafo3w_types)[0] delete_std_type(net, existing_trafo3w_std_type, "trafo3w") @@ -372,7 +373,7 @@ def test_delete_std_type(): def test_rename_std_type(): - net = create_empty_network() + net = pandapowerNet(name="test_rename_std_type") existing_line_std_type = sorted(net.std_types["line"].keys())[0] existing_line_std_type2 = sorted(net.std_types["line"].keys())[1] existing_trafo3w_std_type = sorted(net.std_types["trafo3w"].keys())[0] diff --git a/pandapower/test/conftest.py b/pandapower/test/conftest.py index 35b904ceb..116abe582 100644 --- a/pandapower/test/conftest.py +++ b/pandapower/test/conftest.py @@ -8,9 +8,9 @@ import pytest from pandapower.create import ( - create_empty_network, create_bus, create_ext_grid, create_transformer, create_line, create_load, create_gen, - create_sgen + create_bus, create_ext_grid, create_transformer, create_line, create_load, create_gen, create_sgen ) +from pandapower import pandapowerNet from pandapower.test.loadflow.result_test_network_generator import result_test_network_generator @@ -35,7 +35,7 @@ def pytest_collection_modifyitems(config, items): @pytest.fixture(scope="session") def simple_network(): - net = create_empty_network() + net = pandapowerNet(name='simple_network') b1 = create_bus(net, name="bus1", vn_kv=10.) create_ext_grid(net, b1) b2 = create_bus(net, name="bus2", geodata=(1, 2)) diff --git a/pandapower/test/consistency_checks.py b/pandapower/test/consistency_checks.py index ccde49cab..101722409 100644 --- a/pandapower/test/consistency_checks.py +++ b/pandapower/test/consistency_checks.py @@ -21,21 +21,25 @@ def runpp_with_consistency_checks(net, **kwargs): consistency_checks(net) return True + def runpp_3ph_with_consistency_checks(net, **kwargs): runpp_3ph(net, **kwargs) consistency_checks_3ph(net) return True + def rundcpp_with_consistency_checks(net, **kwargs): rundcpp(net, **kwargs) consistency_checks(net, test_q=False) return True + def runpp_pgm_with_consistency_checks(net): runpp_pgm(net, error_tolerance_vm_pu=1e-11, symmetric=True) consistency_checks(net) return True + def runpp_pgm_3ph_with_consistency_checks(net): runpp_pgm(net, error_tolerance_vm_pu=1e-11, symmetric=False) consistency_checks_3ph(net) @@ -58,13 +62,13 @@ def indices_consistent(net): for element in elements: e_idx = net[element].index res_idx = net["res_" + element].index - assert len(e_idx) == len(res_idx), "length of %s bus and res_%s indices do not match"%(element, element) - assert all(e_idx == res_idx), "%s bus and res_%s indices do not match"%(element, element) + assert len(e_idx) == len(res_idx), f"length of {element} bus and res_{element} indices do not match" + assert all(e_idx == res_idx), f"{element} bus and res_{element} indices do not match" def branch_loss_consistent_with_bus_feed_in(net, atol=1e-2): """ - The surpluss of bus feed summed over all buses always has to be equal to the sum of losses in + The surplus of bus feed summed over all buses always has to be equal to the sum of losses in all branches. """ # Active Power @@ -72,27 +76,46 @@ def branch_loss_consistent_with_bus_feed_in(net, atol=1e-2): bus_surplus_q = -net.res_bus.q_mvar.sum() bus_dc_surplus_p = -net.res_bus_dc.p_mw.sum() - branch_loss_p = net.res_line.pl_mw.values.sum() + net.res_trafo.pl_mw.values.sum() + \ - net.res_trafo3w.pl_mw.values.sum() + net.res_impedance.pl_mw.values.sum() + \ - net.res_dcline.pl_mw.values.sum() + net.res_tcsc.pl_mw.values.sum() - branch_loss_q = net.res_line.ql_mvar.values.sum() + net.res_trafo.ql_mvar.values.sum() + \ - net.res_trafo3w.ql_mvar.values.sum() + net.res_impedance.ql_mvar.values.sum() + \ - net.res_dcline.q_to_mvar.values.sum() + net.res_dcline.q_from_mvar.values.sum() + \ - net.res_tcsc.ql_mvar.values.sum() + branch_loss_p = ( + net.res_line.pl_mw.values.sum() + + net.res_trafo.pl_mw.values.sum() + + net.res_trafo3w.pl_mw.values.sum() + + net.res_impedance.pl_mw.values.sum() + + net.res_dcline.pl_mw.values.sum() + + net.res_tcsc.pl_mw.values.sum() + ) + branch_loss_q = ( + net.res_line.ql_mvar.values.sum() + + net.res_trafo.ql_mvar.values.sum() + + net.res_trafo3w.ql_mvar.values.sum() + + net.res_impedance.ql_mvar.values.sum() + + net.res_dcline.q_to_mvar.values.sum() + + net.res_dcline.q_from_mvar.values.sum() + + net.res_tcsc.ql_mvar.values.sum() + ) branch_dc_loss = net.res_line_dc.pl_mw.values.sum() try: assert isclose(bus_surplus_p, branch_loss_p, atol=atol) except AssertionError: - raise AssertionError("Branch losses are %.4f MW, but power generation at the buses exceeds the feedin by %.4f MW"%(branch_loss_p, bus_surplus_p)) + raise AssertionError( + f"Branch losses are {branch_loss_p:.4f} MW, " + f"but power generation at the buses exceeds the feedin by {bus_surplus_p:.4f} MW" + ) try: assert isclose(bus_dc_surplus_p, branch_dc_loss, atol=atol) except AssertionError: - raise AssertionError("DC branch losses are %.4f MW, but power generation at the DC buses exceeds the feedin by %.4f MW"%(branch_dc_loss, bus_dc_surplus_p)) + raise AssertionError( + f"DC branch losses are {branch_dc_loss:.4f} MW, " + f"but power generation at the DC buses exceeds the feedin by {bus_dc_surplus_p:.4f} MW" + ) try: assert isclose(bus_surplus_q, branch_loss_q, atol=atol) except AssertionError: - raise AssertionError("Branch losses are %.4f MVar, but power generation at the buses exceeds the feedin by %.4f MVar"%(branch_loss_q, bus_surplus_q)) + raise AssertionError( + f"Branch losses are {branch_loss_q:.4f} MVar, " + f"but power generation at the buses exceeds the feedin by {bus_surplus_q:.4f} MVar" + ) def element_power_consistent_with_bus_power(net, rtol=1e-2, test_q=True): diff --git a/pandapower/test/contingency/test_contingency.py b/pandapower/test/contingency/test_contingency.py index 33f7b1937..253572c9e 100644 --- a/pandapower/test/contingency/test_contingency.py +++ b/pandapower/test/contingency/test_contingency.py @@ -24,9 +24,9 @@ run_contingency_ls2g, ) from pandapower.contingency.contingency_parallel import run_contingency_parallel +from pandapower.network import pandapowerNet from pandapower.networks.power_system_test_cases import case9, case118, case14 from pandapower.create import ( - create_empty_network, create_buses, create_ext_grid, create_lines, @@ -207,7 +207,7 @@ def test_case118(): # @pytest.mark.xfail(reason="remove this xfail when new version of lightsim2grid available") @pytest.mark.skipif(not lightsim2grid_installed, reason="lightsim2grid package is not installed") def test_unequal_trafo_hv_lv_impedances(): - net = create_empty_network() + net = pandapowerNet(name="test_unequal_trafo_hv_lv_impedances") create_buses(net, 4, 110) create_ext_grid(net, 0) @@ -296,7 +296,7 @@ def test_lightsim2grid_distributed_slack(): @pytest.mark.skipif(not lightsim2grid_installed, reason="lightsim2grid package is not installed") def test_lightsim2grid_phase_shifters(): - net = create_empty_network() + net = pandapowerNet(name="test_lightsim2grid_phase_shifters") set_user_pf_options(net, calculate_voltage_angles=True) create_buses(net, 4, 110) create_gen(net, 0, 0, slack=True, slack_weight=1) diff --git a/pandapower/test/control/test_continuous_tap_control.py b/pandapower/test/control/test_continuous_tap_control.py index b275adfe1..564507d7f 100644 --- a/pandapower/test/control/test_continuous_tap_control.py +++ b/pandapower/test/control/test_continuous_tap_control.py @@ -11,10 +11,13 @@ logger = log.getLogger(__name__) from pandapower import set_user_pf_options, runpp -from pandapower.create import create_empty_network, create_buses, create_ext_grid, create_lines, create_transformer, \ - create_load, create_bus, create_line, create_transformer3w +from pandapower.create import ( + create_buses, create_ext_grid, create_lines, create_transformer, create_load, create_bus, create_line, + create_transformer3w +) +from pandapower.network import pandapowerNet from pandapower.networks import simple_four_bus_system, mv_oberrhein -from pandapower.toolbox.data_modification import reindex_buses, create_continuous_bus_index +from pandapower.toolbox.data_modification import create_continuous_bus_index from pandapower.control import ContinuousTapControl @@ -158,7 +161,7 @@ def test_continuous_tap_control_hv(): def test_continuous_tap_control_vectorized_lv(): # --- load system and run power flow - net = create_empty_network() + net = pandapowerNet(name="test_continuous_tap_control_vectorized_lv") create_buses(net, 6, 110) create_buses(net, 5, 20) create_ext_grid(net, 0) @@ -195,7 +198,7 @@ def test_continuous_tap_control_vectorized_lv(): def test_continuous_tap_control_vectorized_hv(): # --- load system and run power flow - net = create_empty_network() + net = pandapowerNet(name="test_continuous_tap_control_vectorized_hv") create_buses(net, 6, 20) create_buses(net, 5, 110) create_ext_grid(net, 0) @@ -232,7 +235,7 @@ def test_continuous_tap_control_vectorized_hv(): def test_continuous_tap_control_side_mv(): # --- load system and run power flow - net = create_empty_network() + net = pandapowerNet(name="test_continuous_tap_control_side_mv") create_buses(net, 2, 110) create_buses(net, 1, 20) create_bus(net, 10) @@ -262,7 +265,7 @@ def test_continuous_tap_control_side_mv(): def test_continuous_tap_control_reindexed(): # --- load system and run power flow - net = create_empty_network() + net = pandapowerNet(name="test_continuous_tap_control_reindexed") create_buses(net, 2, 110, index=[350, 230]) create_buses(net, 1, 20, index=[240]) create_bus(net, 10, index=100) @@ -293,7 +296,7 @@ def test_continuous_tap_control_reindexed(): def test_continuous_tap_control_side_hv_reversed_3w(): # --- load system and run power flow - net = create_empty_network() + net = pandapowerNet(name="test_continuous_tap_control_side_hv_reversed_3w") create_buses(net, 2, 110) create_buses(net, 1, 20) create_bus(net, 10) diff --git a/pandapower/test/control/test_der_control.py b/pandapower/test/control/test_der_control.py index 1b156169e..e89e97cd6 100644 --- a/pandapower/test/control/test_der_control.py +++ b/pandapower/test/control/test_der_control.py @@ -12,8 +12,8 @@ from pandapower.control.controller import DERController as DERModels from pandapower.control.controller.DERController import DERController from pandapower.control.controller.const_control import ConstControl -from pandapower.create import create_empty_network, create_buses, create_ext_grid, create_sgen, create_line, \ - create_bus +from pandapower.create import create_buses, create_ext_grid, create_sgen, create_line, create_bus +from pandapower.network import pandapowerNet from pandapower.run import runpp from pandapower.timeseries.data_sources.frame_data import DFData from pandapower.timeseries.output_writer import OutputWriter @@ -29,7 +29,7 @@ def simple_test_net(): - net = create_empty_network() + net = pandapowerNet(name="simple_test_net") create_buses(net, 2, vn_kv=20) create_ext_grid(net, 0) create_sgen(net, 1, p_mw=2., sn_mva=3, name="DER1") diff --git a/pandapower/test/control/test_discrete_tap_control.py b/pandapower/test/control/test_discrete_tap_control.py index 92e4e6828..b12b70709 100644 --- a/pandapower/test/control/test_discrete_tap_control.py +++ b/pandapower/test/control/test_discrete_tap_control.py @@ -10,8 +10,11 @@ import logging as log from pandapower.run import runpp, set_user_pf_options -from pandapower.create import create_empty_network, create_buses, create_ext_grid, create_lines, create_transformer, \ - create_load, create_bus, create_line, create_transformer3w +from pandapower.create import ( + create_buses, create_ext_grid, create_lines, create_transformer, create_load, create_bus, create_line, + create_transformer3w +) +from pandapower.network import pandapowerNet from pandapower.networks.mv_oberrhein import mv_oberrhein from pandapower.networks.simple_pandapower_test_networks import simple_four_bus_system @@ -290,7 +293,7 @@ def test_discrete_tap_control_hv_from_tap_step_percent(): def test_discrete_tap_control_vectorized_lv(): # --- load system and run power flow - net = create_empty_network() + net = pandapowerNet(name="test_discrete_tap_control_vectorized_lv") create_buses(net, 6, 110) create_buses(net, 5, 20) create_ext_grid(net, 0) @@ -328,7 +331,7 @@ def test_discrete_tap_control_vectorized_lv(): def test_discrete_tap_control_vectorized_hv(): # --- load system and run power flow - net = create_empty_network() + net = pandapowerNet(name="test_discrete_tap_control_vectorized_hv") create_buses(net, 6, 20) create_buses(net, 5, 110) create_ext_grid(net, 0) @@ -366,7 +369,7 @@ def test_discrete_tap_control_vectorized_hv(): def test_continuous_tap_control_side_mv(): # --- load system and run power flow - net = create_empty_network() + net = pandapowerNet(name="test_continuous_tap_control_side_mv") create_buses(net, 2, 110) create_buses(net, 1, 20) create_bus(net, 10) diff --git a/pandapower/test/control/test_shunt_control.py b/pandapower/test/control/test_shunt_control.py index fa2c98a65..a526688ef 100644 --- a/pandapower/test/control/test_shunt_control.py +++ b/pandapower/test/control/test_shunt_control.py @@ -1,14 +1,15 @@ import pandas as pd import pytest + from pandapower.control.controller.shunt_control import DiscreteShuntController from pandapower.control.controller.station_control import BinarySearchControl -from pandapower.create import create_empty_network, create_buses, create_ext_grid, create_line_from_parameters, \ - create_shunt +from pandapower.create import create_buses, create_ext_grid, create_line_from_parameters, create_shunt +from pandapower.network import pandapowerNet from pandapower.run import runpp def simple_test_net_shunt_control(): - net = create_empty_network() + net = pandapowerNet(name="simple_test_net_shunt_control") b = create_buses(net, 2, 110) create_ext_grid(net, b[0]) create_line_from_parameters(net, from_bus=b[0], to_bus=b[1], length_km=50, r_ohm_per_km=0.1021, diff --git a/pandapower/test/control/test_stactrl.py b/pandapower/test/control/test_stactrl.py index 40236a0ea..ddaf0bf59 100644 --- a/pandapower/test/control/test_stactrl.py +++ b/pandapower/test/control/test_stactrl.py @@ -1,29 +1,33 @@ # -*- coding: utf-8 -*- - # Copyright (c) 2016-2026 by University of Kassel and Fraunhofer Institute for Energy Economics # and Energy System Technology (IEE), Kassel. All rights reserved. -import pytest import os +import copy import logging + +import pytest import numpy as np +from numpy import linspace, float64 +from pandas import DataFrame + from pandapower.control.controller.station_control import BinarySearchControl, DroopControl -from pandapower.create import create_empty_network, create_bus, create_buses, create_ext_grid, create_transformer, \ - create_load, create_line, create_sgen, create_impedance +from pandapower.create import ( + create_bus, create_buses, create_ext_grid, create_transformer, create_load, create_line, create_sgen, + create_impedance +) +from pandapower.network import pandapowerNet from pandapower.run import runpp from pandapower.file_io import from_json from pandapower import pp_dir from pandapower.control.util.auxiliary import create_q_capability_characteristics_object -from numpy import linspace, float64 - -from pandas import DataFrame logger = logging.getLogger(__name__) - +@pytest.fixture def simple_test_net(): - net = create_empty_network() + net = pandapowerNet(name="simple_test_net") create_bus(net, 110) create_buses(net, 2, 20) create_ext_grid(net, 0) @@ -33,8 +37,9 @@ def simple_test_net(): create_line(net, 1, 2, length_km=0.1, std_type="NAYY 4x50 SE") return net -def test_volt_ctrl(): - net = simple_test_net() + +def test_voltctrl(simple_test_net): + net = simple_test_net tol = 1e-6 BinarySearchControl( net, name="BSC1", ctrl_in_service=True, output_element="sgen", output_variable="q_mvar", tol=tol, @@ -49,9 +54,9 @@ def test_volt_ctrl(): assert(all(net.controller.object[i].converged == True for i in net.controller.index)) -def test_volt_ctrl_droop(): - net = simple_test_net() - tol = 1e-6 +def test_voltctrl_droop(simple_test_net): + net = simple_test_net + tol = 1e-3 bsc = BinarySearchControl(net, name="BSC1", ctrl_in_service=True, output_element="sgen", output_variable="q_mvar", output_element_index=[0], output_element_in_service=[True], output_values_distribution=[1], @@ -70,8 +75,8 @@ def test_volt_ctrl_droop(): assert(net.controller.at[1, 'object'].controller_idx == 0) # test droop controller linkage -def test_qctrl(): - net = simple_test_net() +def test_qctrl(simple_test_net): + net = simple_test_net tol = 1e-6 BinarySearchControl( net, name="BSC1", ctrl_in_service=True, output_element="sgen", output_variable="q_mvar", voltage_ctrl=False, @@ -86,8 +91,8 @@ def test_qctrl(): assert(getattr(net.controller.at[0, 'object'].control_modus, 'value', None) == 'Q_ctrl') # test correct control_modus -def test_qctrl_imp_input(): - net = simple_test_net() +def test_qctrl_Imp_Input(simple_test_net): + net = simple_test_net tol = 1e-6 create_impedance(net, 1, 2, sn_mva=1, rft_pu=0.01, xft_pu=0.01, rtf_pu=0.01, xtf_pu=0.01) BinarySearchControl( @@ -103,8 +108,8 @@ def test_qctrl_imp_input(): assert(all(net.controller.object[i].converged == True for i in net.controller.index)) -def test_qctrl_droop(): - net = simple_test_net() +def test_qctrl_droop(simple_test_net): + net = simple_test_net tol = 1e-6 net.load.loc[0, "p_mw"] = 60 # create voltage drop at bus 1 bsc = BinarySearchControl(net, name="BSC1", ctrl_in_service=True, @@ -127,8 +132,8 @@ def test_qctrl_droop(): assert(net.controller.at[1, 'object'].controller_idx == 0) # test droop controller linkage -def test_qlimits_qctrl(): - net = simple_test_net() +def test_qlimits_qctrl(simple_test_net): + net = copy.deepcopy(simple_test_net) tol = 1e-6 net.sgen['min_q_mvar'] = -0.5 net.sgen['max_q_mvar'] = 0.5 @@ -138,10 +143,11 @@ def test_qlimits_qctrl(): input_variable=["q_to_mvar"], input_element_index=0, set_point=1, voltage_ctrl=False, tol=1e-6) runpp(net, run_control=True, enforce_q_lims=True) - assert(abs(net.res_sgen.loc[0, "q_mvar"] - 0.5) < tol) + assert (abs(net.res_sgen.loc[0, "q_mvar"] - 0.5) < tol) assert(all(net.controller.object[i].converged == True for i in net.controller.index)) assert(getattr(net.controller.at[0, 'object'].control_modus, 'value', None) == 'Q_ctrl') - net = simple_test_net() + + net = copy.deepcopy(simple_test_net) tol = 1e-6 net.sgen['min_q_mvar'] = -0.5 net.sgen['max_q_mvar'] = 0.5 @@ -157,9 +163,8 @@ def test_qlimits_qctrl(): assert(abs(net.res_sgen.loc[0, "q_mvar"] + 0.5) < tol) - -def test_qlimits_voltctrl(): - net = simple_test_net() +def test_qlimits_voltctrl(simple_test_net): + net = copy.deepcopy(simple_test_net) tol = 1e-6 net.sgen['min_q_mvar'] = -0.7 net.sgen['max_q_mvar'] = 0.7 @@ -173,7 +178,8 @@ def test_qlimits_voltctrl(): assert(abs(net.res_sgen.loc[0, "q_mvar"] - 0.7) < tol) assert(getattr(net.controller.at[0, 'object'].control_modus, 'value', None) == 'V_ctrl') assert(all(net.controller.object[i].converged == True for i in net.controller.index)) - net = simple_test_net() + + net = copy.deepcopy(simple_test_net) tol = 1e-6 net.sgen['min_q_mvar'] = -0.7 net.sgen['max_q_mvar'] = 0.7 @@ -192,8 +198,9 @@ def test_qlimits_voltctrl(): @pytest.mark.parametrize("v", linspace(start=0.98, stop=1.02, num=5, dtype=float64)) @pytest.mark.parametrize("p", linspace(start=-2.5, stop=2.5, num=10, dtype=float64)) -def test_qlimits_with_capability_curve(v, p): - net = simple_test_net() +def test_qlimits_with_capability_curve(simple_test_net, v, p): + net = copy.deepcopy(simple_test_net) + create_sgen(net, 2, p_mw=0., sn_mva=0, name="sgen2") tol = 1e-6 create_sgen(net, 2, p_mw=0., sn_mva=0, name="sgen2") # create q characteristics table @@ -217,10 +224,18 @@ def test_qlimits_with_capability_curve(v, p): assert(getattr(net.controller.at[0, 'object'].control_modus, 'value', None) == 'V_ctrl') assert(all(net.controller.object[i].converged == True for i in net.controller.index)) + # test once more when there is no reactive power capability curve + net = copy.deepcopy(simple_test_net) + net["q_capability_curve_table"] = DataFrame( + {'id_q_capability_curve': [0, 0, 0, 0, 0], + 'p_mw': [-2.0, -1.0, 0.0, 1.0, 2.0], + 'q_min_mvar': [-0.1, -0.1, -0.1, -0.1, -0.1], + 'q_max_mvar': [0.1, 0.1, 0.1, 0.1, 0.1]}) -def test_qlimits_with_capability_curve_no_reactive_power(): + +def test_qlimits_with_capability_curve_no_reactive_power(simple_test_net): # test once more when there is no reactive power capability curve - net = simple_test_net() + net = copy.deepcopy(simple_test_net) tol = 1e-6 BinarySearchControl(net, name="BSC1", ctrl_in_service=True, output_element="sgen", output_variable="q_mvar", output_element_index=[0], @@ -307,8 +322,8 @@ def test_stactrl_pf_import(): ### Testing after rework of station controller### -def test_volt_ctrl_new(): - net = simple_test_net() +def test_volt_ctrl_new(simple_test_net): + net = simple_test_net tol = 1e-6 BinarySearchControl(net, ctrl_in_service=True, output_element="sgen", output_variable="q_mvar", output_element_index=0, @@ -324,8 +339,8 @@ def test_volt_ctrl_new(): assert(getattr(net.controller.at[0, 'object'].control_modus, 'value', None) == 'V_ctrl')# test correct control_modus -def test_volt_ctrl_droop_new(): - net = simple_test_net() +def test_volt_ctrl_droop_new(simple_test_net): + net = simple_test_net tol = 1e-6 bsc = BinarySearchControl(net, ctrl_in_service=True, output_element="sgen", output_variable="q_mvar", output_element_index=0, @@ -344,8 +359,8 @@ def test_volt_ctrl_droop_new(): assert(net.controller.at[1, 'object'].controller_idx == 0) # test droop controller linkage -def test_qctrl_new(): - net = simple_test_net() +def test_qctrl_new(simple_test_net): + net = simple_test_net tol = 1e-6 BinarySearchControl(net, ctrl_in_service=True, output_element="sgen", output_variable="q_mvar", output_element_index=0, output_element_in_service=True, @@ -360,8 +375,8 @@ def test_qctrl_new(): assert(getattr(net.controller.at[0, 'object'].control_modus, 'value', None) == 'Q_ctrl')#test correct control_modus -def test_qctrl_droop_new(): - net = simple_test_net() +def test_qctrl_droop_new(simple_test_net): + net = simple_test_net tol = 1e-6 net.load.loc[0, "p_mw"] = 60 # create voltage drop at bus 1 bsc = BinarySearchControl(net, ctrl_in_service=True, @@ -381,8 +396,9 @@ def test_qctrl_droop_new(): assert(getattr(net.controller.at[0, 'object'].control_modus, 'value', None) == 'Q_ctrl_V_droop') # test correct control_modus assert(net.controller.at[1, 'object'].controller_idx == 0) # test droop controller linkage -def test_pf_control_cap(): - net = simple_test_net() + +def test_pf_control_cap(simple_test_net): + net = simple_test_net tol = 1e-6 BinarySearchControl(net, ctrl_in_service=True, output_element='sgen', output_variable='q_mvar', output_element_index=0, output_values_distribution=1, @@ -398,8 +414,8 @@ def test_pf_control_cap(): assert(getattr(net.controller.at[0, 'object'].control_modus, 'value', None) == 'PF_ctrl_cap')# test correct control_modus -def test_pf_control_ind(): - net = simple_test_net() +def test_pf_control_ind(simple_test_net): + net = simple_test_net tol = 1e-6 BinarySearchControl(net, ctrl_in_service=True, output_element='sgen', output_variable='q_mvar', output_element_index=0, output_values_distribution=1, @@ -414,8 +430,8 @@ def test_pf_control_ind(): assert(all(net.controller.object[i].converged == True for i in net.controller.index)) assert(getattr(net.controller.at[0, 'object'].control_modus, 'value', None) == 'PF_ctrl_ind') # test correct control_modus -def test_tan_phi_control(): - net = simple_test_net() +def test_tan_phi_control(simple_test_net): + net = simple_test_net tol = 1e-6 BinarySearchControl(net, ctrl_in_service= True, output_element='sgen', output_variable='q_mvar', output_element_index= 0, output_element_in_service= True, output_values_distribution=1, @@ -428,6 +444,7 @@ def test_tan_phi_control(): assert(all(net.controller.object[i].converged == True for i in net.controller.index)) assert(getattr(net.controller.at[0, 'object'].control_modus, 'value', None) == 'tan_phi_ctrl') # test correct control_modus + def test_station_ctrl_pf_import_new(): path = os.path.join(pp_dir, 'test', 'control', 'testfiles', 'station_ctrl_test_new.json') net = from_json(path) diff --git a/pandapower/test/control/test_tap_dependent_impedance.py b/pandapower/test/control/test_tap_dependent_impedance.py index 70702a316..de8f92748 100644 --- a/pandapower/test/control/test_tap_dependent_impedance.py +++ b/pandapower/test/control/test_tap_dependent_impedance.py @@ -6,16 +6,20 @@ import pytest import numpy as np -from pandapower.control import Characteristic, SplineCharacteristic, TapDependentImpedance, \ - trafo_characteristic_table_diagnostic +from pandapower.control import ( + Characteristic, SplineCharacteristic, TapDependentImpedance, trafo_characteristic_table_diagnostic +) from pandapower.control.util.diagnostic import shunt_characteristic_table_diagnostic -from pandapower.create import create_empty_network, create_bus, create_ext_grid, create_transformer_from_parameters, \ - create_load, create_line_from_parameters, create_transformer, create_shunt +from pandapower.create import ( + create_bus, create_ext_grid, create_transformer_from_parameters, create_load, create_line_from_parameters, + create_transformer, create_shunt +) +from pandapower.network import pandapowerNet from pandapower.run import runpp def test_tap_dependent_impedance_control(): - net = create_empty_network() + net = pandapowerNet(name="test_tap_dependent_impedance_control") b1 = create_bus(net, 110) b2 = create_bus(net, 20) create_ext_grid(net, b1) @@ -43,7 +47,7 @@ def test_tap_dependent_impedance_control(): def test_tap_dependent_impedance_restore(): - net = create_empty_network() + net = pandapowerNet(name="test_tap_dependent_impedance_restore") b1 = create_bus(net, 110) b2 = create_bus(net, 20) create_ext_grid(net, b1) @@ -80,7 +84,7 @@ def test_tap_dependent_impedance_restore(): def test_characteristic(): - net = create_empty_network() + net = pandapowerNet(name="test_characteristic") x_points = [0, 1, 2] y_points = [3, 4, 5] c = Characteristic(net, x_points, y_points) @@ -115,7 +119,7 @@ def test_characteristic(): def test_trafo_characteristic_table_diagnostic(): - net = create_empty_network() + net = pandapowerNet(name="test_trafo_characteristic_table_diagnostic") vn_kv = 20 b1 = create_bus(net, vn_kv=vn_kv) create_ext_grid(net, b1, vm_pu=1.01) @@ -164,7 +168,7 @@ def test_trafo_characteristic_table_diagnostic(): def test_shunt_characteristic_table_diagnostic(): - net = create_empty_network() + net = pandapowerNet(name="test_shunt_characteristic_table_diagnostic") vn_kv = 20 b1 = create_bus(net, vn_kv=vn_kv) create_shunt(net, bus=b1, q_mvar=-50, p_mw=0, step=1, max_step=5) diff --git a/pandapower/test/control/test_vm_set_tap_control.py b/pandapower/test/control/test_vm_set_tap_control.py index e408b9d98..6f60eaffa 100644 --- a/pandapower/test/control/test_vm_set_tap_control.py +++ b/pandapower/test/control/test_vm_set_tap_control.py @@ -8,13 +8,13 @@ from pandapower.control.controller.trafo.ContinuousTapControl import ContinuousTapControl from pandapower.control.controller.trafo.VmSetTapControl import VmSetTapControl from pandapower.control.util.characteristic import Characteristic -from pandapower.create import create_empty_network, create_bus, create_ext_grid, create_load, create_sgen, \ - create_transformer +from pandapower.create import create_bus, create_ext_grid, create_load, create_sgen, create_transformer +from pandapower.network import pandapowerNet from pandapower.run import runpp def test_continuous_p(): - net = create_empty_network() + net = pandapowerNet(name="test_continuous_p") hv = create_bus(net, vn_kv=110.) lv = create_bus(net, vn_kv=20) t = create_transformer(net, hv, lv, std_type='40 MVA 110/20 kV') @@ -66,7 +66,7 @@ def test_continuous_p(): def test_continuous_i(): - net = create_empty_network() + net = pandapowerNet(name="test_continuous_i") hv = create_bus(net, vn_kv=110.) lv = create_bus(net, vn_kv=20) t = create_transformer(net, hv, lv, std_type='40 MVA 110/20 kV') diff --git a/pandapower/test/converter/test_from_ucte.py b/pandapower/test/converter/test_from_ucte.py index 836b86588..a94f69271 100644 --- a/pandapower/test/converter/test_from_ucte.py +++ b/pandapower/test/converter/test_from_ucte.py @@ -8,8 +8,7 @@ import numpy as np import pandas as pd -from pandapower import pp_dir -from pandapower.auxiliary import pandapowerNet +from pandapower import pp_dir, pandapowerNet from pandapower.run import runpp from pandapower.toolbox.element_selection import count_elements import pandapower.converter.ucte as ucte_converter diff --git a/pandapower/test/estimation/test_pmu.py b/pandapower/test/estimation/test_pmu.py index 017682777..b3d5d7a08 100644 --- a/pandapower/test/estimation/test_pmu.py +++ b/pandapower/test/estimation/test_pmu.py @@ -6,12 +6,14 @@ import numpy as np import pytest -from pandapower.run import runpp -from pandapower.networks.power_system_test_cases import case14 -from pandapower.create import create_empty_network, create_bus, create_ext_grid, create_sgen, create_load, \ - create_line, create_transformer3w +from pandapower.create import ( + create_bus, create_ext_grid, create_sgen, create_load, create_line, create_transformer3w +) from pandapower.estimation import estimate from pandapower.estimation.util import add_virtual_pmu_meas_from_loadflow +from pandapower.network import pandapowerNet +from pandapower.networks.power_system_test_cases import case14 +from pandapower.run import runpp def run_se_verify(net): estimate(net, algorithm="wls") @@ -30,7 +32,7 @@ def test_pmu_case14(): def test_pmu_with_trafo3w(): - net = create_empty_network() + net = pandapowerNet(name="test_pmu_with_trafo3w") bus_slack = create_bus(net, vn_kv=110) create_ext_grid(net, bus=bus_slack) diff --git a/pandapower/test/estimation/test_ppc_conversion.py b/pandapower/test/estimation/test_ppc_conversion.py index 4be484a34..89b76ccca 100644 --- a/pandapower/test/estimation/test_ppc_conversion.py +++ b/pandapower/test/estimation/test_ppc_conversion.py @@ -1,7 +1,6 @@ import numpy as np from pandapower.create import ( - create_empty_network, create_bus, create_ext_grid, create_transformer3w, @@ -9,13 +8,14 @@ ) from pandapower.estimation.idx_brch import P_TO, P_TO_STD from pandapower.estimation.ppc_conversion import pp2eppci +from pandapower.network import pandapowerNet from pandapower.pypower.idx_brch import branch_cols import pytest def test_duplicate_measurements_at_trafo3w(): # Create an empty network - net = create_empty_network() + net = pandapowerNet(name="test_duplicate_measurements_at_trafo3w") # Create buses for two three-winding transformers (HV, MV, LV each) hv_bus1 = create_bus(net, vn_kv=110, name="HV Bus 1") diff --git a/pandapower/test/estimation/test_wls_estimation.py b/pandapower/test/estimation/test_wls_estimation.py index d907a1b10..c6e7c6aad 100644 --- a/pandapower/test/estimation/test_wls_estimation.py +++ b/pandapower/test/estimation/test_wls_estimation.py @@ -11,10 +11,13 @@ import pytest from pandapower import pp_dir -from pandapower.create import create_empty_network, create_bus, create_ext_grid, create_line_from_parameters, \ - create_measurement, create_load, create_transformer, create_line, create_sgen, create_transformer3w, create_switch +from pandapower.create import ( + create_bus, create_ext_grid, create_line_from_parameters, create_measurement, create_load, create_transformer, + create_line, create_sgen, create_transformer3w, create_switch +) from pandapower.estimation import chi2_analysis, remove_bad_data, estimate from pandapower.file_io import from_json +from pandapower.network import pandapowerNet from pandapower.networks.cigre_networks import create_cigre_network_mv from pandapower.networks.power_system_test_cases import case9 from pandapower.run import runpp @@ -23,7 +26,7 @@ def test_2bus(): # 1. Create network - net = create_empty_network() + net = pandapowerNet(name="test_2bus") create_bus(net, name="bus1", vn_kv=1.) create_bus(net, name="bus2", vn_kv=1.) create_ext_grid(net, 0) @@ -54,7 +57,7 @@ def test_2bus(): def test_3bus(): # 1. Create network - net = create_empty_network() + net = pandapowerNet(name="test_3bus") create_bus(net, name="bus1", vn_kv=1.) create_bus(net, name="bus2", vn_kv=1.) create_bus(net, name="bus3", vn_kv=1.) @@ -98,7 +101,7 @@ def test_3bus(): def test_3bus_with_bad_data(): - net = create_empty_network() + net = pandapowerNet(name="test_3bus_with_bad_data") create_bus(net, name="bus1", vn_kv=1.) create_bus(net, name="bus2", vn_kv=1.) create_bus(net, name="bus3", vn_kv=1.) @@ -154,7 +157,7 @@ def test_3bus_with_out_of_service_bus(): # Measurements should be in kW/kVar/A - Voltage in p.u. # 1. Create network - net = create_empty_network() + net = pandapowerNet(name="test_3bus_with_out_of_service_bus") create_bus(net, name="bus1", vn_kv=1.) create_bus(net, name="bus2", vn_kv=1.) create_bus(net, name="bus3", vn_kv=1.) @@ -198,7 +201,7 @@ def test_3bus_with_transformer(): np.random.seed(12) # 1. Create network - net = create_empty_network() + net = pandapowerNet(name="test_3bus_with_transformer") create_bus(net, name="bus1", vn_kv=10.) create_bus(net, name="bus2", vn_kv=10.) create_bus(net, name="bus3", vn_kv=10.) @@ -484,7 +487,7 @@ def test_cigre_with_bad_data(): def test_init_slack_with_multiple_transformers(): np.random.seed(123) - net = create_empty_network() + net = pandapowerNet(name="test_init_slack_with_multiple_transformers") create_bus(net, 220, index=0) create_bus(net, 110, index=1) create_bus(net, 110, index=2) @@ -535,7 +538,7 @@ def test_init_slack_with_multiple_transformers(): def test_check_existing_measurements(): np.random.seed(2017) - net = create_empty_network() + net = pandapowerNet(name="test_check_existing_measurements") create_bus(net, 10.) create_bus(net, 10.) create_line(net, 0, 1, 0.5, std_type="149-AL1/24-ST1A 10.0") @@ -565,7 +568,7 @@ def load_3bus_network(): def test_network_with_trafo3w_pq(): - net = create_empty_network() + net = pandapowerNet(name="test_network_with_trafo3w_pq") bus_slack = create_bus(net, vn_kv=110) create_ext_grid(net, bus=bus_slack) @@ -612,7 +615,7 @@ def test_network_with_trafo3w_pq(): def test_network_with_trafo3w_with_disabled_branch(): - net = create_empty_network() + net = pandapowerNet(name="test_network_with_trafo3w_with_disabled_branch") bus_slack = create_bus(net, vn_kv=110) create_ext_grid(net, bus=bus_slack) @@ -657,7 +660,7 @@ def test_network_with_trafo3w_with_disabled_branch(): def create_net_with_bb_switch(): - net = create_empty_network() + net = pandapowerNet(name="create_net_with_bb_switch") bus1 = create_bus(net, name="bus1", vn_kv=10.) bus2 = create_bus(net, name="bus2", vn_kv=10.) bus3 = create_bus(net, name="bus3", vn_kv=10.) @@ -748,7 +751,7 @@ def test_net_with_bb_switch_fusing(): def test_net_with_zero_injection(): # @author: AndersLi - net = create_empty_network() + net = pandapowerNet(name="test_net_with_zero_injection") b1 = create_bus(net, name="Bus 1", vn_kv=220, index=1) b2 = create_bus(net, name="Bus 2", vn_kv=220, index=2) b3 = create_bus(net, name="Bus 3", vn_kv=220, index=3) @@ -790,7 +793,7 @@ def test_net_with_zero_injection(): def test_zero_injection_aux_bus(): - net = create_empty_network() + net = pandapowerNet(name="test_zero_injection_aux_bus") bus1 = create_bus(net, name="bus1", vn_kv=10.) bus2 = create_bus(net, name="bus2", vn_kv=10.) bus3 = create_bus(net, name="bus3", vn_kv=10.) @@ -850,7 +853,7 @@ def test_zero_injection_aux_bus(): @pytest.mark.xfail def test_net_unobserved_island(): - net = create_empty_network() + net = pandapowerNet(name="test_net_unobserved_island") bus1 = create_bus(net, name="bus1", vn_kv=10.) bus2 = create_bus(net, name="bus2", vn_kv=10.) bus3 = create_bus(net, name="bus3", vn_kv=10.) @@ -932,12 +935,6 @@ def _compare_pf_and_se_results(net): assert (np.allclose(net.res_trafo_est.q_lv_mvar.values, net.res_trafo.q_lv_mvar.values, 1e-6)) assert (np.allclose(net.res_trafo_est.p_hv_mw.values, net.res_trafo.p_hv_mw.values, 1e-6)) assert (np.allclose(net.res_trafo_est.q_hv_mvar.values, net.res_trafo.q_hv_mvar.values, 1e-6)) - - -@pytest.mark.skipif(not np.__version__.startswith("1."), reason="Test only for numpy 1.X") -def test_numpy1_warning(): - with pytest.raises(UserWarning, match="numpy 1.x should not be used with estimate"): - estimate(create_empty_network()) if __name__ == '__main__': diff --git a/pandapower/test/grid_equivalents/test_get_equivalent.py b/pandapower/test/grid_equivalents/test_get_equivalent.py index bbcf3f911..8a5401a87 100644 --- a/pandapower/test/grid_equivalents/test_get_equivalent.py +++ b/pandapower/test/grid_equivalents/test_get_equivalent.py @@ -8,14 +8,18 @@ from pandapower import pp_dir from pandapower.control import ConstControl from pandapower.control.util.auxiliary import create_trafo_characteristic_object -from pandapower.create import create_empty_network, create_buses, create_ext_grid, create_poly_cost, create_line, \ - create_load, create_sgen, create_pwl_cost, create_bus, create_switch, create_motor +from pandapower.create import ( + create_buses, create_ext_grid, create_poly_cost, create_line, create_load, create_sgen, create_pwl_cost, create_bus, + create_switch, create_motor, create_group +) from pandapower.grid_equivalents.auxiliary import replace_motor_by_load, _runpp_except_voltage_angles from pandapower.grid_equivalents.get_equivalent import get_equivalent, merge_internal_net_and_equivalent_external_net from pandapower.grid_equivalents.ward_generation import create_passive_external_net_for_ward_admittance -from pandapower.groups import group_element_lists, compare_group_elements, group_row, \ - set_group_reference_column, count_group_elements, group_element_index -from pandapower.create.group_create import create_group +from pandapower.groups import ( + group_element_lists, compare_group_elements, group_row, set_group_reference_column, count_group_elements, + group_element_index +) +from pandapower.network import pandapowerNet from pandapower.networks.create_examples import example_multivoltage from pandapower.networks.power_system_test_cases import case9, case30 from pandapower.run import runpp @@ -27,7 +31,7 @@ def create_test_net(): - net = create_empty_network() + net = pandapowerNet(name="create_test_net") # buses create_buses(net, 7, 20, zone=[0, 0, 1, 1, 1, 0, 0], name=["bus %i" % i for i in range(7)], min_vm_pu=np.append(np.arange(.9, 0.94, .01), [np.nan, np.nan, np.nan])) diff --git a/pandapower/test/helper_functions.py b/pandapower/test/helper_functions.py index 8b463bef8..740a5f83f 100644 --- a/pandapower/test/helper_functions.py +++ b/pandapower/test/helper_functions.py @@ -7,10 +7,12 @@ import os from copy import deepcopy -from pandapower import pp_dir +from pandapower import pp_dir, pandapowerNet from pandapower.auxiliary import get_free_id -from pandapower.create import create_bus, create_empty_network, create_ext_grid, create_transformer_from_parameters, \ - create_line_from_parameters, create_load, create_gen, create_sgen +from pandapower.create import ( + create_bus, create_ext_grid, create_transformer_from_parameters, create_line_from_parameters, create_load, + create_gen, create_sgen +) from pandapower.file_io import from_pickle from pandapower.toolbox.comparison import nets_equal @@ -38,20 +40,17 @@ def create_test_network(): """ Creates a simple pandapower test network """ - net = create_empty_network(name='test_network') + net = pandapowerNet(name='test_network') b1 = create_bus(net, name="bus1", vn_kv=10.) create_ext_grid(net, b1) b2 = create_bus(net, name="bus2", geodata=(1., 2.), vn_kv=.4) b3 = create_bus(net, name="bus3", geodata=(1., 3.), vn_kv=.4, index=7) b4 = create_bus(net, name="bus4", vn_kv=10.) - create_transformer_from_parameters(net, b4, b2, vk_percent=3.75, - tap_max=2, vn_lv_kv=0.4, - shift_degree=150, tap_neutral=0, - vn_hv_kv=10.0, vkr_percent=2.8125, - tap_pos=0, tap_side="hv", tap_min=-2, - tap_step_percent=2.5, i0_percent=0.68751, - sn_mva=0.016, pfe_kw=0.11, name=None, - in_service=True, index=None, tap_changer_type="Ratio") + create_transformer_from_parameters( + net, b4, b2, vk_percent=3.75, tap_max=2, vn_lv_kv=0.4, shift_degree=150, tap_neutral=0, vn_hv_kv=10.0, + vkr_percent=2.8125, tap_pos=0, tap_side="hv", tap_min=-2, tap_step_percent=2.5, i0_percent=0.68751, + sn_mva=0.016, pfe_kw=0.11, name=None, in_service=True, index=None, tap_changer_type="Ratio" + ) # 0.016 MVA 10/0.4 kV ET 16/23 SGB create_line_from_parameters(net, b2, b3, 1, name="line1", r_ohm_per_km=0.2067, diff --git a/pandapower/test/loadflow/result_test_network_generator.py b/pandapower/test/loadflow/result_test_network_generator.py index 5f7f8167c..c74a92c0e 100644 --- a/pandapower/test/loadflow/result_test_network_generator.py +++ b/pandapower/test/loadflow/result_test_network_generator.py @@ -5,7 +5,6 @@ from pandapower.auxiliary import get_free_id from pandapower.create import ( - create_empty_network, create_load, create_bus, create_switch, @@ -21,6 +20,7 @@ create_shunt, create_shunt_as_capacitor, ) +from pandapower.networks import pandapowerNet from pandapower.test.helper_functions import add_grid_connection, create_test_line @@ -58,7 +58,7 @@ def result_test_network_generator(sn_mva=1, skip_test_impedance=False): It is structured like this so it can be tested for consistency at different stages of adding elements """ - net = create_empty_network(sn_mva=sn_mva) + net = pandapowerNet(name='result_test_network_generator', sn_mva=sn_mva) yield add_test_line(net) yield add_test_load_sgen(net) yield add_test_load_sgen_split(net) @@ -89,7 +89,7 @@ def result_test_network_generator_dcpp(sn_mva=1): """ # ToDo: Uncommented tests fail in rundcpp -> Check why and correct it - net = create_empty_network(sn_mva=sn_mva) + net = pandapowerNet(name='result_test_network_generator_dcpp', sn_mva=sn_mva) yield add_test_line(net) yield add_test_load_sgen(net) yield add_test_load_sgen_split(net) diff --git a/pandapower/test/loadflow/test_dist_slack.py b/pandapower/test/loadflow/test_dist_slack.py index 3ba2b3e5a..42d0c7284 100644 --- a/pandapower/test/loadflow/test_dist_slack.py +++ b/pandapower/test/loadflow/test_dist_slack.py @@ -8,8 +8,11 @@ import pytest import copy from pandapower.control import ContinuousTapControl -from pandapower.create import create_empty_network, create_buses, create_gen, create_load, create_ext_grid, \ - create_line_from_parameters, create_xward, create_bus, create_shunt +from pandapower.create import ( + create_buses, create_gen, create_load, create_ext_grid, create_line_from_parameters, create_xward, create_bus, + create_shunt +) +from pandapower.network import pandapowerNet from pandapower.networks.create_examples import example_multivoltage from pandapower.networks.power_system_test_cases import case9, case2848rte from pandapower.pypower.idx_brch import PF @@ -31,7 +34,7 @@ def small_example_grid(): - net = create_empty_network() + net = pandapowerNet(name="small_example_grid") create_buses(net, 3, 20) create_gen(net, 0, p_mw=100, vm_pu=1, slack=True, slack_weight=1) @@ -333,7 +336,7 @@ def test_xward_oos(): def test_only_xward(): - net = create_empty_network() + net = pandapowerNet(name="test_only_xward") create_bus(net, 110) create_ext_grid(net, 0, vm_pu=1.05, slack_weight=2) create_xward(net, 0, 200, 20, 10, 1, 0.02, 0.2, 1, slack_weight=2) @@ -363,7 +366,7 @@ def test_separate_zones(): def case9_simplified(): - net = create_empty_network() + net = pandapowerNet(name="case9_simplified")() create_buses(net, 9, vn_kv=345.) lines = [[0, 3], [3, 4], [4, 5], [2, 5], [5, 6], [6, 7], [7, 1], [7, 8], [8, 3]] diff --git a/pandapower/test/loadflow/test_facts.py b/pandapower/test/loadflow/test_facts.py index e3340c62f..707013cee 100644 --- a/pandapower/test/loadflow/test_facts.py +++ b/pandapower/test/loadflow/test_facts.py @@ -3,9 +3,11 @@ import numpy as np import pytest -from pandapower.create import create_impedance, create_shunts, create_buses, create_gens, create_svc, create_tcsc, \ - create_bus, create_empty_network, create_line_from_parameters, create_load, create_ext_grid, \ - create_transformer_from_parameters, create_gen, create_ssc +from pandapower.create import ( + create_impedance, create_shunts, create_buses, create_gens, create_svc, create_tcsc, create_bus, create_load, + create_line_from_parameters, create_ext_grid, create_transformer_from_parameters, create_gen, create_ssc +) +from pandapower.network import pandapowerNet from pandapower.run import runpp from pandapower.test.consistency_checks import runpp_with_consistency_checks @@ -22,7 +24,7 @@ def _many_tcsc_test_net(): xl = 0.2 xc = -15 - net = create_empty_network(sn_mva=baseMVA) + net = pandapowerNet(name="_many_tcsc_test_net", sn_mva=baseMVA) create_buses(net, 7, baseV) create_ext_grid(net, 0) create_line_from_parameters(net, 0, 1, 20, 0.0487, 0.13823, 160, 0.664) @@ -166,7 +168,7 @@ def test_multiple_facts(): xl = 0.2 xc = -15 - net = create_empty_network(sn_mva=baseMVA) + net = pandapowerNet(name="test_multiple_facts", sn_mva=baseMVA) create_buses(net, 7, baseV) create_ext_grid(net, 0) create_line_from_parameters(net, 0, 1, 20, 0.0487, 0.13823, 160, 0.664) @@ -266,7 +268,7 @@ def test_svc_tcsc_case_study(): def facts_case_study_grid(): - net = create_empty_network() + net = pandapowerNet(name="facts_case_study_grid") b1 = create_bus(net, name="B1", vn_kv=18) b2 = create_bus(net, name="B2", vn_kv=16.5) diff --git a/pandapower/test/loadflow/test_facts_b2b_vsc.py b/pandapower/test/loadflow/test_facts_b2b_vsc.py index 9b151ac27..90574b50b 100644 --- a/pandapower/test/loadflow/test_facts_b2b_vsc.py +++ b/pandapower/test/loadflow/test_facts_b2b_vsc.py @@ -4,10 +4,10 @@ import pytest from pandapower.create import ( - create_buses, create_bus, create_empty_network, create_line_from_parameters, create_load, create_ext_grid, + create_buses, create_bus, create_line_from_parameters, create_load, create_ext_grid, create_bus_dc, create_vsc_stacked, create_line_dc, create_source_dc, create_load_dc, create_line_dc_from_parameters ) - +from pandapower.network import pandapowerNet from pandapower.run import runpp from pandapower.test.consistency_checks import runpp_with_consistency_checks import pandapower.control as control @@ -30,7 +30,7 @@ def test_hvdc_interconnect_with_dmr(): The solution is to add a dmr control, which will calculate the current in the dmr line. """ - net = create_empty_network() + net = pandapowerNet(name="test_hvdc_interconnect_with_dmr") create_buses(net, 8, 380)#, geodata=[(0, 0), (100, 0), (200, 0), (300, 0)]) @@ -81,7 +81,7 @@ def test_hvdc_interconnect_with_dmr(): def test_source_dc(): - net = create_empty_network() + net = pandapowerNet(name="test_source_dc") create_bus(net, 380) create_bus(net, 380) create_ext_grid(net, bus=0, vm_pu=1.0) @@ -112,7 +112,7 @@ def test_vsc_stacked_shorted(): For reasons I do not understand, this test fails on the github server, but runs locally. """ - net = create_empty_network() + net = pandapowerNet(name="test_vsc_stacked_shorted") # AC part ext_bus = 10 @@ -162,7 +162,7 @@ def test_vsc_stacked_with_long_lines(): | |--------| | +-------+ +-------+ """ - net = create_empty_network() + net = pandapowerNet(name="test_vsc_stacked_with_long_lines") # AC part create_buses(net, 4, 110, geodata=[(0, 0), (100, 0), (200, 0), (300, 0)]) @@ -203,7 +203,7 @@ def test_grounded_vsc_stacked(): | |--------| | +-------+ +-------+ """ - net = create_empty_network() + net = pandapowerNet(name="test_grounded_vsc_stacked") # AC part create_buses(net, 4, 110, geodata=[(0, 0), (100, 0), (200, 0), (300, 0)]) diff --git a/pandapower/test/loadflow/test_facts_ssc.py b/pandapower/test/loadflow/test_facts_ssc.py index 7171cade8..d23c00e1f 100644 --- a/pandapower/test/loadflow/test_facts_ssc.py +++ b/pandapower/test/loadflow/test_facts_ssc.py @@ -3,16 +3,17 @@ import numpy as np import pytest -from pandapower.create import create_buses, create_bus, create_empty_network, create_line_from_parameters, \ - create_load, create_ext_grid, create_ssc - +from pandapower.create import ( + create_buses, create_bus, create_line_from_parameters, create_load, create_ext_grid, create_ssc +) +from pandapower.network import pandapowerNet from pandapower.run import runpp from pandapower.test.consistency_checks import runpp_with_consistency_checks from pandapower.test.loadflow.test_facts import copy_with_impedance, facts_case_study_grid, compare_ssc_impedance_gen def test_ssc_minimal(): - net = create_empty_network() + net = pandapowerNet(name="test_ssc_minimal") create_bus(net, 110) create_ext_grid(net, 0) create_ssc(net, 0, 0, 5, 1) @@ -36,7 +37,7 @@ def test_ssc_minimal(): def test_ssc_controllable(): - net = create_empty_network() + net = pandapowerNet(name="test_ssc_controllable") create_buses(net, 3, 110) create_ext_grid(net, 0) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -69,7 +70,7 @@ def test_ssc_case_study(): def test_2_sscs(): - net = create_empty_network() + net = pandapowerNet(name="test_2_sscs") create_buses(net, 3, 110) create_ext_grid(net, 0) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -120,7 +121,7 @@ def test_2_sscs(): def test_ssc_simple(): - net = create_empty_network() + net = pandapowerNet(name="test_ssc_simple") create_buses(net, 2, 110) create_ext_grid(net, 0) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) diff --git a/pandapower/test/loadflow/test_facts_svc.py b/pandapower/test/loadflow/test_facts_svc.py index f49740bfc..2eb29b507 100644 --- a/pandapower/test/loadflow/test_facts_svc.py +++ b/pandapower/test/loadflow/test_facts_svc.py @@ -4,9 +4,10 @@ import pytest from pandas.testing import assert_frame_equal -from pandapower.create import create_buses, create_svc, create_empty_network, create_line_from_parameters, \ - create_load, create_shunt, create_ext_grid, create_loads - +from pandapower.create import ( + create_buses, create_svc, create_line_from_parameters, create_load, create_shunt, create_ext_grid, create_loads +) +from pandapower.network import pandapowerNet from pandapower.networks.power_system_test_cases import case9 from pandapower.run import runpp from pandapower.test.consistency_checks import runpp_with_consistency_checks @@ -63,7 +64,7 @@ def test_svc(vm_set_pu): @pytest.mark.parametrize("vm_set_pu", [0.96, 1., 1.04]) def test_2_svcs(vm_set_pu): - net = create_empty_network() + net = pandapowerNet(name="test_2_svcs") create_buses(net, 3, 110) create_ext_grid(net, 0) create_line_from_parameters(net, 0, 1, 20, 0.0487, 0.13823, 160, 0.664) diff --git a/pandapower/test/loadflow/test_facts_tcsc.py b/pandapower/test/loadflow/test_facts_tcsc.py index 56273527b..3cb2f05db 100644 --- a/pandapower/test/loadflow/test_facts_tcsc.py +++ b/pandapower/test/loadflow/test_facts_tcsc.py @@ -3,9 +3,10 @@ import numpy as np import pytest -from pandapower.create import create_impedance, create_buses, create_tcsc, create_bus, \ - create_empty_network, create_line_from_parameters, create_load, create_ext_grid - +from pandapower.create import ( + create_impedance, create_buses, create_tcsc, create_bus, create_line_from_parameters, create_load, create_ext_grid +) +from pandapower.network import pandapowerNet from pandapower.run import runpp from pandapower.test.consistency_checks import runpp_with_consistency_checks from pandapower.test.loadflow.test_facts import copy_with_impedance, facts_case_study_grid, compare_tcsc_impedance @@ -20,7 +21,7 @@ def add_tcsc_to_line(net, xl, xc, set_p_mw, from_bus, line, side="from_bus"): def test_tcsc_simple(): - net = create_empty_network() + net = pandapowerNet(name="test_tcsc_simple") create_buses(net, 2, 110) create_ext_grid(net, 0) # create_line_from_parameters(net, 0, 1, 100, 0.0487, 0.13823, 160, 0.664) @@ -40,7 +41,7 @@ def test_tcsc_simple(): def test_tcsc_simple1(): - net = create_empty_network() + net = pandapowerNet(name="test_tcsc_simple1") create_buses(net, 3, 110) create_ext_grid(net, 0) create_line_from_parameters(net, 0, 1, 100, 0.0487, 0.13823, 160, 0.664) @@ -61,7 +62,7 @@ def test_tcsc_simple1(): def test_tcsc_simple2(): - net = create_empty_network() + net = pandapowerNet(name="test_tcsc_simple2") create_buses(net, 3, 110) create_ext_grid(net, 0) # create_line_from_parameters(net, 0, 1, 100, 0.0487, 0.13823, 160, 0.664) @@ -100,7 +101,7 @@ def test_tcsc_simple3(): # (0)-------------(1)-----------------(3)-> # |--(TCSC)--(2)------| - net = create_empty_network(sn_mva=baseMVA) + net = pandapowerNet(name="test_tcsc_simple3", sn_mva=baseMVA) create_buses(net, 4, baseV) create_ext_grid(net, 0) create_line_from_parameters(net, 0, 1, 20, 0.0487, 0.13823, 160, 0.664) @@ -134,7 +135,7 @@ def test_tcsc_simple3_slack(): # (0)-------------(1)-----------------(3)-> # |-----(TCSC)--(2)-------------------| - net = create_empty_network(sn_mva=baseMVA) + net = pandapowerNet(name="test_tcsc_simple3_slack", sn_mva=baseMVA) create_buses(net, 4, baseV) create_ext_grid(net, 0) create_line_from_parameters(net, 0, 1, 20, 0.0487, 0.13823, 160, 0.664) @@ -170,7 +171,7 @@ def test_compare_to_impedance(): # (0)-------------(1)-----------------(3)-> # |--(TCSC)--(2)------| - net = create_empty_network(sn_mva=baseMVA) + net = pandapowerNet(name="test_compare_to_impedance", sn_mva=baseMVA) create_buses(net, 4, baseV) create_ext_grid(net, 0) create_line_from_parameters(net, 0, 1, 20, 0.0487, 0.13823, 160, 0.664) @@ -235,7 +236,7 @@ def test_tcsc_case_study(): def test_tcsc_simple5(): - net = create_empty_network(sn_mva=100) + net = pandapowerNet(name="test_tcsc_simple5", sn_mva=100) create_buses(net, 4, 110) create_ext_grid(net, 0) create_line_from_parameters(net, 0, 1, 20, 0.0487, 0.13823, 160, 0.664) diff --git a/pandapower/test/loadflow/test_facts_vsc.py b/pandapower/test/loadflow/test_facts_vsc.py index 6ffc1dd46..852ea8d8c 100644 --- a/pandapower/test/loadflow/test_facts_vsc.py +++ b/pandapower/test/loadflow/test_facts_vsc.py @@ -14,12 +14,12 @@ from pandapower import pp_dir from pandapower.converter.powerfactory.validate import validate_pf_conversion from pandapower.create import ( - create_impedance, create_shunts, create_buses, create_gens, create_bus, create_empty_network, - create_line_from_parameters, create_gen, create_load, create_ext_grid, create_vsc, create_line_dc_from_parameters, - create_buses_dc, create_bus_dc, create_line_dc, create_lines_from_parameters, create_lines_dc, create_vsc_bipolar + create_impedance, create_shunts, create_buses, create_gens, create_bus, create_line_from_parameters, create_gen, + create_load, create_ext_grid, create_vsc, create_line_dc_from_parameters, create_buses_dc, create_bus_dc, + create_line_dc, create_lines_from_parameters, create_lines_dc, create_vsc_bipolar ) - from pandapower.file_io import from_json +from pandapower.network import pandapowerNet from pandapower.pf.makeYbus_facts import calc_y_svc_pu from pandapower.run import runpp from pandapower.test.consistency_checks import runpp_with_consistency_checks @@ -95,9 +95,9 @@ def copy_with_impedance(net): return net_ref -# +# FIXME: @v31337 still relevant or remove? # def test_tcsc_firing_angle_formula(): -# net = create_empty_network() +# net = pandapowerNet(name="test_tcsc_firing_angle_formula") # create_buses(net, 2, 110) # create_ext_grid(net, 0) # create_line_from_parameters(net, 0, 1, 100, 0.0487, 0.13823, 160, 0.664) @@ -119,7 +119,7 @@ def copy_with_impedance(net): # # def test_tcsc_firing_angle_formula(): -# net = create_empty_network() +# net = pandapowerNet(name="test_tcsc_firing_angle_formula") # create_buses(net, 2, 110) # create_ext_grid(net, 0) # create_line_from_parameters(net, 0, 1, 100, 0.0487, 0.13823, 160, 0.664) @@ -139,7 +139,7 @@ def copy_with_impedance(net): # # # def test_tcsc_firing_angle_formula(): -# net = create_empty_network() +# net = pandapowerNet(name="test_tcsc_firing_angle_formula") # create_buses(net, 2, 110) # create_ext_grid(net, 0) # create_line_from_parameters(net, 0, 1, 100, 0.0487, 0.13823, 160, 0.664) @@ -159,7 +159,7 @@ def copy_with_impedance(net): def test_vsc_hvdc(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_hvdc") # AC part create_buses(net, 3, 110, geodata=[(0, 0), (100, 0), (200, 0)]) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -185,7 +185,7 @@ def test_vsc_hvdc(): def test_vsc_bipolar_hvdc(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_bipolar_hvdc") # AC part create_buses(net, 4, 380, geodata=[(0, 0), (100, 0), (200, 0), (300, 0)]) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -213,7 +213,7 @@ def test_vsc_bipolar_hvdc(): def test_vsc_hvdc_control_q(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_hvdc_control_q") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -238,7 +238,7 @@ def test_vsc_hvdc_control_q(): def test_vsc_multiterminal_hvdc(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_multiterminal_hvdc") # AC part create_buses(net, 5, 110, geodata=[(0, 50), (50, 100), (200, 100), (50, 0), (200, 0)]) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -283,7 +283,7 @@ def test_vsc_multiterminal_hvdc(): def test_line_dc_bus_dc_structures(): - net = create_empty_network() + net = pandapowerNet(name="test_line_dc_bus_dc_structures") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -318,7 +318,7 @@ def test_line_dc_bus_dc_structures(): def test_line_dc_bus_dc_structures2(): - net = create_empty_network() + net = pandapowerNet(name="test_line_dc_bus_dc_structures2") # AC part create_buses(net, 5, 110, geodata=[(0, 50), (50, 100), (200, 100), (50, 0), (200, 0)]) create_lines_from_parameters(net, [0, 1, 0, 1, 3], [1, 2, 3, 3, 4], 30, 0.0487, 0.13823, 160, 0.664) @@ -356,7 +356,7 @@ def test_line_dc_bus_dc_structures2(): def test_vsc_hvdc_structure1(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_hvdc_structure1") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -381,7 +381,7 @@ def test_vsc_hvdc_structure1(): def test_vsc_hvdc_structure1_alternate(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_hvdc_structure1_alternate") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -406,7 +406,7 @@ def test_vsc_hvdc_structure1_alternate(): def test_setting_of_dc_out_of_service(): - net = create_empty_network() + net = pandapowerNet(name="test_setting_of_dc_out_of_service") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -427,7 +427,7 @@ def test_setting_of_dc_out_of_service(): def test_setting_of_dc_vsc_out_of_service(): - net = create_empty_network() + net = pandapowerNet(name="test_setting_of_dc_vsc_out_of_service") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -448,7 +448,7 @@ def test_setting_of_dc_vsc_out_of_service(): def test_vsc_hvdc_structure2(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_hvdc_structure2") # AC part create_buses(net, 5, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -489,7 +489,7 @@ def test_vsc_hvdc_structure2(): def test_vsc_hvdc_mode0_without_dc_line(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_hvdc_mode0_without_dc_line") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -518,7 +518,7 @@ def test_vsc_hvdc_mode0_without_dc_line(): def test_vsc_hvdc_dc_line(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_hvdc_dc_line") # AC part create_buses(net, 2, 110) @@ -542,7 +542,7 @@ def test_vsc_hvdc_dc_line(): def test_vsc_hvdc_mode1(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_hvdc_mode1") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -573,7 +573,7 @@ def test_vsc_hvdc_mode1(): def test_vsc_hvdc_mode2(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_hvdc_mode2") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -606,7 +606,7 @@ def test_vsc_hvdc_mode2(): def test_vsc_hvdc_mode2_without_dc_line(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_hvdc_mode2_without_dc_line") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -635,7 +635,7 @@ def test_vsc_hvdc_mode2_without_dc_line(): def test_vsc_hvdc_mode3(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_hvdc_mode3") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -666,7 +666,7 @@ def test_vsc_hvdc_mode3(): def test_vsc_hvdc_mode4(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_hvdc_mode4") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -693,7 +693,7 @@ def test_vsc_hvdc_mode4(): def test_vsc_hvdc_mode5(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_hvdc_mode5") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -725,7 +725,7 @@ def test_vsc_hvdc_mode5(): def test_vsc_hvdc_mode6(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_hvdc_mode6") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -757,7 +757,7 @@ def test_vsc_hvdc_mode6(): def test_vsc_hvdc_mode7(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_hvdc_mode7") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -789,7 +789,7 @@ def test_vsc_hvdc_mode7(): def test_vsc_hvdc_mode9(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_hvdc_mode9") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -820,7 +820,7 @@ def test_vsc_hvdc_mode9(): def test_vsc_hvdc_mode10(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_hvdc_mode10") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -851,7 +851,7 @@ def test_vsc_hvdc_mode10(): def test_vsc_hvdc_mode11(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_hvdc_mode11") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -882,7 +882,7 @@ def test_vsc_hvdc_mode11(): def test_vsc_hvdc_mode13(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_hvdc_mode13") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -914,7 +914,7 @@ def test_vsc_hvdc_mode13(): def test_vsc_hvdc_mode14(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_hvdc_mode14") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -944,7 +944,7 @@ def test_vsc_hvdc_mode14(): def test_vsc_hvdc_mode15(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_hvdc_mode15") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -984,7 +984,7 @@ def test_minimal_ac(): It checks, if two slacks with different setpoints are connected together, but then impedances are checked and for some reason after the copy it fails. """ - net = create_empty_network() + net = pandapowerNet(name="test_minimal_ac") # AC part create_bus(net, 110) create_ext_grid(net, 0, vm_pu=1.02) @@ -1013,7 +1013,7 @@ def test_minimal_ac(): def test_minimal_vsc_hvdc(): - net = create_empty_network() + net = pandapowerNet(name="test_minimal_vsc_hvdc") # AC part create_bus(net, 110) create_ext_grid(net, 0) @@ -1048,7 +1048,7 @@ def test_minimal_vsc_hvdc(): def test_simple_vsc_hvdc(): - net = create_empty_network() + net = pandapowerNet(name="test_simple_vsc_hvdc") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1076,7 +1076,7 @@ def test_simple_vsc_hvdc(): def test_simple_2vsc_hvdc1(): # np.set_printoptions(linewidth=1000, suppress=True, precision=3) - net = create_empty_network() + net = pandapowerNet(name="test_simple_2vsc_hvdc1") # AC part create_buses(net, 4, 110, geodata=[(0, 0), (100, 0), (200, 0), (300, 0)]) @@ -1115,7 +1115,7 @@ def test_simple_2vsc_hvdc1(): def test_simple_2vsc_hvdc2(): # np.set_printoptions(linewidth=1000, suppress=True, precision=3) - net = create_empty_network() + net = pandapowerNet(name="test_simple_2vsc_hvdc2") # AC part create_buses(net, 3, 110, geodata=[(0, 0), (100, 0), (200, 0)]) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1158,7 +1158,7 @@ def test_simple_2vsc_hvdc2(): def test_vsc_stacked_1(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_stacked_1") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1183,7 +1183,7 @@ def test_vsc_stacked_1(): def test_multiple_vsc_stacked_1(): - net = create_empty_network() + net = pandapowerNet(name="test_multiple_vsc_stacked_1") # AC part create_buses(net, 5, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1224,7 +1224,7 @@ def test_multiple_vsc_stacked_1(): def test_tres_amigas_vsc_stacked_1(): - net = create_empty_network() + net = pandapowerNet(name="test_tres_amigas_vsc_stacked_1") # AC part create_buses(net, 5, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1257,7 +1257,7 @@ def test_tres_amigas_vsc_stacked_1(): def test_tres_amigas_vsc_stacked_2(): - net = create_empty_network() + net = pandapowerNet(name="test_tres_amigas_vsc_stacked_2") # AC part create_buses(net, 5, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1290,7 +1290,7 @@ def test_tres_amigas_vsc_stacked_2(): def test_vsc_stacked_2(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_stacked_2") # AC part create_buses(net, 4, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1314,7 +1314,7 @@ def test_vsc_stacked_2(): def test_vsc_stacked_2a(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_stacked_2a") # AC part create_buses(net, 4, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1337,7 +1337,7 @@ def test_vsc_stacked_2a(): def test_vsc_stacked_3(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_stacked_3") # AC part create_buses(net, 4, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1365,7 +1365,7 @@ def test_vsc_stacked_4(): """ For reasons I do not understand, this test fails on the github server, but runs locally. """ - net = create_empty_network() + net = pandapowerNet(name="test_b2b_vsc_4") # AC part create_buses(net, 4, 110) create_line_from_parameters(net, 1, 3, 30, 0.0487, 0.13823, 160, 0.664) @@ -1390,7 +1390,7 @@ def test_vsc_stacked_4(): def test_vsc_stacked_5(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_stacked_5") # AC part create_buses(net, 5, 110) create_line_from_parameters(net, 1, 3, 30, 0.0487, 0.13823, 160, 0.664) @@ -1416,7 +1416,7 @@ def test_vsc_stacked_5(): def test_vsc_stacked_6(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_stacked_6") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 1, 2, 30, 0.0487, 0.13823, 160, 0.664) @@ -1438,7 +1438,7 @@ def test_vsc_stacked_6(): def test_vsc_stacked_7(): - net = create_empty_network() + net = pandapowerNet(name="test_vsc_stacked_7") # AC part create_buses(net, 2, 110) create_ext_grid(net, 1) # todo: why is it not working when ext_grid is connected to the VSC AC bus? @@ -1457,7 +1457,7 @@ def test_vsc_stacked_7(): def test_b2b_line_dc_raise(): - net = create_empty_network() + net = pandapowerNet(name="test_b2b_line_dc_raise") # AC part create_buses(net, 4, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1489,7 +1489,7 @@ def test_b2b_line_dc_raise(): def test_line_dc_and_2_vsc1(): - net = create_empty_network() + net = pandapowerNet(name="test_line_dc_and_2_vsc1") # AC part create_buses(net, 4, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1518,7 +1518,7 @@ def test_line_dc_and_2_vsc1(): def test_line_dc_and_2_vsc2(): - net = create_empty_network() + net = pandapowerNet(name="test_line_dc_and_2_vsc2") # AC part create_buses(net, 4, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1556,7 +1556,7 @@ def test_2vsc_1ac_2dc(control_mode_ac, control_mode_dc): val_ac = {"vm_pu": 1, "q_mvar": -5} val_dc = {"vm_pu": 1, "p_mw": 10} - net = create_empty_network() + net = pandapowerNet(name="test_2vsc_1ac_2dc") # AC part create_buses(net, 2, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1593,7 +1593,7 @@ def test_2vsc_2ac_1dc(control_mode_ac, control_mode_dc): val_ac = {"vm_pu": 1, "q_mvar": -5} val_dc = {"vm_pu": 1, "p_mw": 10} - net = create_empty_network() + net = pandapowerNet(name='test_2vsc_2ac_1dc') # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1628,7 +1628,7 @@ def test_2vsc_1ac_1dc(control_mode_ac, control_mode_dc): val_ac = {"vm_pu": 1, "q_mvar": -5} val_dc = {"vm_pu": 1, "p_mw": 10} - net = create_empty_network() + net = pandapowerNet(name='test_2vsc_1ac_1dc') # AC part create_buses(net, 2, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1659,7 +1659,7 @@ def test_2vsc_1ac_1dc(control_mode_ac, control_mode_dc): def test_vsc_slack_minimal_wrong(): # np.set_printoptions(linewidth=1000, suppress=True, precision=2) # from pandapower.test.loadflow.test_facts import * - net = create_empty_network() + net = pandapowerNet(name="test_vsc_slack_minimal_wrong") # AC part create_buses(net, 2, 110, geodata=[(200, 0), (400, 0)]) create_load(net, 1, 10, 4) @@ -1689,7 +1689,7 @@ def test_vsc_slack_minimal_wrong(): def test_vsc_slack_minimal_wrong2(): # np.set_printoptions(linewidth=1000, suppress=True, precision=2) # from pandapower.test.loadflow.test_facts import * - net = create_empty_network() + net = pandapowerNet(name="test_vsc_slack_minimal_wrong2") # AC part create_buses(net, 2, 110, geodata=[(200, 0), (400, 0)]) create_load(net, 1, 10, 4) @@ -1718,7 +1718,7 @@ def test_vsc_slack_minimal_wrong2(): def test_vsc_slack_minimal(): # todo: fix that FACTS elements can be connected to ext_grid buses # np.set_printoptions(linewidth=1000, suppress=True, precision=2) # from pandapower.test.loadflow.test_facts import * - net = create_empty_network() + net = pandapowerNet(name='test_vsc_slack_minimal') # AC part create_buses(net, 2, 110, geodata=[(200, 0), (400, 0)]) create_load(net, 1, 10, 4) @@ -1747,7 +1747,7 @@ def test_vsc_slack_minimal(): # todo: fix that FACTS elements can be connected def test_vsc_slack(): # np.set_printoptions(linewidth=1000, suppress=True, precision=3) # from pandapower.test.loadflow.test_facts import * - net = create_empty_network() + net = pandapowerNet(name="test_vsc_slack") # AC part create_buses(net, 4, 110, geodata=[(0, 0), (200, 0), (400, 0), (600, 0)]) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1776,7 +1776,7 @@ def test_vsc_slack(): def test_vsc_slack2(): # np.set_printoptions(linewidth=1000, suppress=True, precision=3) # from pandapower.test.loadflow.test_facts import * - net = create_empty_network() + net = pandapowerNet(name="test_vsc_slack2") # AC part create_buses(net, 3, 110, geodata=[(0, 0), (200, 0), (400, 0)]) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1804,7 +1804,7 @@ def test_vsc_slack2(): def test_vsc_slack_oos(): # np.set_printoptions(linewidth=1000, suppress=True, precision=3) # from pandapower.test.loadflow.test_facts import * - net = create_empty_network() + net = pandapowerNet(name="test_vsc_slack_oos") # AC part create_buses(net, 4, 110, geodata=[(0, 0), (200, 0), (400, 0), (600, 0)]) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1832,7 +1832,7 @@ def test_vsc_slack_oos(): def test_vsc_dc_r(): # np.set_printoptions(linewidth=1000, suppress=True, precision=3) # from pandapower.test.loadflow.test_facts import * - net = create_empty_network() + net = pandapowerNet(name="test_vsc_dc_r") # AC part create_buses(net, 3, 110, geodata=[(0, 0), (200, 0), (400, 0)]) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1857,7 +1857,7 @@ def test_vsc_dc_r(): def test_vsc_hvdc_dc_rl(): # from pandapower.test.loadflow.test_facts import * - net = create_empty_network() + net = pandapowerNet(name="test_vsc_hvdc_dc_rl") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) diff --git a/pandapower/test/loadflow/test_recycle.py b/pandapower/test/loadflow/test_recycle.py index 1edd0a401..1efc54158 100644 --- a/pandapower/test/loadflow/test_recycle.py +++ b/pandapower/test/loadflow/test_recycle.py @@ -4,7 +4,6 @@ import pytest from pandapower.create import ( - create_empty_network, create_bus, create_line_from_parameters, create_load, @@ -14,6 +13,7 @@ create_line, create_transformer_from_parameters, ) +from pandapower.network import pandapowerNet from pandapower.run import set_user_pf_options, runpp, rundcpp from pandapower.test.consistency_checks import runpp_with_consistency_checks, rundcpp_with_consistency_checks from pandapower.test.helper_functions import add_grid_connection @@ -22,7 +22,7 @@ @pytest.fixture def recycle_net(): - net = create_empty_network() + net = pandapowerNet(name="recycle_net") _, b2, _ = add_grid_connection(net) pl = 1.2 ql = 1.1 @@ -136,7 +136,7 @@ def test_recycle_trafo_bus_gen(recycle_net): def test_result_index_unsorted(): - net = create_empty_network() + net = pandapowerNet(name="test_result_index_unsorted") set_user_pf_options(net, tolerance_mva=1e-9) b1 = create_bus(net, vn_kv=0.4, index=4) diff --git a/pandapower/test/loadflow/test_results.py b/pandapower/test/loadflow/test_results.py index b0b061c1e..7f18fa1ba 100644 --- a/pandapower/test/loadflow/test_results.py +++ b/pandapower/test/loadflow/test_results.py @@ -11,10 +11,12 @@ from numpy import isin, isnan, isclose from pandapower import pp_dir -from pandapower.create import create_bus, create_load, create_transformer3w_from_parameters, create_transformer, \ - create_empty_network, create_ext_grid, create_line_from_parameters, create_transformer_from_parameters, \ - create_impedance +from pandapower.create import ( + create_bus, create_load, create_transformer3w_from_parameters, create_transformer, create_ext_grid, + create_line_from_parameters, create_transformer_from_parameters, create_impedance +) from pandapower.file_io import from_json +from pandapower.network import pandapowerNet from pandapower.run import runpp from pandapower.test.conftest import result_test_network from pandapower.test.consistency_checks import runpp_with_consistency_checks @@ -42,7 +44,7 @@ def add_trafo_connection(net, hv_bus, trafotype="2W"): def create_net(): - net = create_empty_network() + net = pandapowerNet(name="create_net") vn_kv = 20 b1 = create_bus(net, vn_kv=vn_kv) create_ext_grid(net, b1, vm_pu=1.01) @@ -244,22 +246,20 @@ def test_trafo(result_test_network, v_tol=1e-6, i_tol=1e-6, s_tol=1e-2, l_tol=1e def test_trafo_2_taps(v_tol=1e-6, i_tol=1e-6, s_tol=1e-2, l_tol=1e-3, va_tol=1e-2): - net = create_empty_network() + net = pandapowerNet(name="test_trafo_2_taps") create_bus(net, 110) create_bus(net, 20) create_ext_grid(net, 0) - create_transformer_from_parameters(net, 0, 1, 100, 110, 20, 0.5, 12, 14, 0.5, - tap_side="hv", tap_neutral=0, tap_max=10, - tap_min=-10, tap_step_percent=2, tap_step_degree=0, - tap_pos=0, tap_changer_type="Ratio", - tap2_side="hv", tap2_neutral=0, tap2_max=10, - tap2_min=-10, tap2_step_percent=2, tap2_step_degree=0, - tap2_pos=0, tap2_changer_type="Ratio") + create_transformer_from_parameters( + net, 0, 1, 100, 110, 20, 0.5, 12, 14, 0.5, + tap_side="hv", tap_neutral=0, tap_max=10, tap_min=-10, tap_step_percent=2, tap_step_degree=0, + tap_pos=0, tap_changer_type="Ratio", tap2_side="hv", tap2_neutral=0, tap2_max=10, + tap2_min=-10, tap2_step_percent=2, tap2_step_degree=0, tap2_pos=0, tap2_changer_type="Ratio" + ) create_load(net, 1, 10) runpp(net) - net.res_bus def test_ext_grid(result_test_network, v_tol=1e-6, va_tol=1e-2, i_tol=1e-6, s_tol=5e-3, l_tol=1e-3): @@ -632,8 +632,10 @@ def test_bus_bus_switch(result_test_network, v_tol=1e-6, i_tol=1e-6, s_tol=5e-3, def test_enforce_q_lims(v_tol=1e-6, s_tol=5e-3): - """Test for enforce_q_lims loadflow option.""" - net = create_empty_network() + """ + Test for enforce_q_lims loadflow option + """ + net = pandapowerNet(name="test_enforce_q_lims") net = add_test_gen(net) runpp(net) buses = net.bus[net.bus.zone == "test_gen"] @@ -680,7 +682,7 @@ def test_enforce_q_lims(v_tol=1e-6, s_tol=5e-3): def test_enforce_p_lims(s_tol=5e-3): """Test for enforce_p_lims loadflow option.""" - net = create_empty_network() + net = pandapowerNet(name="test_enforce_p_lims") net = add_test_gen(net) runpp(net) buses = net.bus[net.bus.zone == "test_gen"] @@ -754,7 +756,7 @@ def test_open(result_test_network): def test_impedance_g_b(): - net = create_empty_network(sn_mva=100) + net = pandapowerNet(name="test_impedance_g_b", sn_mva=100) create_bus(net, 110) create_bus(net, 20) create_ext_grid(net, 0) @@ -773,7 +775,7 @@ def test_impedance_g_b(): def test_trafo_unequal_r_x_hv_lv(): - net = create_empty_network(sn_mva=10) + net = pandapowerNet(name="test_trafo_unequal_r_x_hv_lv", sn_mva=10) create_bus(net, 110) create_bus(net, 20) create_ext_grid(net, 0) diff --git a/pandapower/test/loadflow/test_rundcpp.py b/pandapower/test/loadflow/test_rundcpp.py index 59342637d..be1c0adcf 100644 --- a/pandapower/test/loadflow/test_rundcpp.py +++ b/pandapower/test/loadflow/test_rundcpp.py @@ -9,12 +9,13 @@ import numpy as np import pytest -from pandapower.auxiliary import _check_connectivity, _add_ppc_options, LoadflowNotConverged -from pandapower.create import (create_empty_network, create_bus, create_transformer, create_transformer3w, create_load, - create_xward, create_switch, create_ext_grid, create_line_from_parameters, create_bus_dc, - create_vsc, create_line_dc_from_parameters) +from pandapower.auxiliary import LoadflowNotConverged +from pandapower.create import ( + create_bus, create_transformer, create_transformer3w, create_load, create_xward, create_switch, create_ext_grid, + create_line_from_parameters, create_line_dc_from_parameters, create_bus_dc, create_vsc +) +from pandapower.network import pandapowerNet from pandapower.networks.power_system_test_cases import case4gs, case118 -from pandapower.pd2ppc import _pd2ppc from pandapower.run import rundcpp, runpp from pandapower.test.consistency_checks import rundcpp_with_consistency_checks from pandapower.test.helper_functions import add_grid_connection, create_test_line, assert_net_equal @@ -22,7 +23,7 @@ def test_rundcpp_init(): - net = create_empty_network() + net = pandapowerNet(name="test_rundcpp_init") _, b2, _ = add_grid_connection(net) b3 = create_bus(net, vn_kv=0.4) create_transformer(net, hv_bus=b2, lv_bus=b3, std_type="0.25 MVA 20/0.4 kV") @@ -30,7 +31,7 @@ def test_rundcpp_init(): def test_rundcpp_init_auxiliary_buses(): - net = create_empty_network() + net = pandapowerNet(name="test_rundcpp_init_auxiliary_buses") _, b2, _ = add_grid_connection(net, vn_kv=110.) b3 = create_bus(net, vn_kv=20.) b4 = create_bus(net, vn_kv=10.) @@ -61,7 +62,7 @@ def test_result_iter(): def test_two_open_switches(): - net = create_empty_network() + net = pandapowerNet(name="test_two_open_switches") b1, b2, _ = add_grid_connection(net) b3 = create_bus(net, vn_kv=20.) l2 = create_test_line(net, b2, b3) @@ -85,7 +86,7 @@ def test_test_sn_mva(): def test_single_bus_network(): - net = create_empty_network() + net = pandapowerNet(name="test_single_bus_network") b = create_bus(net, vn_kv=20.) create_ext_grid(net, b) @@ -136,7 +137,7 @@ def test_dc_after_ac(): def test_dc_vsc(): - net = create_empty_network() + net = pandapowerNet(name="test_dc_vsc") b1 = create_bus(net, name="AC_B1", vn_kv=380) b2 = create_bus(net, name="AC_B2", vn_kv=380) b3 = create_bus(net, name="AC_B3", vn_kv=380) @@ -202,7 +203,7 @@ def test_dc_vsc(): def test_dc_vsc_p(): - net = create_empty_network() + net = pandapowerNet(name="test_dc_vsc_p") b1 = create_bus(net, name="AC_B1", vn_kv=380) b2 = create_bus(net, name="AC_B2", vn_kv=380) b3 = create_bus(net, name="AC_B3", vn_kv=380) @@ -285,7 +286,7 @@ def test_dc_vsc_p(): def test_dc_vsc_oos(): - net = create_empty_network() + net = pandapowerNet(name="test_dc_vsc_oos") b1 = create_bus(net, name="AC_B1", vn_kv=380) b2 = create_bus(net, name="AC_B2", vn_kv=380) b3 = create_bus(net, name="AC_B3", vn_kv=380) diff --git a/pandapower/test/loadflow/test_runpp.py b/pandapower/test/loadflow/test_runpp.py index 131d11000..a7877da8c 100644 --- a/pandapower/test/loadflow/test_runpp.py +++ b/pandapower/test/loadflow/test_runpp.py @@ -14,11 +14,14 @@ from pandapower import pp_dir from pandapower.auxiliary import _check_connectivity, _add_ppc_options, lightsim2grid_available -from pandapower.create import create_bus, create_empty_network, create_ext_grid, create_dcline, create_load, \ - create_sgen, create_switch, create_transformer, create_xward, create_transformer3w, create_gen, create_shunt, \ - create_line_from_parameters, create_line, create_impedance, create_storage, create_buses, \ - create_transformer_from_parameters, create_transformer3w_from_parameters, create_poly_cost +from pandapower.create import ( + create_bus, create_ext_grid, create_dcline, create_load, create_sgen, create_switch, create_transformer, + create_xward, create_transformer3w, create_gen, create_shunt, create_line_from_parameters, create_line, + create_impedance, create_storage, create_buses, create_transformer_from_parameters, + create_transformer3w_from_parameters, create_poly_cost +) from pandapower.file_io import from_json +from pandapower.network import pandapowerNet from pandapower.networks import create_cigre_network_mv, four_loads_with_branches_out, \ example_simple, simple_four_bus_system, example_multivoltage, case118 from pandapower.pd2ppc import _pd2ppc @@ -42,17 +45,16 @@ logger = logging.getLogger(__name__) -try: - from pandapower.pf.makeYbus_numba import makeYbus as makeYbus_numba +from pandapower.auxiliary import _check_if_numba_is_installed - numba_installed = True -except ImportError: - numba_installed = False +numba_installed = _check_if_numba_is_installed() +if numba_installed: + from pandapower.pf.makeYbus_numba import makeYbus as makeYbus_numba def test_minimal_net(**kwargs): # tests corner-case when the grid only has 1 bus and an ext-grid - net = create_empty_network() + net = pandapowerNet(name="test_minimal_net") b = create_bus(net, 110) create_ext_grid(net, b) runpp_with_consistency_checks(net, **kwargs) @@ -134,7 +136,7 @@ def test_overwrite_default_args_with_user_options(): def test_runpp_init(): - net = create_empty_network() + net = pandapowerNet(name="test_runpp_init") _, b2, _ = add_grid_connection(net) b3 = create_bus(net, vn_kv=0.4) tidx = create_transformer(net, hv_bus=b2, lv_bus=b3, std_type="0.25 MVA 20/0.4 kV") @@ -148,7 +150,7 @@ def test_runpp_init(): def test_runpp_init_auxiliary_buses(): - net = create_empty_network() + net = pandapowerNet(name="test_runpp_init_auxiliary_buses") _, b2, _ = add_grid_connection(net, vn_kv=110.) b3 = create_bus(net, vn_kv=20.) b4 = create_bus(net, vn_kv=10.) @@ -185,7 +187,7 @@ def test_result_iter(): @pytest.fixture def bus_bus_net(): - net = create_empty_network() + net = pandapowerNet(name="bus_bus_net") add_grid_connection(net) for _ in range(4): create_bus(net, vn_kv=.4) @@ -236,7 +238,7 @@ def test_bus_bus_switches_throws_exception_for_two_gen_with_diff_vm(bus_bus_net) @pytest.fixture def z_switch_net(): - net = create_empty_network() + net = pandapowerNet(name="z_switch_net") for i in range(3): create_bus(net, vn_kv=.4) create_load(net, i, p_mw=0.1) @@ -262,7 +264,7 @@ def test_z_switch(z_switch_net, numba): @pytest.fixture def z_switch_net_4bus_parallel(): - net = create_empty_network() + net = pandapowerNet(name="z_switch_net_4bus_parallel") for i in range(4): create_bus(net, vn_kv=.4) create_load(net, i, p_mw=0.1) @@ -280,7 +282,7 @@ def z_switch_net_4bus_parallel(): @pytest.fixture def z_switch_net_4bus(): - net = create_empty_network() + net = pandapowerNet(name="z_switch_net_4bus") for i in range(4): create_bus(net, vn_kv=.4) create_load(net, i, p_mw=0.01) @@ -322,7 +324,7 @@ def test_switch_z_ohm_different(z_switch_net_4bus_parallel, z_switch_net_4bus, n def test_two_open_switches(): - net = create_empty_network() + net = pandapowerNet(name="test_two_open_switches") b1, b2, _ = add_grid_connection(net) b3 = create_bus(net, vn_kv=20.) l2 = create_test_line(net, b2, b3) @@ -334,7 +336,7 @@ def test_two_open_switches(): def test_oos_bus(): - net = create_empty_network() + net = pandapowerNet(name="test_oos_bus") add_test_oos_bus_with_is_element(net) assert runpp_with_consistency_checks(net) @@ -454,7 +456,7 @@ def test_connectivity_check_island_with_multiple_pv_buses(): def test_isolated_in_service_bus_at_oos_line(): - net = create_empty_network() + net = pandapowerNet(name="test_isolated_in_service_bus_at_oos_line") _, b2, _ = add_grid_connection(net) b = create_bus(net, vn_kv=135) l = create_line(net, b2, b, 0.1, std_type="NAYY 4x150 SE") @@ -464,7 +466,7 @@ def test_isolated_in_service_bus_at_oos_line(): def test_isolated_in_service_line(): # ToDo: Fix this - net = create_empty_network() + net = pandapowerNet(name="test_isolated_in_service_line") _, b2, l1 = add_grid_connection(net) b = create_bus(net, vn_kv=20.) create_line(net, b2, b, 0.1, std_type="NAYY 4x150 SE") @@ -474,7 +476,7 @@ def test_isolated_in_service_line(): def test_makeYbus(): # tests if makeYbus fails for nets where every bus is connected to each other - net = create_empty_network() + net = pandapowerNet(name="test_makeYbus") _, b2, _ = add_grid_connection(net) # number of buses to create @@ -750,7 +752,7 @@ def test_zip_loads_pf_algorithms(): def test_zip_loads_with_voltage_angles(): - net = create_empty_network() + net = pandapowerNet(name="test_zip_loads_with_voltage_angles") b1 = create_bus(net, vn_kv=1.) b2 = create_bus(net, vn_kv=1.) create_ext_grid(net, b1) @@ -775,7 +777,7 @@ def test_zip_loads_out_of_service(): # example from https://github.com/e2nIEE/pandapower/issues/1504 # test net - net = create_empty_network() + net = pandapowerNet(name="test_zip_loads_out_of_service") bus1 = create_bus(net, vn_kv=20., name="Bus 1") bus2 = create_bus(net, vn_kv=0.4, name="Bus 2") bus3 = create_bus(net, vn_kv=0.4, name="Bus 3") @@ -803,7 +805,7 @@ def test_zip_loads_out_of_service(): assert nets_equal(net, net1, check_only_results=True) def test_zip_loads_mixed_voltage_dependencies(): - net = create_empty_network() + net = pandapowerNet(name="test_zip_loads_mixed_voltage_dependencies") bus1 = create_bus(net, vn_kv=110., name="Bus 1") bus2 = create_bus(net, vn_kv=110., name="Bus 2") @@ -841,7 +843,7 @@ def test_zip_loads_mixed_voltage_dependencies(): assert np.allclose(net.res_bus.vm_pu.at[1], res_bus_v) def test_invalid_zip_percentage_sum(): - net = create_empty_network() + net = pandapowerNet(name="test_invalid_zip_percentage_sum") create_bus(net, 20.0) create_ext_grid(net, 0) create_load(net, 0, p_mw=1.0, q_mvar=0.5) @@ -871,7 +873,7 @@ def test_xward_buses(): However, if the load flow does not converge, those buses end up staying in the net and don't get removed. This can potentially lead to thousands of dummy buses in net. """ - net = create_empty_network() + net = pandapowerNet(name="test_xward_buses") bus_sl = create_bus(net, 110, name='ExtGrid') create_ext_grid(net, bus_sl, vm_pu=1) bus_x = create_bus(net, 110, name='XWARD') @@ -898,7 +900,7 @@ def test_xward_buses(): def test_pvpq_lookup(): - net = create_empty_network() + net = pandapowerNet(name="test_pvpq_lookup") b1 = create_bus(net, vn_kv=0.4, index=4) b2 = create_bus(net, vn_kv=0.4, index=2) @@ -963,7 +965,7 @@ def test_Ybus_format(): def test_storage_pf(): - net = create_empty_network() + net = pandapowerNet(name="test_storage_pf") b1 = create_bus(net, vn_kv=0.4) b2 = create_bus(net, vn_kv=0.4) @@ -1023,7 +1025,7 @@ def test_add_element_and_init_results(): def test_pp_initialization(): - net = create_empty_network() + net = pandapowerNet(name="test_pp_initialization") b1 = create_bus(net, vn_kv=0.4) b2 = create_bus(net, vn_kv=0.4) @@ -1054,7 +1056,7 @@ def test_pp_initialization(): def test_equal_indices_res(): # tests if res_bus indices of are the same as the ones in bus. # If this is not the case and you init from results, the PF will fail - net = create_empty_network() + net = pandapowerNet(name="test_equal_indices_res") b1 = create_bus(net, vn_kv=10., index=3) b2 = create_bus(net, vn_kv=0.4, index=1) @@ -1075,7 +1077,7 @@ def test_equal_indices_res(): def test_ext_grid_and_gen_at_one_bus(**kwargs): - net = create_empty_network() + net = pandapowerNet(name="test_ext_grid_and_gen_at_one_bus") b1 = create_bus(net, vn_kv=110) b2 = create_bus(net, vn_kv=110) create_ext_grid(net, b1, vm_pu=1.01) @@ -1130,7 +1132,7 @@ def test_ext_grid_and_gen_at_one_bus(**kwargs): def two_ext_grids_at_one_bus(): - net = create_empty_network() + net = pandapowerNet(name="two_ext_grids_at_one_bus") b1 = create_bus(net, vn_kv=110, index=3) b2 = create_bus(net, vn_kv=110, index=5) create_ext_grid(net, b1, vm_pu=1.01, index=2) @@ -1169,7 +1171,7 @@ def two_ext_grids_at_one_bus(): def test_dc_with_ext_grid_at_one_bus(): - net = create_empty_network() + net = pandapowerNet(name="test_dc_with_ext_grid_at_one_bus") b1 = create_bus(net, vn_kv=110) b2 = create_bus(net, vn_kv=110) @@ -1187,7 +1189,7 @@ def test_dc_with_ext_grid_at_one_bus(): def test_no_branches(): - net = create_empty_network() + net = pandapowerNet(name="test_no_branches") create_buses(net, 3, 110) create_ext_grid(net, 0) create_sgen(net, 1, 10) @@ -1201,7 +1203,7 @@ def test_no_branches(): def test_only_ref_buses(): - net = create_empty_network() + net = pandapowerNet(name="test_only_ref_buses") create_buses(net, nr_buses=2, vn_kv=1) create_line_from_parameters(net, from_bus=0, to_bus=1, length_km=1, r_ohm_per_km=1, x_ohm_per_km=1, @@ -1244,7 +1246,7 @@ def test_init_results_without_results(): def test_init_results(): - net = create_empty_network() + net = pandapowerNet(name="test_init_results") add_test_line(net) # line network with switch at to bus assert_init_results(net) net.switch.at[0, "bus"] = 0 # switch at from bus @@ -1260,8 +1262,9 @@ def test_init_results(): add_test_trafo3w(net) # trafo3w with internal node assert_init_results(net) t3idx = net.trafo3w.index[0] - t3_switch = create_switch(net, bus=net.trafo3w.hv_bus.at[t3idx], - element=t3idx, et="t3", closed=False) # trafo3w switch at hv side + t3_switch = create_switch( + net, bus=net.trafo3w.hv_bus.at[t3idx], element=t3idx, et="t3", closed=False + ) # trafo3w switch at hv side assert_init_results(net) net.switch.at[t3_switch, "bus"] = net.trafo3w.mv_bus.at[t3idx] # trafo3w switch at mv side assert_init_results(net) @@ -1277,7 +1280,7 @@ def assert_init_results(net): def test_wye_delta(): - net = create_empty_network() + net = pandapowerNet(name="test_wye_delta") create_bus(net, vn_kv=110) create_buses(net, nr_buses=4, vn_kv=20) trafo = create_transformer(net, hv_bus=0, lv_bus=1, std_type='25 MVA 110/20 kV') @@ -1355,7 +1358,7 @@ def test_line_temperature(): def test_results_for_line_temperature(): - net = create_empty_network() + net = pandapowerNet(name="test_results_for_line_temperature") create_bus(net, 0.4) create_buses(net, 2, 0.4) @@ -1385,7 +1388,7 @@ def test_results_for_line_temperature(): def test_tap_dependent_impedance(): - net = create_empty_network() + net = pandapowerNet(name="test_tap_dependent_impedance") _, b2, _ = add_grid_connection(net) b3 = create_bus(net, vn_kv=0.4) create_transformer(net, hv_bus=b2, lv_bus=b3, std_type="0.25 MVA 20/0.4 kV") @@ -1444,7 +1447,7 @@ def test_tap_dependent_impedance(): assert_res_equal(net, net_backup) def test_tap_table_order(): - net = create_empty_network() + net = pandapowerNet(name="test_tap_table_order") _, b2, _ = add_grid_connection(net) b3 = create_bus(net, vn_kv=0.4) b4 = create_bus(net, vn_kv=0.4) @@ -1612,7 +1615,7 @@ def test_lightsim2grid_option(): def test_at_isolated_bus(): - net = create_empty_network() + net = pandapowerNet(name="test_at_isolated_bus") create_buses(net, 4, 110) create_ext_grid(net, 0) @@ -1625,7 +1628,7 @@ def test_at_isolated_bus(): def test_shunt_with_missing_vn_kv(): - net = create_empty_network() + net = pandapowerNet(name="test_shunt_with_missing_vn_kv") create_buses(net, 2, 110) create_ext_grid(net, 0) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1637,7 +1640,7 @@ def test_shunt_with_missing_vn_kv(): def _test_net_for_q_capability_curve(): - net = create_empty_network() + net = pandapowerNet(name="_test_net_for_q_capability_curve") bus1 = create_bus(net, name="bus1", vn_kv=20., type="b", min_vm_pu=0.96, max_vm_pu=1.02) bus2 = create_bus(net, name="bus2", vn_kv=110., type="b", min_vm_pu=0.96, max_vm_pu=1.02) @@ -1652,9 +1655,11 @@ def _test_net_for_q_capability_curve(): create_load(net, bus3, p_mw=198, q_mvar=500, name="Load", vm_pu=1.0 ) # create transformer - create_transformer_from_parameters(net, bus2, bus1, name="110kV/20kV transformer", parallel=1,max_loading_percent=100,sn_mva=210, - vn_hv_kv=110, vn_lv_kv=20, vk_percent=12.5, vkr_percent=0.01904762, vk0_percent=10, vkr0_percent=0, - shift_degree=330, vector_group="YNd11", i0_percent= 0.26, pfe_kw=0,si0_hv_partial=0.5) + create_transformer_from_parameters( + net, bus2, bus1, name="110kV/20kV transformer", parallel=1, max_loading_percent=100, sn_mva=210, vn_hv_kv=110, + vn_lv_kv=20, vk_percent=12.5, vkr_percent=0.01904762, vk0_percent=10, vkr0_percent=0, shift_degree=330, + vector_group="YNd11", i0_percent= 0.26, pfe_kw=0,si0_hv_partial=0.5 + ) create_gen(net, bus1, p_mw=100, sn_mva=255.0, scaling=1.0, type="Hydro", cos_phi=0.8, pg_percent=0.0, vn_kv=19.0, vm_pu=1.0) #,min_q_mvar=-255, max_q_mvar=255, min_p_mw=-331.01001, max_p_mw=331.01001) @@ -1692,8 +1697,10 @@ def test_q_capability_curve(): def test_q_capability_curve_for_sgen(): net = _test_net_for_q_capability_curve() drop_elements(net, 'gen', 0) - create_sgen(net, 0, p_mw=198, sn_mva=255.0, scaling=1.0, type="Hydro", cos_phi=0.8, pg_percent=0.0, vn_kv=19.0, - vm_pu=1.0, min_q_mvar=-255, max_q_mvar=255, controllable=True, min_p_mw=-0.03, max_p_mw=0) + create_sgen( + net, 0, p_mw=198, sn_mva=255.0, scaling=1.0, type="Hydro", cos_phi=0.8, pg_percent=0.0, vn_kv=19.0, + vm_pu=1.0, min_q_mvar=-255, max_q_mvar=255, controllable=True, min_p_mw=-0.03, max_p_mw=0 + ) net.ext_grid["controllable"] = True create_poly_cost(net, 0, "sgen", cp1_eur_per_mw=0.1) create_poly_cost(net, 0, "ext_grid", cp1_eur_per_mw=-0.1) diff --git a/pandapower/test/loadflow/test_runpp_3ph.py b/pandapower/test/loadflow/test_runpp_3ph.py index 9ebaa3b0b..894e3708e 100644 --- a/pandapower/test/loadflow/test_runpp_3ph.py +++ b/pandapower/test/loadflow/test_runpp_3ph.py @@ -16,7 +16,6 @@ from pandapower.toolbox.grid_modification import replace_line_by_impedance from pandapower.auxiliary import get_free_id from pandapower.create import ( - create_empty_network, create_bus, create_ext_grid, create_line, @@ -31,6 +30,7 @@ create_switch, ) from pandapower.file_io import from_json +from pandapower.network import pandapowerNet from pandapower.pf.runpp_3ph import runpp_3ph from pandapower.run import runpp from pandapower.std_types import create_std_type, add_zero_impedance_parameters @@ -50,7 +50,7 @@ def test_net(): v_base = 110 # 110kV Base Voltage k_va_base = 100 # 100 MVA - net = create_empty_network(sn_mva=k_va_base) + net = pandapowerNet(name="test_net", sn_mva=k_va_base) create_bus(net, vn_kv=v_base, index=1) create_bus(net, vn_kv=v_base, index=5) create_ext_grid(net, bus=1, vm_pu=1.0, s_sc_max_mva=5000, rx_max=0.1, r0x0_max=0.1, x0x_max=1.0) @@ -208,7 +208,7 @@ def test_2bus_network_one_of_two_ext_grids_oos(test_net): def test_4bus_network(init, recycle): v_base = 110 # 110kV Base Voltage mva_base = 100 # 100 MVA - net = create_empty_network(sn_mva=mva_base) + net = pandapowerNet(name="test_4bus_network", sn_mva=mva_base) # ============================================================================= # Main Program # ============================================================================= @@ -454,7 +454,7 @@ def test_4bus_network(init, recycle): def test_3ph_bus_mapping_order(): - net = create_empty_network() + net = pandapowerNet(name="test_3ph_bus_mapping_order") b2 = create_bus(net, vn_kv=0.4, index=4) create_bus(net, vn_kv=0.4, in_service=False, index=3) b1 = create_bus(net, vn_kv=0.4, index=7) @@ -499,7 +499,7 @@ def test_3ph_bus_mapping_order(): def test_3ph_two_bus_line_powerfactory(): - net = create_empty_network() + net = pandapowerNet(name="test_3ph_two_bus_line_powerfactory") b1 = create_bus(net, vn_kv=0.4) b2 = create_bus(net, vn_kv=0.4) @@ -670,10 +670,10 @@ def check_trafo_currents(net, result, trafo_vector_group): raise ValueError("Incorrect results for vector group %s" % trafo_vector_group, res_trafo_i_ka, result) -def check_results(net, trafo_vector_group, results): - check_bus_voltages(net, results[0], trafo_vector_group) - check_line_currents(net, results[1], trafo_vector_group) - check_trafo_currents(net, results[2], trafo_vector_group) +def check_results(_net, trafo_vector_group, results): + check_bus_voltages(_net, results[0], trafo_vector_group) + check_line_currents(_net, results[1], trafo_vector_group) + check_trafo_currents(_net, results[2], trafo_vector_group) def make_nw(net, bushv, tap_ps, case, vector_group): @@ -801,7 +801,7 @@ def test_trafo_asym_currents__high_neg_seq(): shunt admittance zero, so that no load currents do not disturb HT side currents. For this reason, pfe_kw = 0, i0_percent = 0, mag0_percent = BIG_NUMBER. """ - net = create_empty_network() + net = pandapowerNet(name="test_trafo_asym_currents__high_neg_seq") add_zero_impedance_parameters(net) create_bus(net, 11, "source") create_bus(net, 11, "HT") @@ -834,9 +834,9 @@ def test_trafo_asym_currents__high_neg_seq(): def test_2trafos(): - net = create_empty_network() - make_nw(net, 10.0, 0.0, "wye", "YNyn") - make_nw(net, 10.0, 0.0, "wye", "YNyn") + net = pandapowerNet(name="test_2trafos") + make_nw(net, 10., 0., "wye", "YNyn") + make_nw(net, 10., 0., "wye", "YNyn") runpp_3ph_with_consistency_checks(net) assert net["converged"] assert np.allclose(net.res_ext_grid_3ph.iloc[0].values, net.res_ext_grid_3ph.iloc[1].values) @@ -845,7 +845,7 @@ def test_2trafos(): def test_3ph_isolated_nodes(): v_base = 110 # 110kV Base Voltage mva_base = 100 # 100 MVA - net = create_empty_network(sn_mva=mva_base) + net = pandapowerNet(name="test_3ph_isolated_nodes", sn_mva=mva_base) busn = create_bus(net, vn_kv=v_base, name="busn", index=1) create_bus(net, vn_kv=20.0, in_service=True, index=2, name="busx") @@ -892,7 +892,7 @@ def test_3ph_isolated_nodes(): def test_balanced_power_flow_with_unbalanced_loads_and_sgens(): - net = create_empty_network(sn_mva=100) + net = pandapowerNet(name="test_balanced_power_flow_with_unbalanced_loads_and_sgens", sn_mva=100) make_nw(net, 10, 0, "wye", "Dyn") create_asymmetric_sgen(net, 1, p_a_mw=0.01, p_b_mw=0.02, scaling=0.8) runpp_with_consistency_checks(net) @@ -937,7 +937,7 @@ def test_3ph_with_impedance(): def test_shunt_3ph(): - net = create_empty_network() + net = pandapowerNet(name="test_shunt_3ph") b1 = create_bus(net, 20.0) b2 = create_bus(net, 20.0) create_ext_grid(net, b1, s_sc_max_mva=1000, rx_max=0.1, x0x_max=1.0, r0x0_max=0.1) @@ -1018,28 +1018,28 @@ def test_3ph_enforce_q_lims(result_test_network): v_tol = 1e-6 s_tol = 5e-3 - net = result_test_network - buses = net.bus[net.bus.zone == "test_enforce_qlims"] - gens = [x for x in net.gen.index if net.gen.bus[x] in buses.index] + _net = result_test_network + buses = _net.bus[_net.bus.zone == "test_enforce_qlims"] + gens = [x for x in _net.gen.index if _net.gen.bus[x] in buses.index] b2 = buses.index[1] b3 = buses.index[2] g1 = gens[0] # enforce reactive power limits - runpp_3ph(net, enforce_q_lims=True) + runpp_3ph(_net, enforce_q_lims=True) # powerfactory results u2 = 1.00607194 u3 = 1.00045091 - assert abs(net.res_bus.vm_pu.at[b2] - u2) < v_tol - assert abs(net.res_bus.vm_pu.at[b3] - u3) < v_tol - assert abs(net.res_gen.q_mvar.at[g1] - net.gen.min_q_mvar.at[g1]) < s_tol + assert abs(_net.res_bus.vm_pu.at[b2] - u2) < v_tol + assert abs(_net.res_bus.vm_pu.at[b3] - u3) < v_tol + assert abs(_net.res_gen.q_mvar.at[g1] - _net.gen.min_q_mvar.at[g1]) < s_tol @pytest.mark.xfail def test_recycle_pq(): - net = create_empty_network() + net = pandapowerNet(name="test_recycle_pq") _, b2, _ = add_grid_connection(net) pl = 1.2 ql = 1.1 @@ -1071,38 +1071,38 @@ def test_recycle_pq(): @pytest.mark.xfail def test_connectivity_check_island_without_pv_bus(): # Network with islands without pv bus -> all buses in island should be set out of service - net = create_cigre_network_mv(with_der=False) - iso_buses, iso_p, iso_q, *_ = get_isolated(net) + _net = create_cigre_network_mv(with_der=False) + iso_buses, iso_p, iso_q, *_ = get_isolated(_net) assert len(iso_buses) == 0 assert np.isclose(iso_p, 0) assert np.isclose(iso_q, 0) - isolated_bus1 = create_bus(net, vn_kv=20.0, name="isolated Bus1") - isolated_bus2 = create_bus(net, vn_kv=20.0, name="isolated Bus2") + isolated_bus1 = create_bus(_net, vn_kv=20.0, name="isolated Bus1") + isolated_bus2 = create_bus(_net, vn_kv=20.0, name="isolated Bus2") create_line( - net, isolated_bus2, isolated_bus1, length_km=1, std_type="N2XS(FL)2Y 1x300 RM/35 64/110 kV", name="IsolatedLine" + _net, isolated_bus2, isolated_bus1, length_km=1, std_type="N2XS(FL)2Y 1x300 RM/35 64/110 kV", name="IsolatedLine" ) - iso_buses, iso_p, iso_q, *_ = get_isolated(net) + iso_buses, iso_p, iso_q, *_ = get_isolated(_net) assert len(iso_buses) == 2 assert np.isclose(iso_p, 0) assert np.isclose(iso_q, 0) - create_load(net, isolated_bus1, p_mw=0.2, q_mvar=0.02) - create_sgen(net, isolated_bus2, p_mw=0.15, q_mvar=0.01) + create_load(_net, isolated_bus1, p_mw=0.2, q_mvar=0.02) + create_sgen(_net, isolated_bus2, p_mw=0.15, q_mvar=0.01) # with pytest.warns(UserWarning): - iso_buses, iso_p, iso_q, *_ = get_isolated(net) + iso_buses, iso_p, iso_q, *_ = get_isolated(_net) assert len(iso_buses) == 2 assert np.isclose(iso_p, 350) assert np.isclose(iso_q, 30) # with pytest.warns(UserWarning): - runpp_3ph(net, check_connectivity=True) + runpp_3ph(_net, check_connectivity=True) @pytest.mark.xfail @pytest.mark.parametrize("numba", [True, False]) def test_z_switch(numba): - net = create_empty_network() + net = pandapowerNet(name="test_z_switch") for i in range(3): create_bus(net, vn_kv=0.4) create_load(net, i, p_mw=0.1) diff --git a/pandapower/test/loadflow/test_runpp_3ph_n_line.py b/pandapower/test/loadflow/test_runpp_3ph_n_line.py index f99cd2367..e95875ef8 100644 --- a/pandapower/test/loadflow/test_runpp_3ph_n_line.py +++ b/pandapower/test/loadflow/test_runpp_3ph_n_line.py @@ -7,9 +7,8 @@ import numpy as np import pytest -from pandapower.create import ( - create_empty_network, create_bus, create_ext_grid, create_asymmetric_load, create_line_from_parameters -) +from pandapower.create import create_bus, create_ext_grid, create_asymmetric_load, create_line_from_parameters +from pandapower.network import pandapowerNet from pandapower.pf.runpp_3ph import runpp_3ph @@ -17,7 +16,7 @@ def net(): v_base = 20 # 20kV Base Voltage mva_base = 100 # 100 MVA - net = create_empty_network(sn_mva=mva_base) + net = pandapowerNet(name="net", sn_mva=mva_base) bus0 = create_bus(net, vn_kv=v_base, name="Bus 0") diff --git a/pandapower/test/loadflow/test_runpp_pgm.py b/pandapower/test/loadflow/test_runpp_pgm.py index c90070543..023b75485 100644 --- a/pandapower/test/loadflow/test_runpp_pgm.py +++ b/pandapower/test/loadflow/test_runpp_pgm.py @@ -3,8 +3,8 @@ import pytest -from pandapower.create import create_empty_network, create_bus, create_ext_grid, create_load, create_switch, \ - create_sgen, create_line +from pandapower.create import create_bus, create_ext_grid, create_load, create_switch, create_sgen, create_line +from pandapower.network import pandapowerNet from pandapower.run import runpp_pgm from pandapower.test.consistency_checks import runpp_pgm_with_consistency_checks, runpp_pgm_3ph_with_consistency_checks @@ -20,7 +20,7 @@ @pytest.mark.skipif(not PGM_IMPORTED, reason="requires power_grid_model") def test_minimal_net_pgm(consistency_fn): # tests corner-case when the grid only has 1 bus and an ext-grid - net = create_empty_network() + net = pandapowerNet(name="test_minimal_net_pgm") b = create_bus(net, 110) create_ext_grid(net, b) consistency_fn(net) @@ -36,7 +36,7 @@ def test_minimal_net_pgm(consistency_fn): @pytest.mark.skipif(not PGM_IMPORTED, reason="requires power_grid_model") def test_runpp_pgm__invalid_algorithm(): - net = create_empty_network() + net = pandapowerNet(name="test_runpp_pgm__invalid_algorithm") with pytest.raises( KeyError, match="Invalid algorithm 'foo'", @@ -47,7 +47,7 @@ def test_runpp_pgm__invalid_algorithm(): @patch("pandapower.run.logger") @pytest.mark.skipif(not PGM_IMPORTED, reason="requires power_grid_model") def test_runpp_pgm__internal_pgm_error(mock_logger: MagicMock): - net = create_empty_network() + net = pandapowerNet(name="test_runpp_pgm__internal_pgm_error") b1 = create_bus(net, 110) create_ext_grid(net, b1, vm_pu=1) b2 = create_bus(net, 50) @@ -68,7 +68,7 @@ def test_runpp_pgm__internal_pgm_error(mock_logger: MagicMock): @patch("pandapower.run.logger") @pytest.mark.skipif(not PGM_IMPORTED, reason="requires power_grid_model") def test_runpp_pgm__validation_fail(mock_logger: MagicMock): - net = create_empty_network() + net = pandapowerNet(name="test_runpp_pgm__validation_fail") create_bus(net, -110, index=123) runpp_pgm(net, validate_input=True) diff --git a/pandapower/test/loadflow/test_scenarios.py b/pandapower/test/loadflow/test_scenarios.py index b620f0678..cbf54ceae 100644 --- a/pandapower/test/loadflow/test_scenarios.py +++ b/pandapower/test/loadflow/test_scenarios.py @@ -8,17 +8,18 @@ import pytest from pandapower.auxiliary import get_free_id -from pandapower.create import create_gen, create_ext_grid, create_bus, create_line, create_empty_network, \ - create_switch, create_xward, create_transformer_from_parameters, create_transformer3w_from_parameters, \ - create_load, create_transformer, create_transformer3w, create_motor +from pandapower.create import ( + create_gen, create_ext_grid, create_bus, create_line, create_switch, create_xward, create_load, create_transformer, + create_transformer_from_parameters, create_transformer3w_from_parameters, create_transformer3w, create_motor +) +from pandapower.network import pandapowerNet from pandapower.networks.simple_pandapower_test_networks import simple_mv_open_ring_net from pandapower.run import runpp, rundcpp from pandapower.shortcircuit.calc_sc import calc_sc from pandapower.std_types import create_std_type from pandapower.test.consistency_checks import runpp_with_consistency_checks from pandapower.test.helper_functions import create_test_network2, add_grid_connection -from pandapower.test.loadflow.result_test_network_generator import add_test_bus_bus_switch, \ - add_test_trafo +from pandapower.test.loadflow.result_test_network_generator import add_test_bus_bus_switch, add_test_trafo # TODO: 2 gen 2 ext_grid missing @@ -109,7 +110,7 @@ def test_0gen_2ext_grid_decoupled(): def test_bus_bus_switch_at_eg(): - net = create_empty_network() + net = pandapowerNet(name="test_bus_bus_switch_at_eg") b1 = create_bus(net, name="bus1", vn_kv=.4) b2 = create_bus(net, name="bus2", vn_kv=.4) b3 = create_bus(net, name="bus3", vn_kv=.4) @@ -126,13 +127,13 @@ def test_bus_bus_switch_at_eg(): def test_bb_switch(): - net = create_empty_network() + net = pandapowerNet(name="test_bb_switch") net = add_test_bus_bus_switch(net) runpp_with_consistency_checks(net) def test_two_gens_at_one_bus(): - net = create_empty_network() + net = pandapowerNet(name="test_two_gens_at_one_bus") b1 = create_bus(net, 380) b2 = create_bus(net, 380) @@ -153,7 +154,7 @@ def test_two_gens_at_one_bus(): def test_ext_grid_gen_order_in_ppc(): - net = create_empty_network() + net = pandapowerNet(name="test_ext_grid_gen_order_in_ppc") for b in range(6): create_bus(net, vn_kv=1., name=b) @@ -178,7 +179,7 @@ def test_ext_grid_gen_order_in_ppc(): def test_isolated_gen_lookup(): - net = create_empty_network() + net = pandapowerNet(name="test_isolated_gen_lookup") gen_bus = create_bus(net, vn_kv=1., name='gen_bus') slack_bus = create_bus(net, vn_kv=1., name='slack_bus') @@ -216,7 +217,7 @@ def test_isolated_gen_lookup(): def test_transformer_phase_shift(): - net = create_empty_network() + net = pandapowerNet(name="test_transformer_phase_shift") for side in ["hv", "lv"]: b1 = create_bus(net, vn_kv=110.) b2 = create_bus(net, vn_kv=20.) @@ -255,17 +256,16 @@ def test_transformer_phase_shift_complex(side): 'lv': (0.9603, -31.1306) } - net = create_empty_network() + net = pandapowerNet(name=f"test_transformer_phase_shift_complex side={side}") b1 = create_bus(net, vn_kv=110.) create_ext_grid(net, b1) b2 = create_bus(net, vn_kv=20.) create_load(net, b2, p_mw=10) - create_transformer_from_parameters(net, hv_bus=b1, lv_bus=b2, sn_mva=40, vn_hv_kv=110, - vn_lv_kv=20, vkr_percent=0.1, vk_percent=5, - pfe_kw=0, i0_percent=0.1, shift_degree=30, - tap_side=side, tap_neutral=0, tap_max=2, tap_min=-2, - tap_step_percent=2, tap_step_degree=10, tap_pos=0, - tap_changer_type="Ratio") + create_transformer_from_parameters( + net, hv_bus=b1, lv_bus=b2, sn_mva=40, vn_hv_kv=110, vn_lv_kv=20, vkr_percent=0.1, vk_percent=5, pfe_kw=0, + i0_percent=0.1, shift_degree=30, tap_side=side, tap_neutral=0, tap_max=2, tap_min=-2, tap_step_percent=2, + tap_step_degree=10, tap_pos=0, tap_changer_type="Ratio" + ) runpp(net, init="dc", calculate_voltage_angles=True) assert np.isclose(net.res_bus.vm_pu.at[b2], test_ref[0], rtol=1e-4) assert np.isclose(net.res_bus.va_degree.at[b2], test_ref[1], rtol=1e-4) @@ -294,7 +294,7 @@ def test_transformer3w_phase_shift(): 'lv': ((0.9995, -31.003), (0.9603, -61.178)) } for side in ["hv", "mv", "lv"]: - net = create_empty_network() + net = pandapowerNet(name=f"test_transformer3w_phase_shift side={side}") b1 = create_bus(net, vn_kv=110.) create_ext_grid(net, b1) b2 = create_bus(net, vn_kv=20.) @@ -335,7 +335,7 @@ def test_transformer3w_phase_shift(): def test_volt_dep_load_at_inactive_bus(): # create empty net - net = create_empty_network() + net = pandapowerNet(name="test_volt_dep_load_at_inactive_bus") # create buses bus1 = create_bus(net, index=0, vn_kv=20., name="Bus 1") @@ -366,7 +366,7 @@ def test_volt_dep_load_at_inactive_bus(): def test_two_oos_buses(): - net = create_empty_network() + net = pandapowerNet(name="test_two_oos_buses") b1 = create_bus(net, vn_kv=0.4) b2 = create_bus(net, vn_kv=0.4) @@ -390,7 +390,7 @@ def test_two_oos_buses(): def test_oos_buses_at_trafo3w(): - net = create_empty_network() + net = pandapowerNet(name="test_oos_buses_at_trafo3w") b1 = create_bus(net, vn_kv=110.) b2 = create_bus(net, vn_kv=110.) @@ -413,7 +413,7 @@ def test_oos_buses_at_trafo3w(): @pytest.fixture def network_with_trafo3ws(): - net = create_empty_network() + net = pandapowerNet(name="network_with_trafo3ws") add_test_trafo(net) _, hv, _ = add_grid_connection(net, zone="test_trafo3w") for _ in range(2): @@ -476,7 +476,7 @@ def test_trafo3w_switches(network_with_trafo3ws): def test_generator_as_slack(): - net = create_empty_network() + net = pandapowerNet(name="test_generator_as_slack") b1 = create_bus(net, 110.) create_ext_grid(net, b1, vm_pu=1.02) b2 = create_bus(net, 110.) @@ -496,7 +496,7 @@ def test_generator_as_slack(): def test_transformer_with_two_open_switches(): - net = create_empty_network() + net = pandapowerNet(name="test_transformer_with_two_open_switches") b1 = create_bus(net, 110.) create_ext_grid(net, b1, vm_pu=1.02) b2 = create_bus(net, 20.) @@ -521,7 +521,7 @@ def test_transformer_with_two_open_switches(): def test_motor(): - net = create_empty_network() + net = pandapowerNet(name="test_motor") b1 = create_bus(net, 0.4) b2 = create_bus(net, 0.4) create_line(net, b1, b2, length_km=0.1, std_type="NAYY 4x50 SE") diff --git a/pandapower/test/loadflow/test_tdpf.py b/pandapower/test/loadflow/test_tdpf.py index f3925377a..e8bb4f7cf 100644 --- a/pandapower/test/loadflow/test_tdpf.py +++ b/pandapower/test/loadflow/test_tdpf.py @@ -10,11 +10,16 @@ import copy from pandapower import pp_dir -from pandapower.create import create_empty_network, create_bus, create_line, create_load, create_ext_grid, \ - create_buses, create_sgen, create_gen, create_gens, create_line_from_parameters +from pandapower.create import ( + create_bus, create_line, create_load, create_ext_grid, create_buses, create_sgen, create_gen, create_gens, + create_line_from_parameters +) +from pandapower.network import pandapowerNet from pandapower.networks.power_system_test_cases import case9, case30 -from pandapower.pf.create_jacobian_tdpf import calc_r_theta_from_t_rise, calc_i_square_p_loss, calc_g_b, \ - calc_a0_a1_a2_tau, calc_T_ngoko, calc_r_theta, calc_T_frank +from pandapower.pf.create_jacobian_tdpf import ( + calc_r_theta_from_t_rise, calc_i_square_p_loss, calc_g_b, calc_a0_a1_a2_tau, calc_T_ngoko, calc_r_theta, + calc_T_frank +) from pandapower.pypower.idx_brch import BR_R, BR_X from pandapower.run import set_user_pf_options, runpp from pandapower.std_types import parameter_from_std_type @@ -36,7 +41,7 @@ def en_net(request): def create_single_line_net(std_type): - net = create_empty_network() + net = pandapowerNet(name="create_single_line_net") set_user_pf_options(net, init="dc", max_iteration=100) vn_kv = float(std_type.split(" ")[-1]) @@ -105,7 +110,7 @@ def prepare_case_30(): def simple_test_grid(load_scaling=1., sgen_scaling=1., with_gen=False, distributed_slack=False): s_base = 100 - net = create_empty_network(sn_mva=s_base) + net = pandapowerNet(name="simple_test_grid", sn_mva=s_base) std_type = "490-AL1/64-ST1A 110.0" r = 0.059 v_base = 132 @@ -388,7 +393,7 @@ def test_with_user_pf_options(): # Relationship of Bare Overhead Conductors" Basic Example with Calculation, Page 23 and following def test_IEEE_example_1(): # 60Hz according to USA - net = create_empty_network(f_hz=60.0) + net = pandapowerNet(name="test_IEEE_example_1",f_hz=60.0) b1 = create_bus(net, vn_kv=380, name='b1_hv', type='n') b2 = create_bus(net, vn_kv=380, name='b10', type='n') @@ -437,7 +442,7 @@ def test_IEEE_example_1(): # Relationship of Bare Overhead Conductors", Annex B, Numerical example 1, Page 44 def test_IEEE_example_2(): # 60Hz according to USA - net = create_empty_network(f_hz=60.0) + net = pandapowerNet(name="test_IEEE_example_2",f_hz=60.0) b1 = create_bus(net, vn_kv=380, name='b1_hv', type='n') b2 = create_bus(net, vn_kv=380, name='b10', type='n') @@ -485,7 +490,7 @@ def test_IEEE_example_2(): # Relationship of Bare Overhead Conductors", Annex B, Numerical example 2, Page 45 def test_IEEE_example_3(): # 60Hz according to USA - net = create_empty_network(f_hz=60.0) + net = pandapowerNet(name="test_IEEE_example_3",f_hz=60.0) b1 = create_bus(net, vn_kv=380, name='b1_hv', type='n') b2 = create_bus(net, vn_kv=380, name='b10', type='n') diff --git a/pandapower/test/networks/test_kerber_networks.py b/pandapower/test/networks/test_kerber_networks.py index 40e48a08e..e220974db 100644 --- a/pandapower/test/networks/test_kerber_networks.py +++ b/pandapower/test/networks/test_kerber_networks.py @@ -8,7 +8,8 @@ import pytest -from pandapower.create import create_empty_network, create_bus +from pandapower.create import create_bus +from pandapower.network import pandapowerNet from pandapower.networks.kerber_networks import ( _create_empty_network_with_transformer, _add_lines_and_loads, @@ -41,7 +42,7 @@ def test_create_empty_network_with_transformer(): def test_add_lines_and_loads(): # BUILD: - pd_net = create_empty_network() + pd_net = pandapowerNet(name="test_add_lines_and_loads") busnr1 = create_bus(pd_net, name="startbus", vn_kv=0.4) n_lines_add = int(10.0 * rd.random() + 1) l_per_line = 0.10 * rd.random() @@ -64,7 +65,7 @@ def test_add_lines_and_loads(): def test_add_lines_with_branched_loads(): # BUILD: - pd_net = create_empty_network() + pd_net = pandapowerNet(name="test_add_lines_with_branched_loads") busnr1 = create_bus(pd_net, name="startbus", vn_kv=0.4) n_lines_add = int(10.0 * rd.random() + 1) l_per_line = 0.10 * rd.random() diff --git a/pandapower/test/opf/test_basic.py b/pandapower/test/opf/test_basic.py index 6d0650362..ca25f9609 100644 --- a/pandapower/test/opf/test_basic.py +++ b/pandapower/test/opf/test_basic.py @@ -10,9 +10,12 @@ from copy import deepcopy from pandapower.auxiliary import OPFNotConverged from pandapower.convert_format import convert_format -from pandapower.create import create_empty_network, create_bus, create_gen, create_ext_grid, create_load, \ - create_poly_cost, create_line_from_parameters, create_transformer3w_from_parameters, create_line, create_sgen, \ - create_transformer_from_parameters, create_transformer3w, create_pwl_cost, create_storage +from pandapower.create import ( + create_bus, create_gen, create_ext_grid, create_load, create_poly_cost, create_line_from_parameters, + create_transformer3w_from_parameters, create_line, create_sgen, create_transformer_from_parameters, + create_transformer3w, create_pwl_cost, create_storage +) +from pandapower.network import pandapowerNet from pandapower.networks import simple_four_bus_system from pandapower.run import runopp, rundcopp, runpp from pandapower.test.helper_functions import add_grid_connection @@ -28,7 +31,7 @@ def simplest_grid(): vm_min = 0.95 # create net - net = create_empty_network() + net = pandapowerNet(name="simplest_grid") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) create_gen(net, 1, p_mw=0.1, controllable=True, min_p_mw=0.005, max_p_mw=0.15, @@ -45,7 +48,7 @@ def simplest_grid(): @pytest.fixture(scope='session') def net_3w_trafo_opf(): - net = create_empty_network() + net = pandapowerNet(name="net_3w_trafo_opf") # create buses bus1 = create_bus(net, vn_kv=220.) @@ -85,7 +88,7 @@ def net_3w_trafo_opf(): @pytest.fixture(scope='module') def simple_opf_test_net(): - net = create_empty_network() + net = pandapowerNet(name="simple_opf_test_net") create_bus(net, vn_kv=10.) create_bus(net, vn_kv=.4) create_gen(net, 1, p_mw=0.1, controllable=True, min_p_mw=0.005, max_p_mw=0.15, @@ -107,7 +110,7 @@ def test_convert_format(): vm_min = 0.95 # create net - net = create_empty_network() + net = pandapowerNet(name="test_convert_format") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) create_gen(net, 1, p_mw=0.1, controllable=True, min_p_mw=0.005, max_p_mw=0.15, @@ -209,7 +212,7 @@ def test_simplest_dispatch(): vm_min = 0.95 # create net - net = create_empty_network() + net = pandapowerNet(name="test_simplest_dispatch") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) create_gen(net, 1, p_mw=0.1, controllable=True, min_p_mw=0.005, max_p_mw=0.150, @@ -244,7 +247,7 @@ def test_opf_gen_voltage(): vm_min = 0.95 # ceate net - net = create_empty_network() + net = pandapowerNet(name="test_opf_gen_voltage") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) @@ -290,7 +293,7 @@ def test_opf_sgen_voltage(): vm_min = 0.96 # create net - net = create_empty_network() + net = pandapowerNet(name="test_opf_sgen_voltage") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) @@ -337,7 +340,7 @@ def test_opf_gen_loading(): max_line_loading = 11 # create net - net = create_empty_network() + net = pandapowerNet(name="test_opf_gen_loading") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) @@ -391,7 +394,7 @@ def test_opf_sgen_loading(): max_line_loading = 13 # create net - net = create_empty_network() + net = pandapowerNet(name="test_opf_sgen_loading") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) @@ -441,7 +444,7 @@ def test_unconstrained_line(): vm_min = 0.95 # create net - net = create_empty_network() + net = pandapowerNet(name="test_unconstrained_line") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) create_gen(net, 1, p_mw=0.1, controllable=True, min_p_mw=0.005, max_p_mw=0.15, @@ -466,7 +469,7 @@ def test_unconstrained_line(): def test_trafo3w_loading(): - net = create_empty_network() + net = pandapowerNet(name="test_trafo3w_loading") _, b2, _ = add_grid_connection(net, vn_kv=110.) b3 = create_bus(net, vn_kv=20.) b4 = create_bus(net, vn_kv=10.) @@ -572,7 +575,7 @@ def test_opf_varying_max_line_loading(): max_trafo_loading = 800 # create net - net = create_empty_network() + net = pandapowerNet(name="test_opf_varying_max_line_loading") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) @@ -625,7 +628,7 @@ def test_storage_opf(): max_line_loading_percent = 100 # create network - net = create_empty_network() + net = pandapowerNet(name="test_storage_opf") b1 = create_bus(net, vn_kv=0.4, max_vm_pu=vm_max, min_vm_pu=vm_min) b2 = create_bus(net, vn_kv=0.4, max_vm_pu=vm_max, min_vm_pu=vm_min) @@ -731,7 +734,7 @@ def test_in_service_controllables(): max_line_loading_percent = 100 # create network - net = create_empty_network() + net = pandapowerNet(name="test_in_service_controllables") b1 = create_bus(net, vn_kv=0.4, max_vm_pu=vm_max, min_vm_pu=vm_min) b2 = create_bus(net, vn_kv=0.4, max_vm_pu=vm_max, min_vm_pu=vm_min) @@ -794,7 +797,7 @@ def test_opf_no_controllables_vs_pf(): max_line_loading_percent = 100 # create network - net = create_empty_network() + net = pandapowerNet(name="test_opf_no_controllables_vs_pf") b1 = create_bus(net, vn_kv=0.4, max_vm_pu=vm_max, min_vm_pu=vm_min) b2 = create_bus(net, vn_kv=0.4, max_vm_pu=vm_max, min_vm_pu=vm_min) diff --git a/pandapower/test/opf/test_check_opf_data.py b/pandapower/test/opf/test_check_opf_data.py index d1b5247f4..55fb39edf 100644 --- a/pandapower/test/opf/test_check_opf_data.py +++ b/pandapower/test/opf/test_check_opf_data.py @@ -3,7 +3,6 @@ from pandapower.create import ( create_bus, - create_empty_network, create_buses, create_transformer, create_line, @@ -13,6 +12,7 @@ create_gen, create_sgen, ) +from pandapower.network import pandapowerNet from pandapower.opf.validate_opf_input import _check_necessary_opf_parameters import logging @@ -21,7 +21,7 @@ def _opf_net(): - net = create_empty_network() + net = pandapowerNet(name="_opf_net") create_bus(net, 20, min_vm_pu=0.85, max_vm_pu=1.15) create_buses(net, 3, 0.4, min_vm_pu=0.85, max_vm_pu=1.15) create_transformer(net, 0, 1, "0.25 MVA 20/0.4 kV") diff --git a/pandapower/test/opf/test_cost_consistency.py b/pandapower/test/opf/test_cost_consistency.py index 2adce0030..a34d47803 100644 --- a/pandapower/test/opf/test_cost_consistency.py +++ b/pandapower/test/opf/test_cost_consistency.py @@ -1,22 +1,25 @@ import pytest from numpy import isclose -from pandapower.create import create_empty_network, create_bus, create_ext_grid, create_line_from_parameters, \ - create_load, create_sgen, create_pwl_cost, create_poly_cost, create_gen +from pandapower.create import ( + create_bus, create_ext_grid, create_line_from_parameters, create_load, create_gen, create_sgen, create_pwl_cost, + create_poly_cost +) +from pandapower.network import pandapowerNet from pandapower.run import runpp, runopp @pytest.fixture() def base_net(): - net = create_empty_network() + net = pandapowerNet(name="base_net") create_bus(net, vn_kv=10) create_bus(net, vn_kv=10) create_ext_grid(net, 0) create_load(net, 1, p_mw=0.2, controllable=False) - create_line_from_parameters(net, 0, 1, 50, name="line", r_ohm_per_km=0.876, - c_nf_per_km=260.0, max_i_ka=0.123, x_ohm_per_km=0.1159876, - max_loading_percent=100 * 690) - + create_line_from_parameters( + net, 0, 1, 50, name="line", r_ohm_per_km=0.876, c_nf_per_km=260.0, max_i_ka=0.123, + x_ohm_per_km=0.1159876, max_loading_percent=100 * 690 + ) runpp(net) return net diff --git a/pandapower/test/opf/test_costs_mixed.py b/pandapower/test/opf/test_costs_mixed.py index b6d7dc8cd..e67e91aae 100644 --- a/pandapower/test/opf/test_costs_mixed.py +++ b/pandapower/test/opf/test_costs_mixed.py @@ -6,8 +6,10 @@ import numpy as np import pytest -from pandapower.create import create_empty_network, create_bus, create_ext_grid, create_line_from_parameters, \ - create_gen, create_load, create_pwl_cost, create_poly_cost +from pandapower.create import ( + create_bus, create_ext_grid, create_line_from_parameters, create_gen, create_load, create_pwl_cost, create_poly_cost +) +from pandapower.network import pandapowerNet from pandapower.run import runopp import logging @@ -20,7 +22,7 @@ def test_cost_mixed(): vm_min = 0.95 # create net - net = create_empty_network() + net = pandapowerNet(name="test_cost_mixed") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) create_gen(net, 1, p_mw=-0.1, controllable=True, min_p_mw=0.005, max_p_mw=0.15, max_q_mvar=.05, @@ -69,7 +71,7 @@ def test_mixed_p_q_pol(): vm_min = 0.95 # create net - net = create_empty_network() + net = pandapowerNet(name="test_mixed_p_q_pol") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) create_gen(net, 1, p_mw=0.1, controllable=True, min_p_mw=0.005, max_p_mw=0.15, max_q_mvar=.05, @@ -93,7 +95,7 @@ def test_mixed_p_q_pwl(): vm_min = 0.95 # create net - net = create_empty_network() + net = pandapowerNet(name="test_mixed_p_q_pwl") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) create_gen(net, 1, p_mw=0.1, controllable=True, min_p_mw=0.005, max_p_mw=0.15, diff --git a/pandapower/test/opf/test_costs_pol.py b/pandapower/test/opf/test_costs_pol.py index 006d3182a..7981383e5 100644 --- a/pandapower/test/opf/test_costs_pol.py +++ b/pandapower/test/opf/test_costs_pol.py @@ -6,8 +6,10 @@ import numpy as np import pytest -from pandapower.create import create_empty_network, create_bus, create_gen, create_ext_grid, create_load, \ - create_line_from_parameters, create_poly_cost, create_sgen +from pandapower.create import ( + create_bus, create_gen, create_ext_grid, create_load, create_line_from_parameters, create_poly_cost, create_sgen +) +from pandapower.network import pandapowerNet from pandapower.run import runopp import logging @@ -21,7 +23,7 @@ def test_cost_pol_gen(): vm_min = 0.95 # create net - net = create_empty_network() + net = pandapowerNet(name="test_cost_pol_gen") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) create_gen(net, 1, p_mw=0.1, controllable=True, min_p_mw=0.005, max_p_mw=0.15, max_q_mvar=0.05, @@ -56,7 +58,7 @@ def test_cost_pol_all_elements(): vm_min = 0.95 # create net - net = create_empty_network() + net = pandapowerNet(name="test_cost_pol_all_elements") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) create_gen(net, 1, p_mw=0.1, controllable=True, min_p_mw=0.005, max_p_mw=0.15, max_q_mvar=0.05, @@ -94,7 +96,7 @@ def test_cost_pol_q(): vm_min = 0.95 # create net - net = create_empty_network() + net = pandapowerNet(name="test_cost_pol_q") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) create_sgen(net, 1, p_mw=0.1, controllable=True, min_p_mw=0.005, max_p_mw=0.15, max_q_mvar=0.05, diff --git a/pandapower/test/opf/test_costs_pwl.py b/pandapower/test/opf/test_costs_pwl.py index 8b8015dc6..2b04e9687 100644 --- a/pandapower/test/opf/test_costs_pwl.py +++ b/pandapower/test/opf/test_costs_pwl.py @@ -7,8 +7,10 @@ import numpy as np import pytest -from pandapower.create import create_empty_network, create_bus, create_gen, create_ext_grid, create_load, \ - create_line_from_parameters, create_pwl_cost, create_sgen +from pandapower.create import ( + create_bus, create_gen, create_ext_grid, create_load, create_line_from_parameters, create_pwl_cost, create_sgen +) +from pandapower.network import pandapowerNet from pandapower.run import runopp import logging @@ -22,7 +24,7 @@ def test_cost_piecewise_linear_gen(): vm_min = 0.95 # create net - net = create_empty_network() + net = pandapowerNet(name="test_cost_piecewise_linear_gen") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) create_gen(net, 1, p_mw=0.1, controllable=True, min_p_mw=0.05, max_p_mw=0.15, max_q_mvar=0.05, @@ -50,7 +52,7 @@ def test_cost_piecewise_linear_eg(): vm_min = 0.95 # create net - net = create_empty_network() + net = pandapowerNet(name="test_cost_piecewise_linear_eg") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10) create_ext_grid(net, 0, min_p_mw=0, max_p_mw=0.050) @@ -78,7 +80,7 @@ def test_get_costs(): vm_min = 0.95 # create net - net = create_empty_network() + net = pandapowerNet(name="test_get_costs") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) create_gen(net, 1, p_mw=0.1, controllable=True, min_p_mw=0.05, max_p_mw=0.15, max_q_mvar=0.05, @@ -108,7 +110,7 @@ def test_cost_piecewise_linear_sgen(): vm_min = 0.95 # create net - net = create_empty_network() + net = pandapowerNet(name="test_cost_piecewise_linear_sgen") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) create_sgen(net, 1, p_mw=0.1, controllable=True, min_p_mw=0.05, max_p_mw=0.15, max_q_mvar=0.05, @@ -137,7 +139,7 @@ def test_cost_piecewise_linear_load(): vm_min = 0.95 # create net - net = create_empty_network() + net = pandapowerNet(name="test_cost_piecewise_linear_load") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) create_load(net, 1, p_mw=0.1, controllable=True, max_p_mw=0.15, min_p_mw=0.050, max_q_mvar=0, @@ -164,7 +166,7 @@ def test_cost_piecewise_linear_sgen_uneven_slopes(): vm_min = 0.95 # create net - net = create_empty_network() + net = pandapowerNet(name="test_cost_piecewise_linear_sgen_uneven_slopes") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) create_sgen(net, 1, p_mw=0.1, controllable=True, min_p_mw=0.05, max_p_mw=0.15, max_q_mvar=0.05, @@ -192,7 +194,7 @@ def test_cost_piecewise_linear_load_uneven_slopes(): vm_min = 0.95 # create net - net = create_empty_network() + net = pandapowerNet(name="test_cost_piecewise_linear_load_uneven_slopes") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) create_load(net, 1, p_mw=0.050) @@ -221,7 +223,7 @@ def test_cost_piecewise_linear_sgen_very_unsteady_slopes(): vm_min = 0.5 # create net - net = create_empty_network() + net = pandapowerNet(name="test_cost_piecewise_linear_sgen_very_unsteady_slopes") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) create_sgen(net, 1, p_mw=0.10, controllable=True, min_p_mw=0, max_p_mw=1.50, diff --git a/pandapower/test/opf/test_costs_pwl_q.py b/pandapower/test/opf/test_costs_pwl_q.py index edbb27ff0..b198a95e0 100644 --- a/pandapower/test/opf/test_costs_pwl_q.py +++ b/pandapower/test/opf/test_costs_pwl_q.py @@ -3,8 +3,10 @@ import numpy as np import pytest -from pandapower.create import create_empty_network, create_bus, create_sgen, create_ext_grid, create_load, \ - create_line_from_parameters, create_pwl_cost +from pandapower.create import ( + create_bus, create_sgen, create_ext_grid, create_load, create_line_from_parameters, create_pwl_cost +) +from pandapower.network import pandapowerNet from pandapower.run import runopp @@ -14,7 +16,7 @@ def test_3point_pwl(): vm_min = 0.95 # create net - net = create_empty_network() + net = pandapowerNet(name="test_3point_pwl") create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=10.) create_bus(net, max_vm_pu=vm_max, min_vm_pu=vm_min, vn_kv=.4) create_sgen(net, 1, p_mw=0.1, q_mvar=0, controllable=True, min_p_mw=0.1, max_p_mw=0.15, diff --git a/pandapower/test/opf/test_curtailment.py b/pandapower/test/opf/test_curtailment.py index cc11e8495..a4bbdc970 100644 --- a/pandapower/test/opf/test_curtailment.py +++ b/pandapower/test/opf/test_curtailment.py @@ -7,8 +7,10 @@ import pytest from numpy import allclose, all -from pandapower.create import create_empty_network, create_bus, create_transformer, create_line, create_load, \ - create_ext_grid, create_gen, create_poly_cost +from pandapower.create import ( + create_bus, create_transformer, create_line, create_load, create_ext_grid, create_gen, create_poly_cost +) +from pandapower.network import pandapowerNet from pandapower.run import runopp import logging @@ -17,7 +19,7 @@ def test_minimize_active_power_curtailment(): - net = create_empty_network() + net = pandapowerNet(name="test_minimize_active_power_curtailment") # create buses bus1 = create_bus(net, vn_kv=220.) diff --git a/pandapower/test/opf/test_dcline.py b/pandapower/test/opf/test_dcline.py index 1fd3af692..0d04d65a1 100644 --- a/pandapower/test/opf/test_dcline.py +++ b/pandapower/test/opf/test_dcline.py @@ -7,8 +7,10 @@ from numpy import array, allclose, isclose from pandapower.auxiliary import OPFNotConverged -from pandapower.create import create_empty_network, create_bus, create_ext_grid, create_line, create_dcline, \ - create_load, create_pwl_cost, create_poly_cost +from pandapower.create import ( + create_bus, create_ext_grid, create_line, create_dcline, create_load, create_pwl_cost, create_poly_cost +) +from pandapower.network import pandapowerNet from pandapower.run import runopp, runpp from pandapower.test.consistency_checks import consistency_checks @@ -19,7 +21,7 @@ @pytest.fixture def dcline_net(): - net = create_empty_network() + net = pandapowerNet(name="dcline_net") b5 = create_bus(net, 380) b3 = create_bus(net, 380) diff --git a/pandapower/test/opf/test_pandamodels_runpm.py b/pandapower/test/opf/test_pandamodels_runpm.py index f3610b23d..354f72cca 100644 --- a/pandapower/test/opf/test_pandamodels_runpm.py +++ b/pandapower/test/opf/test_pandamodels_runpm.py @@ -15,12 +15,15 @@ from pandapower.control import ConstControl from pandapower.converter.pandamodels import convert_pp_to_pm from pandapower.converter.pandamodels.to_pm import init_ne_line -from pandapower.create import create_storage, create_shunt, create_pwl_cost, create_poly_cost, create_empty_network, \ - create_bus, create_line, create_gen, create_load, create_transformer3w_from_parameters, create_sgen, \ - create_transformer3w +from pandapower.create import ( + create_storage, create_shunt, create_pwl_cost, create_poly_cost, create_bus, create_line, create_gen, create_load, + create_transformer3w_from_parameters, create_sgen, create_transformer3w +) +from pandapower.network import pandapowerNet from pandapower.networks.cigre_networks import create_cigre_network_mv -from pandapower.networks.power_system_test_cases import case5, case9, case14, case30, case39, case57, case118, \ - case145, case300 +from pandapower.networks.power_system_test_cases import ( + case5, case9, case14, case30, case39, case57, case118, case145, case300 +) from pandapower.networks.simple_pandapower_test_networks import simple_four_bus_system from pandapower.opf.pm_storage import read_pm_storage_results from pandapower.run import rundcpp, runpp @@ -233,7 +236,7 @@ def test_compare_pwl_and_poly(net_3w_trafo_opf): @pytest.mark.slow @pytest.mark.skipif(not julia_installed, reason="requires julia installation") def test_pwl(): - net = create_empty_network() + net = pandapowerNet(name="test_pwl") # create buses bus1 = create_bus(net, vn_kv=110., min_vm_pu=0.9, max_vm_pu=1.1) @@ -292,7 +295,7 @@ def test_pwl(): @pytest.mark.slow @pytest.mark.skipif(not julia_installed, reason="requires julia installation") def test_without_ext_grid(): - net = create_empty_network() + net = pandapowerNet(name="test_without_ext_grid") min_vm_pu = 0.95 max_vm_pu = 1.05 @@ -358,7 +361,7 @@ def test_without_ext_grid(): @pytest.mark.slow @pytest.mark.skipif(not julia_installed, reason="requires julia installation") def test_multiple_ext_grids(): - net = create_empty_network() + net = pandapowerNet(name="test_multiple_ext_grids") # generate three ext grids _, b12, _ = add_grid_connection(net, vn_kv=110.) _, b22, _ = add_grid_connection(net, vn_kv=110.) @@ -387,7 +390,7 @@ def test_multiple_ext_grids(): @pytest.mark.slow @pytest.mark.skipif(not julia_installed, reason="requires julia installation") def test_voltage_angles(): - net = create_empty_network() + net = pandapowerNet(name="test_voltage_angles") b1, b2, _ = add_grid_connection(net, vn_kv=110.) b3 = create_bus(net, vn_kv=20.) b4 = create_bus(net, vn_kv=10.) @@ -425,7 +428,7 @@ def test_voltage_angles(): def tnep_grid(): - net = create_empty_network() + net = pandapowerNet(name="tnep_grid") min_vm_pu = 0.95 max_vm_pu = 1.05 diff --git a/pandapower/test/plotting/test_geo.py b/pandapower/test/plotting/test_geo.py index 41b794f68..757820134 100644 --- a/pandapower/test/plotting/test_geo.py +++ b/pandapower/test/plotting/test_geo.py @@ -12,6 +12,8 @@ import pytest from pandas.testing import assert_frame_equal, assert_index_equal +from pandapower.network import pandapowerNet +from pandapower.create import create_bus, create_line from pandapower.networks.mv_oberrhein import mv_oberrhein from pandapower.plotting.geo import _node_geometries_from_geodata, _branch_geometries_from_geodata, \ _transform_node_geometry_to_geodata, _transform_branch_geometry_to_coords, _convert_xy_epsg, \ @@ -314,12 +316,8 @@ def test_dump_to_geojson(): def test_convert_geodata_to_geojson(): - pytest.importorskip("geojson") - pytest.importorskip("pandapower") - import geojson - from pandapower.create import create_empty_network, create_bus, create_line # Erstelle ein Beispielnetzwerk - _net = create_empty_network() + _net = pandapowerNet(name="test_convert_geodata_to_geojson") # Füge Busse hinzu create_bus(_net, 0, geodata=(10, 20)) diff --git a/pandapower/test/protection/test_fuse.py b/pandapower/test/protection/test_fuse.py index 192ebd6c0..589bb6813 100644 --- a/pandapower/test/protection/test_fuse.py +++ b/pandapower/test/protection/test_fuse.py @@ -3,10 +3,12 @@ import numpy as np import pytest -from pandapower.create import create_empty_network, create_buses, create_ext_grid, create_lines_from_parameters, \ - create_transformer, create_switch, create_switches, create_load, create_bus, create_sgen, create_gen, create_line, \ - create_shunt, create_lines, create_loads +from pandapower.create import ( + create_buses, create_ext_grid, create_lines_from_parameters, create_transformer, create_switch, create_switches, + create_load, create_bus, create_sgen, create_gen, create_line, create_shunt, create_lines, create_loads +) from pandapower.file_io import from_json_string, to_json +from pandapower.network import pandapowerNet from pandapower.networks.create_examples import example_simple from pandapower.protection.protection_devices.fuse import Fuse from pandapower.protection.run_protection import calculate_protection_times @@ -276,7 +278,7 @@ def test_json_fuse(): def fuse_test_net3(): # network with transformer to test HV fuse curve_select - net = create_empty_network() + net = pandapowerNet(name="fuse_test_net3") # create buses create_buses(net, nr_buses=5, vn_kv=[20, 0.4, 0.4, 0.4, 0.4], index=[0, 1, 2, 3, 4], name=None, type="n", geodata=[(0, 0), (0, -2), (0, -4), (0, -6), (0, -8)]) @@ -338,7 +340,7 @@ def fuse_test_net2(): # network with transformer to test HV fuse curve_select # load switch (index 4) is configured as bus-bus - net = create_empty_network() + net = pandapowerNet(name="fuse_test_net2") # create buses create_buses(net, nr_buses=4, vn_kv=[20, 0.4, 0.4, 0.4], index=[0, 1, 2, 3], name=None, type="n", @@ -372,7 +374,7 @@ def modified_simple_net(): # modify simple network from create_examples.py to include resistance values for switches # this should hopefully the NaN issue during power flow and short circuit calculations - net = create_empty_network() + net = pandapowerNet(name="modified_simple_net") # create buses bus1 = create_bus(net, name="HV Busbar", vn_kv=110., type="b") @@ -430,7 +432,7 @@ def modified_simple_net(): def fuse_test_net4(): # test network to demonstrate overcurrent protection in tutorial - net = create_empty_network() + net = pandapowerNet(name="fuse_test_net4") # create buses create_buses(net, nr_buses=9, vn_kv=[20, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4], diff --git a/pandapower/test/protection/test_oc_relay.py b/pandapower/test/protection/test_oc_relay.py index 89c368f0f..00b9c9594 100644 --- a/pandapower/test/protection/test_oc_relay.py +++ b/pandapower/test/protection/test_oc_relay.py @@ -1,8 +1,8 @@ import numpy as np import pytest -from pandapower.create import create_empty_network, create_buses, create_ext_grid, create_lines, create_switches, \ - create_loads +from pandapower.create import create_buses, create_ext_grid, create_lines, create_switches, create_loads +from pandapower.network import pandapowerNet from pandapower.protection.protection_devices.ocrelay import OCRelay from pandapower.protection.run_protection import calculate_protection_times from pandapower.protection.utility_functions import create_sc_bus @@ -120,7 +120,7 @@ def test_plot_tripped_grid_protection_device(): def oc_relay_net(): # create an empty network - net = create_empty_network() + net = pandapowerNet(name="oc_relay_net") # create buses create_buses(net, nr_buses=7, vn_kv=20, index=[0, 1, 2, 3, 4, 5, 6], name=None, type="n", diff --git a/pandapower/test/shortcircuit/test_1ph.py b/pandapower/test/shortcircuit/test_1ph.py index bf9e85fd5..105919206 100644 --- a/pandapower/test/shortcircuit/test_1ph.py +++ b/pandapower/test/shortcircuit/test_1ph.py @@ -10,10 +10,12 @@ from pandapower import pp_dir from pandapower.auxiliary import get_free_id -from pandapower.create import create_bus, create_ext_grid, create_line, create_transformer, create_empty_network, \ - create_switch, create_transformer3w_from_parameters, create_line_from_parameters, create_gen, \ - create_transformer_from_parameters, create_buses, create_impedance +from pandapower.create import ( + create_bus, create_ext_grid, create_line, create_transformer, create_switch, create_transformer3w_from_parameters, + create_line_from_parameters, create_gen, create_transformer_from_parameters, create_buses, create_impedance +) from pandapower.file_io import from_json +from pandapower.network import pandapowerNet from pandapower.shortcircuit.calc_sc import calc_sc from pandapower.std_types import create_std_type, add_zero_impedance_parameters @@ -73,7 +75,7 @@ def test_1ph_shortcircuit(): } for vc, result in results.items(): - net = create_empty_network(sn_mva=17) + net = pandapowerNet(name=f"test_1ph_shortcircuit {vc}", sn_mva=17) add_network(net, vc) try: calc_sc(net, fault="1ph", case="max") @@ -132,7 +134,7 @@ def test_1ph_shortcircuit_min(): for inv_y in (False, True): for vc, result in results.items(): - net = create_empty_network(sn_mva=16) + net = pandapowerNet(name=f"test_1ph_shortcircuit_min {inv_y} {vc}", sn_mva=16) add_network(net, vc) try: calc_sc(net, fault="1ph", case="min", inverse_y=inv_y) @@ -177,12 +179,12 @@ def test_iec60909_example_4_bus_selection_br_res(inverse_y): @pytest.mark.parametrize("inverse_y", (True, False), ids=("Inverse Y", "LU factorization")) def test_1ph_with_switches(inverse_y): - net = create_empty_network(sn_mva=67) + net = pandapowerNet(name="test_1ph_with_switches", sn_mva=67) vc = "Yy" l1, l2, _ = add_network(net, vc) calc_sc(net, fault="1ph", case="max", inverse_y=inverse_y) create_line(net, net.line.to_bus.at[l2], net.line.from_bus.at[l1], length_km=15, std_type="unsymmetric_line_type", - parallel=2.) + parallel=2) add_zero_impedance_parameters(net) create_switch(net, bus=net.line.to_bus.at[l2], element=l2, et="l", closed=False) calc_sc(net, fault="1ph", case="max") @@ -190,7 +192,7 @@ def test_1ph_with_switches(inverse_y): def single_3w_trafo_grid(vector_group, sn_mva=123): - net = create_empty_network(sn_mva=sn_mva) + net = pandapowerNet(name="single_3w_trafo_grid", sn_mva=sn_mva) b1 = create_bus(net, vn_kv=380., geodata=(1, 1)) b2 = create_bus(net, vn_kv=110., geodata=(0, 1)) b3 = create_bus(net, vn_kv=30., geodata=(1, 0)) @@ -207,7 +209,7 @@ def single_3w_trafo_grid(vector_group, sn_mva=123): def iec_60909_4_small(n_t3=1, num_earth=1, with_gen=False): - net = create_empty_network(sn_mva=3) + net = pandapowerNet(name="iec_60909_4_small", sn_mva=3) b1 = create_bus(net, vn_kv=380.) b2 = create_bus(net, vn_kv=110.) @@ -266,7 +268,7 @@ def iec_60909_4_small(n_t3=1, num_earth=1, with_gen=False): def iec_60909_4_t1(): - net = create_empty_network(sn_mva=26) + net = pandapowerNet(name="iec_60909_4_t1", sn_mva=26) create_bus(net, vn_kv=110.) create_bus(net, vn_kv=20.) @@ -280,7 +282,7 @@ def iec_60909_4_t1(): def vde_232(): - net = create_empty_network(sn_mva=12) + net = pandapowerNet(name="vde_232", sn_mva=12) # hv buses create_bus(net, 110, geodata=(0, 0)) create_bus(net, 21, geodata=(1, 0)) @@ -407,12 +409,12 @@ def test_t1_iec60909_4(): def test_1ph_sn_mva_ext_grid(): - net1 = create_empty_network(sn_mva=1) + net1 = pandapowerNet(name="test_1ph_sn_mva_ext_grid 0", sn_mva=1) b1 = create_bus(net1, 110) create_ext_grid(net1, b1, s_sc_max_mva=1000, s_sc_min_mva=800, rx_max=0.1, x0x_max=1, r0x0_max=0.1, rx_min=0.1, x0x_min=1, r0x0_min=0.1) - net2 = create_empty_network(sn_mva=17) + net2 = pandapowerNet(name="test_1ph_sn_mva_ext_grid 1", sn_mva=17) b1 = create_bus(net2, 110) create_ext_grid(net2, b1, s_sc_max_mva=1000, s_sc_min_mva=800, rx_max=0.1, x0x_max=1, r0x0_max=0.1, rx_min=0.1, x0x_min=1, r0x0_min=0.1) @@ -429,7 +431,7 @@ def test_1ph_sn_mva_ext_grid(): def test_line(): - net = create_empty_network(sn_mva=17) + net = pandapowerNet(name="test_line", sn_mva=17) b1 = create_bus(net, 110) create_ext_grid(net, b1, s_sc_max_mva=1000, s_sc_min_mva=800, rx_max=0.1, x0x_max=1, r0x0_max=0.1, rx_min=0.1, x0x_min=1, r0x0_min=0.1) @@ -452,7 +454,7 @@ def test_trafo(): "YNyn": [5.265737, 14.413729]} for vc in results.keys(): - net = create_empty_network(sn_mva=1) + net = pandapowerNet(name=f"test_trafo {vc}", sn_mva=1) create_bus(net, vn_kv=110.) create_bus(net, vn_kv=20.) @@ -473,7 +475,7 @@ def test_trafo(): def test_sc_1ph_impedance(): - net = create_empty_network() + net = pandapowerNet(name="test_sc_1ph_impedance") create_buses(net, 2, 110) create_ext_grid(net, 0, s_sc_max_mva=1000, s_sc_min_mva=800, rx_max=0.1, x0x_max=1, r0x0_max=0.1, rx_min=0.1, x0x_min=1, r0x0_min=0.1) diff --git a/pandapower/test/shortcircuit/test_all_currents.py b/pandapower/test/shortcircuit/test_all_currents.py index 350098e9d..db8d430e1 100644 --- a/pandapower/test/shortcircuit/test_all_currents.py +++ b/pandapower/test/shortcircuit/test_all_currents.py @@ -7,9 +7,12 @@ import numpy as np import pytest -from pandapower.create import create_empty_network, create_bus, create_ext_grid, create_line, create_sgen, \ - create_transformer_from_parameters, create_transformers_from_parameters, create_line_from_parameters, create_buses, \ - create_lines_from_parameters, create_switch, create_load, create_shunt, create_ward, create_xward +from pandapower.create import ( + create_bus, create_ext_grid, create_line, create_sgen, create_switch, create_transformer_from_parameters, + create_transformers_from_parameters, create_line_from_parameters, create_buses, create_lines_from_parameters, + create_load, create_shunt, create_ward, create_xward +) +from pandapower.network import pandapowerNet from pandapower.pypower.idx_brch import F_BUS, T_BUS, TAP, BR_R, BR_X from pandapower.pypower.idx_bus_sc import IKSS1, PHI_IKSS1_DEGREE from pandapower.run import runpp @@ -17,7 +20,7 @@ def three_bus_example(): - net = create_empty_network(sn_mva=56) + net = pandapowerNet(name="three_bus_example", sn_mva=56) b1 = create_bus(net, 110) b2 = create_bus(net, 110) b3 = create_bus(net, 110) @@ -42,7 +45,7 @@ def three_bus_example(): def three_bus_permuted_index(): - net = create_empty_network(sn_mva=67) + net = pandapowerNet(name="three_bus_permuted_index", sn_mva=67) b1 = create_bus(net, 110, index=4) b2 = create_bus(net, 110, index=3) b3 = create_bus(net, 110, index=0) @@ -57,7 +60,7 @@ def three_bus_permuted_index(): # def gen_three_bus_example(): -# net = create_empty_network(sn_mva=2) +# net = pandapowerNet(name="gen_three_bus_example", sn_mva=2) # b1 = create_bus(net, vn_kv=10.) # b2 = create_bus(net, vn_kv=10.) # b3 = create_bus(net, vn_kv=10.) @@ -74,7 +77,7 @@ def three_bus_permuted_index(): def net_transformer_simple(): - net = create_empty_network(sn_mva=2) + net = pandapowerNet(name="net_transformer_simple", sn_mva=2) b1 = create_bus(net, vn_kv=10.) b2 = create_bus(net, vn_kv=.4) create_ext_grid(net, b1, s_sc_max_mva=100., s_sc_min_mva=40., rx_min=0.1, rx_max=0.1) @@ -85,7 +88,7 @@ def net_transformer_simple(): def net_transformer_simple_2(): - net = create_empty_network(sn_mva=2) + net = pandapowerNet(name="net_transformer_simple_2", sn_mva=2) b1 = create_bus(net, vn_kv=10.) b1a = create_bus(net, vn_kv=10.) b2 = create_bus(net, vn_kv=.4) @@ -102,7 +105,7 @@ def net_transformer_simple_2(): def net_transformer_simple_3(): - net = create_empty_network(sn_mva=100) + net = pandapowerNet(name="net_transformer_simple_3", sn_mva=100) create_buses(net, 2, 30) create_buses(net, 3, 10) create_buses(net, 2, 0.4) @@ -139,7 +142,7 @@ def net_transformer_simple_4(): def net_transformer(): - net = create_empty_network(sn_mva=2) + net = pandapowerNet(name="net_transformer", sn_mva=2) b1a = create_bus(net, vn_kv=10.) b1b = create_bus(net, vn_kv=10.) b2 = create_bus(net, vn_kv=.4) @@ -520,7 +523,7 @@ def test_type_c_trafo_simple_other_voltage4_sgen(inverse_y): @pytest.mark.parametrize("inverse_y", (True, False), ids=("Inverse Y", "LU factorization")) def test_type_c_sgen_trafo4(inverse_y): - net = create_empty_network(sn_mva=100) + net = pandapowerNet(name="test_type_c_sgen_trafo4", sn_mva=100) create_buses(net, 2, 110) create_ext_grid(net, 0, s_sc_max_mva=100, s_sc_min_mva=80, rx_max=0.4, rx_min=0.4) create_line_from_parameters(net, 0, 1, 20, 0.0949, 0.38, 9.2, 0.74) @@ -546,7 +549,7 @@ def test_type_c_sgen_trafo4(inverse_y): @pytest.mark.parametrize("inverse_y", (True, False), ids=("Inverse Y", "LU factorization")) def test_load_type_c(inverse_y): - net = create_empty_network(sn_mva=100) + net = pandapowerNet(name="test_load_type_c", sn_mva=100) create_buses(net, 3, 110) create_ext_grid(net, 0, s_sc_max_mva=100, rx_max=0.1) create_line_from_parameters(net, 0, 1, 20, 0.0949, 0.38, 9.2, 0.74) @@ -622,7 +625,7 @@ def test_load_type_c(inverse_y): @pytest.mark.parametrize("inverse_y", (True, False), ids=("Inverse Y", "LU factorization")) def test_sgen_type_c(inverse_y): - net = create_empty_network(sn_mva=100) + net = pandapowerNet(name="test_sgen_type_c", sn_mva=100) create_buses(net, 3, 110) create_ext_grid(net, 0, s_sc_max_mva=100, rx_max=0.1, s_sc_min_mva=80, rx_min=0.4) create_line_from_parameters(net, 0, 1, 20, 0.0949, 0.38, 9.2, 0.74) @@ -708,7 +711,7 @@ def test_trafo_3w(): def test_trafo_impedance(): - net = create_empty_network(sn_mva=0.16) + net = pandapowerNet(name="test_trafo_impedance", sn_mva=0.16) create_bus(net, 20) create_buses(net, 2, 0.4) create_ext_grid(net, 0, s_sc_max_mva=346.4102, rx_max=0.1) @@ -766,7 +769,7 @@ def test_trafo_impedance(): @pytest.mark.parametrize("inverse_y", (True, False), ids=("Inverse Y", "LU factorization")) def test_one_line(inverse_y): - net = create_empty_network(sn_mva=1) + net = pandapowerNet(name="test_one_line", sn_mva=1) b1 = create_bus(net, vn_kv=10.) b2 = create_bus(net, vn_kv=10.) create_ext_grid(net, b1, s_sc_max_mva=100., s_sc_min_mva=40., rx_min=0.1, rx_max=0.1) @@ -787,7 +790,7 @@ def test_one_line(inverse_y): @pytest.mark.parametrize("inverse_y", (True, False), ids=("Inverse Y", "LU factorization")) def test_return_all_currents(inverse_y): - net = create_empty_network(sn_mva=1) + net = pandapowerNet(name="test_return_all_currents", sn_mva=1) b1 = create_bus(net, vn_kv=10.) b2 = create_bus(net, vn_kv=10.) create_ext_grid(net, b1, s_sc_max_mva=100., s_sc_min_mva=40., rx_min=0.1, rx_max=0.1) @@ -864,7 +867,7 @@ def test_against_single_sc_results_trafo(): def test_ward(): - net = create_empty_network(sn_mva=9) + net = pandapowerNet(name="test_ward", sn_mva=9) create_buses(net, 2, 110) create_ext_grid(net, 0, s_sc_max_mva=100, rx_max=0.1) create_line_from_parameters(net, 0, 1, 1, 0.5, 0.5, 0, 1000) @@ -879,7 +882,7 @@ def test_ward(): def test_xward(): - net = create_empty_network(sn_mva=4) + net = pandapowerNet(name="test_xward", sn_mva=4) create_buses(net, 2, 110) create_ext_grid(net, 0, s_sc_max_mva=100, rx_max=0.1) create_line_from_parameters(net, 0, 1, 1, 0.5, 0.5, 0, 1000) diff --git a/pandapower/test/shortcircuit/test_gen.py b/pandapower/test/shortcircuit/test_gen.py index 1704a3d56..f80469f3c 100644 --- a/pandapower/test/shortcircuit/test_gen.py +++ b/pandapower/test/shortcircuit/test_gen.py @@ -9,14 +9,14 @@ import pandas as pd import pytest -from pandapower.create import create_empty_network, create_bus, create_gen, create_line_from_parameters, create_switch, \ - create_ext_grid +from pandapower.create import create_bus, create_gen, create_line_from_parameters, create_switch, create_ext_grid +from pandapower.network import pandapowerNet from pandapower.shortcircuit.calc_sc import calc_sc @pytest.fixture def one_line_one_generator(): - net = create_empty_network(sn_mva=23) + net = pandapowerNet(name="one_line_one_generator", sn_mva=23) b1 = create_bus(net, vn_kv=10.) b2 = create_bus(net, vn_kv=10.) b3 = create_bus(net, vn_kv=10.) @@ -32,7 +32,7 @@ def one_line_one_generator(): @pytest.fixture def gen_three_bus_example(): - net = create_empty_network(sn_mva=12) + net = pandapowerNet(name="gen_three_bus_example", sn_mva=12) b1 = create_bus(net, vn_kv=10.) b2 = create_bus(net, vn_kv=10.) b3 = create_bus(net, vn_kv=10.) @@ -91,7 +91,7 @@ def test_max_gen_fault_impedance(one_line_one_generator): def test_gen_ext_grid_same_bus(): - net = create_empty_network() + net = pandapowerNet(name="test_gen_ext_grid_same_bus") b = create_bus(net, 110) net1 = copy.deepcopy(net) @@ -146,7 +146,7 @@ def test_gen_ext_grid_same_bus(): # # globals().update(vars) # # del vars, calc_sc # # WIP -# net = create_empty_network() +# net = pandapowerNet(name="test_close_to_gen_simple",) # b1, b2, b3, b4, b5 = create_buses(net, 5, 20) # # skss = np.sqrt(3) * 400 * 40 # we assume 40 kA sc current in the 400-kV EHV grid # # create_ext_grid(net, b1, s_sc_max_mva=skss, s_sc_min_mva=0.8 * skss, rx_min=0.2, rx_max=0.4) @@ -163,7 +163,7 @@ def test_gen_ext_grid_same_bus(): # def test_close_to_gen_simple2(): # # WIP -# net = create_empty_network() +# net = pandapowerNet(name="test_close_to_gen_simple2") # # b1, b2 = create_buses(net, 2, 110) # b1 = create_bus(net, 70) # # skss = np.sqrt(3) * 400 * 40 # we assume 40 kA sc current in the 400-kV EHV grid @@ -199,7 +199,7 @@ def test_gen_ext_grid_same_bus(): # calc_sc(net, tk_s=2.5e-2) # def test_power_station_unit(): -# net = create_empty_network() +# net = pandapowerNet(name="test_power_station_unit") # b1, b2, b3, b4 = create_buses(net, 4, 20) # b5 = create_bus(net, 10) diff --git a/pandapower/test/shortcircuit/test_iec60909_4.py b/pandapower/test/shortcircuit/test_iec60909_4.py index b229d1b37..e3505eb81 100644 --- a/pandapower/test/shortcircuit/test_iec60909_4.py +++ b/pandapower/test/shortcircuit/test_iec60909_4.py @@ -6,14 +6,17 @@ import numpy as np import pytest -from pandapower.create import create_empty_network, create_bus, create_ext_grid, create_transformer_from_parameters, \ - create_gen, create_transformer3w_from_parameters, create_line_from_parameters, create_xward, create_motor +from pandapower.create import ( + create_bus, create_ext_grid, create_transformer_from_parameters, create_gen, create_transformer3w_from_parameters, + create_line_from_parameters, create_xward, create_motor +) +from pandapower.network import pandapowerNet from pandapower.shortcircuit.calc_sc import calc_sc from pandapower.shortcircuit.toolbox import detect_power_station_unit, calc_sc_on_line def iec_60909_4(): - net = create_empty_network(sn_mva=34) + net = pandapowerNet(name="iec_60909_4", sn_mva=34) b1 = create_bus(net, vn_kv=380.) b2 = create_bus(net, vn_kv=110.) @@ -123,7 +126,7 @@ def iec_60909_4(): def iec_60909_4_small(with_xward=False): - net = create_empty_network(sn_mva=6) + net = pandapowerNet(name="iec_60909_4_small", sn_mva=6) b1 = create_bus(net, vn_kv=380.) b2 = create_bus(net, vn_kv=110.) @@ -182,7 +185,7 @@ def iec_60909_4_small(with_xward=False): def iec_60909_4_small_gen_only(): - net = create_empty_network(sn_mva=56) + net = pandapowerNet(name="iec_60909_4_small_gen_only", sn_mva=56) b3 = create_bus(net, vn_kv=110.) HG2 = create_bus(net, vn_kv=10) @@ -198,7 +201,7 @@ def iec_60909_4_small_gen_only(): def iec_60909_4_2gen(): - net = create_empty_network(sn_mva=12) + net = pandapowerNet(name="iec_60909_4_2gen", sn_mva=12) b3 = create_bus(net, vn_kv=110.) b4 = create_bus(net, vn_kv=110.) @@ -224,7 +227,7 @@ def iec_60909_4_2gen(): def vde_232(): - net = create_empty_network(sn_mva=13) + net = pandapowerNet(name="vde_232", sn_mva=13) # hv buses create_bus(net, 110) create_bus(net, 21) diff --git a/pandapower/test/shortcircuit/test_impedance.py b/pandapower/test/shortcircuit/test_impedance.py index 69a3d453a..0e3f86b33 100644 --- a/pandapower/test/shortcircuit/test_impedance.py +++ b/pandapower/test/shortcircuit/test_impedance.py @@ -6,13 +6,14 @@ import numpy as np import pytest -from pandapower.create import create_empty_network, create_bus, create_ext_grid, create_impedance +from pandapower.create import create_bus, create_ext_grid, create_impedance +from pandapower.network import pandapowerNet from pandapower.shortcircuit.calc_sc import calc_sc @pytest.fixture def impedance_net(): - net = create_empty_network(sn_mva=78) + net = pandapowerNet(name="impedance_net", sn_mva=78) b1 = create_bus(net, 220) b2 = create_bus(net, 30) create_ext_grid(net, b1, s_sc_max_mva=100., s_sc_min_mva=40., rx_min=0.1, rx_max=0.1) diff --git a/pandapower/test/shortcircuit/test_min_branch_results.py b/pandapower/test/shortcircuit/test_min_branch_results.py index 0181432ae..bef2486ad 100644 --- a/pandapower/test/shortcircuit/test_min_branch_results.py +++ b/pandapower/test/shortcircuit/test_min_branch_results.py @@ -5,12 +5,13 @@ import pytest -from pandapower.create import create_empty_network, create_bus, create_line, create_ext_grid, create_sgen +from pandapower.create import create_bus, create_line, create_ext_grid, create_sgen +from pandapower.network import pandapowerNet @pytest.fixture def feeder_network(): - net = create_empty_network(sn_mva=11) + net = pandapowerNet(name="feeder_network", sn_mva=11) b1 = create_bus(net, 110) b2 = create_bus(net, 110) b3 = create_bus(net, 110) diff --git a/pandapower/test/shortcircuit/test_motor.py b/pandapower/test/shortcircuit/test_motor.py index 738d08182..fc536ed64 100644 --- a/pandapower/test/shortcircuit/test_motor.py +++ b/pandapower/test/shortcircuit/test_motor.py @@ -7,14 +7,14 @@ import numpy as np import pytest -from pandapower.create import create_empty_network, create_bus, create_ext_grid, create_line_from_parameters, \ - create_motor +from pandapower.create import create_bus, create_ext_grid, create_line_from_parameters, create_motor +from pandapower.network import pandapowerNet from pandapower.shortcircuit.calc_sc import calc_sc @pytest.fixture def motor_net(): - net = create_empty_network(sn_mva=14) + net = pandapowerNet(name="motor_net", sn_mva=14) b1 = create_bus(net, vn_kv=0.4) b2 = create_bus(net, vn_kv=0.4) b3 = create_bus(net, vn_kv=0.4) @@ -81,8 +81,7 @@ def test_large_motor(motor_net): net = motor_net net.motor.pn_mech_mw = 10 calc_sc(net, case="max") - assert np.allclose(net.res_bus_sc.ikss_ka.values[:3], - [14.695869025, 103.16722971, 0.38693418116], rtol=1e-4) + assert np.allclose(net.res_bus_sc.ikss_ka.values[:3], [14.695869025, 103.16722971, 0.38693418116], rtol=1e-4) if __name__ == '__main__': diff --git a/pandapower/test/shortcircuit/test_ring.py b/pandapower/test/shortcircuit/test_ring.py index b288ac91f..67dda4ceb 100644 --- a/pandapower/test/shortcircuit/test_ring.py +++ b/pandapower/test/shortcircuit/test_ring.py @@ -6,13 +6,13 @@ import numpy as np import pytest -from pandapower.create import create_empty_network, create_bus, create_line, create_ext_grid, create_transformer, \ - create_switch +from pandapower.create import create_bus, create_line, create_ext_grid, create_transformer, create_switch +from pandapower.network import pandapowerNet from pandapower.shortcircuit.calc_sc import calc_sc def ring_network(): - net = create_empty_network(sn_mva=2.) + net = pandapowerNet(name="ring_network", sn_mva=2.) b0 = create_bus(net, 220) b1 = create_bus(net, 110) b2 = create_bus(net, 110) diff --git a/pandapower/test/shortcircuit/test_sc_multi_bus.py b/pandapower/test/shortcircuit/test_sc_multi_bus.py index 979bf308f..1ef2c0b75 100644 --- a/pandapower/test/shortcircuit/test_sc_multi_bus.py +++ b/pandapower/test/shortcircuit/test_sc_multi_bus.py @@ -6,15 +6,15 @@ import numpy as np import pytest -from pandapower.create import create_empty_network, create_bus, create_line, create_ext_grid, create_transformer, \ - create_sgen +from pandapower.create import create_bus, create_line, create_ext_grid, create_transformer, create_sgen +from pandapower.network import pandapowerNet from pandapower.shortcircuit.calc_sc import calc_sc from pandapower.test.shortcircuit.test_meshing_detection import meshed_grid @pytest.fixture def radial_grid(): - net = create_empty_network(sn_mva=2.) + net = pandapowerNet(name="radial_grid", sn_mva=2.) b0 = create_bus(net, 220) b1 = create_bus(net, 110) b2 = create_bus(net, 110) @@ -28,7 +28,7 @@ def radial_grid(): @pytest.fixture def three_bus_big_sgen_example(): - net = create_empty_network(sn_mva=3) + net = pandapowerNet(name="three_bus_big_sgen_example", sn_mva=3) b1 = create_bus(net, 110) b2 = create_bus(net, 110) b3 = create_bus(net, 110) diff --git a/pandapower/test/shortcircuit/test_sc_single_bus.py b/pandapower/test/shortcircuit/test_sc_single_bus.py index 0e728ab95..9ea880a2f 100644 --- a/pandapower/test/shortcircuit/test_sc_single_bus.py +++ b/pandapower/test/shortcircuit/test_sc_single_bus.py @@ -6,15 +6,15 @@ import numpy as np import pytest -from pandapower.create import create_empty_network, create_bus, create_ext_grid, create_line, create_transformer, \ - create_sgen +from pandapower.create import create_bus, create_ext_grid, create_line, create_transformer, create_sgen +from pandapower.network import pandapowerNet from pandapower.shortcircuit.calc_sc import calc_sc from pandapower.test.shortcircuit.test_meshing_detection import meshed_grid # @pytest.fixture def radial_grid(): - net = create_empty_network(sn_mva=2.) + net = pandapowerNet(name="radial_grid", sn_mva=2.) b0 = create_bus(net, 220) b1 = create_bus(net, 110) b2 = create_bus(net, 110) @@ -28,7 +28,7 @@ def radial_grid(): # @pytest.fixture def three_bus_big_sgen_example(): - net = create_empty_network(sn_mva=4) + net = pandapowerNet(name="three_bus_big_sgen_example", sn_mva=4) b1 = create_bus(net, 110) b2 = create_bus(net, 110) b3 = create_bus(net, 110) diff --git a/pandapower/test/shortcircuit/test_sc_voltage.py b/pandapower/test/shortcircuit/test_sc_voltage.py index 73bbe1f65..743890838 100644 --- a/pandapower/test/shortcircuit/test_sc_voltage.py +++ b/pandapower/test/shortcircuit/test_sc_voltage.py @@ -5,13 +5,14 @@ import numpy as np -from pandapower.create import create_empty_network, create_bus, create_line, create_ext_grid, create_sgen, create_gen +from pandapower.create import create_bus, create_line, create_ext_grid, create_sgen, create_gen +from pandapower.network import pandapowerNet from pandapower.shortcircuit.calc_sc import calc_sc from pandapower.test.shortcircuit.test_iec60909_4 import iec_60909_4 def simple_grid(): - net = create_empty_network(sn_mva=4) + net = pandapowerNet(name="simple_grid", sn_mva=4) b1 = create_bus(net, 110) b2 = create_bus(net, 110) b3 = create_bus(net, 110) @@ -123,7 +124,7 @@ def test_voltage_simple(): def test_voltage_very_simple(): - net = create_empty_network(sn_mva=12) + net = pandapowerNet(name="test_voltage_very_simple", sn_mva=12) b1 = create_bus(net, 110) b2 = create_bus(net, 110) create_ext_grid(net, b1, s_sc_max_mva=100., s_sc_min_mva=80., rx_min=0.4, rx_max=0.4) diff --git a/pandapower/test/shortcircuit/test_sgen.py b/pandapower/test/shortcircuit/test_sgen.py index af4de4068..29156dd47 100644 --- a/pandapower/test/shortcircuit/test_sgen.py +++ b/pandapower/test/shortcircuit/test_sgen.py @@ -6,15 +6,17 @@ import numpy as np import pytest -from pandapower.create import create_empty_network, create_bus, create_ext_grid, create_transformer, create_sgen, \ - create_buses, create_transformer_from_parameters, create_line_from_parameters, create_lines_from_parameters, \ - create_sgens, create_line +from pandapower.create import ( + create_bus, create_ext_grid, create_transformer, create_sgen, create_buses, create_transformer_from_parameters, + create_line_from_parameters, create_lines_from_parameters, create_sgens, create_line +) +from pandapower.network import pandapowerNet from pandapower.pypower.idx_brch import BR_R, BR_X from pandapower.shortcircuit.calc_sc import calc_sc def simplest_test_grid(generator_type, step_up_trafo=False): - net = create_empty_network(sn_mva=6) + net = pandapowerNet(name="simplest_test_grid", sn_mva=6) if step_up_trafo: b0 = create_bus(net, 20) b1 = create_bus(net, 0.4) @@ -37,7 +39,7 @@ def simplest_test_grid(generator_type, step_up_trafo=False): def wind_park_grid(case): - net = create_empty_network(sn_mva=7) + net = pandapowerNet(name="wind_park_grid", sn_mva=7) create_bus(net, 110, index=1) create_buses(net, 13, 20) @@ -74,7 +76,7 @@ def wind_park_grid(case): def wind_park_example(): - net = create_empty_network(sn_mva=8) + net = pandapowerNet(name="wind_park_example", sn_mva=8) b1 = create_bus(net, vn_kv=110., index=1) b2 = create_bus(net, vn_kv=110., index=2) b3 = create_bus(net, vn_kv=110., index=3) @@ -98,7 +100,7 @@ def wind_park_example(): def three_bus_example(): - net = create_empty_network(sn_mva=9) + net = pandapowerNet(name="three_bus_example", sn_mva=9) b1 = create_bus(net, 110) b2 = create_bus(net, 110) b3 = create_bus(net, 110) @@ -122,7 +124,7 @@ def big_sgen_three_bus_example(): # ext_grid-bus1--line0--bus2--line1--bus3 # | # sgen0 - net = create_empty_network(sn_mva=2) + net = pandapowerNet(name="big_sgen_three_bus_example", sn_mva=2) b1 = create_bus(net, 110) b2 = create_bus(net, 110) b3 = create_bus(net, 110) diff --git a/pandapower/test/shortcircuit/test_trafo3w.py b/pandapower/test/shortcircuit/test_trafo3w.py index 8b8aa8171..ac1ba19c2 100644 --- a/pandapower/test/shortcircuit/test_trafo3w.py +++ b/pandapower/test/shortcircuit/test_trafo3w.py @@ -6,15 +6,17 @@ import numpy as np import pytest -from pandapower.create import create_empty_network, create_bus, create_ext_grid, create_load, \ - create_transformer3w_from_parameters +from pandapower.create import ( + create_bus, create_ext_grid, create_load, create_transformer3w_from_parameters +) +from pandapower.network import pandapowerNet from pandapower.run import runpp from pandapower.shortcircuit.calc_sc import calc_sc @pytest.fixture def trafo3w_net(): - net = create_empty_network(sn_mva=5) + net = pandapowerNet(name="trafo3w_net", sn_mva=5) b1 = create_bus(net, 220) b2 = create_bus(net, 30) b3 = create_bus(net, 10) diff --git a/pandapower/test/shortcircuit/test_transformer.py b/pandapower/test/shortcircuit/test_transformer.py index a081d808a..ea1df4c04 100644 --- a/pandapower/test/shortcircuit/test_transformer.py +++ b/pandapower/test/shortcircuit/test_transformer.py @@ -5,14 +5,16 @@ import pytest -from pandapower.create import create_empty_network, create_bus, create_ext_grid, create_switch, create_shunt, \ - create_transformer_from_parameters +from pandapower.create import ( + create_bus, create_ext_grid, create_switch, create_shunt, create_transformer_from_parameters +) +from pandapower.network import pandapowerNet from pandapower.shortcircuit.calc_sc import calc_sc @pytest.fixture def net_transformer(): - net = create_empty_network(sn_mva=2) + net = pandapowerNet(name="net_transformer", sn_mva=2) b1a = create_bus(net, vn_kv=10.) b1b = create_bus(net, vn_kv=10.) b2 = create_bus(net, vn_kv=.4) diff --git a/pandapower/test/timeseries/test_timeseries.py b/pandapower/test/timeseries/test_timeseries.py index a12d5dd56..bb54e9920 100644 --- a/pandapower/test/timeseries/test_timeseries.py +++ b/pandapower/test/timeseries/test_timeseries.py @@ -13,8 +13,11 @@ from pandapower.control import ContinuousTapControl, ConstControl from pandapower.control.util.diagnostic import logger as diagnostic_logger -from pandapower.create import create_empty_network, create_bus, create_ext_grid, create_line, create_transformer, \ - create_load, create_loads, create_buses, create_switch, create_lines, create_transformer3w_from_parameters +from pandapower.create import ( + create_bus, create_ext_grid, create_line, create_transformer, create_load, create_loads, create_buses, + create_switch, create_lines, create_transformer3w_from_parameters +) +from pandapower.network import pandapowerNet from pandapower.run import set_user_pf_options, runpp from pandapower.timeseries import DFData from pandapower.timeseries import OutputWriter @@ -25,7 +28,7 @@ @pytest.fixture def simple_test_net(): - net = create_empty_network() + net = pandapowerNet(name="simple_test_net") set_user_pf_options(net, init='dc', calculate_voltage_angles=True) b0 = create_bus(net, 110) b1 = create_bus(net, 110) @@ -115,7 +118,7 @@ def test_const_control(simple_test_net): def test_switch_states_in_time_series(): - net = create_empty_network() + net = pandapowerNet(name="test_switch_states_in_time_series") create_buses(net, 3, 0.4) create_ext_grid(net, 0) create_loads(net, [1, 2], 0.1) diff --git a/pandapower/test/toolbox/test_data_modification.py b/pandapower/test/toolbox/test_data_modification.py index a261aaff4..8a460fd52 100644 --- a/pandapower/test/toolbox/test_data_modification.py +++ b/pandapower/test/toolbox/test_data_modification.py @@ -9,16 +9,17 @@ import pandas as pd import pytest -from pandapower.create import create_measurement, create_empty_network, create_bus, create_load, create_sgen, \ - create_shunt, create_ward +from pandapower.create import create_measurement, create_bus, create_load, create_sgen, create_shunt, create_ward +from pandapower.network import pandapowerNet from pandapower.networks.cigre_networks import create_cigre_network_mv from pandapower.networks.create_examples import example_simple, example_multivoltage from pandapower.run import runpp from pandapower.test.helper_functions import assert_net_equal from pandapower.toolbox.comparison import compare_arrays -from pandapower.toolbox.data_modification import reindex_elements, reindex_buses, add_column_from_node_to_elements, \ - add_column_from_element_to_elements, create_continuous_bus_index, create_continuous_elements_index, \ - set_scaling_by_type +from pandapower.toolbox.data_modification import ( + reindex_elements, reindex_buses, add_column_from_node_to_elements, add_column_from_element_to_elements, + create_continuous_bus_index, create_continuous_elements_index, set_scaling_by_type +) from pandapower.toolbox.element_selection import pp_elements from pandapower.estimation.util import add_virtual_meas_from_loadflow @@ -98,7 +99,7 @@ def test_reindex_buses(): def test_continuos_bus_numbering(): - net = create_empty_network() + net = pandapowerNet(name="test_continuos_bus_numbering") bus0 = create_bus(net, 0.4, index=12) create_load(net, bus0, p_mw=0.) @@ -202,7 +203,7 @@ def test_continuous_element_numbering(): def test_scaling_by_type(): - net = create_empty_network() + net = pandapowerNet(name="test_scaling_by_type") bus0 = create_bus(net, 0.4) create_load(net, bus0, p_mw=0., type="Household") diff --git a/pandapower/test/toolbox/test_element_selection.py b/pandapower/test/toolbox/test_element_selection.py index 4727325db..50404fc51 100644 --- a/pandapower/test/toolbox/test_element_selection.py +++ b/pandapower/test/toolbox/test_element_selection.py @@ -6,6 +6,19 @@ import pandas as pd import pytest +<<<<<<< feature/deprecate-create_empty_entwork +from pandapower.create import ( + create_bus, create_transformer3w, create_transformer, create_line, create_switch, create_buses, create_gens, + create_sgens, create_measurement, create_poly_cost +) +from pandapower.network import pandapowerNet +from pandapower.networks.create_examples import example_multivoltage +from pandapower.networks.power_system_test_cases import case9 +from pandapower.toolbox.element_selection import ( + get_element_indices, next_bus, get_connected_elements, get_connected_buses, false_elm_links_loop, + get_connected_buses_at_switches, pp_elements, element_bus_tuples, count_elements, branch_element_bus_dict +) +======= from pandapower import runpp from pandapower.create import create_empty_network, create_bus, create_transformer3w, create_transformer, create_line, \ create_switch, create_buses, create_gens, create_sgens, create_measurement, create_poly_cost @@ -14,6 +27,7 @@ from pandapower.toolbox.element_selection import get_element_indices, next_bus, get_connected_elements, \ get_connected_buses, false_elm_links_loop, get_connected_buses_at_switches, pp_elements, element_bus_tuples, \ count_elements, branch_element_bus_dict, get_all_elements +>>>>>>> release/v4.0.0 def test_get_element_indices(): @@ -28,7 +42,7 @@ def test_get_element_indices(): def test_next_bus(): - net = create_empty_network() + net = pandapowerNet(name="test_next_bus") bus0 = create_bus(net, vn_kv=110) bus1 = create_bus(net, vn_kv=20) @@ -61,7 +75,7 @@ def test_next_bus(): def test_get_connected_lines_at_bus(): - net = create_empty_network() + net = pandapowerNet(name="test_get_connected_lines_at_bus") bus0 = create_bus(net, 0.4) bus1 = create_bus(net, 0.4) @@ -94,7 +108,7 @@ def test_get_connected_lines_at_bus(): def test_get_connected_buses(): - net = create_empty_network() + net = pandapowerNet(name="test_get_connected_buses") bus0 = create_bus(net, vn_kv=110) bus1 = create_bus(net, vn_kv=20) @@ -142,7 +156,7 @@ def test_get_connected_buses_at_switches(): def test_get_false_links(): - net = create_empty_network() + net = pandapowerNet(name="test_get_false_links") create_buses(net, 6, 10, index=[0, 1, 3, 4, 6, 7]) # --- gens diff --git a/pandapower/test/toolbox/test_grid_modification.py b/pandapower/test/toolbox/test_grid_modification.py index a299da2a5..2d8206fdf 100644 --- a/pandapower/test/toolbox/test_grid_modification.py +++ b/pandapower/test/toolbox/test_grid_modification.py @@ -4,13 +4,15 @@ # and Energy System Technology (IEE), Kassel. All rights reserved. import pytest -from unittest import mock from pandas._testing import assert_series_equal -from pandapower.create import create_transformer, create_line, create_transformer3w_from_parameters, create_pwl_cost, \ - create_poly_cost, create_group, create_transformer3w, create_measurement, create_buses, create_loads, \ - create_xward, create_group_from_dict, create_transformer_from_parameters +from pandapower.create import ( + create_transformer, create_line, create_transformer3w_from_parameters, create_pwl_cost, create_poly_cost, + create_group, create_transformer3w, create_measurement, create_buses, create_loads, create_xward, + create_group_from_dict, create_transformer_from_parameters +) from pandapower.groups import group_element_index, count_group_elements +from pandapower.network import pandapowerNet from pandapower.networks.cigre_networks import create_cigre_network_mv, create_cigre_network_lv from pandapower.networks.create_examples import example_simple, example_multivoltage from pandapower.networks.ieee_european_lv_asymmetric import ieee_european_lv_asymmetric @@ -50,7 +52,7 @@ def __create_trafo3w(net, bus_sl, service: bool = True): @pytest.mark.parametrize('service', [True, False]) def test_drop_inactive_elements(service): - net = create_empty_network() + net = pandapowerNet(name=f"test_drop_inactive_elements service={service}") bus_sl = create_bus(net, vn_kv=.4, in_service=service) __create_trafo3w(net, bus_sl, service=service) # drop them @@ -78,7 +80,7 @@ def test_drop_inactive_elements(service): assert len(net.bus) == 1 assert bus_sl in net.bus.index.values - net = create_empty_network() + net = pandapowerNet(name=f"test_drop_inactive_elements") bus0 = create_bus(net, vn_kv=.4, in_service=True) create_ext_grid(net, bus0, in_service=True) @@ -93,7 +95,7 @@ def test_drop_inactive_elements(service): def test_drop_inactive_elements_with_empty_net(): - net = create_empty_network() + net = pandapowerNet(name="test_drop_inactive_elements_with_empty_net") try: drop_inactive_elements(net) except Exception: @@ -101,7 +103,7 @@ def test_drop_inactive_elements_with_empty_net(): def test_drop_inactive_elements_with_missing_in_service_column(mock_logger): - net = create_empty_network() + net = pandapowerNet(name="test_drop_inactive_elements_with_missing_in_service_column 0") bus_sl = create_bus(net, vn_kv=.4) create_ext_grid(net, bus_sl) bus0 = create_bus(net, vn_kv=.4) @@ -119,7 +121,7 @@ def test_drop_inactive_elements_with_missing_in_service_column(mock_logger): 'Set 0 of 1 unsupplied buses out of service' ) - net = create_empty_network() + net = pandapowerNet(name="test_drop_inactive_elements_with_missing_in_service_column 1") bus0 = create_bus(net, vn_kv=.4) create_ext_grid(net, bus0) bus1 = create_bus(net, vn_kv=.4) @@ -132,7 +134,7 @@ def test_drop_inactive_elements_with_missing_in_service_column(mock_logger): def test_drop_inactive_elements_other_branches(): - net = create_empty_network() + net = pandapowerNet(name="test_drop_inactive_elements_other_branches") bus0 = create_bus(net, vn_kv=.4) create_ext_grid(net, bus0) @@ -152,7 +154,7 @@ def test_drop_inactive_elements_other_branches(): assert impedance0 not in net.motor.index def test_drop_elements_simple_with_trafo(mock_logger): - net = create_empty_network() + net = pandapowerNet(name="test_drop_elements_simple_with_trafo") bus0 = create_bus(net, vn_kv=.4) create_ext_grid(net, bus0) drop_elements_simple(net, "bus", 0) @@ -422,7 +424,7 @@ def check_elm_number(net1, net2, excerpt_elms=None): def test_fuse_buses(): - net = create_empty_network() + net = pandapowerNet(name="test_fuse_buses") b1 = create_bus(net, vn_kv=1, name="b1") b2 = create_bus(net, vn_kv=1.5, name="b2") b3 = create_bus(net, vn_kv=2, name="b2") @@ -470,7 +472,7 @@ def test_fuse_buses(): def test_close_switch_at_line_with_two_open_switches(): - net = create_empty_network() + net = pandapowerNet(name="test_close_switch_at_line_with_two_open_switches") bus1 = create_bus(net, vn_kv=.4) bus2 = create_bus(net, vn_kv=.4) @@ -498,7 +500,7 @@ def test_close_switch_at_line_with_two_open_switches(): def test_create_replacement_switch_for_branch(): - net = create_empty_network() + net = pandapowerNet(name="test_create_replacement_switch_for_branch") bus0 = create_bus(net, vn_kv=0.4) bus1 = create_bus(net, vn_kv=0.4) @@ -542,7 +544,7 @@ def test_create_replacement_switch_for_branch(): @pytest.fixture def net(): - net = create_empty_network() + net = pandapowerNet(name="net") bus0 = create_bus(net, vn_kv=0.4) bus1 = create_bus(net, vn_kv=0.4) @@ -620,7 +622,7 @@ def test_all(net): def test_drop_elements_at_buses(): - net = create_empty_network() + net = pandapowerNet(name="test_drop_elements_at_buses") bus0 = create_bus(net, vn_kv=110) bus1 = create_bus(net, vn_kv=20) @@ -669,7 +671,7 @@ def test_drop_elements_at_buses(): def test_impedance_line_replacement(): # create test net - net1 = create_empty_network(sn_mva=1.1) + net1 = pandapowerNet(name="test_impedance_line_replacement", sn_mva=1.1) create_buses(net1, 2, 10) create_ext_grid(net1, 0) create_impedance(net1, 0, 1, 0.1, 0.1, 8.7e-3) @@ -781,7 +783,7 @@ def check_elm_shape(net, elm_shape: dict): for elm, no in elm_shape.items(): assert net[elm].shape[0] == no - net = create_empty_network() + net = pandapowerNet(name="test_replace_pq_elmtype") create_buses(net, 3, 20) create_ext_grid(net, 0) for to_bus in [1, 2]: @@ -1121,7 +1123,7 @@ def test_set_isolated_areas_out_of_service(): assert np.all(net.line.loc[np.setdiff1d(net.line.index, isolated_lines), 'in_service']) def test_drop_trafos_incorrect_table_names(): - net = create_empty_network() + net = pandapowerNet(name="test_drop_trafos_incorrect_table_names") bus_sl = create_bus(net, vn_kv=.4) create_ext_grid(net, bus_sl) bus0 = create_bus(net, vn_kv=.4) @@ -1145,13 +1147,13 @@ def test_drop_trafos_incorrect_table_names(): assert exc.value.args[0] == "parameter 'table' must be 'trafo' or 'trafo3w'" def test_drop_elements_buses(): - net = create_empty_network() + net = pandapowerNet(name="test_drop_elements_buses") bus0 = create_bus(net, vn_kv=.4) drop_elements(net, "bus", element_index=[0]) assert bus0 not in net.bus.index def test_drop_elements_lines(): - net = create_empty_network() + net = pandapowerNet(name="test_drop_elements_lines") bus0 = create_bus(net, vn_kv=.4) bus1 = create_bus(net, vn_kv=.4) line0 = create_line(net, bus0, bus1, length_km=1, std_type='149-AL1/24-ST1A 10.0') @@ -1159,7 +1161,7 @@ def test_drop_elements_lines(): assert line0 not in net.line.index def test_drop_elements_trafos(): - net = create_empty_network() + net = pandapowerNet(name="test_drop_elements_trafos") bus_sl = create_bus(net, vn_kv=.4, in_service=True) __create_trafo3w(net, bus_sl, service=True) drop_elements(net, "trafo", element_index=[0]) @@ -1170,7 +1172,7 @@ def _simple_line_net(): """ Two buses connected by one line. """ - net = create_empty_network() + net = pandapowerNet(name="_simple_line_net") bus0 = create_bus(net, vn_kv=20.) bus1 = create_bus(net, vn_kv=20.) create_line_from_parameters( @@ -1191,7 +1193,7 @@ def test_set_isolated_areas_out_of_service_switch_marks_line(): assert bool(net.line.at[line_idx, "in_service"]) is False def test_set_isolated_areas_out_of_service_marks_trafo_oos(): - net = create_empty_network() + net = pandapowerNet(name="test_set_isolated_areas_out_of_service_marks_trafo_oos") b_hv = create_bus(net, vn_kv=110.) b_lv = create_bus(net, vn_kv=20.) t_idx = create_transformer_from_parameters( diff --git a/pandapower/test/toolbox/test_result_info.py b/pandapower/test/toolbox/test_result_info.py index 56ee2b537..33829f85d 100644 --- a/pandapower/test/toolbox/test_result_info.py +++ b/pandapower/test/toolbox/test_result_info.py @@ -6,20 +6,21 @@ import numpy as np import pytest +from pandapower.run import runpp from pandapower.create import ( - create_empty_network, create_buses, create_ext_grid, create_gen, create_load, create_sgen, create_storage, - create_dcline, create_line, create_transformer, create_bus, create_poly_cost, - create_pwl_cost + create_buses, create_ext_grid, create_gen, create_load, create_sgen, create_storage, create_dcline, create_line, + create_transformer, create_bus, create_poly_cost, create_pwl_cost ) +from pandapower.network import pandapowerNet from pandapower.networks import create_cigre_network_lv, case9 -from pandapower.run import runpp -from pandapower.toolbox import ( - dataframes_equal, res_power_columns, violated_buses, clear_result_tables, opf_task, overloaded_lines +from pandapower.toolbox import dataframes_equal +from pandapower.toolbox.result_info import ( + opf_task, overloaded_lines, violated_buses, clear_result_tables, res_power_columns ) def test_opf_task(): - net = create_empty_network() + net = pandapowerNet(name="test_opf_task") create_buses(net, 6, [10, 10, 10, 0.4, 7, 7], min_vm_pu=[0.9, 0.9, 0.88, 0.9, np.nan, np.nan]) idx_ext_grid = 1 @@ -83,7 +84,7 @@ def test_opf_task(): def test_overloaded_lines(): - net = create_empty_network() + net = pandapowerNet(name="test_overloaded_lines") bus0 = create_bus(net, vn_kv=.4) bus1 = create_bus(net, vn_kv=.4) diff --git a/pandapower/test/topology/test_create_graph.py b/pandapower/test/topology/test_create_graph.py index 736c421b6..30c9339d3 100644 --- a/pandapower/test/topology/test_create_graph.py +++ b/pandapower/test/topology/test_create_graph.py @@ -8,13 +8,13 @@ import numpy as np import pytest -from pandapower.create import create_empty_network, create_switch +from pandapower.create import create_switch from pandapower.pypower.idx_brch import BR_R, BR_X +from pandapower.network import pandapowerNet from pandapower.run import runpp -from pandapower.test.loadflow.result_test_network_generator import add_test_trafo3w, \ - add_test_trafo, add_test_line, \ - add_test_impedance, \ - add_test_bus_bus_switch +from pandapower.test.loadflow.result_test_network_generator import ( + add_test_trafo3w, add_test_trafo, add_test_line, add_test_impedance, add_test_bus_bus_switch +) from pandapower.test.loadflow.test_scenarios import network_with_trafo3ws from pandapower.topology.create_graph import create_nxgraph, graph_tool_available @@ -25,7 +25,7 @@ @pytest.mark.parametrize("library", libraries) def test_line(library): - net = create_empty_network() + net = pandapowerNet(name="test_line") add_test_line(net) line, open_loop_line, _ = net.line.index f, t = net.line.from_bus.at[line], net.line.to_bus.at[line] @@ -68,7 +68,7 @@ def test_line(library): @pytest.mark.parametrize("library", libraries) def test_trafo(library): - net = create_empty_network() + net = pandapowerNet(name="test_trafo") add_test_trafo(net) trafo, open_loop_trafo, _ = net.trafo.index @@ -114,7 +114,7 @@ def test_trafo(library): @pytest.mark.parametrize("library", libraries) def test_trafo3w(library): - net = create_empty_network() + net = pandapowerNet(name="test_trafo3w") add_test_trafo3w(net) t1, t2 = net.trafo3w.index @@ -179,7 +179,7 @@ def test_trafo3w_impedances(network_with_trafo3ws, library): @pytest.mark.parametrize("library", libraries) def test_impedance(library): - net = create_empty_network() + net = pandapowerNet(name="test_impedance") add_test_impedance(net) impedance, _ = net.impedance.index @@ -208,7 +208,7 @@ def test_impedance(library): @pytest.mark.parametrize("library", libraries) def test_bus_bus_switches(library): - net = create_empty_network() + net = pandapowerNet(name="test_bus_bus_switches") add_test_bus_bus_switch(net) s = net.switch.index[0] @@ -238,7 +238,7 @@ def test_bus_bus_switches(library): def test_nogo(): - net = create_empty_network() + net = pandapowerNet(name="test_nogo") add_test_line(net) mg = create_nxgraph(net) assert set(mg.nodes()) == set(net.bus.index) @@ -247,14 +247,14 @@ def test_nogo(): def test_branch_impedance_unit(): - net = create_empty_network() + net = pandapowerNet(name="test_nogo") with pytest.raises(ValueError, match="branch impedance unit can be either 'ohm' or 'pu'"): mg = create_nxgraph(net, branch_impedance_unit="p.u.") @pytest.mark.skipif(not graph_tool_available, reason="graph_tool not available") def test_nogo_graph_tool(): - net = create_empty_network() + net = pandapowerNet(name="test_nogo_graph_tool") add_test_line(net) mg = create_nxgraph(net, library="graph_tool") assert set(mg.nodes()) == set(net.bus.index) diff --git a/pandapower/test/topology/test_graph_searches.py b/pandapower/test/topology/test_graph_searches.py index f026c7f3f..84aa111cd 100644 --- a/pandapower/test/topology/test_graph_searches.py +++ b/pandapower/test/topology/test_graph_searches.py @@ -7,8 +7,9 @@ import numpy as np import pytest -from pandapower.create import create_empty_network, create_bus, create_line, create_ext_grid, create_switch, \ +from pandapower.create import create_bus, create_line, create_ext_grid, create_switch, \ create_transformer, create_buses, create_impedance +from pandapower.network import pandapowerNet from pandapower.networks.create_examples import example_simple from pandapower.topology.create_graph import create_nxgraph from pandapower.topology.graph_searches import connected_components, determine_stubs, calc_distance_to_bus, \ @@ -18,7 +19,7 @@ @pytest.fixture def feeder_network(): - net = create_empty_network() + net = pandapowerNet(name="feeder_network") current_bus = create_bus(net, vn_kv=20.) create_ext_grid(net, current_bus) for length in [12, 6, 8]: @@ -32,7 +33,7 @@ def feeder_network(): @pytest.fixture def meshed_network(): - net = create_empty_network("7bus_system") + net = pandapowerNet(name="7bus_system") # ext grid b = [create_bus(net, vn_kv=380., name="exi", geodata=(0, 0))] @@ -58,7 +59,7 @@ def meshed_network(): @pytest.fixture def mixed_network(): - net = create_empty_network() + net = pandapowerNet(name="mixed_network") create_buses(net, nr_buses=5, vn_kv=20.) connections = [(0, 1), (1, 2), (2, 3), (2, 4)] for fb, tb in connections: @@ -122,7 +123,7 @@ def test_distance(feeder_network): def test_unsupplied_buses_with_in_service(): # IS ext_grid --- open switch --- OOS bus --- open switch --- IS bus - net = create_empty_network() + net = pandapowerNet(name="test_unsupplied_buses_with_in_service 0") slack_bus = create_bus(net, 0.4) create_ext_grid(net, slack_bus) @@ -137,7 +138,7 @@ def test_unsupplied_buses_with_in_service(): assert ub == {2} # OOS ext_grid --- closed switch --- IS bus - net = create_empty_network() + net = pandapowerNet(name="test_unsupplied_buses_with_in_service 1") bus_sl = create_bus(net, 0.4) create_ext_grid(net, bus_sl, in_service=False) @@ -150,7 +151,7 @@ def test_unsupplied_buses_with_in_service(): def test_unsupplied_buses_with_switches(): - net = create_empty_network() + net = pandapowerNet(name="test_unsupplied_buses_with_switches") create_buses(net, 8, 20) create_buses(net, 5, 0.4) create_ext_grid(net, 0) @@ -250,7 +251,7 @@ def test_elements_on_path(): def test_end_points_of_continuously_connected_lines(): - net = create_empty_network() + net = pandapowerNet(name="test_end_points_of_continuously_connected_lines") b0 = create_bus(net, vn_kv=20.) b1 = create_bus(net, vn_kv=20.) b2 = create_bus(net, vn_kv=20.) diff --git a/pandapower/toolbox/comparison.py b/pandapower/toolbox/comparison.py index ade710fe0..b0ee877ea 100644 --- a/pandapower/toolbox/comparison.py +++ b/pandapower/toolbox/comparison.py @@ -5,7 +5,7 @@ from pandas import testing as pdt from deepdiff import DeepDiff -from pandapower.auxiliary import pandapowerNet +from pandapower import pandapowerNet try: from networkx.utils.misc import graphs_equal diff --git a/pandapower/toolbox/data_modification.py b/pandapower/toolbox/data_modification.py index 8d487231d..cf91733eb 100644 --- a/pandapower/toolbox/data_modification.py +++ b/pandapower/toolbox/data_modification.py @@ -10,7 +10,7 @@ import pandas as pd from pandapower.auxiliary import get_indices -from pandapower.create.network_create import create_empty_network +from pandapower import pandapowerNet from pandapower.toolbox.comparison import compare_arrays from pandapower.toolbox.element_selection import element_bus_tuples, pp_elements @@ -235,7 +235,7 @@ def reindex_elements(net, element_type, new_indices=None, old_indices=None, look Examples -------- - >>> net = create_empty_network() + >>> net = pandapowerNet(name='Example') >>> idx0 = create_bus(net, 110) >>> idx1 = 4 >>> idx2 = 7 @@ -408,7 +408,7 @@ def set_data_type_of_columns_to_default(net): no return value; Sideeffect: the net passed as input has pandapower-default dtypes of columns in element tables. """ - new_net = create_empty_network() + new_net = pandapowerNet(name='') for key, item in net.items(): if isinstance(item, pd.DataFrame): for col in item.columns: diff --git a/pandapower/toolbox/element_selection.py b/pandapower/toolbox/element_selection.py index d4268b708..cf8359aa3 100644 --- a/pandapower/toolbox/element_selection.py +++ b/pandapower/toolbox/element_selection.py @@ -5,6 +5,7 @@ import gc import warnings +from typing import Iterable import numpy as np import pandas as pd @@ -69,10 +70,10 @@ def get_element_indices(net, element_type, name, exact_match=True): EXAMPLE: >>> from pandapower.networks.create_examples import example_multivoltage - >>> from pandapower import get_element_indices + >>> from pandapower.toolbox.element_selection import get_element_indices >>> net = example_multivoltage() >>> # get indices of only one element type (buses in this example): - >>> get_element_indices(net, "bus", ["Bus HV%i" % i for i in range(1, 4)]) + >>> get_element_indices(net, "bus", [f"Bus HV{i}" for i in range(1, 4)]) [32, 33, 34] >>> # get indices of only two element type (first buses, second lines): >>> get_element_indices(net, ["bus", "line"], "HV", exact_match=False) @@ -436,8 +437,9 @@ def get_connected_switches(net, buses, consider=('b', 'l', 't', 't3', 'i'), stat logger.warning("Unknown switch status \"%s\" selected! " "Selecting all switches by default." % status) + branch_buses = None if include_element_connections: - bebd = branch_element_bus_dict() + branch_buses = branch_element_bus_dict() cs = set() for et in consider: @@ -452,8 +454,7 @@ def get_connected_switches(net, buses, consider=('b', 'l', 't', 't3', 'i'), stat if include_element_connections: element_type = ets_to_element_types(et) sw_idx = net.switch.index[(net.switch.et == et) & switch_selection] - element_buses = net[element_type].loc[list(net.switch.element.loc[sw_idx]), - bebd[element_type]] + element_buses = net[element_type].loc[list(net.switch.element.loc[sw_idx]), branch_buses[element_type]] isin_df = pd.concat([element_buses[col].isin(buses) for col in element_buses], axis=1) cs |= set(sw_idx[isin_df.any(axis=1)]) @@ -461,14 +462,19 @@ def get_connected_switches(net, buses, consider=('b', 'l', 't', 't3', 'i'), stat def get_connected_elements_dict( - net: pandapowerNet, buses, respect_switches: bool = True, respect_in_service: bool = False, + net: pandapowerNet, + buses: Iterable, + respect_switches: bool = True, + respect_in_service: bool = False, include_empty_lists: bool = False, - element_types=None, **kwargs) -> dict[str, list]: + element_types: Iterable[str] | None = None, + **kwargs +) -> dict[str, list]: """ Returns a dict of lists of connected elements. Parameters: - net: The pandapower network + net: pandapower network buses: buses as origin to search for connected elements respect_switches: respect_in_service: @@ -477,7 +483,7 @@ def get_connected_elements_dict( element_types: types elements which are analysed for connection. If not given, all pandapower element types are analysed. That list of all element types can also be restricted by key word arguments - Keyword arguments: + Keyword Arguments: "connected_buses", "connected_bus_elements", "connected_branch_elements" and "connected_other_elements" @@ -536,8 +542,9 @@ def get_gc_objects_dict(): This function is based on the code in mem_top module Summarize object types that are tracked by the garbage collector at the moment. Useful to test if there are memory leaks. - :return: dictionary with keys corresponding to types and values to the number of objects of the - type + + Returns: + dictionary with keys corresponding to types and values to the number of objects of the type """ objs = gc.get_objects() nums_by_types = {} @@ -704,7 +711,7 @@ def count_elements(net, return_empties=False, **kwargs): Examples -------- - >>> from pandapower import count_elements + >>> from pandapower.toolbox.element_selection import count_elements >>> from pandapower.networks.power_system_test_cases import case9 >>> count_elements(case9(), bus_elements=False) bus 9 diff --git a/pandapower/toolbox/grid_modification.py b/pandapower/toolbox/grid_modification.py index 371bf3fdc..7aa1a6569 100644 --- a/pandapower/toolbox/grid_modification.py +++ b/pandapower/toolbox/grid_modification.py @@ -9,8 +9,8 @@ import numpy as np import pandas as pd -from pandapower.auxiliary import pandapowerNet, _preserve_dtypes, ensure_iterability, \ - log_to_level, plural_s +from pandapower.auxiliary import _preserve_dtypes, ensure_iterability, log_to_level +from pandapower.network import pandapowerNet, plural_s from pandapower.std_types import change_std_type from pandapower.create import ( create_switch, create_line_from_parameters, create_impedance, create_empty_network, create_gen, create_ext_grid, @@ -76,7 +76,7 @@ def select_subnet(net, buses, include_switch_buses=False, include_results=False, if not include_results: clear_result_tables(p2) else: - p2 = create_empty_network(add_stdtypes=False) + p2 = pandapowerNet(name='', add_stdtypes=False) p2["std_types"] = copy.deepcopy(net["std_types"]) net_parameters = ["name", "f_hz"] @@ -149,9 +149,9 @@ def select_subnet(net, buses, include_switch_buses=False, include_results=False, net.switch[net.switch.et == 'l'].element.isin(p2.line.index), net.switch[net.switch.et == 't'].element.isin(p2.trafo.index), ], sort=False) - ] + ] - return pandapowerNet(p2) + return pandapowerNet(net=p2) def merge_nets(net1, net2, validate=True, merge_results=True, tol=1e-9, **kwargs): diff --git a/pyproject.toml b/pyproject.toml index 7e7703813..5d0964604 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -92,7 +92,8 @@ typing = [ "types-networkx~=3.4", "types-tqdm~=4.67", "scipy-stubs~=1.15", - "pandera[mypy]~=0.26.1" + "pandera[mypy]~=0.26.1", + "matplotlib~=3.10" ] all = ["pandapower[plotting,performance,fileio,converter,pgm,control]"]