17
17
18
18
from sklearn .utils import check_random_state
19
19
from sklearn .utils ._testing import assert_allclose , create_memmap_backed_data
20
- from sklearn .utils .fixes import sp_version , parse_version
21
20
22
21
23
22
def dist_func (x1 , x2 , p ):
@@ -56,23 +55,10 @@ def dist_func(x1, x2, p):
56
55
("hamming" , {}),
57
56
("canberra" , {}),
58
57
("braycurtis" , {}),
58
+ ("minkowski" , dict (p = (1 , 1.5 , 3 ), w = (rng .random_sample (d ),))),
59
59
]
60
- if sp_version >= parse_version ("1.8.0.dev0" ):
61
- # Starting from scipy 1.8.0.dev0, minkowski now accepts w, the weighting
62
- # parameter directly and using it is preferred over using wminkowski.
63
- METRICS_DEFAULT_PARAMS .append (
64
- ("minkowski" , dict (p = (1 , 1.5 , 3 ), w = (rng .random_sample (d ),))),
65
- )
66
- else :
67
- # For previous versions of scipy, this was possible through a dedicated
68
- # metric (deprecated in 1.6 and removed in 1.8).
69
- METRICS_DEFAULT_PARAMS .append (
70
- ("wminkowski" , dict (p = (1 , 1.5 , 3 ), w = (rng .random_sample (d ),))),
71
- )
72
60
73
61
74
- # TODO: Remove filterwarnings in 1.3 when wminkowski is removed
75
- @pytest .mark .filterwarnings ("ignore:WMinkowskiDistance:FutureWarning:sklearn" )
76
62
@pytest .mark .parametrize (
77
63
"metric_param_grid" , METRICS_DEFAULT_PARAMS , ids = lambda params : params [0 ]
78
64
)
@@ -95,15 +81,7 @@ def test_cdist(metric_param_grid, X, Y):
95
81
# with scipy
96
82
rtol_dict = {"rtol" : 1e-6 }
97
83
98
- if metric == "wminkowski" :
99
- # wminkoski is deprecated in SciPy 1.6.0 and removed in 1.8.0
100
- WarningToExpect = None
101
- if sp_version >= parse_version ("1.6.0" ):
102
- WarningToExpect = DeprecationWarning
103
- with pytest .warns (WarningToExpect ):
104
- D_scipy_cdist = cdist (X , Y , metric , ** kwargs )
105
- else :
106
- D_scipy_cdist = cdist (X , Y , metric , ** kwargs )
84
+ D_scipy_cdist = cdist (X , Y , metric , ** kwargs )
107
85
108
86
dm = DistanceMetricInterface .get_metric (metric , ** kwargs )
109
87
@@ -158,8 +136,6 @@ def test_cdist_bool_metric(metric, X_bool, Y_bool):
158
136
assert_allclose (D_sklearn , D_scipy_cdist )
159
137
160
138
161
- # TODO: Remove filterwarnings in 1.3 when wminkowski is removed
162
- @pytest .mark .filterwarnings ("ignore:WMinkowskiDistance:FutureWarning:sklearn" )
163
139
@pytest .mark .parametrize (
164
140
"metric_param_grid" , METRICS_DEFAULT_PARAMS , ids = lambda params : params [0 ]
165
141
)
@@ -182,18 +158,7 @@ def test_pdist(metric_param_grid, X):
182
158
# with scipy
183
159
rtol_dict = {"rtol" : 1e-6 }
184
160
185
- if metric == "wminkowski" :
186
- if sp_version >= parse_version ("1.8.0" ):
187
- pytest .skip ("wminkowski will be removed in SciPy 1.8.0" )
188
-
189
- # wminkoski is deprecated in SciPy 1.6.0 and removed in 1.8.0
190
- ExceptionToAssert = None
191
- if sp_version >= parse_version ("1.6.0" ):
192
- ExceptionToAssert = DeprecationWarning
193
- with pytest .warns (ExceptionToAssert ):
194
- D_scipy_pdist = cdist (X , X , metric , ** kwargs )
195
- else :
196
- D_scipy_pdist = cdist (X , X , metric , ** kwargs )
161
+ D_scipy_pdist = cdist (X , X , metric , ** kwargs )
197
162
198
163
dm = DistanceMetricInterface .get_metric (metric , ** kwargs )
199
164
D_sklearn = dm .pairwise (X )
@@ -209,8 +174,6 @@ def test_pdist(metric_param_grid, X):
209
174
assert_allclose (D_sklearn_csr , D_scipy_pdist , ** rtol_dict )
210
175
211
176
212
- # TODO: Remove filterwarnings in 1.3 when wminkowski is removed
213
- @pytest .mark .filterwarnings ("ignore:WMinkowskiDistance:FutureWarning:sklearn" )
214
177
@pytest .mark .parametrize (
215
178
"metric_param_grid" , METRICS_DEFAULT_PARAMS , ids = lambda params : params [0 ]
216
179
)
@@ -261,8 +224,6 @@ def test_pdist_bool_metrics(metric, X_bool):
261
224
assert_allclose (D_sklearn , D_scipy_pdist )
262
225
263
226
264
- # TODO: Remove filterwarnings in 1.3 when wminkowski is removed
265
- @pytest .mark .filterwarnings ("ignore:WMinkowskiDistance:FutureWarning:sklearn" )
266
227
@pytest .mark .parametrize ("writable_kwargs" , [True , False ])
267
228
@pytest .mark .parametrize (
268
229
"metric_param_grid" , METRICS_DEFAULT_PARAMS , ids = lambda params : params [0 ]
@@ -288,8 +249,6 @@ def test_pickle(writable_kwargs, metric_param_grid, X):
288
249
assert_allclose (D1 , D2 )
289
250
290
251
291
- # TODO: Remove filterwarnings in 1.3 when wminkowski is removed
292
- @pytest .mark .filterwarnings ("ignore:WMinkowskiDistance:FutureWarning:sklearn" )
293
252
@pytest .mark .parametrize ("metric" , BOOL_METRICS )
294
253
@pytest .mark .parametrize ("X_bool" , [X_bool , X_bool_mmap ])
295
254
def test_pickle_bool_metrics (metric , X_bool ):
@@ -385,8 +344,6 @@ def custom_metric(x, y):
385
344
assert_allclose (pyfunc .pairwise (X ), eucl .pairwise (X ) ** 2 )
386
345
387
346
388
- # TODO: Remove filterwarnings in 1.3 when wminkowski is removed
389
- @pytest .mark .filterwarnings ("ignore:WMinkowskiDistance:FutureWarning:sklearn" )
390
347
def test_readonly_kwargs ():
391
348
# Non-regression test for:
392
349
# https://github.com/scikit-learn/scikit-learn/issues/21685
@@ -400,7 +357,6 @@ def test_readonly_kwargs():
400
357
401
358
# Those distances metrics have to support readonly buffers.
402
359
DistanceMetric .get_metric ("seuclidean" , V = weights )
403
- DistanceMetric .get_metric ("wminkowski" , p = 1 , w = weights )
404
360
DistanceMetric .get_metric ("mahalanobis" , VI = VI )
405
361
406
362
@@ -433,24 +389,3 @@ def test_minkowski_metric_validate_weights_size():
433
389
)
434
390
with pytest .raises (ValueError , match = msg ):
435
391
dm .pairwise (X64 , Y64 )
436
-
437
-
438
- # TODO: Remove in 1.3 when wminkowski is removed
439
- def test_wminkowski_deprecated ():
440
- w = rng .random_sample (d )
441
- msg = "WMinkowskiDistance is deprecated in version 1.1"
442
- with pytest .warns (FutureWarning , match = msg ):
443
- DistanceMetric .get_metric ("wminkowski" , p = 3 , w = w )
444
-
445
-
446
- # TODO: Remove in 1.3 when wminkowski is removed
447
- @pytest .mark .filterwarnings ("ignore:WMinkowskiDistance:FutureWarning:sklearn" )
448
- @pytest .mark .parametrize ("p" , [1 , 1.5 , 3 ])
449
- def test_wminkowski_minkowski_equivalence (p ):
450
- w = rng .random_sample (d )
451
- # Weights are rescaled for consistency w.r.t scipy 1.8 refactoring of 'minkowski'
452
- dm_wmks = DistanceMetric .get_metric ("wminkowski" , p = p , w = (w ) ** (1 / p ))
453
- dm_mks = DistanceMetric .get_metric ("minkowski" , p = p , w = w )
454
- D_wmks = dm_wmks .pairwise (X64 , Y64 )
455
- D_mks = dm_mks .pairwise (X64 , Y64 )
456
- assert_allclose (D_wmks , D_mks )
0 commit comments