File size: 9,256 Bytes
7885a28
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
"""Delegators for alternative backends in scipy.ndimage.

The signature of `func_signature` must match the signature of ndimage.func.
The job of a `func_signature` is to know which arguments of `ndimage.func`
are arrays.

* signatures are generated by

--------------
import inspect
from scipy import ndimage

names = [x for x in dir(ndimage) if not x.startswith('_')]
objs = [getattr(ndimage, name) for name in names]
funcs = [obj for obj in objs if inspect.isroutine(obj)]

for func in funcs:
    sig = inspect.signature(func)
    print(f"def {func.__name__}_signature{sig}:\n\tpass\n\n")
---------------

* which arguments to delegate on: manually trawled the documentation for
  array-like and array arguments

"""
import numpy as np
from scipy._lib._array_api import array_namespace
from scipy.ndimage._ni_support import _skip_if_dtype, _skip_if_int


def affine_transform_signature(
    input, matrix, offset=0.0, output_shape=None, output=None, *args, **kwds
):
    return array_namespace(input, matrix, _skip_if_dtype(output))


def binary_closing_signature(
    input, structure=None, iterations=1, output=None, *args, **kwds
):
    return array_namespace(input, structure, _skip_if_dtype(output))

binary_opening_signature = binary_closing_signature


def binary_dilation_signature(
    input, structure=None, iterations=1, mask=None, output=None, *args, **kwds
):
    return array_namespace(input, structure, _skip_if_dtype(output), mask)

binary_erosion_signature = binary_dilation_signature


def binary_fill_holes_signature(
    input, structure=None, output=None, origin=0, *args, **kwargs
):
    return array_namespace(input, structure, _skip_if_dtype(output))


def label_signature(input, structure=None, output=None, origin=0):
    return array_namespace(input, structure, _skip_if_dtype(output))


def binary_hit_or_miss_signature(
    input, structure1=None, structure2=None, output=None, *args, **kwds
):
    return array_namespace(input, structure1, structure2, _skip_if_dtype(output))


def binary_propagation_signature(
    input, structure=None, mask=None, output=None, *args, **kwds
):
    return array_namespace(input, structure, mask, _skip_if_dtype(output))


def convolve_signature(input, weights, output=None, *args, **kwds):
    return array_namespace(input, weights, _skip_if_dtype(output))

correlate_signature = convolve_signature


def convolve1d_signature(input, weights, axis=-1, output=None, *args, **kwds):
    return array_namespace(input, weights, _skip_if_dtype(output))

correlate1d_signature = convolve1d_signature


def distance_transform_bf_signature(
    input, metric='euclidean', sampling=None, return_distances=True,
    return_indices=False, distances=None, indices=None
):
    return array_namespace(input, distances, indices)


def distance_transform_cdt_signature(
    input, metric='chessboard', return_distances=True, return_indices=False,
    distances=None, indices=None
):
    return array_namespace(input, distances, indices)


def distance_transform_edt_signature(
    input, sampling=None, return_distances=True, return_indices=False,
    distances=None, indices=None
):
    return array_namespace(input, distances, indices)


def find_objects_signature(input, max_label=0):
    return array_namespace(input)


def fourier_ellipsoid_signature(input, size, n=-1, axis=-1, output=None):
    return array_namespace(input, _skip_if_dtype(output))

fourier_uniform_signature = fourier_ellipsoid_signature


def fourier_gaussian_signature(input, sigma, n=-1, axis=-1, output=None):
    return array_namespace(input, _skip_if_dtype(output))

def fourier_shift_signature(input, shift, n=-1, axis=-1, output=None):
    return array_namespace(input, _skip_if_dtype(output))


def gaussian_filter_signature(input, sigma, order=0, output=None, *args, **kwds):
    return array_namespace(input, _skip_if_dtype(output))


def gaussian_filter1d_signature(
    input, sigma, axis=-1, order=0, output=None, *args, **kwds
):
    return array_namespace(input, _skip_if_dtype(output))


def gaussian_gradient_magnitude_signature(input, sigma, output=None, *args, **kwds):
    return array_namespace(input, _skip_if_dtype(output))

gaussian_laplace_signature = gaussian_gradient_magnitude_signature


def generate_binary_structure_signature(rank, connectivity):
    # XXX: no input arrays; always return numpy
    return np


def generic_filter_signature(
    input, function, size=None, footprint=None, output=None, *args, **kwds
):
    # XXX: function LowLevelCallable w/backends
    return array_namespace(input, footprint, _skip_if_dtype(output))


def generic_filter1d_signature(
    input, function, filter_size, axis=-1, output=None, *args, **kwds
):
    return array_namespace(input, _skip_if_dtype(output))


def generic_gradient_magnitude_signature(
    input, derivative, output=None, *args, **kwds
):
    # XXX: function LowLevelCallable w/backends
    return array_namespace(input, _skip_if_dtype(output))


def generic_laplace_signature(input, derivative2, output=None, *args, **kwds):
    # XXX: function LowLevelCallable w/backends
    return array_namespace(input, _skip_if_dtype(output))


def geometric_transform_signature(
    input, mapping, output_shape=None, output=None, *args, **kwds
):
    return array_namespace(input, _skip_if_dtype(output))


def histogram_signature(input, min, max, bins, labels=None, index=None):
    return array_namespace(input, labels)


def iterate_structure_signature(structure, iterations, origin=None):
    return array_namespace(structure)


def labeled_comprehension_signature(input, labels, *args, **kwds):
    return array_namespace(input, labels)


def laplace_signature(input, output=None, *args, **kwds):
    return array_namespace(input, _skip_if_dtype(output))


def map_coordinates_signature(input, coordinates, output=None, *args, **kwds):
    return array_namespace(input, coordinates, _skip_if_dtype(output))


def maximum_filter1d_signature(input, size, axis=-1, output=None, *args, **kwds):
    return array_namespace(input, _skip_if_dtype(output))

minimum_filter1d_signature = maximum_filter1d_signature
uniform_filter1d_signature = maximum_filter1d_signature


def maximum_signature(input, labels=None, index=None):
    return array_namespace(input, labels, _skip_if_int(index))

minimum_signature = maximum_signature
median_signature = maximum_signature
mean_signature = maximum_signature
variance_signature = maximum_signature
standard_deviation_signature = maximum_signature
sum_labels_signature = maximum_signature
sum_signature = maximum_signature  # ndimage.sum is sum_labels

maximum_position_signature = maximum_signature
minimum_position_signature = maximum_signature

extrema_signature = maximum_signature
center_of_mass_signature = extrema_signature


def median_filter_signature(
    input, size=None, footprint=None, output=None, *args, **kwds
):
    return array_namespace(input, footprint, _skip_if_dtype(output))

minimum_filter_signature = median_filter_signature
maximum_filter_signature = median_filter_signature


def morphological_gradient_signature(
    input, size=None, footprint=None, structure=None, output=None, *args, **kwds
):
    return array_namespace(input, footprint, structure, _skip_if_dtype(output))

morphological_laplace_signature = morphological_gradient_signature
white_tophat_signature = morphological_gradient_signature
black_tophat_signature = morphological_gradient_signature
grey_closing_signature = morphological_gradient_signature
grey_dilation_signature = morphological_gradient_signature
grey_erosion_signature = morphological_gradient_signature
grey_opening_signature = morphological_gradient_signature


def percentile_filter_signature(
    input, percentile, size=None, footprint=None, output=None, *args, **kwds
):
    return array_namespace(input, footprint, _skip_if_dtype(output))


def prewitt_signature(input, axis=-1, output=None, *args, **kwds):
    return array_namespace(input, _skip_if_dtype(output))

sobel_signature = prewitt_signature


def rank_filter_signature(
    input, rank, size=None, footprint=None, output=None, *args, **kwds
):
    return array_namespace(input, footprint, _skip_if_dtype(output))


def rotate_signature(
    input, angle, axes=(1, 0), reshape=True, output=None , *args, **kwds
):
    return array_namespace(input, _skip_if_dtype(output))


def shift_signature(input, shift, output=None, *args, **kwds):
    return array_namespace(input, _skip_if_dtype(output))


def spline_filter_signature(input, order=3, output=np.float64, *args, **kwds):
    return array_namespace(input, _skip_if_dtype(output))


def spline_filter1d_signature(
    input, order=3, axis=-1, output=np.float64, *args, **kwds
):
    return array_namespace(input, _skip_if_dtype(output))


def uniform_filter_signature(input, size=3, output=None, *args, **kwds):
    return array_namespace(input, _skip_if_dtype(output))


def value_indices_signature(arr, *args, **kwds):
    return array_namespace(arr)


def watershed_ift_signature(input, markers, structure=None, output=None):
    return array_namespace(input, markers, structure, _skip_if_dtype(output))


def zoom_signature(input, zoom, output=None, *args, **kwds):
    return array_namespace(input, _skip_if_dtype(output))