diff --git a/README.md b/README.md
index 9be0ed2..4b77a32 100644
--- a/README.md
+++ b/README.md
@@ -82,7 +82,7 @@ This project is licensed under the MIT License.
Incomplete |
Yes |
- No |
+ Yes |
diff --git a/pyproject.toml b/pyproject.toml
index 808118a..1db2fe7 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -21,6 +21,7 @@ tests = [
# pandapower
"networkx>=3.2.1",
"geopandas>=1.0.0",
+ "pandapower>=3.1.2",
]
dev = [
"ruff>=0.9.2",
diff --git a/run.py b/run.py
index 34279f3..7d21d5f 100755
--- a/run.py
+++ b/run.py
@@ -15,7 +15,7 @@
"ruff-format": ["tests", "stubs"],
"mypy": ["tests", "stubs"],
"pyright": ["tests", "stubs"],
- # "stubtest": ["--allowlist=stubtest_allowlist.txt"],
+ "stubtest": ["--allowlist=stubtest_allowlist.txt", "pandapower"],
"pytest": [],
}
diff --git a/stubs/pandapower-stubs/_typing.pyi b/stubs/pandapower-stubs/_typing.pyi
new file mode 100644
index 0000000..6df58b7
--- /dev/null
+++ b/stubs/pandapower-stubs/_typing.pyi
@@ -0,0 +1,39 @@
+from collections.abc import Collection, Iterable, Mapping, MutableMapping
+from typing import Any, Protocol, SupportsFloat, SupportsIndex, TypedDict, TypeVar, type_check_only
+from typing_extensions import TypeAlias
+
+import numpy as np
+
+_T = TypeVar("_T", bound=Any)
+
+# Wide primitives for input types
+Bool: TypeAlias = bool | np.bool
+Int: TypeAlias = SupportsIndex
+Float: TypeAlias = SupportsFloat | Int
+
+# Vector-related
+ScalarOrVector: TypeAlias = _T | Collection[_T]
+Array1D: TypeAlias = np.ndarray[tuple[int], np.dtype[_T]]
+Array2D: TypeAlias = np.ndarray[tuple[int, int], np.dtype[_T]]
+
+# File I/O related
+@type_check_only
+class FromJsonKwds(TypedDict, total=False): # keep inline with pandapower.file_io functions
+ convert: bool
+ encryption_key: str | None
+ elements_to_deserialize: Iterable[str] | None
+ keep_serialized_elements: bool
+ add_basic_std_types: bool
+ replace_elements: Mapping[str, str] | None
+ empty_dict_like_object: MutableMapping[str, Any] | None
+
+@type_check_only
+class SupportsToWkt(Protocol):
+ def to_wkt(self) -> str: ...
+
+@type_check_only
+class SupportsGeoInterface(Protocol):
+ @property
+ def __geo_interface__(self) -> dict[str, Any]: ... # values are arbitrary
+
+ConvertibleToCRS: TypeAlias = str | int | tuple[str, str] | list[str] | dict[str, Any] | SupportsToWkt
diff --git a/stubs/pandapower-stubs/auxiliary.pyi b/stubs/pandapower-stubs/auxiliary.pyi
index 6eb5a45..f35bee3 100644
--- a/stubs/pandapower-stubs/auxiliary.pyi
+++ b/stubs/pandapower-stubs/auxiliary.pyi
@@ -1,26 +1,36 @@
+import logging
from collections.abc import Iterable, Mapping, MutableMapping
-from typing import Any, Final, Literal, NoReturn, SupportsFloat as Float, SupportsIndex as Int, TypeVar, overload
-from typing_extensions import Self
+from typing import Any, Final, Literal, NoReturn, TypeVar, overload
+from typing_extensions import Self, deprecated
import geopandas as gpd
import numpy as np
import pandas as pd
-from numpy.typing import ArrayLike, NDArray
+from numpy.typing import ArrayLike, DTypeLike, NDArray
from shapely.geometry.base import BaseGeometry
+from pandapower._typing import Float, Int
from pandapower.std_types import _StdTypes
_T = TypeVar("_T")
_KT = TypeVar("_KT")
_VT = TypeVar("_VT")
+def log_to_level(msg: str, passed_logger: logging.Logger, level: str) -> None: ...
+def version_check(package_name: str, level="UserWarning", ignore_not_installed: bool = False) -> None: ...
def soft_dependency_error(fct_name: str, required_packages: str | Iterable[str]) -> NoReturn: ...
def warn_and_fix_parameter_renaming(
- old_parameter_name: str, new_parameter_name: str, new_parameter: _T, default_value: _T, category: Warning = ..., **kwargs: Any
+ old_parameter_name: str,
+ new_parameter_name: str,
+ new_parameter: _T,
+ default_value: _T,
+ category: type[Warning] = ...,
+ **kwargs: Any,
) -> _T: ...
class ADict(dict[_KT, _VT], MutableMapping[_KT, _VT]):
def __setattr__(self, key: str, value: _VT) -> None: ...
+ def __delattr__(self, key: _KT, force: bool = False) -> None: ... # type: ignore[override]
def __call__(self, key: _KT) -> _VT: ...
def __getattr__(self, name: str) -> _VT: ...
def __deepcopy__(self, memo: dict[int, Any] | None) -> Self: ...
@@ -116,10 +126,14 @@ class pandapowerNet(ADict[str, pd.DataFrame]):
res_ward: pd.DataFrame
res_xward: pd.DataFrame
res_protection: pd.DataFrame # Optional?
+ @deprecated("Use copy.deepcopy(net) instead of net.deepcopy()")
+ def deepcopy(self) -> Self: ...
class GeoAccessor:
def __init__(self, pandas_obj) -> None: ...
@property
+ def as_geo_obj(self): ...
+ @property
def type(self) -> str: ...
@property
def as_shapely_obj(self) -> pd.Series[BaseGeometry]: ... # type: ignore[type-var] # pyright: ignore[reportInvalidTypeArguments]
@@ -140,6 +154,7 @@ def element_types_to_ets(element_types: None = None) -> pd.Series[str]: ...
def element_types_to_ets(element_types: str) -> str: ...
@overload
def element_types_to_ets(element_types: list[str] | pd.Series[str] | pd.Index[str] | NDArray[np.str_]) -> list[str]: ...
+def empty_defaults_per_dtype(dtype: DTypeLike) -> float | Literal[""] | None: ...
def get_free_id(df: pd.DataFrame) -> np.int64: ...
class ppException(Exception): ...
diff --git a/stubs/pandapower-stubs/control/util/auxiliary.pyi b/stubs/pandapower-stubs/control/util/auxiliary.pyi
index f29c734..67efdd0 100644
--- a/stubs/pandapower-stubs/control/util/auxiliary.pyi
+++ b/stubs/pandapower-stubs/control/util/auxiliary.pyi
@@ -1,8 +1,9 @@
from _typeshed import Incomplete
+from typing import Any
-MATPLOTLIB_INSTALLED: bool
+from numpy.typing import DTypeLike, NDArray
-def asarray(val, dtype=...): ...
+def asarray(val: object, dtype: DTypeLike = ...) -> NDArray[Any]: ...
def get_controller_index_by_type(net, ctrl_type, idx=[]): ...
def get_controller_index_by_typename(net, typename, idx=[], case_sensitive: bool = False): ...
def get_controller_index(net, ctrl_type: Incomplete | None = None, parameters: Incomplete | None = None, idx=[]): ...
diff --git a/stubs/pandapower-stubs/convert_format.pyi b/stubs/pandapower-stubs/convert_format.pyi
index d609cd6..1be278d 100644
--- a/stubs/pandapower-stubs/convert_format.pyi
+++ b/stubs/pandapower-stubs/convert_format.pyi
@@ -4,3 +4,4 @@ from pandapower.auxiliary import pandapowerNet
def convert_format(net: pandapowerNet, elements_to_deserialize: Container[str] | None = None) -> pandapowerNet: ...
def correct_dtypes(net: pandapowerNet, error: bool) -> None: ...
+def convert_trafo_pst_logic(net: pandapowerNet) -> None: ...
diff --git a/stubs/pandapower-stubs/converter/pypower/from_ppc.pyi b/stubs/pandapower-stubs/converter/pypower/from_ppc.pyi
index 913e108..8e51ad3 100644
--- a/stubs/pandapower-stubs/converter/pypower/from_ppc.pyi
+++ b/stubs/pandapower-stubs/converter/pypower/from_ppc.pyi
@@ -1,14 +1,11 @@
-from _typeshed import Incomplete
+from pandapower.auxiliary import pandapowerNet
-from pandapower.pypower.idx_brch import ANGMAX as ANGMAX, ANGMIN as ANGMIN, RATE_B as RATE_B, RATE_C as RATE_C
-from pandapower.pypower.idx_bus import BUS_AREA as BUS_AREA, VM as VM
+ppc_elms: list[str]
-ppc_elms: Incomplete
-
-def from_ppc(ppc, f_hz: int = 50, validate_conversion: bool = False, **kwargs): ...
+def from_ppc(ppc, f_hz: float = 50, validate_conversion: bool = False, **kwargs) -> pandapowerNet: ...
def validate_from_ppc(
ppc,
- net,
+ net: pandapowerNet,
max_diff_values={
"bus_vm_pu": 1e-06,
"bus_va_degree": 1e-05,
@@ -17,4 +14,4 @@ def validate_from_ppc(
"gen_p_mw": 1e-06,
"gen_q_mvar": 1e-06,
},
-): ...
+) -> bool: ...
diff --git a/stubs/pandapower-stubs/create.pyi b/stubs/pandapower-stubs/create.pyi
index 76ca068..12d031e 100644
--- a/stubs/pandapower-stubs/create.pyi
+++ b/stubs/pandapower-stubs/create.pyi
@@ -1,578 +1,578 @@
from collections.abc import Collection, Mapping
-from typing import Any, Literal, SupportsFloat as Float, SupportsIndex as Int, TypeVar
+from typing import Any, Literal
from typing_extensions import TypeAlias
import numpy as np
+import pandas as pd
+from numpy.typing import DTypeLike
+from pandapower._typing import Array1D, Bool, Float, Int, ScalarOrVector
from pandapower.auxiliary import pandapowerNet
-_T = TypeVar("_T", bound=Any)
_CostElementType: TypeAlias = Literal["gen", "sgen", "ext_grid", "load", "dcline", "storage"]
_SGenGeneratorType: TypeAlias = Literal["current_source", "async", "async_doubly_fed"]
-_ScalarOrVector: TypeAlias = _T | Collection[_T]
-_Array1D: TypeAlias = np.ndarray[tuple[int], np.dtype[_T]]
-_Bool: TypeAlias = bool | np.bool
-def create_empty_network(
- name: str = "", f_hz: Int | Float = 50.0, sn_mva: Int | Float = 1, add_stdtypes: _Bool = True
-) -> pandapowerNet: ...
+def create_empty_network(name: str = "", f_hz: Float = 50.0, sn_mva: Float = 1, add_stdtypes: Bool = True) -> pandapowerNet: ...
def create_bus(
net: pandapowerNet,
- vn_kv: Int | Float,
+ vn_kv: Float,
name: str | None = None,
index: Int | None = None,
- geodata: tuple[Int | Float, Int | Float] | None = None,
+ geodata: tuple[Float, Float] | None = None,
type: Literal["b", "m", "n"] = "b",
zone: str | None = None,
- in_service: _Bool = True,
- max_vm_pu: Int | Float = ...,
- min_vm_pu: Int | Float = ...,
- coords: Collection[tuple[Int | Float, Int | Float]] | None = None,
+ in_service: Bool = True,
+ max_vm_pu: Float = ...,
+ min_vm_pu: Float = ...,
+ coords: Collection[tuple[Float, Float]] | None = None,
**kwargs,
) -> np.int64: ...
def create_bus_dc(
net: pandapowerNet,
- vn_kv: Int | Float,
+ vn_kv: Float,
name: str | None = None,
index: Int | None = None,
- geodata: tuple[Int | Float, Int | Float] | None = None,
+ geodata: tuple[Float, Float] | None = None,
type: Literal["b", "m", "n"] = "b",
zone: str | None = None,
- in_service: _Bool | None = True,
- max_vm_pu: Int | Float = ...,
- min_vm_pu: Int | Float = ...,
- coords: Collection[tuple[Int | Float, Int | Float]] | None = None,
+ in_service: Bool | None = True,
+ max_vm_pu: Float = ...,
+ min_vm_pu: Float = ...,
+ coords: Collection[tuple[Float, Float]] | None = None,
**kwargs,
) -> np.int64: ...
def create_buses(
net: pandapowerNet,
nr_buses: Int,
- vn_kv: _ScalarOrVector[Int | Float],
- index: _ScalarOrVector[Int] | None = None,
- name: _ScalarOrVector[str] | None = None,
- type: _ScalarOrVector[Literal["b", "m", "n"]] = "b",
- geodata: _ScalarOrVector[tuple[Int | Float, Int | Float]] | None = None,
- zone: _ScalarOrVector[str] | None = None,
- in_service: _ScalarOrVector[_Bool] = True,
- max_vm_pu: _ScalarOrVector[Int | Float] | None = None,
- min_vm_pu: _ScalarOrVector[Int | Float] | None = None,
- coords: _ScalarOrVector[Collection[tuple[Int | Float, Int | Float]]] | None = None,
+ vn_kv: ScalarOrVector[Float],
+ index: ScalarOrVector[Int] | None = None,
+ name: ScalarOrVector[str] | None = None,
+ type: ScalarOrVector[Literal["b", "m", "n"]] = "b",
+ geodata: ScalarOrVector[tuple[Float, Float]] | None = None,
+ zone: ScalarOrVector[str] | None = None,
+ in_service: ScalarOrVector[Bool] = True,
+ max_vm_pu: ScalarOrVector[Float] = ...,
+ min_vm_pu: ScalarOrVector[Float] = ...,
+ coords: ScalarOrVector[Collection[tuple[Float, Float]]] | None = None,
**kwargs,
-) -> _Array1D[np.int64]: ...
+) -> Array1D[np.int64]: ...
def create_buses_dc(
net: pandapowerNet,
nr_buses_dc: Int,
- vn_kv: _ScalarOrVector[Int | Float],
- index: _ScalarOrVector[Int] | None = None,
- name: _ScalarOrVector[str] | None = None,
- type: _ScalarOrVector[Literal["b", "m", "n"]] = "b",
- geodata: _ScalarOrVector[tuple[Int | Float, Int | Float]] | None = None,
- zone: _ScalarOrVector[str] | None = None,
- in_service: _ScalarOrVector[_Bool] = True,
- max_vm_pu: _ScalarOrVector[Int | Float] | None = None,
- min_vm_pu: _ScalarOrVector[Int | Float] | None = None,
- coords: _ScalarOrVector[Collection[tuple[Int | Float, Int | Float]]] | None = None,
+ vn_kv: ScalarOrVector[Float],
+ index: ScalarOrVector[Int] | None = None,
+ name: ScalarOrVector[str] | None = None,
+ type: ScalarOrVector[Literal["b", "m", "n"]] = "b",
+ geodata: ScalarOrVector[tuple[Float, Float]] | None = None,
+ zone: ScalarOrVector[str] | None = None,
+ in_service: ScalarOrVector[Bool] = True,
+ max_vm_pu: ScalarOrVector[Float] = ...,
+ min_vm_pu: ScalarOrVector[Float] = ...,
+ coords: ScalarOrVector[Collection[tuple[Float, Float]]] | None = None,
**kwargs,
-) -> _Array1D[np.int64]: ...
+) -> Array1D[np.int64]: ...
def create_load(
net: pandapowerNet,
bus: Int,
- p_mw: Int | Float,
- q_mvar: Int | Float = 0,
- const_z_percent: Int | Float = 0,
- const_i_percent: Int | Float = 0,
- sn_mva: Int | Float = ...,
+ p_mw: Float,
+ q_mvar: Float = 0,
+ const_z_percent: Float = 0,
+ const_i_percent: Float = 0,
+ sn_mva: Float = ...,
name: str | None = None,
- scaling: Int | Float = 1.0,
+ scaling: Float = 1.0,
index: Int | None = None,
- in_service: _Bool = True,
+ in_service: Bool = True,
type: Literal["wye", "delta"] = "wye",
- max_p_mw: Int | Float = ...,
- min_p_mw: Int | Float = ...,
- max_q_mvar: Int | Float = ...,
- min_q_mvar: Int | Float = ...,
- controllable: _Bool = ...,
+ max_p_mw: Float = ...,
+ min_p_mw: Float = ...,
+ max_q_mvar: Float = ...,
+ min_q_mvar: Float = ...,
+ controllable: Bool | float = ..., # float because default value is nan
**kwargs,
) -> np.int64: ...
def create_loads(
net: pandapowerNet,
buses: Collection[Int],
- p_mw: _ScalarOrVector[Int | Float],
- q_mvar: _ScalarOrVector[Int | Float] = 0,
- const_z_percent: _ScalarOrVector[Int | Float] = 0,
- const_i_percent: _ScalarOrVector[Int | Float] = 0,
- sn_mva: _ScalarOrVector[Int | Float] = ...,
- name: _ScalarOrVector[str] | None = None,
- scaling: _ScalarOrVector[Int | Float] = 1.0,
+ p_mw: ScalarOrVector[Float],
+ q_mvar: ScalarOrVector[Float] = 0,
+ const_z_percent: ScalarOrVector[Float] = 0,
+ const_i_percent: ScalarOrVector[Float] = 0,
+ sn_mva: ScalarOrVector[Float] = ...,
+ name: ScalarOrVector[str] | None = None,
+ scaling: ScalarOrVector[Float] = 1.0,
index: Collection[Int] | None = None,
- in_service: _ScalarOrVector[_Bool] = True,
- type: _ScalarOrVector[Literal["wye", "delta"]] | None = None,
- max_p_mw: _ScalarOrVector[Int | Float] | None = None,
- min_p_mw: _ScalarOrVector[Int | Float] | None = None,
- max_q_mvar: _ScalarOrVector[Int | Float] | None = None,
- min_q_mvar: _ScalarOrVector[Int | Float] | None = None,
- controllable: _ScalarOrVector[_Bool] | None = None,
+ in_service: ScalarOrVector[Bool] = True,
+ type: ScalarOrVector[Literal["wye", "delta"]] | None = "wye",
+ max_p_mw: ScalarOrVector[Float] = ...,
+ min_p_mw: ScalarOrVector[Float] = ...,
+ max_q_mvar: ScalarOrVector[Float] = ...,
+ min_q_mvar: ScalarOrVector[Float] = ...,
+ controllable: ScalarOrVector[Bool] | float = ..., # float because default value is nan
**kwargs,
-) -> _Array1D[np.int64]: ...
+) -> Array1D[np.int64]: ...
def create_asymmetric_load(
net: pandapowerNet,
bus: Int,
- p_a_mw: Int | Float = 0,
- p_b_mw: Int | Float = 0,
- p_c_mw: Int | Float = 0,
- q_a_mvar: Int | Float = 0,
- q_b_mvar: Int | Float = 0,
- q_c_mvar: Int | Float = 0,
- sn_mva: Int | Float = ...,
+ p_a_mw: Float = 0,
+ p_b_mw: Float = 0,
+ p_c_mw: Float = 0,
+ q_a_mvar: Float = 0,
+ q_b_mvar: Float = 0,
+ q_c_mvar: Float = 0,
+ sn_mva: Float = ...,
name: str | None = None,
- scaling: Int | Float = 1.0,
+ scaling: Float = 1.0,
index: Int | None = None,
- in_service: _Bool = True,
+ in_service: Bool = True,
type: Literal["wye", "delta"] = "wye",
**kwargs,
) -> np.int64: ...
def create_load_from_cosphi(
- net: pandapowerNet,
- bus: Int,
- sn_mva: Int | Float,
- cos_phi: Int | Float,
- mode: Literal["underexcited", "overexcited"],
- **kwargs,
+ net: pandapowerNet, bus: Int, sn_mva: Float, cos_phi: Float, mode: Literal["underexcited", "overexcited"], **kwargs
) -> np.int64: ...
def create_sgen(
net: pandapowerNet,
bus: Int,
- p_mw: Int | Float,
- q_mvar: Int | Float = 0,
- sn_mva: Int | Float = ...,
+ p_mw: Float,
+ q_mvar: Float = 0,
+ sn_mva: Float = ...,
name: str | None = None,
index: Int | None = None,
- scaling: Int | Float = 1,
- type: Literal["wye", "delta", "motor"] = "wye",
- in_service: _Bool = True,
- max_p_mw: Int | Float = ...,
- min_p_mw: Int | Float = ...,
- max_q_mvar: Int | Float = ...,
- min_q_mvar: Int | Float = ...,
- controllable: _Bool = ...,
- k: Int | Float = ...,
- rx: Int | Float | None = None,
- current_source: _Bool = True,
+ scaling: Float = 1.0,
+ type: Literal["wye", "delta", "motor"] | None = "wye",
+ in_service: Bool = True,
+ max_p_mw: Float = ...,
+ min_p_mw: Float = ...,
+ max_q_mvar: Float = ...,
+ min_q_mvar: Float = ...,
+ controllable: Bool | float = ..., # float because default value is nan
+ k: Float = ...,
+ rx: Float = ...,
+ id_q_capability_curve_characteristic: Int | None = None,
+ reactive_capability_curve: Bool = False,
+ curve_style: str | None = None,
+ current_source: Bool = True,
generator_type: _SGenGeneratorType | None = None,
- max_ik_ka: Int | Float = ...,
- kappa: Int | Float = ...,
- lrc_pu: Int | Float = ...,
+ max_ik_ka: Float = ...,
+ kappa: Float = ...,
+ lrc_pu: Float = ...,
**kwargs,
) -> np.int64: ...
def create_sgens(
net: pandapowerNet,
buses: Collection[Int],
- p_mw: _ScalarOrVector[Int | Float],
- q_mvar: _ScalarOrVector[Int | Float] = 0,
- sn_mva: _ScalarOrVector[Int | Float] = ...,
- name: _ScalarOrVector[str] | None = None,
+ p_mw: ScalarOrVector[Float],
+ q_mvar: ScalarOrVector[Float] = 0,
+ sn_mva: ScalarOrVector[Float] = ...,
+ name: ScalarOrVector[str] | None = None,
index: Collection[Int] | None = None,
- scaling: _ScalarOrVector[Int | Float] = 1.0,
- type: _ScalarOrVector[Literal["wye", "delta", "motor"]] | None = None,
- in_service: _ScalarOrVector[_Bool] = True,
- max_p_mw: _ScalarOrVector[Int | Float] | None = None,
- min_p_mw: _ScalarOrVector[Int | Float] | None = None,
- max_q_mvar: _ScalarOrVector[Int | Float] | None = None,
- min_q_mvar: _ScalarOrVector[Int | Float] | None = None,
- controllable: _ScalarOrVector[_Bool] | None = None,
- k: _ScalarOrVector[Int | Float] | None = None,
- rx: _ScalarOrVector[Int | Float] | None = None,
- current_source: _ScalarOrVector[_Bool] = True,
- generator_type: _ScalarOrVector[_SGenGeneratorType] = "current_source",
- max_ik_ka: _ScalarOrVector[Int | Float] = ...,
- kappa: _ScalarOrVector[Int | Float] = ...,
- lrc_pu: _ScalarOrVector[Int | Float] = ...,
+ scaling: ScalarOrVector[Float] = 1.0,
+ type: ScalarOrVector[Literal["wye", "delta", "motor"]] | None = "wye",
+ in_service: ScalarOrVector[Bool] = True,
+ max_p_mw: ScalarOrVector[Float] = ...,
+ min_p_mw: ScalarOrVector[Float] = ...,
+ max_q_mvar: ScalarOrVector[Float] = ...,
+ min_q_mvar: ScalarOrVector[Float] = ...,
+ controllable: ScalarOrVector[Bool] | float = ..., # float because default value is nan
+ k: ScalarOrVector[Float] = ...,
+ rx: ScalarOrVector[Float] = ...,
+ id_q_capability_curve_characteristic: ScalarOrVector[Int] | float | None = ..., # float because default value is nan
+ reactive_capability_curve: ScalarOrVector[Bool] = False,
+ curve_style: ScalarOrVector[str] | None = None,
+ current_source: ScalarOrVector[Bool] = True,
+ generator_type: ScalarOrVector[_SGenGeneratorType] = "current_source",
+ max_ik_ka: ScalarOrVector[Float] = ...,
+ kappa: ScalarOrVector[Float] = ...,
+ lrc_pu: ScalarOrVector[Float] = ...,
**kwargs,
-) -> _Array1D[np.int64]: ...
+) -> Array1D[np.int64]: ...
def create_asymmetric_sgen(
net: pandapowerNet,
bus: Int,
- p_a_mw: Int | Float = 0,
- p_b_mw: Int | Float = 0,
- p_c_mw: Int | Float = 0,
- q_a_mvar: Int | Float = 0,
- q_b_mvar: Int | Float = 0,
- q_c_mvar: Int | Float = 0,
- sn_mva: Int | Float = ...,
+ p_a_mw: Float = 0,
+ p_b_mw: Float = 0,
+ p_c_mw: Float = 0,
+ q_a_mvar: Float = 0,
+ q_b_mvar: Float = 0,
+ q_c_mvar: Float = 0,
+ sn_mva: Float = ...,
name: str | None = None,
index: Int | None = None,
- scaling: Int | Float = 1,
+ scaling: Float = 1.0,
type: Literal["wye", "delta"] = "wye",
- in_service: _Bool = True,
+ in_service: Bool = True,
**kwargs,
) -> np.int64: ...
def create_sgen_from_cosphi(
- net: pandapowerNet,
- bus: Int,
- sn_mva: Int | Float,
- cos_phi: Int | Float,
- mode: Literal["underexcited", "overexcited"],
- **kwargs,
+ net: pandapowerNet, bus: Int, sn_mva: Float, cos_phi: Float, mode: Literal["underexcited", "overexcited"], **kwargs
) -> np.int64: ...
def create_storage(
net: pandapowerNet,
bus: Int,
- p_mw: Int | Float,
- max_e_mwh: Int | Float,
- q_mvar: Int | Float = 0,
- sn_mva: Int | Float = ...,
- soc_percent: Int | Float = ...,
- min_e_mwh: Int | Float = 0.0,
+ p_mw: Float,
+ max_e_mwh: Float,
+ q_mvar: Float = 0,
+ sn_mva: Float = ...,
+ soc_percent: Float = ...,
+ min_e_mwh: Float = 0.0,
name: str | None = None,
index: Int | None = None,
- scaling: Int | Float = 1.0,
+ scaling: Float = 1.0,
type: str | None = None,
- in_service: _Bool = True,
- max_p_mw: Int | Float = ...,
- min_p_mw: Int | Float = ...,
- max_q_mvar: Int | Float = ...,
- min_q_mvar: Int | Float = ...,
- controllable: _Bool = ...,
+ in_service: Bool = True,
+ max_p_mw: Float = ...,
+ min_p_mw: Float = ...,
+ max_q_mvar: Float = ...,
+ min_q_mvar: Float = ...,
+ controllable: Bool | float = ..., # float because default value is nan
**kwargs,
) -> np.int64: ...
def create_storages(
net: pandapowerNet,
buses: Collection[Int],
- p_mw: _ScalarOrVector[Int | Float],
- max_e_mwh: _ScalarOrVector[Int | Float],
- q_mvar: _ScalarOrVector[Int | Float] = 0,
- sn_mva: _ScalarOrVector[Int | Float] = ...,
- soc_percent: _ScalarOrVector[Int | Float] = ...,
- min_e_mwh: _ScalarOrVector[Int | Float] = 0.0,
- name: _ScalarOrVector[str] | None = None,
+ p_mw: ScalarOrVector[Float],
+ max_e_mwh: ScalarOrVector[Float],
+ q_mvar: ScalarOrVector[Float] = 0,
+ sn_mva: ScalarOrVector[Float] = ...,
+ soc_percent: ScalarOrVector[Float] = ...,
+ min_e_mwh: ScalarOrVector[Float] = 0.0,
+ name: ScalarOrVector[str] | None = None,
index: Collection[Int] | None = None,
- scaling: _ScalarOrVector[Int | Float] = 1.0,
- type: _ScalarOrVector[str] | None = None,
- in_service: _ScalarOrVector[_Bool] = True,
- max_p_mw: _ScalarOrVector[Int | Float] = ...,
- min_p_mw: _ScalarOrVector[Int | Float] = ...,
- max_q_mvar: _ScalarOrVector[Int | Float] = ...,
- min_q_mvar: _ScalarOrVector[Int | Float] = ...,
- controllable: _ScalarOrVector[Int | Float] = ...,
+ scaling: ScalarOrVector[Float] = 1.0,
+ type: ScalarOrVector[str] | None = None,
+ in_service: ScalarOrVector[Bool] = True,
+ max_p_mw: ScalarOrVector[Float] = ...,
+ min_p_mw: ScalarOrVector[Float] = ...,
+ max_q_mvar: ScalarOrVector[Float] = ...,
+ min_q_mvar: ScalarOrVector[Float] = ...,
+ controllable: ScalarOrVector[Bool] | float = ..., # float because default value is nan
**kwargs,
-) -> _Array1D[np.int64]: ...
+) -> Array1D[np.int64]: ...
def create_gen(
net: pandapowerNet,
bus: Int,
- p_mw: Int | Float,
- vm_pu: Int | Float = 1.0,
- sn_mva: Int | Float = ...,
+ p_mw: Float,
+ vm_pu: Float = 1.0,
+ sn_mva: Float = ...,
name: str | None = None,
index: Int | None = None,
- max_q_mvar: Int | Float = ...,
- min_q_mvar: Int | Float = ...,
- min_p_mw: Int | Float = ...,
- max_p_mw: Int | Float = ...,
- min_vm_pu: Int | Float = ...,
- max_vm_pu: Int | Float = ...,
- scaling: Int | Float = 1.0,
+ max_q_mvar: Float = ...,
+ min_q_mvar: Float = ...,
+ min_p_mw: Float = ...,
+ max_p_mw: Float = ...,
+ min_vm_pu: Float = ...,
+ max_vm_pu: Float = ...,
+ scaling: Float = 1.0,
type: str | None = None,
- slack: _Bool = False,
- controllable: _Bool = ...,
- vn_kv: Int | Float = ...,
- xdss_pu: Int | Float = ...,
- rdss_ohm: Int | Float = ...,
- cos_phi: Int | Float = ...,
- pg_percent: Int | Float = ...,
- power_station_trafo: Int | None = None,
- in_service: _Bool = True,
- slack_weight: Int | Float = 0.0,
+ slack: Bool = False,
+ id_q_capability_curve_characteristic: Int | None = None,
+ reactive_capability_curve: Bool = False,
+ curve_style: str | None = None,
+ controllable: Bool | float = ..., # float because default value is nan
+ vn_kv: Float = ...,
+ xdss_pu: Float = ...,
+ rdss_ohm: Float = ...,
+ cos_phi: Float = ...,
+ pg_percent: Float = ...,
+ power_station_trafo: Int | float = ..., # float because default value is nan
+ in_service: Bool = True,
+ slack_weight: Float = 0.0,
**kwargs,
) -> np.int64: ...
def create_gens(
net: pandapowerNet,
buses: Collection[Int],
- p_mw: _ScalarOrVector[Int | Float],
- vm_pu: _ScalarOrVector[Int | Float] = 1.0,
- sn_mva: _ScalarOrVector[Int | Float] = ...,
- name: _ScalarOrVector[str] | None = None,
+ p_mw: ScalarOrVector[Float],
+ vm_pu: ScalarOrVector[Float] = 1.0,
+ sn_mva: ScalarOrVector[Float] = ...,
+ name: ScalarOrVector[str] | None = None,
index: Collection[Int] | None = None,
- max_q_mvar: _ScalarOrVector[Int | Float] | None = None,
- min_q_mvar: _ScalarOrVector[Int | Float] | None = None,
- min_p_mw: _ScalarOrVector[Int | Float] | None = None,
- max_p_mw: _ScalarOrVector[Int | Float] | None = None,
- min_vm_pu: _ScalarOrVector[Int | Float] | None = None,
- max_vm_pu: _ScalarOrVector[Int | Float] | None = None,
- scaling: _ScalarOrVector[Int | Float] = 1,
- type: _ScalarOrVector[str] | None = None,
- slack: _ScalarOrVector[_Bool] = False,
- controllable: _ScalarOrVector[_Bool] | None = None,
- vn_kv: _ScalarOrVector[Int | Float] | None = None,
- xdss_pu: _ScalarOrVector[Int | Float] | None = None,
- rdss_ohm: _ScalarOrVector[Int | Float] | None = None,
- cos_phi: _ScalarOrVector[Int | Float] | None = None,
- pg_percent: _ScalarOrVector[Int | Float] | None = None,
- power_station_trafo: _ScalarOrVector[Int] | None = None,
- in_service: _ScalarOrVector[_Bool] = True,
- slack_weight: _ScalarOrVector[Int | Float] = 0.0,
+ max_q_mvar: ScalarOrVector[Float] = ...,
+ min_q_mvar: ScalarOrVector[Float] = ...,
+ min_p_mw: ScalarOrVector[Float] = ...,
+ max_p_mw: ScalarOrVector[Float] = ...,
+ min_vm_pu: ScalarOrVector[Float] = ...,
+ max_vm_pu: ScalarOrVector[Float] = ...,
+ scaling: ScalarOrVector[Float] = 1.0,
+ type: ScalarOrVector[str] | None = None,
+ slack: ScalarOrVector[Bool] = False,
+ id_q_capability_curve_characteristic: ScalarOrVector[Int] | None | float = ..., # float because default value is nan
+ reactive_capability_curve: ScalarOrVector[Bool] = False,
+ curve_style: ScalarOrVector[str] | None = None,
+ controllable: ScalarOrVector[Bool] | float = ..., # float because default value is nan
+ vn_kv: ScalarOrVector[Float] = ...,
+ xdss_pu: ScalarOrVector[Float] = ...,
+ rdss_ohm: ScalarOrVector[Float] = ...,
+ cos_phi: ScalarOrVector[Float] = ...,
+ pg_percent: ScalarOrVector[Float] = ...,
+ power_station_trafo: ScalarOrVector[Int] | float = ..., # float because default value is nan
+ in_service: ScalarOrVector[Bool] = True,
+ slack_weight: ScalarOrVector[Float] = 0.0,
**kwargs,
-) -> _Array1D[np.int64]: ...
+) -> Array1D[np.int64]: ...
def create_motor(
net: pandapowerNet,
bus: Int,
- pn_mech_mw: Int | Float,
- cos_phi: Int | Float,
- efficiency_percent: Int | Float = 100.0,
- loading_percent: Int | Float = 100.0,
+ pn_mech_mw: Float,
+ cos_phi: Float,
+ efficiency_percent: Float = 100.0,
+ loading_percent: Float = 100.0,
name: str | None = None,
- lrc_pu: Int | Float = ...,
- scaling: Int | Float = 1.0,
- vn_kv: Int | Float = ...,
- rx: Int | Float = ...,
+ lrc_pu: Float = ...,
+ scaling: Float = 1.0,
+ vn_kv: Float = ...,
+ rx: Float = ...,
index: Int | None = None,
- in_service: _Bool = True,
- cos_phi_n: Int | Float = ...,
- efficiency_n_percent: Int | Float = ...,
+ in_service: Bool = True,
+ cos_phi_n: Float = ...,
+ efficiency_n_percent: Float = ...,
**kwargs,
) -> np.int64: ...
def create_ext_grid(
net: pandapowerNet,
bus: Int,
- vm_pu: Int | Float = 1.0,
- va_degree: Int | Float = 0.0,
+ vm_pu: Float = 1.0,
+ va_degree: Float = 0.0,
name: str | None = None,
- in_service: _Bool = True,
- s_sc_max_mva: Int | Float = ...,
- s_sc_min_mva: Int | Float = ...,
- rx_max: Int | Float = ...,
- rx_min: Int | Float = ...,
- max_p_mw: Int | Float = ...,
- min_p_mw: Int | Float = ...,
- max_q_mvar: Int | Float = ...,
- min_q_mvar: Int | Float = ...,
+ in_service: Bool = True,
+ s_sc_max_mva: Float = ...,
+ s_sc_min_mva: Float = ...,
+ rx_max: Float = ...,
+ rx_min: Float = ...,
+ max_p_mw: Float = ...,
+ min_p_mw: Float = ...,
+ max_q_mvar: Float = ...,
+ min_q_mvar: Float = ...,
index: Int | None = None,
- r0x0_max: Int | Float = ...,
- x0x_max: Int | Float = ...,
- controllable: _Bool = ...,
- slack_weight: Int | Float = 1.0,
+ r0x0_max: Float = ...,
+ x0x_max: Float = ...,
+ controllable: Bool | float = ..., # float because default value is nan
+ slack_weight: Float = 1.0,
**kwargs,
) -> np.int64: ...
def create_line(
net: pandapowerNet,
from_bus: Int,
to_bus: Int,
- length_km: Int | Float,
+ length_km: Float,
std_type: str,
name: str | None = None,
index: Int | None = None,
- geodata: Collection[tuple[Int | Float, Int | Float]] | None = None,
- df: Int | Float = 1.0,
+ geodata: Collection[tuple[Float, Float]] | None = None,
+ df: Float = 1.0,
parallel: Int = 1,
- in_service: _Bool = True,
- max_loading_percent: Int | Float = ...,
- alpha: Int | Float = ...,
- temperature_degree_celsius: Int | Float = ...,
+ in_service: Bool = True,
+ max_loading_percent: Float = ...,
+ alpha: Float = ...,
+ temperature_degree_celsius: Float = ...,
**kwargs,
) -> np.int64: ...
def create_line_dc(
net: pandapowerNet,
from_bus_dc: Int,
to_bus_dc: Int,
- length_km: Int | Float,
+ length_km: Float,
std_type: str,
name: str | None = None,
index: Int | None = None,
- geodata: Collection[tuple[Int | Float, Int | Float]] | None = None,
- df: Int | Float = 1.0,
+ geodata: Collection[tuple[Float, Float]] | None = None,
+ df: Float = 1.0,
parallel: Int = 1,
- in_service: _Bool = True,
- max_loading_percent: Int | Float = ...,
- alpha: Int | Float = ...,
- temperature_degree_celsius: Int | Float = ...,
+ in_service: Bool = True,
+ max_loading_percent: Float = ...,
+ alpha: Float = ...,
+ temperature_degree_celsius: Float = ...,
**kwargs,
) -> np.int64: ...
def create_lines(
net: pandapowerNet,
from_buses: Collection[Int],
to_buses: Collection[Int],
- length_km: _ScalarOrVector[Int | Float],
- std_type: _ScalarOrVector[str],
- name: _ScalarOrVector[str] | None = None,
+ length_km: ScalarOrVector[Float],
+ std_type: ScalarOrVector[str],
+ name: ScalarOrVector[str] | None = None,
index: Collection[Int] | None = None,
- geodata: _ScalarOrVector[Collection[tuple[Int | Float, Int | Float]]] | None = None,
- df: _ScalarOrVector[Int | Float] = 1.0,
- parallel: _ScalarOrVector[Int] = 1,
- in_service: _ScalarOrVector[_Bool] = True,
- max_loading_percent: _ScalarOrVector[Int | Float] = ...,
+ geodata: ScalarOrVector[Collection[tuple[Float, Float]]] | None = None,
+ df: ScalarOrVector[Float] = 1.0,
+ parallel: ScalarOrVector[Int] = 1,
+ in_service: ScalarOrVector[Bool] = True,
+ max_loading_percent: ScalarOrVector[Float] = ...,
**kwargs,
-) -> _Array1D[np.int64]: ...
+) -> Array1D[np.int64]: ...
def create_lines_dc(
net: pandapowerNet,
from_buses_dc: Collection[Int],
to_buses_dc: Collection[Int],
- length_km: _ScalarOrVector[Int | Float],
- std_type: _ScalarOrVector[str],
- name: _ScalarOrVector[str] | None = None,
+ length_km: ScalarOrVector[Float],
+ std_type: ScalarOrVector[str],
+ name: ScalarOrVector[str] | None = None,
index: Collection[Int] | None = None,
- geodata: _ScalarOrVector[Collection[tuple[Int | Float, Int | Float]]] | None = None,
- df: _ScalarOrVector[Int | Float] = 1.0,
- parallel: _ScalarOrVector[Int] = 1,
- in_service: _ScalarOrVector[_Bool] = True,
- max_loading_percent: _ScalarOrVector[Int | Float] = ...,
+ geodata: ScalarOrVector[Collection[tuple[Float, Float]]] | None = None,
+ df: ScalarOrVector[Float] = 1.0,
+ parallel: ScalarOrVector[Int] = 1,
+ in_service: ScalarOrVector[Bool] = True,
+ max_loading_percent: ScalarOrVector[Float] = ...,
**kwargs,
-) -> _Array1D[np.int64]: ...
+) -> Array1D[np.int64]: ...
def create_line_from_parameters(
net: pandapowerNet,
from_bus: Int,
to_bus: Int,
- length_km: Int | Float,
- r_ohm_per_km: Int | Float,
- x_ohm_per_km: Int | Float,
- c_nf_per_km: Int | Float,
- max_i_ka: Int | Float,
+ length_km: Float,
+ r_ohm_per_km: Float,
+ x_ohm_per_km: Float,
+ c_nf_per_km: Float,
+ max_i_ka: Float,
name: str | None = None,
index: Int | None = None,
type: Literal["ol", "cs"] | None = None,
- geodata: Collection[tuple[Int | Float, Int | Float]] | None = None,
- in_service: _Bool = True,
- df: Int | Float = 1.0,
+ geodata: Collection[tuple[Float, Float]] | None = None,
+ in_service: Bool = True,
+ df: Float = 1.0,
parallel: Int = 1,
- g_us_per_km: Int | Float = 0.0,
- max_loading_percent: Int | Float = ...,
- alpha: Int | Float = ...,
- temperature_degree_celsius: Int | Float = ...,
- r0_ohm_per_km: Int | Float = ...,
- x0_ohm_per_km: Int | Float = ...,
- c0_nf_per_km: Int | Float = ...,
- g0_us_per_km: Int | Float = 0.0,
- endtemp_degree: Int | Float = ...,
+ g_us_per_km: Float = 0.0,
+ max_loading_percent: Float = ...,
+ alpha: Float = ...,
+ temperature_degree_celsius: Float = ...,
+ r0_ohm_per_km: Float = ...,
+ x0_ohm_per_km: Float = ...,
+ c0_nf_per_km: Float = ...,
+ g0_us_per_km: Float = 0,
+ endtemp_degree: Float = ...,
**kwargs,
) -> np.int64: ...
def create_line_dc_from_parameters(
net: pandapowerNet,
from_bus_dc: Int,
to_bus_dc: Int,
- length_km: Int | Float,
- r_ohm_per_km: Int | Float,
- max_i_ka: Int | Float,
+ length_km: Float,
+ r_ohm_per_km: Float,
+ max_i_ka: Float,
name: str | None = None,
index: Int | None = None,
type: Literal["ol", "cs"] | None = None,
- geodata: Collection[tuple[Int | Float, Int | Float]] | None = None,
- in_service: _Bool = True,
- df: Int | Float = 1.0,
+ geodata: Collection[tuple[Float, Float]] | None = None,
+ in_service: Bool = True,
+ df: Float = 1.0,
parallel: Int = 1,
- max_loading_percent: Int | Float = ...,
- alpha: Int | Float = ...,
- temperature_degree_celsius: Int | Float = ...,
- g_us_per_km: Int | Float = 0.0,
+ max_loading_percent: Float = ...,
+ alpha: Float = ...,
+ temperature_degree_celsius: Float = ...,
+ g_us_per_km: Float = 0.0,
**kwargs,
) -> np.int64: ...
def create_lines_from_parameters(
net: pandapowerNet,
from_buses: Collection[Int],
to_buses: Collection[Int],
- length_km: _ScalarOrVector[Int | Float],
- r_ohm_per_km: _ScalarOrVector[Int | Float],
- x_ohm_per_km: _ScalarOrVector[Int | Float],
- c_nf_per_km: _ScalarOrVector[Int | Float],
- max_i_ka: _ScalarOrVector[Int | Float],
- name: _ScalarOrVector[str] | None = None,
+ length_km: ScalarOrVector[Float],
+ r_ohm_per_km: ScalarOrVector[Float],
+ x_ohm_per_km: ScalarOrVector[Float],
+ c_nf_per_km: ScalarOrVector[Float],
+ max_i_ka: ScalarOrVector[Float],
+ name: ScalarOrVector[str] | None = None,
index: Collection[Int] | None = None,
- type: _ScalarOrVector[Literal["ol", "cs"]] | None = None,
- geodata: _ScalarOrVector[Collection[tuple[Int | Float, Int | Float]]] | None = None,
- in_service: _ScalarOrVector[_Bool] = True,
- df: _ScalarOrVector[Int | Float] = 1.0,
- parallel: _ScalarOrVector[Int] = 1,
- g_us_per_km: _ScalarOrVector[Int | Float] = 0.0,
- max_loading_percent: _ScalarOrVector[Int | Float] = ...,
- alpha: _ScalarOrVector[Int | Float] | None = None,
- temperature_degree_celsius: _ScalarOrVector[Int | Float] | None = None,
- r0_ohm_per_km: _ScalarOrVector[Int | Float] | None = None,
- x0_ohm_per_km: _ScalarOrVector[Int | Float] | None = None,
- c0_nf_per_km: _ScalarOrVector[Int | Float] | None = None,
- g0_us_per_km: _ScalarOrVector[Int | Float] | None = None,
+ type: ScalarOrVector[Literal["ol", "cs"]] | None = None,
+ geodata: ScalarOrVector[Collection[tuple[Float, Float]]] | None = None,
+ in_service: ScalarOrVector[Bool] = True,
+ df: ScalarOrVector[Float] = 1.0,
+ parallel: ScalarOrVector[Int] = 1,
+ g_us_per_km: ScalarOrVector[Float] = 0.0,
+ max_loading_percent: ScalarOrVector[Float] = ...,
+ alpha: ScalarOrVector[Float] = ...,
+ temperature_degree_celsius: ScalarOrVector[Float] = ...,
+ r0_ohm_per_km: ScalarOrVector[Float] = ...,
+ x0_ohm_per_km: ScalarOrVector[Float] = ...,
+ c0_nf_per_km: ScalarOrVector[Float] = ...,
+ g0_us_per_km: ScalarOrVector[Float] = ...,
**kwargs,
-) -> _Array1D[np.int64]: ...
+) -> Array1D[np.int64]: ...
def create_lines_dc_from_parameters(
net: pandapowerNet,
from_buses_dc: Collection[Int],
to_buses_dc: Collection[Int],
- length_km: _ScalarOrVector[Int | Float],
- r_ohm_per_km: _ScalarOrVector[Int | Float],
- max_i_ka: _ScalarOrVector[Int | Float],
- name: _ScalarOrVector[str] | None = None,
+ length_km: ScalarOrVector[Float],
+ r_ohm_per_km: ScalarOrVector[Float],
+ max_i_ka: ScalarOrVector[Float],
+ name: ScalarOrVector[str] | None = None,
index: Collection[Int] | None = None,
- type: _ScalarOrVector[Literal["ol", "cs"]] | None = None,
- geodata: _ScalarOrVector[Collection[tuple[Int | Float, Int | Float]]] | None = None,
- in_service: _ScalarOrVector[_Bool] = True,
- df: _ScalarOrVector[Int | Float] = 1.0,
- parallel: _ScalarOrVector[Int] = 1,
- g_us_per_km: _ScalarOrVector[Int | Float] = 0.0,
- max_loading_percent: _ScalarOrVector[Int | Float] = ...,
- alpha: _ScalarOrVector[Int | Float] = ...,
- temperature_degree_celsius: _ScalarOrVector[Int | Float] = ...,
+ type: ScalarOrVector[Literal["ol", "cs"]] | None = None,
+ geodata: ScalarOrVector[Collection[tuple[Float, Float]]] | None = None,
+ in_service: ScalarOrVector[Bool] = True,
+ df: ScalarOrVector[Float] = 1.0,
+ parallel: ScalarOrVector[Int] = 1,
+ g_us_per_km: ScalarOrVector[Float] = 0.0,
+ max_loading_percent: ScalarOrVector[Float] = ...,
+ alpha: ScalarOrVector[Float] = ...,
+ temperature_degree_celsius: ScalarOrVector[Float] = ...,
**kwargs,
-) -> _Array1D[np.int64]: ...
+) -> Array1D[np.int64]: ...
def create_transformer(
net: pandapowerNet,
hv_bus: Int,
lv_bus: Int,
std_type: str,
name: str | None = None,
- tap_pos: Int = ...,
- in_service: _Bool = True,
+ tap_pos: Int | float = ..., # float because default value is nan
+ in_service: Bool = True,
index: Int | None = None,
- max_loading_percent: Int | Float = ...,
+ max_loading_percent: Float = ...,
parallel: Int = 1,
- df: Int | Float = 1.0,
+ df: Float = 1.0,
tap_changer_type: Literal["Ratio", "Symmetrical", "Ideal", "Tabular"] | None = None,
- tap_dependency_table: _Bool = ...,
- id_characteristic_table: Int = ...,
- pt_percent: Int | Float = ...,
- oltc: _Bool = ...,
- xn_ohm: Int | Float = ...,
- tap2_pos: Int = ...,
+ tap_dependency_table: Bool | float = ..., # float because default value is nan
+ id_characteristic_table: Int | float = ..., # float because default value is nan
+ pt_percent: Float = ...,
+ oltc: Bool | float = ..., # float because default value is nan
+ xn_ohm: Float = ...,
+ tap2_pos: Int | float = ..., # float because default value is nan
**kwargs,
) -> np.int64: ...
def create_transformer_from_parameters(
net: pandapowerNet,
hv_bus: Int,
lv_bus: Int,
- sn_mva: Int | Float,
- vn_hv_kv: Int | Float,
- vn_lv_kv: Int | Float,
- vkr_percent: Int | Float,
- vk_percent: Int | Float,
- pfe_kw: Int | Float,
- i0_percent: Int | Float,
- shift_degree: Int | Float = 0.0,
+ sn_mva: Float,
+ vn_hv_kv: Float,
+ vn_lv_kv: Float,
+ vkr_percent: Float,
+ vk_percent: Float,
+ pfe_kw: Float,
+ i0_percent: Float,
+ shift_degree: Float = 0,
tap_side: Literal["hv", "lv"] | None = None,
- tap_neutral: Int = ...,
- tap_max: Int = ...,
- tap_min: Int = ...,
- tap_step_percent: Int | Float = ...,
- tap_step_degree: Int | Float = ...,
- tap_pos: Int = ...,
+ tap_neutral: Int | float = ..., # float because default value is nan
+ tap_max: Int | float = ..., # float because default value is nan
+ tap_min: Int | float = ..., # float because default value is nan
+ tap_step_percent: Float = ...,
+ tap_step_degree: Float = ...,
+ tap_pos: Int | float = ..., # float because default value is nan
tap_changer_type: Literal["Ratio", "Symmetrical", "Ideal", "Tabular"] | None = None,
- id_characteristic_table: Int = ...,
- in_service: _Bool = True,
+ id_characteristic_table: Int | float = ..., # float because default value is nan
+ in_service: Bool = True,
name: str | None = None,
vector_group: str | None = None,
index: Int | None = None,
- max_loading_percent: Int | Float = ...,
+ max_loading_percent: Float = ...,
parallel: Int = 1,
- df: Int | Float = 1.0,
- vk0_percent: Int | Float = ...,
- vkr0_percent: Int | Float = ...,
- mag0_percent: Int | Float = ...,
- mag0_rx: Int | Float = ...,
- si0_hv_partial: Int | Float = ...,
- pt_percent: Int | Float = ...,
- oltc: _Bool = ...,
- tap_dependency_table: _Bool = False,
- xn_ohm: Int | Float = ...,
+ df: Float = 1.0,
+ vk0_percent: Float = ...,
+ vkr0_percent: Float = ...,
+ mag0_percent: Float = ...,
+ mag0_rx: Float = ...,
+ si0_hv_partial: Float = ...,
+ pt_percent: Float = ...,
+ oltc: Bool | float = ..., # float because default value is nan
+ tap_dependency_table: Bool = False,
+ xn_ohm: Float = ...,
tap2_side: Literal["hv", "lv"] | None = None,
- tap2_neutral: Int = ...,
- tap2_max: Int = ...,
- tap2_step_percent: Int | Float = ...,
- tap2_step_degree: Int | Float = ...,
- tap2_pos: Int = ...,
+ tap2_neutral: Int | float = ..., # float because default value is nan
+ tap2_max: Int | float = ..., # float because default value is nan
+ tap2_min: Int | float = ..., # float because default value is nan
+ tap2_step_percent: Float = ...,
+ tap2_step_degree: Float = ...,
+ tap2_pos: Int | float = ..., # float because default value is nan
tap2_changer_type: Literal["Ratio", "Symmetrical", "Ideal", "Tabular"] | None = None,
**kwargs,
) -> np.int64: ...
@@ -580,49 +580,49 @@ def create_transformers_from_parameters(
net: pandapowerNet,
hv_buses: Collection[Int],
lv_buses: Collection[Int],
- sn_mva: _ScalarOrVector[Int | Float],
- vn_hv_kv: _ScalarOrVector[Int | Float],
- vn_lv_kv: _ScalarOrVector[Int | Float],
- vkr_percent: _ScalarOrVector[Int | Float],
- vk_percent: _ScalarOrVector[Int | Float],
- pfe_kw: _ScalarOrVector[Int | Float],
- i0_percent: _ScalarOrVector[Int | Float],
- shift_degree: _ScalarOrVector[Int | Float] = 0.0,
- tap_side: _ScalarOrVector[Literal["hv", "lv"]] | None = None,
- tap_neutral: _ScalarOrVector[Int] = ...,
- tap_max: _ScalarOrVector[Int] = ...,
- tap_min: _ScalarOrVector[Int] = ...,
- tap_step_percent: _ScalarOrVector[Int | Float] = ...,
- tap_step_degree: _ScalarOrVector[Int | Float] = ...,
- tap_pos: _ScalarOrVector[Int] = ...,
- tap_changer_type: _ScalarOrVector[Literal["Ratio", "Symmetrical", "Ideal", "Tabular"]] | None = None,
- id_characteristic_table: _ScalarOrVector[Int] = ...,
- in_service: _ScalarOrVector[_Bool] = True,
- name: _ScalarOrVector[str] | None = None,
- vector_group: _ScalarOrVector[str] | None = None,
+ sn_mva: ScalarOrVector[Float],
+ vn_hv_kv: ScalarOrVector[Float],
+ vn_lv_kv: ScalarOrVector[Float],
+ vkr_percent: ScalarOrVector[Float],
+ vk_percent: ScalarOrVector[Float],
+ pfe_kw: ScalarOrVector[Float],
+ i0_percent: ScalarOrVector[Float],
+ shift_degree: ScalarOrVector[Float] = 0,
+ tap_side: ScalarOrVector[Literal["hv", "lv"]] | None = None,
+ tap_neutral: ScalarOrVector[Int] | float = ..., # float because default value is nan
+ tap_max: ScalarOrVector[Int] | float = ..., # float because default value is nan
+ tap_min: ScalarOrVector[Int] | float = ..., # float because default value is nan
+ tap_step_percent: ScalarOrVector[Float] = ...,
+ tap_step_degree: ScalarOrVector[Float] = ...,
+ tap_pos: ScalarOrVector[Int] | float = ..., # float because default value is nan
+ tap_changer_type: ScalarOrVector[Literal["Ratio", "Symmetrical", "Ideal", "Tabular"]] | None = None,
+ id_characteristic_table: ScalarOrVector[Int] | float = ..., # float because default value is nan
+ in_service: ScalarOrVector[Bool] = True,
+ name: ScalarOrVector[str] | None = None,
+ vector_group: ScalarOrVector[str] | None = None,
index: Collection[Int] | None = None,
- max_loading_percent: _ScalarOrVector[Int | Float] = ...,
- parallel: _ScalarOrVector[Int] = 1,
- df: _ScalarOrVector[Int | Float] = 1.0,
- vk0_percent: _ScalarOrVector[Int | Float] = ...,
- vkr0_percent: _ScalarOrVector[Int | Float] = ...,
- mag0_percent: _ScalarOrVector[Int | Float] = ...,
- mag0_rx: _ScalarOrVector[Int | Float] = ...,
- si0_hv_partial: _ScalarOrVector[Int | Float] = ...,
- pt_percent: _ScalarOrVector[Int | Float] = ...,
- oltc: _ScalarOrVector[_Bool] = ...,
- tap_dependency_table: _ScalarOrVector[_Bool] = False,
- xn_ohm: _ScalarOrVector[Int | Float] | None = None,
- tap2_side: _ScalarOrVector[Literal["hv", "lv"]] | None = None,
- tap2_neutral: _ScalarOrVector[Int] = ...,
- tap2_max: _ScalarOrVector[Int] = ...,
- tap2_min: _ScalarOrVector[Int] = ...,
- tap2_step_percent: _ScalarOrVector[Int | Float] = ...,
- tap2_step_degree: _ScalarOrVector[Int | Float] = ...,
- tap2_pos: _ScalarOrVector[Int] = ...,
- tap2_changer_type: _ScalarOrVector[Literal["Ratio", "Symmetrical", "Ideal", "Tabular"]] | None = None,
+ max_loading_percent: ScalarOrVector[Float] = ...,
+ parallel: ScalarOrVector[Int] = 1,
+ df: ScalarOrVector[Float] = 1.0,
+ vk0_percent: ScalarOrVector[Float] = ...,
+ vkr0_percent: ScalarOrVector[Float] = ...,
+ mag0_percent: ScalarOrVector[Float] = ...,
+ mag0_rx: ScalarOrVector[Float] = ...,
+ si0_hv_partial: ScalarOrVector[Float] = ...,
+ pt_percent: ScalarOrVector[Float] = ...,
+ oltc: ScalarOrVector[Bool] | float = ..., # float because default value is nan
+ tap_dependency_table: ScalarOrVector[Bool] = False,
+ xn_ohm: ScalarOrVector[Float] = ...,
+ tap2_side: ScalarOrVector[Literal["hv", "lv"]] | None = None,
+ tap2_neutral: ScalarOrVector[Int] | float = ..., # float because default value is nan
+ tap2_max: ScalarOrVector[Int] | float = ..., # float because default value is nan
+ tap2_min: ScalarOrVector[Int] | float = ..., # float because default value is nan
+ tap2_step_percent: ScalarOrVector[Float] = ...,
+ tap2_step_degree: ScalarOrVector[Float] = ...,
+ tap2_pos: ScalarOrVector[Int] | float = ..., # float because default value is nan
+ tap2_changer_type: ScalarOrVector[Literal["Ratio", "Symmetrical", "Ideal", "Tabular"]] | None = None,
**kwargs,
-) -> _Array1D[np.int64]: ...
+) -> Array1D[np.int64]: ...
def create_transformer3w(
net: pandapowerNet,
hv_bus: Int,
@@ -630,14 +630,14 @@ def create_transformer3w(
lv_bus: Int,
std_type: str,
name: str | None = None,
- tap_pos: Int = ...,
- in_service: _Bool = True,
+ tap_pos: Int | float = ..., # float because default value is nan
+ in_service: Bool = True,
index: Int | None = None,
- max_loading_percent: Int | Float = ...,
+ max_loading_percent: Float = ...,
tap_changer_type: Literal["Ratio", "Symmetrical", "Ideal", "Tabular"] | None = None,
- tap_at_star_point: _Bool = False,
- tap_dependency_table: _Bool = ...,
- id_characteristic_table: Int = ...,
+ tap_at_star_point: Bool = False,
+ tap_dependency_table: Bool | float = ..., # float because default value is nan
+ id_characteristic_table: Int | float = ..., # float because default value is nan
**kwargs,
) -> np.int64: ...
def create_transformer3w_from_parameters(
@@ -645,44 +645,44 @@ def create_transformer3w_from_parameters(
hv_bus: Int,
mv_bus: Int,
lv_bus: Int,
- vn_hv_kv: Int | Float,
- vn_mv_kv: Int | Float,
- vn_lv_kv: Int | Float,
- sn_hv_mva: Int | Float,
- sn_mv_mva: Int | Float,
- sn_lv_mva: Int | Float,
- vk_hv_percent: Int | Float,
- vk_mv_percent: Int | Float,
- vk_lv_percent: Int | Float,
- vkr_hv_percent: Int | Float,
- vkr_mv_percent: Int | Float,
- vkr_lv_percent: Int | Float,
- pfe_kw: Int | Float,
- i0_percent: Int | Float,
- shift_mv_degree: Int | Float = 0.0,
- shift_lv_degree: Int | Float = 0.0,
+ vn_hv_kv: Float,
+ vn_mv_kv: Float,
+ vn_lv_kv: Float,
+ sn_hv_mva: Float,
+ sn_mv_mva: Float,
+ sn_lv_mva: Float,
+ vk_hv_percent: Float,
+ vk_mv_percent: Float,
+ vk_lv_percent: Float,
+ vkr_hv_percent: Float,
+ vkr_mv_percent: Float,
+ vkr_lv_percent: Float,
+ pfe_kw: Float,
+ i0_percent: Float,
+ shift_mv_degree: Float = 0.0,
+ shift_lv_degree: Float = 0.0,
tap_side: Literal["hv", "mv", "lv"] | None = None,
- tap_step_percent: Int | Float = ...,
- tap_step_degree: Int | Float = ...,
- tap_pos: Int = ...,
- tap_neutral: Int = ...,
- tap_max: Int = ...,
+ tap_step_percent: Float = ...,
+ tap_step_degree: Float = ...,
+ tap_pos: Int | float = ..., # float because default value is nan
+ tap_neutral: Int | float = ..., # float because default value is nan
+ tap_max: Int | float = ..., # float because default value is nan
tap_changer_type: Literal["Ratio", "Symmetrical", "Ideal", "Tabular"] | None = None,
- tap_min: Int = ...,
+ tap_min: Int | float = ..., # float because default value is nan
name: str | None = None,
- in_service: _Bool = True,
+ in_service: Bool = True,
index: Int | None = None,
- max_loading_percent: Int | Float = ...,
- tap_at_star_point: _Bool = False,
- vk0_hv_percent: Int | Float = ...,
- vk0_mv_percent: Int | Float = ...,
- vk0_lv_percent: Int | Float = ...,
- vkr0_hv_percent: Int | Float = ...,
- vkr0_mv_percent: Int | Float = ...,
- vkr0_lv_percent: Int | Float = ...,
+ max_loading_percent: Float = ...,
+ tap_at_star_point: Bool = False,
+ vk0_hv_percent: Float = ...,
+ vk0_mv_percent: Float = ...,
+ vk0_lv_percent: Float = ...,
+ vkr0_hv_percent: Float = ...,
+ vkr0_mv_percent: Float = ...,
+ vkr0_lv_percent: Float = ...,
vector_group: str | None = None,
- tap_dependency_table: _Bool = False,
- id_characteristic_table: Int = ...,
+ tap_dependency_table: Bool = False,
+ id_characteristic_table: Int | float = ..., # float because default value is nan
**kwargs,
) -> np.int64: ...
def create_transformers3w_from_parameters(
@@ -690,145 +690,145 @@ def create_transformers3w_from_parameters(
hv_buses: Collection[Int],
mv_buses: Collection[Int],
lv_buses: Collection[Int],
- vn_hv_kv: _ScalarOrVector[Int | Float],
- vn_mv_kv: _ScalarOrVector[Int | Float],
- vn_lv_kv: _ScalarOrVector[Int | Float],
- sn_hv_mva: _ScalarOrVector[Int | Float],
- sn_mv_mva: _ScalarOrVector[Int | Float],
- sn_lv_mva: _ScalarOrVector[Int | Float],
- vk_hv_percent: _ScalarOrVector[Int | Float],
- vk_mv_percent: _ScalarOrVector[Int | Float],
- vk_lv_percent: _ScalarOrVector[Int | Float],
- vkr_hv_percent: _ScalarOrVector[Int | Float],
- vkr_mv_percent: _ScalarOrVector[Int | Float],
- vkr_lv_percent: _ScalarOrVector[Int | Float],
- pfe_kw: _ScalarOrVector[Int | Float],
- i0_percent: _ScalarOrVector[Int | Float],
- shift_mv_degree: _ScalarOrVector[Int | Float] = 0.0,
- shift_lv_degree: _ScalarOrVector[Int | Float] = 0.0,
- tap_side: _ScalarOrVector[Literal["hv", "mv", "lv"]] | None = None,
- tap_step_percent: _ScalarOrVector[Int | Float] = ...,
- tap_step_degree: _ScalarOrVector[Int | Float] = ...,
- tap_pos: _ScalarOrVector[Int] = ...,
- tap_neutral: _ScalarOrVector[Int] = ...,
- tap_max: _ScalarOrVector[Int] = ...,
- tap_min: _ScalarOrVector[Int] = ...,
- name: _ScalarOrVector[str] | None = None,
- in_service: _ScalarOrVector[_Bool] = True,
+ vn_hv_kv: ScalarOrVector[Float],
+ vn_mv_kv: ScalarOrVector[Float],
+ vn_lv_kv: ScalarOrVector[Float],
+ sn_hv_mva: ScalarOrVector[Float],
+ sn_mv_mva: ScalarOrVector[Float],
+ sn_lv_mva: ScalarOrVector[Float],
+ vk_hv_percent: ScalarOrVector[Float],
+ vk_mv_percent: ScalarOrVector[Float],
+ vk_lv_percent: ScalarOrVector[Float],
+ vkr_hv_percent: ScalarOrVector[Float],
+ vkr_mv_percent: ScalarOrVector[Float],
+ vkr_lv_percent: ScalarOrVector[Float],
+ pfe_kw: ScalarOrVector[Float],
+ i0_percent: ScalarOrVector[Float],
+ shift_mv_degree: ScalarOrVector[Float] = 0.0,
+ shift_lv_degree: ScalarOrVector[Float] = 0.0,
+ tap_side: ScalarOrVector[Literal["hv", "mv", "lv"]] | None = None,
+ tap_step_percent: ScalarOrVector[Float] = ...,
+ tap_step_degree: ScalarOrVector[Float] = ...,
+ tap_pos: ScalarOrVector[Int] | float = ..., # float because default value is nan
+ tap_neutral: ScalarOrVector[Int] | float = ..., # float because default value is nan
+ tap_max: ScalarOrVector[Int] | float = ..., # float because default value is nan
+ tap_min: ScalarOrVector[Int] | float = ..., # float because default value is nan
+ name: ScalarOrVector[str] | None = None,
+ in_service: ScalarOrVector[Bool] = True,
index: Collection[Int] | None = None,
- max_loading_percent: _ScalarOrVector[Int | Float] = ...,
- tap_at_star_point: _ScalarOrVector[_Bool] = False,
- tap_changer_type: _ScalarOrVector[Literal["Ratio", "Symmetrical", "Ideal", "Tabular"]] | None = None,
- vk0_hv_percent: _ScalarOrVector[Int | Float] = ...,
- vk0_mv_percent: _ScalarOrVector[Int | Float] = ...,
- vk0_lv_percent: _ScalarOrVector[Int | Float] = ...,
- vkr0_hv_percent: _ScalarOrVector[Int | Float] = ...,
- vkr0_mv_percent: _ScalarOrVector[Int | Float] = ...,
- vkr0_lv_percent: _ScalarOrVector[Int | Float] = ...,
- vector_group: _ScalarOrVector[str] | None = None,
- tap_dependency_table: _ScalarOrVector[_Bool] = False,
- id_characteristic_table: _ScalarOrVector[Int] = ...,
+ max_loading_percent: ScalarOrVector[Float] = ...,
+ tap_at_star_point: ScalarOrVector[Bool] = False,
+ tap_changer_type: ScalarOrVector[Literal["Ratio", "Symmetrical", "Ideal", "Tabular"]] | None = None,
+ vk0_hv_percent: ScalarOrVector[Float] = ...,
+ vk0_mv_percent: ScalarOrVector[Float] = ...,
+ vk0_lv_percent: ScalarOrVector[Float] = ...,
+ vkr0_hv_percent: ScalarOrVector[Float] = ...,
+ vkr0_mv_percent: ScalarOrVector[Float] = ...,
+ vkr0_lv_percent: ScalarOrVector[Float] = ...,
+ vector_group: ScalarOrVector[str] | None = None,
+ tap_dependency_table: ScalarOrVector[Bool] = False,
+ id_characteristic_table: ScalarOrVector[Int] | float = ..., # float because default value is nan
**kwargs,
-) -> _Array1D[np.int64]: ...
+) -> Array1D[np.int64]: ...
def create_switch(
net: pandapowerNet,
bus: Int,
element: Int,
et: Literal["l", "t", "t3", "b"],
- closed: _Bool = True,
+ closed: Bool = True,
type: Literal["LS", "CB", "LBS", "DS"] | None = None,
name: str | None = None,
index: Int | None = None,
- z_ohm: Int | Float = 0,
- in_ka: Int | Float | None = None,
+ z_ohm: Float = 0,
+ in_ka: Float | None = ...,
**kwargs,
) -> np.int64: ...
def create_switches(
net: pandapowerNet,
buses: Collection[Int],
elements: Collection[Int],
- et: _ScalarOrVector[Literal["l", "t", "t3", "b"]],
- closed: _ScalarOrVector[_Bool] = True,
- type: _ScalarOrVector[Literal["LS", "CB", "LBS", "DS"]] | None = None,
- name: _ScalarOrVector[str] | None = None,
+ et: ScalarOrVector[Literal["l", "t", "t3", "b"]],
+ closed: ScalarOrVector[Bool] = True,
+ type: ScalarOrVector[Literal["LS", "CB", "LBS", "DS"]] | None = None,
+ name: ScalarOrVector[str] | None = None,
index: Collection[Int] | None = None,
- z_ohm: _ScalarOrVector[Int | Float] = 0,
- in_ka: _ScalarOrVector[Int | Float] | None = None,
+ z_ohm: ScalarOrVector[Float] = 0,
+ in_ka: ScalarOrVector[Float] | None = ...,
**kwargs,
-) -> _Array1D[np.int64]: ...
+) -> Array1D[np.int64]: ...
def create_shunt(
net: pandapowerNet,
bus: Int,
- q_mvar: Int | Float,
- p_mw: Int | Float = 0.0,
- vn_kv: Int | Float | None = None,
+ q_mvar: Float,
+ p_mw: Float = 0.0,
+ vn_kv: Float | None = None,
step: Int = 1,
max_step: Int = 1,
name: str | None = None,
- step_dependency_table: _Bool = False,
- id_characteristic_table: Int = ...,
- in_service: _Bool = True,
+ step_dependency_table: Bool = False,
+ id_characteristic_table: Int | float = ..., # float because default value is nan
+ in_service: Bool = True,
index: Int | None = None,
**kwargs,
) -> np.int64: ...
def create_shunts(
net: pandapowerNet,
buses: Collection[Int],
- q_mvar: _ScalarOrVector[Int | Float],
- p_mw: _ScalarOrVector[Int | Float] = 0.0,
- vn_kv: _ScalarOrVector[Int | Float] | None = None,
- step: _ScalarOrVector[Int] = 1,
- max_step: _ScalarOrVector[Int] = 1,
- name: _ScalarOrVector[str] | None = None,
- step_dependency_table: _ScalarOrVector[_Bool] = False,
- id_characteristic_table: _ScalarOrVector[Int] = ...,
- in_service: _ScalarOrVector[_Bool] = True,
+ q_mvar: ScalarOrVector[Float],
+ p_mw: ScalarOrVector[Float] = 0.0,
+ vn_kv: ScalarOrVector[Float] | None = None,
+ step: ScalarOrVector[Int] = 1,
+ max_step: ScalarOrVector[Int] = 1,
+ name: ScalarOrVector[str] | None = None,
+ step_dependency_table: ScalarOrVector[Bool] = False,
+ id_characteristic_table: ScalarOrVector[Int] | float = ..., # float because default value is nan
+ in_service: ScalarOrVector[Bool] = True,
index: Collection[Int] | None = None,
**kwargs,
-) -> _Array1D[np.int64]: ...
+) -> Array1D[np.int64]: ...
def create_shunt_as_capacitor(
net: pandapowerNet,
bus: Int,
- q_mvar: Int | Float,
- loss_factor: Int | Float,
+ q_mvar: Float,
+ loss_factor: Float,
*,
# keywords passed to create_shunt extracted from **kwargs
- vn_kv: Int | Float | None = None,
+ vn_kv: Float | None = None,
step: Int = 1,
max_step: Int = 1,
name: str | None = None,
- step_dependency_table: _Bool = False,
+ step_dependency_table: Bool = False,
id_characteristic_table: Int = ...,
- in_service: _Bool = True,
+ in_service: Bool = True,
index: Int | None = None,
**kwargs,
) -> np.int64: ...
def create_svc(
net: pandapowerNet,
bus: Int,
- x_l_ohm: Int | Float,
- x_cvar_ohm: Int | Float,
- set_vm_pu: Int | Float,
- thyristor_firing_angle_degree: Int | Float,
+ x_l_ohm: Float,
+ x_cvar_ohm: Float,
+ set_vm_pu: Float,
+ thyristor_firing_angle_degree: Float,
name: str | None = None,
- controllable: _Bool = True,
- in_service: _Bool = True,
+ controllable: Bool = True,
+ in_service: Bool = True,
index: Int | None = None,
- min_angle_degree: Int | Float = 90,
- max_angle_degree: Int | Float = 180,
+ min_angle_degree: Float = 90,
+ max_angle_degree: Float = 180,
**kwargs,
) -> np.int64: ...
def create_ssc(
net: pandapowerNet,
bus: Int,
- r_ohm: Int | Float,
- x_ohm: Int | Float,
- set_vm_pu: Int | Float = 1.0,
- vm_internal_pu: Int | Float = 1.0,
- va_internal_degree: Int | Float = 0.0,
+ r_ohm: Float,
+ x_ohm: Float,
+ set_vm_pu: Float = 1.0,
+ vm_internal_pu: Float = 1.0,
+ va_internal_degree: Float = 0.0,
name: str | None = None,
- controllable: _Bool = True,
- in_service: _Bool = True,
+ controllable: Bool = True,
+ in_service: Bool = True,
index: Int | None = None,
**kwargs,
) -> np.int64: ...
@@ -836,17 +836,17 @@ def create_vsc(
net: pandapowerNet,
bus: Int,
bus_dc: Int,
- r_ohm: Int | Float,
- x_ohm: Int | Float,
- r_dc_ohm: Int | Float,
- pl_dc_mw: Int | Float = 0.0,
+ r_ohm: Float,
+ x_ohm: Float,
+ r_dc_ohm: Float,
+ pl_dc_mw: Float = 0.0,
control_mode_ac: Literal["vm_pu", "q_mvar"] = "vm_pu",
- control_value_ac: Int | Float = 1.0,
+ control_value_ac: Float = 1.0,
control_mode_dc: Literal["vm_pu", "p_mw"] = "p_mw",
- control_value_dc: Int | Float = 0.0,
+ control_value_dc: Float = 0.0,
name: str | None = None,
- controllable: _Bool = True,
- in_service: _Bool = True,
+ controllable: Bool = True,
+ in_service: Bool = True,
index: Int | None = None,
**kwargs,
) -> np.int64: ...
@@ -854,152 +854,152 @@ def create_impedance(
net: pandapowerNet,
from_bus: Int,
to_bus: Int,
- rft_pu: Int | Float,
- xft_pu: Int | Float,
- sn_mva: Int | Float,
- rtf_pu: Int | Float | None = None,
- xtf_pu: Int | Float | None = None,
+ rft_pu: Float,
+ xft_pu: Float,
+ sn_mva: Float,
+ rtf_pu: Float | None = None,
+ xtf_pu: Float | None = None,
name: str | None = None,
- in_service: _Bool = True,
+ in_service: Bool = True,
index: Int | None = None,
- rft0_pu: Int | Float | None = None,
- xft0_pu: Int | Float | None = None,
- rtf0_pu: Int | Float | None = None,
- xtf0_pu: Int | Float | None = None,
- gf_pu: Int | Float = 0,
- bf_pu: Int | Float = 0,
- gt_pu: Int | Float | None = None,
- bt_pu: Int | Float | None = None,
- gf0_pu: Int | Float | None = None,
- bf0_pu: Int | Float | None = None,
- gt0_pu: Int | Float | None = None,
- bt0_pu: Int | Float | None = None,
+ rft0_pu: Float | None = None,
+ xft0_pu: Float | None = None,
+ rtf0_pu: Float | None = None,
+ xtf0_pu: Float | None = None,
+ gf_pu: Float = 0,
+ bf_pu: Float = 0,
+ gt_pu: Float | None = None,
+ bt_pu: Float | None = None,
+ gf0_pu: Float | None = None,
+ bf0_pu: Float | None = None,
+ gt0_pu: Float | None = None,
+ bt0_pu: Float | None = None,
**kwargs,
) -> np.int64: ...
def create_impedances(
net: pandapowerNet,
from_buses: Collection[Int],
to_buses: Collection[Int],
- rft_pu: _ScalarOrVector[Int | Float],
- xft_pu: _ScalarOrVector[Int | Float],
- sn_mva: _ScalarOrVector[Int | Float],
- rtf_pu: _ScalarOrVector[Int | Float] | None = None,
- xtf_pu: _ScalarOrVector[Int | Float] | None = None,
- name: _ScalarOrVector[str] | None = None,
- in_service: _ScalarOrVector[_Bool] = True,
+ rft_pu: ScalarOrVector[Float],
+ xft_pu: ScalarOrVector[Float],
+ sn_mva: ScalarOrVector[Float],
+ rtf_pu: ScalarOrVector[Float] | None = None,
+ xtf_pu: ScalarOrVector[Float] | None = None,
+ name: ScalarOrVector[str] | None = None,
+ in_service: ScalarOrVector[Bool] = True,
index: Collection[Int] | None = None,
- rft0_pu: _ScalarOrVector[Int | Float] | None = None,
- xft0_pu: _ScalarOrVector[Int | Float] | None = None,
- rtf0_pu: _ScalarOrVector[Int | Float] | None = None,
- xtf0_pu: _ScalarOrVector[Int | Float] | None = None,
- gf_pu: _ScalarOrVector[Int | Float] = 0,
- bf_pu: _ScalarOrVector[Int | Float] = 0,
- gt_pu: _ScalarOrVector[Int | Float] | None = None,
- bt_pu: _ScalarOrVector[Int | Float] | None = None,
- gf0_pu: _ScalarOrVector[Int | Float] | None = None,
- bf0_pu: _ScalarOrVector[Int | Float] | None = None,
- gt0_pu: _ScalarOrVector[Int | Float] | None = None,
- bt0_pu: _ScalarOrVector[Int | Float] | None = None,
+ rft0_pu: ScalarOrVector[Float] | None = None,
+ xft0_pu: ScalarOrVector[Float] | None = None,
+ rtf0_pu: ScalarOrVector[Float] | None = None,
+ xtf0_pu: ScalarOrVector[Float] | None = None,
+ gf_pu: ScalarOrVector[Float] = 0,
+ bf_pu: ScalarOrVector[Float] = 0,
+ gt_pu: ScalarOrVector[Float] | None = None,
+ bt_pu: ScalarOrVector[Float] | None = None,
+ gf0_pu: ScalarOrVector[Float] | None = None,
+ bf0_pu: ScalarOrVector[Float] | None = None,
+ gt0_pu: ScalarOrVector[Float] | None = None,
+ bt0_pu: ScalarOrVector[Float] | None = None,
**kwargs,
-) -> _Array1D[np.int64]: ...
+) -> Array1D[np.int64]: ...
def create_tcsc(
net: pandapowerNet,
from_bus: Int,
to_bus: Int,
- x_l_ohm: Int | Float,
- x_cvar_ohm: Int | Float,
- set_p_to_mw: Int | Float,
- thyristor_firing_angle_degree: Int | Float,
+ x_l_ohm: Float,
+ x_cvar_ohm: Float,
+ set_p_to_mw: Float,
+ thyristor_firing_angle_degree: Float,
name: str | None = None,
- controllable: _Bool = True,
- in_service: _Bool = True,
+ controllable: Bool = True,
+ in_service: Bool = True,
index: Int | None = None,
- min_angle_degree: Int | Float = 90,
- max_angle_degree: Int | Float = 180,
+ min_angle_degree: Float = 90,
+ max_angle_degree: Float = 180,
**kwargs,
) -> np.int64: ...
def create_series_reactor_as_impedance(
net: pandapowerNet,
from_bus: Int,
to_bus: Int,
- r_ohm: Int | Float,
- x_ohm: Int | Float,
- sn_mva: Int | Float,
+ r_ohm: Float,
+ x_ohm: Float,
+ sn_mva: Float,
name: str | None = None,
- in_service: _Bool = True,
+ in_service: Bool = True,
index: Int | None = None,
- r0_ohm: Int | Float | None = None,
- x0_ohm: Int | Float | None = None,
+ r0_ohm: Float | None = None,
+ x0_ohm: Float | None = None,
**kwargs,
) -> np.int64: ...
def create_ward(
net: pandapowerNet,
bus: Int,
- ps_mw: Int | Float,
- qs_mvar: Int | Float,
- pz_mw: Int | Float,
- qz_mvar: Int | Float,
+ ps_mw: Float,
+ qs_mvar: Float,
+ pz_mw: Float,
+ qz_mvar: Float,
name: str | None = None,
- in_service: _Bool = True,
+ in_service: Bool = True,
index: Int | None = None,
**kwargs,
) -> np.int64: ...
def create_wards(
net: pandapowerNet,
buses: Collection[Int],
- ps_mw: _ScalarOrVector[Int | Float],
- qs_mvar: _ScalarOrVector[Int | Float],
- pz_mw: _ScalarOrVector[Int | Float],
- qz_mvar: _ScalarOrVector[Int | Float],
- name: _ScalarOrVector[str] | None = None,
- in_service: _ScalarOrVector[_Bool] = True,
+ ps_mw: ScalarOrVector[Float],
+ qs_mvar: ScalarOrVector[Float],
+ pz_mw: ScalarOrVector[Float],
+ qz_mvar: ScalarOrVector[Float],
+ name: ScalarOrVector[str] | None = None,
+ in_service: ScalarOrVector[Bool] = True,
index: Collection[Int] | None = None,
**kwargs,
-) -> _Array1D[np.int64]: ...
+) -> Array1D[np.int64]: ...
def create_xward(
net: pandapowerNet,
bus: Int,
- ps_mw: Int | Float,
- qs_mvar: Int | Float,
- pz_mw: Int | Float,
- qz_mvar: Int | Float,
- r_ohm: Int | Float,
- x_ohm: Int | Float,
- vm_pu: Int | Float,
- in_service: _Bool = True,
+ ps_mw: Float,
+ qs_mvar: Float,
+ pz_mw: Float,
+ qz_mvar: Float,
+ r_ohm: Float,
+ x_ohm: Float,
+ vm_pu: Float,
+ in_service: Bool = True,
name: str | None = None,
index: Int | None = None,
- slack_weight: Int | Float = 0.0,
+ slack_weight: Float = 0.0,
**kwargs,
) -> np.int64: ...
def create_dcline(
net: pandapowerNet,
from_bus: Int,
to_bus: Int,
- p_mw: Int | Float,
- loss_percent: Int | Float,
- loss_mw: Int | Float,
- vm_from_pu: Int | Float,
- vm_to_pu: Int | Float,
+ p_mw: Float,
+ loss_percent: Float,
+ loss_mw: Float,
+ vm_from_pu: Float,
+ vm_to_pu: Float,
index: Int | None = None,
name: str | None = None,
- max_p_mw: Int | Float = ...,
- min_q_from_mvar: Int | Float = ...,
- min_q_to_mvar: Int | Float = ...,
- max_q_from_mvar: Int | Float = ...,
- max_q_to_mvar: Int | Float = ...,
- in_service: _Bool = True,
+ max_p_mw: Float = ...,
+ min_q_from_mvar: Float = ...,
+ min_q_to_mvar: Float = ...,
+ max_q_from_mvar: Float = ...,
+ max_q_to_mvar: Float = ...,
+ in_service: Bool = True,
**kwargs,
) -> np.int64: ...
def create_measurement(
net: pandapowerNet,
meas_type: Literal["v", "p", "q", "i", "va", "ia"],
element_type: Literal["bus", "line", "trafo", "trafo3w"],
- value: Int | Float,
- std_dev: Int | Float,
+ value: Float,
+ std_dev: Float,
element: Int,
side: Literal["hv", "mv", "lv"] | Int | None = None,
- check_existing: _Bool = False,
+ check_existing: Bool = False,
index: Int | None = None,
name: str | None = None,
**kwargs,
@@ -1008,56 +1008,56 @@ def create_pwl_cost(
net: pandapowerNet,
element: Int,
et: _CostElementType,
- points: Collection[Collection[Int | Float]],
+ points: Collection[Collection[Float]],
power_type: Literal["p", "q"] = "p",
index: Int | None = None,
- check: _Bool = True,
+ check: Bool = True,
**kwargs,
) -> np.int64: ...
def create_pwl_costs(
net: pandapowerNet,
elements: Collection[Int],
- et: _ScalarOrVector[_CostElementType],
- points: _ScalarOrVector[Collection[Collection[Int | Float]]],
- power_type: _ScalarOrVector[Literal["p", "q"]] = "p",
+ et: ScalarOrVector[_CostElementType],
+ points: ScalarOrVector[Collection[Collection[Float]]],
+ power_type: ScalarOrVector[Literal["p", "q"]] = "p",
index: Collection[Int] | None = None,
- check: _ScalarOrVector[_Bool] = True,
+ check: ScalarOrVector[Bool] = True,
**kwargs,
-) -> _Array1D[np.int64]: ...
+) -> Array1D[np.int64]: ...
def create_poly_cost(
net: pandapowerNet,
element: Int,
et: _CostElementType,
- cp1_eur_per_mw: Int | Float,
- cp0_eur: Int | Float = 0,
- cq1_eur_per_mvar: Int | Float = 0,
- cq0_eur: Int | Float = 0,
- cp2_eur_per_mw2: Int | Float = 0,
- cq2_eur_per_mvar2: Int | Float = 0,
+ cp1_eur_per_mw: Float,
+ cp0_eur: Float = 0,
+ cq1_eur_per_mvar: Float = 0,
+ cq0_eur: Float = 0,
+ cp2_eur_per_mw2: Float = 0,
+ cq2_eur_per_mvar2: Float = 0,
index: Int | None = None,
- check: _Bool = True,
+ check: Bool = True,
**kwargs,
) -> np.int64: ...
def create_poly_costs(
net: pandapowerNet,
elements: Collection[Int],
- et: _ScalarOrVector[_CostElementType],
- cp1_eur_per_mw: _ScalarOrVector[Int | Float],
- cp0_eur: _ScalarOrVector[Int | Float] = 0,
- cq1_eur_per_mvar: _ScalarOrVector[Int | Float] = 0,
- cq0_eur: _ScalarOrVector[Int | Float] = 0,
- cp2_eur_per_mw2: _ScalarOrVector[Int | Float] = 0,
- cq2_eur_per_mvar2: _ScalarOrVector[Int | Float] = 0,
+ et: ScalarOrVector[_CostElementType],
+ cp1_eur_per_mw: ScalarOrVector[Float],
+ cp0_eur: ScalarOrVector[Float] = 0,
+ cq1_eur_per_mvar: ScalarOrVector[Float] = 0,
+ cq0_eur: ScalarOrVector[Float] = 0,
+ cp2_eur_per_mw2: ScalarOrVector[Float] = 0,
+ cq2_eur_per_mvar2: ScalarOrVector[Float] = 0,
index: Collection[Int] | None = None,
- check: _ScalarOrVector[_Bool] = True,
+ check: ScalarOrVector[Bool] = True,
**kwargs,
-) -> _Array1D[np.int64]: ...
+) -> Array1D[np.int64]: ...
def create_group(
net: pandapowerNet,
- element_types: _ScalarOrVector[str],
+ element_types: ScalarOrVector[str],
element_indices: Collection[Collection[Int | Any]], # list of lists of indices or any column content
name: str = "",
- reference_columns: _ScalarOrVector[str] | None = None,
+ reference_columns: ScalarOrVector[str] | None = None,
index: Int | None = None,
**kwargs,
) -> np.int64: ...
@@ -1065,7 +1065,8 @@ def create_group_from_dict(
net: pandapowerNet,
elements_dict: Mapping[str, Collection[Int | Any]], # dict of lists of indices or any column content
name: str = "",
- reference_column: _ScalarOrVector[str] | None = None,
+ reference_column: ScalarOrVector[str] | None = None,
index: Int | None = None,
**kwargs,
) -> np.int64: ...
+def try_astype(df: pd.DataFrame | dict[str, pd.Series[Any]], column: str, dtyp: DTypeLike) -> None: ...
diff --git a/stubs/pandapower-stubs/diagnostic.pyi b/stubs/pandapower-stubs/diagnostic.pyi
index 21c7ab0..754134b 100644
--- a/stubs/pandapower-stubs/diagnostic.pyi
+++ b/stubs/pandapower-stubs/diagnostic.pyi
@@ -7,6 +7,7 @@ from pandapower.auxiliary import pandapowerNet
_IntT = TypeVar("_IntT", bound=SupportsIndex)
log_message_sep: str
+expected_exceptions: tuple[type[Exception], ...]
@typing_overload
def diagnostic(
diff --git a/stubs/pandapower-stubs/file_io.pyi b/stubs/pandapower-stubs/file_io.pyi
index e1b65ba..29584ff 100644
--- a/stubs/pandapower-stubs/file_io.pyi
+++ b/stubs/pandapower-stubs/file_io.pyi
@@ -1,6 +1,6 @@
-from _typeshed import Incomplete, StrOrBytesPath, SupportsRead, SupportsWrite
-from collections.abc import Mapping
-from typing import TypedDict, overload
+from _typeshed import StrOrBytesPath, SupportsRead, SupportsWrite
+from collections.abc import Iterable, Mapping, MutableMapping
+from typing import Any, overload
from pandapower.auxiliary import pandapowerNet
@@ -13,52 +13,44 @@ def to_excel(
) -> None: ...
@overload
def to_json(
- net: pandapowerNet, filename: None = None, encryption_key: str | None = None, store_index_names: bool = False
+ net: pandapowerNet, filename: None = None, encryption_key: str | None = None, store_index_names: None = None
) -> str: ...
@overload
def to_json(
net: pandapowerNet,
filename: SupportsWrite[str] | StrOrBytesPath,
encryption_key: str | None = None,
- store_index_names: bool = False,
+ store_index_names: None = None,
) -> None: ...
@overload
def to_json(
net: pandapowerNet,
filename: SupportsWrite[str] | StrOrBytesPath | None = None,
encryption_key: str | None = None,
- store_index_names: bool = False,
+ store_index_names: None = None,
) -> str | None: ...
def from_pickle(filename: SupportsRead[bytes] | StrOrBytesPath, convert: bool = True) -> pandapowerNet: ...
def from_excel(filename: StrOrBytesPath, convert: bool = True) -> pandapowerNet: ...
-
-class _FromJsonKwds(TypedDict, total=False): # noqa: PYI049
- convert: bool
- encryption_key: str | None
- elements_to_deserialize: Incomplete | None
- keep_serialized_elements: bool
- add_basic_std_types: bool
- replace_elements: Mapping[str, str] | None
- empty_dict_like_object: Incomplete | None
-
-def from_json(
+def from_json( # keep inline with pandapower._typing.FromJsonKwds
filename: SupportsRead[str] | StrOrBytesPath,
convert: bool = True,
encryption_key: str | None = None,
- elements_to_deserialize: Incomplete | None = None,
+ elements_to_deserialize: Iterable[str] | None = None,
keep_serialized_elements: bool = True,
add_basic_std_types: bool = False,
replace_elements: Mapping[str, str] | None = None,
- empty_dict_like_object: Incomplete | None = None,
+ empty_dict_like_object: MutableMapping[str, Any] | None = None,
+ ignore_unknown_objects: bool = False,
) -> pandapowerNet: ...
def from_json_string(
json_string: str,
- convert: bool = True,
+ convert: bool = False,
encryption_key: str | None = None,
- elements_to_deserialize: Incomplete | None = None,
+ elements_to_deserialize: Iterable[str] | None = None,
keep_serialized_elements: bool = True,
add_basic_std_types: bool = False,
replace_elements: Mapping[str, str] | None = None,
- empty_dict_like_object: Incomplete | None = None,
+ empty_dict_like_object: MutableMapping[str, Any] | None = None,
+ ignore_unknown_objects: bool = False,
) -> pandapowerNet: ...
-def from_json_dict(json_dict: Mapping[str, Incomplete]) -> pandapowerNet: ...
+def from_json_dict(json_dict: Mapping[str, Any]) -> pandapowerNet: ...
diff --git a/stubs/pandapower-stubs/grid_equivalents/auxiliary.pyi b/stubs/pandapower-stubs/grid_equivalents/auxiliary.pyi
index 024584a..fd9606c 100644
--- a/stubs/pandapower-stubs/grid_equivalents/auxiliary.pyi
+++ b/stubs/pandapower-stubs/grid_equivalents/auxiliary.pyi
@@ -16,7 +16,7 @@ def calc_zpbn_parameters(net, boundary_buses, all_external_buses, slack_as: str
def check_validity_of_Ybus_eq(net_zpbn, Ybus_eq, bus_lookups): ...
def drop_assist_elms_by_creating_ext_net(net, elms: Incomplete | None = None) -> None: ...
def build_ppc_and_Ybus(net) -> None: ...
-def drop_measurements_and_controller(net, buses, skip_controller: bool = ...) -> None: ...
+def drop_measurements_and_controller(net, buses, skip_controller: bool = False) -> None: ...
def match_controller_and_new_elements(net, net_org) -> None: ...
def ensure_origin_id(net, no_start: int = 0, elms: Incomplete | None = None) -> None: ...
def drop_and_edit_cost_functions(net, buses, drop_cost, add_origin_id, check_unique_elms_name: bool = True) -> None: ...
diff --git a/stubs/pandapower-stubs/grid_equivalents/get_equivalent.pyi b/stubs/pandapower-stubs/grid_equivalents/get_equivalent.pyi
index ca39ac8..0151754 100644
--- a/stubs/pandapower-stubs/grid_equivalents/get_equivalent.pyi
+++ b/stubs/pandapower-stubs/grid_equivalents/get_equivalent.pyi
@@ -1,8 +1,3 @@
-from pandapower.grid_equivalents.auxiliary import (
- adaptation_phase_shifter as adaptation_phase_shifter,
- get_boundary_vp as get_boundary_vp,
-)
-
def get_equivalent(
net,
eq_type,
diff --git a/stubs/pandapower-stubs/grid_equivalents/toolbox.pyi b/stubs/pandapower-stubs/grid_equivalents/toolbox.pyi
index d44084c..9abab98 100644
--- a/stubs/pandapower-stubs/grid_equivalents/toolbox.pyi
+++ b/stubs/pandapower-stubs/grid_equivalents/toolbox.pyi
@@ -1,5 +1,3 @@
-from pandapower.grid_equivalents.auxiliary import drop_internal_branch_elements as drop_internal_branch_elements
-
def getFromDict(dict_, keys): ...
def setInDict(dict_, keys, value) -> None: ...
def appendSetInDict(dict_, keys, set_) -> None: ...
diff --git a/stubs/pandapower-stubs/groups.pyi b/stubs/pandapower-stubs/groups.pyi
index 3fedb26..fe5004f 100644
--- a/stubs/pandapower-stubs/groups.pyi
+++ b/stubs/pandapower-stubs/groups.pyi
@@ -1,75 +1,111 @@
-from _typeshed import Incomplete
-from collections.abc import Iterable
+from collections.abc import Collection, Iterable
+from typing import Any, Literal, NoReturn
import numpy as np
import pandas as pd
-from numpy.typing import ArrayLike, NDArray
+from numpy.typing import ArrayLike
+from pandapower._typing import Array1D, Bool, Int, ScalarOrVector
from pandapower.auxiliary import pandapowerNet
-def drop_group(net: pandapowerNet, index: int) -> None: ...
-def drop_group_and_elements(net: pandapowerNet, index: int) -> None: ...
+def drop_group(net: pandapowerNet, index: Int) -> None: ...
+def drop_group_and_elements(net: pandapowerNet, index: Int) -> None: ...
+def append_to_group(*args, **kwargs) -> NoReturn: ...
def attach_to_groups(
net: pandapowerNet,
- index: Iterable[int],
- element_types: str | Iterable[str],
- elements: Iterable[list[Incomplete]],
- reference_columns: str | Iterable[str] | None = None,
+ index: Iterable[Int],
+ element_types: ScalarOrVector[str],
+ element_indices: Collection[Collection[Int]],
+ reference_columns: ScalarOrVector[str] | None = None,
) -> None: ...
def attach_to_group(
net: pandapowerNet,
- index: int,
- element_types: str | Iterable[str],
- elements: Iterable[list[Incomplete]],
- reference_columns: str | Iterable[str] | None = None,
- take_existing_reference_columns: bool = True,
+ index: Int,
+ element_types: ScalarOrVector[str],
+ element_indices: Collection[Collection[Int]],
+ reference_columns: ScalarOrVector[str] | None = None,
+ take_existing_reference_columns: Bool = True,
) -> None: ...
-def detach_from_group(net: pandapowerNet, index: int, element_type: str, element_index: int | Iterable[int]) -> None: ...
+def drop_from_group(*args, **kwargs) -> NoReturn: ...
+def detach_from_group(net: pandapowerNet, index: Int, element_type: str, element_index: ScalarOrVector[Int]) -> None: ...
+def drop_from_groups(*args, **kwargs) -> NoReturn: ...
def detach_from_groups(
- net: pandapowerNet, element_type: str, element_index: int | Iterable[int], index: int | ArrayLike | None = None
+ net: pandapowerNet, element_type: str, element_index: ScalarOrVector[Int], index: Int | ArrayLike | None = None
) -> None: ...
-def group_element_lists(net: pandapowerNet, index: int) -> tuple[list[Incomplete], ...]: ...
-def group_name(net: pandapowerNet, index: int) -> str: ...
+def group_element_lists(net: pandapowerNet, index: Int) -> tuple[list[str], list[list[int]], list[str | None]]: ...
+def group_name(net: pandapowerNet, index: Int) -> str: ...
def group_index(net: pandapowerNet, name: str) -> int: ...
-def group_element_index(net: pandapowerNet, index: int, element_type: str) -> pd.Index[int]: ...
-def group_row(net: pandapowerNet, index: int, element_type: str) -> pd.Series[Incomplete]: ...
+def group_element_index(net: pandapowerNet, index: Int, element_type: str) -> pd.Index[int]: ...
+def group_row(net: pandapowerNet, index: Int, element_type: str) -> pd.Series[Any]: ...
def isin_group(
net: pandapowerNet,
element_type: str,
- element_index: int | Iterable[int],
- index: int | Iterable[int] | None = None,
- drop_empty_lines: bool = True,
-) -> bool | NDArray[np.bool]: ...
+ element_index: ScalarOrVector[Int],
+ index: ScalarOrVector[Int] | None = None,
+ drop_empty_lines: Bool = True,
+) -> np.bool | Array1D[np.bool]: ...
def element_associated_groups(
- net: pandapowerNet, element_type: str, element_index: Incomplete, return_empties: bool = True, drop_empty_lines: bool = True
+ net: pandapowerNet,
+ element_type: str,
+ element_index: ScalarOrVector[Int],
+ return_empties: Bool = True,
+ drop_empty_lines: Bool = True,
) -> dict[int, list[int]]: ...
def count_group_elements(net: pandapowerNet, index: int) -> pd.Series[int]: ...
-def groups_equal(net: pandapowerNet, index1: int, index2: int, **kwargs: Incomplete) -> bool: ...
-def compare_group_elements(net: pandapowerNet, index1: int, index2: int) -> bool: ...
-def check_unique_group_rows(net: pandapowerNet, raise_error: bool = True, log_level: str = "warning") -> None: ...
-def remove_not_existing_group_members(net: pandapowerNet, verbose: bool = True) -> None: ...
-def ensure_lists_in_group_element_column(net: pandapowerNet, drop_empty_lines: bool = True) -> None: ...
-def group_entries_exist_in_element_table(net: pandapowerNet, index: int, element_type: str) -> NDArray[np.bool]: ...
-def set_group_in_service(net: pandapowerNet, index: int) -> None: ...
-def set_group_out_of_service(net: pandapowerNet, index: int) -> None: ...
+def groups_equal(
+ net: pandapowerNet,
+ index1: Int,
+ index2: Int,
+ *,
+ # kwargs passed to pd.testing.assert_frame_equal
+ check_dtype: bool | Literal["equiv"] = True,
+ check_index_type: bool | Literal["equiv"] = "equiv",
+ check_column_type: bool | Literal["equiv"] = "equiv",
+ check_frame_type: bool = True,
+ check_names: bool = True,
+ by_blocks: bool = False,
+ check_exact: bool = ...,
+ check_datetimelike_compat: bool = False,
+ check_categorical: bool = True,
+ check_like: bool = False,
+ check_freq: bool = True,
+ check_flags: bool = True,
+ rtol: float = ...,
+ atol: float = ...,
+ obj: str = "DataFrame",
+) -> bool: ...
+def compare_group_elements(net: pandapowerNet, index1: Int, index2: Int) -> bool: ...
+def check_unique_group_names(*args, **kwargs) -> NoReturn: ...
+def check_unique_group_rows(net: pandapowerNet, raise_error: Bool = True, log_level: str = "warning") -> None: ...
+def remove_not_existing_group_members(net: pandapowerNet, verbose: Bool = True) -> None: ...
+def ensure_lists_in_group_element_column(net: pandapowerNet, drop_empty_lines: Bool = True) -> None: ...
+def group_entries_exist_in_element_table(net: pandapowerNet, index: Int, element_type: str) -> Array1D[np.bool]: ...
+def set_group_in_service(net: pandapowerNet, index: Int) -> None: ...
+def set_group_out_of_service(net: pandapowerNet, index: Int) -> None: ...
def set_value_to_group(
- net: pandapowerNet, index: int, value: object, column: str, replace: bool = True, append_column: bool = True
+ net: pandapowerNet, index: Int, value: object, column: str, replace: Bool = True, append_column: Bool = True
) -> None: ...
-def group_res_power_per_bus(net: pandapowerNet, index: int) -> pd.DataFrame: ...
-def group_res_p_mw(net: pandapowerNet, index: int) -> float | Incomplete: ...
-def group_res_q_mvar(net: pandapowerNet, index: int) -> float | Incomplete: ...
+def group_res_power_per_bus(net: pandapowerNet, index: Int) -> pd.DataFrame: ...
+def group_res_p_mw(net: pandapowerNet, index: Int) -> np.float64: ...
+def group_res_q_mvar(net: pandapowerNet, index: Int) -> np.float64: ...
def set_group_reference_column(
- net: pandapowerNet, index: int, reference_column: str, element_type: str | None = None
+ net: pandapowerNet, index: Int, reference_column: str, element_type: str | None = None
) -> None: ...
def return_group_as_net(
- net: pandapowerNet, index: int, keep_everything_else: bool = False, verbose: bool = True, **kwargs: Incomplete
+ net: pandapowerNet,
+ index: Int,
+ keep_everything_else: Bool = False,
+ verbose: Bool = True,
+ *,
+ # extracted from **kwargs
+ add_stdtypes: Bool = True,
) -> pandapowerNet: ...
def elements_connected_to_group(
net: pandapowerNet,
- index: int,
+ index: Int,
element_types: Iterable[str],
- find_buses_only_from_buses: bool = False,
- respect_switches: bool = True,
- respect_in_service: bool = False,
- include_empty_lists: bool = False,
+ find_buses_only_from_buses: Bool = False,
+ respect_switches: Bool = True,
+ respect_in_service: Bool = False,
+ include_empty_lists: Bool = False,
) -> dict[str, pd.Index[int]]: ...
diff --git a/stubs/pandapower-stubs/io_utils.pyi b/stubs/pandapower-stubs/io_utils.pyi
index 3eb4d3a..d7755f1 100644
--- a/stubs/pandapower-stubs/io_utils.pyi
+++ b/stubs/pandapower-stubs/io_utils.pyi
@@ -47,16 +47,16 @@ class PPJSONEncoder(json.JSONEncoder):
isinstance_func: Callable[[object, type[object]], bool] = ...,
# json.JSONEncoder.__init__ kwargs
*,
- skipkeys: bool = ...,
- ensure_ascii: bool = ...,
- check_circular: bool = ...,
- allow_nan: bool = ...,
- sort_keys: bool = ...,
- indent: int | str | None = ...,
- separators: tuple[str, str] | None = ...,
- default: Callable[..., Any] | None = ...,
+ skipkeys: bool = False,
+ ensure_ascii: bool = True,
+ check_circular: bool = True,
+ allow_nan: bool = True,
+ sort_keys: bool = False,
+ indent: int | str | None = None,
+ separators: tuple[str, str] | None = None,
+ default: Callable[..., Any] | None = None,
) -> None: ...
- def iterencode(self, o: object, _one_shot: bool = False) -> Incomplete: ...
+ def iterencode(self, o: object, _one_shot: bool = False) -> Any: ...
def default(self, o: object) -> Any: ...
class FromSerializable:
diff --git a/stubs/pandapower-stubs/networks/cigre_networks.pyi b/stubs/pandapower-stubs/networks/cigre_networks.pyi
index ea76283..2d55350 100644
--- a/stubs/pandapower-stubs/networks/cigre_networks.pyi
+++ b/stubs/pandapower-stubs/networks/cigre_networks.pyi
@@ -1,5 +1,8 @@
+from typing import Literal
+
+from pandapower._typing import Float
from pandapower.auxiliary import pandapowerNet
-def create_cigre_network_hv(length_km_6a_6b: float = 0.1) -> pandapowerNet: ...
-def create_cigre_network_mv(with_der: bool = False) -> pandapowerNet: ...
+def create_cigre_network_hv(length_km_6a_6b: Float = 0.1) -> pandapowerNet: ...
+def create_cigre_network_mv(with_der: Literal["pv_wind", "all", False] = False) -> pandapowerNet: ...
def create_cigre_network_lv() -> pandapowerNet: ...
diff --git a/stubs/pandapower-stubs/networks/dickert_lv_networks.pyi b/stubs/pandapower-stubs/networks/dickert_lv_networks.pyi
index 0e9ae3c..50710d7 100644
--- a/stubs/pandapower-stubs/networks/dickert_lv_networks.pyi
+++ b/stubs/pandapower-stubs/networks/dickert_lv_networks.pyi
@@ -1,11 +1,12 @@
-from typing import Literal, SupportsIndex
+from typing import Literal
+from pandapower._typing import Int
from pandapower.auxiliary import pandapowerNet
from pandapower.std_types import _StdType
def create_dickert_lv_feeders(
net: pandapowerNet,
- busbar_index: SupportsIndex,
+ busbar_index: Int,
feeders_range: Literal["short", "middle", "long"] = "short",
linetype: Literal["cable", "C&OHL"] = "cable",
customer: Literal["single", "multiple"] = "single",
diff --git a/stubs/pandapower-stubs/networks/ieee_europen_lv_asymmetric.pyi b/stubs/pandapower-stubs/networks/ieee_europen_lv_asymmetric.pyi
index cb89996..d21a8f0 100644
--- a/stubs/pandapower-stubs/networks/ieee_europen_lv_asymmetric.pyi
+++ b/stubs/pandapower-stubs/networks/ieee_europen_lv_asymmetric.pyi
@@ -1,9 +1,9 @@
from typing import Literal
from typing_extensions import Unpack
+from pandapower._typing import FromJsonKwds
from pandapower.auxiliary import pandapowerNet
-from pandapower.file_io import _FromJsonKwds
def ieee_european_lv_asymmetric(
- scenario: Literal["off_peak_1", "on_peak_566", "off_peak_1440"] = "on_peak_566", **kwargs: Unpack[_FromJsonKwds]
+ scenario: Literal["off_peak_1", "on_peak_566", "off_peak_1440"] = "on_peak_566", **kwargs: Unpack[FromJsonKwds]
) -> pandapowerNet: ...
diff --git a/stubs/pandapower-stubs/networks/kerber_extreme_networks.pyi b/stubs/pandapower-stubs/networks/kerber_extreme_networks.pyi
index e057cb2..9f2ebd9 100644
--- a/stubs/pandapower-stubs/networks/kerber_extreme_networks.pyi
+++ b/stubs/pandapower-stubs/networks/kerber_extreme_networks.pyi
@@ -1,96 +1,97 @@
+from pandapower._typing import Float, Int
from pandapower.auxiliary import pandapowerNet
def kb_extrem_landnetz_freileitung(
- n_lines: int = 26,
- l_lines_in_km: float = 0.012,
+ n_lines: Int = 26,
+ l_lines_in_km: Float = 0.012,
std_type: str = "NFA2X 4x70",
trafotype: str = "0.25 MVA 10/0.4 kV",
- p_load_mw: float = 0.008,
- q_load_mvar: float = 0,
- v_os: float = 10,
+ p_load_mw: Float = 0.008,
+ q_load_mvar: Float = 0,
+ v_os: Float = 10.0,
) -> pandapowerNet: ...
def kb_extrem_landnetz_kabel(
- n_branch_1: int = 26,
- l_lines_1_in_km: float = 0.026,
+ n_branch_1: Int = 26,
+ l_lines_1_in_km: Float = 0.026,
std_type: str = "NAYY 4x150",
trafotype: str = "0.25 MVA 10/0.4 kV",
- p_load_mw: float = 0.008,
- q_load_mvar: float = 0,
- length_branchout_line_1: float = 0.018,
- length_branchout_line_2: float = 0.033,
+ p_load_mw: Float = 0.008,
+ q_load_mvar: Float = 0.0,
+ length_branchout_line_1: Float = 0.018,
+ length_branchout_line_2: Float = 0.033,
std_type_branchout_line: str = "NAYY 4x50",
- v_os: float = 10,
+ v_os: Float = 10.0,
) -> pandapowerNet: ...
def kb_extrem_landnetz_freileitung_trafo(
- n_branch_1: int = 26,
- n_branch_2: int = 1,
- l_lines_1_in_km: float = 0.012,
- l_lines_2_in_km: float = 0.036,
+ n_branch_1: Int = 26,
+ n_branch_2: Int = 1,
+ l_lines_1_in_km: Float = 0.012,
+ l_lines_2_in_km: Float = 0.036,
std_type: str = "NFA2X 4x70",
trafotype: str = "0.1 MVA 10/0.4 kV",
- p_load_mw: float = 0.008,
- q_load_mvar: float = 0,
- v_os: float = 10,
+ p_load_mw: Float = 0.008,
+ q_load_mvar: Float = 0,
+ v_os: Float = 10.0,
) -> pandapowerNet: ...
def kb_extrem_landnetz_kabel_trafo(
- n_branch_1: int = 26,
- n_branch_2: int = 1,
- l_lines_1_in_km: float = 0.026,
- l_lines_2_in_km: float = 0.078,
+ n_branch_1: Int = 26,
+ n_branch_2: Int = 1,
+ l_lines_1_in_km: Float = 0.026,
+ l_lines_2_in_km: Float = 0.078,
std_type: str = "NAYY 4x150",
trafotype: str = "0.1 MVA 10/0.4 kV",
- p_load_mw: float = 0.008,
- q_load_mvar: float = 0,
- length_branchout_line_1: float = 0.018,
- length_branchout_line_2: float = 0.033,
+ p_load_mw: Float = 0.008,
+ q_load_mvar: Float = 0.0,
+ length_branchout_line_1: Float = 0.018,
+ length_branchout_line_2: Float = 0.033,
std_type_branchout_line: str = "NAYY 4x50",
- v_os: float = 10,
+ v_os: Float = 10.0,
) -> pandapowerNet: ...
def kb_extrem_dorfnetz(
std_type: str = "NAYY 4x150",
trafotype: str = "0.4 MVA 10/0.4 kV",
- p_load_mw: float = 0.006,
- q_load_mvar: float = 0,
- length_branchout_line_1: float = 0.015,
- length_branchout_line_2: float = 0.031,
+ p_load_mw: Float = 0.006,
+ q_load_mvar: Float = 0.0,
+ length_branchout_line_1: Float = 0.015,
+ length_branchout_line_2: Float = 0.031,
std_type_branchout_line: str = "NAYY 4x50",
- v_os: float = 10,
+ v_os: Float = 10.0,
) -> pandapowerNet: ...
def kb_extrem_dorfnetz_trafo(
std_type: str = "NAYY 4x150",
trafotype: str = "0.25 MVA 10/0.4 kV",
- p_load_mw: float = 0.006,
- q_load_mvar: float = 0,
- length_branchout_line_1: float = 0.015,
- length_branchout_line_2: float = 0.031,
+ p_load_mw: Float = 0.006,
+ q_load_mvar: Float = 0.0,
+ length_branchout_line_1: Float = 0.015,
+ length_branchout_line_2: Float = 0.031,
std_type_branchout_line: str = "NAYY 4x50",
- v_os: float = 10,
+ v_os: Float = 10.0,
) -> pandapowerNet: ...
def kb_extrem_vorstadtnetz_1(
std_type: str = "NAYY 4x150",
- p_load_mw: float = 0.002,
- q_load_mvar: float = 0,
+ p_load_mw: Float = 0.002,
+ q_load_mvar: Float = 0.0,
trafotype: str = "0.63 MVA 10/0.4 kV",
- v_os: float = 10,
+ v_os: Float = 10.0,
) -> pandapowerNet: ...
def kb_extrem_vorstadtnetz_2(
std_type: str = "NAYY 4x185",
- p_load_mw: float = 0.002,
- q_load_mvar: float = 0,
+ p_load_mw: Float = 0.002,
+ q_load_mvar: Float = 0.0,
trafotype: str = "0.63 MVA 10/0.4 kV",
- v_os: float = 10,
+ v_os: Float = 10.0,
) -> pandapowerNet: ...
def kb_extrem_vorstadtnetz_trafo_1(
std_type: str = "NAYY 4x150",
- p_load_mw: float = 0.002,
- q_load_mvar: float = 0,
+ p_load_mw: Float = 0.002,
+ q_load_mvar: Float = 0.0,
trafotype: str = "0.25 MVA 10/0.4 kV",
- v_os: float = 10,
+ v_os: Float = 10.0,
) -> pandapowerNet: ...
def kb_extrem_vorstadtnetz_trafo_2(
std_type: str = "NAYY 4x185",
- p_load_mw: float = 0.002,
- q_load_mvar: float = 0,
+ p_load_mw: Float = 0.002,
+ q_load_mvar: Float = 0.0,
trafotype: str = "0.25 MVA 10/0.4 kV",
- v_os: float = 10,
+ v_os: Float = 10.0,
) -> pandapowerNet: ...
diff --git a/stubs/pandapower-stubs/networks/kerber_networks.pyi b/stubs/pandapower-stubs/networks/kerber_networks.pyi
index 2cf5589..7c79095 100644
--- a/stubs/pandapower-stubs/networks/kerber_networks.pyi
+++ b/stubs/pandapower-stubs/networks/kerber_networks.pyi
@@ -1,74 +1,75 @@
+from pandapower._typing import Float, Int
from pandapower.auxiliary import pandapowerNet
def create_kerber_landnetz_freileitung_1(
- n_lines: int = 13,
- l_lines_in_km: float = 0.021,
+ n_lines: Int = 13,
+ l_lines_in_km: Float = 0.021,
std_type: str = "NFA2X 4x70",
trafotype: str = "0.16 MVA 10/0.4 kV",
- p_load_mw: float = 0.008,
- q_load_mvar: float = 0,
- v_os: float = 10,
+ p_load_mw: Float = 0.008,
+ q_load_mvar: Float = 0,
+ v_os: Float = 10.0,
) -> pandapowerNet: ...
def create_kerber_landnetz_freileitung_2(
- n_branch_1: int = 6,
- n_branch_2: int = 2,
- l_lines_1_in_km: float = 0.038,
- l_lines_2_in_km: float = 0.081,
+ n_branch_1: Int = 6,
+ n_branch_2: Int = 2,
+ l_lines_1_in_km: Float = 0.038,
+ l_lines_2_in_km: Float = 0.081,
std_type: str = "NFA2X 4x70",
trafotype: str = "0.1 MVA 10/0.4 kV",
- p_load_mw: float = 0.008,
- q_load_mvar: float = 0,
- v_os: float = 10,
+ p_load_mw: Float = 0.008,
+ q_load_mvar: Float = 0,
+ v_os: Float = 10.0,
) -> pandapowerNet: ...
def create_kerber_landnetz_kabel_1(
- n_branch_1: int = 6,
- n_branch_2: int = 2,
- l_lines_1_in_km: float = 0.082,
- l_lines_2_in_km: float = 0.175,
+ n_branch_1: Int = 6,
+ n_branch_2: Int = 2,
+ l_lines_1_in_km: Float = 0.082,
+ l_lines_2_in_km: Float = 0.175,
std_type: str = "NAYY 4x150",
std_type_branchout_line: str = "NAYY 4x50",
trafotype: str = "0.1 MVA 10/0.4 kV",
- p_load_mw: float = 0.008,
- q_load_mvar: float = 0,
- length_branchout_line_1: float = 0.018,
- length_branchout_line_2: float = 0.033,
- v_os: float = 10,
+ p_load_mw: Float = 0.008,
+ q_load_mvar: Float = 0.0,
+ length_branchout_line_1: Float = 0.018,
+ length_branchout_line_2: Float = 0.033,
+ v_os: Float = 10.0,
) -> pandapowerNet: ...
def create_kerber_landnetz_kabel_2(
- n_branch_1: int = 12,
- n_branch_2: int = 2,
- l_lines_1_in_km: float = 0.053,
- l_lines_2_in_km: float = 0.175,
+ n_branch_1: Int = 12,
+ n_branch_2: Int = 2,
+ l_lines_1_in_km: Float = 0.053,
+ l_lines_2_in_km: Float = 0.175,
std_type: str = "NAYY 4x150",
trafotype: str = "0.16 MVA 10/0.4 kV",
- p_load_mw: float = 0.008,
- q_load_mvar: float = 0,
- length_branchout_line_1: float = 0.018,
- length_branchout_line_2: float = 0.033,
+ p_load_mw: Float = 0.008,
+ q_load_mvar: Float = 0.0,
+ length_branchout_line_1: Float = 0.018,
+ length_branchout_line_2: Float = 0.033,
std_type_branchout_line: str = "NAYY 4x50",
- v_os: float = 10,
+ v_os: Float = 10.0,
) -> pandapowerNet: ...
def create_kerber_dorfnetz(
std_type: str = "NAYY 4x150",
trafotype: str = "0.4 MVA 10/0.4 kV",
- p_load_mw: float = 0.006,
- q_load_mvar: float = 0,
- length_branchout_line_1: float = 0.015,
- length_branchout_line_2: float = 0.031,
+ p_load_mw: Float = 0.006,
+ q_load_mvar: Float = 0.0,
+ length_branchout_line_1: Float = 0.015,
+ length_branchout_line_2: Float = 0.031,
std_type_branchout_line: str = "NAYY 4x50",
- v_os: float = 10,
+ v_os: Float = 10.0,
) -> pandapowerNet: ...
def create_kerber_vorstadtnetz_kabel_1(
std_type: str = "NAYY 4x150",
- p_load_mw: float = 0.002,
- q_load_mvar: float = 0,
+ p_load_mw: Float = 0.002,
+ q_load_mvar: Float = 0.0,
trafotype: str = "0.63 MVA 10/0.4 kV",
- v_os: float = 10,
+ v_os: Float = 10.0,
) -> pandapowerNet: ...
def create_kerber_vorstadtnetz_kabel_2(
std_type: str = "NAYY 4x185",
- p_load_mw: float = 0.002,
- q_load_mvar: float = 0,
+ p_load_mw: Float = 0.002,
+ q_load_mvar: Float = 0.0,
trafotype: str = "0.63 MVA 10/0.4 kV",
- v_os: float = 10,
+ v_os: Float = 10.0,
) -> pandapowerNet: ...
diff --git a/stubs/pandapower-stubs/networks/lv_schutterwald.pyi b/stubs/pandapower-stubs/networks/lv_schutterwald.pyi
new file mode 100644
index 0000000..730c70b
--- /dev/null
+++ b/stubs/pandapower-stubs/networks/lv_schutterwald.pyi
@@ -0,0 +1,8 @@
+from typing_extensions import Unpack
+
+from pandapower._typing import FromJsonKwds
+from pandapower.auxiliary import pandapowerNet
+
+def lv_schutterwald(
+ separation_by_sub: bool = False, include_heat_pumps: bool = False, **kwargs: Unpack[FromJsonKwds]
+) -> pandapowerNet: ...
diff --git a/stubs/pandapower-stubs/networks/mv_oberrhein.pyi b/stubs/pandapower-stubs/networks/mv_oberrhein.pyi
index cd93f5e..b7327ed 100644
--- a/stubs/pandapower-stubs/networks/mv_oberrhein.pyi
+++ b/stubs/pandapower-stubs/networks/mv_oberrhein.pyi
@@ -1,34 +1,43 @@
from typing import Literal, overload
from typing_extensions import Unpack
+from pandapower._typing import Float, FromJsonKwds
from pandapower.auxiliary import pandapowerNet
-from pandapower.file_io import _FromJsonKwds
@overload
-def mv_oberrhein(
+def mv_oberrhein( # separation_by_sub=True positional
+ scenario: Literal["load", "generation"],
+ cosphi_load: Float,
+ cosphi_pv: Float,
+ include_substations: bool,
+ separation_by_sub: Literal[True],
+ **kwargs: Unpack[FromJsonKwds],
+) -> tuple[pandapowerNet, pandapowerNet]: ...
+@overload
+def mv_oberrhein( # separation_by_sub=True keyword
scenario: Literal["load", "generation"] = "load",
- cosphi_load: float = 0.98,
- cosphi_pv: float = 1,
+ cosphi_load: Float = 0.98,
+ cosphi_pv: Float = 1.0,
include_substations: bool = False,
*,
separation_by_sub: Literal[True],
- **kwargs: Unpack[_FromJsonKwds],
+ **kwargs: Unpack[FromJsonKwds],
) -> tuple[pandapowerNet, pandapowerNet]: ...
@overload
def mv_oberrhein(
scenario: Literal["load", "generation"] = "load",
- cosphi_load: float = 0.98,
- cosphi_pv: float = 1,
+ cosphi_load: Float = 0.98,
+ cosphi_pv: Float = 1.0,
include_substations: bool = False,
separation_by_sub: Literal[False] = False,
- **kwargs: Unpack[_FromJsonKwds],
+ **kwargs: Unpack[FromJsonKwds],
) -> pandapowerNet: ...
@overload
def mv_oberrhein(
scenario: Literal["load", "generation"] = "load",
- cosphi_load: float = 0.98,
- cosphi_pv: float = 1,
+ cosphi_load: Float = 0.98,
+ cosphi_pv: Float = 1.0,
include_substations: bool = False,
separation_by_sub: bool = False,
- **kwargs: Unpack[_FromJsonKwds],
+ **kwargs: Unpack[FromJsonKwds],
) -> pandapowerNet | tuple[pandapowerNet, pandapowerNet]: ...
diff --git a/stubs/pandapower-stubs/networks/power_system_test_cases.pyi b/stubs/pandapower-stubs/networks/power_system_test_cases.pyi
index 795974a..b7e080d 100644
--- a/stubs/pandapower-stubs/networks/power_system_test_cases.pyi
+++ b/stubs/pandapower-stubs/networks/power_system_test_cases.pyi
@@ -1,44 +1,44 @@
from _typeshed import StrOrBytesPath, SupportsRead
from typing_extensions import Unpack
+from pandapower._typing import Float, FromJsonKwds, Int
from pandapower.auxiliary import pandapowerNet
-from pandapower.file_io import _FromJsonKwds
-def sorted_from_json(path: SupportsRead[str] | StrOrBytesPath, **kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case4gs(**kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case5(**kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case6ww(**kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case9(**kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case11_iwamoto(**kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case14(**kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case24_ieee_rts(**kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case30(**kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case_ieee30(**kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case33bw(**kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case39(**kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
+def sorted_from_json(path: SupportsRead[str] | StrOrBytesPath, **kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case4gs(**kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case5(**kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case6ww(**kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case9(**kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case11_iwamoto(**kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case14(**kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case24_ieee_rts(**kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case30(**kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case_ieee30(**kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case33bw(**kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case39(**kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
def case57(
- vn_kv_area1: float = 115,
- vn_kv_area2: float = 500,
- vn_kv_area3: float = 138,
- vn_kv_area4: float = 345,
- vn_kv_area5: float = 230,
- vn_kv_area6: float = 161,
- **kwargs: Unpack[_FromJsonKwds],
+ vn_kv_area1: Float = 115,
+ vn_kv_area2: Float = 500,
+ vn_kv_area3: Float = 138,
+ vn_kv_area4: Float = 345,
+ vn_kv_area5: Float = 230,
+ vn_kv_area6: Float = 161,
+ **kwargs: Unpack[FromJsonKwds],
) -> pandapowerNet: ...
-def case89pegase(**kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case118(**kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case145(**kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case_illinois200(**kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case300(**kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case1354pegase(**kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case1888rte(ref_bus_idx: int = 1246, **kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case2848rte(ref_bus_idx: int = 271, **kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case2869pegase(**kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case3120sp(**kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case6470rte(ref_bus_idx: int = 5988, **kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case6495rte(ref_bus_idx: int | list[int] | None = None, **kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case6515rte(ref_bus_idx: int = 6171, **kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def case9241pegase(**kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def GBreducednetwork(**kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def GBnetwork(**kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
-def iceland(**kwargs: Unpack[_FromJsonKwds]) -> pandapowerNet: ...
+def case89pegase(**kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case118(**kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case145(**kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case_illinois200(**kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case300(**kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case1354pegase(**kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case1888rte(ref_bus_idx: Int = 1246, **kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case2848rte(ref_bus_idx: Int = 271, **kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case2869pegase(**kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case3120sp(**kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case6470rte(ref_bus_idx: Int = 5988, **kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case6495rte(ref_bus_idx: Int | list[int] | None = None, **kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case6515rte(ref_bus_idx: Int = 6171, **kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def case9241pegase(**kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def GBreducednetwork(**kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def GBnetwork(**kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
+def iceland(**kwargs: Unpack[FromJsonKwds]) -> pandapowerNet: ...
diff --git a/stubs/pandapower-stubs/pf/dSbus_dV_numba.pyi b/stubs/pandapower-stubs/pf/dSbus_dV_numba.pyi
index f685de7..cbb7d27 100644
--- a/stubs/pandapower-stubs/pf/dSbus_dV_numba.pyi
+++ b/stubs/pandapower-stubs/pf/dSbus_dV_numba.pyi
@@ -1,4 +1,4 @@
from _typeshed import Incomplete
def dSbus_dV_numba_sparse(Yx, Yp, Yj, V, Vnorm, Ibus): ...
-def dSbus_dV(Ybus, V, I: Incomplete | None = ...): ...
+def dSbus_dV(Ybus, V, I: Incomplete | None = None): ...
diff --git a/stubs/pandapower-stubs/plotting/collections.pyi b/stubs/pandapower-stubs/plotting/collections.pyi
index a941080..51f2de1 100644
--- a/stubs/pandapower-stubs/plotting/collections.pyi
+++ b/stubs/pandapower-stubs/plotting/collections.pyi
@@ -1,9 +1,9 @@
-from _typeshed import Incomplete
-from collections.abc import Callable, Collection as SizedIterable, Iterable, Sequence
+from collections.abc import Callable, Collection as abc_Collection, Iterable
from typing import Any, Literal, TypeVar
-from typing_extensions import Self
+from typing_extensions import Self, deprecated
import numpy as np
+import pandas as pd
from matplotlib.axes import Axes
from matplotlib.collections import Collection, LineCollection, PatchCollection
from matplotlib.colors import Colormap, Normalize
@@ -12,31 +12,30 @@ from matplotlib.textpath import TextPath
from matplotlib.typing import ColorType, LineStyleType
from numpy.typing import ArrayLike, NDArray
+from pandapower._typing import Float, Int, ScalarOrVector
from pandapower.auxiliary import pandapowerNet
_CollectionT = TypeVar("_CollectionT", bound=Collection)
-MATPLOTLIB_INSTALLED: bool
-
class CustomTextPath(TextPath):
s: str
usetex: bool
prop: FontProperties
def __init__(
self,
- xy: tuple[float, float] | NDArray[np.float64],
+ xy: tuple[Float, Float] | NDArray[np.float64],
s: str,
- size: float | None = None,
+ size: Float | None = None,
prop: FontProperties | None = None,
- _interpolation_steps: int = 1,
+ _interpolation_steps: Int = 1,
usetex: bool = False,
) -> None: ...
def __deepcopy__(self, memo: dict[int, Any] | None = None) -> Self: ...
def create_annotation_collection(
texts: Iterable[str],
- coords: Iterable[tuple[float, float]],
- size: float | Iterable[float],
+ coords: Iterable[tuple[Float, Float]],
+ size: ScalarOrVector[Float],
prop: FontProperties | None = None,
**kwargs,
) -> PatchCollection: ...
@@ -47,189 +46,252 @@ def add_cmap_to_collection(
z: ArrayLike,
cbar_title: str,
plot_colormap: bool = True,
- clim: float | tuple[float, float] | None = None,
+ clim: Float | tuple[Float, Float] | None = None,
) -> _CollectionT: ...
def create_bus_collection(
net: pandapowerNet,
- buses: Incomplete | None = None,
- size: float = 5,
+ buses: abc_Collection[Int] | None = None,
+ size: Float = 5.0,
patch_type: str = "circle",
- color: ColorType | SizedIterable[ColorType] | None = None,
- z: Incomplete | None = None,
+ color: ScalarOrVector[ColorType] | None = None,
+ z: ArrayLike | None = None,
cmap: Colormap | str | None = None,
norm: Normalize | str | None = None,
- infofunc: Callable[[int], tuple[str, int]] | None = None,
+ infofunc: Callable[[int], tuple[str, Int]] | None = None,
picker: bool = False,
- bus_geodata: Incomplete | None = None,
+ bus_geodata: pd.DataFrame | None = None,
+ bus_table: str = "bus",
cbar_title: str = "Bus Voltage [pu]",
+ clim: Float | tuple[Float, Float] | None = None,
+ plot_colormap: bool = True,
**kwargs,
) -> PatchCollection | None: ...
def create_line_collection(
net: pandapowerNet,
- lines: Incomplete | None = None,
- line_geodata: Incomplete | None = None,
- bus_geodata: Incomplete | None = None,
+ lines: abc_Collection[Int] | None = None,
+ line_geodata: pd.DataFrame | None = None,
+ bus_geodata: pd.DataFrame | None = None,
use_bus_geodata: bool = False,
- infofunc: Callable[[int], tuple[str, int]] | None = None,
+ infofunc: Callable[[int], tuple[str, Int]] | None = None,
cmap: Colormap | str | None = None,
norm: Normalize | str | None = None,
picker: bool = False,
- z: Incomplete | None = None,
+ z: ArrayLike | None = None,
cbar_title: str = "Line Loading [%]",
- clim: Incomplete | None = None,
+ clim: Float | tuple[Float, Float] | None = None,
plot_colormap: bool = True,
+ line_table: Literal["line", "line_dc"] = "line",
**kwargs,
) -> LineCollection | None: ...
def create_dcline_collection(
net: pandapowerNet,
- dclines: Incomplete | None = None,
- bus_geodata: Incomplete | None = None,
- infofunc: Callable[[int], tuple[str, int]] | None = None,
+ dclines: abc_Collection[Int] | None = None,
+ line_geodata: pd.DataFrame | None = None,
+ infofunc: Callable[[int], tuple[str, Int]] | None = None,
cmap: Colormap | str | None = None,
norm: Normalize | str | None = None,
picker: bool = False,
- z: Incomplete | None = None,
+ z: ArrayLike | None = None,
cbar_title: str = "HVDC-Line Loading [%]",
- clim: Incomplete | None = None,
+ clim: Float | tuple[Float, Float] | None = None,
plot_colormap: bool = True,
**kwargs,
) -> LineCollection | None: ...
def create_impedance_collection(
net: pandapowerNet,
- impedances: Incomplete | None = None,
- bus_geodata: Incomplete | None = None,
- infofunc: Callable[[int], tuple[str, int]] | None = None,
+ impedances: abc_Collection[Int] | None = None,
+ bus_geodata: pd.DataFrame | None = None,
+ infofunc: Callable[[int], tuple[str, Int]] | None = None,
picker: bool = False,
**kwargs,
) -> LineCollection | None: ...
def create_trafo_connection_collection(
net: pandapowerNet,
- trafos: Incomplete | None = None,
- bus_geodata: Incomplete | None = None,
- infofunc: Callable[[int], tuple[str, int]] | None = None,
+ trafos: abc_Collection[Int] | None = None,
+ bus_geodata: pd.DataFrame | None = None,
+ infofunc: Callable[[int], tuple[str, Int]] | None = None,
cmap: Colormap | str | None = None,
- clim: Incomplete | None = None,
+ clim: Float | tuple[Float, Float] | None = None,
norm: Normalize | str | None = None,
- z: Incomplete | None = None,
+ z: ArrayLike | None = None,
cbar_title: str = "Transformer Loading",
picker: bool = False,
**kwargs,
) -> LineCollection: ...
def create_trafo3w_connection_collection(
net: pandapowerNet,
- trafos: Incomplete | None = None,
- bus_geodata: Incomplete | None = None,
- infofunc: Callable[[int], tuple[str, int]] | None = None,
+ trafos: abc_Collection[Int] | None = None,
+ bus_geodata: pd.DataFrame | None = None,
+ infofunc: Callable[[int], tuple[str, Int]] | None = None,
**kwargs,
) -> LineCollection: ...
def create_trafo_collection(
net: pandapowerNet,
- trafos: Incomplete | None = None,
+ trafos: abc_Collection[Int] | None = None,
picker: bool = False,
- size: Incomplete | None = None,
- infofunc: Callable[[int], tuple[str, int]] | None = None,
+ size: Float | None = None,
+ infofunc: Callable[[int], tuple[str, Int]] | None = None,
cmap: Colormap | str | None = None,
norm: Normalize | str | None = None,
- z: Incomplete | None = None,
- clim: Incomplete | None = None,
+ z: ArrayLike | None = None,
+ clim: Float | tuple[Float, Float] | None = None,
cbar_title: str = "Transformer Loading",
plot_colormap: bool = True,
- bus_geodata: Incomplete | None = None,
+ bus_geodata: pd.DataFrame | None = None,
**kwargs,
) -> tuple[PatchCollection, LineCollection] | None: ...
def create_trafo3w_collection(
net: pandapowerNet,
- trafo3ws: Incomplete | None = None,
+ trafo3ws: abc_Collection[Int] | None = None,
picker: bool = False,
- infofunc: Callable[[int], tuple[str, int]] | None = None,
+ infofunc: Callable[[int], tuple[str, Int]] | None = None,
cmap: Colormap | str | None = None,
norm: Normalize | str | None = None,
- z: Incomplete | None = None,
- clim: Incomplete | None = None,
+ z: ArrayLike | None = None,
+ clim: Float | tuple[Float, Float] | None = None,
cbar_title: str = "3W-Transformer Loading",
plot_colormap: bool = True,
- bus_geodata: Incomplete | None = None,
+ bus_geodata: pd.DataFrame | None = None,
**kwargs,
) -> tuple[None, None] | tuple[LineCollection, PatchCollection]: ...
+def create_vsc_collection(
+ net: pandapowerNet,
+ vscs: abc_Collection[Int] | None = None,
+ picker: bool = False,
+ size: Float | None = None,
+ infofunc: Callable[[int], tuple[str, Int]] | None = None,
+ cmap: Colormap | str | None = None,
+ norm: Normalize | str | None = None,
+ z: ArrayLike | None = None,
+ clim: Float | tuple[Float, Float] | None = None,
+ cbar_title: str = "VSC power",
+ plot_colormap=True,
+ bus_geodata=None,
+ bus_dc_geodata=None,
+ **kwargs,
+) -> tuple[PatchCollection, LineCollection] | None: ...
+def create_vsc_connection_collection(
+ net: pandapowerNet,
+ vscs: abc_Collection[Int] | None = None,
+ bus_geodata: pd.DataFrame | None = None,
+ bus_dc_geodata: pd.DataFrame | None = None,
+ infofunc: Callable[[int], tuple[str, Int]] | None = None,
+ cmap: Colormap | str | None = None,
+ clim: Float | tuple[Float, Float] | None = None,
+ norm: Normalize | str | None = None,
+ z: ArrayLike | None = None,
+ cbar_title: str = "Transformer Loading",
+ picker: bool = False,
+ **kwargs,
+) -> LineCollection: ...
+@deprecated("Busbar geodata is no longer supported for plotting geodata.")
def create_busbar_collection(
net: pandapowerNet,
- buses: Incomplete | None = None,
- infofunc: Callable[[int], tuple[str, int]] | None = None,
+ buses: abc_Collection[Int] | None = None,
+ infofunc: Callable[[int], tuple[str, Int]] | None = None,
cmap: Colormap | str | None = None,
norm: Normalize | str | None = None,
picker: bool = False,
- z: Incomplete | None = None,
+ z: ArrayLike | None = None,
cbar_title: str = "Bus Voltage [p.u.]",
- clim: Incomplete | None = None,
+ clim: Float | tuple[Float, Float] | None = None,
**kwargs,
) -> LineCollection | None: ...
def create_load_collection(
net: pandapowerNet,
- loads: Incomplete | None = None,
- size: float = 1.0,
- infofunc: Callable[[int], tuple[str, int]] | None = None,
- orientation: float = 3.14159265,
+ loads: abc_Collection[Int] | None = None,
+ size: Float = 1.0,
+ infofunc: Callable[[int], tuple[str, Int]] | None = None,
+ orientation: Float = ...,
picker: bool = False,
**kwargs,
) -> tuple[PatchCollection, LineCollection]: ...
def create_gen_collection(
net: pandapowerNet,
- gens: Incomplete | None = None,
- size: float = 1.0,
- infofunc: Callable[[int], tuple[str, int]] | None = None,
- orientation: float = 3.14159265,
+ gens: abc_Collection[Int] | None = None,
+ size: Float = 1.0,
+ infofunc: Callable[[int], tuple[str, Int]] | None = None,
+ orientation: Float = ...,
picker: bool = False,
**kwargs,
) -> tuple[PatchCollection, LineCollection]: ...
def create_sgen_collection(
net: pandapowerNet,
- sgens: Incomplete | None = None,
- size: float = 1.0,
- infofunc: Callable[[int], tuple[str, int]] | None = None,
- orientation: float = 3.14159265,
+ sgens: abc_Collection[Int] | None = None,
+ size: Float = 1.0,
+ infofunc: Callable[[int], tuple[str, Int]] | None = None,
+ orientation: Float = ...,
picker: bool = False,
**kwargs,
) -> tuple[PatchCollection, LineCollection]: ...
def create_storage_collection(
net: pandapowerNet,
- storages: Incomplete | None = None,
- size: float = 1.0,
- infofunc: Callable[[int], tuple[str, int]] | None = None,
- orientation: float = 3.14159265,
+ storages: abc_Collection[Int] | None = None,
+ size: Float = 1.0,
+ infofunc: Callable[[int], tuple[str, Int]] | None = None,
+ orientation: Float = ...,
picker: bool = False,
**kwargs,
) -> tuple[PatchCollection, LineCollection]: ...
def create_ext_grid_collection(
net: pandapowerNet,
- size: float = 1.0,
- infofunc: Callable[[int], tuple[str, int]] | None = None,
- orientation: float = 0,
+ ext_grids: abc_Collection[Int] | None = None,
+ size: Float = 1.0,
+ infofunc: Callable[[int], tuple[str, Int]] | None = None,
+ orientation: Float = 0,
picker: bool = False,
- ext_grids: Incomplete | None = None,
- ext_grid_buses: Incomplete | None = None,
+ ext_grid_buses: abc_Collection[Int] | None = None,
**kwargs,
) -> tuple[PatchCollection, LineCollection]: ...
def create_line_switch_collection(
- net: pandapowerNet, size: float = 1.0, distance_to_bus: float = 3, use_line_geodata: bool = False, **kwargs
+ net: pandapowerNet,
+ switches: abc_Collection[Int] | None = None,
+ size: Float = 1,
+ distance_to_bus: Float = 3,
+ use_line_geodata: bool = False,
+ **kwargs,
) -> PatchCollection: ...
def create_bus_bus_switch_collection(
net: pandapowerNet,
- size: float = 1.0,
- helper_line_style: LineStyleType | Sequence[LineStyleType] = ":",
- helper_line_size: float = 1.0,
- helper_line_color: ColorType | Sequence[ColorType] = "gray",
+ size: Float = 1.0,
+ helper_line_style: ScalarOrVector[LineStyleType] = ":",
+ helper_line_size: Float = 1.0,
+ helper_line_color: ScalarOrVector[ColorType] = "gray",
+ switches: abc_Collection[Int] | None = None,
+ **kwargs,
+) -> tuple[PatchCollection, LineCollection]: ...
+def create_ward_collection(
+ net: pandapowerNet,
+ wards: abc_Collection[Int] | None = None,
+ ward_buses: abc_Collection[Int] | None = None,
+ size: Float = 5.0,
+ bus_geodata: pd.DataFrame | None = None,
+ infofunc: Callable[[int], tuple[str, Int]] | None = None,
+ picker: bool = False,
+ orientation: Float = 0,
+ **kwargs,
+) -> tuple[PatchCollection, LineCollection]: ...
+def create_xward_collection(
+ net: pandapowerNet,
+ xwards: abc_Collection[Int] | None = None,
+ xward_buses: abc_Collection[Int] | None = None,
+ size: Float = 5.0,
+ bus_geodata: pd.DataFrame | None = None,
+ infofunc: Callable[[int], tuple[str, Int]] | None = None,
+ picker: bool = False,
+ orientation: Float = 0,
**kwargs,
) -> tuple[PatchCollection, LineCollection]: ...
def draw_collections(
collections: Iterable[Collection],
- figsize: tuple[float, float] = (10, 8),
+ figsize: tuple[Float, Float] = (10, 8),
ax: Axes | None = None,
plot_colorbars: bool = True,
set_aspect: bool = True,
axes_visible: tuple[bool, bool] = (False, False),
copy_collections: bool = True,
draw: bool = True,
- aspect: tuple[Literal["auto", "equal"] | float, Literal["box", "datalim"] | None] = ("equal", "datalim"),
+ aspect: tuple[Literal["auto", "equal"] | Float, Literal["box", "datalim"] | None] = ("equal", "datalim"),
autoscale: tuple[bool | None, bool, bool] = (True, True, True),
) -> Axes: ...
def add_single_collection(c: Collection, ax: Axes, plot_colorbars: bool, copy_collections: bool) -> None: ...
diff --git a/stubs/pandapower-stubs/plotting/generic_geodata.pyi b/stubs/pandapower-stubs/plotting/generic_geodata.pyi
index bb5e15f..33fd36e 100644
--- a/stubs/pandapower-stubs/plotting/generic_geodata.pyi
+++ b/stubs/pandapower-stubs/plotting/generic_geodata.pyi
@@ -1,30 +1,38 @@
from _typeshed import Incomplete
from collections.abc import Iterable
-from typing import Any, Literal
-from typing_extensions import TypeAlias
+from typing import (
+ Any as IGraph, # igraph.Graph but igraph is not installed
+ Literal,
+)
import networkx as nx # type: ignore[import-untyped]
from numpy.typing import ArrayLike
+from pandapower._typing import Float
from pandapower.auxiliary import pandapowerNet
-IGRAPH_INSTALLED: bool
-IGraph: TypeAlias = Any # igraph.Graph but igraph is not installed
-
def build_igraph_from_pp(
- net: pandapowerNet, respect_switches: bool = False, buses: ArrayLike | None = None
+ net: pandapowerNet,
+ respect_switches: bool = False,
+ buses: ArrayLike | None = None,
+ trafo_length_km: Float = 0.01,
+ switch_length_km: Float = 0.001,
+ dcline_length_km: Float = 1.0,
) -> tuple[IGraph, bool, list[int]]: ...
def coords_from_igraph(
graph: IGraph, roots: Iterable[int], meshed: bool = False, calculate_meshed: bool = False
) -> list[tuple[float, float]]: ...
-def coords_from_nxgraph(mg: nx.Graph[Incomplete] | None = None) -> list[tuple[float, float]]: ...
+def coords_from_nxgraph(mg: nx.Graph[Incomplete] | None = None, layout_engine: str = "neato") -> list[tuple[float, float]]: ...
def create_generic_coordinates(
net: pandapowerNet,
mg: nx.Graph[Incomplete] | None = None,
library: Literal["igraph", "networkx"] = "igraph",
respect_switches: bool = False,
- geodata_table: str = "bus_geodata",
+ geodata_table: str = "bus",
buses: ArrayLike | None = None,
overwrite: bool = False,
+ layout_engine: str = "neato",
+ trafo_length_km: Float = 0.01,
+ switch_length_km: Float = 0.001,
) -> pandapowerNet: ...
def fuse_geodata(net: pandapowerNet) -> None: ...
diff --git a/stubs/pandapower-stubs/plotting/geo.pyi b/stubs/pandapower-stubs/plotting/geo.pyi
index a076505..cbce629 100644
--- a/stubs/pandapower-stubs/plotting/geo.pyi
+++ b/stubs/pandapower-stubs/plotting/geo.pyi
@@ -1,11 +1,28 @@
-from pandapower.auxiliary import pandapowerNet
+from collections.abc import Collection
+from typing_extensions import deprecated
+
+import geojson # type: ignore[import-untyped] # https://github.com/jazzband/geojson/pull/203
-shapely_INSTALLED: bool
-geopandas_INSTALLED: bool
-pyproj_INSTALLED: bool
+from pandapower._typing import ConvertibleToCRS, Int
+from pandapower.auxiliary import pandapowerNet
+@deprecated("Use convert_gis_to_geojson instead. Support for geodata will be dropped.")
def convert_gis_to_geodata(net: pandapowerNet, node_geodata: bool = True, branch_geodata: bool = True) -> None: ...
+@deprecated("Use convert_geodata_to_geojson instead. Support for gis will be dropped.")
def convert_geodata_to_gis(
- net: pandapowerNet, epsg: int = 31467, node_geodata: bool = True, branch_geodata: bool = True
+ net: pandapowerNet, epsg: int = 31467, node_geodata: bool = True, branch_geodata: bool = True, remove_xy: bool = False
) -> None: ...
+@deprecated("Use convert_crs instead. Networks should not use different crs for bus and line geodata.")
def convert_epsg_bus_geodata(net: pandapowerNet, epsg_in: int = 4326, epsg_out: int = 31467) -> pandapowerNet: ...
+def convert_crs(net: pandapowerNet, epsg_in: ConvertibleToCRS = 4326, epsg_out: ConvertibleToCRS = 31467) -> None: ...
+def dump_to_geojson(
+ net: pandapowerNet,
+ nodes: bool | Collection[Int] = False,
+ branches: bool | Collection[Int] = False,
+ switches: bool | Collection[Int] = False,
+ trafos: bool | Collection[Int] = False,
+ t_is_3w: bool = False,
+ include_type_id: bool = True,
+) -> geojson.FeatureCollection: ...
+def convert_geodata_to_geojson(net: pandapowerNet, delete: bool = True, lonlat: bool = False) -> None: ...
+def convert_gis_to_geojson(net: pandapowerNet, delete: bool = True) -> None: ...
diff --git a/stubs/pandapower-stubs/plotting/patch_makers.pyi b/stubs/pandapower-stubs/plotting/patch_makers.pyi
index 8e8def7..eb01053 100644
--- a/stubs/pandapower-stubs/plotting/patch_makers.pyi
+++ b/stubs/pandapower-stubs/plotting/patch_makers.pyi
@@ -6,97 +6,126 @@ from matplotlib.patches import Arc, Circle, Ellipse, Patch, Rectangle, RegularPo
from matplotlib.typing import ColorType
from numpy.typing import NDArray
-MATPLOTLIB_INSTALLED: bool
+from pandapower._typing import Float, ScalarOrVector
def node_patches(
node_coords: Collection[Incomplete],
- size: float,
+ size: Float,
patch_type: str,
- colors: ColorType | Collection[ColorType] | None = None,
+ colors: ScalarOrVector[ColorType] | None = None,
*,
- width: float = ...,
- height: float = ...,
- angle: float = ...,
+ width: Float = ...,
+ height: Float = ...,
+ angle: Float = ...,
**kwargs,
) -> list[Patch]: ...
def ellipse_patches(
- node_coords: Collection[tuple[float, float]],
- width: float,
- height: float,
- angle: float | Collection[float] = 0,
- color: ColorType | Collection[ColorType] | None = None,
+ node_coords: Collection[tuple[Float, Float]],
+ width: Float,
+ height: Float,
+ angle: ScalarOrVector[Float] = 0,
+ color: ScalarOrVector[ColorType] | None = None,
**kwargs,
) -> list[Ellipse]: ...
def rectangle_patches(
- node_coords: Collection[tuple[float, float]],
- width: float,
- height: float,
- color: ColorType | Collection[ColorType] | None = None,
+ node_coords: Collection[tuple[Float, Float]],
+ width: Float,
+ height: Float,
+ color: ScalarOrVector[ColorType] | None = None,
**kwargs,
) -> list[Rectangle]: ...
def polygon_patches(
- node_coords: Collection[tuple[float, float]],
- radius: float,
+ node_coords: Collection[tuple[Float, Float]],
+ radius: Float,
num_edges: int,
- color: ColorType | Collection[ColorType] | None = None,
+ color: ScalarOrVector[ColorType] | None = None,
**kwargs,
) -> list[RegularPolygon]: ...
def load_patches(
node_coords: Collection[Incomplete],
- size: float,
- angles: float | Collection[float],
+ size: Float,
+ angles: ScalarOrVector[Float],
*,
- offset: float = ...,
- patch_edgecolor: ColorType | Collection[ColorType] = "w",
- patch_facecolor: ColorType | Collection[ColorType] = "w",
+ offset: Float = ...,
+ patch_edgecolor: ScalarOrVector[ColorType] = "w",
+ patch_facecolor: ScalarOrVector[ColorType] = "w",
**kwargs: Unused,
) -> tuple[list[tuple[Incomplete, Incomplete]], list[RegularPolygon], set[str]]: ...
def gen_patches(
node_coords: Collection[Incomplete],
- size: float,
- angles: float | Collection[float],
+ size: Float,
+ angles: ScalarOrVector[Float],
*,
- offset: float = ...,
- patch_edgecolor: ColorType | Collection[ColorType] = "k",
- patch_facecolor: ColorType | Collection[ColorType] = (1, 0, 0, 0),
+ offset: Float = ...,
+ patch_edgecolor: ScalarOrVector[ColorType] = "k",
+ patch_facecolor: ScalarOrVector[ColorType] = (1, 0, 0, 0),
**kwargs: Unused,
) -> tuple[list[tuple[Incomplete, Incomplete]], list[Arc | Circle], set[str]]: ...
def sgen_patches(
node_coords: Collection[Incomplete],
- size: float,
+ size: Float,
angles,
*,
- offset: float = ...,
- r_triangles: float = ...,
- patch_edgecolor: ColorType | Collection[ColorType] = "w",
- patch_facecolor: ColorType | Collection[ColorType] = "w",
+ offset: Float = ...,
+ r_triangles: Float = ...,
+ patch_edgecolor: ScalarOrVector[ColorType] = "w",
+ patch_facecolor: ScalarOrVector[ColorType] = "w",
**kwargs,
) -> tuple[list[tuple[Incomplete, Incomplete]], list[Circle | RegularPolygon], set[str]]: ...
def storage_patches(
node_coords: Collection[Incomplete],
- size: float,
- angles: float | Collection[float],
+ size: Float,
+ angles: ScalarOrVector[Float],
*,
- offset: float = ...,
- r_triangle: float = ...,
+ offset: Float = ...,
+ r_triangle: Float = ...,
**kwargs: Unused,
) -> tuple[list[tuple[Incomplete, Incomplete]], list[RegularPolygon], set[str]]: ...
def ext_grid_patches(
node_coords: Collection[Incomplete],
- size: float,
- angles: float | Collection[float],
+ size: Float,
+ angles: ScalarOrVector[Float],
*,
- offset: float = ...,
- patch_edgecolor: ColorType | Collection[ColorType] = "w",
- patch_facecolor: ColorType | Collection[ColorType] = "w",
+ offset: Float = ...,
+ patch_edgecolor: ScalarOrVector[ColorType] = "w",
+ patch_facecolor: ScalarOrVector[ColorType] = "w",
**kwargs: Unused,
) -> tuple[list[tuple[Incomplete, Incomplete]], list[Rectangle], set[str]]: ...
def trafo_patches(
- coords: Collection[tuple[tuple[float, float], tuple[float, float]]],
- size: float,
+ coords: Collection[tuple[tuple[Float, Float], tuple[Float, Float]]],
+ size: Float,
*,
- patch_edgecolor: ColorType | Collection[ColorType] = "w",
- patch_facecolor: ColorType | Collection[ColorType] = (1, 0, 0, 0),
- linewidths: float | Collection[float] = 2.0,
+ patch_edgecolor: ScalarOrVector[ColorType] = "w",
+ patch_facecolor: ScalarOrVector[ColorType] = (1, 0, 0, 0),
+ linewidths: ScalarOrVector[Float] = 2.0,
+ **kwargs: Unused,
+) -> tuple[list[tuple[NDArray[np.float64], NDArray[np.float64]]], list[Circle], set[str]]: ...
+def ward_patches(
+ node_coords: Collection[Incomplete],
+ size: Float,
+ angles: ScalarOrVector[Float],
+ *,
+ offset: Float = ...,
+ patch_edgecolor: ScalarOrVector[ColorType] = "w",
+ patch_facecolor: ScalarOrVector[ColorType] = "w",
+ **kwargs: Unused,
+) -> tuple[list[tuple[Incomplete, Incomplete]], list[Rectangle], set[str]]: ...
+def xward_patches(
+ node_coords: Collection[Incomplete],
+ size: Float,
+ angles: ScalarOrVector[Float],
+ *,
+ offset: Float = ...,
+ patch_edgecolor: ScalarOrVector[ColorType] = "w",
+ patch_facecolor: ScalarOrVector[ColorType] = "w",
+ **kwargs: Unused,
+) -> tuple[list[tuple[Incomplete, Incomplete]], list[Rectangle], set[str]]: ...
+def vsc_patches(
+ coords: Collection[tuple[tuple[Float, Float], tuple[Float, Float]]],
+ size: Float,
+ *,
+ patch_edgecolor: ScalarOrVector[ColorType] = "w",
+ patch_facecolor: ScalarOrVector[ColorType] = (1, 0, 0, 0),
+ linewidths: ScalarOrVector[Float] = 2.0,
**kwargs: Unused,
) -> tuple[list[tuple[NDArray[np.float64], NDArray[np.float64]]], list[Circle], set[str]]: ...
diff --git a/stubs/pandapower-stubs/plotting/plotly/get_colors.pyi b/stubs/pandapower-stubs/plotting/plotly/get_colors.pyi
index 391497f..35be87c 100644
--- a/stubs/pandapower-stubs/plotting/plotly/get_colors.pyi
+++ b/stubs/pandapower-stubs/plotting/plotly/get_colors.pyi
@@ -2,8 +2,6 @@ from _typeshed import Incomplete
from matplotlib.colors import Colormap
-MATPLOTLIB_INSTALLED: bool
-
def get_plotly_color(color_string: str) -> str: ...
def get_plotly_color_palette(n) -> list[str]: ...
def get_plotly_cmap(
diff --git a/stubs/pandapower-stubs/plotting/plotly/mapbox_plot.pyi b/stubs/pandapower-stubs/plotting/plotly/mapbox_plot.pyi
index fbedd96..6fe56d2 100644
--- a/stubs/pandapower-stubs/plotting/plotly/mapbox_plot.pyi
+++ b/stubs/pandapower-stubs/plotting/plotly/mapbox_plot.pyi
@@ -1,6 +1 @@
-from pandapower.auxiliary import pandapowerNet, ppException
-
-class MapboxTokenMissing(ppException): ...
-
-def geo_data_to_latlong(net: pandapowerNet, projection: str) -> None: ...
def set_mapbox_token(token: str) -> None: ...
diff --git a/stubs/pandapower-stubs/plotting/plotly/pf_res_plotly.pyi b/stubs/pandapower-stubs/plotting/plotly/pf_res_plotly.pyi
index c3fc0c5..d4cbe74 100644
--- a/stubs/pandapower-stubs/plotting/plotly/pf_res_plotly.pyi
+++ b/stubs/pandapower-stubs/plotting/plotly/pf_res_plotly.pyi
@@ -9,7 +9,7 @@ from pandapower.plotting.plotly.traces import _MapStyle
def pf_res_plotly(
net: pandapowerNet,
cmap: str = "Jet",
- use_line_geodata: bool | None = None,
+ use_line_geo: bool | None = None,
on_map: bool = False,
projection: str | None = None,
map_style: _MapStyle = "basic",
diff --git a/stubs/pandapower-stubs/plotting/plotly/simple_plotly.pyi b/stubs/pandapower-stubs/plotting/plotly/simple_plotly.pyi
index 142b324..06f3da1 100644
--- a/stubs/pandapower-stubs/plotting/plotly/simple_plotly.pyi
+++ b/stubs/pandapower-stubs/plotting/plotly/simple_plotly.pyi
@@ -1,6 +1,5 @@
-from _typeshed import Incomplete
-from collections.abc import Iterable
-from typing import Literal, overload
+from collections.abc import Iterable, Mapping
+from typing import Any, Literal, overload
import pandas as pd
from plotly.graph_objs import Figure # type: ignore[import-not-found] # pyright: ignore[reportMissingImports]
@@ -20,17 +19,17 @@ def get_hoverinfo(
def get_hoverinfo(
net: pandapowerNet, element: str, precision: int = 3, sub_index: Iterable[int] | None = None
) -> pd.Series[str] | None: ...
+@overload # auto_draw_traces=True
def simple_plotly(
net: pandapowerNet,
respect_switches: bool = True,
- use_line_geodata: bool | None = None,
+ use_line_geo: bool | None = None,
on_map: bool = False,
- projection: str | None = None,
map_style: _MapStyle = "basic",
- figsize: float = 1,
+ figsize: float = 1.0,
aspectratio: tuple[float, float] | Literal["auto"] = "auto",
- line_width: float = 1,
- bus_size: float = 10,
+ line_width: float = 1.0,
+ bus_size: float = 10.0,
ext_grid_size: float = 20.0,
bus_color: str = "blue",
line_color: str = "grey",
@@ -40,5 +39,59 @@ def simple_plotly(
filename: str = "temp-plot.html",
auto_open: bool = True,
showlegend: bool = True,
- additional_traces: Incomplete | None = None,
+ additional_traces: dict[str, Mapping[str, Any]] | Iterable[Mapping[str, Mapping[str, Any]]] | None = None,
+ zoomlevel: int = 11,
+ auto_draw_traces: Literal[True] = True,
+ hvdc_color: str = "cyan",
) -> Figure: ...
+@overload # auto_draw_traces=False positional
+def simple_plotly(
+ net: pandapowerNet,
+ respect_switches: bool,
+ use_line_geo: bool | None,
+ on_map: bool,
+ map_style: _MapStyle,
+ figsize: float,
+ aspectratio: tuple[float, float] | Literal["auto"],
+ line_width: float,
+ bus_size: float,
+ ext_grid_size: float,
+ bus_color: str,
+ line_color: str,
+ trafo_color: str,
+ trafo3w_color: str,
+ ext_grid_color: str,
+ filename: str,
+ auto_open: bool,
+ showlegend: bool,
+ additional_traces: dict[str, Mapping[str, Any]] | Iterable[Mapping[str, Mapping[str, Any]]] | None,
+ zoomlevel: int,
+ auto_draw_traces: Literal[False],
+ hvdc_color: str = "cyan",
+) -> tuple[list[dict[str, Any]], dict[str, Any]]: ...
+@overload # auto_draw_traces=False keyword
+def simple_plotly(
+ net: pandapowerNet,
+ respect_switches: bool = True,
+ use_line_geo: bool | None = None,
+ on_map: bool = False,
+ map_style: _MapStyle = "basic",
+ figsize: float = 1.0,
+ aspectratio: tuple[float, float] | Literal["auto"] = "auto",
+ line_width: float = 1.0,
+ bus_size: float = 10.0,
+ ext_grid_size: float = 20.0,
+ bus_color: str = "blue",
+ line_color: str = "grey",
+ trafo_color: str = "green",
+ trafo3w_color: str = "green",
+ ext_grid_color: str = "yellow",
+ filename: str = "temp-plot.html",
+ auto_open: bool = True,
+ showlegend: bool = True,
+ additional_traces: dict[str, Mapping[str, Any]] | Iterable[Mapping[str, Mapping[str, Any]]] | None = None,
+ zoomlevel: int = 11,
+ *,
+ auto_draw_traces: Literal[False],
+ hvdc_color: str = "cyan",
+) -> tuple[list[dict[str, Any]], dict[str, Any]]: ...
diff --git a/stubs/pandapower-stubs/plotting/plotly/traces.pyi b/stubs/pandapower-stubs/plotting/plotly/traces.pyi
index eb9e7bf..3f60308 100644
--- a/stubs/pandapower-stubs/plotting/plotly/traces.pyi
+++ b/stubs/pandapower-stubs/plotting/plotly/traces.pyi
@@ -1,107 +1,129 @@
from _typeshed import Incomplete
-from collections.abc import Iterable
-from typing import Literal
+from collections.abc import Collection, Iterable, Mapping
+from typing import Any, Literal
from typing_extensions import TypeAlias
import pandas as pd
from plotly.graph_objs import Figure # type: ignore[import-not-found] # pyright: ignore[reportMissingImports]
+from pandapower._typing import Float, Int
from pandapower.auxiliary import pandapowerNet
_MapStyle: TypeAlias = Literal["basic", "streets", "bright", "light", "dark", "satellite"]
-def version_check() -> None: ...
def sum_line_length(pts: Incomplete) -> float: ...
def get_line_neutral(coord: Incomplete) -> list[Incomplete]: ...
def create_edge_center_trace(
line_trace,
- size: int = 1,
+ size: Int = 1,
patch_type: str = "circle",
color: str = "white",
infofunc: pd.Series[Incomplete] | None = None,
trace_name: str = "edge_center",
- use_line_geodata: bool = False,
+ use_line_geo: bool = False,
showlegend: bool = False,
legendgroup: str | None = None,
- hoverlabel: Incomplete | None = None,
+ hoverlabel: str | None = None,
) -> dict[str, Incomplete]: ...
def create_bus_trace(
net: pandapowerNet,
- buses: Iterable[int] | pd.Index[int] | None = None,
- size: int = 5,
+ buses: Iterable[Int] | None = None,
+ size: Int = 5,
patch_type: str = "circle",
color: str = "blue",
- infofunc: pd.Series[Incomplete] | Iterable[Incomplete] | None = None,
+ infofunc: pd.Series[Incomplete] | Collection[Incomplete] | None = None,
trace_name: str = "buses",
legendgroup: str | None = None,
cmap: str | None = None,
- cmap_vals: Incomplete | None = None,
+ cmap_vals: Collection[Float] | None = None,
cbar_title: str | None = None,
- cmin: float | None = None,
- cmax: float | None = None,
- cpos: float = 1.0,
+ cmin: Float | None = None,
+ cmax: Float | None = None,
+ cpos: Float = 1.0,
colormap_column: str = "vm_pu",
) -> list[dict[str, Incomplete]]: ...
def create_line_trace(
net: pandapowerNet,
- lines: Iterable[int] | pd.Index[int] | None = None,
- use_line_geodata: bool = True,
+ lines: Iterable[Int] | None = None,
+ use_line_geo: bool = True,
respect_switches: bool = False,
- width: float = 1.0,
+ width: Float = 1.0,
color: str = "grey",
- infofunc: pd.Series[Incomplete] | Iterable[Incomplete] | None = None,
+ infofunc: pd.Series[Incomplete] | Collection[Incomplete] | None = None,
trace_name: str = "lines",
legendgroup: str | None = "lines",
cmap: str | None = None,
cbar_title: str | None = None,
show_colorbar: bool = True,
- cmap_vals: Incomplete | None = None,
- cmin: float | None = None,
- cmax: float | None = None,
- cpos: float = 1.1,
+ cmap_vals: Collection[Float] | None = None,
+ cmin: Float | None = None,
+ cmax: Float | None = None,
+ cpos: Float = 1.1,
cmap_vals_category: str = "loading_percent",
- hoverlabel: Incomplete | None = None,
+ hoverlabel: str | None = None,
+ dash: str = "solid",
) -> list[dict[str, Incomplete]]: ...
+def create_dcline_trace(
+ net: pandapowerNet,
+ dclines: Iterable[Int] | None = None,
+ width: Float = 1.0,
+ color: str = "grey",
+ infofunc: pd.Series[Incomplete] | Collection[Incomplete] | None = None,
+ trace_name: str = "hvdc lines",
+ legendgroup: str | None = "dclines",
+ cmap: str | None = None,
+ cbar_title: str | None = None,
+ show_colorbar: bool = True,
+ cmap_vals: Collection[Float] | None = None,
+ cmin: Float | None = None,
+ cmax: Float | None = None,
+ cpos: Float = 1.1,
+ cmap_vals_category: str = "loading_percent",
+ hoverlabel: str | None = None,
+): ...
def create_trafo_trace(
net: pandapowerNet,
- trafos: Iterable[int] | None = None,
+ trafos: Iterable[Int] | None = None,
color: str = "green",
trafotype: str = "2W",
- width: int = 5,
- infofunc: pd.Series[Incomplete] | Iterable[Incomplete] | None = None,
+ width: Int = 5,
+ infofunc: pd.Series[Incomplete] | Collection[Incomplete] | None = None,
cmap: str | None = None,
trace_name: str = "2W transformers",
- cmin: float | None = None,
- cmax: float | None = None,
- cmap_vals: Incomplete | None = None,
+ cmin: Float | None = None,
+ cmax: Float | None = None,
+ cmap_vals: Collection[Float] | None = None,
matching_params: Incomplete | None = None,
- use_line_geodata: bool | None = None,
+ use_line_geo: bool | None = None,
) -> list[dict[str, Incomplete]]: ...
def create_weighted_marker_trace(
net: pandapowerNet,
elm_type: str = "load",
- elm_ids: Iterable[Incomplete] | None = None,
+ elm_ids: Iterable[Int] | None = None,
column_to_plot: str = "p_mw",
sizemode: Literal["area", "diameter"] = "area",
color: str = "red",
patch_type: str = "circle",
- marker_scaling: float = 1.0,
+ marker_scaling: Float = 1.0,
trace_name: str = "",
- infofunc: pd.Series[Incomplete] | Iterable[Incomplete] | None = None,
+ infofunc: pd.Series[Incomplete] | Collection[Incomplete] | None = None,
node_element: str = "bus",
show_scale_legend: bool = True,
- scale_marker_size: float | None = None,
+ scale_marker_size: Float | None = None,
+ scale_marker_color: str | None = None,
+ scale_legend_unit: str | None = None,
+ trace_kwargs: Mapping[str, Any] | None = None,
) -> dict[str, Incomplete]: ...
def create_scale_trace(
- net: pandapowerNet, weighted_trace: dict[str, Incomplete], down_shift: int = 0
+ net: pandapowerNet, weighted_trace: Mapping[str, Mapping[str, Any]], down_shift: Int = 0
) -> dict[str, Incomplete]: ...
def draw_traces(
- traces: list[dict[str, Incomplete]],
+ traces: Collection[dict[str, Incomplete]],
on_map: bool = False,
map_style: _MapStyle = "basic",
showlegend: bool = True,
- figsize: float = 1,
- aspectratio: tuple[float, float] | Literal["auto"] = "auto",
+ figsize: Float = 1,
+ aspectratio: tuple[Float, Float] | Literal["auto"] = "auto",
filename: str = "temp-plot.html",
auto_open: bool = True,
**kwargs,
diff --git a/stubs/pandapower-stubs/plotting/plotly/vlevel_plotly.pyi b/stubs/pandapower-stubs/plotting/plotly/vlevel_plotly.pyi
index fb503ac..945e39e 100644
--- a/stubs/pandapower-stubs/plotting/plotly/vlevel_plotly.pyi
+++ b/stubs/pandapower-stubs/plotting/plotly/vlevel_plotly.pyi
@@ -1,4 +1,3 @@
-from _typeshed import Incomplete
from typing import Literal
from plotly.graph_objs import Figure # type: ignore[import-not-found] # pyright: ignore[reportMissingImports]
@@ -9,8 +8,8 @@ from pandapower.plotting.plotly.traces import _MapStyle
def vlevel_plotly(
net: pandapowerNet,
respect_switches: bool = True,
- use_line_geodata: bool | None = None,
- colors_dict: dict[float, Incomplete] | None = None,
+ use_line_geo: bool | None = None,
+ colors_dict: dict[float, str] | None = None,
on_map: bool = False,
projection: str | None = None,
map_style: _MapStyle = "basic",
diff --git a/stubs/pandapower-stubs/plotting/plotting_toolbox.pyi b/stubs/pandapower-stubs/plotting/plotting_toolbox.pyi
index 579b6e4..c54ddf7 100644
--- a/stubs/pandapower-stubs/plotting/plotting_toolbox.pyi
+++ b/stubs/pandapower-stubs/plotting/plotting_toolbox.pyi
@@ -1,52 +1,54 @@
-from collections.abc import Iterable
+from collections.abc import Collection, Iterable, Set as AbstractSet
from typing import TypeVar, overload
import numpy as np
import pandas as pd
from numpy.typing import ArrayLike, NDArray
+from pandapower._typing import Bool, Float, Int, ScalarOrVector
from pandapower.auxiliary import pandapowerNet
_T = TypeVar("_T")
def get_collection_sizes(
net: pandapowerNet,
- bus_size: float = 1.0,
- ext_grid_size: float = 1.0,
- trafo_size: float = 1.0,
- load_size: float = 1.0,
- sgen_size: float = 1.0,
- switch_size: float = 2.0,
- switch_distance: float = 1.0,
- gen_size: float = 1.0,
+ bus_size: Float = 1.0,
+ ext_grid_size: Float = 1.0,
+ trafo_size: Float = 1.0,
+ load_size: Float = 1.0,
+ sgen_size: Float = 1.0,
+ switch_size: Float = 2.0,
+ switch_distance: Float = 1.0,
+ gen_size: Float = 1.0,
) -> dict[str, float]: ...
@overload
-def get_list(individuals: str, number_entries: int, name_ind: str, name_ent: str) -> list[str]: ...
+def get_list(individuals: str, number_entries: Int, name_ind: str, name_ent: str) -> list[str]: ...
@overload
-def get_list(individuals: _T | Iterable[_T], number_entries: int, name_ind: str, name_ent: str) -> list[_T]: ...
+def get_list(individuals: ScalarOrVector[_T], number_entries: Int, name_ind: str, name_ent: str) -> list[_T]: ...
@overload
def get_color_list(
- color: tuple[float, float, float], number_entries: int, name_entries: str = "nodes"
+ color: tuple[Float, Float, Float], number_entries: Int, name_entries: str = "nodes"
) -> list[tuple[float, float, float]]: ...
@overload
def get_color_list(
- color: tuple[float, float, float, float], number_entries: int, name_entries: str = "nodes"
+ color: tuple[Float, Float, Float, Float], number_entries: Int, name_entries: str = "nodes"
) -> list[tuple[float, float, float, float]]: ...
@overload
-def get_color_list(color: str | Iterable[str], number_entries: int, name_entries: str = "nodes") -> list[str]: ...
-def get_angle_list(angle: float | Iterable[float], number_entries: int, name_entries: str = "nodes") -> list[float]: ...
-def get_linewidth_list(linewidth: float | Iterable[float], number_entries: int, name_entries: str = "lines") -> list[float]: ...
-def get_index_array(indices: set[int] | ArrayLike | None, net_table_indices: pd.Index[int]) -> NDArray[np.int_]: ...
+def get_color_list(color: str | Iterable[str], number_entries: Int, name_entries: str = "nodes") -> list[str]: ...
+def get_angle_list(angle: ScalarOrVector[Float], number_entries: Int, name_entries: str = "nodes") -> list[float]: ...
+def get_linewidth_list(linewidth: ScalarOrVector[Float], number_entries: Int, name_entries: str = "lines") -> list[float]: ...
+def get_index_array(indices: AbstractSet[Int] | ArrayLike | None, net_table_indices: pd.Index[int]) -> NDArray[np.int_]: ...
def coords_from_node_geodata(
- element_indices: Iterable[int],
- from_nodes: Iterable[int],
- to_nodes: Iterable[int],
+ element_indices: Collection[Int],
+ from_nodes: Collection[Int],
+ to_nodes: Collection[Int],
node_geodata: pd.DataFrame,
table_name: str,
node_name: str = "Bus",
- ignore_zero_length: bool = True,
-) -> tuple[list[tuple[float, float]], NDArray[np.int_]]: ...
+ ignore_no_geo_diff: Bool = True,
+ node_geodata_to: pd.DataFrame | None = None,
+) -> tuple[list[tuple[float, float]], NDArray[np.int64]]: ...
def set_line_geodata_from_bus_geodata(
- net: pandapowerNet, line_index: Iterable[int] | None = None, overwrite: bool = False
+ net: pandapowerNet, line_index: Iterable[Int] | None = None, overwrite: Bool = False, ignore_no_geo_diff: Bool = True
) -> None: ...
-def position_on_busbar(net: pandapowerNet, bus: int, busbar_coords: NDArray[np.float64]) -> NDArray[np.float64] | None: ...
+def position_on_busbar(net: pandapowerNet, bus: Int, busbar_coords: NDArray[np.float64]) -> NDArray[np.float64] | None: ...
diff --git a/stubs/pandapower-stubs/plotting/powerflow_results.pyi b/stubs/pandapower-stubs/plotting/powerflow_results.pyi
index eba4656..9e1aa7c 100644
--- a/stubs/pandapower-stubs/plotting/powerflow_results.pyi
+++ b/stubs/pandapower-stubs/plotting/powerflow_results.pyi
@@ -1,26 +1,26 @@
-from collections.abc import Mapping, Sequence
+from collections.abc import Collection, Mapping
import pandas as pd
from matplotlib.axes import Axes
from matplotlib.typing import ColorType
+from pandapower._typing import Bool, Float, Int
from pandapower.auxiliary import pandapowerNet
-MATPLOTLIB_INSTALLED: bool
-
def plot_voltage_profile(
net: pandapowerNet,
ax: Axes | None = None,
- plot_transformers: bool = True,
+ plot_transformers: Bool = True,
xlabel: str = "Distance from Slack [km]",
ylabel: str = "Voltage [pu]",
- x0: float = 0,
+ x0: Float = 0,
line_color: ColorType = "grey",
trafo_color: ColorType = "r",
bus_colors: str | Mapping[int, ColorType] = "b",
- line_loading_weight: bool = False,
- bus_size: float = 3,
- lines: Sequence[int] | pd.Index[int] | None = None,
+ line_loading_weight: Bool = False,
+ voltage_column: str | None = None,
+ bus_size: Float = 3,
+ lines: Collection[int] | None = None,
**kwargs,
) -> Axes: ...
def plot_loading(
@@ -30,7 +30,9 @@ def plot_loading(
box_color: ColorType = "b",
median_color: ColorType = "r",
whisker_color: ColorType = "k",
- index_subset: Sequence[int] | pd.Index[int] | None = None,
+ index_subset: Collection[int] | None = None,
**kwargs,
) -> Axes: ...
-def voltage_profile_to_bus_geodata(net: pandapowerNet, voltages: pd.Series[float] | None = None) -> pd.DataFrame: ...
+def voltage_profile_to_bus_geodata(
+ net: pandapowerNet, voltages: pd.Series[float] | None = None, root_bus: Int | None = None
+) -> pd.DataFrame: ...
diff --git a/stubs/pandapower-stubs/plotting/simple_plot.pyi b/stubs/pandapower-stubs/plotting/simple_plot.pyi
index c7bb712..4e83b40 100644
--- a/stubs/pandapower-stubs/plotting/simple_plot.pyi
+++ b/stubs/pandapower-stubs/plotting/simple_plot.pyi
@@ -3,27 +3,26 @@ from typing import Literal
from matplotlib.axes import Axes
from matplotlib.typing import ColorType
+from pandapower._typing import Bool, Float
from pandapower.auxiliary import pandapowerNet
-MATPLOTLIB_INSTALLED: bool
-
def simple_plot(
net: pandapowerNet,
- respect_switches: bool = False,
- line_width: float = 1.0,
- bus_size: float = 1.0,
- ext_grid_size: float = 1.0,
- trafo_size: float = 1.0,
- plot_loads: bool = False,
- plot_gens: bool = False,
- plot_sgens: bool = False,
- load_size: float = 1.0,
- gen_size: float = 1.0,
- sgen_size: float = 1.0,
- switch_size: float = 2.0,
- switch_distance: float = 1.0,
- plot_line_switches: bool = False,
- scale_size: bool = True,
+ respect_switches: Bool = False,
+ line_width: Float = 1.0,
+ bus_size: Float = 1.0,
+ ext_grid_size: Float = 1.0,
+ trafo_size: Float = 1.0,
+ plot_loads: Bool = False,
+ plot_gens: Bool = False,
+ plot_sgens: Bool = False,
+ load_size: Float = 1.0,
+ gen_size: Float = 1.0,
+ sgen_size: Float = 1.0,
+ switch_size: Float = 2.0,
+ switch_distance: Float = 1.0,
+ plot_line_switches: Bool = False,
+ scale_size: Bool = True,
bus_color: ColorType = "b",
line_color: ColorType = "grey",
dcline_color: ColorType = "c",
@@ -31,6 +30,11 @@ def simple_plot(
ext_grid_color: ColorType = "y",
switch_color: ColorType = "k",
library: Literal["igraph", "networkx"] = "igraph",
- show_plot: bool = True,
+ show_plot: Bool = True,
ax: Axes | None = None,
+ bus_dc_size: Float = 1.0,
+ bus_dc_color: ColorType = "m",
+ line_dc_color: ColorType = "c",
+ vsc_size: Float = 4.0,
+ vsc_color: ColorType = "orange",
) -> Axes: ...
diff --git a/stubs/pandapower-stubs/plotting/to_html.pyi b/stubs/pandapower-stubs/plotting/to_html.pyi
index caaecb9..dedc085 100644
--- a/stubs/pandapower-stubs/plotting/to_html.pyi
+++ b/stubs/pandapower-stubs/plotting/to_html.pyi
@@ -16,4 +16,4 @@ class Raw:
class Tag:
name: str
def __init__(self, name: str) -> None: ...
- def __call__(self, *args: object, **kwargs: object) -> Raw: ...
+ def __call__(self, *args: object, **kwargs: str) -> Raw: ...
diff --git a/stubs/pandapower-stubs/powerflow.pyi b/stubs/pandapower-stubs/powerflow.pyi
index b078391..e69de29 100644
--- a/stubs/pandapower-stubs/powerflow.pyi
+++ b/stubs/pandapower-stubs/powerflow.pyi
@@ -1 +0,0 @@
-from pandapower.auxiliary import AlgorithmUnknown as AlgorithmUnknown, LoadflowNotConverged as LoadflowNotConverged
diff --git a/stubs/pandapower-stubs/run.pyi b/stubs/pandapower-stubs/run.pyi
index 8d22d6c..d64bebb 100644
--- a/stubs/pandapower-stubs/run.pyi
+++ b/stubs/pandapower-stubs/run.pyi
@@ -1,8 +1,9 @@
from collections.abc import Iterable
-from typing import Literal, SupportsFloat as Float, SupportsIndex as Int
+from typing import Literal
import pandas as pd
+from pandapower._typing import Float, Int
from pandapower.auxiliary import pandapowerNet
def set_user_pf_options(net: pandapowerNet, overwrite: bool = False, **kwargs) -> None: ...
@@ -23,6 +24,7 @@ def runpp(
distributed_slack: bool = False,
tdpf: bool = False,
tdpf_delay_s: Float | None = None,
+ *,
# the following are defined as **kwargs and documented as follows
lightsim2grid: bool | Literal["auto"] = "auto",
numba: bool = True,
diff --git a/stubs/pandapower-stubs/runpm.pyi b/stubs/pandapower-stubs/runpm.pyi
index 1e804ef..92b8c9e 100644
--- a/stubs/pandapower-stubs/runpm.pyi
+++ b/stubs/pandapower-stubs/runpm.pyi
@@ -251,6 +251,27 @@ def runpm_ploss(
pdm_dev_mode: bool = False,
**kwargs,
) -> None: ...
+def runpm_loading(
+ net: pandapowerNet,
+ pp_to_pm_callback: Callable[..., Incomplete] | None = None,
+ calculate_voltage_angles: bool = True,
+ trafo_model: str = "t",
+ delta: float = 1e-8,
+ trafo3w_losses: str = "hv",
+ check_connectivity: bool = True,
+ pm_model: str = "ACPPowerModel",
+ pm_solver: str = "ipopt",
+ correct_pm_network_data: bool = True,
+ silence: bool = True,
+ pm_time_limits: Mapping[str, float] | None = None,
+ pm_log_level: int = 0,
+ pm_file_path: str | None = None,
+ delete_buffer_file: bool = True,
+ opf_flow_lim: str = "S",
+ pm_tol: float = 1e-8,
+ pdm_dev_mode: bool = False,
+ **kwargs,
+) -> None: ...
def runpm_pf(
net: pandapowerNet,
julia_file: str | None = None,
diff --git a/stubs/pandapower-stubs/shortcircuit/calc_sc.pyi b/stubs/pandapower-stubs/shortcircuit/calc_sc.pyi
index f17f364..6bd4768 100644
--- a/stubs/pandapower-stubs/shortcircuit/calc_sc.pyi
+++ b/stubs/pandapower-stubs/shortcircuit/calc_sc.pyi
@@ -20,4 +20,5 @@ def calc_sc(
check_connectivity: bool = True,
return_all_currents: bool = False,
inverse_y: bool = True,
+ use_pre_fault_voltage: bool = False,
) -> None: ...
diff --git a/stubs/pandapower-stubs/shortcircuit/currents.pyi b/stubs/pandapower-stubs/shortcircuit/currents.pyi
index e69de29..d4b47c3 100644
--- a/stubs/pandapower-stubs/shortcircuit/currents.pyi
+++ b/stubs/pandapower-stubs/shortcircuit/currents.pyi
@@ -0,0 +1 @@
+def nan_minmax(a, rows, argminmax): ...
diff --git a/stubs/pandapower-stubs/shortcircuit/toolbox.pyi b/stubs/pandapower-stubs/shortcircuit/toolbox.pyi
index 6b94f0c..9c4b483 100644
--- a/stubs/pandapower-stubs/shortcircuit/toolbox.pyi
+++ b/stubs/pandapower-stubs/shortcircuit/toolbox.pyi
@@ -1,15 +1,17 @@
from typing import Literal, SupportsIndex
import numpy as np
-from numpy.typing import NDArray
+from pandapower._typing import Array2D
from pandapower.auxiliary import pandapowerNet
+__all__ = ["detect_power_station_unit", "calc_sc_on_line"]
+
def detect_power_station_unit(
net: pandapowerNet, mode: Literal["auto", "trafo"] = "auto", max_gen_voltage_kv: float = 80, max_distance_km: float = 0.01
) -> None: ...
def calc_sc_on_line(
net: pandapowerNet, line_ix: SupportsIndex, distance_to_bus0: float, **kwargs
-) -> tuple[pandapowerNet, int]: ...
+) -> tuple[pandapowerNet, np.int64]: ...
def adjust_V0_for_trafo_tap(ppci, V0, bus_idx) -> None: ...
-def adjacency(ppci) -> NDArray[np.float64]: ...
+def adjacency(ppci) -> Array2D[np.float64]: ...
diff --git a/stubs/pandapower-stubs/sql_io.pyi b/stubs/pandapower-stubs/sql_io.pyi
index 7262812..f539dfa 100644
--- a/stubs/pandapower-stubs/sql_io.pyi
+++ b/stubs/pandapower-stubs/sql_io.pyi
@@ -46,6 +46,7 @@ def from_sql(
grid_id_column: str = "grid_id",
grid_catalogue_name: str = "grid_catalogue",
empty_dict_like_object: Mapping[str, pd.DataFrame] | None = None,
+ grid_tables: pd.DataFrame | None = None,
) -> pandapowerNet: ...
def to_sql(
net: pandapowerNet,
@@ -82,4 +83,5 @@ def from_postgresql(
grid_id_column: str = "grid_id",
grid_catalogue_name: str = "grid_catalogue",
empty_dict_like_object: Mapping[str, pd.DataFrame] | None = None,
+ grid_tables: pd.DataFrame | None = None,
) -> pandapowerNet: ...
diff --git a/stubs/pandapower-stubs/std_types.pyi b/stubs/pandapower-stubs/std_types.pyi
index 833b676..877a519 100644
--- a/stubs/pandapower-stubs/std_types.pyi
+++ b/stubs/pandapower-stubs/std_types.pyi
@@ -1,9 +1,10 @@
from _typeshed import SupportsItems
-from typing import Any, Literal, SupportsFloat as Float, TypedDict, overload, type_check_only
+from typing import Any, Literal, TypedDict, overload, type_check_only
from typing_extensions import TypeAlias
import pandas as pd
+from pandapower._typing import Float
from pandapower.auxiliary import pandapowerNet
_Element: TypeAlias = Literal["line", "line_dc", "trafo", "trafo3w", "fuse"]
diff --git a/stubs/pandapower-stubs/timeseries/run_time_series.pyi b/stubs/pandapower-stubs/timeseries/run_time_series.pyi
index 7664058..3cec3be 100644
--- a/stubs/pandapower-stubs/timeseries/run_time_series.pyi
+++ b/stubs/pandapower-stubs/timeseries/run_time_series.pyi
@@ -1,6 +1,7 @@
from _typeshed import Incomplete, SupportsGetItem, Unused
from collections.abc import Callable, Iterable, Mapping
from typing import Any, Literal, TypeVar, overload
+from typing_extensions import deprecated
from pandapower.auxiliary import pandapowerNet
@@ -32,7 +33,8 @@ def get_recycle_settings(
@overload
def init_time_steps(net: pandapowerNet, time_steps: Iterable[_T], **kwargs: Unused) -> Iterable[_T]: ... # type: ignore[overload-overlap]
@overload
-def init_time_steps(net: pandapowerNet, time_steps: None, start_step: int, stop_step: int, **kwargs: Unused) -> range: ...
+@deprecated("start_step and stop_step are deprcated")
+def init_time_steps(net: pandapowerNet, time_steps: None, *, start_step: int, stop_step: int, **kwargs: Unused) -> range: ...
@overload
def init_time_steps(net: pandapowerNet, time_steps: object, **kwargs: Unused) -> range: ...
def init_time_series(
diff --git a/stubs/pandapower-stubs/timeseries/ts_runpp.pyi b/stubs/pandapower-stubs/timeseries/ts_runpp.pyi
index 4638687..eb69ef3 100644
--- a/stubs/pandapower-stubs/timeseries/ts_runpp.pyi
+++ b/stubs/pandapower-stubs/timeseries/ts_runpp.pyi
@@ -1,18 +1,6 @@
from _typeshed import Incomplete, Unused
from pandapower.auxiliary import pandapowerNet
-from pandapower.pypower.idx_brch import (
- BR_B as BR_B,
- BR_R as BR_R,
- BR_STATUS as BR_STATUS,
- BR_X as BR_X,
- F_BUS as F_BUS,
- RATE_A as RATE_A,
- SHIFT as SHIFT,
- T_BUS as T_BUS,
- TAP as TAP,
-)
-from pandapower.results_bus import write_pq_results_to_element as write_pq_results_to_element
from pandapower.timeseries.output_writer import OutputWriter
class TimeSeriesRunpp:
diff --git a/stubs/pandapower-stubs/toolbox.pyi b/stubs/pandapower-stubs/toolbox.pyi
deleted file mode 100644
index d076b46..0000000
--- a/stubs/pandapower-stubs/toolbox.pyi
+++ /dev/null
@@ -1,290 +0,0 @@
-from _typeshed import Incomplete
-from collections.abc import Iterable
-from logging import Logger
-from typing import Any, Literal, overload
-from typing_extensions import TypeAlias
-
-import numpy as np
-import pandas as pd
-from numpy.typing import NDArray
-from pandas._typing import Axes
-
-from pandapower.auxiliary import pandapowerNet
-
-_PMode: TypeAlias = Literal["load", "gen"]
-_QMode: TypeAlias = Literal["underexcited", "overexcited"]
-
-def element_bus_tuples(
- bus_elements: bool = True, branch_elements: bool = True, res_elements: bool = False
-) -> set[tuple[str, str]]: ...
-def pp_elements(
- bus: bool = True,
- bus_elements: bool = True,
- branch_elements: bool = True,
- other_elements: bool = True,
- cost_tables: bool = False,
- res_elements: bool = False,
-) -> set[str]: ...
-def branch_element_bus_dict(include_switch: bool = False, sort: bool = False) -> dict[str, list[str]]: ...
-def signing_system_value(elm: str) -> Literal[-1, 1]: ...
-@overload
-def pq_from_cosphi(s: float, cosphi: float, qmode: _QMode, pmode: _PMode) -> tuple[float, float]: ... # type: ignore[overload-overlap]
-@overload
-def pq_from_cosphi(
- s: Iterable[float], cosphi: float | Iterable[float], qmode: _QMode | Iterable[_QMode], pmode: _PMode | Iterable[_PMode]
-) -> tuple[NDArray[np.float64], NDArray[np.float64]]: ...
-@overload
-def pq_from_cosphi(
- s: float | Iterable[float], cosphi: Iterable[float], qmode: _QMode | Iterable[_QMode], pmode: _PMode | Iterable[_PMode]
-) -> tuple[NDArray[np.float64], NDArray[np.float64]]: ...
-@overload
-def pq_from_cosphi(
- s: float | Iterable[float], cosphi: float | Iterable[float], qmode: Iterable[_QMode], pmode: _PMode | Iterable[_PMode]
-) -> tuple[NDArray[np.float64], NDArray[np.float64]]: ...
-@overload
-def pq_from_cosphi(
- s: float | Iterable[float], cosphi: float | Iterable[float], qmode: _QMode | Iterable[_QMode], pmode: Iterable[_PMode]
-) -> tuple[NDArray[np.float64], NDArray[np.float64]]: ...
-@overload
-def pq_from_cosphi(
- s: float | Iterable[float],
- cosphi: float | Iterable[float],
- qmode: _QMode | Iterable[_QMode],
- pmode: _PMode | Iterable[_PMode],
-) -> tuple[float, float] | tuple[NDArray[np.float64], NDArray[np.float64]]: ...
-@overload
-def cosphi_from_pq(p: float, q: float) -> tuple[float, float, _PMode, _QMode]: ...
-@overload
-def cosphi_from_pq(
- p: Iterable[float], q: float | Iterable[float]
-) -> tuple[NDArray[np.float64], NDArray[np.float64], NDArray[np.str_], NDArray[np.str_]]: ...
-@overload
-def cosphi_from_pq(
- p: float | Iterable[float], q: Iterable[float]
-) -> tuple[NDArray[np.float64], NDArray[np.float64], NDArray[np.str_], NDArray[np.str_]]: ...
-@overload
-def cosphi_from_pq(
- p: float | Iterable[float], q: float | Iterable[float]
-) -> (
- tuple[float, float, _PMode, _QMode] | tuple[NDArray[np.float64], NDArray[np.float64], NDArray[np.str_], NDArray[np.str_]]
-): ...
-def dataframes_equal(df1: pd.DataFrame, df2: pd.DataFrame, ignore_index_order: bool = True, **kwargs: Incomplete) -> bool: ...
-def compare_arrays(x: NDArray[Any], y: NDArray[Any]) -> NDArray[np.bool]: ...
-def log_to_level(msg: object, passed_logger: Logger, level: str) -> None: ...
-def lf_info(net: pandapowerNet, numv: int = 1, numi: int = 1) -> None: ...
-def opf_task(
- net: pandapowerNet, delta_pq: float = 1e-3, keep: bool = False, log: bool = True
-) -> dict[str, dict[Incomplete, Incomplete]]: ...
-def switch_info(net: pandapowerNet, sidx: int) -> None: ...
-def overloaded_lines(net: pandapowerNet, max_load: int = 100) -> pd.Index[int]: ...
-def violated_buses(net: pandapowerNet, min_vm_pu: float, max_vm_pu: float) -> pd.Index[int]: ...
-def nets_equal(
- net1: pandapowerNet,
- net2: pandapowerNet,
- check_only_results: bool = False,
- check_without_results: bool = False,
- exclude_elms: Iterable[str] | None = None,
- name_selection: Iterable[str] | None = None,
- **kwargs,
-) -> bool: ...
-def clear_result_tables(net: pandapowerNet) -> None: ...
-def add_column_from_node_to_elements(
- net: pandapowerNet,
- column: str,
- replace: bool,
- elements: Iterable[str] | None = None,
- branch_bus: list[str] | None = None,
- verbose: bool = True,
-) -> None: ...
-def add_column_from_element_to_elements(
- net: pandapowerNet, column: str, replace: bool, elements: Iterable[str] | None = None, continue_on_missing_column: bool = True
-) -> None: ...
-def add_zones_to_elements(
- net: pandapowerNet, replace: bool = True, elements: Iterable[str] | None = None, **kwargs: Incomplete
-) -> None: ...
-def reindex_buses(net: pandapowerNet, bus_lookup: dict[int, int]) -> dict[int, int]: ...
-def create_continuous_bus_index(net: pandapowerNet, start: int = 0, store_old_index: bool = False) -> dict[int, int]: ...
-def reindex_elements(
- net: pandapowerNet,
- element: str,
- new_indices: Axes | None = None,
- old_indices: Axes | None = None,
- lookup: dict[int, int] | None = None,
-) -> None: ...
-def create_continuous_elements_index(net: pandapowerNet, start: int = 0, add_df_to_reindex: Iterable[str] = ...) -> None: ...
-def set_scaling_by_type(
- net: pandapowerNet, scalings: dict[str, float], scale_load: bool = True, scale_sgen: bool = True
-) -> None: ...
-def set_data_type_of_columns_to_default(net: pandapowerNet) -> None: ...
-def close_switch_at_line_with_two_open_switches(net: pandapowerNet) -> None: ...
-def fuse_buses(
- net: pandapowerNet, b1: int, b2: int | Iterable[int], drop: bool = True, fuse_bus_measurements: bool = True
-) -> None: ...
-def drop_buses(net: pandapowerNet, buses: Iterable[int], drop_elements: bool = True) -> None: ...
-def drop_switches_at_buses(net: pandapowerNet, buses: Iterable[int]) -> None: ...
-def drop_elements_at_buses(
- net: pandapowerNet,
- buses: Iterable[int],
- bus_elements: bool = True,
- branch_elements: bool = True,
- drop_measurements: bool = True,
-) -> None: ...
-def drop_trafos(net: pandapowerNet, trafos: Iterable[int], table: Literal["trafo", "trafo3w"] = "trafo") -> None: ...
-def drop_lines(net: pandapowerNet, lines: Iterable[int]) -> None: ...
-def drop_measurements_at_elements(
- net: pandapowerNet, element_type: str, idx: int | Iterable[int] | None = None, side: Incomplete | None = None
-) -> None: ...
-def drop_duplicated_measurements(
- net: pandapowerNet, buses: Incomplete | None = None, keep: Literal["first", "last", False] = "first"
-) -> None: ...
-def get_connecting_branches(
- net: pandapowerNet, buses1: Iterable[int], buses2: Iterable[int], branch_elements: Iterable[str] | None = None
-) -> dict[str, pd.Index[int]]: ...
-def get_inner_branches(
- net: pandapowerNet, buses: Iterable[int], branch_elements: Iterable[str] | None = None
-) -> dict[str, pd.Index[int]]: ...
-def drop_inner_branches(net: pandapowerNet, buses: Iterable[int], branch_elements: Iterable[str] | None = None) -> None: ...
-def set_element_status(net: pandapowerNet, buses: Iterable[int], in_service: bool | Iterable[bool]) -> None: ...
-def set_isolated_areas_out_of_service(net: pandapowerNet, respect_switches: bool = True) -> None: ...
-def drop_elements_simple(net: pandapowerNet, element: str, idx: int) -> None: ...
-def drop_out_of_service_elements(net: pandapowerNet) -> None: ...
-def drop_inactive_elements(net: pandapowerNet, respect_switches: bool = True) -> None: ...
-def drop_from_group(net: pandapowerNet, index: int, element_type: str, element_index: int | Iterable[int]) -> None: ...
-def drop_from_groups(
- net: pandapowerNet, element_type: str, element_index: int | Iterable[int], index: int | Iterable[int] | None = None
-) -> None: ...
-def drop_group(net: pandapowerNet, index: int) -> None: ...
-def drop_group_and_elements(net: pandapowerNet, index: int) -> None: ...
-def select_subnet(
- net: pandapowerNet,
- buses: Iterable[int],
- include_switch_buses: bool = False,
- include_results: bool = False,
- keep_everything_else: bool = False,
-) -> pandapowerNet: ...
-def merge_nets(
- net1: pandapowerNet, net2: pandapowerNet, validate: bool = True, merge_results: bool = True, tol: float = 1e-9, **kwargs
-) -> pandapowerNet: ...
-def repl_to_line(
- net: pandapowerNet, idx: int, std_type: str, name: str | None = None, in_service: bool = False, **kwargs: Incomplete
-) -> int: ...
-def merge_parallel_line(net: pandapowerNet, idx: int) -> pandapowerNet: ...
-def merge_same_bus_generation_plants(
- net: pandapowerNet, add_info: bool = True, error: bool = True, gen_elms: list[str] = ["ext_grid", "gen", "sgen"]
-) -> bool: ...
-def create_replacement_switch_for_branch(net: pandapowerNet, element: str, idx: int) -> int: ...
-def replace_zero_branches_with_switches(
- net: pandapowerNet,
- elements: tuple[str, ...] = ("line", "impedance"),
- zero_length: bool = True,
- zero_impedance: bool = True,
- in_service_only: bool = True,
- min_length_km: float = 0,
- min_r_ohm_per_km: float = 0,
- min_x_ohm_per_km: float = 0,
- min_c_nf_per_km: float = 0,
- min_rft_pu: float = 0,
- min_xft_pu: float = 0,
- min_rtf_pu: float = 0,
- min_xtf_pu: float = 0,
- drop_affected: bool = False,
-) -> dict[str, pd.DataFrame]: ...
-def replace_impedance_by_line(
- net: pandapowerNet, index: int | Iterable[int] | None = None, only_valid_replace: bool = True, max_i_ka: float = ...
-) -> list[int]: ...
-def replace_line_by_impedance(
- net: pandapowerNet,
- index: int | Iterable[int] | None = None,
- sn_mva: float | Iterable[float] | None = None,
- only_valid_replace: bool = True,
-) -> list[int]: ...
-def replace_ext_grid_by_gen(
- net: pandapowerNet,
- ext_grids: int | Iterable[int] | None = None,
- gen_indices: Iterable[int] | None = None,
- slack: bool = False,
- cols_to_keep: list[str] | None = None,
- add_cols_to_keep: list[str] | None = None,
-) -> list[int]: ...
-def replace_gen_by_ext_grid(
- net: pandapowerNet,
- gens: int | Iterable[int] | None = None,
- ext_grid_indices: Iterable[int] | None = None,
- cols_to_keep: list[str] | None = None,
- add_cols_to_keep: list[str] | None = None,
-) -> list[int]: ...
-def replace_gen_by_sgen(
- net: pandapowerNet,
- gens: int | Iterable[int] | None = None,
- sgen_indices: Iterable[int] | None = None,
- cols_to_keep: list[str] | None = None,
- add_cols_to_keep: list[str] | None = None,
-) -> list[str]: ...
-def replace_sgen_by_gen(
- net: pandapowerNet,
- sgens: int | Iterable[int] | None = None,
- gen_indices: Iterable[int] | None = None,
- cols_to_keep: list[str] | None = None,
- add_cols_to_keep: list[str] | None = None,
-) -> list[str]: ...
-def replace_pq_elmtype(
- net: pandapowerNet,
- old_elm: Literal["sgen", "load", "storage"],
- new_elm: Literal["sgen", "load", "storage"],
- old_indices: int | Iterable[int] | None = None,
- new_indices: Iterable[int] | None = None,
- cols_to_keep: list[str] | None = None,
- add_cols_to_keep: list[str] | None = None,
-) -> list[str]: ...
-def replace_ward_by_internal_elements(net: pandapowerNet, wards: int | Iterable[int] | None = None) -> None: ...
-def replace_xward_by_internal_elements(net: pandapowerNet, xwards: int | Iterable[int] | None = None) -> None: ...
-@overload
-def get_element_index(net: pandapowerNet, element: str, name: str, exact_match: Literal[True] = True) -> int: ...
-@overload
-def get_element_index(net: pandapowerNet, element: str, name: str, exact_match: Literal[False]) -> pd.Index[int]: ...
-@overload
-def get_element_index(net: pandapowerNet, element: str, name: str, exact_match: bool = True) -> int | pd.Index[int]: ...
-@overload
-def get_element_indices(
- net: pandapowerNet, element: str | Iterable[str], name: str | Iterable[str], exact_match: Literal[True] = True
-) -> list[int]: ...
-@overload
-def get_element_indices(
- net: pandapowerNet, element: str | Iterable[str], name: str | Iterable[str], exact_match: Literal[False]
-) -> list[pd.Index[int]]: ...
-@overload
-def get_element_indices(
- net: pandapowerNet, element: str | Iterable[str], name: str | Iterable[str], exact_match: bool = True
-) -> list[int | pd.Index[int]]: ...
-def next_bus(net: pandapowerNet, bus: int, element_id: int, et: str = "line", **kwargs: Incomplete) -> int: ...
-def get_connected_elements(
- net: pandapowerNet, element: str, buses: int | Iterable[int], respect_switches: bool = True, respect_in_service: bool = False
-) -> set[int]: ...
-def get_connected_buses(
- net: pandapowerNet,
- buses: int | Iterable[int],
- consider: Iterable[str] = ("l", "s", "t", "t3", "i"),
- respect_switches: bool = True,
- respect_in_service: bool = False,
-) -> set[int]: ...
-def get_connected_buses_at_element(net: pandapowerNet, element: int, et: str, respect_in_service: bool = False) -> set[int]: ...
-def get_connected_switches(
- net: pandapowerNet,
- buses: int | Iterable[int],
- consider: Iterable[str] = ("b", "l", "t", "t3"),
- status: Literal["all", "closed", "open"] = "all",
-) -> set[int]: ...
-def get_connected_elements_dict(
- net: pandapowerNet,
- buses: int | Iterable[int],
- respect_switches: bool = True,
- respect_in_service: bool = False,
- include_empty_lists: bool = False,
- element_types: Iterable[str] | None = None,
- **kwargs: bool,
-) -> dict[str, list[int]]: ...
-def get_gc_objects_dict() -> dict[type[Any], int]: ...
-def false_elm_links(net: pandapowerNet, elm: str, col: str, target_elm: str | Iterable[str]) -> pd.Index[int]: ...
-def false_elm_links_loop(net: pandapowerNet, elms: Iterable[str] | None = None) -> dict[str, pd.Index[int]]: ...
-def group_row(net: pandapowerNet, index: int, element_type: str) -> pd.Series[Incomplete]: ...
-def group_element_index(net: pandapowerNet, index: int, element_type: str) -> pd.Index[int]: ...
diff --git a/stubs/pandapower-stubs/toolbox/__init__.pyi b/stubs/pandapower-stubs/toolbox/__init__.pyi
new file mode 100644
index 0000000..1ee22af
--- /dev/null
+++ b/stubs/pandapower-stubs/toolbox/__init__.pyi
@@ -0,0 +1,6 @@
+from pandapower.toolbox.comparison import *
+from pandapower.toolbox.data_modification import *
+from pandapower.toolbox.element_selection import *
+from pandapower.toolbox.grid_modification import *
+from pandapower.toolbox.power_factor import *
+from pandapower.toolbox.result_info import *
diff --git a/stubs/pandapower-stubs/toolbox/comparison.pyi b/stubs/pandapower-stubs/toolbox/comparison.pyi
new file mode 100644
index 0000000..568639e
--- /dev/null
+++ b/stubs/pandapower-stubs/toolbox/comparison.pyi
@@ -0,0 +1,30 @@
+from _typeshed import Incomplete
+from collections.abc import Iterable
+from typing import Any
+
+import numpy as np
+import pandas as pd
+from numpy.typing import NDArray
+
+from pandapower.auxiliary import pandapowerNet
+
+def dataframes_equal(df1: pd.DataFrame, df2: pd.DataFrame, ignore_index_order: bool = True, **kwargs: Incomplete) -> bool: ...
+def compare_arrays(x: NDArray[Any], y: NDArray[Any]) -> NDArray[np.bool]: ...
+def nets_equal(
+ net1: pandapowerNet,
+ net2: pandapowerNet,
+ check_only_results: bool = False,
+ check_without_results: bool = False,
+ exclude_elms: Iterable[str] | None = None,
+ name_selection: Iterable[str] | None = None,
+ **kwargs,
+) -> bool: ...
+def nets_equal_keys(
+ net1: pandapowerNet,
+ net2: pandapowerNet,
+ check_only_results: bool,
+ check_without_results: bool,
+ exclude_elms: Iterable[str] | None,
+ name_selection: Iterable[str] | None,
+ **kwargs,
+) -> tuple[list[str], list[str]] | tuple[set[str], set[str]]: ...
diff --git a/stubs/pandapower-stubs/toolbox/data_modification.pyi b/stubs/pandapower-stubs/toolbox/data_modification.pyi
new file mode 100644
index 0000000..a76a8c8
--- /dev/null
+++ b/stubs/pandapower-stubs/toolbox/data_modification.pyi
@@ -0,0 +1,35 @@
+from _typeshed import Incomplete
+from collections.abc import Iterable
+
+from pandas._typing import Axes
+
+from pandapower.auxiliary import pandapowerNet
+
+def add_column_from_node_to_elements(
+ net: pandapowerNet,
+ column: str,
+ replace: bool,
+ elements: Iterable[str] | None = None,
+ branch_bus: list[str] | None = None,
+ verbose: bool = True,
+) -> None: ...
+def add_column_from_element_to_elements(
+ net: pandapowerNet, column: str, replace: bool, elements: Iterable[str] | None = None, continue_on_missing_column: bool = True
+) -> None: ...
+def add_zones_to_elements(
+ net: pandapowerNet, replace: bool = True, elements: Iterable[str] | None = None, **kwargs: Incomplete
+) -> None: ...
+def reindex_buses(net: pandapowerNet, bus_lookup: dict[int, int]) -> dict[int, int]: ...
+def create_continuous_bus_index(net: pandapowerNet, start: int = 0, store_old_index: bool = False) -> dict[int, int]: ...
+def reindex_elements(
+ net: pandapowerNet,
+ element_type: str,
+ new_indices: Axes | None = None,
+ old_indices: Axes | None = None,
+ lookup: dict[int, int] | None = None,
+) -> None: ...
+def create_continuous_elements_index(net: pandapowerNet, start: int = 0, add_df_to_reindex: Iterable[str] = ...) -> None: ...
+def set_scaling_by_type(
+ net: pandapowerNet, scalings: dict[str, float], scale_load: bool = True, scale_sgen: bool = True
+) -> None: ...
+def set_data_type_of_columns_to_default(net: pandapowerNet) -> None: ...
diff --git a/stubs/pandapower-stubs/toolbox/element_selection.pyi b/stubs/pandapower-stubs/toolbox/element_selection.pyi
new file mode 100644
index 0000000..c7b54c4
--- /dev/null
+++ b/stubs/pandapower-stubs/toolbox/element_selection.pyi
@@ -0,0 +1,82 @@
+from _typeshed import Incomplete
+from collections.abc import Iterable
+from typing import Any, Literal, overload
+
+import pandas as pd
+
+from pandapower.auxiliary import pandapowerNet
+
+@overload
+def get_element_index(net: pandapowerNet, element_type: str, name: str, exact_match: Literal[True] = True) -> int: ...
+@overload
+def get_element_index(net: pandapowerNet, element_type: str, name: str, exact_match: Literal[False]) -> pd.Index[int]: ...
+@overload
+def get_element_index(net: pandapowerNet, element_type: str, name: str, exact_match: bool = True) -> int | pd.Index[int]: ...
+@overload
+def get_element_indices(
+ net: pandapowerNet, element_type: str | Iterable[str], name: str | Iterable[str], exact_match: Literal[True] = True
+) -> list[int]: ...
+@overload
+def get_element_indices(
+ net: pandapowerNet, element_type: str | Iterable[str], name: str | Iterable[str], exact_match: Literal[False]
+) -> list[pd.Index[int]]: ...
+@overload
+def get_element_indices(
+ net: pandapowerNet, element_type: str | Iterable[str], name: str | Iterable[str], exact_match: bool = True
+) -> list[int | pd.Index[int]]: ...
+def next_bus(net: pandapowerNet, bus: int, element_id: int, et: str = "line", **kwargs: Incomplete) -> int: ...
+def get_connected_elements(
+ net: pandapowerNet,
+ element_type: str,
+ buses: int | Iterable[int],
+ respect_switches: bool = True,
+ respect_in_service: bool = False,
+) -> set[int]: ...
+def get_connected_buses(
+ net: pandapowerNet,
+ buses: int | Iterable[int],
+ consider: Iterable[str] = ("l", "s", "t", "t3", "i"),
+ respect_switches: bool = True,
+ respect_in_service: bool = False,
+) -> set[int]: ...
+def get_connected_buses_at_element(
+ net: pandapowerNet, element_index: int, element_type: str, respect_in_service: bool = False
+) -> set[int]: ...
+def get_connected_buses_at_switches(net: pandapowerNet, switches: int | Iterable[int]) -> set[int]: ...
+def get_connected_switches(
+ net: pandapowerNet,
+ buses: int | Iterable[int],
+ consider: Iterable[str] = ("b", "l", "t", "t3", "i"),
+ status: Literal["all", "closed", "open"] = "all",
+ include_element_connections: bool = False,
+) -> set[int]: ...
+def get_connected_elements_dict(
+ net: pandapowerNet,
+ buses: int | Iterable[int],
+ respect_switches: bool = True,
+ respect_in_service: bool = False,
+ include_empty_lists: bool = False,
+ element_types: Iterable[str] | None = None,
+ **kwargs: bool,
+) -> dict[str, list[int]]: ...
+def get_connecting_branches(
+ net: pandapowerNet, buses1: Iterable[int], buses2: Iterable[int], branch_elements: Iterable[str] | None = None
+) -> dict[str, pd.Index[int]]: ...
+def get_gc_objects_dict() -> dict[type[Any], int]: ...
+def false_elm_links(
+ net: pandapowerNet, element_type: str, col: str, target_element_type: str | Iterable[str]
+) -> pd.Index[int]: ...
+def false_elm_links_loop(net: pandapowerNet, element_types: Iterable[str] | None = None) -> dict[str, pd.Index[int]]: ...
+def pp_elements(
+ bus: bool = True,
+ bus_elements: bool = True,
+ branch_elements: bool = True,
+ other_elements: bool = True,
+ cost_tables: bool = False,
+ res_elements: bool = False,
+) -> set[str]: ...
+def branch_element_bus_dict(include_switch: bool = False, sort: None = None) -> dict[str, list[str]]: ...
+def element_bus_tuples(
+ bus_elements: bool = True, branch_elements: bool = True, res_elements: bool = False
+) -> set[tuple[str, str]]: ...
+def count_elements(net, return_empties=False, **kwargs): ...
diff --git a/stubs/pandapower-stubs/toolbox/grid_modification.pyi b/stubs/pandapower-stubs/toolbox/grid_modification.pyi
new file mode 100644
index 0000000..4c26b16
--- /dev/null
+++ b/stubs/pandapower-stubs/toolbox/grid_modification.pyi
@@ -0,0 +1,139 @@
+from _typeshed import Incomplete
+from collections.abc import Collection, Iterable
+from typing import Literal
+
+import numpy as np
+import pandas as pd
+
+from pandapower.auxiliary import pandapowerNet
+
+def select_subnet(
+ net: pandapowerNet,
+ buses: Iterable[int],
+ include_switch_buses: bool = False,
+ include_results: bool = False,
+ keep_everything_else: bool = False,
+) -> pandapowerNet: ...
+def merge_nets(
+ net1: pandapowerNet, net2: pandapowerNet, validate: bool = True, merge_results: bool = True, tol: float = 1e-9, **kwargs
+) -> pandapowerNet: ...
+def set_element_status(net: pandapowerNet, buses: Iterable[int], in_service: bool | Iterable[bool]) -> None: ...
+def set_isolated_areas_out_of_service(net: pandapowerNet, respect_switches: bool = True) -> None: ...
+def repl_to_line(
+ net: pandapowerNet, idx: int, std_type: str, name: str | None = None, in_service: bool = False, **kwargs: Incomplete
+) -> int: ...
+def merge_parallel_line(net: pandapowerNet, idx: int) -> pandapowerNet: ...
+def merge_same_bus_generation_plants(
+ net: pandapowerNet, add_info: bool = True, error: bool = True, gen_elms: Collection[str] = ("ext_grid", "gen", "sgen")
+) -> bool: ...
+def close_switch_at_line_with_two_open_switches(net: pandapowerNet) -> None: ...
+def fuse_buses(
+ net: pandapowerNet, b1: int, b2: int | Iterable[int], drop: bool = True, fuse_bus_measurements: bool = True
+) -> None: ...
+def drop_elements(
+ net: pandapowerNet,
+ element_type: str,
+ element_index: Iterable[int],
+ *,
+ # from **kwargs passed to drop_buses
+ drop_elements: bool = True,
+) -> None: ...
+def drop_elements_simple(net: pandapowerNet, element_type: str, element_index: int) -> None: ...
+def drop_buses(net: pandapowerNet, buses: Iterable[int], drop_elements: bool = True) -> None: ...
+def drop_trafos(net: pandapowerNet, trafos: Iterable[int], table: Literal["trafo", "trafo3w"] = "trafo") -> None: ...
+def drop_lines(net: pandapowerNet, lines: Iterable[int]) -> None: ...
+def drop_elements_at_buses(
+ net: pandapowerNet,
+ buses: Iterable[int],
+ bus_elements: bool = True,
+ branch_elements: bool = True,
+ drop_measurements: bool = True,
+) -> None: ...
+def drop_switches_at_buses(net: pandapowerNet, buses: Iterable[int]) -> None: ...
+def drop_measurements_at_elements(
+ net: pandapowerNet, element_type: str, idx: int | Collection[int] | None = None, side: Incomplete | None = None
+) -> None: ...
+def drop_controllers_at_elements(net: pandapowerNet, element_type: str, idx: int | Collection[int] | None = None) -> None: ...
+def drop_controllers_at_buses(net: pandapowerNet, buses: int | Iterable[int]) -> None: ...
+def drop_duplicated_measurements(
+ net: pandapowerNet, buses: Iterable[int] | None = None, keep: Literal["first", "last", False] = "first"
+) -> None: ...
+def get_inner_branches(
+ net: pandapowerNet, buses: Iterable[int], branch_elements: Iterable[str] | None = None
+) -> dict[str, pd.Index[int]]: ...
+def drop_inner_branches(net: pandapowerNet, buses: Iterable[int], branch_elements: Iterable[str] | None = None) -> None: ...
+def drop_out_of_service_elements(net: pandapowerNet) -> None: ...
+def drop_inactive_elements(net: pandapowerNet, respect_switches: bool = True) -> None: ...
+def create_replacement_switch_for_branch(net: pandapowerNet, element_type: str, element_index: int) -> int: ...
+def replace_zero_branches_with_switches(
+ net: pandapowerNet,
+ elements: tuple[str, ...] = ("line", "impedance"),
+ zero_length: bool = True,
+ zero_impedance: bool = True,
+ in_service_only: bool = True,
+ min_length_km: float = 0,
+ min_r_ohm_per_km: float = 0,
+ min_x_ohm_per_km: float = 0,
+ min_c_nf_per_km: float = 0,
+ min_rft_pu: float = 0,
+ min_xft_pu: float = 0,
+ min_rtf_pu: float = 0,
+ min_xtf_pu: float = 0,
+ drop_affected: bool = False,
+) -> dict[str, pd.DataFrame]: ...
+def replace_impedance_by_line(
+ net: pandapowerNet, index: int | Iterable[int] | None = None, only_valid_replace: bool = True, max_i_ka: float = ...
+) -> list[int]: ...
+def replace_line_by_impedance(
+ net: pandapowerNet,
+ index: int | Iterable[int] | None = None,
+ sn_mva: float | Iterable[float] | None = None,
+ only_valid_replace: bool = True,
+) -> list[int]: ...
+def replace_ext_grid_by_gen(
+ net: pandapowerNet,
+ ext_grids: int | Iterable[int] | None = None,
+ gen_indices: Iterable[int] | None = None,
+ slack: bool = False,
+ cols_to_keep: list[str] | None = None,
+ add_cols_to_keep: list[str] | None = None,
+) -> list[int]: ...
+def replace_gen_by_ext_grid(
+ net: pandapowerNet,
+ gens: int | Iterable[int] | None = None,
+ ext_grid_indices: Iterable[int] | None = None,
+ cols_to_keep: list[str] | None = None,
+ add_cols_to_keep: list[str] | None = None,
+) -> list[int]: ...
+def replace_gen_by_sgen(
+ net: pandapowerNet,
+ gens: int | Iterable[int] | None = None,
+ sgen_indices: Iterable[int] | None = None,
+ cols_to_keep: list[str] | None = None,
+ add_cols_to_keep: list[str] | None = None,
+) -> list[str]: ...
+def replace_sgen_by_gen(
+ net: pandapowerNet,
+ sgens: int | Iterable[int] | None = None,
+ gen_indices: Iterable[int] | None = None,
+ cols_to_keep: list[str] | None = None,
+ add_cols_to_keep: list[str] | None = None,
+) -> list[str]: ...
+def replace_pq_elmtype(
+ net: pandapowerNet,
+ old_element_type: Literal["sgen", "load", "storage"],
+ new_element_type: Literal["sgen", "load", "storage"],
+ old_indices: int | Iterable[int] | None = None,
+ new_indices: Iterable[int] | None = None,
+ cols_to_keep: list[str] | None = None,
+ add_cols_to_keep: list[str] | None = None,
+) -> list[str]: ...
+def replace_ward_by_internal_elements(
+ net: pandapowerNet, wards: int | Iterable[int] | None = None, log_level: str = "warning"
+) -> None: ...
+def replace_xward_by_internal_elements(
+ net: pandapowerNet, xwards: int | Iterable[int] | None = None, set_xward_bus_limits: bool = False
+) -> None: ...
+def replace_xward_by_ward(
+ net: pandapowerNet, index: int | Collection[int] | None = None, drop: bool = True
+) -> list[np.int64]: ...
diff --git a/stubs/pandapower-stubs/toolbox/power_factor.pyi b/stubs/pandapower-stubs/toolbox/power_factor.pyi
new file mode 100644
index 0000000..53e57bd
--- /dev/null
+++ b/stubs/pandapower-stubs/toolbox/power_factor.pyi
@@ -0,0 +1,68 @@
+from collections.abc import Collection, Iterable
+from typing import Literal, overload
+from typing_extensions import TypeAlias
+
+import numpy as np
+from numpy.typing import NDArray
+
+_PMode: TypeAlias = Literal["load", "gen"]
+_QMode: TypeAlias = Literal["underexcited", "overexcited"]
+
+def signing_system_value(element_type: str) -> Literal[-1, 1]: ...
+@overload
+def pq_from_cosphi(s: float, cosphi: float, qmode: _QMode, pmode: _PMode) -> tuple[float, np.float64]: ... # type: ignore[overload-overlap]
+@overload
+def pq_from_cosphi(
+ s: Iterable[float], cosphi: float | Iterable[float], qmode: _QMode | Iterable[_QMode], pmode: _PMode | Iterable[_PMode]
+) -> tuple[NDArray[np.float64], NDArray[np.float64]]: ...
+@overload
+def pq_from_cosphi(
+ s: float | Iterable[float], cosphi: Iterable[float], qmode: _QMode | Iterable[_QMode], pmode: _PMode | Iterable[_PMode]
+) -> tuple[NDArray[np.float64], NDArray[np.float64]]: ...
+@overload
+def pq_from_cosphi(
+ s: float | Iterable[float], cosphi: float | Iterable[float], qmode: Iterable[_QMode], pmode: _PMode | Iterable[_PMode]
+) -> tuple[NDArray[np.float64], NDArray[np.float64]]: ...
+@overload
+def pq_from_cosphi(
+ s: float | Iterable[float], cosphi: float | Iterable[float], qmode: _QMode | Iterable[_QMode], pmode: Iterable[_PMode]
+) -> tuple[NDArray[np.float64], NDArray[np.float64]]: ...
+@overload
+def pq_from_cosphi(
+ s: float | Iterable[float],
+ cosphi: float | Iterable[float],
+ qmode: _QMode | Iterable[_QMode],
+ pmode: _PMode | Iterable[_PMode],
+) -> tuple[float, np.float64] | tuple[NDArray[np.float64], NDArray[np.float64]]: ...
+@overload
+def cosphi_from_pq(p: float, q: float) -> tuple[float, float, _PMode, _QMode]: ...
+@overload
+def cosphi_from_pq(
+ p: Iterable[float], q: float | Iterable[float]
+) -> tuple[NDArray[np.float64], NDArray[np.float64], NDArray[np.str_], NDArray[np.str_]]: ...
+@overload
+def cosphi_from_pq(
+ p: float | Iterable[float], q: Iterable[float]
+) -> tuple[NDArray[np.float64], NDArray[np.float64], NDArray[np.str_], NDArray[np.str_]]: ...
+@overload
+def cosphi_from_pq(
+ p: float | Iterable[float], q: float | Iterable[float]
+) -> (
+ tuple[float, float, _PMode, _QMode] | tuple[NDArray[np.float64], NDArray[np.float64], NDArray[np.str_], NDArray[np.str_]]
+): ...
+@overload
+def cosphi_pos_neg_from_pq(p: float, q: float) -> np.float64: ...
+@overload
+def cosphi_pos_neg_from_pq(p: Iterable[float], q: float | Iterable[float]) -> NDArray[np.float64]: ...
+@overload
+def cosphi_pos_neg_from_pq(p: float | Iterable[float], q: Iterable[float]) -> NDArray[np.float64]: ...
+@overload
+def cosphi_pos_neg_from_pq(p: float | Iterable[float], q: float | Iterable[float]) -> np.float64 | NDArray[np.float64]: ...
+@overload
+def cosphi_to_pos(cosphi: float) -> np.float64: ...
+@overload
+def cosphi_to_pos(cosphi: Collection[float]) -> NDArray[np.float64]: ...
+@overload
+def cosphi_from_pos(cosphi: float) -> np.float64: ...
+@overload
+def cosphi_from_pos(cosphi: Collection[float]) -> NDArray[np.float64]: ...
diff --git a/stubs/pandapower-stubs/toolbox/result_info.pyi b/stubs/pandapower-stubs/toolbox/result_info.pyi
new file mode 100644
index 0000000..1443b11
--- /dev/null
+++ b/stubs/pandapower-stubs/toolbox/result_info.pyi
@@ -0,0 +1,16 @@
+from _typeshed import Incomplete
+from typing import Literal
+
+import pandas as pd
+
+from pandapower.auxiliary import pandapowerNet
+
+def lf_info(net: pandapowerNet, numv: int = 1, numi: int = 2) -> None: ...
+def opf_task(
+ net: pandapowerNet, delta_pq: float = 1e-3, keep: bool = False, log: bool = True
+) -> dict[str, dict[Incomplete, Incomplete]]: ...
+def switch_info(net: pandapowerNet, sidx: int) -> None: ...
+def overloaded_lines(net: pandapowerNet, max_load: int = 100) -> pd.Index[int]: ...
+def violated_buses(net: pandapowerNet, min_vm_pu: float, max_vm_pu: float) -> pd.Index[int]: ...
+def clear_result_tables(net: pandapowerNet) -> None: ...
+def res_power_columns(element_type: str, side: Literal[0, 1, 2, "lv", "mv", "hv", "from", "to"] = 0) -> list[str]: ...
diff --git a/stubtest_allowlist.txt b/stubtest_allowlist.txt
index e69de29..333efde 100644
--- a/stubtest_allowlist.txt
+++ b/stubtest_allowlist.txt
@@ -0,0 +1,30 @@
+# pandapower allowlist
+# ====================
+# TODO modules
+pandapower\.build_bus.*
+pandapower\.contingency.*
+pandapower\.control.*
+pandapower\.converter.*
+pandapower\.estimation.*
+pandapower\.grid_equivalents.*
+pandapower\.io_utils.*
+pandapower\.pf.*
+pandapower\.protection.*
+pandapower\.pypower.*
+pandapower\.results.*
+pandapower\.topology.*
+
+# TODO constants
+pandapower\.[A-Z0-9_]+$
+
+# OK stubs-only
+pandapower\._typing
+
+# OK runtime-only
+pandapower\..*\.logger
+pandapower\.(\w+\.)*(nan|zeros|pp_version)
+pandapower\.(\w+\.)*([a-zA-Z0-9]+_(available|INSTALLED|IMPORTED)|GRAPHS_EQUAL_POSSIBLE|TYPE_CHECKING)
+pandapower\.networks\.pp_dir
+
+# OK requires optional dependencies
+pandapower\.timeseries\.ts_runpp # requires numba
diff --git a/uv.lock b/uv.lock
index 0ba2942..a73ae76 100644
--- a/uv.lock
+++ b/uv.lock
@@ -272,6 +272,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" },
]
+[[package]]
+name = "deepdiff"
+version = "8.5.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "orderly-set" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/0a/0f/9cd2624f7dcd755cbf1fa21fb7234541f19a1be96a56f387ec9053ebe220/deepdiff-8.5.0.tar.gz", hash = "sha256:a4dd3529fa8d4cd5b9cbb6e3ea9c95997eaa919ba37dac3966c1b8f872dc1cd1", size = 538517, upload-time = "2025-05-09T18:44:10.035Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/4a/3b/2e0797200c51531a6d8c97a8e4c9fa6fb56de7e6e2a15c1c067b6b10a0b0/deepdiff-8.5.0-py3-none-any.whl", hash = "sha256:d4599db637f36a1c285f5fdfc2cd8d38bde8d8be8636b65ab5e425b67c54df26", size = 85112, upload-time = "2025-05-09T18:44:07.784Z" },
+]
+
[[package]]
name = "django-types"
version = "0.20.0"
@@ -395,6 +407,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/0b/2f/c536b5b9bb3c071e91d536a4d11f969e911dbb6b227939f4c5b0bca090df/fonttools-4.58.4-py3-none-any.whl", hash = "sha256:a10ce13a13f26cbb9f37512a4346bb437ad7e002ff6fa966a7ce7ff5ac3528bd", size = 1114660, upload-time = "2025-06-13T17:25:13.321Z" },
]
+[[package]]
+name = "geojson"
+version = "3.2.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/85/5a/33e761df75c732fcea94aaf01f993d823138581d10c91133da58bc231e63/geojson-3.2.0.tar.gz", hash = "sha256:b860baba1e8c6f71f8f5f6e3949a694daccf40820fa8f138b3f712bd85804903", size = 24574, upload-time = "2024-12-21T19:35:29.835Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/18/67/a7fa2d650602731c90e0a86279841b4586e14228199e8c09165ba4863e29/geojson-3.2.0-py3-none-any.whl", hash = "sha256:69d14156469e13c79479672eafae7b37e2dcd19bdfd77b53f74fa8fe29910b52", size = 15040, upload-time = "2024-12-21T19:37:02.149Z" },
+]
+
[[package]]
name = "geopandas"
version = "1.0.1"
@@ -675,6 +696,105 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/3a/1d/50ad811d1c5dae091e4cf046beba925bcae0a610e79ae4c538f996f63ed5/kiwisolver-1.4.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:65ea09a5a3faadd59c2ce96dc7bf0f364986a315949dc6374f04396b0d60e09b", size = 71762, upload-time = "2024-12-24T18:30:48.903Z" },
]
+[[package]]
+name = "lxml"
+version = "5.4.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/76/3d/14e82fc7c8fb1b7761f7e748fd47e2ec8276d137b6acfe5a4bb73853e08f/lxml-5.4.0.tar.gz", hash = "sha256:d12832e1dbea4be280b22fd0ea7c9b87f0d8fc51ba06e92dc62d52f804f78ebd", size = 3679479, upload-time = "2025-04-23T01:50:29.322Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f5/1f/a3b6b74a451ceb84b471caa75c934d2430a4d84395d38ef201d539f38cd1/lxml-5.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e7bc6df34d42322c5289e37e9971d6ed114e3776b45fa879f734bded9d1fea9c", size = 8076838, upload-time = "2025-04-23T01:44:29.325Z" },
+ { url = "https://files.pythonhosted.org/packages/36/af/a567a55b3e47135b4d1f05a1118c24529104c003f95851374b3748139dc1/lxml-5.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6854f8bd8a1536f8a1d9a3655e6354faa6406621cf857dc27b681b69860645c7", size = 4381827, upload-time = "2025-04-23T01:44:33.345Z" },
+ { url = "https://files.pythonhosted.org/packages/50/ba/4ee47d24c675932b3eb5b6de77d0f623c2db6dc466e7a1f199792c5e3e3a/lxml-5.4.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:696ea9e87442467819ac22394ca36cb3d01848dad1be6fac3fb612d3bd5a12cf", size = 5204098, upload-time = "2025-04-23T01:44:35.809Z" },
+ { url = "https://files.pythonhosted.org/packages/f2/0f/b4db6dfebfefe3abafe360f42a3d471881687fd449a0b86b70f1f2683438/lxml-5.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ef80aeac414f33c24b3815ecd560cee272786c3adfa5f31316d8b349bfade28", size = 4930261, upload-time = "2025-04-23T01:44:38.271Z" },
+ { url = "https://files.pythonhosted.org/packages/0b/1f/0bb1bae1ce056910f8db81c6aba80fec0e46c98d77c0f59298c70cd362a3/lxml-5.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b9c2754cef6963f3408ab381ea55f47dabc6f78f4b8ebb0f0b25cf1ac1f7609", size = 5529621, upload-time = "2025-04-23T01:44:40.921Z" },
+ { url = "https://files.pythonhosted.org/packages/21/f5/e7b66a533fc4a1e7fa63dd22a1ab2ec4d10319b909211181e1ab3e539295/lxml-5.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7a62cc23d754bb449d63ff35334acc9f5c02e6dae830d78dab4dd12b78a524f4", size = 4983231, upload-time = "2025-04-23T01:44:43.871Z" },
+ { url = "https://files.pythonhosted.org/packages/11/39/a38244b669c2d95a6a101a84d3c85ba921fea827e9e5483e93168bf1ccb2/lxml-5.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f82125bc7203c5ae8633a7d5d20bcfdff0ba33e436e4ab0abc026a53a8960b7", size = 5084279, upload-time = "2025-04-23T01:44:46.632Z" },
+ { url = "https://files.pythonhosted.org/packages/db/64/48cac242347a09a07740d6cee7b7fd4663d5c1abd65f2e3c60420e231b27/lxml-5.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:b67319b4aef1a6c56576ff544b67a2a6fbd7eaee485b241cabf53115e8908b8f", size = 4927405, upload-time = "2025-04-23T01:44:49.843Z" },
+ { url = "https://files.pythonhosted.org/packages/98/89/97442835fbb01d80b72374f9594fe44f01817d203fa056e9906128a5d896/lxml-5.4.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:a8ef956fce64c8551221f395ba21d0724fed6b9b6242ca4f2f7beb4ce2f41997", size = 5550169, upload-time = "2025-04-23T01:44:52.791Z" },
+ { url = "https://files.pythonhosted.org/packages/f1/97/164ca398ee654eb21f29c6b582685c6c6b9d62d5213abc9b8380278e9c0a/lxml-5.4.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:0a01ce7d8479dce84fc03324e3b0c9c90b1ece9a9bb6a1b6c9025e7e4520e78c", size = 5062691, upload-time = "2025-04-23T01:44:56.108Z" },
+ { url = "https://files.pythonhosted.org/packages/d0/bc/712b96823d7feb53482d2e4f59c090fb18ec7b0d0b476f353b3085893cda/lxml-5.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:91505d3ddebf268bb1588eb0f63821f738d20e1e7f05d3c647a5ca900288760b", size = 5133503, upload-time = "2025-04-23T01:44:59.222Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/55/a62a39e8f9da2a8b6002603475e3c57c870cd9c95fd4b94d4d9ac9036055/lxml-5.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a3bcdde35d82ff385f4ede021df801b5c4a5bcdfb61ea87caabcebfc4945dc1b", size = 4999346, upload-time = "2025-04-23T01:45:02.088Z" },
+ { url = "https://files.pythonhosted.org/packages/ea/47/a393728ae001b92bb1a9e095e570bf71ec7f7fbae7688a4792222e56e5b9/lxml-5.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:aea7c06667b987787c7d1f5e1dfcd70419b711cdb47d6b4bb4ad4b76777a0563", size = 5627139, upload-time = "2025-04-23T01:45:04.582Z" },
+ { url = "https://files.pythonhosted.org/packages/5e/5f/9dcaaad037c3e642a7ea64b479aa082968de46dd67a8293c541742b6c9db/lxml-5.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:a7fb111eef4d05909b82152721a59c1b14d0f365e2be4c742a473c5d7372f4f5", size = 5465609, upload-time = "2025-04-23T01:45:07.649Z" },
+ { url = "https://files.pythonhosted.org/packages/a7/0a/ebcae89edf27e61c45023005171d0ba95cb414ee41c045ae4caf1b8487fd/lxml-5.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:43d549b876ce64aa18b2328faff70f5877f8c6dede415f80a2f799d31644d776", size = 5192285, upload-time = "2025-04-23T01:45:10.456Z" },
+ { url = "https://files.pythonhosted.org/packages/42/ad/cc8140ca99add7d85c92db8b2354638ed6d5cc0e917b21d36039cb15a238/lxml-5.4.0-cp310-cp310-win32.whl", hash = "sha256:75133890e40d229d6c5837b0312abbe5bac1c342452cf0e12523477cd3aa21e7", size = 3477507, upload-time = "2025-04-23T01:45:12.474Z" },
+ { url = "https://files.pythonhosted.org/packages/e9/39/597ce090da1097d2aabd2f9ef42187a6c9c8546d67c419ce61b88b336c85/lxml-5.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:de5b4e1088523e2b6f730d0509a9a813355b7f5659d70eb4f319c76beea2e250", size = 3805104, upload-time = "2025-04-23T01:45:15.104Z" },
+ { url = "https://files.pythonhosted.org/packages/81/2d/67693cc8a605a12e5975380d7ff83020dcc759351b5a066e1cced04f797b/lxml-5.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:98a3912194c079ef37e716ed228ae0dcb960992100461b704aea4e93af6b0bb9", size = 8083240, upload-time = "2025-04-23T01:45:18.566Z" },
+ { url = "https://files.pythonhosted.org/packages/73/53/b5a05ab300a808b72e848efd152fe9c022c0181b0a70b8bca1199f1bed26/lxml-5.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0ea0252b51d296a75f6118ed0d8696888e7403408ad42345d7dfd0d1e93309a7", size = 4387685, upload-time = "2025-04-23T01:45:21.387Z" },
+ { url = "https://files.pythonhosted.org/packages/d8/cb/1a3879c5f512bdcd32995c301886fe082b2edd83c87d41b6d42d89b4ea4d/lxml-5.4.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b92b69441d1bd39f4940f9eadfa417a25862242ca2c396b406f9272ef09cdcaa", size = 4991164, upload-time = "2025-04-23T01:45:23.849Z" },
+ { url = "https://files.pythonhosted.org/packages/f9/94/bbc66e42559f9d04857071e3b3d0c9abd88579367fd2588a4042f641f57e/lxml-5.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20e16c08254b9b6466526bc1828d9370ee6c0d60a4b64836bc3ac2917d1e16df", size = 4746206, upload-time = "2025-04-23T01:45:26.361Z" },
+ { url = "https://files.pythonhosted.org/packages/66/95/34b0679bee435da2d7cae895731700e519a8dfcab499c21662ebe671603e/lxml-5.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7605c1c32c3d6e8c990dd28a0970a3cbbf1429d5b92279e37fda05fb0c92190e", size = 5342144, upload-time = "2025-04-23T01:45:28.939Z" },
+ { url = "https://files.pythonhosted.org/packages/e0/5d/abfcc6ab2fa0be72b2ba938abdae1f7cad4c632f8d552683ea295d55adfb/lxml-5.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ecf4c4b83f1ab3d5a7ace10bafcb6f11df6156857a3c418244cef41ca9fa3e44", size = 4825124, upload-time = "2025-04-23T01:45:31.361Z" },
+ { url = "https://files.pythonhosted.org/packages/5a/78/6bd33186c8863b36e084f294fc0a5e5eefe77af95f0663ef33809cc1c8aa/lxml-5.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cef4feae82709eed352cd7e97ae062ef6ae9c7b5dbe3663f104cd2c0e8d94ba", size = 4876520, upload-time = "2025-04-23T01:45:34.191Z" },
+ { url = "https://files.pythonhosted.org/packages/3b/74/4d7ad4839bd0fc64e3d12da74fc9a193febb0fae0ba6ebd5149d4c23176a/lxml-5.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:df53330a3bff250f10472ce96a9af28628ff1f4efc51ccba351a8820bca2a8ba", size = 4765016, upload-time = "2025-04-23T01:45:36.7Z" },
+ { url = "https://files.pythonhosted.org/packages/24/0d/0a98ed1f2471911dadfc541003ac6dd6879fc87b15e1143743ca20f3e973/lxml-5.4.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:aefe1a7cb852fa61150fcb21a8c8fcea7b58c4cb11fbe59c97a0a4b31cae3c8c", size = 5362884, upload-time = "2025-04-23T01:45:39.291Z" },
+ { url = "https://files.pythonhosted.org/packages/48/de/d4f7e4c39740a6610f0f6959052b547478107967362e8424e1163ec37ae8/lxml-5.4.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ef5a7178fcc73b7d8c07229e89f8eb45b2908a9238eb90dcfc46571ccf0383b8", size = 4902690, upload-time = "2025-04-23T01:45:42.386Z" },
+ { url = "https://files.pythonhosted.org/packages/07/8c/61763abd242af84f355ca4ef1ee096d3c1b7514819564cce70fd18c22e9a/lxml-5.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d2ed1b3cb9ff1c10e6e8b00941bb2e5bb568b307bfc6b17dffbbe8be5eecba86", size = 4944418, upload-time = "2025-04-23T01:45:46.051Z" },
+ { url = "https://files.pythonhosted.org/packages/f9/c5/6d7e3b63e7e282619193961a570c0a4c8a57fe820f07ca3fe2f6bd86608a/lxml-5.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:72ac9762a9f8ce74c9eed4a4e74306f2f18613a6b71fa065495a67ac227b3056", size = 4827092, upload-time = "2025-04-23T01:45:48.943Z" },
+ { url = "https://files.pythonhosted.org/packages/71/4a/e60a306df54680b103348545706a98a7514a42c8b4fbfdcaa608567bb065/lxml-5.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f5cb182f6396706dc6cc1896dd02b1c889d644c081b0cdec38747573db88a7d7", size = 5418231, upload-time = "2025-04-23T01:45:51.481Z" },
+ { url = "https://files.pythonhosted.org/packages/27/f2/9754aacd6016c930875854f08ac4b192a47fe19565f776a64004aa167521/lxml-5.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:3a3178b4873df8ef9457a4875703488eb1622632a9cee6d76464b60e90adbfcd", size = 5261798, upload-time = "2025-04-23T01:45:54.146Z" },
+ { url = "https://files.pythonhosted.org/packages/38/a2/0c49ec6941428b1bd4f280650d7b11a0f91ace9db7de32eb7aa23bcb39ff/lxml-5.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e094ec83694b59d263802ed03a8384594fcce477ce484b0cbcd0008a211ca751", size = 4988195, upload-time = "2025-04-23T01:45:56.685Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/75/87a3963a08eafc46a86c1131c6e28a4de103ba30b5ae903114177352a3d7/lxml-5.4.0-cp311-cp311-win32.whl", hash = "sha256:4329422de653cdb2b72afa39b0aa04252fca9071550044904b2e7036d9d97fe4", size = 3474243, upload-time = "2025-04-23T01:45:58.863Z" },
+ { url = "https://files.pythonhosted.org/packages/fa/f9/1f0964c4f6c2be861c50db380c554fb8befbea98c6404744ce243a3c87ef/lxml-5.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:fd3be6481ef54b8cfd0e1e953323b7aa9d9789b94842d0e5b142ef4bb7999539", size = 3815197, upload-time = "2025-04-23T01:46:01.096Z" },
+ { url = "https://files.pythonhosted.org/packages/f8/4c/d101ace719ca6a4ec043eb516fcfcb1b396a9fccc4fcd9ef593df34ba0d5/lxml-5.4.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b5aff6f3e818e6bdbbb38e5967520f174b18f539c2b9de867b1e7fde6f8d95a4", size = 8127392, upload-time = "2025-04-23T01:46:04.09Z" },
+ { url = "https://files.pythonhosted.org/packages/11/84/beddae0cec4dd9ddf46abf156f0af451c13019a0fa25d7445b655ba5ccb7/lxml-5.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942a5d73f739ad7c452bf739a62a0f83e2578afd6b8e5406308731f4ce78b16d", size = 4415103, upload-time = "2025-04-23T01:46:07.227Z" },
+ { url = "https://files.pythonhosted.org/packages/d0/25/d0d93a4e763f0462cccd2b8a665bf1e4343dd788c76dcfefa289d46a38a9/lxml-5.4.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:460508a4b07364d6abf53acaa0a90b6d370fafde5693ef37602566613a9b0779", size = 5024224, upload-time = "2025-04-23T01:46:10.237Z" },
+ { url = "https://files.pythonhosted.org/packages/31/ce/1df18fb8f7946e7f3388af378b1f34fcf253b94b9feedb2cec5969da8012/lxml-5.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:529024ab3a505fed78fe3cc5ddc079464e709f6c892733e3f5842007cec8ac6e", size = 4769913, upload-time = "2025-04-23T01:46:12.757Z" },
+ { url = "https://files.pythonhosted.org/packages/4e/62/f4a6c60ae7c40d43657f552f3045df05118636be1165b906d3423790447f/lxml-5.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ca56ebc2c474e8f3d5761debfd9283b8b18c76c4fc0967b74aeafba1f5647f9", size = 5290441, upload-time = "2025-04-23T01:46:16.037Z" },
+ { url = "https://files.pythonhosted.org/packages/9e/aa/04f00009e1e3a77838c7fc948f161b5d2d5de1136b2b81c712a263829ea4/lxml-5.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a81e1196f0a5b4167a8dafe3a66aa67c4addac1b22dc47947abd5d5c7a3f24b5", size = 4820165, upload-time = "2025-04-23T01:46:19.137Z" },
+ { url = "https://files.pythonhosted.org/packages/c9/1f/e0b2f61fa2404bf0f1fdf1898377e5bd1b74cc9b2cf2c6ba8509b8f27990/lxml-5.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00b8686694423ddae324cf614e1b9659c2edb754de617703c3d29ff568448df5", size = 4932580, upload-time = "2025-04-23T01:46:21.963Z" },
+ { url = "https://files.pythonhosted.org/packages/24/a2/8263f351b4ffe0ed3e32ea7b7830f845c795349034f912f490180d88a877/lxml-5.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:c5681160758d3f6ac5b4fea370495c48aac0989d6a0f01bb9a72ad8ef5ab75c4", size = 4759493, upload-time = "2025-04-23T01:46:24.316Z" },
+ { url = "https://files.pythonhosted.org/packages/05/00/41db052f279995c0e35c79d0f0fc9f8122d5b5e9630139c592a0b58c71b4/lxml-5.4.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:2dc191e60425ad70e75a68c9fd90ab284df64d9cd410ba8d2b641c0c45bc006e", size = 5324679, upload-time = "2025-04-23T01:46:27.097Z" },
+ { url = "https://files.pythonhosted.org/packages/1d/be/ee99e6314cdef4587617d3b3b745f9356d9b7dd12a9663c5f3b5734b64ba/lxml-5.4.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:67f779374c6b9753ae0a0195a892a1c234ce8416e4448fe1e9f34746482070a7", size = 4890691, upload-time = "2025-04-23T01:46:30.009Z" },
+ { url = "https://files.pythonhosted.org/packages/ad/36/239820114bf1d71f38f12208b9c58dec033cbcf80101cde006b9bde5cffd/lxml-5.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:79d5bfa9c1b455336f52343130b2067164040604e41f6dc4d8313867ed540079", size = 4955075, upload-time = "2025-04-23T01:46:32.33Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/e1/1b795cc0b174efc9e13dbd078a9ff79a58728a033142bc6d70a1ee8fc34d/lxml-5.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3d3c30ba1c9b48c68489dc1829a6eede9873f52edca1dda900066542528d6b20", size = 4838680, upload-time = "2025-04-23T01:46:34.852Z" },
+ { url = "https://files.pythonhosted.org/packages/72/48/3c198455ca108cec5ae3662ae8acd7fd99476812fd712bb17f1b39a0b589/lxml-5.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1af80c6316ae68aded77e91cd9d80648f7dd40406cef73df841aa3c36f6907c8", size = 5391253, upload-time = "2025-04-23T01:46:37.608Z" },
+ { url = "https://files.pythonhosted.org/packages/d6/10/5bf51858971c51ec96cfc13e800a9951f3fd501686f4c18d7d84fe2d6352/lxml-5.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4d885698f5019abe0de3d352caf9466d5de2baded00a06ef3f1216c1a58ae78f", size = 5261651, upload-time = "2025-04-23T01:46:40.183Z" },
+ { url = "https://files.pythonhosted.org/packages/2b/11/06710dd809205377da380546f91d2ac94bad9ff735a72b64ec029f706c85/lxml-5.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea53d51859b6c64e7c51d522c03cc2c48b9b5d6172126854cc7f01aa11f52bc", size = 5024315, upload-time = "2025-04-23T01:46:43.333Z" },
+ { url = "https://files.pythonhosted.org/packages/f5/b0/15b6217834b5e3a59ebf7f53125e08e318030e8cc0d7310355e6edac98ef/lxml-5.4.0-cp312-cp312-win32.whl", hash = "sha256:d90b729fd2732df28130c064aac9bb8aff14ba20baa4aee7bd0795ff1187545f", size = 3486149, upload-time = "2025-04-23T01:46:45.684Z" },
+ { url = "https://files.pythonhosted.org/packages/91/1e/05ddcb57ad2f3069101611bd5f5084157d90861a2ef460bf42f45cced944/lxml-5.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1dc4ca99e89c335a7ed47d38964abcb36c5910790f9bd106f2a8fa2ee0b909d2", size = 3817095, upload-time = "2025-04-23T01:46:48.521Z" },
+ { url = "https://files.pythonhosted.org/packages/87/cb/2ba1e9dd953415f58548506fa5549a7f373ae55e80c61c9041b7fd09a38a/lxml-5.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:773e27b62920199c6197130632c18fb7ead3257fce1ffb7d286912e56ddb79e0", size = 8110086, upload-time = "2025-04-23T01:46:52.218Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/3e/6602a4dca3ae344e8609914d6ab22e52ce42e3e1638c10967568c5c1450d/lxml-5.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ce9c671845de9699904b1e9df95acfe8dfc183f2310f163cdaa91a3535af95de", size = 4404613, upload-time = "2025-04-23T01:46:55.281Z" },
+ { url = "https://files.pythonhosted.org/packages/4c/72/bf00988477d3bb452bef9436e45aeea82bb40cdfb4684b83c967c53909c7/lxml-5.4.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9454b8d8200ec99a224df8854786262b1bd6461f4280064c807303c642c05e76", size = 5012008, upload-time = "2025-04-23T01:46:57.817Z" },
+ { url = "https://files.pythonhosted.org/packages/92/1f/93e42d93e9e7a44b2d3354c462cd784dbaaf350f7976b5d7c3f85d68d1b1/lxml-5.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cccd007d5c95279e529c146d095f1d39ac05139de26c098166c4beb9374b0f4d", size = 4760915, upload-time = "2025-04-23T01:47:00.745Z" },
+ { url = "https://files.pythonhosted.org/packages/45/0b/363009390d0b461cf9976a499e83b68f792e4c32ecef092f3f9ef9c4ba54/lxml-5.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0fce1294a0497edb034cb416ad3e77ecc89b313cff7adbee5334e4dc0d11f422", size = 5283890, upload-time = "2025-04-23T01:47:04.702Z" },
+ { url = "https://files.pythonhosted.org/packages/19/dc/6056c332f9378ab476c88e301e6549a0454dbee8f0ae16847414f0eccb74/lxml-5.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:24974f774f3a78ac12b95e3a20ef0931795ff04dbb16db81a90c37f589819551", size = 4812644, upload-time = "2025-04-23T01:47:07.833Z" },
+ { url = "https://files.pythonhosted.org/packages/ee/8a/f8c66bbb23ecb9048a46a5ef9b495fd23f7543df642dabeebcb2eeb66592/lxml-5.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:497cab4d8254c2a90bf988f162ace2ddbfdd806fce3bda3f581b9d24c852e03c", size = 4921817, upload-time = "2025-04-23T01:47:10.317Z" },
+ { url = "https://files.pythonhosted.org/packages/04/57/2e537083c3f381f83d05d9b176f0d838a9e8961f7ed8ddce3f0217179ce3/lxml-5.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:e794f698ae4c5084414efea0f5cc9f4ac562ec02d66e1484ff822ef97c2cadff", size = 4753916, upload-time = "2025-04-23T01:47:12.823Z" },
+ { url = "https://files.pythonhosted.org/packages/d8/80/ea8c4072109a350848f1157ce83ccd9439601274035cd045ac31f47f3417/lxml-5.4.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:2c62891b1ea3094bb12097822b3d44b93fc6c325f2043c4d2736a8ff09e65f60", size = 5289274, upload-time = "2025-04-23T01:47:15.916Z" },
+ { url = "https://files.pythonhosted.org/packages/b3/47/c4be287c48cdc304483457878a3f22999098b9a95f455e3c4bda7ec7fc72/lxml-5.4.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:142accb3e4d1edae4b392bd165a9abdee8a3c432a2cca193df995bc3886249c8", size = 4874757, upload-time = "2025-04-23T01:47:19.793Z" },
+ { url = "https://files.pythonhosted.org/packages/2f/04/6ef935dc74e729932e39478e44d8cfe6a83550552eaa072b7c05f6f22488/lxml-5.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1a42b3a19346e5601d1b8296ff6ef3d76038058f311902edd574461e9c036982", size = 4947028, upload-time = "2025-04-23T01:47:22.401Z" },
+ { url = "https://files.pythonhosted.org/packages/cb/f9/c33fc8daa373ef8a7daddb53175289024512b6619bc9de36d77dca3df44b/lxml-5.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4291d3c409a17febf817259cb37bc62cb7eb398bcc95c1356947e2871911ae61", size = 4834487, upload-time = "2025-04-23T01:47:25.513Z" },
+ { url = "https://files.pythonhosted.org/packages/8d/30/fc92bb595bcb878311e01b418b57d13900f84c2b94f6eca9e5073ea756e6/lxml-5.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4f5322cf38fe0e21c2d73901abf68e6329dc02a4994e483adbcf92b568a09a54", size = 5381688, upload-time = "2025-04-23T01:47:28.454Z" },
+ { url = "https://files.pythonhosted.org/packages/43/d1/3ba7bd978ce28bba8e3da2c2e9d5ae3f8f521ad3f0ca6ea4788d086ba00d/lxml-5.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:0be91891bdb06ebe65122aa6bf3fc94489960cf7e03033c6f83a90863b23c58b", size = 5242043, upload-time = "2025-04-23T01:47:31.208Z" },
+ { url = "https://files.pythonhosted.org/packages/ee/cd/95fa2201041a610c4d08ddaf31d43b98ecc4b1d74b1e7245b1abdab443cb/lxml-5.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:15a665ad90054a3d4f397bc40f73948d48e36e4c09f9bcffc7d90c87410e478a", size = 5021569, upload-time = "2025-04-23T01:47:33.805Z" },
+ { url = "https://files.pythonhosted.org/packages/2d/a6/31da006fead660b9512d08d23d31e93ad3477dd47cc42e3285f143443176/lxml-5.4.0-cp313-cp313-win32.whl", hash = "sha256:d5663bc1b471c79f5c833cffbc9b87d7bf13f87e055a5c86c363ccd2348d7e82", size = 3485270, upload-time = "2025-04-23T01:47:36.133Z" },
+ { url = "https://files.pythonhosted.org/packages/fc/14/c115516c62a7d2499781d2d3d7215218c0731b2c940753bf9f9b7b73924d/lxml-5.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:bcb7a1096b4b6b24ce1ac24d4942ad98f983cd3810f9711bcd0293f43a9d8b9f", size = 3814606, upload-time = "2025-04-23T01:47:39.028Z" },
+ { url = "https://files.pythonhosted.org/packages/1e/04/acd238222ea25683e43ac7113facc380b3aaf77c53e7d88c4f544cef02ca/lxml-5.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bda3ea44c39eb74e2488297bb39d47186ed01342f0022c8ff407c250ac3f498e", size = 8082189, upload-time = "2025-04-23T01:48:51.829Z" },
+ { url = "https://files.pythonhosted.org/packages/d6/4e/cc7fe9ccb9999cc648492ce970b63c657606aefc7d0fba46b17aa2ba93fb/lxml-5.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9ceaf423b50ecfc23ca00b7f50b64baba85fb3fb91c53e2c9d00bc86150c7e40", size = 4384950, upload-time = "2025-04-23T01:48:54.464Z" },
+ { url = "https://files.pythonhosted.org/packages/56/bf/acd219c489346d0243a30769b9d446b71e5608581db49a18c8d91a669e19/lxml-5.4.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:664cdc733bc87449fe781dbb1f309090966c11cc0c0cd7b84af956a02a8a4729", size = 5209823, upload-time = "2025-04-23T01:48:57.192Z" },
+ { url = "https://files.pythonhosted.org/packages/57/51/ec31cd33175c09aa7b93d101f56eed43d89e15504455d884d021df7166a7/lxml-5.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67ed8a40665b84d161bae3181aa2763beea3747f748bca5874b4af4d75998f87", size = 4931808, upload-time = "2025-04-23T01:48:59.811Z" },
+ { url = "https://files.pythonhosted.org/packages/e5/68/865d229f191514da1777125598d028dc88a5ea300d68c30e1f120bfd01bd/lxml-5.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b4a3bd174cc9cdaa1afbc4620c049038b441d6ba07629d89a83b408e54c35cd", size = 5086067, upload-time = "2025-04-23T01:49:02.887Z" },
+ { url = "https://files.pythonhosted.org/packages/82/01/4c958c5848b4e263cd9e83dff6b49f975a5a0854feb1070dfe0bdcdf70a0/lxml-5.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:b0989737a3ba6cf2a16efb857fb0dfa20bc5c542737fddb6d893fde48be45433", size = 4929026, upload-time = "2025-04-23T01:49:05.624Z" },
+ { url = "https://files.pythonhosted.org/packages/55/31/5327d8af74d7f35e645b40ae6658761e1fee59ebecaa6a8d295e495c2ca9/lxml-5.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:dc0af80267edc68adf85f2a5d9be1cdf062f973db6790c1d065e45025fa26140", size = 5134245, upload-time = "2025-04-23T01:49:08.918Z" },
+ { url = "https://files.pythonhosted.org/packages/6f/c9/204eba2400beb0016dacc2c5335ecb1e37f397796683ffdb7f471e86bddb/lxml-5.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:639978bccb04c42677db43c79bdaa23785dc7f9b83bfd87570da8207872f1ce5", size = 5001020, upload-time = "2025-04-23T01:49:11.643Z" },
+ { url = "https://files.pythonhosted.org/packages/07/53/979165f50a853dab1cf3b9e53105032d55f85c5993f94afc4d9a61a22877/lxml-5.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a99d86351f9c15e4a901fc56404b485b1462039db59288b203f8c629260a142", size = 5192346, upload-time = "2025-04-23T01:49:14.868Z" },
+ { url = "https://files.pythonhosted.org/packages/17/2b/f37b5ae28949143f863ba3066b30eede6107fc9a503bd0d01677d4e2a1e0/lxml-5.4.0-cp39-cp39-win32.whl", hash = "sha256:3e6d5557989cdc3ebb5302bbdc42b439733a841891762ded9514e74f60319ad6", size = 3478275, upload-time = "2025-04-23T01:49:17.249Z" },
+ { url = "https://files.pythonhosted.org/packages/9a/d5/b795a183680126147665a8eeda8e802c180f2f7661aa9a550bba5bcdae63/lxml-5.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:a8c9b7f16b63e65bbba889acb436a1034a82d34fa09752d754f88d708eca80e1", size = 3806275, upload-time = "2025-04-23T01:49:19.635Z" },
+ { url = "https://files.pythonhosted.org/packages/c6/b0/e4d1cbb8c078bc4ae44de9c6a79fec4e2b4151b1b4d50af71d799e76b177/lxml-5.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1b717b00a71b901b4667226bba282dd462c42ccf618ade12f9ba3674e1fabc55", size = 3892319, upload-time = "2025-04-23T01:49:22.069Z" },
+ { url = "https://files.pythonhosted.org/packages/5b/aa/e2bdefba40d815059bcb60b371a36fbfcce970a935370e1b367ba1cc8f74/lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27a9ded0f0b52098ff89dd4c418325b987feed2ea5cc86e8860b0f844285d740", size = 4211614, upload-time = "2025-04-23T01:49:24.599Z" },
+ { url = "https://files.pythonhosted.org/packages/3c/5f/91ff89d1e092e7cfdd8453a939436ac116db0a665e7f4be0cd8e65c7dc5a/lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b7ce10634113651d6f383aa712a194179dcd496bd8c41e191cec2099fa09de5", size = 4306273, upload-time = "2025-04-23T01:49:27.355Z" },
+ { url = "https://files.pythonhosted.org/packages/be/7c/8c3f15df2ca534589717bfd19d1e3482167801caedfa4d90a575facf68a6/lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:53370c26500d22b45182f98847243efb518d268374a9570409d2e2276232fd37", size = 4208552, upload-time = "2025-04-23T01:49:29.949Z" },
+ { url = "https://files.pythonhosted.org/packages/7d/d8/9567afb1665f64d73fc54eb904e418d1138d7f011ed00647121b4dd60b38/lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c6364038c519dffdbe07e3cf42e6a7f8b90c275d4d1617a69bb59734c1a2d571", size = 4331091, upload-time = "2025-04-23T01:49:32.842Z" },
+ { url = "https://files.pythonhosted.org/packages/f1/ab/fdbbd91d8d82bf1a723ba88ec3e3d76c022b53c391b0c13cad441cdb8f9e/lxml-5.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b12cb6527599808ada9eb2cd6e0e7d3d8f13fe7bbb01c6311255a15ded4c7ab4", size = 3487862, upload-time = "2025-04-23T01:49:36.296Z" },
+ { url = "https://files.pythonhosted.org/packages/ad/fb/d19b67e4bb63adc20574ba3476cf763b3514df1a37551084b890254e4b15/lxml-5.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9459e6892f59ecea2e2584ee1058f5d8f629446eab52ba2305ae13a32a059530", size = 3891034, upload-time = "2025-04-23T01:50:12.71Z" },
+ { url = "https://files.pythonhosted.org/packages/c9/5d/6e1033ee0cdb2f9bc93164f9df14e42cb5bbf1bbed3bf67f687de2763104/lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47fb24cc0f052f0576ea382872b3fc7e1f7e3028e53299ea751839418ade92a6", size = 4207420, upload-time = "2025-04-23T01:50:15.281Z" },
+ { url = "https://files.pythonhosted.org/packages/f3/4b/23ac79efc32d913259d66672c5f93daac7750a3d97cdc1c1a9a5d1c1b46c/lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50441c9de951a153c698b9b99992e806b71c1f36d14b154592580ff4a9d0d877", size = 4305106, upload-time = "2025-04-23T01:50:17.823Z" },
+ { url = "https://files.pythonhosted.org/packages/a4/7a/fe558bee63a62f7a75a52111c0a94556c1c1bdcf558cd7d52861de558759/lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ab339536aa798b1e17750733663d272038bf28069761d5be57cb4a9b0137b4f8", size = 4205587, upload-time = "2025-04-23T01:50:20.899Z" },
+ { url = "https://files.pythonhosted.org/packages/ed/5b/3207e6bd8d67c952acfec6bac9d1fa0ee353202e7c40b335ebe00879ab7d/lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9776af1aad5a4b4a1317242ee2bea51da54b2a7b7b48674be736d463c999f37d", size = 4329077, upload-time = "2025-04-23T01:50:23.996Z" },
+ { url = "https://files.pythonhosted.org/packages/a1/25/d381abcfd00102d3304aa191caab62f6e3bcbac93ee248771db6be153dfd/lxml-5.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:63e7968ff83da2eb6fdda967483a7a023aa497d85ad8f05c3ad9b1f2e8c84987", size = 3486416, upload-time = "2025-04-23T01:50:26.388Z" },
+]
+
[[package]]
name = "markdown-it-py"
version = "3.0.0"
@@ -1167,6 +1287,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/48/6b/1c6b515a83d5564b1698a61efa245727c8feecf308f4091f565988519d20/numpy-2.3.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:e610832418a2bc09d974cc9fecebfa51e9532d6190223bc5ef6a7402ebf3b5cb", size = 12927246, upload-time = "2025-06-21T12:27:38.618Z" },
]
+[[package]]
+name = "orderly-set"
+version = "5.4.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/03/4a/38030da31c13dcd5a531490006e63a0954083fb115113be9393179738e25/orderly_set-5.4.1.tar.gz", hash = "sha256:a1fb5a4fdc5e234e9e8d8e5c1bbdbc4540f4dfe50d12bf17c8bc5dbf1c9c878d", size = 20943, upload-time = "2025-05-06T22:34:13.512Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/12/bc/e0dfb4db9210d92b44e49d6e61ba5caefbd411958357fa9d7ff489eeb835/orderly_set-5.4.1-py3-none-any.whl", hash = "sha256:b5e21d21680bd9ef456885db800c5cb4f76a03879880c0175e1b077fb166fd83", size = 12339, upload-time = "2025-05-06T22:34:12.564Z" },
+]
+
[[package]]
name = "packaging"
version = "25.0"
@@ -1176,6 +1305,32 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" },
]
+[[package]]
+name = "pandapower"
+version = "3.1.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "deepdiff" },
+ { name = "geojson" },
+ { name = "lxml" },
+ { name = "networkx", version = "3.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+ { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" },
+ { name = "networkx", version = "3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
+ { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" },
+ { name = "numpy", version = "2.3.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
+ { name = "packaging" },
+ { name = "pandas" },
+ { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+ { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+ { name = "tqdm" },
+ { name = "typing-extensions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/8c/98/824be6b22bad919ad9af89096c6d004b853d8da0db805079f24729d19b6a/pandapower-3.1.2.tar.gz", hash = "sha256:bf6cea567afeba35d07a69c9be8b472ff2a1eb100379a043826a18e43a52c178", size = 5153549, upload-time = "2025-06-16T14:01:23.144Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ab/07/a441f9ea1b7f98963c168c04639f0786ef33962aef8dc054742ca15ce720/pandapower-3.1.2-py3-none-any.whl", hash = "sha256:45b02e93f441cb484e33aaff014f8cdd0d7b6e095678bc6cd6fbf882c6372c68", size = 5421180, upload-time = "2025-06-16T14:01:20.193Z" },
+]
+
[[package]]
name = "pandas"
version = "2.3.0"
@@ -1587,6 +1742,7 @@ dev = [
{ name = "networkx", version = "3.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
{ name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" },
{ name = "networkx", version = "3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
+ { name = "pandapower" },
{ name = "pandas-stubs", version = "2.2.2.240807", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
{ name = "pandas-stubs", version = "2.2.3.250527", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
{ name = "pyright" },
@@ -1612,6 +1768,7 @@ tests = [
{ name = "networkx", version = "3.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
{ name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" },
{ name = "networkx", version = "3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
+ { name = "pandapower" },
{ name = "pandas-stubs", version = "2.2.2.240807", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
{ name = "pandas-stubs", version = "2.2.3.250527", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
{ name = "rtree" },
@@ -1633,6 +1790,7 @@ dev = [
{ name = "matplotlib", specifier = ">=3.8.0" },
{ name = "mypy", specifier = ">=1.14.1" },
{ name = "networkx", specifier = ">=3.2.1" },
+ { name = "pandapower", specifier = ">=3.1.2" },
{ name = "pandas-stubs", specifier = ">=2.2.2" },
{ name = "pyright", specifier = ">=1.1.392" },
{ name = "pytest", specifier = ">=8.0" },
@@ -1652,6 +1810,7 @@ tests = [
{ name = "geopandas", specifier = ">=1.0.0" },
{ name = "matplotlib", specifier = ">=3.8.0" },
{ name = "networkx", specifier = ">=3.2.1" },
+ { name = "pandapower", specifier = ">=3.1.2" },
{ name = "pandas-stubs", specifier = ">=2.2.2" },
{ name = "rtree", specifier = ">=1.2.0" },
{ name = "types-geopandas", specifier = ">=1.0.1" },
@@ -1753,6 +1912,106 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/d0/33/4d3e79e4a84533d6cd526bfb42c020a23256ae5e4265d858bd1287831f7d/ruff-0.12.0-py3-none-win_arm64.whl", hash = "sha256:8cd24580405ad8c1cc64d61725bca091d6b6da7eb3d36f72cc605467069d7e8b", size = 10724946, upload-time = "2025-06-17T15:19:23.952Z" },
]
+[[package]]
+name = "scipy"
+version = "1.13.1"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version < '3.10'",
+]
+dependencies = [
+ { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ae/00/48c2f661e2816ccf2ecd77982f6605b2950afe60f60a52b4cbbc2504aa8f/scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c", size = 57210720, upload-time = "2024-05-23T03:29:26.079Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/33/59/41b2529908c002ade869623b87eecff3e11e3ce62e996d0bdcb536984187/scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca", size = 39328076, upload-time = "2024-05-23T03:19:01.687Z" },
+ { url = "https://files.pythonhosted.org/packages/d5/33/f1307601f492f764062ce7dd471a14750f3360e33cd0f8c614dae208492c/scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f", size = 30306232, upload-time = "2024-05-23T03:19:09.089Z" },
+ { url = "https://files.pythonhosted.org/packages/c0/66/9cd4f501dd5ea03e4a4572ecd874936d0da296bd04d1c45ae1a4a75d9c3a/scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989", size = 33743202, upload-time = "2024-05-23T03:19:15.138Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/ba/7255e5dc82a65adbe83771c72f384d99c43063648456796436c9a5585ec3/scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f", size = 38577335, upload-time = "2024-05-23T03:19:21.984Z" },
+ { url = "https://files.pythonhosted.org/packages/49/a5/bb9ded8326e9f0cdfdc412eeda1054b914dfea952bda2097d174f8832cc0/scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94", size = 38820728, upload-time = "2024-05-23T03:19:28.225Z" },
+ { url = "https://files.pythonhosted.org/packages/12/30/df7a8fcc08f9b4a83f5f27cfaaa7d43f9a2d2ad0b6562cced433e5b04e31/scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54", size = 46210588, upload-time = "2024-05-23T03:19:35.661Z" },
+ { url = "https://files.pythonhosted.org/packages/b4/15/4a4bb1b15bbd2cd2786c4f46e76b871b28799b67891f23f455323a0cdcfb/scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9", size = 39333805, upload-time = "2024-05-23T03:19:43.081Z" },
+ { url = "https://files.pythonhosted.org/packages/ba/92/42476de1af309c27710004f5cdebc27bec62c204db42e05b23a302cb0c9a/scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326", size = 30317687, upload-time = "2024-05-23T03:19:48.799Z" },
+ { url = "https://files.pythonhosted.org/packages/80/ba/8be64fe225360a4beb6840f3cbee494c107c0887f33350d0a47d55400b01/scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299", size = 33694638, upload-time = "2024-05-23T03:19:55.104Z" },
+ { url = "https://files.pythonhosted.org/packages/36/07/035d22ff9795129c5a847c64cb43c1fa9188826b59344fee28a3ab02e283/scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa", size = 38569931, upload-time = "2024-05-23T03:20:01.82Z" },
+ { url = "https://files.pythonhosted.org/packages/d9/10/f9b43de37e5ed91facc0cfff31d45ed0104f359e4f9a68416cbf4e790241/scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59", size = 38838145, upload-time = "2024-05-23T03:20:09.173Z" },
+ { url = "https://files.pythonhosted.org/packages/4a/48/4513a1a5623a23e95f94abd675ed91cfb19989c58e9f6f7d03990f6caf3d/scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b", size = 46196227, upload-time = "2024-05-23T03:20:16.433Z" },
+ { url = "https://files.pythonhosted.org/packages/f2/7b/fb6b46fbee30fc7051913068758414f2721003a89dd9a707ad49174e3843/scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1", size = 39357301, upload-time = "2024-05-23T03:20:23.538Z" },
+ { url = "https://files.pythonhosted.org/packages/dc/5a/2043a3bde1443d94014aaa41e0b50c39d046dda8360abd3b2a1d3f79907d/scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d", size = 30363348, upload-time = "2024-05-23T03:20:29.885Z" },
+ { url = "https://files.pythonhosted.org/packages/e7/cb/26e4a47364bbfdb3b7fb3363be6d8a1c543bcd70a7753ab397350f5f189a/scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627", size = 33406062, upload-time = "2024-05-23T03:20:36.012Z" },
+ { url = "https://files.pythonhosted.org/packages/88/ab/6ecdc526d509d33814835447bbbeedbebdec7cca46ef495a61b00a35b4bf/scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884", size = 38218311, upload-time = "2024-05-23T03:20:42.086Z" },
+ { url = "https://files.pythonhosted.org/packages/0b/00/9f54554f0f8318100a71515122d8f4f503b1a2c4b4cfab3b4b68c0eb08fa/scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16", size = 38442493, upload-time = "2024-05-23T03:20:48.292Z" },
+ { url = "https://files.pythonhosted.org/packages/3e/df/963384e90733e08eac978cd103c34df181d1fec424de383cdc443f418dd4/scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949", size = 45910955, upload-time = "2024-05-23T03:20:55.091Z" },
+ { url = "https://files.pythonhosted.org/packages/7f/29/c2ea58c9731b9ecb30b6738113a95d147e83922986b34c685b8f6eefde21/scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5", size = 39352927, upload-time = "2024-05-23T03:21:01.95Z" },
+ { url = "https://files.pythonhosted.org/packages/5c/c0/e71b94b20ccf9effb38d7147c0064c08c622309fd487b1b677771a97d18c/scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24", size = 30324538, upload-time = "2024-05-23T03:21:07.634Z" },
+ { url = "https://files.pythonhosted.org/packages/6d/0f/aaa55b06d474817cea311e7b10aab2ea1fd5d43bc6a2861ccc9caec9f418/scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004", size = 33732190, upload-time = "2024-05-23T03:21:14.41Z" },
+ { url = "https://files.pythonhosted.org/packages/35/f5/d0ad1a96f80962ba65e2ce1de6a1e59edecd1f0a7b55990ed208848012e0/scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d", size = 38612244, upload-time = "2024-05-23T03:21:21.827Z" },
+ { url = "https://files.pythonhosted.org/packages/8d/02/1165905f14962174e6569076bcc3315809ae1291ed14de6448cc151eedfd/scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c", size = 38845637, upload-time = "2024-05-23T03:21:28.729Z" },
+ { url = "https://files.pythonhosted.org/packages/3e/77/dab54fe647a08ee4253963bcd8f9cf17509c8ca64d6335141422fe2e2114/scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2", size = 46227440, upload-time = "2024-05-23T03:21:35.888Z" },
+]
+
+[[package]]
+name = "scipy"
+version = "1.15.3"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version >= '3.12'",
+ "python_full_version == '3.11.*'",
+ "python_full_version == '3.10.*'",
+]
+dependencies = [
+ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" },
+ { name = "numpy", version = "2.3.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size = 59419214, upload-time = "2025-05-08T16:13:05.955Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/78/2f/4966032c5f8cc7e6a60f1b2e0ad686293b9474b65246b0c642e3ef3badd0/scipy-1.15.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a345928c86d535060c9c2b25e71e87c39ab2f22fc96e9636bd74d1dbf9de448c", size = 38702770, upload-time = "2025-05-08T16:04:20.849Z" },
+ { url = "https://files.pythonhosted.org/packages/a0/6e/0c3bf90fae0e910c274db43304ebe25a6b391327f3f10b5dcc638c090795/scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ad3432cb0f9ed87477a8d97f03b763fd1d57709f1bbde3c9369b1dff5503b253", size = 30094511, upload-time = "2025-05-08T16:04:27.103Z" },
+ { url = "https://files.pythonhosted.org/packages/ea/b1/4deb37252311c1acff7f101f6453f0440794f51b6eacb1aad4459a134081/scipy-1.15.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:aef683a9ae6eb00728a542b796f52a5477b78252edede72b8327a886ab63293f", size = 22368151, upload-time = "2025-05-08T16:04:31.731Z" },
+ { url = "https://files.pythonhosted.org/packages/38/7d/f457626e3cd3c29b3a49ca115a304cebb8cc6f31b04678f03b216899d3c6/scipy-1.15.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:1c832e1bd78dea67d5c16f786681b28dd695a8cb1fb90af2e27580d3d0967e92", size = 25121732, upload-time = "2025-05-08T16:04:36.596Z" },
+ { url = "https://files.pythonhosted.org/packages/db/0a/92b1de4a7adc7a15dcf5bddc6e191f6f29ee663b30511ce20467ef9b82e4/scipy-1.15.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:263961f658ce2165bbd7b99fa5135195c3a12d9bef045345016b8b50c315cb82", size = 35547617, upload-time = "2025-05-08T16:04:43.546Z" },
+ { url = "https://files.pythonhosted.org/packages/8e/6d/41991e503e51fc1134502694c5fa7a1671501a17ffa12716a4a9151af3df/scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2abc762b0811e09a0d3258abee2d98e0c703eee49464ce0069590846f31d40", size = 37662964, upload-time = "2025-05-08T16:04:49.431Z" },
+ { url = "https://files.pythonhosted.org/packages/25/e1/3df8f83cb15f3500478c889be8fb18700813b95e9e087328230b98d547ff/scipy-1.15.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ed7284b21a7a0c8f1b6e5977ac05396c0d008b89e05498c8b7e8f4a1423bba0e", size = 37238749, upload-time = "2025-05-08T16:04:55.215Z" },
+ { url = "https://files.pythonhosted.org/packages/93/3e/b3257cf446f2a3533ed7809757039016b74cd6f38271de91682aa844cfc5/scipy-1.15.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5380741e53df2c566f4d234b100a484b420af85deb39ea35a1cc1be84ff53a5c", size = 40022383, upload-time = "2025-05-08T16:05:01.914Z" },
+ { url = "https://files.pythonhosted.org/packages/d1/84/55bc4881973d3f79b479a5a2e2df61c8c9a04fcb986a213ac9c02cfb659b/scipy-1.15.3-cp310-cp310-win_amd64.whl", hash = "sha256:9d61e97b186a57350f6d6fd72640f9e99d5a4a2b8fbf4b9ee9a841eab327dc13", size = 41259201, upload-time = "2025-05-08T16:05:08.166Z" },
+ { url = "https://files.pythonhosted.org/packages/96/ab/5cc9f80f28f6a7dff646c5756e559823614a42b1939d86dd0ed550470210/scipy-1.15.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:993439ce220d25e3696d1b23b233dd010169b62f6456488567e830654ee37a6b", size = 38714255, upload-time = "2025-05-08T16:05:14.596Z" },
+ { url = "https://files.pythonhosted.org/packages/4a/4a/66ba30abe5ad1a3ad15bfb0b59d22174012e8056ff448cb1644deccbfed2/scipy-1.15.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:34716e281f181a02341ddeaad584205bd2fd3c242063bd3423d61ac259ca7eba", size = 30111035, upload-time = "2025-05-08T16:05:20.152Z" },
+ { url = "https://files.pythonhosted.org/packages/4b/fa/a7e5b95afd80d24313307f03624acc65801846fa75599034f8ceb9e2cbf6/scipy-1.15.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3b0334816afb8b91dab859281b1b9786934392aa3d527cd847e41bb6f45bee65", size = 22384499, upload-time = "2025-05-08T16:05:24.494Z" },
+ { url = "https://files.pythonhosted.org/packages/17/99/f3aaddccf3588bb4aea70ba35328c204cadd89517a1612ecfda5b2dd9d7a/scipy-1.15.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:6db907c7368e3092e24919b5e31c76998b0ce1684d51a90943cb0ed1b4ffd6c1", size = 25152602, upload-time = "2025-05-08T16:05:29.313Z" },
+ { url = "https://files.pythonhosted.org/packages/56/c5/1032cdb565f146109212153339f9cb8b993701e9fe56b1c97699eee12586/scipy-1.15.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721d6b4ef5dc82ca8968c25b111e307083d7ca9091bc38163fb89243e85e3889", size = 35503415, upload-time = "2025-05-08T16:05:34.699Z" },
+ { url = "https://files.pythonhosted.org/packages/bd/37/89f19c8c05505d0601ed5650156e50eb881ae3918786c8fd7262b4ee66d3/scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39cb9c62e471b1bb3750066ecc3a3f3052b37751c7c3dfd0fd7e48900ed52982", size = 37652622, upload-time = "2025-05-08T16:05:40.762Z" },
+ { url = "https://files.pythonhosted.org/packages/7e/31/be59513aa9695519b18e1851bb9e487de66f2d31f835201f1b42f5d4d475/scipy-1.15.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:795c46999bae845966368a3c013e0e00947932d68e235702b5c3f6ea799aa8c9", size = 37244796, upload-time = "2025-05-08T16:05:48.119Z" },
+ { url = "https://files.pythonhosted.org/packages/10/c0/4f5f3eeccc235632aab79b27a74a9130c6c35df358129f7ac8b29f562ac7/scipy-1.15.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:18aaacb735ab38b38db42cb01f6b92a2d0d4b6aabefeb07f02849e47f8fb3594", size = 40047684, upload-time = "2025-05-08T16:05:54.22Z" },
+ { url = "https://files.pythonhosted.org/packages/ab/a7/0ddaf514ce8a8714f6ed243a2b391b41dbb65251affe21ee3077ec45ea9a/scipy-1.15.3-cp311-cp311-win_amd64.whl", hash = "sha256:ae48a786a28412d744c62fd7816a4118ef97e5be0bee968ce8f0a2fba7acf3bb", size = 41246504, upload-time = "2025-05-08T16:06:00.437Z" },
+ { url = "https://files.pythonhosted.org/packages/37/4b/683aa044c4162e10ed7a7ea30527f2cbd92e6999c10a8ed8edb253836e9c/scipy-1.15.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6ac6310fdbfb7aa6612408bd2f07295bcbd3fda00d2d702178434751fe48e019", size = 38766735, upload-time = "2025-05-08T16:06:06.471Z" },
+ { url = "https://files.pythonhosted.org/packages/7b/7e/f30be3d03de07f25dc0ec926d1681fed5c732d759ac8f51079708c79e680/scipy-1.15.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:185cd3d6d05ca4b44a8f1595af87f9c372bb6acf9c808e99aa3e9aa03bd98cf6", size = 30173284, upload-time = "2025-05-08T16:06:11.686Z" },
+ { url = "https://files.pythonhosted.org/packages/07/9c/0ddb0d0abdabe0d181c1793db51f02cd59e4901da6f9f7848e1f96759f0d/scipy-1.15.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:05dc6abcd105e1a29f95eada46d4a3f251743cfd7d3ae8ddb4088047f24ea477", size = 22446958, upload-time = "2025-05-08T16:06:15.97Z" },
+ { url = "https://files.pythonhosted.org/packages/af/43/0bce905a965f36c58ff80d8bea33f1f9351b05fad4beaad4eae34699b7a1/scipy-1.15.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:06efcba926324df1696931a57a176c80848ccd67ce6ad020c810736bfd58eb1c", size = 25242454, upload-time = "2025-05-08T16:06:20.394Z" },
+ { url = "https://files.pythonhosted.org/packages/56/30/a6f08f84ee5b7b28b4c597aca4cbe545535c39fe911845a96414700b64ba/scipy-1.15.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05045d8b9bfd807ee1b9f38761993297b10b245f012b11b13b91ba8945f7e45", size = 35210199, upload-time = "2025-05-08T16:06:26.159Z" },
+ { url = "https://files.pythonhosted.org/packages/0b/1f/03f52c282437a168ee2c7c14a1a0d0781a9a4a8962d84ac05c06b4c5b555/scipy-1.15.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271e3713e645149ea5ea3e97b57fdab61ce61333f97cfae392c28ba786f9bb49", size = 37309455, upload-time = "2025-05-08T16:06:32.778Z" },
+ { url = "https://files.pythonhosted.org/packages/89/b1/fbb53137f42c4bf630b1ffdfc2151a62d1d1b903b249f030d2b1c0280af8/scipy-1.15.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6cfd56fc1a8e53f6e89ba3a7a7251f7396412d655bca2aa5611c8ec9a6784a1e", size = 36885140, upload-time = "2025-05-08T16:06:39.249Z" },
+ { url = "https://files.pythonhosted.org/packages/2e/2e/025e39e339f5090df1ff266d021892694dbb7e63568edcfe43f892fa381d/scipy-1.15.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ff17c0bb1cb32952c09217d8d1eed9b53d1463e5f1dd6052c7857f83127d539", size = 39710549, upload-time = "2025-05-08T16:06:45.729Z" },
+ { url = "https://files.pythonhosted.org/packages/e6/eb/3bf6ea8ab7f1503dca3a10df2e4b9c3f6b3316df07f6c0ded94b281c7101/scipy-1.15.3-cp312-cp312-win_amd64.whl", hash = "sha256:52092bc0472cfd17df49ff17e70624345efece4e1a12b23783a1ac59a1b728ed", size = 40966184, upload-time = "2025-05-08T16:06:52.623Z" },
+ { url = "https://files.pythonhosted.org/packages/73/18/ec27848c9baae6e0d6573eda6e01a602e5649ee72c27c3a8aad673ebecfd/scipy-1.15.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c620736bcc334782e24d173c0fdbb7590a0a436d2fdf39310a8902505008759", size = 38728256, upload-time = "2025-05-08T16:06:58.696Z" },
+ { url = "https://files.pythonhosted.org/packages/74/cd/1aef2184948728b4b6e21267d53b3339762c285a46a274ebb7863c9e4742/scipy-1.15.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:7e11270a000969409d37ed399585ee530b9ef6aa99d50c019de4cb01e8e54e62", size = 30109540, upload-time = "2025-05-08T16:07:04.209Z" },
+ { url = "https://files.pythonhosted.org/packages/5b/d8/59e452c0a255ec352bd0a833537a3bc1bfb679944c4938ab375b0a6b3a3e/scipy-1.15.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8c9ed3ba2c8a2ce098163a9bdb26f891746d02136995df25227a20e71c396ebb", size = 22383115, upload-time = "2025-05-08T16:07:08.998Z" },
+ { url = "https://files.pythonhosted.org/packages/08/f5/456f56bbbfccf696263b47095291040655e3cbaf05d063bdc7c7517f32ac/scipy-1.15.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0bdd905264c0c9cfa74a4772cdb2070171790381a5c4d312c973382fc6eaf730", size = 25163884, upload-time = "2025-05-08T16:07:14.091Z" },
+ { url = "https://files.pythonhosted.org/packages/a2/66/a9618b6a435a0f0c0b8a6d0a2efb32d4ec5a85f023c2b79d39512040355b/scipy-1.15.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79167bba085c31f38603e11a267d862957cbb3ce018d8b38f79ac043bc92d825", size = 35174018, upload-time = "2025-05-08T16:07:19.427Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/09/c5b6734a50ad4882432b6bb7c02baf757f5b2f256041da5df242e2d7e6b6/scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9deabd6d547aee2c9a81dee6cc96c6d7e9a9b1953f74850c179f91fdc729cb7", size = 37269716, upload-time = "2025-05-08T16:07:25.712Z" },
+ { url = "https://files.pythonhosted.org/packages/77/0a/eac00ff741f23bcabd352731ed9b8995a0a60ef57f5fd788d611d43d69a1/scipy-1.15.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dde4fc32993071ac0c7dd2d82569e544f0bdaff66269cb475e0f369adad13f11", size = 36872342, upload-time = "2025-05-08T16:07:31.468Z" },
+ { url = "https://files.pythonhosted.org/packages/fe/54/4379be86dd74b6ad81551689107360d9a3e18f24d20767a2d5b9253a3f0a/scipy-1.15.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f77f853d584e72e874d87357ad70f44b437331507d1c311457bed8ed2b956126", size = 39670869, upload-time = "2025-05-08T16:07:38.002Z" },
+ { url = "https://files.pythonhosted.org/packages/87/2e/892ad2862ba54f084ffe8cc4a22667eaf9c2bcec6d2bff1d15713c6c0703/scipy-1.15.3-cp313-cp313-win_amd64.whl", hash = "sha256:b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163", size = 40988851, upload-time = "2025-05-08T16:08:33.671Z" },
+ { url = "https://files.pythonhosted.org/packages/1b/e9/7a879c137f7e55b30d75d90ce3eb468197646bc7b443ac036ae3fe109055/scipy-1.15.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3ac07623267feb3ae308487c260ac684b32ea35fd81e12845039952f558047b8", size = 38863011, upload-time = "2025-05-08T16:07:44.039Z" },
+ { url = "https://files.pythonhosted.org/packages/51/d1/226a806bbd69f62ce5ef5f3ffadc35286e9fbc802f606a07eb83bf2359de/scipy-1.15.3-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6487aa99c2a3d509a5227d9a5e889ff05830a06b2ce08ec30df6d79db5fcd5c5", size = 30266407, upload-time = "2025-05-08T16:07:49.891Z" },
+ { url = "https://files.pythonhosted.org/packages/e5/9b/f32d1d6093ab9eeabbd839b0f7619c62e46cc4b7b6dbf05b6e615bbd4400/scipy-1.15.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:50f9e62461c95d933d5c5ef4a1f2ebf9a2b4e83b0db374cb3f1de104d935922e", size = 22540030, upload-time = "2025-05-08T16:07:54.121Z" },
+ { url = "https://files.pythonhosted.org/packages/e7/29/c278f699b095c1a884f29fda126340fcc201461ee8bfea5c8bdb1c7c958b/scipy-1.15.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14ed70039d182f411ffc74789a16df3835e05dc469b898233a245cdfd7f162cb", size = 25218709, upload-time = "2025-05-08T16:07:58.506Z" },
+ { url = "https://files.pythonhosted.org/packages/24/18/9e5374b617aba742a990581373cd6b68a2945d65cc588482749ef2e64467/scipy-1.15.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a769105537aa07a69468a0eefcd121be52006db61cdd8cac8a0e68980bbb723", size = 34809045, upload-time = "2025-05-08T16:08:03.929Z" },
+ { url = "https://files.pythonhosted.org/packages/e1/fe/9c4361e7ba2927074360856db6135ef4904d505e9b3afbbcb073c4008328/scipy-1.15.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db984639887e3dffb3928d118145ffe40eff2fa40cb241a306ec57c219ebbbb", size = 36703062, upload-time = "2025-05-08T16:08:09.558Z" },
+ { url = "https://files.pythonhosted.org/packages/b7/8e/038ccfe29d272b30086b25a4960f757f97122cb2ec42e62b460d02fe98e9/scipy-1.15.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:40e54d5c7e7ebf1aa596c374c49fa3135f04648a0caabcb66c52884b943f02b4", size = 36393132, upload-time = "2025-05-08T16:08:15.34Z" },
+ { url = "https://files.pythonhosted.org/packages/10/7e/5c12285452970be5bdbe8352c619250b97ebf7917d7a9a9e96b8a8140f17/scipy-1.15.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5e721fed53187e71d0ccf382b6bf977644c533e506c4d33c3fb24de89f5c3ed5", size = 38979503, upload-time = "2025-05-08T16:08:21.513Z" },
+ { url = "https://files.pythonhosted.org/packages/81/06/0a5e5349474e1cbc5757975b21bd4fad0e72ebf138c5592f191646154e06/scipy-1.15.3-cp313-cp313t-win_amd64.whl", hash = "sha256:76ad1fb5f8752eabf0fa02e4cc0336b4e8f021e2d5f061ed37d6d264db35e3ca", size = 40308097, upload-time = "2025-05-08T16:08:27.627Z" },
+]
+
[[package]]
name = "shapely"
version = "2.0.7"
@@ -1902,6 +2161,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257, upload-time = "2024-11-27T22:38:35.385Z" },
]
+[[package]]
+name = "tqdm"
+version = "4.67.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "colorama", marker = "sys_platform == 'win32'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737, upload-time = "2024-11-24T20:12:22.481Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540, upload-time = "2024-11-24T20:12:19.698Z" },
+]
+
[[package]]
name = "types-geopandas"
version = "1.0.1.20250510"