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"