Skip to content

Commit

Permalink
Type check all stubs (#5)
Browse files Browse the repository at this point in the history
  • Loading branch information
hamdanal committed May 4, 2024
1 parent 9a58da3 commit b54f5fe
Show file tree
Hide file tree
Showing 29 changed files with 138 additions and 104 deletions.
19 changes: 16 additions & 3 deletions requirements-tests.txt
Original file line number Diff line number Diff line change
@@ -1,16 +1,29 @@
# Tools
# -----
ruff==0.4.3 # must match .pre-commit-config.yaml
pytest>=8.0
mypy==1.10.0
pyright==1.1.361

# Runtime
# Runtime dependencies
# --------------------
shapely>=2.0,<2.1
geopandas>=0.14.4,<1.0

# Transient dependencies
matplotlib>=3.8.0
# ----------------------
# shapely
pyproj>=3.6.1
# geopandas
pandas-stubs>=2.2.1.240316
matplotlib>=3.8.0
folium>=0.15.1
rtree>=1.1.0
pandas-stubs>=2.2.1.240316
# netfields and psqlextra
django-types>=0.19.1
djangorestframework-types>=0.8.0
types-psycopg2>=2.9.21
types-netaddr>=1.2.0
types-python-dateutil>=2.9.0
# pandapower
networkx>=3.2.1
4 changes: 2 additions & 2 deletions run.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ class Text(str): ...
default_args = {
"ruff-check": ["tests", "stubs"],
"ruff-format": ["tests", "stubs"],
"mypy": ["tests", "stubs/shapely-stubs", "stubs/geopandas-stubs"],
"pyright": ["tests", "stubs/shapely-stubs", "stubs/geopandas-stubs"],
"mypy": ["tests", "stubs"],
"pyright": ["tests", "stubs"],
"stubtest": ["--allowlist=stubtest_allowlist.txt", "shapely", "geopandas"],
"pytest": [],
}
Expand Down
21 changes: 11 additions & 10 deletions stubs/netfields-stubs/lookups.pyi
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
from _typeshed import Incomplete
from typing import Any, NoReturn

from django.db.backends.base.base import BaseDatabaseWrapper
from django.db.models import IntegerField, Lookup, Transform, lookups
from django.db.models.expressions import BaseExpression
from django.db.models.sql.compiler import SQLCompiler

class InvalidLookup(Lookup):
class InvalidLookup(Lookup[Incomplete]):
def as_sql(self, qn: SQLCompiler, connection: BaseDatabaseWrapper) -> NoReturn: ...

class InvalidSearchLookup(Lookup):
class InvalidSearchLookup(Lookup[Incomplete]):
def as_sql(self, qn: SQLCompiler, connection: BaseDatabaseWrapper) -> NoReturn: ...

class NetFieldDecoratorMixin:
Expand All @@ -29,22 +30,22 @@ class NetworkLookup:
class AddressLookup:
def get_prep_lookup(self) -> str | BaseExpression: ...

class NetContains(AddressLookup, Lookup):
class NetContains(AddressLookup, Lookup[Incomplete]):
def as_sql(self, qn: SQLCompiler, connection: BaseDatabaseWrapper) -> tuple[str, list[Any]]: ...

class NetContained(NetworkLookup, Lookup):
class NetContained(NetworkLookup, Lookup[Incomplete]):
def as_sql(self, qn: SQLCompiler, connection: BaseDatabaseWrapper) -> tuple[str, list[Any]]: ...

class NetContainsOrEquals(AddressLookup, Lookup):
class NetContainsOrEquals(AddressLookup, Lookup[Incomplete]):
def as_sql(self, qn: SQLCompiler, connection: BaseDatabaseWrapper) -> tuple[str, list[Any]]: ...

class NetContainedOrEqual(NetworkLookup, Lookup):
class NetContainedOrEqual(NetworkLookup, Lookup[Incomplete]):
def as_sql(self, qn: SQLCompiler, connection: BaseDatabaseWrapper) -> tuple[str, list[Any]]: ...

class NetOverlaps(NetworkLookup, Lookup):
class NetOverlaps(NetworkLookup, Lookup[Incomplete]):
def as_sql(self, qn: SQLCompiler, connection: BaseDatabaseWrapper) -> tuple[str, list[Any]]: ...

class HostMatches(AddressLookup, Lookup):
class HostMatches(AddressLookup, Lookup[Incomplete]):
def as_sql(self, qn: SQLCompiler, connection: BaseDatabaseWrapper) -> tuple[str, list[Any]]: ...

class Family(Transform):
Expand All @@ -60,10 +61,10 @@ class _PrefixlenMixin:
) -> tuple[str, list[Any]]: ...
def get_prep_lookup(self) -> int: ...

class MaxPrefixlen(_PrefixlenMixin, Lookup):
class MaxPrefixlen(_PrefixlenMixin, Lookup[Incomplete]):
format_string: str

class MinPrefixlen(_PrefixlenMixin, Lookup):
class MinPrefixlen(_PrefixlenMixin, Lookup[Incomplete]):
format_string: str

class Prefixlen(Transform):
Expand Down
2 changes: 1 addition & 1 deletion stubs/netfields-stubs/rest_framework.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ from rest_framework.serializers import ModelSerializer

_IPAddress: TypeAlias = IPv4Address | IPv6Address
_IPNetwork: TypeAlias = IPv4Network | IPv6Network
_InetDefaultInitial: TypeAlias = _IPAddress | None | Callable[[], _IPAddress | None] | type[empty] # type: ignore[valid-type]
_InetDefaultInitial: TypeAlias = _IPAddress | None | Callable[[], _IPAddress | None] | type[empty] # type: ignore[valid-type] # pyright: ignore[reportInvalidTypeForm]

class InetAddressField(Field[_IPAddress | None, _IPAddress | int | str | None, str | None, Incomplete]):
store_prefix: bool
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from _typeshed import Incomplete
from logging import StreamHandler

class AppHandler(StreamHandler):
class AppHandler(StreamHandler[Incomplete]):
app: Incomplete
PrintPlain: Incomplete
PrintInfo: Incomplete
Expand Down
2 changes: 1 addition & 1 deletion stubs/pandapower-stubs/estimation/ppc_conversion.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def pp2eppci(
eppci: Incomplete | None = None,
): ...

class ExtendedPPCI(UserDict):
class ExtendedPPCI(UserDict[str, Incomplete]):
data: Incomplete
z: Incomplete
r_cov: Incomplete
Expand Down
7 changes: 4 additions & 3 deletions stubs/pandapower-stubs/plotting/generic_geodata.pyi
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from _typeshed import Incomplete
from collections.abc import Iterable
from typing import Any, Literal
from typing_extensions import TypeAlias

import networkx as nx
import networkx as nx # type: ignore[import-untyped]
from numpy.typing import ArrayLike

from pandapower.auxiliary import pandapowerNet
Expand All @@ -16,10 +17,10 @@ def build_igraph_from_pp(
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 | None = None) -> list[tuple[float, float]]: ...
def coords_from_nxgraph(mg: nx.Graph[Incomplete] | None = None) -> list[tuple[float, float]]: ...
def create_generic_coordinates(
net: pandapowerNet,
mg: nx.Graph | None = None,
mg: nx.Graph[Incomplete] | None = None,
library: Literal["igraph", "networkx"] = "igraph",
respect_switches: bool = False,
geodata_table: str = "bus_geodata",
Expand Down
2 changes: 1 addition & 1 deletion stubs/pandapower-stubs/plotting/plotly/pf_res_plotly.pyi
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Literal

from plotly.graph_objs import Figure
from plotly.graph_objs import Figure # type: ignore[import-not-found] # pyright: ignore[reportMissingImports]

from pandapower.auxiliary import pandapowerNet
from pandapower.plotting.plotly.mapbox_plot import *
Expand Down
6 changes: 3 additions & 3 deletions stubs/pandapower-stubs/plotting/plotly/simple_plotly.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ from collections.abc import Iterable
from typing import Literal, overload

import pandas as pd
from plotly.graph_objs import Figure
from plotly.graph_objs import Figure # type: ignore[import-not-found] # pyright: ignore[reportMissingImports]

from pandapower.auxiliary import pandapowerNet
from pandapower.plotting.plotly.mapbox_plot import *
Expand All @@ -15,11 +15,11 @@ def get_hoverinfo(
element: Literal["bus", "line", "trafo", "trafo3w", "ext_grid"],
precision: int = 3,
sub_index: Iterable[int] | None = None,
) -> pd.Series: ...
) -> pd.Series[str]: ...
@overload
def get_hoverinfo(
net: pandapowerNet, element: str, precision: int = 3, sub_index: Iterable[int] | None = None
) -> pd.Series | None: ...
) -> pd.Series[str] | None: ...
def simple_plotly(
net: pandapowerNet,
respect_switches: bool = True,
Expand Down
20 changes: 11 additions & 9 deletions stubs/pandapower-stubs/plotting/plotly/traces.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ from typing import Literal
from typing_extensions import TypeAlias

import pandas as pd
from plotly.graph_objs import Figure
from plotly.graph_objs import Figure # type: ignore[import-not-found] # pyright: ignore[reportMissingImports]

from pandapower.auxiliary import pandapowerNet

Expand All @@ -18,7 +18,7 @@ def create_edge_center_trace(
size: int = 1,
patch_type: str = "circle",
color: str = "white",
infofunc: pd.Series | None = None,
infofunc: pd.Series[Incomplete] | None = None,
trace_name: str = "edge_center",
use_line_geodata: bool = False,
showlegend: bool = False,
Expand All @@ -27,11 +27,11 @@ def create_edge_center_trace(
) -> dict[str, Incomplete]: ...
def create_bus_trace(
net: pandapowerNet,
buses: Iterable[int] | pd.Index | None = None,
buses: Iterable[int] | pd.Index[int] | None = None,
size: int = 5,
patch_type: str = "circle",
color: str = "blue",
infofunc: pd.Series | Iterable[Incomplete] | None = None,
infofunc: pd.Series[Incomplete] | Iterable[Incomplete] | None = None,
trace_name: str = "buses",
legendgroup: str | None = None,
cmap: str | None = None,
Expand All @@ -44,12 +44,12 @@ def create_bus_trace(
) -> list[dict[str, Incomplete]]: ...
def create_line_trace(
net: pandapowerNet,
lines: Iterable[int] | pd.Index | None = None,
lines: Iterable[int] | pd.Index[int] | None = None,
use_line_geodata: bool = True,
respect_switches: bool = False,
width: float = 1.0,
color: str = "grey",
infofunc: pd.Series | Iterable[Incomplete] | None = None,
infofunc: pd.Series[Incomplete] | Iterable[Incomplete] | None = None,
trace_name: str = "lines",
legendgroup: str | None = "lines",
cmap: str | None = None,
Expand All @@ -68,7 +68,7 @@ def create_trafo_trace(
color: str = "green",
trafotype: str = "2W",
width: int = 5,
infofunc: pd.Series | Iterable[Incomplete] | None = None,
infofunc: pd.Series[Incomplete] | Iterable[Incomplete] | None = None,
cmap: str | None = None,
trace_name: str = "2W transformers",
cmin: float | None = None,
Expand All @@ -87,12 +87,14 @@ def create_weighted_marker_trace(
patch_type: str = "circle",
marker_scaling: float = 1.0,
trace_name: str = "",
infofunc: pd.Series | Iterable[Incomplete] | None = None,
infofunc: pd.Series[Incomplete] | Iterable[Incomplete] | None = None,
node_element: str = "bus",
show_scale_legend: bool = True,
scale_marker_size: float | None = None,
) -> dict[str, Incomplete]: ...
def create_scale_trace(net: pandapowerNet, weighted_trace: dict, down_shift: int = 0) -> dict[str, Incomplete]: ...
def create_scale_trace(
net: pandapowerNet, weighted_trace: dict[str, Incomplete], down_shift: int = 0
) -> dict[str, Incomplete]: ...
def draw_traces(
traces: list[dict[str, Incomplete]],
on_map: bool = False,
Expand Down
5 changes: 3 additions & 2 deletions stubs/pandapower-stubs/plotting/plotly/vlevel_plotly.pyi
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from _typeshed import Incomplete
from typing import Literal

from plotly.graph_objs import Figure
from plotly.graph_objs import Figure # type: ignore[import-not-found] # pyright: ignore[reportMissingImports]

from pandapower.auxiliary import pandapowerNet
from pandapower.plotting.plotly.traces import _MapStyle
Expand All @@ -9,7 +10,7 @@ def vlevel_plotly(
net: pandapowerNet,
respect_switches: bool = True,
use_line_geodata: bool | None = None,
colors_dict: dict | None = None,
colors_dict: dict[float, Incomplete] | None = None,
on_map: bool = False,
projection: str | None = None,
map_style: _MapStyle = "basic",
Expand Down
6 changes: 4 additions & 2 deletions stubs/pandapower-stubs/shortcircuit/kappa.pyi
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import networkx as nx
from _typeshed import Incomplete

import networkx as nx # type: ignore[import-untyped]

from pandapower.auxiliary import pandapowerNet

def nxgraph_from_ppc(net: pandapowerNet, ppc) -> nx.MultiGraph: ...
def nxgraph_from_ppc(net: pandapowerNet, ppc) -> nx.MultiGraph[Incomplete]: ...
8 changes: 5 additions & 3 deletions stubs/pandapower-stubs/timeseries/output_writer.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,13 @@ class OutputWriter(JSONSerializableClass, Generic[_T]):
output_path: str | None
output_file_type: Literal[".xls", ".xlsx", ".csv", ".p", ".json"]
write_time: float | None
log_variables: list[tuple[str, str] | [tuple[str, str, list[int], Callable[[NDArray], object] | None, str | None]]] | None
log_variables: (
list[tuple[str, str] | tuple[str, str, list[int], Callable[[NDArray[Incomplete]], object] | None, str | None]] | None
)
default_log_variables: list[tuple[str, str]]
csv_separator: str
output: dict[str, pd.DataFrame]
np_results: dict[str, NDArray]
np_results: dict[str, NDArray[Incomplete]]
output_list: list[partial[object]] # also list[tuple[str, str]] in self.get_batch_outputs
cur_realtime: float
time_steps: Sequence[_T] | None
Expand Down Expand Up @@ -57,7 +59,7 @@ class OutputWriter(JSONSerializableClass, Generic[_T]):
table: str,
variable: str,
index: Sequence[int] | None = None,
eval_function: Callable[[NDArray], object] | None = None,
eval_function: Callable[[NDArray[Incomplete]], object] | None = None,
eval_name: str | None = None,
) -> None: ...
def init_timesteps(self, time_steps: Sequence[_T]) -> None: ...
Expand Down
2 changes: 1 addition & 1 deletion stubs/pandapower-stubs/timeseries/run_time_series.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def get_recycle_settings(net: pandapowerNet, recycle: Literal[False], **kwargs:
@overload
def get_recycle_settings(net: pandapowerNet, **kwargs: Incomplete) -> dict[str, Any] | Literal[False]: ...
@overload
def init_time_steps(net: pandapowerNet, time_steps: Iterable[_T], **kwargs: Unused) -> Iterable[_T]: ...
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: ...
@overload
Expand Down
4 changes: 2 additions & 2 deletions stubs/pandapower-stubs/timeseries/ts_runpp.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ from pandapower.pypower.idx_brch import (
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 as OutputWriter
from pandapower.timeseries.output_writer import OutputWriter

class TimeSeriesRunpp:
net: pandapowerNet
output_writer: OutputWriter
output_writer: OutputWriter[Incomplete]
update_pq: bool
update_trafo: bool
baseMVA: Incomplete | None
Expand Down
Loading

0 comments on commit b54f5fe

Please sign in to comment.