Skip to content

Commit 769c177

Browse files
authored
Start testing pandapower (#26)
1 parent 6fd58d3 commit 769c177

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+2158
-1461
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ This project is licensed under the MIT License.
8282
</th>
8383
<th>Incomplete</th>
8484
<th>Yes</th>
85-
<th>No</th>
85+
<th>Yes</th>
8686
</tr>
8787
</table>
8888

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ tests = [
2121
# pandapower
2222
"networkx>=3.2.1",
2323
"geopandas>=1.0.0",
24+
"pandapower>=3.1.2",
2425
]
2526
dev = [
2627
"ruff>=0.9.2",

run.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"ruff-format": ["tests", "stubs"],
1616
"mypy": ["tests", "stubs"],
1717
"pyright": ["tests", "stubs"],
18-
# "stubtest": ["--allowlist=stubtest_allowlist.txt"],
18+
"stubtest": ["--allowlist=stubtest_allowlist.txt", "pandapower"],
1919
"pytest": [],
2020
}
2121

stubs/pandapower-stubs/_typing.pyi

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from collections.abc import Collection, Iterable, Mapping, MutableMapping
2+
from typing import Any, Protocol, SupportsFloat, SupportsIndex, TypedDict, TypeVar, type_check_only
3+
from typing_extensions import TypeAlias
4+
5+
import numpy as np
6+
7+
_T = TypeVar("_T", bound=Any)
8+
9+
# Wide primitives for input types
10+
Bool: TypeAlias = bool | np.bool
11+
Int: TypeAlias = SupportsIndex
12+
Float: TypeAlias = SupportsFloat | Int
13+
14+
# Vector-related
15+
ScalarOrVector: TypeAlias = _T | Collection[_T]
16+
Array1D: TypeAlias = np.ndarray[tuple[int], np.dtype[_T]]
17+
Array2D: TypeAlias = np.ndarray[tuple[int, int], np.dtype[_T]]
18+
19+
# File I/O related
20+
@type_check_only
21+
class FromJsonKwds(TypedDict, total=False): # keep inline with pandapower.file_io functions
22+
convert: bool
23+
encryption_key: str | None
24+
elements_to_deserialize: Iterable[str] | None
25+
keep_serialized_elements: bool
26+
add_basic_std_types: bool
27+
replace_elements: Mapping[str, str] | None
28+
empty_dict_like_object: MutableMapping[str, Any] | None
29+
30+
@type_check_only
31+
class SupportsToWkt(Protocol):
32+
def to_wkt(self) -> str: ...
33+
34+
@type_check_only
35+
class SupportsGeoInterface(Protocol):
36+
@property
37+
def __geo_interface__(self) -> dict[str, Any]: ... # values are arbitrary
38+
39+
ConvertibleToCRS: TypeAlias = str | int | tuple[str, str] | list[str] | dict[str, Any] | SupportsToWkt

stubs/pandapower-stubs/auxiliary.pyi

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,36 @@
1+
import logging
12
from collections.abc import Iterable, Mapping, MutableMapping
2-
from typing import Any, Final, Literal, NoReturn, SupportsFloat as Float, SupportsIndex as Int, TypeVar, overload
3-
from typing_extensions import Self
3+
from typing import Any, Final, Literal, NoReturn, TypeVar, overload
4+
from typing_extensions import Self, deprecated
45

56
import geopandas as gpd
67
import numpy as np
78
import pandas as pd
8-
from numpy.typing import ArrayLike, NDArray
9+
from numpy.typing import ArrayLike, DTypeLike, NDArray
910
from shapely.geometry.base import BaseGeometry
1011

12+
from pandapower._typing import Float, Int
1113
from pandapower.std_types import _StdTypes
1214

1315
_T = TypeVar("_T")
1416
_KT = TypeVar("_KT")
1517
_VT = TypeVar("_VT")
1618

19+
def log_to_level(msg: str, passed_logger: logging.Logger, level: str) -> None: ...
20+
def version_check(package_name: str, level="UserWarning", ignore_not_installed: bool = False) -> None: ...
1721
def soft_dependency_error(fct_name: str, required_packages: str | Iterable[str]) -> NoReturn: ...
1822
def warn_and_fix_parameter_renaming(
19-
old_parameter_name: str, new_parameter_name: str, new_parameter: _T, default_value: _T, category: Warning = ..., **kwargs: Any
23+
old_parameter_name: str,
24+
new_parameter_name: str,
25+
new_parameter: _T,
26+
default_value: _T,
27+
category: type[Warning] = ...,
28+
**kwargs: Any,
2029
) -> _T: ...
2130

2231
class ADict(dict[_KT, _VT], MutableMapping[_KT, _VT]):
2332
def __setattr__(self, key: str, value: _VT) -> None: ...
33+
def __delattr__(self, key: _KT, force: bool = False) -> None: ... # type: ignore[override]
2434
def __call__(self, key: _KT) -> _VT: ...
2535
def __getattr__(self, name: str) -> _VT: ...
2636
def __deepcopy__(self, memo: dict[int, Any] | None) -> Self: ...
@@ -116,10 +126,14 @@ class pandapowerNet(ADict[str, pd.DataFrame]):
116126
res_ward: pd.DataFrame
117127
res_xward: pd.DataFrame
118128
res_protection: pd.DataFrame # Optional?
129+
@deprecated("Use copy.deepcopy(net) instead of net.deepcopy()")
130+
def deepcopy(self) -> Self: ...
119131

120132
class GeoAccessor:
121133
def __init__(self, pandas_obj) -> None: ...
122134
@property
135+
def as_geo_obj(self): ...
136+
@property
123137
def type(self) -> str: ...
124138
@property
125139
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]: ...
140154
def element_types_to_ets(element_types: str) -> str: ...
141155
@overload
142156
def element_types_to_ets(element_types: list[str] | pd.Series[str] | pd.Index[str] | NDArray[np.str_]) -> list[str]: ...
157+
def empty_defaults_per_dtype(dtype: DTypeLike) -> float | Literal[""] | None: ...
143158
def get_free_id(df: pd.DataFrame) -> np.int64: ...
144159

145160
class ppException(Exception): ...

stubs/pandapower-stubs/control/util/auxiliary.pyi

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
from _typeshed import Incomplete
2+
from typing import Any
23

3-
MATPLOTLIB_INSTALLED: bool
4+
from numpy.typing import DTypeLike, NDArray
45

5-
def asarray(val, dtype=...): ...
6+
def asarray(val: object, dtype: DTypeLike = ...) -> NDArray[Any]: ...
67
def get_controller_index_by_type(net, ctrl_type, idx=[]): ...
78
def get_controller_index_by_typename(net, typename, idx=[], case_sensitive: bool = False): ...
89
def get_controller_index(net, ctrl_type: Incomplete | None = None, parameters: Incomplete | None = None, idx=[]): ...

stubs/pandapower-stubs/convert_format.pyi

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ from pandapower.auxiliary import pandapowerNet
44

55
def convert_format(net: pandapowerNet, elements_to_deserialize: Container[str] | None = None) -> pandapowerNet: ...
66
def correct_dtypes(net: pandapowerNet, error: bool) -> None: ...
7+
def convert_trafo_pst_logic(net: pandapowerNet) -> None: ...
Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
1-
from _typeshed import Incomplete
1+
from pandapower.auxiliary import pandapowerNet
22

3-
from pandapower.pypower.idx_brch import ANGMAX as ANGMAX, ANGMIN as ANGMIN, RATE_B as RATE_B, RATE_C as RATE_C
4-
from pandapower.pypower.idx_bus import BUS_AREA as BUS_AREA, VM as VM
3+
ppc_elms: list[str]
54

6-
ppc_elms: Incomplete
7-
8-
def from_ppc(ppc, f_hz: int = 50, validate_conversion: bool = False, **kwargs): ...
5+
def from_ppc(ppc, f_hz: float = 50, validate_conversion: bool = False, **kwargs) -> pandapowerNet: ...
96
def validate_from_ppc(
107
ppc,
11-
net,
8+
net: pandapowerNet,
129
max_diff_values={
1310
"bus_vm_pu": 1e-06,
1411
"bus_va_degree": 1e-05,
@@ -17,4 +14,4 @@ def validate_from_ppc(
1714
"gen_p_mw": 1e-06,
1815
"gen_q_mvar": 1e-06,
1916
},
20-
): ...
17+
) -> bool: ...

0 commit comments

Comments
 (0)