From 2d45620665fe5543e9680d5e087f9b94ed448b99 Mon Sep 17 00:00:00 2001 From: Ali Hamdan Date: Sun, 6 Jul 2025 17:14:11 +0200 Subject: [PATCH] More pp tests --- stubs/pandapower-stubs/_typing.pyi | 14 +- stubs/pandapower-stubs/control/__init__.pyi | 5 +- .../control/basic_controller.pyi | 6 +- .../controller/DERController/DERBasics.pyi | 27 ++++ .../controller/DERController/PQVAreas.pyi | 146 ++++++++++++++++++ .../controller/DERController/QModels.pyi | 47 ++++++ .../controller/DERController/__init__.pyi | 4 + .../controller/DERController/der_control.pyi | 33 ++++ .../DERController/der_control_plot.pyi | 16 ++ .../controller/characteristic_control.pyi | 27 ++-- .../control/controller/pq_control.pyi | 58 +++++++ .../control/controller/shunt_control.pyi | 37 +++++ .../control/controller/station_control.pyi | 54 +++++++ .../controller/trafo/ContinuousTapControl.pyi | 17 +- .../controller/trafo/DiscreteTapControl.pyi | 30 ++-- .../trafo/TapDependentImpedance.pyi | 16 +- .../controller/trafo/USetTapControl.pyi | 4 - .../controller/trafo/VmSetTapControl.pyi | 8 +- .../control/controller/trafo_control.pyi | 24 ++- .../control/util/auxiliary.pyi | 22 +-- .../control/util/characteristic.pyi | 65 ++++++-- .../control/util/diagnostic.pyi | 8 +- .../estimation/ppc_conversion.pyi | 7 +- stubs/pandapower-stubs/pypower/_compat.pyi | 3 - .../pandapower-stubs/pypower/add_userfcn.pyi | 4 +- stubs/pandapower-stubs/pypower/bustypes.pyi | 6 +- stubs/pandapower-stubs/pypower/dIbr_dV.pyi | 1 + .../pandapower-stubs/pypower/dcopf_solver.pyi | 4 +- stubs/pandapower-stubs/pypower/fdpf.pyi | 4 +- stubs/pandapower-stubs/pypower/gausspf.pyi | 4 +- stubs/pandapower-stubs/pypower/idx_area.pyi | 6 +- stubs/pandapower-stubs/pypower/idx_brch.pyi | 57 ++++--- .../pandapower-stubs/pypower/idx_brch_dc.pyi | 22 +++ .../pandapower-stubs/pypower/idx_brch_sc.pyi | 40 +++-- .../pypower/idx_brch_tdpf.pyi | 37 +++-- stubs/pandapower-stubs/pypower/idx_bus.pyi | 56 ++++--- stubs/pandapower-stubs/pypower/idx_bus_dc.pyi | 20 +++ stubs/pandapower-stubs/pypower/idx_bus_sc.pyi | 55 ++++--- stubs/pandapower-stubs/pypower/idx_cost.pyi | 17 +- stubs/pandapower-stubs/pypower/idx_gen.pyi | 58 +++---- stubs/pandapower-stubs/pypower/idx_ssc.pyi | 14 ++ stubs/pandapower-stubs/pypower/idx_svc.pyi | 16 ++ stubs/pandapower-stubs/pypower/idx_tcsc.pyi | 23 +++ stubs/pandapower-stubs/pypower/idx_vsc.pyi | 28 ++++ stubs/pandapower-stubs/pypower/isload.pyi | 6 +- stubs/pandapower-stubs/pypower/makeAang.pyi | 11 +- stubs/pandapower-stubs/pypower/makeBdc.pyi | 2 + stubs/pandapower-stubs/pypower/makeLODF.pyi | 6 + stubs/pandapower-stubs/pypower/pfsoln.pyi | 30 ++-- stubtest_allowlist.txt | 4 +- 50 files changed, 947 insertions(+), 262 deletions(-) create mode 100644 stubs/pandapower-stubs/control/controller/DERController/DERBasics.pyi create mode 100644 stubs/pandapower-stubs/control/controller/DERController/PQVAreas.pyi create mode 100644 stubs/pandapower-stubs/control/controller/DERController/QModels.pyi create mode 100644 stubs/pandapower-stubs/control/controller/DERController/__init__.pyi create mode 100644 stubs/pandapower-stubs/control/controller/DERController/der_control.pyi create mode 100644 stubs/pandapower-stubs/control/controller/DERController/der_control_plot.pyi create mode 100644 stubs/pandapower-stubs/control/controller/pq_control.pyi create mode 100644 stubs/pandapower-stubs/control/controller/shunt_control.pyi create mode 100644 stubs/pandapower-stubs/control/controller/station_control.pyi delete mode 100644 stubs/pandapower-stubs/control/controller/trafo/USetTapControl.pyi delete mode 100644 stubs/pandapower-stubs/pypower/_compat.pyi create mode 100644 stubs/pandapower-stubs/pypower/idx_brch_dc.pyi create mode 100644 stubs/pandapower-stubs/pypower/idx_bus_dc.pyi create mode 100644 stubs/pandapower-stubs/pypower/idx_ssc.pyi create mode 100644 stubs/pandapower-stubs/pypower/idx_svc.pyi create mode 100644 stubs/pandapower-stubs/pypower/idx_tcsc.pyi create mode 100644 stubs/pandapower-stubs/pypower/idx_vsc.pyi diff --git a/stubs/pandapower-stubs/_typing.pyi b/stubs/pandapower-stubs/_typing.pyi index 6581234..5b627f1 100644 --- a/stubs/pandapower-stubs/_typing.pyi +++ b/stubs/pandapower-stubs/_typing.pyi @@ -4,7 +4,9 @@ from typing_extensions import TypeAlias import numpy as np -_T = TypeVar("_T", bound=Any) +_T = TypeVar("_T") +_G = TypeVar("_G", bound=np.generic) +_Generic_co = TypeVar("_Generic_co", covariant=True, bound=np.generic) # Wide primitives for input types Bool: TypeAlias = bool | np.bool @@ -13,8 +15,14 @@ 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]] +Array1D: TypeAlias = np.ndarray[tuple[int], np.dtype[_G]] +Array2D: TypeAlias = np.ndarray[tuple[int, int], np.dtype[_G]] + +class SupportsArray(Protocol[_Generic_co]): + def __array__(self) -> np.ndarray[Any, np.dtype[_Generic_co]]: ... + +VectorLike: TypeAlias = Collection[_T] | SupportsArray[_G] +FloatVectorLike: TypeAlias = VectorLike[Float, np.floating | np.integer | np.bool] # File I/O related @type_check_only diff --git a/stubs/pandapower-stubs/control/__init__.pyi b/stubs/pandapower-stubs/control/__init__.pyi index a814410..a1b51ea 100644 --- a/stubs/pandapower-stubs/control/__init__.pyi +++ b/stubs/pandapower-stubs/control/__init__.pyi @@ -3,18 +3,17 @@ from pandapower.control.controller.const_control import ConstControl as ConstCon from pandapower.control.controller.trafo.ContinuousTapControl import ContinuousTapControl as ContinuousTapControl from pandapower.control.controller.trafo.DiscreteTapControl import DiscreteTapControl as DiscreteTapControl from pandapower.control.controller.trafo.TapDependentImpedance import TapDependentImpedance as TapDependentImpedance -from pandapower.control.controller.trafo.USetTapControl import USetTapControl as USetTapControl from pandapower.control.controller.trafo.VmSetTapControl import VmSetTapControl as VmSetTapControl from pandapower.control.controller.trafo_control import TrafoController as TrafoController from pandapower.control.run_control import * from pandapower.control.run_control import ControllerNotConverged as ControllerNotConverged from pandapower.control.util.auxiliary import ( - create_trafo_characteristics as create_trafo_characteristics, + _create_trafo_characteristics as _create_trafo_characteristics, get_controller_index as get_controller_index, plot_characteristic as plot_characteristic, ) from pandapower.control.util.characteristic import Characteristic as Characteristic, SplineCharacteristic as SplineCharacteristic from pandapower.control.util.diagnostic import ( control_diagnostic as control_diagnostic, - trafo_characteristics_diagnostic as trafo_characteristics_diagnostic, + trafo_characteristic_table_diagnostic as trafo_characteristic_table_diagnostic, ) diff --git a/stubs/pandapower-stubs/control/basic_controller.pyi b/stubs/pandapower-stubs/control/basic_controller.pyi index f804e4a..dd874cc 100644 --- a/stubs/pandapower-stubs/control/basic_controller.pyi +++ b/stubs/pandapower-stubs/control/basic_controller.pyi @@ -1,5 +1,7 @@ from typing import Any, SupportsIndex as Int +import numpy as np + from pandapower.auxiliary import pandapowerNet from pandapower.io_utils import JSONSerializableClass @@ -46,10 +48,10 @@ class Controller(BasicCtrl): drop_same_existing_ctrl: bool, overwrite: bool, **kwargs, - ) -> int: ... + ) -> np.int64: ... def time_step(self, net: pandapowerNet, time: Any) -> None: ... def initialize_control(self, net: pandapowerNet) -> None: ... - def is_converged(self, net: pandapowerNet): ... + def is_converged(self, net: pandapowerNet) -> bool | np.bool: ... def control_step(self, net: pandapowerNet) -> None: ... def repair_control(self, net: pandapowerNet) -> None: ... def restore_init_state(self, net: pandapowerNet) -> None: ... diff --git a/stubs/pandapower-stubs/control/controller/DERController/DERBasics.pyi b/stubs/pandapower-stubs/control/controller/DERController/DERBasics.pyi new file mode 100644 index 0000000..85f0348 --- /dev/null +++ b/stubs/pandapower-stubs/control/controller/DERController/DERBasics.pyi @@ -0,0 +1,27 @@ +import numpy as np + +from pandapower._typing import Array1D, FloatVectorLike + +class BaseModel: + @classmethod + def name(cls) -> str: ... + +class QVCurve: + vm_points_pu: FloatVectorLike + q_points_pu: FloatVectorLike + def __init__(self, vm_points_pu: FloatVectorLike, q_points_pu: FloatVectorLike) -> None: ... + def step(self, vm_pu) -> Array1D[np.float64]: ... + +class CosphiVCurve: + vm_points_pu: FloatVectorLike + cosphi_points: FloatVectorLike + cosphi_pos: Array1D[np.float64] + def __init__(self, vm_points_pu: FloatVectorLike, cosphi_points: FloatVectorLike) -> None: ... + def step(self, vm_pu, p_pu) -> Array1D[np.float64]: ... + +class CosphiPCurve: + p_points_pu: FloatVectorLike + cosphi_points: FloatVectorLike + cosphi_pos: Array1D[np.float64] + def __init__(self, p_points_pu: FloatVectorLike, cosphi_points: FloatVectorLike) -> None: ... + def step(self, p_pu) -> Array1D[np.float64]: ... diff --git a/stubs/pandapower-stubs/control/controller/DERController/PQVAreas.pyi b/stubs/pandapower-stubs/control/controller/DERController/PQVAreas.pyi new file mode 100644 index 0000000..2f85207 --- /dev/null +++ b/stubs/pandapower-stubs/control/controller/DERController/PQVAreas.pyi @@ -0,0 +1,146 @@ +import numpy as np +import shapely + +from pandapower._typing import Array1D, Array2D, Float, FloatVectorLike +from pandapower.control.controller.DERController.DERBasics import BaseModel + +class BaseArea(BaseModel): + def in_area(self, p_pu: FloatVectorLike, q_pu: FloatVectorLike, vm_pu: FloatVectorLike) -> Array1D[np.bool]: ... + def q_flexibility(self, p_pu: FloatVectorLike, vm_pu: FloatVectorLike) -> Array2D[np.float64]: ... + +class BasePQVArea(BaseArea): + raise_merge_overlap: bool + def __init__(self, raise_merge_overlap: bool = True) -> None: ... + def in_area(self, p_pu: FloatVectorLike, q_pu: FloatVectorLike, vm_pu: FloatVectorLike) -> Array1D[np.bool]: ... + def q_flexibility(self, p_pu: FloatVectorLike, vm_pu: FloatVectorLike) -> Array2D[np.float64]: ... + +class PQAreaPOLYGON(BaseArea): + p_points_pu: FloatVectorLike + q_points_pu: FloatVectorLike + polygon: shapely.Polygon + def __init__(self, p_points_pu: FloatVectorLike, q_points_pu: FloatVectorLike) -> None: ... + def in_area(self, p_pu: FloatVectorLike, q_pu: FloatVectorLike, vm_pu: FloatVectorLike | None = None) -> Array1D[np.bool]: ... + def q_flexibility(self, p_pu: FloatVectorLike, vm_pu: FloatVectorLike | None = None) -> Array2D[np.float64]: ... + +class QVAreaPOLYGON(BaseArea): + q_points_pu: FloatVectorLike + vm_points_pu: FloatVectorLike + polygon: shapely.Polygon + def __init__(self, q_points_pu: FloatVectorLike, vm_points_pu: FloatVectorLike) -> None: ... + def in_area(self, p_pu: FloatVectorLike, q_pu: FloatVectorLike, vm_pu: FloatVectorLike) -> Array1D[np.bool]: ... + def q_flexibility(self, p_pu: FloatVectorLike, vm_pu: FloatVectorLike) -> Array2D[np.float64]: ... + +class PQVAreaPOLYGON(BasePQVArea): + pq_area: PQAreaPOLYGON + qv_area: QVAreaPOLYGON + def __init__( + self, + p_points_pu: FloatVectorLike, + q_pq_points_pu: FloatVectorLike, + q_qv_points_pu: FloatVectorLike, + vm_points_pu: FloatVectorLike, + raise_merge_overlap: bool = True, + ) -> None: ... + +class PQAreaSTATCOM(BaseArea): + min_q_pu: FloatVectorLike + max_q_pu: FloatVectorLike + def __init__(self, min_q_pu: FloatVectorLike, max_q_pu: FloatVectorLike) -> None: ... + def in_area(self, p_pu: FloatVectorLike, q_pu: FloatVectorLike, vm_pu: FloatVectorLike | None = None) -> Array1D[np.bool]: ... + def q_flexibility(self, p_pu: FloatVectorLike, vm_pu: FloatVectorLike | None = None) -> Array2D[np.float64]: ... + +class PQArea4120(BaseArea): + version: int + p_points_pu: list[float] + min_q_pu: FloatVectorLike + max_q_pu: FloatVectorLike + q_max_under_p_point: float + linear_factor_ind: FloatVectorLike + linear_factor_cap: FloatVectorLike + def __init__(self, min_q_pu: FloatVectorLike, max_q_pu: FloatVectorLike, version: int = 2018, **kwargs) -> None: ... + def in_area(self, p_pu: FloatVectorLike, q_pu: FloatVectorLike, vm_pu: FloatVectorLike | None = None) -> Array1D[np.bool]: ... + def q_flexibility(self, p_pu: FloatVectorLike, vm_pu: FloatVectorLike | None = None) -> Array2D[np.float64]: ... + +class QVArea4120(BaseArea): + min_q_pu: FloatVectorLike + max_q_pu: FloatVectorLike + max_vm_pu: float + min_vm_pu: float + delta_vm_pu: float + linear_factor: FloatVectorLike + def __init__(self, min_q_pu: FloatVectorLike, max_q_pu: FloatVectorLike) -> None: ... + def q_flexibility(self, p_pu: FloatVectorLike, vm_pu: FloatVectorLike) -> Array2D[np.float64]: ... + +class PQVArea4120Base(BasePQVArea): + pq_area: PQArea4120 + qv_area: QVArea4120 + def __init__( + self, min_q_pu: FloatVectorLike, max_q_pu: FloatVectorLike, version: int = 2018, raise_merge_overlap: bool = True + ) -> None: ... + +class PQVArea4120V1(PQVArea4120Base): + def __init__(self, version: int = 2018, raise_merge_overlap: bool = True) -> None: ... + +class PQVArea4120V2(PQVArea4120Base): + def __init__(self, version: int = 2018, raise_merge_overlap: bool = True) -> None: ... + +class PQVArea4120V3(PQVArea4120Base): + def __init__(self, version: int = 2018, raise_merge_overlap: bool = True) -> None: ... + +class PQArea4130(PQArea4120): + def __init__(self, min_q_pu, max_q_pu) -> None: ... + +class QVArea4130(QVArea4120): + min_q_pu: FloatVectorLike + max_q_pu: FloatVectorLike + vn_kv: Float + variant: int + min_vm_points_pu: Array1D[np.float64] + max_vm_points_pu: Array1D[np.float64] + min_q_points_pu: Array1D[np.float64] + max_q_points_pu: Array1D[np.float64] + def __init__(self, min_q_pu: FloatVectorLike, max_q_pu: FloatVectorLike, vn_kv: Float, variant: int) -> None: ... + def q_flexibility(self, p_pu: FloatVectorLike, vm_pu: FloatVectorLike) -> Array2D[np.float64]: ... + +class PQVArea4130Base(BasePQVArea): + pq_area: PQArea4130 + qv_area: QVArea4130 + def __init__( + self, + min_q_pu: FloatVectorLike, + max_q_pu: FloatVectorLike, + variant: int, + vn_kv: Float = 380, + raise_merge_overlap: bool = True, + ) -> None: ... + +class PQVArea4130V1(PQVArea4130Base): + def __init__(self, vn_kv: Float = 380, raise_merge_overlap: bool = True) -> None: ... + +class PQVArea4130V2(PQVArea4130Base): + def __init__(self, vn_kv: Float = 380, raise_merge_overlap: bool = True) -> None: ... + +class PQVArea4130V3(PQVArea4130Base): + def __init__(self, vn_kv: Float = 380, raise_merge_overlap: bool = True) -> None: ... + +class PQArea4110(PQAreaPOLYGON): + def __init__(self) -> None: ... + +class QVArea4110(QVAreaPOLYGON): + def __init__(self) -> None: ... + +class PQVArea4110(BasePQVArea): + pq_area: PQArea4110 + qv_area: QVArea4110 + def __init__(self, raise_merge_overlap: bool = True) -> None: ... + +class PQArea4105(PQAreaPOLYGON): + def __init__(self, variant: int) -> None: ... + +class QVArea4105(QVAreaPOLYGON): + def __init__(self, variant: int) -> None: ... + +class PQVArea4105(BasePQVArea): + pq_area: PQArea4105 + qv_area: QVArea4105 + def __init__(self, variant: int, raise_merge_overlap: bool = True) -> None: ... diff --git a/stubs/pandapower-stubs/control/controller/DERController/QModels.pyi b/stubs/pandapower-stubs/control/controller/DERController/QModels.pyi new file mode 100644 index 0000000..2f84cdb --- /dev/null +++ b/stubs/pandapower-stubs/control/controller/DERController/QModels.pyi @@ -0,0 +1,47 @@ +from _typeshed import Incomplete + +import numpy as np + +from pandapower._typing import Float +from pandapower.control.controller.DERController.DERBasics import BaseModel, CosphiPCurve, CosphiVCurve, QVCurve + +class QModel(BaseModel): + def __init__(self, **kwargs) -> None: ... + def step(self, vm_pu=None, p_pu=None): ... + +class QModelConstQ(QModel): + q_pu: Incomplete + def __init__(self, q_pu) -> None: ... + def step(self, vm_pu=None, p_pu=None): ... + +class QModelCosphiVCurve(QModel): + cosphi_v_curve: CosphiVCurve + def __init__(self, cosphi_v_curve: dict[str, Incomplete] | CosphiVCurve) -> None: ... + def step(self, vm_pu, p_pu=None): ... # type: ignore[override] + +class QModelCosphiP(QModel): + cosphi: Float + q_setpoint_pu: np.float64 + def __init__(self, cosphi: Float) -> None: ... + def step(self, vm_pu=None, p_pu=None): ... + +class QModelCosphiSn(QModel): + cosphi: Float + def __init__(self, cosphi: Float = 0.2) -> None: ... + def step(self, vm_pu=None, p_pu=None): ... + +class QModelCosphiPQ(QModel): + cosphi: Float + q_setpoint_pu: np.float64 + def __init__(self, cosphi: Float) -> None: ... + def step(self, vm_pu=None, p_pu=None): ... + +class QModelCosphiPCurve(QModel): + cosphi_p_curve: CosphiPCurve + def __init__(self, cosphi_p_curve) -> None: ... + def step(self, vm_pu=None, p_pu=None): ... + +class QModelQVCurve(QModel): + qv_curve: QVCurve + def __init__(self, qv_curve: dict[str, Incomplete] | QVCurve) -> None: ... + def step(self, vm_pu, p_pu=None): ... # type: ignore[override] diff --git a/stubs/pandapower-stubs/control/controller/DERController/__init__.pyi b/stubs/pandapower-stubs/control/controller/DERController/__init__.pyi new file mode 100644 index 0000000..5e36a50 --- /dev/null +++ b/stubs/pandapower-stubs/control/controller/DERController/__init__.pyi @@ -0,0 +1,4 @@ +from .der_control import * +from .DERBasics import * +from .PQVAreas import * +from .QModels import * diff --git a/stubs/pandapower-stubs/control/controller/DERController/der_control.pyi b/stubs/pandapower-stubs/control/controller/DERController/der_control.pyi new file mode 100644 index 0000000..d87b9f4 --- /dev/null +++ b/stubs/pandapower-stubs/control/controller/DERController/der_control.pyi @@ -0,0 +1,33 @@ +from pandapower.auxiliary import pandapowerNet +from pandapower.control.controller.pq_control import PQController + +class DERController(PQController): + def __init__( + self, + net: pandapowerNet, + element_index, + element: str = "sgen", + q_model=None, + pqv_area=None, + saturate_sn_mva=..., + q_prio=True, + damping_coef=2, + max_p_error=1e-6, + max_q_error=1e-6, + pq_simultaneity_factor=1.0, + f_sizing=1.0, + data_source=None, + p_profile=None, + profile_from_name=False, + profile_scale=1.0, + in_service=True, + ts_absolute=True, + order=0, + level=0, + drop_same_existing_ctrl=False, + matching_params=None, + **kwargs, + ) -> None: ... + def time_step(self, net: pandapowerNet, time) -> None: ... + def is_converged(self, net: pandapowerNet) -> bool: ... + def control_step(self, net: pandapowerNet) -> None: ... diff --git a/stubs/pandapower-stubs/control/controller/DERController/der_control_plot.pyi b/stubs/pandapower-stubs/control/controller/DERController/der_control_plot.pyi new file mode 100644 index 0000000..ea7bae3 --- /dev/null +++ b/stubs/pandapower-stubs/control/controller/DERController/der_control_plot.pyi @@ -0,0 +1,16 @@ +from matplotlib.axes import Axes + +from pandapower._typing import Float, Int + +def plot_pq_area( + pq_area, + *, + title: str | None = None, + ax: Axes | None = None, + saturate_sn_pu: Float = ..., + circle_segment: Int = 90, + p_samples=None, + tex: bool = False, +) -> None: ... +def plot_qv_area(qv_area, title=None, ax: Axes | None = None, prune_to_flexibility=False, vm_samples=None, tex: bool = False): ... +def generate_circle_segment(center_x, center_y, radius, start, stop, step): ... diff --git a/stubs/pandapower-stubs/control/controller/characteristic_control.pyi b/stubs/pandapower-stubs/control/controller/characteristic_control.pyi index 1ea8b56..adbfb57 100644 --- a/stubs/pandapower-stubs/control/controller/characteristic_control.pyi +++ b/stubs/pandapower-stubs/control/controller/characteristic_control.pyi @@ -1,24 +1,27 @@ from _typeshed import Incomplete +import numpy as np + +from pandapower.auxiliary import pandapowerNet from pandapower.control.basic_controller import Controller class CharacteristicControl(Controller): - input_element: Incomplete + input_element: str input_element_index: Incomplete - output_element: Incomplete + output_element: str output_element_index: Incomplete characteristic_index: Incomplete - tol: Incomplete + tol: float applied: bool values: Incomplete def __init__( self, - net, - output_element, - output_variable, + net: pandapowerNet, + output_element: str, + output_variable: str, output_element_index, - input_element, - input_variable, + input_element: str, + input_variable: str, input_element_index, characteristic_index, tol: float = 0.001, @@ -26,9 +29,9 @@ class CharacteristicControl(Controller): order: int = 0, level: int = 0, drop_same_existing_ctrl: bool = False, - matching_params: Incomplete | None = None, + matching_params=None, **kwargs, ) -> None: ... - def initialize_control(self, net) -> None: ... - def is_converged(self, net): ... - def control_step(self, net) -> None: ... + def initialize_control(self, net: pandapowerNet) -> None: ... + def is_converged(self, net: pandapowerNet) -> bool | np.bool: ... + def control_step(self, net: pandapowerNet) -> None: ... diff --git a/stubs/pandapower-stubs/control/controller/pq_control.pyi b/stubs/pandapower-stubs/control/controller/pq_control.pyi new file mode 100644 index 0000000..f3d0608 --- /dev/null +++ b/stubs/pandapower-stubs/control/controller/pq_control.pyi @@ -0,0 +1,58 @@ +from _typeshed import Incomplete +from typing import Literal + +from pandapower.auxiliary import pandapowerNet +from pandapower.control.controller.const_control import ConstControl + +class PQController(ConstControl): + element_index: Incomplete + element: str + bus: Incomplete + p_mw: Incomplete + q_mvar: Incomplete + sn_mva: Incomplete + element_names: Incomplete + gen_type: Incomplete + element_in_service: Incomplete + + sign: Literal[1, -1] + pq_simultaneity_factor: Incomplete + + converter_sizing_pu: Incomplete + + data_source: Incomplete + profile_scale: Incomplete + p_profile: Incomplete + q_profile: Incomplete + ts_absolute: Incomplete + + max_p_error: Incomplete + max_q_error: Incomplete + + p_curtailment: Incomplete + + def __init__( + self, + net: pandapowerNet, + element_index, + element: str = "sgen", + max_p_error=0.0001, + max_q_error=0.0001, + pq_simultaneity_factor=1.0, + converter_sizing_pu=1.0, + data_source=None, + profile_scale=1.0, + in_service=True, + ts_absolute=True, + order=0, + level=0, + **kwargs, + ) -> None: ... + def set_p_profile(self, p_profile, profile_from_name: bool) -> None: ... + def set_q_profile(self, q_profile, profile_from_name: bool) -> None: ... + def read_profiles(self, time) -> None: ... + def write_to_net(self, net: pandapowerNet) -> None: ... + def finalize_control(self, net: pandapowerNet) -> None: ... + def calc_curtailment(self) -> None: ... + def limit_to_inverter_sizing(self, p_mw, q_mvar): ... + def initialize_control(self, net: pandapowerNet) -> None: ... diff --git a/stubs/pandapower-stubs/control/controller/shunt_control.pyi b/stubs/pandapower-stubs/control/controller/shunt_control.pyi new file mode 100644 index 0000000..dd61ebb --- /dev/null +++ b/stubs/pandapower-stubs/control/controller/shunt_control.pyi @@ -0,0 +1,37 @@ +from pandapower.auxiliary import pandapowerNet +from pandapower.control.basic_controller import Controller + +class ShuntController(Controller): + def __init__( + self, + net: pandapowerNet, + shunt_index, + bus_index=None, + tol=1e-3, + in_service=True, + check_step_bounds=True, + order=0, + level=0, + **kwargs, + ) -> None: ... + +class DiscreteShuntController(ShuntController): + def __init__( + self, + net: pandapowerNet, + shunt_index, + vm_set_pu, + bus_index=None, + tol=1e-3, + increment=1, + reset_at_init=False, + in_service=True, + check_step_bounds=True, + order=0, + level=0, + matching_params=None, + **kwargs, + ) -> None: ... + def initialize_control(self, net: pandapowerNet) -> None: ... + def control_step(self, net: pandapowerNet) -> None: ... + def is_converged(self, net: pandapowerNet) -> bool: ... diff --git a/stubs/pandapower-stubs/control/controller/station_control.pyi b/stubs/pandapower-stubs/control/controller/station_control.pyi new file mode 100644 index 0000000..1fbcae1 --- /dev/null +++ b/stubs/pandapower-stubs/control/controller/station_control.pyi @@ -0,0 +1,54 @@ +import numpy as np + +from pandapower.auxiliary import pandapowerNet +from pandapower.control.basic_controller import Controller + +class BinarySearchControl(Controller): + def __init__( + self, + net: pandapowerNet, + ctrl_in_service, + output_element, + output_variable, + output_element_index, + output_element_in_service, + output_values_distribution, + input_element, + input_variable, + input_element_index, + set_point, + voltage_ctrl, + bus_idx=None, + tol=0.001, + in_service=True, + order=0, + level=0, + drop_same_existing_ctrl=False, + matching_params=None, + **kwargs, + ) -> None: ... + def initialize_control(self, net: pandapowerNet) -> None: ... + def is_converged(self, net: pandapowerNet) -> bool | np.bool: ... + def control_step(self, net: pandapowerNet) -> None: ... + +class DroopControl(Controller): + def __init__( + self, + net: pandapowerNet, + q_droop_mvar, + bus_idx, + vm_set_pu, + controller_idx, + voltage_ctrl, + tol=1e-6, + in_service=True, + order=-1, + level=0, + drop_same_existing_ctrl=False, + matching_params=None, + vm_set_lb=None, + vm_set_ub=None, + **kwargs, + ) -> None: ... + def is_converged(self, net: pandapowerNet) -> bool | np.bool: ... + def control_step(self, net: pandapowerNet) -> None: ... diff --git a/stubs/pandapower-stubs/control/controller/trafo/ContinuousTapControl.pyi b/stubs/pandapower-stubs/control/controller/trafo/ContinuousTapControl.pyi index 12f4729..f19c05c 100644 --- a/stubs/pandapower-stubs/control/controller/trafo/ContinuousTapControl.pyi +++ b/stubs/pandapower-stubs/control/controller/trafo/ContinuousTapControl.pyi @@ -1,5 +1,8 @@ from _typeshed import Incomplete +import numpy as np + +from pandapower.auxiliary import pandapowerNet from pandapower.control.controller.trafo_control import TrafoController class ContinuousTapControl(TrafoController): @@ -7,12 +10,12 @@ class ContinuousTapControl(TrafoController): vm_set_pu: Incomplete def __init__( self, - net, - tid, + net: pandapowerNet, + element_index, vm_set_pu, - tol: float = 0.001, + tol: float = 1e-3, side: str = "lv", - trafotype: str = "2W", + element: str = "trafo", in_service: bool = True, check_tap_bounds: bool = True, level: int = 0, @@ -21,7 +24,7 @@ class ContinuousTapControl(TrafoController): matching_params: Incomplete | None = None, **kwargs, ) -> None: ... - def initialize_control(self, net) -> None: ... + def initialize_control(self, net: pandapowerNet) -> None: ... tap_pos: Incomplete - def control_step(self, net) -> None: ... - def is_converged(self, net): ... + def control_step(self, net: pandapowerNet) -> None: ... + def is_converged(self, net: pandapowerNet) -> bool | np.bool: ... diff --git a/stubs/pandapower-stubs/control/controller/trafo/DiscreteTapControl.pyi b/stubs/pandapower-stubs/control/controller/trafo/DiscreteTapControl.pyi index a3f8fdc..2f9e8fd 100644 --- a/stubs/pandapower-stubs/control/controller/trafo/DiscreteTapControl.pyi +++ b/stubs/pandapower-stubs/control/controller/trafo/DiscreteTapControl.pyi @@ -1,5 +1,6 @@ from _typeshed import Incomplete +from pandapower.auxiliary import pandapowerNet from pandapower.control.controller.trafo_control import TrafoController class DiscreteTapControl(TrafoController): @@ -8,40 +9,43 @@ class DiscreteTapControl(TrafoController): vm_delta_pu: Incomplete def __init__( self, - net, - tid, + net: pandapowerNet, + element_index, vm_lower_pu, vm_upper_pu, side: str = "lv", - trafotype: str = "2W", - tol: float = 0.001, + element: str = "trafo", + tol: float = 1e-3, in_service: bool = True, + hunting_limit=None, level: int = 0, order: int = 0, drop_same_existing_ctrl: bool = False, - matching_params: Incomplete | None = None, + matching_params=None, **kwargs, ) -> None: ... @classmethod def from_tap_step_percent( cls, - net, - tid, + net: pandapowerNet, + element_index, vm_set_pu, side: str = "lv", - trafotype: str = "2W", - tol: float = 0.001, + element: str = "trafo", + tol: float = 1e-3, in_service: bool = True, + hunting_limit=None, + level: int = 0, order: int = 0, drop_same_existing_ctrl: bool = False, - matching_params: Incomplete | None = None, + matching_params=None, **kwargs, ): ... @property def vm_set_pu(self): ... @vm_set_pu.setter def vm_set_pu(self, value) -> None: ... - def initialize_control(self, net) -> None: ... + def initialize_control(self, net: pandapowerNet) -> None: ... tap_pos: Incomplete - def control_step(self, net) -> None: ... - def is_converged(self, net): ... + def control_step(self, net: pandapowerNet) -> None: ... + def is_converged(self, net: pandapowerNet): ... diff --git a/stubs/pandapower-stubs/control/controller/trafo/TapDependentImpedance.pyi b/stubs/pandapower-stubs/control/controller/trafo/TapDependentImpedance.pyi index c747765..a927482 100644 --- a/stubs/pandapower-stubs/control/controller/trafo/TapDependentImpedance.pyi +++ b/stubs/pandapower-stubs/control/controller/trafo/TapDependentImpedance.pyi @@ -1,17 +1,17 @@ from _typeshed import Incomplete +from pandapower.auxiliary import pandapowerNet from pandapower.control.controller.characteristic_control import CharacteristicControl -from pandapower.control.util.characteristic import Characteristic as Characteristic class TapDependentImpedance(CharacteristicControl): - restore: Incomplete + restore: bool initial_values: Incomplete def __init__( self, - net, - transformer_index, + net: pandapowerNet, + element_index, characteristic_index, - trafotable: str = "trafo", + element: str = "trafo", output_variable: str = "vk_percent", tol: float = 0.001, restore: bool = True, @@ -19,8 +19,8 @@ class TapDependentImpedance(CharacteristicControl): order: int = 0, level: int = 0, drop_same_existing_ctrl: bool = False, - matching_params: Incomplete | None = None, + matching_params=None, **kwargs, ) -> None: ... - def initialize_control(self, net) -> None: ... - def finalize_control(self, net) -> None: ... + def initialize_control(self, net: pandapowerNet) -> None: ... + def finalize_control(self, net: pandapowerNet) -> None: ... diff --git a/stubs/pandapower-stubs/control/controller/trafo/USetTapControl.pyi b/stubs/pandapower-stubs/control/controller/trafo/USetTapControl.pyi deleted file mode 100644 index 38d9f69..0000000 --- a/stubs/pandapower-stubs/control/controller/trafo/USetTapControl.pyi +++ /dev/null @@ -1,4 +0,0 @@ -from pandapower.control.controller.characteristic_control import CharacteristicControl - -class USetTapControl(CharacteristicControl): - def __init__(self, **kwargs) -> None: ... diff --git a/stubs/pandapower-stubs/control/controller/trafo/VmSetTapControl.pyi b/stubs/pandapower-stubs/control/controller/trafo/VmSetTapControl.pyi index 79ea7b6..7365c89 100644 --- a/stubs/pandapower-stubs/control/controller/trafo/VmSetTapControl.pyi +++ b/stubs/pandapower-stubs/control/controller/trafo/VmSetTapControl.pyi @@ -1,12 +1,10 @@ -from _typeshed import Incomplete - +from pandapower.auxiliary import pandapowerNet from pandapower.control.controller.characteristic_control import CharacteristicControl -from pandapower.control.util.characteristic import Characteristic as Characteristic class VmSetTapControl(CharacteristicControl): def __init__( self, - net, + net: pandapowerNet, controller_index, characteristic_index, variable: str = "p_hv_mw", @@ -15,6 +13,6 @@ class VmSetTapControl(CharacteristicControl): order: int = 0, level: int = 0, drop_same_existing_ctrl: bool = False, - matching_params: Incomplete | None = None, + matching_params=None, **kwargs, ) -> None: ... diff --git a/stubs/pandapower-stubs/control/controller/trafo_control.pyi b/stubs/pandapower-stubs/control/controller/trafo_control.pyi index 9dbe6e1..58375e9 100644 --- a/stubs/pandapower-stubs/control/controller/trafo_control.pyi +++ b/stubs/pandapower-stubs/control/controller/trafo_control.pyi @@ -1,14 +1,26 @@ from _typeshed import Incomplete +from pandapower.auxiliary import pandapowerNet from pandapower.control.basic_controller import Controller class TrafoController(Controller): - trafotype: Incomplete - tid: Incomplete + element: Incomplete + element_index: Incomplete tol: Incomplete + trafobus: Incomplete | None def __init__( - self, net, tid, side, tol, in_service, trafotype, level: int = 0, order: int = 0, recycle: bool = True, **kwargs + self, + net: pandapowerNet, + element_index, + side, + tol, + in_service: bool, + element, + level: int = 0, + order: int = 0, + recycle: bool = True, + **kwargs, ) -> None: ... - def initialize_control(self, net) -> None: ... - def nothing_to_do(self, net): ... - def set_recycle(self, net) -> None: ... + def initialize_control(self, net: pandapowerNet) -> None: ... + def nothing_to_do(self, net: pandapowerNet) -> bool: ... + def set_recycle(self, net: pandapowerNet) -> None: ... diff --git a/stubs/pandapower-stubs/control/util/auxiliary.pyi b/stubs/pandapower-stubs/control/util/auxiliary.pyi index 67efdd0..64f6bd0 100644 --- a/stubs/pandapower-stubs/control/util/auxiliary.pyi +++ b/stubs/pandapower-stubs/control/util/auxiliary.pyi @@ -1,19 +1,21 @@ -from _typeshed import Incomplete from typing import Any from numpy.typing import DTypeLike, NDArray +from pandapower.auxiliary import pandapowerNet + 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=[]): ... +def get_controller_index_by_type(net: pandapowerNet, ctrl_type, idx=[]): ... +def get_controller_index_by_typename(net: pandapowerNet, typename, idx=[], case_sensitive: bool = False): ... +def get_controller_index(net: pandapowerNet, ctrl_type=None, parameters=None, idx=[]): ... def log_same_type_existing_controllers( - net, this_ctrl_type, index: Incomplete | None = None, matching_params: Incomplete | None = None, **kwargs + net: pandapowerNet, this_ctrl_type, index=None, matching_params=None, **kwargs ) -> None: ... def drop_same_type_existing_controllers( - net, this_ctrl_type, index: Incomplete | None = None, matching_params: Incomplete | None = None, **kwargs -) -> None: ... -def plot_characteristic( - characteristic, start, stop, num: int = 20, xlabel: Incomplete | None = None, ylabel: Incomplete | None = None + net: pandapowerNet, this_ctrl_type, index=None, matching_params=None, **kwargs ) -> None: ... -def create_trafo_characteristics(net, trafotable, trafo_index, variable, x_points, y_points) -> None: ... +def plot_characteristic(characteristic, start, stop, num: int = 20, xlabel=None, ylabel=None) -> None: ... +def create_trafo_characteristic_object(net: pandapowerNet) -> None: ... +def _create_trafo_characteristics(net: pandapowerNet, trafotable, trafo_index, variable, x_points, y_points) -> None: ... +def create_shunt_characteristic_object(net: pandapowerNet) -> None: ... +def create_q_capability_curve_characteristics_object(net: pandapowerNet) -> None: ... diff --git a/stubs/pandapower-stubs/control/util/characteristic.pyi b/stubs/pandapower-stubs/control/util/characteristic.pyi index f50648f..623bdf7 100644 --- a/stubs/pandapower-stubs/control/util/characteristic.pyi +++ b/stubs/pandapower-stubs/control/util/characteristic.pyi @@ -1,26 +1,63 @@ from _typeshed import Incomplete -from builtins import object as object +from collections.abc import Iterable +from typing import Any +from typing_extensions import Literal, Self +import numpy as np +from numpy.typing import ArrayLike +from scipy.interpolate import PchipInterpolator, interp1d # type: ignore[import-untyped] + +from pandapower._typing import Float, Int +from pandapower.auxiliary import pandapowerNet from pandapower.io_utils import JSONSerializableClass class Characteristic(JSONSerializableClass): x_vals: Incomplete y_vals: Incomplete - index: Incomplete - def __init__(self, net, x_values, y_values, **kwargs) -> None: ... + index: np.int64 + def __init__(self, net: pandapowerNet, x_values, y_values, table: str = "characteristic", **kwargs) -> None: ... @classmethod - def from_points(cls, net, points, **kwargs): ... + def from_points(cls, net: pandapowerNet, points: Iterable[Iterable[Float]], **kwargs) -> Self: ... @classmethod - def from_gradient(cls, net, zero_crossing, gradient, y_min, y_max, **kwargs): ... - def diff(self, x, measured): ... - def satisfies(self, x, measured, epsilon): ... - def __call__(self, x): ... + def from_gradient(cls, net: pandapowerNet, zero_crossing, gradient, y_min, y_max, **kwargs): ... + def diff(self, x: Float, measured: Float): ... + def satisfies(self, x: Float, measured: Float, epsilon: Float) -> bool: ... + def __call__(self, x: Float) -> np.float64: ... class SplineCharacteristic(Characteristic): - json_excludes: Incomplete - fill_value: Incomplete - kind: Incomplete - def __init__(self, net, x_values, y_values, kind: str = "quadratic", fill_value: str = "extrapolate", **kwargs) -> None: ... + json_excludes: list[str] + kwargs: dict[str, Any] + interpolator_kind: Literal["interp1d", "Pchip"] + def __init__( + self, + net: pandapowerNet, + x_values, + y_values, + interpolator_kind: Literal["interp1d", "Pchip"] = "interp1d", + table: str = "characteristic", + **kwargs, + ) -> None: ... + @property + def interpolator(self) -> interp1d | PchipInterpolator: ... + def __call__(self, x: Float) -> np.float64: ... + +class LogSplineCharacteristic(SplineCharacteristic): + def __init__(self, net: pandapowerNet, x_values, y_values, **kwargs) -> None: ... @property - def interpolator(self): ... - def __call__(self, x): ... + def x_vals(self): ... + @x_vals.setter + def x_vals(self, x_values) -> None: ... + @property + def y_vals(self): ... + @y_vals.setter + def y_vals(self, y_values) -> None: ... + def __call__(self, x: Float) -> np.float64: ... + +def default_interp1d( + x, + y, + kind: str | Int = "quadratic", + bounds_error: bool = False, + fill_value: ArrayLike | Literal["extrapolate"] = "extrapolate", + **kwargs, +) -> interp1d: ... diff --git a/stubs/pandapower-stubs/control/util/diagnostic.pyi b/stubs/pandapower-stubs/control/util/diagnostic.pyi index a0fa8f3..8720961 100644 --- a/stubs/pandapower-stubs/control/util/diagnostic.pyi +++ b/stubs/pandapower-stubs/control/util/diagnostic.pyi @@ -1,2 +1,6 @@ -def control_diagnostic(net, respect_in_service: bool = True) -> None: ... -def trafo_characteristics_diagnostic(net) -> None: ... +from pandapower.auxiliary import pandapowerNet + +def control_diagnostic(net: pandapowerNet, respect_in_service: bool = True) -> None: ... +def trafo_characteristic_table_diagnostic(net: pandapowerNet) -> bool: ... +def shunt_characteristic_table_diagnostic(net: pandapowerNet) -> bool: ... +def q_capability_curve_table_diagnostic(net: pandapowerNet, element: str) -> bool: ... diff --git a/stubs/pandapower-stubs/estimation/ppc_conversion.pyi b/stubs/pandapower-stubs/estimation/ppc_conversion.pyi index 9234dc9..1956b19 100644 --- a/stubs/pandapower-stubs/estimation/ppc_conversion.pyi +++ b/stubs/pandapower-stubs/estimation/ppc_conversion.pyi @@ -1,12 +1,9 @@ from collections import UserDict from collections.abc import Collection -from typing import ( - Any, - Any as csr_matrix, # scipy.sparse.csr_matrix - Literal, -) +from typing import Any, Literal import numpy as np +from scipy.sparse import csr_matrix # type: ignore[import-untyped] from pandapower._typing import Array1D, Array2D from pandapower.auxiliary import pandapowerNet diff --git a/stubs/pandapower-stubs/pypower/_compat.pyi b/stubs/pandapower-stubs/pypower/_compat.pyi deleted file mode 100644 index 8c69d1a..0000000 --- a/stubs/pandapower-stubs/pypower/_compat.pyi +++ /dev/null @@ -1,3 +0,0 @@ -from typing import Final - -PY2: Final = False diff --git a/stubs/pandapower-stubs/pypower/add_userfcn.pyi b/stubs/pandapower-stubs/pypower/add_userfcn.pyi index 5bad823..13dfc23 100644 --- a/stubs/pandapower-stubs/pypower/add_userfcn.pyi +++ b/stubs/pandapower-stubs/pypower/add_userfcn.pyi @@ -1,3 +1 @@ -from _typeshed import Incomplete - -def add_userfcn(ppc, stage, fcn, args: Incomplete | None = None, allow_multiple: bool = False): ... +def add_userfcn(ppc, stage, fcn, args=None, allow_multiple: bool = False): ... diff --git a/stubs/pandapower-stubs/pypower/bustypes.pyi b/stubs/pandapower-stubs/pypower/bustypes.pyi index 7123a4b..75a5a17 100644 --- a/stubs/pandapower-stubs/pypower/bustypes.pyi +++ b/stubs/pandapower-stubs/pypower/bustypes.pyi @@ -1,4 +1,6 @@ import numpy as np -from numpy.typing import NDArray -def bustypes(bus, gen) -> tuple[NDArray[np.intp], NDArray[np.intp], NDArray[np.intp]]: ... +from pandapower._typing import Array1D + +def bustypes(bus, gen, vsc=None) -> tuple[Array1D[np.intp], Array1D[np.intp], Array1D[np.intp]]: ... +def bustypes_dc(bus_dc) -> tuple[Array1D[np.intp], Array1D[np.intp], Array1D[np.intp]]: ... diff --git a/stubs/pandapower-stubs/pypower/dIbr_dV.pyi b/stubs/pandapower-stubs/pypower/dIbr_dV.pyi index 8e9aeea..0206ad2 100644 --- a/stubs/pandapower-stubs/pypower/dIbr_dV.pyi +++ b/stubs/pandapower-stubs/pypower/dIbr_dV.pyi @@ -1 +1,2 @@ def dIbr_dV(branch, Yf, Yt, V): ... +def dIbr_dV_new(branch, Yf, Yt, V): ... diff --git a/stubs/pandapower-stubs/pypower/dcopf_solver.pyi b/stubs/pandapower-stubs/pypower/dcopf_solver.pyi index 524bda7..231a432 100644 --- a/stubs/pandapower-stubs/pypower/dcopf_solver.pyi +++ b/stubs/pandapower-stubs/pypower/dcopf_solver.pyi @@ -1,3 +1 @@ -from _typeshed import Incomplete - -def dcopf_solver(om, ppopt, out_opt: Incomplete | None = None): ... +def dcopf_solver(om, ppopt, out_opt=None): ... diff --git a/stubs/pandapower-stubs/pypower/fdpf.pyi b/stubs/pandapower-stubs/pypower/fdpf.pyi index d45349a..5af7e0f 100644 --- a/stubs/pandapower-stubs/pypower/fdpf.pyi +++ b/stubs/pandapower-stubs/pypower/fdpf.pyi @@ -1,3 +1 @@ -from _typeshed import Incomplete - -def fdpf(Ybus, Sbus, V0, Bp, Bpp, ref, pv, pq, ppopt: Incomplete | None = None): ... +def fdpf(Ybus, Sbus, V0, Bp, Bpp, ref, pv, pq, ppopt=None): ... diff --git a/stubs/pandapower-stubs/pypower/gausspf.pyi b/stubs/pandapower-stubs/pypower/gausspf.pyi index 9babe31..1b60cb0 100644 --- a/stubs/pandapower-stubs/pypower/gausspf.pyi +++ b/stubs/pandapower-stubs/pypower/gausspf.pyi @@ -1,3 +1 @@ -from _typeshed import Incomplete - -def gausspf(Ybus, Sbus, V0, ref, pv, pq, ppopt: Incomplete | None = None): ... +def gausspf(Ybus, Sbus, V0, ref, pv, pq, ppopt=None): ... diff --git a/stubs/pandapower-stubs/pypower/idx_area.pyi b/stubs/pandapower-stubs/pypower/idx_area.pyi index 67ef268..9ca717c 100644 --- a/stubs/pandapower-stubs/pypower/idx_area.pyi +++ b/stubs/pandapower-stubs/pypower/idx_area.pyi @@ -1,2 +1,4 @@ -AREA_I: int -PRICE_REF_BUS: int +from typing import Final + +AREA_I: Final = 0 +PRICE_REF_BUS: Final = 1 diff --git a/stubs/pandapower-stubs/pypower/idx_brch.pyi b/stubs/pandapower-stubs/pypower/idx_brch.pyi index 9ecee15..f5b8d29 100644 --- a/stubs/pandapower-stubs/pypower/idx_brch.pyi +++ b/stubs/pandapower-stubs/pypower/idx_brch.pyi @@ -1,24 +1,33 @@ -F_BUS: int -T_BUS: int -BR_R: int -BR_X: int -BR_B: int -RATE_A: int -RATE_B: int -RATE_C: int -TAP: int -SHIFT: int -BR_STATUS: int -ANGMIN: int -ANGMAX: int -PF: int -QF: int -PT: int -QT: int -MU_SF: int -MU_ST: int -MU_ANGMIN: int -MU_ANGMAX: int -BR_R_ASYM: int -BR_X_ASYM: int -branch_cols: int +from typing import Final + +F_BUS: Final = 0 +T_BUS: Final = 1 +BR_R: Final = 2 +BR_X: Final = 3 +BR_B: Final = 4 +RATE_A: Final = 5 +RATE_B: Final = 6 +RATE_C: Final = 7 +TAP: Final = 8 +SHIFT: Final = 9 +BR_STATUS: Final = 10 +ANGMIN: Final = 11 +ANGMAX: Final = 12 + +PF: Final = 13 +QF: Final = 14 +PT: Final = 15 +QT: Final = 16 + +MU_SF: Final = 17 +MU_ST: Final = 18 +MU_ANGMIN: Final = 19 +MU_ANGMAX: Final = 20 + +BR_R_ASYM: Final = 21 +BR_X_ASYM: Final = 22 +BR_G: Final = 23 +BR_G_ASYM: Final = 24 +BR_B_ASYM: Final = 25 + +branch_cols: Final = 26 diff --git a/stubs/pandapower-stubs/pypower/idx_brch_dc.pyi b/stubs/pandapower-stubs/pypower/idx_brch_dc.pyi new file mode 100644 index 0000000..d3ef109 --- /dev/null +++ b/stubs/pandapower-stubs/pypower/idx_brch_dc.pyi @@ -0,0 +1,22 @@ +from typing import Final + +DC_F_BUS: Final = 0 +DC_T_BUS: Final = 1 +DC_BR_R: Final = 2 +DC_BR_G: Final = 3 +DC_RATE_A: Final = 4 +DC_RATE_B: Final = 5 +DC_RATE_C: Final = 6 +DC_BR_STATUS: Final = 7 + +DC_PF: Final = 8 +DC_IF: Final = 9 +DC_PT: Final = 10 +DC_IT: Final = 11 + +DC_BR_R_ASYM: Final = 12 +DC_BR_X_ASYM: Final = 13 + +DC_TDPF: Final = 14 + +branch_dc_cols: Final = 15 diff --git a/stubs/pandapower-stubs/pypower/idx_brch_sc.pyi b/stubs/pandapower-stubs/pypower/idx_brch_sc.pyi index 488c675..7f54863 100644 --- a/stubs/pandapower-stubs/pypower/idx_brch_sc.pyi +++ b/stubs/pandapower-stubs/pypower/idx_brch_sc.pyi @@ -1,13 +1,27 @@ -IKSS_F: int -IKSS_T: int -ITH_F: int -ITH_T: int -IP_F: int -IP_T: int -IK_F: int -IK_T: int -IB_F: int -IB_T: int -K_T: int -K_ST: int -branch_cols_sc: int +from typing import Final + +IKSS_F: Final[int] # = start + 0 +IKSS_T: Final[int] # = start + 1 +ITH_F: Final[int] # = start + 2 +ITH_T: Final[int] # = start + 3 +IP_F: Final[int] # = start + 4 +IP_T: Final[int] # = start + 5 +IK_F: Final[int] # = start + 6 +IK_T: Final[int] # = start + 7 +IB_F: Final[int] # = start + 8 +IB_T: Final[int] # = start + 9 +K_T: Final[int] # = start + 10 +K_ST: Final[int] # = start + 11 + +PKSS_F: Final[int] # = start + 12 +QKSS_F: Final[int] # = start + 13 +PKSS_T: Final[int] # = start + 14 +QKSS_T: Final[int] # = start + 15 +VKSS_MAGN_F: Final[int] # = start + 16 +VKSS_MAGN_T: Final[int] # = start + 17 +VKSS_ANGLE_F: Final[int] # = start + 18 +VKSS_ANGLE_T: Final[int] # = start + 19 +IKSS_ANGLE_F: Final[int] # = start + 20 +IKSS_ANGLE_T: Final[int] # = start + 21 + +branch_cols_sc: Final = 22 diff --git a/stubs/pandapower-stubs/pypower/idx_brch_tdpf.pyi b/stubs/pandapower-stubs/pypower/idx_brch_tdpf.pyi index 90c1ea1..4eafd04 100644 --- a/stubs/pandapower-stubs/pypower/idx_brch_tdpf.pyi +++ b/stubs/pandapower-stubs/pypower/idx_brch_tdpf.pyi @@ -1,17 +1,20 @@ -TDPF: int -BR_R_REF_OHM_PER_KM: int -BR_LENGTH_KM: int -RATE_I_KA: int -T_START_C: int -T_REF_C: int -T_AMBIENT_C: int -ALPHA: int -WIND_SPEED_MPS: int -WIND_ANGLE_DEGREE: int -SOLAR_RADIATION_W_PER_SQ_M: int -GAMMA: int -EPSILON: int -R_THETA: int -OUTER_DIAMETER_M: int -MC_JOULE_PER_M_K: int -branch_cols_tdpf: int +from typing import Final + +TDPF: Final[int] # = start + 0 +BR_R_REF_OHM_PER_KM: Final[int] # = start + 1 +BR_LENGTH_KM: Final[int] # = start + 3 +RATE_I_KA: Final[int] # = start + 4 +T_START_C: Final[int] # = start + 5 +T_REF_C: Final[int] # = start + 6 +T_AMBIENT_C: Final[int] # = start + 7 +ALPHA: Final[int] # = start + 8 +WIND_SPEED_MPS: Final[int] # = start + 9 +WIND_ANGLE_DEGREE: Final[int] # = start + 10 +SOLAR_RADIATION_W_PER_SQ_M: Final[int] # = start + 11 +GAMMA: Final[int] # = start + 12 +EPSILON: Final[int] # = start + 13 +R_THETA: Final[int] # = start + 14 +OUTER_DIAMETER_M: Final[int] # = start + 15 +MC_JOULE_PER_M_K: Final[int] # = start + 16 + +branch_cols_tdpf: Final = 17 diff --git a/stubs/pandapower-stubs/pypower/idx_bus.pyi b/stubs/pandapower-stubs/pypower/idx_bus.pyi index e388b04..d93f411 100644 --- a/stubs/pandapower-stubs/pypower/idx_bus.pyi +++ b/stubs/pandapower-stubs/pypower/idx_bus.pyi @@ -1,25 +1,31 @@ -PQ: int -PV: int -REF: int -NONE: int -BUS_I: int -BUS_TYPE: int -PD: int -QD: int -GS: int -BS: int -BUS_AREA: int -VM: int -VA: int -BASE_KV: int -ZONE: int -VMAX: int -VMIN: int -LAM_P: int -LAM_Q: int -MU_VMAX: int -MU_VMIN: int -CID: int -CZD: int -SL_FAC: int -bus_cols: int +from typing import Final + +PQ: Final = 1 +PV: Final = 2 +REF: Final = 3 +NONE: Final = 4 + +BUS_I: Final = 0 +BUS_TYPE: Final = 1 +PD: Final = 2 +QD: Final = 3 +GS: Final = 4 +BS: Final = 5 +BUS_AREA: Final = 6 +VM: Final = 7 +VA: Final = 8 +BASE_KV: Final = 9 +ZONE: Final = 10 +VMAX: Final = 11 +VMIN: Final = 12 + +LAM_P: Final = 13 +LAM_Q: Final = 14 +MU_VMAX: Final = 15 +MU_VMIN: Final = 16 + +CID: Final = 13 +CZD: Final = 14 +SL_FAC: Final = 15 + +bus_cols: Final = 16 diff --git a/stubs/pandapower-stubs/pypower/idx_bus_dc.pyi b/stubs/pandapower-stubs/pypower/idx_bus_dc.pyi new file mode 100644 index 0000000..cf6ad38 --- /dev/null +++ b/stubs/pandapower-stubs/pypower/idx_bus_dc.pyi @@ -0,0 +1,20 @@ +from typing import Final + +DC_REF: Final = 0 +DC_B2B: Final = 1 +DC_P: Final = 2 +DC_NONE: Final = 3 + +DC_BUS_I: Final = 0 +DC_BUS_TYPE: Final = 1 +DC_PD: Final = 2 +DC_GS: Final = 3 +DC_BUS_AREA: Final = 4 +DC_VM: Final = 5 +DC_BASE_KV: Final = 6 +DC_ZONE: Final = 7 +DC_VMAX: Final = 8 +DC_VMIN: Final = 9 +DC_SL_FAC: Final = 10 + +dc_bus_cols: Final = 11 diff --git a/stubs/pandapower-stubs/pypower/idx_bus_sc.pyi b/stubs/pandapower-stubs/pypower/idx_bus_sc.pyi index 2b29162..8e5ad93 100644 --- a/stubs/pandapower-stubs/pypower/idx_bus_sc.pyi +++ b/stubs/pandapower-stubs/pypower/idx_bus_sc.pyi @@ -1,23 +1,32 @@ -R_EQUIV: int -X_EQUIV: int -KAPPA: int -M: int -C_MIN: int -C_MAX: int -IKSS1: int -IKSS2: int -IKCV: int -IP: int -IB: int -ITH: int -IK: int -R_EQUIV_OHM: int -X_EQUIV_OHM: int -K_G: int -K_SG: int -V_G: int -PS_TRAFO_IX: int -GS_P: int -BS_P: int -SKSS: int -bus_cols_sc: int +from typing import Final + +R_EQUIV: Final[int] # = start + 0 +X_EQUIV: Final[int] # = start + 1 +KAPPA: Final[int] # = start + 2 +M: Final[int] # = start + 3 +C_MIN: Final[int] # = start + 4 +C_MAX: Final[int] # = start + 5 +IKSS1: Final[int] # = start + 6 +IKSS2: Final[int] # = start + 7 +IKCV: Final[int] # = start + 8 +IP: Final[int] # = start + 9 +IB: Final[int] # = start + 10 +ITH: Final[int] # = start + 11 +IK: Final[int] # = start + 12 +R_EQUIV_OHM: Final[int] # = start + 13 +X_EQUIV_OHM: Final[int] # = start + 14 +K_G: Final[int] # = start + 15 +K_SG: Final[int] # = start + 16 +V_G: Final[int] # = start + 17 +PS_TRAFO_IX: Final[int] # = start + 18 +GS_P: Final[int] # = start + 19 +BS_P: Final[int] # = start + 20 +GS_GEN: Final[int] # = start + 21 +BS_GEN: Final[int] # = start + 22 +SKSS: Final[int] # = start + 23 + +PHI_IKSS1_DEGREE: Final[int] # = start + 24 +PHI_IKSS2_DEGREE: Final[int] # = start + 25 +PHI_IKCV_DEGREE: Final[int] # = start + 26 + +bus_cols_sc: Final = 27 diff --git a/stubs/pandapower-stubs/pypower/idx_cost.pyi b/stubs/pandapower-stubs/pypower/idx_cost.pyi index da99c51..3bebfff 100644 --- a/stubs/pandapower-stubs/pypower/idx_cost.pyi +++ b/stubs/pandapower-stubs/pypower/idx_cost.pyi @@ -1,7 +1,10 @@ -PW_LINEAR: int -POLYNOMIAL: int -MODEL: int -STARTUP: int -SHUTDOWN: int -NCOST: int -COST: int +from typing import Final + +PW_LINEAR: Final = 1 +POLYNOMIAL: Final = 2 + +MODEL: Final = 0 +STARTUP: Final = 1 +SHUTDOWN: Final = 2 +NCOST: Final = 3 +COST: Final = 4 diff --git a/stubs/pandapower-stubs/pypower/idx_gen.pyi b/stubs/pandapower-stubs/pypower/idx_gen.pyi index a0700bd..fbd686b 100644 --- a/stubs/pandapower-stubs/pypower/idx_gen.pyi +++ b/stubs/pandapower-stubs/pypower/idx_gen.pyi @@ -1,26 +1,32 @@ -GEN_BUS: int -PG: int -QG: int -QMAX: int -QMIN: int -VG: int -MBASE: int -GEN_STATUS: int -PMAX: int -PMIN: int -PC1: int -PC2: int -QC1MIN: int -QC1MAX: int -QC2MIN: int -QC2MAX: int -RAMP_AGC: int -RAMP_10: int -RAMP_30: int -RAMP_Q: int -APF: int -MU_PMAX: int -MU_PMIN: int -MU_QMAX: int -MU_QMIN: int -SL_FAC: int +from typing import Final + +GEN_BUS: Final = 0 +PG: Final = 1 +QG: Final = 2 +QMAX: Final = 3 +QMIN: Final = 4 +VG: Final = 5 +MBASE: Final = 6 +GEN_STATUS: Final = 7 +PMAX: Final = 8 +PMIN: Final = 9 +PC1: Final = 10 +PC2: Final = 11 +QC1MIN: Final = 12 +QC1MAX: Final = 13 +QC2MIN: Final = 14 +QC2MAX: Final = 15 +RAMP_AGC: Final = 16 +RAMP_10: Final = 17 +RAMP_30: Final = 18 +RAMP_Q: Final = 19 +APF: Final = 20 + +MU_PMAX: Final = 21 +MU_PMIN: Final = 22 +MU_QMAX: Final = 23 +MU_QMIN: Final = 24 + +SL_FAC: Final = 25 + +gen_cols: Final = 26 diff --git a/stubs/pandapower-stubs/pypower/idx_ssc.pyi b/stubs/pandapower-stubs/pypower/idx_ssc.pyi new file mode 100644 index 0000000..a902d75 --- /dev/null +++ b/stubs/pandapower-stubs/pypower/idx_ssc.pyi @@ -0,0 +1,14 @@ +from typing import Final + +SSC_BUS: Final = 0 +SSC_INTERNAL_BUS: Final = 1 +SSC_R: Final = 2 +SSC_X: Final = 3 +SSC_SET_VM_PU: Final = 4 +SSC_STATUS: Final = 5 +SSC_CONTROLLABLE: Final = 6 +SSC_X_CONTROL_VA: Final = 7 +SSC_X_CONTROL_VM: Final = 8 +SSC_Q: Final = 9 + +ssc_cols: Final = 10 diff --git a/stubs/pandapower-stubs/pypower/idx_svc.pyi b/stubs/pandapower-stubs/pypower/idx_svc.pyi new file mode 100644 index 0000000..59408ca --- /dev/null +++ b/stubs/pandapower-stubs/pypower/idx_svc.pyi @@ -0,0 +1,16 @@ +from typing import Final + +SVC_BUS: Final = 0 +SVC_X_L: Final = 1 +SVC_X_CVAR: Final = 2 +SVC_SET_VM_PU: Final = 3 +SVC_THYRISTOR_FIRING_ANGLE: Final = 4 +SVC_STATUS: Final = 5 +SVC_CONTROLLABLE: Final = 6 +SVC_MIN_FIRING_ANGLE: Final = 7 +SVC_MAX_FIRING_ANGLE: Final = 8 + +SVC_Q: Final = 9 +SVC_X_PU: Final = 10 + +svc_cols: Final = 11 diff --git a/stubs/pandapower-stubs/pypower/idx_tcsc.pyi b/stubs/pandapower-stubs/pypower/idx_tcsc.pyi new file mode 100644 index 0000000..3254ebf --- /dev/null +++ b/stubs/pandapower-stubs/pypower/idx_tcsc.pyi @@ -0,0 +1,23 @@ +from typing import Final + +TCSC_F_BUS: Final = 0 +TCSC_T_BUS: Final = 1 +TCSC_X_L: Final = 2 +TCSC_X_CVAR: Final = 3 +TCSC_SET_P: Final = 4 +TCSC_THYRISTOR_FIRING_ANGLE: Final = 5 +TCSC_STATUS: Final = 6 +TCSC_CONTROLLABLE: Final = 7 +TCSC_MIN_FIRING_ANGLE: Final = 8 +TCSC_MAX_FIRING_ANGLE: Final = 9 + +TCSC_PF: Final = 10 +TCSC_QF: Final = 11 +TCSC_PT: Final = 12 +TCSC_QT: Final = 13 + +TCSC_IF: Final = 14 +TCSC_IT: Final = 15 +TCSC_X_PU: Final = 16 + +tcsc_cols: Final = 17 diff --git a/stubs/pandapower-stubs/pypower/idx_vsc.pyi b/stubs/pandapower-stubs/pypower/idx_vsc.pyi new file mode 100644 index 0000000..38c46c0 --- /dev/null +++ b/stubs/pandapower-stubs/pypower/idx_vsc.pyi @@ -0,0 +1,28 @@ +from typing import Final + +VSC_MODE_AC_V: Final = 0 +VSC_MODE_AC_Q: Final = 1 +VSC_MODE_AC_SL: Final = 2 +VSC_MODE_DC_V: Final = 0 +VSC_MODE_DC_P: Final = 1 + +VSC_BUS: Final = 0 +VSC_INTERNAL_BUS: Final = 1 +VSC_INTERNAL_BUS_DC: Final = 2 +VSC_BUS_DC: Final = 3 +VSC_R: Final = 4 +VSC_X: Final = 5 +VSC_R_DC: Final = 6 +VSC_PL_DC: Final = 7 +VSC_MODE_AC: Final = 8 +VSC_VALUE_AC: Final = 9 +VSC_MODE_DC: Final = 10 +VSC_VALUE_DC: Final = 11 +VSC_STATUS: Final = 12 +VSC_CONTROLLABLE: Final = 13 + +VSC_P: Final = 14 +VSC_Q: Final = 15 +VSC_P_DC: Final = 16 + +vsc_cols: Final = 17 diff --git a/stubs/pandapower-stubs/pypower/isload.pyi b/stubs/pandapower-stubs/pypower/isload.pyi index 4373f8c..6783b05 100644 --- a/stubs/pandapower-stubs/pypower/isload.pyi +++ b/stubs/pandapower-stubs/pypower/isload.pyi @@ -1 +1,5 @@ -def isload(gen): ... +import numpy as np + +from pandapower._typing import Array1D + +def isload(gen) -> Array1D[np.bool]: ... diff --git a/stubs/pandapower-stubs/pypower/makeAang.pyi b/stubs/pandapower-stubs/pypower/makeAang.pyi index c4b31bf..5817f25 100644 --- a/stubs/pandapower-stubs/pypower/makeAang.pyi +++ b/stubs/pandapower-stubs/pypower/makeAang.pyi @@ -1 +1,10 @@ -def makeAang(baseMVA, branch, nb, ppopt): ... +import numpy as np +from scipy.sparse import csr_matrix # type: ignore[import-untyped] + +from pandapower._typing import Array1D, Array2D, Float, Int + +def makeAang( + baseMVA: Float, branch, nb: Int, ppopt +) -> tuple[ + Array2D[np.float64] | csr_matrix, Array1D[np.float64], Array1D[np.float64], Array1D[np.float64] | Array1D[np.bool] +]: ... diff --git a/stubs/pandapower-stubs/pypower/makeBdc.pyi b/stubs/pandapower-stubs/pypower/makeBdc.pyi index 9018d18..05ff358 100644 --- a/stubs/pandapower-stubs/pypower/makeBdc.pyi +++ b/stubs/pandapower-stubs/pypower/makeBdc.pyi @@ -1 +1,3 @@ def makeBdc(bus, branch, return_csr: bool = True): ... +def phase_shift_injection(b, shift, Cft): ... +def calc_b_from_branch(branch, nl): ... diff --git a/stubs/pandapower-stubs/pypower/makeLODF.pyi b/stubs/pandapower-stubs/pypower/makeLODF.pyi index e8ca81a..3b9b870 100644 --- a/stubs/pandapower-stubs/pypower/makeLODF.pyi +++ b/stubs/pandapower-stubs/pypower/makeLODF.pyi @@ -1,2 +1,8 @@ +import numpy as np + +from pandapower._typing import Array2D + def update_LODF_diag(LODF) -> None: ... def makeLODF(branch, PTDF): ... +def makeOTDF(PTDF, LODF, outage_branches): ... +def outage_results_OTDF(OTDF, Pbus, outage_branches) -> Array2D[np.float64]: ... diff --git a/stubs/pandapower-stubs/pypower/pfsoln.pyi b/stubs/pandapower-stubs/pypower/pfsoln.pyi index c2438cd..a12a4f1 100644 --- a/stubs/pandapower-stubs/pypower/pfsoln.pyi +++ b/stubs/pandapower-stubs/pypower/pfsoln.pyi @@ -1,18 +1,30 @@ -from _typeshed import Incomplete +from typing import Final, TypeVar -EPS: Incomplete +import numpy as np + +from pandapower._typing import Float + +EPS: Final[np.float64] + +_BusT = TypeVar("_BusT") # probably bound to ndarray +_GenT = TypeVar("_GenT") # probably bound to ndarray +_BranchT = TypeVar("_BranchT") # probably bound to ndarray def pfsoln( - baseMVA, - bus0, - gen0, - branch0, + baseMVA: Float, + bus0: _BusT, + gen0: _GenT, + branch0: _BranchT, + svc, + tcsc, + ssc, + vsc, Ybus, Yf, Yt, V, ref, ref_gens, - Ibus: Incomplete | None = None, - limited_gens: Incomplete | None = None, -): ... + Ibus=None, + limited_gens=None, +) -> tuple[_BusT, _GenT, _BranchT]: ... diff --git a/stubtest_allowlist.txt b/stubtest_allowlist.txt index 2616805..afb463b 100644 --- a/stubtest_allowlist.txt +++ b/stubtest_allowlist.txt @@ -2,9 +2,7 @@ # ==================== # TODO: modules pandapower\.contingency.* -pandapower\.control.* pandapower\.converter.* -pandapower\.pypower.* # TODO: constants pandapower\.[A-Z0-9_]+$ @@ -15,7 +13,7 @@ pandapower\._typing # OK: runtime-only helpers pandapower\..*\.(std_)?logger pandapower\.grid_equivalents(\.auxiliary)?\.(home|desktop) -pandapower\.(\w+\.)*([a-zA-Z0-9]+_(available|INSTALLED|IMPORTED)|GRAPHS_EQUAL_POSSIBLE|TYPE_CHECKING) +pandapower\.(\w+\.)*([a-zA-Z0-9]+_(available|imported|INSTALLED|IMPORTED)|GRAPHS_EQUAL_POSSIBLE|TYPE_CHECKING) # OK: runtime-only unintentional reexports pandapower\.(nan|pp_version)