Skip to content

Commit 73db95c

Browse files
authored
🏷️ ndimage: stub the remaining private modules (#720)
2 parents 44eb1a8 + 8cc4313 commit 73db95c

File tree

5 files changed

+333
-0
lines changed

5 files changed

+333
-0
lines changed

scipy-stubs/ndimage/_nd_image.pyi

Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
# defined in scipy/ndimage/src/nd_image.c
2+
3+
from _typeshed import Incomplete
4+
from collections.abc import Callable, Mapping
5+
from typing import overload
6+
from typing_extensions import CapsuleType
7+
8+
import numpy as np
9+
import optype.numpy as onp
10+
import optype.numpy.compat as npc
11+
12+
from scipy._lib._ccallback import LowLevelCallable
13+
14+
def correlate1d(
15+
input: onp.ArrayND[npc.number],
16+
weights: onp.ArrayND[np.float64],
17+
axis: int,
18+
output: onp.ArrayND[npc.number],
19+
mode: int,
20+
cval: float,
21+
origin: int,
22+
/,
23+
) -> None: ...
24+
def correlate(
25+
input: onp.ArrayND[npc.number],
26+
weights: onp.ArrayND[np.float64],
27+
output: onp.ArrayND[npc.number],
28+
mode: int,
29+
cval: float,
30+
origin: int | onp.ArrayND[np.intp],
31+
/,
32+
) -> None: ...
33+
def uniform_filter1d(
34+
input: onp.ArrayND[npc.number],
35+
filter_size: int,
36+
axis: int,
37+
output: onp.ArrayND[npc.number],
38+
mode: int,
39+
cval: float,
40+
origin: int,
41+
/,
42+
) -> None: ...
43+
def min_or_max_filter1d(
44+
input: onp.ArrayND[npc.number],
45+
filter_size: int,
46+
axis: int,
47+
output: onp.ArrayND[npc.number],
48+
mode: int,
49+
cval: float,
50+
origin: int,
51+
minimum: int,
52+
/,
53+
) -> None: ...
54+
def min_or_max_filter(
55+
input: onp.ArrayND[npc.number],
56+
footprint: onp.ArrayND[npc.number],
57+
structure: onp.ArrayND[npc.number] | None,
58+
output: onp.ArrayND[npc.number],
59+
mode: int,
60+
cval: float,
61+
origin: int | onp.ArrayND[np.intp],
62+
minimum: int,
63+
/,
64+
) -> None: ...
65+
def rank_filter(
66+
input: onp.ArrayND[npc.number],
67+
rank: int,
68+
footprint: onp.ArrayND[npc.number],
69+
output: onp.ArrayND[npc.number],
70+
mode: int,
71+
cval: float,
72+
origin: onp.ArrayND[np.intp],
73+
/,
74+
) -> None: ...
75+
def generic_filter1d(
76+
input: onp.ArrayND[npc.number],
77+
fnc: Callable[..., Incomplete] | LowLevelCallable,
78+
filter_size: int,
79+
axis: int,
80+
output: onp.ArrayND[npc.number],
81+
mode: int,
82+
cval: float,
83+
origin: int,
84+
extra_arguments: tuple[object, ...],
85+
extra_keywords: Mapping[str, object],
86+
/,
87+
) -> None: ...
88+
def generic_filter(
89+
input: onp.ArrayND[npc.number],
90+
fnc: Callable[..., Incomplete] | LowLevelCallable,
91+
footprint: onp.ArrayND[npc.number],
92+
output: onp.ArrayND[npc.number],
93+
mode: int,
94+
cval: float,
95+
origin: int | onp.ArrayND[np.intp],
96+
extra_arguments: tuple[object, ...],
97+
extra_keywords: Mapping[str, object],
98+
/,
99+
) -> None: ...
100+
def fourier_filter(
101+
input: onp.ArrayND[npc.number],
102+
parameters: onp.ArrayND[npc.number],
103+
n: int,
104+
axis: int,
105+
output: onp.ArrayND[npc.number],
106+
filter_type: int,
107+
/,
108+
) -> None: ...
109+
def fourier_shift(
110+
input: onp.ArrayND[npc.number], order: int, axis: int, output: onp.ArrayND[npc.number], mode: int, /
111+
) -> None: ...
112+
def spline_filter1d(
113+
input: onp.ArrayND[npc.number], order: int, axis: int, output: onp.ArrayND[npc.number], mode: int, /
114+
) -> None: ...
115+
def geometric_transform(
116+
input: onp.ArrayND[npc.number],
117+
fnc: Callable[..., Incomplete] | LowLevelCallable,
118+
coordinates: onp.ArrayND[npc.number] | None,
119+
matrix: onp.ArrayND[npc.number] | None,
120+
shift: onp.ArrayND[npc.number] | None,
121+
output: onp.ArrayND[npc.number],
122+
order: int,
123+
mode: int,
124+
cval: float,
125+
nprepad: int,
126+
extra_arguments: tuple[object, ...],
127+
extra_keywords: Mapping[str, object],
128+
/,
129+
) -> None: ...
130+
def zoom_shift(
131+
input: onp.ArrayND[npc.number],
132+
zoom: onp.ArrayND[npc.number] | None,
133+
shift: onp.ArrayND[npc.number] | None,
134+
output: onp.ArrayND[npc.number],
135+
order: int,
136+
mode: int,
137+
cval: float,
138+
nprepad: int,
139+
grid_mode: int,
140+
/,
141+
) -> None: ...
142+
143+
#
144+
def find_objects(input: onp.ArrayND[npc.number], max_label: int) -> None: ...
145+
def value_indices(arr: onp.ArrayND[npc.integer], ignoreValIsNone: bool, ignorevalArr: onp.ArrayND, /) -> None: ...
146+
147+
#
148+
def watershed_ift(
149+
input: onp.ArrayND[npc.number],
150+
markers: onp.ArrayND[npc.number],
151+
strct: onp.ArrayND[npc.number],
152+
output: onp.ArrayND[npc.number],
153+
) -> None: ...
154+
def distance_transform_bf(
155+
input: onp.ArrayND[npc.number],
156+
metric: int,
157+
sampling: onp.ArrayND[npc.number] | None,
158+
output: onp.ArrayND[npc.number] | None,
159+
features: onp.ArrayND[npc.number] | None,
160+
) -> None: ...
161+
def distance_transform_op(
162+
input: onp.ArrayND[npc.number],
163+
strct: onp.ArrayND[npc.number],
164+
distances: onp.ArrayND[npc.number],
165+
features: onp.ArrayND[npc.number] | None,
166+
) -> None: ...
167+
def euclidean_feature_transform(
168+
input: onp.ArrayND[npc.number], sampling: onp.ArrayND[npc.number] | None, features: onp.ArrayND[npc.number]
169+
) -> None: ...
170+
171+
#
172+
@overload
173+
def binary_erosion(
174+
input: onp.ArrayND[npc.number],
175+
strct: onp.ArrayND[npc.number],
176+
mask: onp.ArrayND[npc.number] | None,
177+
output: onp.ArrayND[npc.number],
178+
border_value: int,
179+
origin: onp.ArrayND[np.intp],
180+
invert: int,
181+
center_is_true: int,
182+
return_coordinates: onp.ToFalse,
183+
) -> int: ...
184+
@overload
185+
def binary_erosion(
186+
input: onp.ArrayND[npc.number],
187+
strct: onp.ArrayND[npc.number],
188+
mask: onp.ArrayND[npc.number] | None,
189+
output: onp.ArrayND[npc.number],
190+
border_value: int,
191+
origin: int | onp.ArrayND[np.intp],
192+
invert: int,
193+
center_is_true: int,
194+
return_coordinates: onp.ToTrue,
195+
) -> tuple[int, CapsuleType]: ...
196+
197+
#
198+
def binary_erosion2(
199+
array: onp.ArrayND[npc.number],
200+
strct: onp.ArrayND[npc.number],
201+
mask: onp.ArrayND[npc.number] | None,
202+
niter: int,
203+
origin: int | onp.ArrayND[np.intp],
204+
invert: int,
205+
cobj: CapsuleType | None,
206+
) -> None: ...
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
from collections.abc import Callable
2+
from typing import Final, Protocol, TypeVar, type_check_only
3+
4+
__all__ = ["docfiller"]
5+
6+
_FT = TypeVar("_FT", bound=Callable[..., object])
7+
8+
@type_check_only
9+
class _Docfiller(Protocol):
10+
def __call__(self, f: _FT, /) -> _FT: ...
11+
12+
###
13+
14+
_intput_doc: Final[str] = ...
15+
_axis_doc: Final[str] = ...
16+
_output_doc: Final[str] = ...
17+
_nan_doc: Final[str] = ...
18+
_size_foot_doc: Final[str] = ...
19+
_mode_reflect_doc: Final[str] = ...
20+
_mode_interp_constant_doc: Final[str] = ...
21+
_mode_interp_mirror_doc: Final[str] = ...
22+
_mode_multiple_doc: Final[str] = ...
23+
_cval_doc: Final[str] = ...
24+
_origin_doc: Final[str] = ...
25+
_origin_multiple_doc: Final[str] = ...
26+
_extra_arguments_doc: Final[str] = ...
27+
_extra_keywords_doc: Final[str] = ...
28+
_prefilter_doc: Final[str] = ...
29+
docdict: Final[dict[str, str]] = ...
30+
31+
docfiller: Final[_Docfiller]

scipy-stubs/ndimage/_ni_label.pyi

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# defined in scipy/ndimage/src/_ni_label.pyx
2+
3+
from typing import TypeAlias
4+
5+
import numpy as np
6+
import optype.numpy as onp
7+
import optype.numpy.compat as npc
8+
9+
# matches `ctypedef fused data_t`
10+
_data_t: TypeAlias = npc.integer | np.float32 | np.float64 # noqa: PYI042
11+
12+
###
13+
14+
class NeedMoreBits(Exception): ... # undocumented
15+
16+
def get_nonzero_line(a: onp.ArrayND[_data_t]) -> int: ... # undocumented
17+
def get_read_line(a: onp.ArrayND[_data_t]) -> int: ... # undocumented
18+
def get_write_line(a: onp.ArrayND[_data_t]) -> int: ... # undocumented
19+
20+
#
21+
def _label(
22+
input: onp.ArrayND[_data_t | np.bool_],
23+
structure: onp.ArrayND[np.bool_ | npc.integer],
24+
output: onp.ArrayND[_data_t | np.bool_],
25+
) -> int: ... # undocumented

scipy-stubs/ndimage/_ni_support.pyi

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
from collections.abc import Iterable
2+
from typing import Any, Literal, TypeAlias, TypeVar, overload
3+
4+
import numpy as np
5+
import optype as op
6+
import optype.numpy as onp
7+
import optype.numpy.compat as npc
8+
9+
_T = TypeVar("_T")
10+
11+
_Mode: TypeAlias = Literal["nearest", "wrap", "reflect", "grid-mirror", "mirror", "constant", "grid-wrap", "grid-constant"]
12+
_ModeCode: TypeAlias = Literal[0, 1, 2, 3, 4, 5, 6]
13+
14+
def _extend_mode_to_code(mode: _Mode, is_filter: bool = False) -> _ModeCode: ...
15+
16+
#
17+
@overload
18+
def _normalize_sequence(input: str, rank: int) -> list[str]: ...
19+
@overload
20+
def _normalize_sequence(input: Iterable[_T], rank: int) -> list[_T]: ...
21+
@overload
22+
def _normalize_sequence(input: _T, rank: int) -> list[_T]: ...
23+
24+
#
25+
@overload
26+
def _get_output(
27+
output: type[complex | npc.number] | np.dtype[npc.number] | str | onp.ToComplexND | None,
28+
input: onp.ArrayND[npc.number],
29+
shape: tuple[int, ...] | None = None,
30+
complex_output: Literal[False] = False,
31+
) -> onp.ArrayND[npc.number]: ...
32+
@overload
33+
def _get_output(
34+
output: type[complex | npc.complexfloating] | np.dtype[npc.complexfloating] | str | onp.ToJustComplexND | None,
35+
input: onp.ArrayND[npc.complexfloating],
36+
shape: tuple[int, ...] | None = None,
37+
*,
38+
complex_output: Literal[True],
39+
) -> onp.ArrayND[npc.complexfloating]: ...
40+
@overload
41+
def _get_output(
42+
output: type[complex | npc.complexfloating] | np.dtype[npc.complexfloating] | str | onp.ToJustComplexND | None,
43+
input: onp.ArrayND[npc.complexfloating],
44+
shape: tuple[int, ...] | None,
45+
complex_output: Literal[True],
46+
) -> onp.ArrayND[npc.complexfloating]: ...
47+
48+
#
49+
def _check_axes(axes: op.CanIndex | Iterable[op.CanIndex], ndim: int) -> tuple[int, ...]: ...
50+
51+
#
52+
@overload
53+
def _skip_if_dtype(arg: str | np.dtype[Any] | type[np.generic]) -> None: ...
54+
@overload
55+
def _skip_if_dtype(arg: _T) -> _T | None: ...
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# defined in scipy/ndimage/src/_rank_filter_1d.cpp
2+
3+
import numpy as np
4+
import optype.numpy as onp
5+
import optype.numpy.compat as npc
6+
7+
def rank_filter(
8+
in_arr_obj: onp.ArrayND[np.float32 | np.float64 | np.int64],
9+
rank: int,
10+
win_len: int,
11+
out_arr_obj: onp.ArrayND[np.float32 | np.float64 | np.int64],
12+
mode: int,
13+
cval_obj: onp.ArrayND[npc.floating | npc.integer],
14+
origin: int,
15+
/,
16+
) -> None: ... # undocumented

0 commit comments

Comments
 (0)