From b9a68e74a495ebfcef9b3259fb92d0f961211cff Mon Sep 17 00:00:00 2001 From: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Date: Tue, 13 Jan 2026 10:01:42 +0100 Subject: [PATCH 01/21] create_empty_network replaced by constructor for pandapowerNet refactored pandapowerNet and ADict to avoid circular imports replaced all calls to create_empty_network deprecated use of constructor for deepcopy name is now a required attribute for pandapowerNet --- pandapower/__init__.py | 3 +- pandapower/auxiliary.py | 254 +----------- pandapower/build_branch.py | 3 +- .../contingency/contingency_parallel.py | 2 +- pandapower/control/controller/dmr_control.py | 2 +- pandapower/convert_format.py | 24 +- .../converter/cim/cim2pp/build_pp_net.py | 5 +- .../cim/cim2pp/convert_measurements.py | 2 +- pandapower/converter/cim/cim2pp/from_cim.py | 2 +- pandapower/converter/cim/cim_tools.py | 2 +- pandapower/converter/cim/pp_classes.py | 2 +- pandapower/converter/cim/pp_tools.py | 2 +- pandapower/converter/jao/from_jao.py | 13 +- pandapower/converter/pandamodels/from_pm.py | 3 +- .../powerfactory/pp_import_functions.py | 39 +- pandapower/converter/pypower/from_ppc.py | 20 +- pandapower/converter/ucte/from_ucte.py | 2 +- pandapower/converter/ucte/ucte_converter.py | 5 +- pandapower/create/_utils.py | 2 +- pandapower/create/bus_create.py | 2 +- pandapower/create/cost_create.py | 2 +- pandapower/create/ext_grid_create.py | 2 +- pandapower/create/gen_create.py | 2 +- pandapower/create/group_create.py | 2 +- pandapower/create/impedance_create.py | 2 +- pandapower/create/line_create.py | 2 +- pandapower/create/load_create.py | 2 +- pandapower/create/measurement_create.py | 2 +- pandapower/create/motor_create.py | 2 +- pandapower/create/network_create.py | 62 +-- pandapower/create/sgen_create.py | 2 +- pandapower/create/shunt_create.py | 2 +- pandapower/create/source_create.py | 2 +- pandapower/create/storage_create.py | 2 +- pandapower/create/switch_create.py | 2 +- pandapower/create/trafo_create.py | 2 +- pandapower/create/ward_create.py | 2 +- pandapower/diagnostic/diagnostic.py | 2 +- pandapower/diagnostic/diagnostic_functions.py | 5 +- pandapower/diagnostic/diagnostic_helpers.py | 3 +- pandapower/estimation/ppc_conversion.py | 3 +- pandapower/file_io.py | 64 ++- pandapower/groups.py | 18 +- pandapower/io_utils.py | 27 +- pandapower/network.py | 368 ++++++++++++++++++ pandapower/network_structure.py | 1 + pandapower/networks/cigre_networks.py | 14 +- pandapower/networks/create_examples.py | 13 +- pandapower/networks/dickert_lv_networks.py | 12 +- pandapower/networks/kerber_networks.py | 6 +- .../simple_pandapower_test_networks.py | 14 +- .../synthetic_voltage_control_lv_networks.py | 5 +- pandapower/plotting/collections.py | 3 +- pandapower/plotting/geo.py | 3 +- pandapower/plotting/plotly/traces.py | 3 +- pandapower/protection/example_grids.py | 8 +- pandapower/protection/utility_functions.py | 2 +- pandapower/results_branch.py | 2 +- pandapower/results_bus.py | 33 +- pandapower/test/api/test_auxiliary.py | 36 +- pandapower/test/api/test_convert_format.py | 12 +- pandapower/test/api/test_create.py | 94 +++-- pandapower/test/api/test_diagnostic.py | 2 +- pandapower/test/api/test_file_io.py | 46 +-- pandapower/test/api/test_group.py | 26 +- pandapower/test/api/test_std_types.py | 41 +- pandapower/test/conftest.py | 8 +- .../test/contingency/test_contingency.py | 18 +- .../control/test_continuous_tap_control.py | 19 +- pandapower/test/control/test_der_control.py | 6 +- .../test/control/test_discrete_tap_control.py | 13 +- pandapower/test/control/test_shunt_control.py | 7 +- pandapower/test/control/test_stactrl.py | 62 +-- .../control/test_tap_dependent_impedance.py | 22 +- .../test/control/test_vm_set_tap_control.py | 8 +- pandapower/test/converter/test_from_ucte.py | 3 +- pandapower/test/estimation/test_pmu.py | 12 +- .../test/estimation/test_ppc_conversion.py | 4 +- .../test/estimation/test_wls_estimation.py | 33 +- .../grid_equivalents/test_get_equivalent.py | 15 +- pandapower/test/helper_functions.py | 23 +- .../loadflow/result_test_network_generator.py | 18 +- pandapower/test/loadflow/test_dist_slack.py | 13 +- pandapower/test/loadflow/test_facts.py | 14 +- .../test/loadflow/test_facts_b2b_vsc.py | 19 +- pandapower/test/loadflow/test_facts_ssc.py | 15 +- pandapower/test/loadflow/test_facts_svc.py | 9 +- pandapower/test/loadflow/test_facts_tcsc.py | 21 +- pandapower/test/loadflow/test_facts_vsc.py | 127 +++--- pandapower/test/loadflow/test_recycle.py | 6 +- pandapower/test/loadflow/test_results.py | 35 +- pandapower/test/loadflow/test_rundcpp.py | 17 +- pandapower/test/loadflow/test_runpp.py | 79 ++-- pandapower/test/loadflow/test_runpp_3ph.py | 33 +- .../test/loadflow/test_runpp_3ph_n_line.py | 6 +- pandapower/test/loadflow/test_runpp_pgm.py | 12 +- pandapower/test/loadflow/test_scenarios.py | 52 +-- pandapower/test/loadflow/test_tdpf.py | 23 +- .../test/networks/test_kerber_networks.py | 17 +- pandapower/test/opf/test_basic.py | 39 +- pandapower/test/opf/test_check_opf_data.py | 9 +- pandapower/test/opf/test_cost_consistency.py | 17 +- pandapower/test/opf/test_costs_mixed.py | 12 +- pandapower/test/opf/test_costs_pol.py | 12 +- pandapower/test/opf/test_costs_pwl.py | 22 +- pandapower/test/opf/test_costs_pwl_q.py | 8 +- pandapower/test/opf/test_curtailment.py | 8 +- pandapower/test/opf/test_dcline.py | 8 +- pandapower/test/opf/test_pandamodels_runpm.py | 23 +- pandapower/test/plotting/test_geo.py | 8 +- pandapower/test/protection/test_fuse.py | 16 +- pandapower/test/protection/test_oc_relay.py | 6 +- pandapower/test/shortcircuit/test_1ph.py | 34 +- .../test/shortcircuit/test_all_currents.py | 39 +- pandapower/test/shortcircuit/test_gen.py | 16 +- .../test/shortcircuit/test_iec60909_4.py | 17 +- .../test/shortcircuit/test_impedance.py | 5 +- .../shortcircuit/test_min_branch_results.py | 5 +- pandapower/test/shortcircuit/test_motor.py | 6 +- pandapower/test/shortcircuit/test_ring.py | 6 +- .../test/shortcircuit/test_sc_multi_bus.py | 8 +- .../test/shortcircuit/test_sc_single_bus.py | 8 +- .../test/shortcircuit/test_sc_voltage.py | 7 +- pandapower/test/shortcircuit/test_sgen.py | 18 +- pandapower/test/shortcircuit/test_trafo3w.py | 8 +- .../test/shortcircuit/test_transformer.py | 8 +- pandapower/test/timeseries/test_timeseries.py | 11 +- .../test/toolbox/test_data_modification.py | 15 +- .../test/toolbox/test_element_selection.py | 22 +- .../test/toolbox/test_grid_modification.py | 50 +-- pandapower/test/toolbox/test_result_info.py | 18 +- pandapower/test/topology/test_create_graph.py | 26 +- .../test/topology/test_graph_searches.py | 17 +- pandapower/toolbox/comparison.py | 2 +- pandapower/toolbox/data_modification.py | 4 +- pandapower/toolbox/grid_modification.py | 25 +- 136 files changed, 1451 insertions(+), 1230 deletions(-) create mode 100644 pandapower/network.py diff --git a/pandapower/__init__.py b/pandapower/__init__.py index 7c6ce09fc4..70be4091a2 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 * @@ -12,7 +14,6 @@ from pandapower.powerflow import * from pandapower.optimal_powerflow import OPFNotConverged from pandapower.run import * -from pandapower.toolbox import * # to be removed -> in future via package namespace available from pandapower.groups import * from pandapower.diagnostic import * from pandapower.runpm import * diff --git a/pandapower/auxiliary.py b/pandapower/auxiliary.py index 63e84258cd..4f820bd4d4 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 @@ -48,6 +23,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 @@ -140,227 +116,11 @@ def warn_and_fix_parameter_renaming(old_parameter_name, new_parameter_name, new_ return new_parameter -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 - - 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): - """ - 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 - """ - def __init__(self, *args, **kwargs): - 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): # 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): @@ -387,8 +147,6 @@ def _extract_coords(x): 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) @@ -409,14 +167,14 @@ def type(self): @property def as_shapely_obj(self): """ - 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): """ - 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) @@ -437,10 +195,6 @@ def wrapper(*args, **kwargs): raise AttributeError(f"'GeoAccessor' object has no attribute '{item}'") -def plural_s(number): - return "" if number == 1 else "s" - - def ets_to_element_types(ets=None): ser = pd.Series(["bus", "line", "trafo", "trafo3w", "impedance"], index=["b", "l", "t", "t3", "i"]) diff --git a/pandapower/build_branch.py b/pandapower/build_branch.py index 39b61fbd45..0c83de70d2 100644 --- a/pandapower/build_branch.py +++ b/pandapower/build_branch.py @@ -12,7 +12,8 @@ import numpy as np 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 973fded175..c37076f640 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 914c70eb71..ec7fe45da6 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 27dd307571..c743659d9d 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,7 +265,7 @@ 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] @@ -283,13 +283,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 +332,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" @@ -577,7 +579,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 006d6c263d..b58b24e884 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 @@ -31,7 +30,7 @@ def __init__(self, cim_parser: cim_classes.CimParser, converter_classes: Dict, * self.cim_parser: cim_classes.CimParser = cim_parser self.kwargs = kwargs self.cim: Dict[str, Dict[str, pd.DataFrame]] = self.cim_parser.get_cim_dict() - self.net: pandapowerNet = create_empty_network() + self.net: pandapowerNet = pandapowerNet(name="CimConverter") 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 ff1eff1929..c8f4bd247d 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 408c0f78c3..823bc2ba70 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 diff --git a/pandapower/converter/cim/cim_tools.py b/pandapower/converter/cim/cim_tools.py index 7e9cb9f24d..2395fe332f 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 e3f3772bda..6b6af7ea07 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 ec29029c23..3e22e25594 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 e0414c2990..8626767506 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 import drop_buses, fuse_buses @@ -135,8 +136,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 eab2d71bac..b989d16cd5 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 1f5e909f78..ccc440cd45 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 157417bf44..aa94192b44 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 0688b677a9..96c3dc825d 100644 --- a/pandapower/converter/ucte/from_ucte.py +++ b/pandapower/converter/ucte/from_ucte.py @@ -7,7 +7,7 @@ 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') diff --git a/pandapower/converter/ucte/ucte_converter.py b/pandapower/converter/ucte/ucte_converter.py index 6c8b6e3d5c..d0ca57bdb9 100644 --- a/pandapower/converter/ucte/ucte_converter.py +++ b/pandapower/converter/ucte/ucte_converter.py @@ -11,8 +11,7 @@ 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: @@ -28,7 +27,6 @@ def __init__(self, slack_as_gen: bool = True): @staticmethod def _create_empty_network() -> pandapowerNet: - net: pandapowerNet = create_empty_network() new_columns: dict[str, dict] = { "trafo": { "tap2_min": int, @@ -44,6 +42,7 @@ def _create_empty_network() -> pandapowerNet: "line": {"amica_name": str}, "bus": {"ucte_country": str}, } + net: pandapowerNet = pandapowerNet(name="") 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 06018f3245..f9bc6b75be 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 d8b7829f36..e3653d4f61 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 64d0ff5c7e..a039d60c20 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 31832d7799..dc4e88f743 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 a3ab9879e1..9106793588 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 c3f83625a0..110900abec 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 1c270d77e9..379fa8b6ba 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 745c09ea0b..05fdeb662c 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 30185ba51d..c1f81ef6fe 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, diff --git a/pandapower/create/measurement_create.py b/pandapower/create/measurement_create.py index abe42f1842..15cc5eb74b 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 5b89561890..a629cf9510 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 19ce269324..71cc4759a4 100644 --- a/pandapower/create/network_create.py +++ b/pandapower/create/network_create.py @@ -3,56 +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 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__) - - -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 datastructure. - - OPTIONAL: - **f_hz** (float, 50.) - power system frequency in hertz - - **name** (string, None) - name for the network - - **sn_mva** (float, 1) - reference apparent power for per unit system - - **add_stdtypes** (boolean, True) - Includes standard types to net - - OUTPUT: - **net** (attrdict) - 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 +# from typing_extensions import deprecated +# +# from pandapower.auxiliary import pandapowerNet +# +# @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: +# 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 627d704ab7..a93a784c1f 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 10487b59da..f9ac3c63fa 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 216f7cdba9..b612256d81 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 0d34b56182..7e4b341a46 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 bae58b84ec..14d667adba 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 9504ebf0f8..7bc234dd06 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 0858308d12..89fc1ac505 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 df534075fb..33a1c5116e 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 8bb81e33d6..454ffaeaa4 100644 --- a/pandapower/diagnostic/diagnostic_functions.py +++ b/pandapower/diagnostic/diagnostic_functions.py @@ -8,8 +8,8 @@ import numpy as np import pandas as pd -from pandapower import ADict, select_subnet -from pandapower.toolbox import replace_xward_by_ward, get_connected_elements, create_continuous_bus_index +from pandapower.network import ADict, pandapowerNet +from pandapower.toolbox import replace_xward_by_ward, get_connected_elements, create_continuous_bus_index, select_subnet from pandapower.create import create_impedance, create_switch from pandapower.run import runpp from pandapower.auxiliary import ( @@ -17,7 +17,6 @@ OPFNotConverged, ControllerNotConverged, NetCalculationNotConverged, - pandapowerNet, ) from pandapower.diagnostic.diagnostic_helpers import ( DiagnosticFunction, diff --git a/pandapower/diagnostic/diagnostic_helpers.py b/pandapower/diagnostic/diagnostic_helpers.py index bc6cdfa6fe..cad5726718 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/ppc_conversion.py b/pandapower/estimation/ppc_conversion.py index ffc652a94e..ba1c62599a 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 08230f306b..a997aa4d50 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, \ @@ -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.') @@ -433,8 +428,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 40a566bd8b..4a844f0922 100644 --- a/pandapower/groups.py +++ b/pandapower/groups.py @@ -11,12 +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, create_group +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 @@ -960,12 +961,10 @@ def set_group_reference_column(net, index, reference_column, element_type=None): dupl_elements = list() 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: @@ -1036,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) @@ -1172,7 +1172,7 @@ def element_type_for_switch_et(element_type): if __name__ == "__main__": from pandapower import create_buses, create_gens, create_group, count_group_elements - net = create_empty_network() + net = pandapowerNet(name="groups") create_buses(net, 3, 10) create_gens(net, [0]*5, [10]*5) create_group(net, ["bus", "gen"], [[2, 1], [1, 2]], name="hello") diff --git a/pandapower/io_utils.py b/pandapower/io_utils.py index 7603c34821..f38b87f72c 100644 --- a/pandapower/io_utils.py +++ b/pandapower/io_utils.py @@ -66,8 +66,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 @@ -239,7 +239,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 @@ -485,8 +485,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: @@ -609,14 +611,14 @@ def DataFrame(self): df.loc[pd.isnull(df[col]), col] = None return df - @from_serializable.register(class_name='pandapowerNet', module_name='pandapower.auxiliary') - def pandapowerNet(self): + @from_serializable.register(class_name='pandapowerNet', module_name='pandapower.network') + 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) @@ -726,8 +728,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) @@ -757,15 +758,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 0000000000..60b8b64eaf --- /dev/null +++ b/pandapower/network.py @@ -0,0 +1,368 @@ +# 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 + +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: int = 1, add_stdtypes: bool = True, custom_data: dict = None + ) -> None: ... + + @overload + @deprecated("Calling pandapowerNet to copy a network is no longer supported. Use copy.deepcopy(net) instead.") + def __init__(self, net: "pandapowerNet") -> None: ... + + + def __init__( + self, + net: "pandapowerNet" = None, + name: str = None, + f_hz: float = 50., + sn_mva: float = 1., + add_stdtypes: bool = True, + custom_data: dict = None, + **kwargs + ) -> None: + # TODO: remove once deprecations are removed + if net is not None: + if name is not None or f_hz != 50. or sn_mva != 1. 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("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 = {"line": {}, "line_dc": {}, "trafo": {}, "trafo3w": {}, "fuse": {}} # TODO: this should not be set here. a function to return the empty std_types would be sensible + # 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", + "b2b_vsc" + ] + 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 = {} + + + @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 821716e51c..8145124af9 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 8902ad2d3f..0da35d882e 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 2dd7decec6..5c98829de2 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 caf3ec35fe..5c22a0cecb 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 @@ -157,7 +157,7 @@ def create_dickert_lv_feeders(net, busbar_index, feeders_range='short', linetype **case** (str, 'good') - case of supply mission, which can be ('good', 'average', 'worse') EXAMPLE: - >>> from pandapower.networks.dickert_lv_networks import create_dickert_lv_feeders, create_dickert_lv_networks + >>> from pandapower.networks.dickert_lv_networks import create_dickert_lv_feeders, create_dickert_lv_network >>> net = create_dickert_lv_network() >>> create_dickert_lv_feeders(net, busbar_index=1, customer='multiple') """ @@ -259,9 +259,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 c400a22b71..1212847a97 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 4a60aef054..9b155a7f50 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 2dd443ff8d..3f3fe7707c 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 @@ -70,7 +71,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 c88b5bb238..d9903fd386 100644 --- a/pandapower/plotting/collections.py +++ b/pandapower/plotting/collections.py @@ -37,7 +37,8 @@ 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, \ diff --git a/pandapower/plotting/geo.py b/pandapower/plotting/geo.py index 5673d3f1b4..8638d2fafe 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/plotly/traces.py b/pandapower/plotting/plotly/traces.py index f21e5d3fd9..44afa1a153 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/protection/example_grids.py b/pandapower/protection/example_grids.py index 1c95ba7180..623c12dc12 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 2d952cc15c..8a705054e8 100644 --- a/pandapower/protection/utility_functions.py +++ b/pandapower/protection/utility_functions.py @@ -15,7 +15,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_branch.py b/pandapower/results_branch.py index 56fcd9c122..b82e1b34a7 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 48c5a1702a..d53b9393e7 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 +) -> None: """ 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/test/api/test_auxiliary.py b/pandapower/test/api/test_auxiliary.py index b9cd269984..f35dbf8b9e 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 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( @@ -420,6 +425,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] @@ -453,9 +459,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") @@ -477,14 +484,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( @@ -520,8 +527,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 8f7ddffe17..18273fe850 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 2cb375b997..eb1d05c9e8 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,8 @@ def test_create_lines_optional_columns(): def test_create_line_alpha_temperature(): - net = create_empty_network() + net = pandapowerNet(name="test_create_line_alpha_temperature") b = create_buses(net, 5, 110) - l1 = create_line(net, 0, 1, 10, "48-AL1/8-ST1A 10.0") l2 = create_line( net, @@ -678,7 +676,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 +716,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 +761,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 +805,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 +821,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 +835,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 +887,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 +915,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 +941,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 +969,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 +1014,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 +1060,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) @@ -1118,7 +1116,7 @@ def test_create_transformers3w(): def test_create_transformers3w_from_parameters(): # setting params as single value - net = create_empty_network() + net = pandapowerNet(name="test_create_transformers3w_from_parameters 0") b1 = create_bus(net, 15) b2 = create_bus(net, 0.4) b3 = create_bus(net, 0.9) @@ -1171,7 +1169,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) @@ -1225,7 +1223,7 @@ def test_create_transformers3w_from_parameters(): def test_create_transformers3w_raise_errorexcept(): # standard - net = create_empty_network() + net = pandapowerNet(name="test_create_transformers3w_raise_errorexcept 0") b1 = create_bus(net, 15) b2 = create_bus(net, 0.4) b3 = create_bus(net, 0.9) @@ -1281,7 +1279,7 @@ def test_create_transformers3w_raise_errorexcept(): mag0_percent=0.3, 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) @@ -1368,7 +1366,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) @@ -1404,7 +1402,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) @@ -1526,7 +1524,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) @@ -1568,7 +1566,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) @@ -1618,7 +1616,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( @@ -1633,7 +1631,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) @@ -1690,7 +1688,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) @@ -1729,7 +1727,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) @@ -1780,7 +1778,7 @@ def test_create_sgens(): 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) @@ -1838,7 +1836,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) @@ -1891,7 +1889,7 @@ def test_create_gens(): 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 164b03367d..625a9190b2 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 b45a20a3e2..7b198e53de 100644 --- a/pandapower/test/api/test_file_io.py +++ b/pandapower/test/api/test_file_io.py @@ -13,13 +13,14 @@ 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.file_io import to_pickle, from_pickle, to_excel, from_excel, convert_format, from_json, to_json, \ - from_json_string, create_empty_network +from pandapower.file_io import ( + to_pickle, from_pickle, to_excel, from_excel, convert_format, 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 @@ -30,7 +31,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: @@ -69,6 +70,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")) @@ -463,16 +465,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)]) @@ -490,16 +482,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) @@ -510,7 +502,7 @@ def test_replace_elements_json_string(net_in): def test_json_generalized(): - general_net0 = pandapowerNet(pandapowerNet.create_dataframes({ + general_net0 = pandapowerNet(name='', custom_data=pandapowerNet.create_dataframes({ # structure data "df1": {'col1': np.dtype(object), 'col2': 'f8'}, @@ -523,8 +515,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 340a84cc93..f014f0674f 100644 --- a/pandapower/test/api/test_group.py +++ b/pandapower/test/api/test_group.py @@ -10,15 +10,21 @@ import pandas.testing as pdt import pytest -from pandapower import create_group_from_dict, create_group, set_group_out_of_service, set_group_in_service, \ - group_element_lists, attach_to_group, detach_from_group, compare_group_elements, runpp, group_res_p_mw, \ - group_res_power_per_bus, group_res_q_mvar, to_json, from_json_string, count_group_elements, isin_group, \ - element_associated_groups, create_empty_network, create_buses, create_lines, create_ext_grid, create_loads, \ - create_switches, elements_connected_to_group, group_element_index, groups_equal, set_group_reference_column, \ - remove_not_existing_group_members, ensure_lists_in_group_element_column, check_unique_group_rows, drop_lines, \ - drop_trafos, drop_buses, drop_elements_simple, drop_group_and_elements, return_group_as_net +from pandapower.create import ( + 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 ( + set_group_out_of_service, set_group_in_service, group_element_lists, attach_to_group, detach_from_group, + compare_group_elements, group_res_p_mw, group_res_power_per_bus, group_res_q_mvar, count_group_elements, isin_group, + element_associated_groups, elements_connected_to_group, group_element_index, groups_equal, + 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.toolbox import pp_elements, dataframes_equal +from pandapower.run import runpp +from pandapower.toolbox import pp_elements, dataframes_equal, drop_lines, drop_trafos, drop_buses, drop_elements_simple def typed_list(iterable, dtype): @@ -180,7 +186,7 @@ def test_remove_not_existing_group_members(): 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 @@ -414,7 +420,7 @@ def test_element_associated_groups(): 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 85dd8d9c64..54471ee40a 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 8bcab9698a..60dad31d98 100644 --- a/pandapower/test/conftest.py +++ b/pandapower/test/conftest.py @@ -7,14 +7,16 @@ import numpy as np import pytest -from pandapower import create_empty_network, create_bus, create_ext_grid, create_transformer, create_line, create_load, \ - create_gen, create_sgen +from pandapower import pandapowerNet +from pandapower.create import ( + create_bus, create_ext_grid, create_transformer, create_line, create_load, create_gen, create_sgen +) from pandapower.test.loadflow.result_test_network_generator import result_test_network_generator @pytest.fixture(scope="session") def simple_network(): - net = create_empty_network() + net = pandapowerNet(name='') 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/contingency/test_contingency.py b/pandapower/test/contingency/test_contingency.py index e84df4b7b7..21230809f8 100644 --- a/pandapower/test/contingency/test_contingency.py +++ b/pandapower/test/contingency/test_contingency.py @@ -15,13 +15,17 @@ from pandapower.run import set_user_pf_options, runpp from pandapower.toolbox.grid_modification import replace_ext_grid_by_gen from pandapower.toolbox.data_modification import reindex_elements, create_continuous_bus_index -from pandapower.contingency.contingency import _convert_trafo_phase_shifter, get_element_limits, run_contingency, \ - report_contingency_results, check_elements_within_limits, run_contingency_ls2g +from pandapower.contingency.contingency import ( + _convert_trafo_phase_shifter, get_element_limits, run_contingency, report_contingency_results, + check_elements_within_limits, 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, \ - create_transformer_from_parameters, create_load, create_lines_from_parameters, create_transformers_from_parameters, \ - create_gen +from pandapower.create import ( + create_buses, create_ext_grid, create_lines, create_transformer_from_parameters, create_load, + create_lines_from_parameters, create_transformers_from_parameters, create_gen +) from pandapower.timeseries.output_writer import OutputWriter from pandapower.timeseries.run_time_series import run_timeseries from pandapower.timeseries.data_sources.frame_data import DFData @@ -177,7 +181,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) @@ -239,7 +243,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 f28b1380c3..23c864d1fa 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 import reindex_buses, create_continuous_bus_index +from pandapower.toolbox 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 725b2a99c8..235ab1d01b 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 92e4e6828c..b12b707095 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 1566090ba1..068b464857 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 ed94ca8a9b..7cb032cc93 100644 --- a/pandapower/test/control/test_stactrl.py +++ b/pandapower/test/control/test_stactrl.py @@ -1,29 +1,32 @@ # -*- coding: utf-8 -*- - +import copy # 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 logging +import pytest +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) @@ -34,8 +37,8 @@ def simple_test_net(): return net -def test_voltctrl(): - 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", output_element_index=[0], @@ -48,8 +51,8 @@ def test_voltctrl(): assert (abs(net.res_bus.loc[1, "vm_pu"] - 1.02) < tol) -def test_voltctrl_droop(): - net = simple_test_net() +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], @@ -65,8 +68,8 @@ def test_voltctrl_droop(): assert (abs(net.res_bus.loc[1, "vm_pu"] - (1.02 + net.res_trafo.loc[0, "q_hv_mvar"] / 40)) < tol) -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", output_element_index=[0], output_element_in_service=[True], @@ -79,8 +82,8 @@ def test_qctrl(): assert (abs(net.res_line.loc[0, "q_to_mvar"] - 1.0) < tol) -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(net, name="BSC1", ctrl_in_service=True, output_element="sgen", output_variable="q_mvar", @@ -94,8 +97,8 @@ def test_qctrl_Imp_Input(): assert (abs(net.res_impedance.loc[0, "q_to_mvar"] - 1.0) < tol) -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, @@ -113,8 +116,8 @@ def test_qctrl_droop(): assert (abs(net.controller.object[0].input_sign[0] * net.res_line.loc[0, "q_from_mvar"] - ( net.controller.object[1].q_set_mvar_bsc + (net.res_bus.loc[1, "vm_pu"] - 0.995) * 40)) < tol) -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 @@ -127,7 +130,7 @@ def test_qlimits_qctrl(): runpp(net, run_control=True, enforce_q_lims=True) assert (abs(net.res_sgen.loc[0, "q_mvar"] - 0.5) < tol) - 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 @@ -141,8 +144,9 @@ def test_qlimits_qctrl(): runpp(net, run_control=True, enforce_q_lims=True) 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 @@ -155,7 +159,7 @@ def test_qlimits_voltctrl(): runpp(net, run_control=True, enforce_q_lims=True) assert (abs(net.res_sgen.loc[0, "q_mvar"] - 0.7) < tol) - 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 @@ -170,10 +174,11 @@ def test_qlimits_voltctrl(): runpp(net, run_control=True, enforce_q_lims=True) assert (abs(net.res_sgen.loc[0, "q_mvar"] + 0.8) < tol) -def test_qlimits_with_capability_curve(): + +def test_qlimits_with_capability_curve(simple_test_net): for v in linspace(start=0.98, stop=1.02, num=5, dtype=float64): for p in linspace(start=-2.5, stop=2.5, num=10, dtype=float64): - net = simple_test_net() + net = copy.deepcopy(simple_test_net) create_sgen(net, 2, p_mw=0., sn_mva=0, name="sgen2") tol = 1e-6 # create q characteristics table @@ -196,7 +201,8 @@ def test_qlimits_with_capability_curve(): runpp(net, run_control=True, enforce_q_lims=True) assert -0.1 <= net.res_sgen.loc[0, 'q_mvar'] <= 0.1 - net = simple_test_net() # test once more when there is no reactive power capability curve + # 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], diff --git a/pandapower/test/control/test_tap_dependent_impedance.py b/pandapower/test/control/test_tap_dependent_impedance.py index 13763db6c0..90372d4971 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 f4e89f5680..5d564eb269 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 836b86588b..a94f69271d 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 0176827772..b3d5d7a083 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 4be484a341..89b76ccca3 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 14850abf08..0a489af139 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.) @@ -99,7 +102,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.) @@ -156,7 +159,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.) @@ -201,7 +204,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.) @@ -490,7 +493,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) @@ -541,7 +544,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") @@ -571,7 +574,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) @@ -618,7 +621,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) @@ -663,7 +666,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.) @@ -754,7 +757,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) @@ -796,7 +799,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.) @@ -856,7 +859,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.) diff --git a/pandapower/test/grid_equivalents/test_get_equivalent.py b/pandapower/test/grid_equivalents/test_get_equivalent.py index a0a1ba03a3..ba01e13e19 100644 --- a/pandapower/test/grid_equivalents/test_get_equivalent.py +++ b/pandapower/test/grid_equivalents/test_get_equivalent.py @@ -8,13 +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, create_group, compare_group_elements, group_row, \ - set_group_reference_column, count_group_elements, group_element_index +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 @@ -26,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 06c75ae071..b8fe567daf 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 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 e820fc1667..6bb863dd6d 100644 --- a/pandapower/test/loadflow/result_test_network_generator.py +++ b/pandapower/test/loadflow/result_test_network_generator.py @@ -4,10 +4,12 @@ # and Energy System Technology (IEE), Kassel. All rights reserved. from pandapower.auxiliary import get_free_id -from pandapower.create import create_empty_network, create_load, create_bus, create_switch, create_ext_grid, \ - create_gen, create_sgen, create_transformer_from_parameters, create_ward, create_xward, \ - create_line_from_parameters, create_transformer3w_from_parameters, create_impedance, create_shunt, \ - create_shunt_as_capacitor +from pandapower.create import ( + create_load, create_bus, create_switch, create_ext_grid, create_gen, create_sgen, create_ward, create_xward, + create_transformer_from_parameters, create_line_from_parameters, create_transformer3w_from_parameters, + create_impedance, create_shunt, create_shunt_as_capacitor +) +from pandapower.network import pandapowerNet from pandapower.test.helper_functions import add_grid_connection, create_test_line @@ -45,7 +47,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='', sn_mva=sn_mva) yield add_test_line(net) yield add_test_load_sgen(net) yield add_test_load_sgen_split(net) @@ -76,7 +78,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='', sn_mva=sn_mva) yield add_test_line(net) yield add_test_load_sgen(net) yield add_test_load_sgen_split(net) @@ -476,8 +478,8 @@ def add_test_two_open_switches_on_deactive_line(net): if __name__ == '__main__': from pandapower.test.consistency_checks import runpp_with_consistency_checks - from pandapower import LoadflowNotConverged - + from pandapower import LoadflowNotConverged, pandapowerNet + for net in result_test_network_generator(): try: runpp_with_consistency_checks(net, enforce_q_lims=True, numba=True) diff --git a/pandapower/test/loadflow/test_dist_slack.py b/pandapower/test/loadflow/test_dist_slack.py index 89063881a5..177b1e075e 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 e3340c62fc..c769461189 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 abc379d34a..baec7ddc4f 100644 --- a/pandapower/test/loadflow/test_facts_b2b_vsc.py +++ b/pandapower/test/loadflow/test_facts_b2b_vsc.py @@ -4,10 +4,11 @@ import pytest from pandapower import create_line_dc_from_parameters -from pandapower.create import create_buses, create_bus, create_empty_network, create_line_from_parameters, \ - create_load, create_ext_grid, create_bus_dc, create_b2b_vsc, create_line_dc, create_vsc, create_source_dc, \ - create_load_dc - +from pandapower.create import ( + create_buses, create_bus, create_line_from_parameters, create_load, create_ext_grid, create_bus_dc, create_b2b_vsc, + create_line_dc, create_source_dc, create_load_dc +) +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 +31,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 +82,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 +113,7 @@ def test_b2b_vsc_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_b2b_vsc_shorted") # AC part ext_bus = 10 @@ -162,7 +163,7 @@ def test_b2b_vsc_with_long_lines(): | |--------| | +-------+ +-------+ """ - net = create_empty_network() + net = pandapowerNet(name="test_b2b_vsc_with_long_lines") # AC part create_buses(net, 4, 110, geodata=[(0, 0), (100, 0), (200, 0), (300, 0)]) @@ -203,7 +204,7 @@ def test_grounded_b2b_vsc(): | |--------| | +-------+ +-------+ """ - net = create_empty_network() + net = pandapowerNet(name="test_grounded_b2b_vsc") # 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 9e0e65241e..a0ba866d4d 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) @@ -121,7 +122,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 f49740bfc2..2eb29b5079 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 56273527b7..e379027b4f 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 47c837e152..367dc2e144 100644 --- a/pandapower/test/loadflow/test_facts_vsc.py +++ b/pandapower/test/loadflow/test_facts_vsc.py @@ -11,14 +11,15 @@ import numpy as np import pytest -from pandapower import pp_dir, create_b2b_vsc, LoadflowNotConverged +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_dc, \ - 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 - +from pandapower.create import ( + 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 +) 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 @@ -94,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) @@ -118,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) @@ -138,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) @@ -158,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) @@ -184,7 +185,7 @@ def test_vsc_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) @@ -209,7 +210,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) @@ -254,7 +255,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) @@ -289,7 +290,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) @@ -327,7 +328,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) @@ -352,7 +353,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) @@ -377,7 +378,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) @@ -398,7 +399,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) @@ -419,7 +420,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) @@ -460,7 +461,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) @@ -489,7 +490,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) @@ -513,7 +514,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) @@ -544,7 +545,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) @@ -577,7 +578,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) @@ -606,7 +607,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) @@ -637,7 +638,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) @@ -664,7 +665,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) @@ -696,7 +697,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) @@ -728,7 +729,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) @@ -760,7 +761,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) @@ -791,7 +792,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) @@ -822,7 +823,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) @@ -853,7 +854,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) @@ -885,7 +886,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) @@ -915,7 +916,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) @@ -955,7 +956,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) @@ -984,7 +985,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) @@ -1019,7 +1020,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) @@ -1047,7 +1048,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)]) @@ -1086,7 +1087,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) @@ -1129,7 +1130,7 @@ def test_simple_2vsc_hvdc2(): def test_b2b_vsc_1(): - net = create_empty_network() + net = pandapowerNet(name="test_b2b_vsc_1") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1154,7 +1155,7 @@ def test_b2b_vsc_1(): def test_multiple_b2b_vsc_1(): - net = create_empty_network() + net = pandapowerNet(name="test_multiple_b2b_vsc_1") # AC part create_buses(net, 5, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1195,7 +1196,7 @@ def test_multiple_b2b_vsc_1(): def test_tres_amigas_b2b_vsc_1(): - net = create_empty_network() + net = pandapowerNet(name="test_tres_amigas_b2b_vsc_1") # AC part create_buses(net, 5, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1228,7 +1229,7 @@ def test_tres_amigas_b2b_vsc_1(): def test_tres_amigas_b2b_vsc_2(): - net = create_empty_network() + net = pandapowerNet(name="test_tres_amigas_b2b_vsc_2") # AC part create_buses(net, 5, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1261,7 +1262,7 @@ def test_tres_amigas_b2b_vsc_2(): def test_b2b_vsc_2(): - net = create_empty_network() + net = pandapowerNet(name="test_b2b_vsc_2") # AC part create_buses(net, 4, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1285,7 +1286,7 @@ def test_b2b_vsc_2(): def test_b2b_vsc_2a(): - net = create_empty_network() + net = pandapowerNet(name="test_b2b_vsc_2a") # AC part create_buses(net, 4, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1308,7 +1309,7 @@ def test_b2b_vsc_2a(): def test_b2b_vsc_3(): - net = create_empty_network() + net = pandapowerNet(name="test_b2b_vsc_3") # AC part create_buses(net, 4, 110) create_line_from_parameters(net, 0, 1, 30, 0.0487, 0.13823, 160, 0.664) @@ -1336,7 +1337,7 @@ def test_b2b_vsc_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) @@ -1361,7 +1362,7 @@ def test_b2b_vsc_4(): def test_b2b_vsc_5(): - net = create_empty_network() + net = pandapowerNet(name="test_b2b_vsc_5") # AC part create_buses(net, 5, 110) create_line_from_parameters(net, 1, 3, 30, 0.0487, 0.13823, 160, 0.664) @@ -1387,7 +1388,7 @@ def test_b2b_vsc_5(): def test_b2b_vsc_6(): - net = create_empty_network() + net = pandapowerNet(name="test_b2b_vsc_6") # AC part create_buses(net, 3, 110) create_line_from_parameters(net, 1, 2, 30, 0.0487, 0.13823, 160, 0.664) @@ -1409,7 +1410,7 @@ def test_b2b_vsc_6(): def test_b2b_vsc_7(): - net = create_empty_network() + net = pandapowerNet(name="test_b2b_vsc_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? @@ -1428,7 +1429,7 @@ def test_b2b_vsc_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) @@ -1460,7 +1461,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) @@ -1489,7 +1490,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) @@ -1527,7 +1528,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) @@ -1630,7 +1631,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) @@ -1660,7 +1661,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 +1719,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) @@ -1747,7 +1748,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) @@ -1775,7 +1776,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) @@ -1803,7 +1804,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) @@ -1828,7 +1829,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 31fe066f9e..c66b7c71be 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") b1, b2, ln = 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 7c41ba988d..a19380be05 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) @@ -245,18 +247,16 @@ 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): # from pandapower.test.loadflow.test_results import * - - 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) @@ -637,9 +637,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, i_tol=1e-6, s_tol=5e-3, l_tol=1e-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"] @@ -712,7 +713,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) @@ -731,7 +732,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 8241f3171e..834f34506f 100644 --- a/pandapower/test/loadflow/test_rundcpp.py +++ b/pandapower/test/loadflow/test_rundcpp.py @@ -9,11 +9,12 @@ 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 +from pandapower.auxiliary import LoadflowNotConverged +from pandapower.create import ( + create_bus, create_transformer, create_transformer3w, create_load, create_xward, create_switch, create_ext_grid +) +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 @@ -21,7 +22,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") @@ -29,7 +30,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.) @@ -60,7 +61,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) @@ -84,7 +85,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) diff --git a/pandapower/test/loadflow/test_runpp.py b/pandapower/test/loadflow/test_runpp.py index 9016696f6c..1421e8f018 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 @@ -51,7 +54,7 @@ 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) @@ -133,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") b1, b2, l1 = 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") @@ -147,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") b1, b2, l1 = add_grid_connection(net, vn_kv=110.) b3 = create_bus(net, vn_kv=20.) b4 = create_bus(net, vn_kv=10.) @@ -184,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 _u in range(4): create_bus(net, vn_kv=.4) @@ -235,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) @@ -261,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) @@ -279,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) @@ -321,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, l1 = add_grid_connection(net) b3 = create_bus(net, vn_kv=20.) l2 = create_test_line(net, b2, b3) @@ -333,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) @@ -453,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") b1, b2, l1 = add_grid_connection(net) b = create_bus(net, vn_kv=135) l = create_line(net, b2, b, 0.1, std_type="NAYY 4x150 SE") @@ -463,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") @@ -473,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") b1, b2, l1 = add_grid_connection(net) # number of buses to create @@ -749,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) @@ -774,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") @@ -802,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") @@ -840,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) @@ -870,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') @@ -897,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) @@ -962,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) @@ -1022,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) @@ -1053,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) @@ -1074,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) @@ -1129,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) @@ -1168,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) @@ -1186,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) @@ -1200,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, @@ -1243,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 @@ -1276,7 +1279,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') @@ -1354,7 +1357,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) @@ -1384,7 +1387,7 @@ def test_results_for_line_temperature(): def test_tap_dependent_impedance(): - net = create_empty_network() + net = pandapowerNet(name="test_tap_dependent_impedance") b1, b2, l1 = 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") @@ -1443,7 +1446,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") b1, b2, l1 = add_grid_connection(net) b3 = create_bus(net, vn_kv=0.4) b4 = create_bus(net, vn_kv=0.4) @@ -1611,7 +1614,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) @@ -1624,7 +1627,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) @@ -1636,7 +1639,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) diff --git a/pandapower/test/loadflow/test_runpp_3ph.py b/pandapower/test/loadflow/test_runpp_3ph.py index a9650d4302..04203cb96d 100644 --- a/pandapower/test/loadflow/test_runpp_3ph.py +++ b/pandapower/test/loadflow/test_runpp_3ph.py @@ -12,19 +12,20 @@ from pandapower.networks import create_cigre_network_mv from pandapower import pp_dir -from pandapower 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, create_asymmetric_load, \ - create_line_from_parameters, create_load, create_transformer_from_parameters, create_sgen, create_asymmetric_sgen, \ - create_shunt, create_gen, create_switch +from pandapower.create import ( + create_bus, create_ext_grid, create_line, create_asymmetric_load, create_line_from_parameters, create_load, + create_transformer_from_parameters, create_sgen, create_asymmetric_sgen, create_shunt, create_gen, 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 from pandapower.test.consistency_checks import runpp_3ph_with_consistency_checks, runpp_with_consistency_checks, \ trafo_currents_consistent_3ph from pandapower.test.loadflow.PF_Results import get_PF_Results -from pandapower.toolbox import dataframes_equal +from pandapower.toolbox import dataframes_equal, replace_line_by_impedance from pandapower.test.conftest import result_test_network from pandapower.test.helper_functions import add_grid_connection from pandapower.test.loadflow.test_runpp import get_isolated @@ -34,7 +35,7 @@ def 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="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, @@ -145,7 +146,7 @@ def test_2bus_network_one_of_two_ext_grids_oos(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 # ============================================================================= @@ -244,7 +245,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) @@ -277,7 +278,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) @@ -486,7 +487,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") @@ -502,7 +503,7 @@ def test_trafo_asym_currents__high_neg_seq(): _test_trafo_shifts(net, rtol=1e-9) def test_2trafos(): - net = create_empty_network() + 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) @@ -513,7 +514,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., in_service=True, index=2, name="busx") @@ -549,7 +550,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) @@ -590,7 +591,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) @@ -643,7 +644,7 @@ def test_3ph_enforce_q_lims(result_test_network): @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 @@ -706,7 +707,7 @@ def test_connectivity_check_island_without_pv_bus(): @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 306831b0cd..5375c810fe 100644 --- a/pandapower/test/loadflow/test_runpp_3ph_n_line.py +++ b/pandapower/test/loadflow/test_runpp_3ph_n_line.py @@ -7,8 +7,8 @@ import numpy as np import pytest -from pandapower 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 @@ -16,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 c900705434..023b75485b 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 3ccf168079..530e1d05a7 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.) @@ -254,17 +255,16 @@ def test_transformer_phase_shift_complex(): 'lv': (0.9603, -31.1306) } for side in ["hv", "lv"]: - 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) @@ -293,7 +293,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.) @@ -334,7 +334,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") @@ -365,7 +365,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) @@ -389,7 +389,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.) @@ -412,7 +412,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) slack, hv, ln = add_grid_connection(net, zone="test_trafo3w") for _ in range(2): @@ -475,7 +475,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.) @@ -495,7 +495,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.) @@ -520,7 +520,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 31084d043a..9de3507e62 100644 --- a/pandapower/test/loadflow/test_tdpf.py +++ b/pandapower/test/loadflow/test_tdpf.py @@ -9,11 +9,16 @@ import pytest 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 @@ -38,7 +43,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]) @@ -107,7 +112,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.1188 # std_type = "490-AL1/64-ST1A 220.0" @@ -395,7 +400,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') @@ -444,7 +449,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') @@ -492,7 +497,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 b1e0daafbf..d56535e464 100644 --- a/pandapower/test/networks/test_kerber_networks.py +++ b/pandapower/test/networks/test_kerber_networks.py @@ -8,11 +8,14 @@ import pytest -from pandapower.create import create_empty_network, create_bus -from pandapower.networks.kerber_networks import _create_empty_network_with_transformer, \ - _add_lines_and_loads, _add_lines_with_branched_loads, create_kerber_landnetz_freileitung_1, \ - create_kerber_landnetz_freileitung_2, create_kerber_dorfnetz, create_kerber_landnetz_kabel_1, \ - create_kerber_vorstadtnetz_kabel_2, create_kerber_vorstadtnetz_kabel_1, create_kerber_landnetz_kabel_2 +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, _add_lines_with_branched_loads, + create_kerber_landnetz_freileitung_1, create_kerber_landnetz_freileitung_2, create_kerber_dorfnetz, + create_kerber_landnetz_kabel_1, create_kerber_vorstadtnetz_kabel_2, create_kerber_vorstadtnetz_kabel_1, + create_kerber_landnetz_kabel_2 +) from pandapower.run import runpp @@ -33,7 +36,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=.4) n_lines_add = int(10. * rd.random() + 1) l_per_line = 0.10 * rd.random() @@ -50,7 +53,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=.4) n_lines_add = int(10. * 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 ac35bd41a0..d2999636df 100644 --- a/pandapower/test/opf/test_basic.py +++ b/pandapower/test/opf/test_basic.py @@ -9,9 +9,12 @@ 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 @@ -27,7 +30,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, @@ -44,7 +47,7 @@ def simplest_grid(): @pytest.fixture 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.) @@ -84,7 +87,7 @@ def net_3w_trafo_opf(): @pytest.fixture 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, @@ -106,7 +109,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, @@ -208,7 +211,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, @@ -243,7 +246,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) @@ -289,7 +292,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) @@ -336,7 +339,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) @@ -390,7 +393,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) @@ -440,7 +443,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, @@ -465,7 +468,7 @@ def test_unconstrained_line(): def test_trafo3w_loading(): - net = create_empty_network() + net = pandapowerNet(name="test_trafo3w_loading") b1, b2, l1 = 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_line_loading = 13 # 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 4f6738a803..eca66d1161 100644 --- a/pandapower/test/opf/test_check_opf_data.py +++ b/pandapower/test/opf/test_check_opf_data.py @@ -1,8 +1,11 @@ import pytest from numpy import nan -from pandapower.create import create_bus, create_empty_network, create_buses, create_transformer, create_line, \ - create_ext_grid, create_dcline, create_load, create_gen, create_sgen +from pandapower.create import ( + create_bus, create_buses, create_transformer, create_line, create_ext_grid, create_dcline, create_load, create_gen, + create_sgen +) +from pandapower.network import pandapowerNet from pandapower.opf.validate_opf_input import _check_necessary_opf_parameters import logging @@ -11,7 +14,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 1a22ba013d..2df36c2b61 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 562388d4d9..7ff1b87c84 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 cc06a031a1..8a0e3ffe50 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 8b8015dc6f..2b04e9687a 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 edbb27ff0f..b198a95e00 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 cc11e84953..a4bbdc9705 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 383aec1477..aa10fb7dc4 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 a04a78a0a0..b63b0ec108 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 b11, b12, l11 = add_grid_connection(net, vn_kv=110.) b21, b22, l21 = 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, l1 = 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 41b794f687..757820134a 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 be2263aa94..0f2c26f17b 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 @@ -273,7 +275,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)]) @@ -335,7 +337,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", @@ -369,7 +371,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") @@ -427,7 +429,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 5301e27d5e..24ec971672 100644 --- a/pandapower/test/protection/test_oc_relay.py +++ b/pandapower/test/protection/test_oc_relay.py @@ -1,7 +1,7 @@ import numpy as np -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 @@ -117,7 +117,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 b132f4cce4..1b739b66dc 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 350098e9d1..d66f453f0c 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 1704a3d560..d0a5f251b2 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 68c710288c..7f38dea4e2 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 69a3d453a2..069fc99534 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 0181432ae1..1a777de5a0 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 738d081823..0f79e4878b 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) diff --git a/pandapower/test/shortcircuit/test_ring.py b/pandapower/test/shortcircuit/test_ring.py index b288ac91fe..9a32acff4f 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 979bf308f6..1ef2c0b755 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 0e728ab95d..9ea880a2f8 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 73bbe1f654..08e55467f1 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 af4de4068e..29156dd473 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 8b8aa81716..ac1ba19c22 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 a081d808aa..ea1df4c048 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 5583635858..19b98fe406 100644 --- a/pandapower/test/timeseries/test_timeseries.py +++ b/pandapower/test/timeseries/test_timeseries.py @@ -12,8 +12,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 @@ -24,7 +27,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) @@ -114,7 +117,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 1001ec1671..7fe1c39564 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 @@ -97,7 +98,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 30b5c7b11d..072edfb3c8 100644 --- a/pandapower/test/toolbox/test_element_selection.py +++ b/pandapower/test/toolbox/test_element_selection.py @@ -6,13 +6,17 @@ import pandas as pd import pytest -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 +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.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 +) def test_get_element_indices(): @@ -27,7 +31,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) @@ -60,7 +64,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) @@ -93,7 +97,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) @@ -141,7 +145,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 eb802020db..e04bbcb788 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): def test_drop_inactive_elements(): for service in (False, True): - 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(): 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(): 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 1e525dc53d..33829f85d3 100644 --- a/pandapower/test/toolbox/test_result_info.py +++ b/pandapower/test/toolbox/test_result_info.py @@ -6,15 +6,21 @@ import numpy as np import pytest -from pandapower import create_empty_network, create_buses, create_ext_grid, create_gen, create_load, create_sgen, \ - create_storage, create_dcline, create_line, create_transformer, opf_task, runpp, overloaded_lines, create_bus, \ - create_poly_cost, create_pwl_cost, violated_buses, clear_result_tables +from pandapower.run import runpp +from pandapower.create import ( + 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.toolbox import dataframes_equal, res_power_columns +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 @@ -78,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 2b690155cf..c0d1a04b12 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 @@ -24,7 +24,7 @@ def test_line(): - net = create_empty_network() + net = pandapowerNet(name="test_line") add_test_line(net) line, open_loop_line, oos_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(): def test_trafo(): - net = create_empty_network() + net = pandapowerNet(name="test_trafo") add_test_trafo(net) for library in libraries: @@ -115,7 +115,7 @@ def test_trafo(): def test_trafo3w(): for library in libraries: - net = create_empty_network() + net = pandapowerNet(name="test_trafo3w") add_test_trafo3w(net) t1, t2 = net.trafo3w.index @@ -178,7 +178,7 @@ def test_trafo3w_impedances(network_with_trafo3ws): def test_impedance(): - net = create_empty_network() + net = pandapowerNet(name="test_impedance") add_test_impedance(net) for library in libraries: @@ -207,7 +207,7 @@ def test_impedance(): def test_bus_bus_switches(): - net = create_empty_network() + net = pandapowerNet(name="test_bus_bus_switches") add_test_bus_bus_switch(net) for library in libraries: @@ -238,7 +238,7 @@ def test_bus_bus_switches(): 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,7 +247,7 @@ def test_nogo(): def test_branch_impedance_unit(): - net = create_empty_network() + net = pandapowerNet(name="test_nogo") with pytest.raises(ValueError) as exception_info: mg = create_nxgraph(net, branch_impedance_unit="p.u.") assert str(exception_info.value) == "branch impedance unit can be either 'ohm' or 'pu'" @@ -256,7 +256,7 @@ def test_branch_impedance_unit(): @pytest.mark.xfail(reason="This test fails, since graph_tool bus indices must be a range(0, n_buses). " "If a bus is removed, graph-tool is not working.") 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 f026c7f3fe..84aa111cd5 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 0156bb3e35..a96cffb697 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 e66183140d..4dc84242e7 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 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 @@ -428,7 +428,7 @@ def set_data_type_of_columns_to_default(net): No output; 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/grid_modification.py b/pandapower/toolbox/grid_modification.py index da081fc90f..05b336c17a 100644 --- a/pandapower/toolbox/grid_modification.py +++ b/pandapower/toolbox/grid_modification.py @@ -9,19 +9,22 @@ 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, \ - create_load, create_shunt, create_bus, create_sgen, create_storage, create_ward +from pandapower.create import ( + create_switch, create_line_from_parameters, create_impedance, create_gen, create_ext_grid, create_load, + create_shunt, create_bus, create_sgen, create_storage, create_ward +) from pandapower.run import runpp -from pandapower.toolbox.element_selection import branch_element_bus_dict, element_bus_tuples, pp_elements, \ - get_connected_elements, get_connected_elements_dict, next_bus +from pandapower.toolbox.element_selection import ( + branch_element_bus_dict, element_bus_tuples, pp_elements, get_connected_elements, get_connected_elements_dict +) from pandapower.toolbox.result_info import clear_result_tables from pandapower.toolbox.data_modification import reindex_elements -from pandapower.groups import detach_from_groups, attach_to_group, attach_to_groups, isin_group, \ - check_unique_group_rows, element_associated_groups +from pandapower.groups import ( + detach_from_groups, attach_to_group, attach_to_groups, check_unique_group_rows, element_associated_groups +) import logging @@ -65,7 +68,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"] @@ -138,7 +141,7 @@ 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) From 9258adab95e8edc72cd7a34c8d868017d270ee27 Mon Sep 17 00:00:00 2001 From: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Date: Tue, 13 Jan 2026 10:26:25 +0100 Subject: [PATCH 02/21] fixed loading of old networks --- pandapower/io_utils.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pandapower/io_utils.py b/pandapower/io_utils.py index f38b87f72c..64e105f4f7 100644 --- a/pandapower/io_utils.py +++ b/pandapower/io_utils.py @@ -611,7 +611,9 @@ 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 to_pandapower_net(self): if isinstance(self.obj, str): # backwards compatibility from pandapower import from_json_string From 1b64066a53a5ba20bcd31be07b0f102887c1e0e8 Mon Sep 17 00:00:00 2001 From: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Date: Tue, 13 Jan 2026 10:33:25 +0100 Subject: [PATCH 03/21] reenabled deprecated create_empty_network --- pandapower/create/network_create.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pandapower/create/network_create.py b/pandapower/create/network_create.py index 71cc4759a4..a325e55db7 100644 --- a/pandapower/create/network_create.py +++ b/pandapower/create/network_create.py @@ -3,12 +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 typing_extensions import deprecated -# -# from pandapower.auxiliary import pandapowerNet -# -# @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: -# return pandapowerNet(name=name, f_hz=f_hz, sn_mva=sn_mva, add_stdtypes=add_stdtypes) +from typing_extensions import deprecated + +from pandapower.auxiliary import pandapowerNet + +@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: + return pandapowerNet(name=name, f_hz=f_hz, sn_mva=sn_mva, add_stdtypes=add_stdtypes) From ba5974fa3a1a44fbe232cd8d3a22c227bd6d0a92 Mon Sep 17 00:00:00 2001 From: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Date: Tue, 13 Jan 2026 10:34:33 +0100 Subject: [PATCH 04/21] fixed incorrect type in pandapowerNet overload declaration --- pandapower/network.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandapower/network.py b/pandapower/network.py index 60b8b64eaf..e9be7e57b3 100644 --- a/pandapower/network.py +++ b/pandapower/network.py @@ -233,7 +233,7 @@ class pandapowerNet(ADict): """ @overload def __init__( - self, name: str, f_hz: float = 50., sn_mva: int = 1, add_stdtypes: bool = True, custom_data: dict = None + self, name: str, f_hz: float = 50., sn_mva: float = 1., add_stdtypes: bool = True, custom_data: dict = None ) -> None: ... @overload From 1c9d32e125c197924c95ef2fef3b466b0d7b0d89 Mon Sep 17 00:00:00 2001 From: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Date: Tue, 13 Jan 2026 11:32:56 +0100 Subject: [PATCH 05/21] fixed formatting issues --- pandapower/create/load_create.py | 2 +- pandapower/test/loadflow/test_facts.py | 4 ++-- pandapower/test/loadflow/test_facts_tcsc.py | 8 ++++---- pandapower/test/loadflow/test_results.py | 4 ++-- pandapower/test/loadflow/test_runpp.py | 8 +++++--- pandapower/test/loadflow/test_runpp_3ph.py | 6 +++--- .../test/loadflow/test_runpp_3ph_n_line.py | 2 +- pandapower/test/shortcircuit/test_1ph.py | 6 +++--- .../test/shortcircuit/test_all_currents.py | 20 +++++++++---------- pandapower/test/shortcircuit/test_gen.py | 4 ++-- .../test/shortcircuit/test_iec60909_4.py | 8 ++++---- .../test/shortcircuit/test_impedance.py | 2 +- .../shortcircuit/test_min_branch_results.py | 2 +- pandapower/test/shortcircuit/test_motor.py | 5 ++--- pandapower/test/shortcircuit/test_ring.py | 2 +- .../test/shortcircuit/test_sc_voltage.py | 2 +- 16 files changed, 43 insertions(+), 42 deletions(-) diff --git a/pandapower/create/load_create.py b/pandapower/create/load_create.py index c1f81ef6fe..a9854efaa5 100644 --- a/pandapower/create/load_create.py +++ b/pandapower/create/load_create.py @@ -431,7 +431,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/test/loadflow/test_facts.py b/pandapower/test/loadflow/test_facts.py index c769461189..707013cee6 100644 --- a/pandapower/test/loadflow/test_facts.py +++ b/pandapower/test/loadflow/test_facts.py @@ -24,7 +24,7 @@ def _many_tcsc_test_net(): xl = 0.2 xc = -15 - net = pandapowerNet(name="_many_tcsc_test_net",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) @@ -168,7 +168,7 @@ def test_multiple_facts(): xl = 0.2 xc = -15 - net = pandapowerNet(name="test_multiple_facts",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) diff --git a/pandapower/test/loadflow/test_facts_tcsc.py b/pandapower/test/loadflow/test_facts_tcsc.py index e379027b4f..3cb2f05db6 100644 --- a/pandapower/test/loadflow/test_facts_tcsc.py +++ b/pandapower/test/loadflow/test_facts_tcsc.py @@ -101,7 +101,7 @@ def test_tcsc_simple3(): # (0)-------------(1)-----------------(3)-> # |--(TCSC)--(2)------| - net = pandapowerNet(name="test_tcsc_simple3",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) @@ -135,7 +135,7 @@ def test_tcsc_simple3_slack(): # (0)-------------(1)-----------------(3)-> # |-----(TCSC)--(2)-------------------| - net = pandapowerNet(name="test_tcsc_simple3_slack",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) @@ -171,7 +171,7 @@ def test_compare_to_impedance(): # (0)-------------(1)-----------------(3)-> # |--(TCSC)--(2)------| - net = pandapowerNet(name="test_compare_to_impedance",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) @@ -236,7 +236,7 @@ def test_tcsc_case_study(): def test_tcsc_simple5(): - net = pandapowerNet(name="test_tcsc_simple5",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_results.py b/pandapower/test/loadflow/test_results.py index a19380be05..5f974831e6 100644 --- a/pandapower/test/loadflow/test_results.py +++ b/pandapower/test/loadflow/test_results.py @@ -713,7 +713,7 @@ def test_open(result_test_network): def test_impedance_g_b(): - net = pandapowerNet(name="test_impedance_g_b",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) @@ -732,7 +732,7 @@ def test_impedance_g_b(): def test_trafo_unequal_r_x_hv_lv(): - net = pandapowerNet(name="test_trafo_unequal_r_x_hv_lv",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_runpp.py b/pandapower/test/loadflow/test_runpp.py index 1421e8f018..315e2f2be5 100644 --- a/pandapower/test/loadflow/test_runpp.py +++ b/pandapower/test/loadflow/test_runpp.py @@ -1654,9 +1654,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) diff --git a/pandapower/test/loadflow/test_runpp_3ph.py b/pandapower/test/loadflow/test_runpp_3ph.py index 04203cb96d..9a2a9f03d9 100644 --- a/pandapower/test/loadflow/test_runpp_3ph.py +++ b/pandapower/test/loadflow/test_runpp_3ph.py @@ -35,7 +35,7 @@ def net(): v_base = 110 # 110kV Base Voltage k_va_base = 100 # 100 MVA - net = pandapowerNet(name="net",sn_mva=k_va_base) + net = pandapowerNet(name="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, @@ -514,7 +514,7 @@ def test_2trafos(): def test_3ph_isolated_nodes(): v_base = 110 # 110kV Base Voltage mva_base = 100 # 100 MVA - net = pandapowerNet(name="test_3ph_isolated_nodes",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., in_service=True, index=2, name="busx") @@ -550,7 +550,7 @@ def test_3ph_isolated_nodes(): def test_balanced_power_flow_with_unbalanced_loads_and_sgens(): - net = pandapowerNet(name="test_balanced_power_flow_with_unbalanced_loads_and_sgens",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) diff --git a/pandapower/test/loadflow/test_runpp_3ph_n_line.py b/pandapower/test/loadflow/test_runpp_3ph_n_line.py index 5375c810fe..d02430c487 100644 --- a/pandapower/test/loadflow/test_runpp_3ph_n_line.py +++ b/pandapower/test/loadflow/test_runpp_3ph_n_line.py @@ -16,7 +16,7 @@ def net(): v_base = 20 # 20kV Base Voltage mva_base = 100 # 100 MVA - Net = pandapowerNet(name="net",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/shortcircuit/test_1ph.py b/pandapower/test/shortcircuit/test_1ph.py index 1b739b66dc..5295b69a96 100644 --- a/pandapower/test/shortcircuit/test_1ph.py +++ b/pandapower/test/shortcircuit/test_1ph.py @@ -268,7 +268,7 @@ def iec_60909_4_small(n_t3=1, num_earth=1, with_gen=False): def iec_60909_4_t1(): - net = pandapowerNet(name="iec_60909_4_t1",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.) @@ -282,7 +282,7 @@ def iec_60909_4_t1(): def vde_232(): - net = pandapowerNet(name="vde_232",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)) @@ -431,7 +431,7 @@ def test_1ph_sn_mva_ext_grid(): def test_line(): - net = pandapowerNet(name="test_line",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) diff --git a/pandapower/test/shortcircuit/test_all_currents.py b/pandapower/test/shortcircuit/test_all_currents.py index d66f453f0c..db8d430e15 100644 --- a/pandapower/test/shortcircuit/test_all_currents.py +++ b/pandapower/test/shortcircuit/test_all_currents.py @@ -20,7 +20,7 @@ def three_bus_example(): - net = pandapowerNet(name="three_bus_example",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) @@ -45,7 +45,7 @@ def three_bus_example(): def three_bus_permuted_index(): - net = pandapowerNet(name="three_bus_permuted_index",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) @@ -60,7 +60,7 @@ def three_bus_permuted_index(): # def gen_three_bus_example(): -# net = pandapowerNet(name="gen_three_bus_example",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.) @@ -77,7 +77,7 @@ def three_bus_permuted_index(): def net_transformer_simple(): - net = pandapowerNet(name="net_transformer_simple",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) @@ -88,7 +88,7 @@ def net_transformer_simple(): def net_transformer_simple_2(): - net = pandapowerNet(name="net_transformer_simple_2",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) @@ -105,7 +105,7 @@ def net_transformer_simple_2(): def net_transformer_simple_3(): - net = pandapowerNet(name="net_transformer_simple_3",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) @@ -142,7 +142,7 @@ def net_transformer_simple_4(): def net_transformer(): - net = pandapowerNet(name="net_transformer",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) @@ -711,7 +711,7 @@ def test_trafo_3w(): def test_trafo_impedance(): - net = pandapowerNet(name="test_trafo_impedance",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) @@ -867,7 +867,7 @@ def test_against_single_sc_results_trafo(): def test_ward(): - net = pandapowerNet(name="test_ward",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) @@ -882,7 +882,7 @@ def test_ward(): def test_xward(): - net = pandapowerNet(name="test_xward",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 d0a5f251b2..f80469f3c1 100644 --- a/pandapower/test/shortcircuit/test_gen.py +++ b/pandapower/test/shortcircuit/test_gen.py @@ -16,7 +16,7 @@ @pytest.fixture def one_line_one_generator(): - net = pandapowerNet(name="one_line_one_generator",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 = pandapowerNet(name="gen_three_bus_example",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.) diff --git a/pandapower/test/shortcircuit/test_iec60909_4.py b/pandapower/test/shortcircuit/test_iec60909_4.py index 7f38dea4e2..f13b0be4f4 100644 --- a/pandapower/test/shortcircuit/test_iec60909_4.py +++ b/pandapower/test/shortcircuit/test_iec60909_4.py @@ -16,7 +16,7 @@ def iec_60909_4(): - net = pandapowerNet(name="iec_60909_4",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.) @@ -185,7 +185,7 @@ def iec_60909_4_small(with_xward=False): def iec_60909_4_small_gen_only(): - net = pandapowerNet(name="iec_60909_4_small_gen_only",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) @@ -201,7 +201,7 @@ def iec_60909_4_small_gen_only(): def iec_60909_4_2gen(): - net = pandapowerNet(name="iec_60909_4_2gen",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.) @@ -227,7 +227,7 @@ def iec_60909_4_2gen(): def vde_232(): - net = pandapowerNet(name="vde_232",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 069fc99534..0e3f86b338 100644 --- a/pandapower/test/shortcircuit/test_impedance.py +++ b/pandapower/test/shortcircuit/test_impedance.py @@ -13,7 +13,7 @@ @pytest.fixture def impedance_net(): - net = pandapowerNet(name="impedance_net",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 1a777de5a0..bef2486ad1 100644 --- a/pandapower/test/shortcircuit/test_min_branch_results.py +++ b/pandapower/test/shortcircuit/test_min_branch_results.py @@ -11,7 +11,7 @@ @pytest.fixture def feeder_network(): - net = pandapowerNet(name="feeder_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 0f79e4878b..fc536ed640 100644 --- a/pandapower/test/shortcircuit/test_motor.py +++ b/pandapower/test/shortcircuit/test_motor.py @@ -14,7 +14,7 @@ @pytest.fixture def motor_net(): - net = pandapowerNet(name="motor_net",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 9a32acff4f..67dda4cebd 100644 --- a/pandapower/test/shortcircuit/test_ring.py +++ b/pandapower/test/shortcircuit/test_ring.py @@ -12,7 +12,7 @@ def ring_network(): - net = pandapowerNet(name="ring_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_voltage.py b/pandapower/test/shortcircuit/test_sc_voltage.py index 08e55467f1..7438908389 100644 --- a/pandapower/test/shortcircuit/test_sc_voltage.py +++ b/pandapower/test/shortcircuit/test_sc_voltage.py @@ -124,7 +124,7 @@ def test_voltage_simple(): def test_voltage_very_simple(): - net = pandapowerNet(name="test_voltage_very_simple",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) From c1e492124bfdfa30c9936d86e2b2bda910404b34 Mon Sep 17 00:00:00 2001 From: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Date: Tue, 13 Jan 2026 11:47:16 +0100 Subject: [PATCH 06/21] removed unused keywords fixed reused names --- pandapower/test/loadflow/test_results.py | 3 +- pandapower/test/loadflow/test_runpp.py | 13 ++++-- pandapower/test/loadflow/test_runpp_3ph.py | 47 +++++++++++----------- 3 files changed, 34 insertions(+), 29 deletions(-) diff --git a/pandapower/test/loadflow/test_results.py b/pandapower/test/loadflow/test_results.py index 5f974831e6..bf96a6ee15 100644 --- a/pandapower/test/loadflow/test_results.py +++ b/pandapower/test/loadflow/test_results.py @@ -245,7 +245,7 @@ def test_trafo(result_test_network, v_tol=1e-6, i_tol=1e-6, s_tol=1e-2, l_tol=1e assert abs(net.res_trafo.loading_percent.at[t2] - load2) < l_tol -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): +def test_trafo_2_taps(): # from pandapower.test.loadflow.test_results import * net = pandapowerNet(name="test_trafo_2_taps") create_bus(net, 110) @@ -261,7 +261,6 @@ def test_trafo_2_taps(v_tol=1e-6, i_tol=1e-6, s_tol=1e-2, l_tol=1e-3, va_tol=1e- 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): diff --git a/pandapower/test/loadflow/test_runpp.py b/pandapower/test/loadflow/test_runpp.py index 315e2f2be5..3f8075f982 100644 --- a/pandapower/test/loadflow/test_runpp.py +++ b/pandapower/test/loadflow/test_runpp.py @@ -49,6 +49,8 @@ numba_installed = True except ImportError: + def makeYbus_numba(): + pass numba_installed = False @@ -1262,8 +1264,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) @@ -1696,8 +1699,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 9a2a9f03d9..c442967cf2 100644 --- a/pandapower/test/loadflow/test_runpp_3ph.py +++ b/pandapower/test/loadflow/test_runpp_3ph.py @@ -51,7 +51,8 @@ def net(): return net -def check_it(net): +def check_it(_net): + net = _net bus_pp = np.abs(net.res_bus_3ph[['vm_a_pu', 'vm_b_pu', 'vm_c_pu']] [~np.isnan(net.res_bus_3ph.vm_a_pu)].values) bus_pf = np.abs(np.array([[0.96742893, 1.01302766, 1.019784], @@ -77,12 +78,12 @@ def check_it(net): assert np.max(np.abs(line_pp - line_pf)) < 1.1e-4 -def test_2bus_network(net): +def test_2bus_network(_net): # -o---o - add_zero_impedance_parameters(net) - runpp_3ph_with_consistency_checks(net) - assert net['converged'] - check_it(net) + add_zero_impedance_parameters(_net) + runpp_3ph_with_consistency_checks(_net) + assert _net['converged'] + check_it(_net) def test_2bus_network_single_isolated_busses(net): @@ -623,23 +624,23 @@ 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 @@ -676,32 +677,32 @@ 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 From 3e9cba05be4513400a82be7a8bd2fbcde1dbcbf0 Mon Sep 17 00:00:00 2001 From: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Date: Tue, 13 Jan 2026 15:01:27 +0100 Subject: [PATCH 07/21] more formatting stuff --- pandapower/network.py | 3 +-- pandapower/shortcircuit/calc_sc.py | 21 +++++++++++---------- pandapower/shortcircuit/impedance.py | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/pandapower/network.py b/pandapower/network.py index e9be7e57b3..b71d666d66 100644 --- a/pandapower/network.py +++ b/pandapower/network.py @@ -363,6 +363,5 @@ def __repr__(self): # pragma: no cover 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 + lines = ["This pandapower network includes the following parameter tables:"] + par + res + res_cost return "\n".join(lines) diff --git a/pandapower/shortcircuit/calc_sc.py b/pandapower/shortcircuit/calc_sc.py index fb6d30c0bb..bc2e43ea22 100644 --- a/pandapower/shortcircuit/calc_sc.py +++ b/pandapower/shortcircuit/calc_sc.py @@ -142,14 +142,16 @@ 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, - 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_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"): @@ -202,8 +204,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 05d6bf0994..426535608a 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): From 50efe4f4a333a5849d5c3931cb4c6282d48855cf Mon Sep 17 00:00:00 2001 From: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Date: Wed, 14 Jan 2026 15:24:44 +0100 Subject: [PATCH 08/21] implemented requested changes --- pandapower/convert_format.py | 2 +- pandapower/network.py | 4 ++-- pandapower/test/api/test_file_io.py | 2 +- pandapower/test/conftest.py | 2 +- pandapower/test/loadflow/result_test_network_generator.py | 4 ++-- pandapower/test/loadflow/test_facts_vsc.py | 6 +++--- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pandapower/convert_format.py b/pandapower/convert_format.py index c743659d9d..c2e77724d6 100644 --- a/pandapower/convert_format.py +++ b/pandapower/convert_format.py @@ -204,7 +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 diff --git a/pandapower/network.py b/pandapower/network.py index b71d666d66..2b06ddfdf5 100644 --- a/pandapower/network.py +++ b/pandapower/network.py @@ -269,7 +269,7 @@ def __init__( # ---- new code for the remaining version ---- super().__init__(**kwargs) if name == "": - logger.warning("name should not be empty.") + 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 @@ -318,7 +318,7 @@ def __init__( "asymmetric_load", "asymmetric_sgen", "source_dc", "switch", "tcsc", "svc", "ssc", "vsc", "b2b_vsc" ] - for element in elements: # FIXME: is this related to @heckstrahler removing res_ if empty? + 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: diff --git a/pandapower/test/api/test_file_io.py b/pandapower/test/api/test_file_io.py index 7b198e53de..8a18bdbf71 100644 --- a/pandapower/test/api/test_file_io.py +++ b/pandapower/test/api/test_file_io.py @@ -502,7 +502,7 @@ def test_replace_elements_json_string(net_in): def test_json_generalized(): - general_net0 = pandapowerNet(name='', custom_data=pandapowerNet.create_dataframes({ + general_net0 = pandapowerNet(name='test_json_generalized', custom_data=pandapowerNet.create_dataframes({ # structure data "df1": {'col1': np.dtype(object), 'col2': 'f8'}, diff --git a/pandapower/test/conftest.py b/pandapower/test/conftest.py index 60dad31d98..2538ef834d 100644 --- a/pandapower/test/conftest.py +++ b/pandapower/test/conftest.py @@ -16,7 +16,7 @@ @pytest.fixture(scope="session") def simple_network(): - net = pandapowerNet(name='') + 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/loadflow/result_test_network_generator.py b/pandapower/test/loadflow/result_test_network_generator.py index 6bb863dd6d..581f9f5a6c 100644 --- a/pandapower/test/loadflow/result_test_network_generator.py +++ b/pandapower/test/loadflow/result_test_network_generator.py @@ -47,7 +47,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 = pandapowerNet(name='', 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) @@ -78,7 +78,7 @@ def result_test_network_generator_dcpp(sn_mva=1): """ # ToDo: Uncommented tests fail in rundcpp -> Check why and correct it - net = pandapowerNet(name='', 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_facts_vsc.py b/pandapower/test/loadflow/test_facts_vsc.py index 367dc2e144..3766c43a78 100644 --- a/pandapower/test/loadflow/test_facts_vsc.py +++ b/pandapower/test/loadflow/test_facts_vsc.py @@ -1565,7 +1565,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) @@ -1600,7 +1600,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) @@ -1690,7 +1690,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) From c7035345c4a126919347a9debc3c3845b4f5fdf2 Mon Sep 17 00:00:00 2001 From: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Date: Tue, 27 Jan 2026 09:59:08 +0100 Subject: [PATCH 09/21] fixed circular import from typechecking and renaming of fixture --- pandapower/std_types.py | 7 +- pandapower/test/loadflow/test_runpp_3ph.py | 176 ++++++++++----------- 2 files changed, 92 insertions(+), 91 deletions(-) diff --git a/pandapower/std_types.py b/pandapower/std_types.py index 4d543f7b9b..ed254bbbcb 100644 --- a/pandapower/std_types.py +++ b/pandapower/std_types.py @@ -6,11 +6,12 @@ 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 +if TYPE_CHECKING: + from pandapower.network import pandapowerNet logger = logging.getLogger(__name__) @@ -38,7 +39,7 @@ def required_std_type_parameters(element: DefaultStandardTypes = "line"): def create_std_type( - net: pandapowerNet, + net: 'pandapowerNet', data: dict, name: str, element: str = "line", diff --git a/pandapower/test/loadflow/test_runpp_3ph.py b/pandapower/test/loadflow/test_runpp_3ph.py index c442967cf2..76dfc95c2e 100644 --- a/pandapower/test/loadflow/test_runpp_3ph.py +++ b/pandapower/test/loadflow/test_runpp_3ph.py @@ -32,7 +32,7 @@ @pytest.fixture -def net(): +def _net(): v_base = 110 # 110kV Base Voltage k_va_base = 100 # 100 MVA net = pandapowerNet(name="net", sn_mva=k_va_base) @@ -86,60 +86,60 @@ def test_2bus_network(_net): check_it(_net) -def test_2bus_network_single_isolated_busses(net): +def test_2bus_network_single_isolated_busses(_net): # -o---o o x - create_bus(net, vn_kv=110) - create_bus(net, vn_kv=110, in_service=False) - add_zero_impedance_parameters(net) - runpp_3ph_with_consistency_checks(net) - assert net['converged'] - check_it(net) + create_bus(_net, vn_kv=110) + create_bus(_net, vn_kv=110, in_service=False) + add_zero_impedance_parameters(_net) + runpp_3ph_with_consistency_checks(_net) + assert _net['converged'] + check_it(_net) -def test_2bus_network_isolated_net_part(net): +def test_2bus_network_isolated_net_part(_net): # -o---o o---o - b1 = create_bus(net, vn_kv=110) - b2 = create_bus(net, vn_kv=110) - create_line(net, from_bus=b1, to_bus=b2, length_km=50.0, std_type="example_type") - create_asymmetric_load(net, b2, p_a_mw=50, q_a_mvar=50, p_b_mw=10, q_b_mvar=15, + b1 = create_bus(_net, vn_kv=110) + b2 = create_bus(_net, vn_kv=110) + create_line(_net, from_bus=b1, to_bus=b2, length_km=50.0, std_type="example_type") + create_asymmetric_load(_net, b2, p_a_mw=50, q_a_mvar=50, p_b_mw=10, q_b_mvar=15, p_c_mw=10, q_c_mvar=5) - add_zero_impedance_parameters(net) - runpp_3ph_with_consistency_checks(net) - assert net['converged'] - check_it(net) + add_zero_impedance_parameters(_net) + runpp_3ph_with_consistency_checks(_net) + assert _net['converged'] + check_it(_net) -def test_2bus_network_singel_oos_bus(net): +def test_2bus_network_singel_oos_bus(_net): # -o---x---o - b1 = create_bus(net, vn_kv=110) - net.bus.loc[5, "in_service"] = False - create_line(net, from_bus=5, to_bus=b1, length_km=10.0, std_type="example_type") - create_asymmetric_load(net, b1, p_a_mw=-5, q_a_mvar=5, p_b_mw=-1, q_b_mvar=1.5, + b1 = create_bus(_net, vn_kv=110) + _net.bus.loc[5, "in_service"] = False + create_line(_net, from_bus=5, to_bus=b1, length_km=10.0, std_type="example_type") + create_asymmetric_load(_net, b1, p_a_mw=-5, q_a_mvar=5, p_b_mw=-1, q_b_mvar=1.5, p_c_mw=-1, q_c_mvar=.5) - add_zero_impedance_parameters(net) - runpp_3ph_with_consistency_checks(net) - assert net['converged'] + add_zero_impedance_parameters(_net) + runpp_3ph_with_consistency_checks(_net) + assert _net['converged'] -def test_out_serv_load(net): +def test_out_serv_load(_net): # <-x--o------o - add_zero_impedance_parameters(net) - runpp_3ph_with_consistency_checks(net) - assert net['converged'] - check_it(net) - create_asymmetric_load(net, 5, p_a_mw=50, q_a_mvar=100, p_b_mw=29, q_b_mvar=38, + add_zero_impedance_parameters(_net) + runpp_3ph_with_consistency_checks(_net) + assert _net['converged'] + check_it(_net) + create_asymmetric_load(_net, 5, p_a_mw=50, q_a_mvar=100, p_b_mw=29, q_b_mvar=38, p_c_mw=10, q_c_mvar=5, in_service=False) - runpp_3ph_with_consistency_checks(net) - assert net['converged'] - check_it(net) + runpp_3ph_with_consistency_checks(_net) + assert _net['converged'] + check_it(_net) -def test_2bus_network_one_of_two_ext_grids_oos(net): +def test_2bus_network_one_of_two_ext_grids_oos(_net): """ Out of service ext_grids should not affect the unbalanced powerflow""" - create_ext_grid(net, bus=1, vm_pu=1.0, s_sc_max_mva=5000, rx_max=0.1, + 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, in_service=False) - runpp_3ph(net) - assert net['converged'] + runpp_3ph(_net) + assert _net['converged'] @pytest.mark.parametrize("init", ["auto", "results", "flat", "dc"]) @@ -331,14 +331,14 @@ def test_3ph_two_bus_line_powerfactory(): assert np.max(np.abs(line_load_pp - line_load_pf)) < 1e-2 -def check_bus_voltages(net, result, trafo_vector_group): +def check_bus_voltages(_net, result, trafo_vector_group): res_vm_pu = [] - ordered_bus_table = net.bus.sort_values(by='name').reset_index(drop=True) + ordered_bus_table = _net.bus.sort_values(by='name').reset_index(drop=True) for i in range(len(ordered_bus_table)): - index = net.bus[net.bus.name == ordered_bus_table['name'][i]].index[0] - res_vm_pu.append(net.res_bus_3ph.vm_a_pu[index]) - res_vm_pu.append(net.res_bus_3ph.vm_b_pu[index]) - res_vm_pu.append(net.res_bus_3ph.vm_c_pu[index]) + index = _net.bus[_net.bus.name == ordered_bus_table['name'][i]].index[0] + res_vm_pu.append(_net.res_bus_3ph.vm_a_pu[index]) + res_vm_pu.append(_net.res_bus_3ph.vm_b_pu[index]) + res_vm_pu.append(_net.res_bus_3ph.vm_c_pu[index]) # max_tol = 0 # for tol in [1e-1, 1e-2, 1e-3, 1e-4, 1e-5, 1e-6, 1e-7]: @@ -354,17 +354,17 @@ def check_bus_voltages(net, result, trafo_vector_group): rtol=0), f"Incorrect results for {trafo_vector_group}" -def check_line_currents(net, result, trafo_vector_group): +def check_line_currents(_net, result, trafo_vector_group): res_line_i_ka = [] - ordered_line_table = net.line.sort_values(by='name').reset_index(drop=True) + ordered_line_table = _net.line.sort_values(by='name').reset_index(drop=True) for i in range(len(ordered_line_table)): - index = net.line[net.line.name == ordered_line_table['name'][i]].index[0] - res_line_i_ka.append(net.res_line_3ph.i_a_from_ka[index]) - res_line_i_ka.append(net.res_line_3ph.i_b_from_ka[index]) - res_line_i_ka.append(net.res_line_3ph.i_c_from_ka[index]) - res_line_i_ka.append(net.res_line_3ph.i_a_to_ka[index]) - res_line_i_ka.append(net.res_line_3ph.i_b_to_ka[index]) - res_line_i_ka.append(net.res_line_3ph.i_c_to_ka[index]) + index = _net.line[_net.line.name == ordered_line_table['name'][i]].index[0] + res_line_i_ka.append(_net.res_line_3ph.i_a_from_ka[index]) + res_line_i_ka.append(_net.res_line_3ph.i_b_from_ka[index]) + res_line_i_ka.append(_net.res_line_3ph.i_c_from_ka[index]) + res_line_i_ka.append(_net.res_line_3ph.i_a_to_ka[index]) + res_line_i_ka.append(_net.res_line_3ph.i_b_to_ka[index]) + res_line_i_ka.append(_net.res_line_3ph.i_c_to_ka[index]) # max_tol = 0 # for tol in [1e-1, 1e-2, 1e-3, 1e-4, 1e-5, 1e-6, 1e-7]: @@ -381,17 +381,17 @@ def check_line_currents(net, result, trafo_vector_group): raise ValueError("Incorrect results for vector group %s" % trafo_vector_group, res_line_i_ka, result) -def check_trafo_currents(net, result, trafo_vector_group): +def check_trafo_currents(_net, result, trafo_vector_group): res_trafo_i_ka = [] - ordered_trafo_table = net.trafo.sort_values(by='name').reset_index(drop=True) + ordered_trafo_table = _net.trafo.sort_values(by='name').reset_index(drop=True) for i in range(len(ordered_trafo_table)): - index = net.trafo[net.trafo.name == ordered_trafo_table['name'][i]].index[0] - res_trafo_i_ka.append(net.res_trafo_3ph.i_a_hv_ka[index]) - res_trafo_i_ka.append(net.res_trafo_3ph.i_b_hv_ka[index]) - res_trafo_i_ka.append(net.res_trafo_3ph.i_c_hv_ka[index]) - res_trafo_i_ka.append(net.res_trafo_3ph.i_a_lv_ka[index]) - res_trafo_i_ka.append(net.res_trafo_3ph.i_b_lv_ka[index]) - res_trafo_i_ka.append(net.res_trafo_3ph.i_c_lv_ka[index]) + index = _net.trafo[_net.trafo.name == ordered_trafo_table['name'][i]].index[0] + res_trafo_i_ka.append(_net.res_trafo_3ph.i_a_hv_ka[index]) + res_trafo_i_ka.append(_net.res_trafo_3ph.i_b_hv_ka[index]) + res_trafo_i_ka.append(_net.res_trafo_3ph.i_c_hv_ka[index]) + res_trafo_i_ka.append(_net.res_trafo_3ph.i_a_lv_ka[index]) + res_trafo_i_ka.append(_net.res_trafo_3ph.i_b_lv_ka[index]) + res_trafo_i_ka.append(_net.res_trafo_3ph.i_c_lv_ka[index]) # max_tol = 0 # for tol in [1e-1, 1e-2, 1e-3, 1e-4, 1e-5, 1e-6, 1e-7]: @@ -408,19 +408,19 @@ 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): - b1 = create_bus(net, bushv, zone=vector_group, index=get_free_id(net.bus)) - b2 = create_bus(net, 0.4, zone=vector_group) - b3 = create_bus(net, 0.4, zone=vector_group) - create_ext_grid(net, b1, s_sc_max_mva=10000, +def make_nw(_net, bushv, tap_ps, case, vector_group): + b1 = create_bus(_net, bushv, zone=vector_group, index=get_free_id(_net.bus)) + b2 = create_bus(_net, 0.4, zone=vector_group) + b3 = create_bus(_net, 0.4, zone=vector_group) + create_ext_grid(_net, b1, s_sc_max_mva=10000, rx_max=0.1, r0x0_max=0.1, x0x_max=1.0) - create_transformer_from_parameters(net, hv_bus=b1, lv_bus=b2, + create_transformer_from_parameters(_net, hv_bus=b1, lv_bus=b2, sn_mva=1.6, vn_hv_kv=10, vn_lv_kv=0.4, vk_percent=6, vkr_percent=0.78125, pfe_kw=2.7, @@ -434,25 +434,25 @@ def make_nw(net, bushv, tap_ps, case, vector_group): mag0_percent=100, mag0_rx=0., si0_hv_partial=0.9, vector_group=vector_group, parallel=1, tap_pos=tap_ps, - index=get_free_id(net.trafo) + 1) - create_line_from_parameters(net, b2, b3, length_km=0.5, r_ohm_per_km=0.1941, x_ohm_per_km=0.07476991, + index=get_free_id(_net.trafo) + 1) + create_line_from_parameters(_net, b2, b3, length_km=0.5, r_ohm_per_km=0.1941, x_ohm_per_km=0.07476991, c_nf_per_km=1160., max_i_ka=0.421, endtemp_degree=70.0, r0_ohm_per_km=0.7766, x0_ohm_per_km=0.2990796, c0_nf_per_km=496.2, - index=get_free_id(net.line) + 1) + index=get_free_id(_net.line) + 1) if case == "bal_wye": # Symmetric Load - create_load(net, b3, 0.08, 0.012, type='wye') + create_load(_net, b3, 0.08, 0.012, type='wye') elif case == "delta_wye": # Unsymmetric Light Load - create_asymmetric_load(net, b3, p_a_mw=0.0044, q_a_mvar=0.0013, p_b_mw=0.0044, q_b_mvar=0.0013, + create_asymmetric_load(_net, b3, p_a_mw=0.0044, q_a_mvar=0.0013, p_b_mw=0.0044, q_b_mvar=0.0013, p_c_mw=0.0032, q_c_mvar=0.0013, type='wye') - create_asymmetric_load(net, b3, p_a_mw=0.0300, q_a_mvar=0.0048, p_b_mw=0.0280, q_b_mvar=0.0036, + create_asymmetric_load(_net, b3, p_a_mw=0.0300, q_a_mvar=0.0048, p_b_mw=0.0280, q_b_mvar=0.0036, p_c_mw=0.027, q_c_mvar=0.0043, type='delta') elif case == "wye" or case == "delta": # Unsymmetric Heavy Load - create_asymmetric_load(net, b3, p_a_mw=0.0300, q_a_mvar=0.0048, p_b_mw=0.0280, q_b_mvar=0.0036, + create_asymmetric_load(_net, b3, p_a_mw=0.0300, q_a_mvar=0.0048, p_b_mw=0.0280, q_b_mvar=0.0036, p_c_mw=0.027, q_c_mvar=0.0043, type=case) @@ -466,20 +466,20 @@ def test_trafo_asym(): assert net['converged'] check_results(net, trafo_vector_group, get_PF_Results(trafo_vector_group)) -def _test_trafo_shifts(net, rtol): +def _test_trafo_shifts(_net, rtol): # Dyn for clock in [-30, 30, 150, 210, -150]: - net.trafo.vector_group = "Dyn" - net.trafo.shift_degree = clock - runpp_3ph_with_consistency_checks(net) - trafo_currents_consistent_3ph(net, rtol) + _net.trafo.vector_group = "Dyn" + _net.trafo.shift_degree = clock + runpp_3ph_with_consistency_checks(_net) + trafo_currents_consistent_3ph(_net, rtol) # YNyn for clock in [0, 180, -180]: - net['trafo'].vector_group = "YNyn" - net['trafo'].shift_degree = clock - runpp_3ph_with_consistency_checks(net) - trafo_currents_consistent_3ph(net, rtol) + _net['trafo'].vector_group = "YNyn" + _net['trafo'].shift_degree = clock + runpp_3ph_with_consistency_checks(_net) + trafo_currents_consistent_3ph(_net, rtol) def test_trafo_asym_currents__high_neg_seq(): """ From fa2be6308733f9495934671ff30054f046a6af69 Mon Sep 17 00:00:00 2001 From: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Date: Wed, 28 Jan 2026 15:53:37 +0100 Subject: [PATCH 10/21] fixed issues in convert_format.py --- pandapower/convert_format.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandapower/convert_format.py b/pandapower/convert_format.py index d878e1ec24..b747f43f23 100644 --- a/pandapower/convert_format.py +++ b/pandapower/convert_format.py @@ -204,7 +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 From fb177e9b202bd8e43c1326dca53c014a67ab6b6c Mon Sep 17 00:00:00 2001 From: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Date: Thu, 5 Feb 2026 11:43:03 +0100 Subject: [PATCH 11/21] fixes for merge of develop --- pandapower/pp_types.py | 7 ++++--- pandapower/test/loadflow/test_rundcpp.py | 9 ++++++--- pandapower/test/topology/test_create_graph.py | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/pandapower/pp_types.py b/pandapower/pp_types.py index 0dd8599aa0..ed1c760c1b 100644 --- a/pandapower/pp_types.py +++ b/pandapower/pp_types.py @@ -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 diff --git a/pandapower/test/loadflow/test_rundcpp.py b/pandapower/test/loadflow/test_rundcpp.py index e72f2ce21c..e4ae34cb4f 100644 --- a/pandapower/test/loadflow/test_rundcpp.py +++ b/pandapower/test/loadflow/test_rundcpp.py @@ -9,6 +9,9 @@ import numpy as np import pytest +from pandapower import create_bus_dc, create_vsc +from pandapower.create.line_create import create_line_from_parameters, 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 @@ -136,7 +139,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 +205,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 +288,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/topology/test_create_graph.py b/pandapower/test/topology/test_create_graph.py index c6c9387b94..5879829879 100644 --- a/pandapower/test/topology/test_create_graph.py +++ b/pandapower/test/topology/test_create_graph.py @@ -69,7 +69,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, oos_trafo = net.trafo.index From c454d5177dd68ee7783e2b28cbfe57b9a5869633 Mon Sep 17 00:00:00 2001 From: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Date: Thu, 5 Feb 2026 14:36:03 +0100 Subject: [PATCH 12/21] fixes for merge of develop added standard types dict type fixed all mypy issues --- pandapower/auxiliary.py | 4 +--- pandapower/estimation/algorithm/base.py | 11 +++++----- .../estimation/algorithm/matrix_base.py | 9 ++++++-- pandapower/file_io.py | 2 +- pandapower/network.py | 21 ++++++++++++------- pandapower/pp_types.py | 18 ++++++++++++++-- pandapower/results_bus.py | 2 +- pandapower/std_types.py | 5 ++++- .../test/loadflow/test_facts_b2b_vsc.py | 3 +-- pandapower/test/loadflow/test_rundcpp.py | 6 ++---- pandapower/test/loadflow/test_runpp.py | 11 ++++------ pandapower/toolbox/grid_modification.py | 2 +- 12 files changed, 58 insertions(+), 36 deletions(-) diff --git a/pandapower/auxiliary.py b/pandapower/auxiliary.py index fe64353031..ef355afcf0 100644 --- a/pandapower/auxiliary.py +++ b/pandapower/auxiliary.py @@ -51,8 +51,6 @@ geopandas_available = True except ImportError: geopandas_available = False - # for typing only - GeoSeries = object PyPowerNetwork = dict[str, Any] @@ -207,7 +205,7 @@ def as_shapely_obj(self) -> pdt.Series: return self._obj.dropna().apply(from_geojson) @property - def as_geoseries(self) -> GeoSeries: + def as_geoseries(self) -> "GeoSeries": """ Converts the PandasSeries to a GeoSeries with shapely geometries. """ diff --git a/pandapower/estimation/algorithm/base.py b/pandapower/estimation/algorithm/base.py index 4cad1ca96c..43fc209df5 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.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.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.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.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 4d5568d6a9..69d81ba7d0 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.in1d(new_mask_tot, mask1) - new_mask2 = np.in1d(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/file_io.py b/pandapower/file_io.py index a997aa4d50..a8b56748fd 100644 --- a/pandapower/file_io.py +++ b/pandapower/file_io.py @@ -158,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: diff --git a/pandapower/network.py b/pandapower/network.py index 2b06ddfdf5..298d8a70a3 100644 --- a/pandapower/network.py +++ b/pandapower/network.py @@ -35,6 +35,7 @@ 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__) @@ -233,22 +234,28 @@ class pandapowerNet(ADict): """ @overload def __init__( - self, name: str, f_hz: float = 50., sn_mva: float = 1., add_stdtypes: bool = True, custom_data: dict = None + 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") -> None: ... + def __init__(self, *, net: "pandapowerNet | dict") -> None: ... def __init__( self, - net: "pandapowerNet" = None, - name: str = None, + name: str | None = None, f_hz: float = 50., sn_mva: float = 1., add_stdtypes: bool = True, - custom_data: dict = None, + custom_data: dict | None = None, + *, + net: "pandapowerNet | dict | None" = None, **kwargs ) -> None: # TODO: remove once deprecations are removed @@ -297,7 +304,7 @@ def __init__( if add_stdtypes: add_basic_std_types(self) # TODO: Test this else: - self.std_types = {"line": {}, "line_dc": {}, "trafo": {}, "trafo3w": {}, "fuse": {}} # TODO: this should not be set here. a function to return the empty std_types would be sensible + self.std_types: StandardTypesDict = {"line": {}, "line_dc": {}, "trafo": {}, "trafo3w": {}, "fuse": {}} # reset res_… objects: for suffix in [None, "est", "sc", "3ph"]: elements = [] @@ -329,7 +336,7 @@ def __init__( ) if "res_cost" in self.keys(): del self["res_cost"] - self.user_pf_options = {} + self.user_pf_options: dict = {} @staticmethod diff --git a/pandapower/pp_types.py b/pandapower/pp_types.py index ed1c760c1b..cca4e6c9aa 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 @@ -32,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/results_bus.py b/pandapower/results_bus.py index d53b9393e7..1e7c90435a 100644 --- a/pandapower/results_bus.py +++ b/pandapower/results_bus.py @@ -190,7 +190,7 @@ def write_voltage_dependend_load_results(net, p, q, b): # 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 -) -> 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 diff --git a/pandapower/std_types.py b/pandapower/std_types.py index ed254bbbcb..72e09bf46b 100644 --- a/pandapower/std_types.py +++ b/pandapower/std_types.py @@ -10,6 +10,8 @@ import pandas as pd +from pandapower.pp_types import StandardTypesDictKeys + if TYPE_CHECKING: from pandapower.network import pandapowerNet @@ -42,7 +44,7 @@ def create_std_type( net: 'pandapowerNet', data: dict, name: str, - element: str = "line", + element: StandardTypesDictKeys = "line", overwrite=True, check_required=True): """ @@ -121,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/loadflow/test_facts_b2b_vsc.py b/pandapower/test/loadflow/test_facts_b2b_vsc.py index baec7ddc4f..c83ddd35b4 100644 --- a/pandapower/test/loadflow/test_facts_b2b_vsc.py +++ b/pandapower/test/loadflow/test_facts_b2b_vsc.py @@ -3,10 +3,9 @@ import numpy as np import pytest -from pandapower import create_line_dc_from_parameters from pandapower.create import ( create_buses, create_bus, create_line_from_parameters, create_load, create_ext_grid, create_bus_dc, create_b2b_vsc, - create_line_dc, create_source_dc, create_load_dc + create_line_dc, create_source_dc, create_load_dc, create_line_dc_from_parameters ) from pandapower.network import pandapowerNet from pandapower.run import runpp diff --git a/pandapower/test/loadflow/test_rundcpp.py b/pandapower/test/loadflow/test_rundcpp.py index e4ae34cb4f..be1c0adcf2 100644 --- a/pandapower/test/loadflow/test_rundcpp.py +++ b/pandapower/test/loadflow/test_rundcpp.py @@ -9,12 +9,10 @@ import numpy as np import pytest -from pandapower import create_bus_dc, create_vsc -from pandapower.create.line_create import create_line_from_parameters, 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_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 diff --git a/pandapower/test/loadflow/test_runpp.py b/pandapower/test/loadflow/test_runpp.py index 3f8075f982..f57cf02615 100644 --- a/pandapower/test/loadflow/test_runpp.py +++ b/pandapower/test/loadflow/test_runpp.py @@ -44,14 +44,11 @@ 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: - def makeYbus_numba(): - pass - 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): diff --git a/pandapower/toolbox/grid_modification.py b/pandapower/toolbox/grid_modification.py index 1e951d9795..e1b2bfe5f2 100644 --- a/pandapower/toolbox/grid_modification.py +++ b/pandapower/toolbox/grid_modification.py @@ -143,7 +143,7 @@ def select_subnet(net, buses, include_switch_buses=False, include_results=False, ], sort=False) ] - return pandapowerNet(p2) + return pandapowerNet(net=p2) def merge_nets(net1, net2, validate=True, merge_results=True, tol=1e-9, **kwargs): From fb48c07571587b4d69fe0d291806b8a07315f24d Mon Sep 17 00:00:00 2001 From: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Date: Thu, 5 Feb 2026 15:39:49 +0100 Subject: [PATCH 13/21] added network name from file name in cim converter --- pandapower/converter/cim/cim2pp/build_pp_net.py | 5 ++++- pandapower/converter/cim/cim2pp/from_cim.py | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/pandapower/converter/cim/cim2pp/build_pp_net.py b/pandapower/converter/cim/cim2pp/build_pp_net.py index b58b24e884..ffe774f597 100644 --- a/pandapower/converter/cim/cim2pp/build_pp_net.py +++ b/pandapower/converter/cim/cim2pp/build_pp_net.py @@ -30,7 +30,10 @@ def __init__(self, cim_parser: cim_classes.CimParser, converter_classes: Dict, * self.cim_parser: cim_classes.CimParser = cim_parser self.kwargs = kwargs self.cim: Dict[str, Dict[str, pd.DataFrame]] = self.cim_parser.get_cim_dict() - self.net: pandapowerNet = pandapowerNet(name="CimConverter") + 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/from_cim.py b/pandapower/converter/cim/cim2pp/from_cim.py index 823bc2ba70..e0455e22c3 100644 --- a/pandapower/converter/cim/cim2pp/from_cim.py +++ b/pandapower/converter/cim/cim2pp/from_cim.py @@ -63,8 +63,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, From f11f8a9603070a62bcbb97669dc631e4c937f959 Mon Sep 17 00:00:00 2001 From: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Date: Fri, 6 Feb 2026 14:58:20 +0100 Subject: [PATCH 14/21] added name for ucte converter networks removed numpy1 warning test as the warning was removed --- pandapower/converter/ucte/from_ucte.py | 4 +++- pandapower/converter/ucte/ucte_converter.py | 6 ++++-- pandapower/test/estimation/test_wls_estimation.py | 6 ------ 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/pandapower/converter/ucte/from_ucte.py b/pandapower/converter/ucte/from_ucte.py index 96c3dc825d..e4afb6865d 100644 --- a/pandapower/converter/ucte/from_ucte.py +++ b/pandapower/converter/ucte/from_ucte.py @@ -4,6 +4,7 @@ # 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 @@ -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 d0ca57bdb9..c590056760 100644 --- a/pandapower/converter/ucte/ucte_converter.py +++ b/pandapower/converter/ucte/ucte_converter.py @@ -15,13 +15,15 @@ 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 @@ -42,7 +44,7 @@ def _create_empty_network() -> pandapowerNet: "line": {"amica_name": str}, "bus": {"ucte_country": str}, } - net: pandapowerNet = pandapowerNet(name="") + 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/test/estimation/test_wls_estimation.py b/pandapower/test/estimation/test_wls_estimation.py index c566a46fff..1386c23682 100644 --- a/pandapower/test/estimation/test_wls_estimation.py +++ b/pandapower/test/estimation/test_wls_estimation.py @@ -943,12 +943,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__': From 56d05b29c23c9d2dd208539e6c5497d2c670872b Mon Sep 17 00:00:00 2001 From: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Date: Tue, 17 Feb 2026 07:23:18 +0100 Subject: [PATCH 15/21] fixed merge issues --- pandapower/convert_format.py | 4 +- pandapower/file_io.py | 11 +++-- pandapower/network.py | 2 +- pandapower/results.py | 4 +- pandapower/shortcircuit/calc_sc.py | 14 ++++--- pandapower/test/api/test_create.py | 8 ++-- pandapower/test/api/test_file_io.py | 12 +++--- pandapower/test/consistency_checks.py | 49 ++++++++++++++++------ pandapower/test/control/test_stactrl.py | 5 ++- pandapower/test/loadflow/test_facts_vsc.py | 2 +- 10 files changed, 68 insertions(+), 43 deletions(-) diff --git a/pandapower/convert_format.py b/pandapower/convert_format.py index b747f43f23..8a2763ffe3 100644 --- a/pandapower/convert_format.py +++ b/pandapower/convert_format.py @@ -267,9 +267,7 @@ def _add_nominal_power(net): def _add_missing_tables(net): 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] diff --git a/pandapower/file_io.py b/pandapower/file_io.py index a8b56748fd..b8c715355d 100644 --- a/pandapower/file_io.py +++ b/pandapower/file_io.py @@ -373,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) diff --git a/pandapower/network.py b/pandapower/network.py index 298d8a70a3..de923e49b8 100644 --- a/pandapower/network.py +++ b/pandapower/network.py @@ -323,7 +323,7 @@ def __init__( "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", - "b2b_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}" diff --git a/pandapower/results.py b/pandapower/results.py index e33d3ead5e..e886a47a83 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/shortcircuit/calc_sc.py b/pandapower/shortcircuit/calc_sc.py index bc2e43ea22..295e917e53 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): """ @@ -126,12 +127,14 @@ def calc_sc(net, bus=None, "especially for transformers") if use_pre_fault_voltage: - init_vm_pu = init_va_degree = "results" + init_vm_pu: Literal["results"] = "results" + init_va_degree: Literal["results"] = "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: Literal["flat"] = "flat" + init_va_degree: Literal["flat"] = "flat" trafo_model = "pi" # Convert bus to numpy array @@ -144,7 +147,8 @@ def calc_sc(net, bus=None, 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, recycle=None + 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, @@ -159,7 +163,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): diff --git a/pandapower/test/api/test_create.py b/pandapower/test/api/test_create.py index 9220478f5a..be36b46ec3 100644 --- a/pandapower/test/api/test_create.py +++ b/pandapower/test/api/test_create.py @@ -1758,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'] @@ -1774,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'] @@ -1901,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'] @@ -1917,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'] diff --git a/pandapower/test/api/test_file_io.py b/pandapower/test/api/test_file_io.py index ef6c36265d..b2794b0716 100644 --- a/pandapower/test/api/test_file_io.py +++ b/pandapower/test/api/test_file_io.py @@ -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) diff --git a/pandapower/test/consistency_checks.py b/pandapower/test/consistency_checks.py index ccde49cabd..1017224097 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/control/test_stactrl.py b/pandapower/test/control/test_stactrl.py index 7ea32913a2..a83bc7db18 100644 --- a/pandapower/test/control/test_stactrl.py +++ b/pandapower/test/control/test_stactrl.py @@ -209,9 +209,10 @@ def test_qlimits_with_capability_curve(simple_test_net, v, p): '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], diff --git a/pandapower/test/loadflow/test_facts_vsc.py b/pandapower/test/loadflow/test_facts_vsc.py index 48b960da7f..852ea8d8c0 100644 --- a/pandapower/test/loadflow/test_facts_vsc.py +++ b/pandapower/test/loadflow/test_facts_vsc.py @@ -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) From 018257d3f5e9dbd911f22d6237660a7b86986225 Mon Sep 17 00:00:00 2001 From: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Date: Tue, 17 Feb 2026 07:40:01 +0100 Subject: [PATCH 16/21] fixed reliability issues --- pandapower/network.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pandapower/network.py b/pandapower/network.py index de923e49b8..9ac3546e13 100644 --- a/pandapower/network.py +++ b/pandapower/network.py @@ -260,7 +260,13 @@ def __init__( ) -> None: # TODO: remove once deprecations are removed if net is not None: - if name is not None or f_hz != 50. or sn_mva != 1. or not add_stdtypes or custom_data 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()' ) From c8825e2e6a66bffa69bb26299f117fb89f8b8cd3 Mon Sep 17 00:00:00 2001 From: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Date: Tue, 17 Feb 2026 09:01:22 +0100 Subject: [PATCH 17/21] fixed mypy issues --- pandapower/shortcircuit/calc_sc.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/pandapower/shortcircuit/calc_sc.py b/pandapower/shortcircuit/calc_sc.py index 295e917e53..2f4b588d08 100644 --- a/pandapower/shortcircuit/calc_sc.py +++ b/pandapower/shortcircuit/calc_sc.py @@ -125,16 +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: Literal["results"] = "results" - init_va_degree: Literal["results"] = "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: Literal["flat"] = "flat" - init_va_degree: Literal["flat"] = "flat" + init_vm_pu = "flat" + init_va_degree = "flat" trafo_model = "pi" # Convert bus to numpy array From 933c784a2d9f19e3a78663f1eb01642c79bd2386 Mon Sep 17 00:00:00 2001 From: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Date: Tue, 24 Mar 2026 08:07:20 +0100 Subject: [PATCH 18/21] minor refactors --- pandapower/toolbox/element_selection.py | 31 +++++++++++++++---------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/pandapower/toolbox/element_selection.py b/pandapower/toolbox/element_selection.py index fabf686a8c..ab54c59544 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 From f05bc042df160dcbd697d6c9e6f6cbd487743a13 Mon Sep 17 00:00:00 2001 From: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Date: Tue, 24 Mar 2026 08:15:15 +0100 Subject: [PATCH 19/21] fixed failing tests --- pandapower/test/control/test_stactrl.py | 33 ++++++++++++++----------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/pandapower/test/control/test_stactrl.py b/pandapower/test/control/test_stactrl.py index 20742b10dc..ddaf0bf596 100644 --- a/pandapower/test/control/test_stactrl.py +++ b/pandapower/test/control/test_stactrl.py @@ -1,12 +1,13 @@ # -*- coding: utf-8 -*- -import copy # Copyright (c) 2016-2026 by University of Kassel and Fraunhofer Institute for Energy Economics # and Energy System Technology (IEE), Kassel. All rights reserved. import os +import copy import logging import pytest +import numpy as np from numpy import linspace, float64 from pandas import DataFrame @@ -321,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, @@ -338,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, @@ -358,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, @@ -374,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, @@ -395,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, @@ -412,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, @@ -428,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, @@ -442,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) From 6a3798b9b5a801adba216c1d505ae4a0878772c8 Mon Sep 17 00:00:00 2001 From: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Date: Tue, 24 Mar 2026 08:54:24 +0100 Subject: [PATCH 20/21] added matplotlib to typing group and typechecking import to patchmakers --- pandapower/plotting/patch_makers.py | 6 +++++- pyproject.toml | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/pandapower/plotting/patch_makers.py b/pandapower/plotting/patch_makers.py index db238cb016..be6aa85807 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,7 +24,9 @@ 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__) diff --git a/pyproject.toml b/pyproject.toml index 7e7703813a..5d09646044 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]"] From 7d4fed67554cb347bb3ac267bfe00698f18178e4 Mon Sep 17 00:00:00 2001 From: KS_HTK <2981026+KS-HTK@users.noreply.github.com> Date: Tue, 24 Mar 2026 09:00:34 +0100 Subject: [PATCH 21/21] typing fix in patch makers --- pandapower/plotting/patch_makers.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pandapower/plotting/patch_makers.py b/pandapower/plotting/patch_makers.py index be6aa85807..dc2929ba5f 100644 --- a/pandapower/plotting/patch_makers.py +++ b/pandapower/plotting/patch_makers.py @@ -31,10 +31,10 @@ 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) @@ -80,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. @@ -102,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) @@ -165,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]) @@ -436,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