scipy 1.15.3__cp312-cp312-macosx_12_0_arm64.whl → 1.16.0rc2__cp312-cp312-macosx_12_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- scipy/.dylibs/libscipy_openblas.dylib +0 -0
- scipy/__config__.py +8 -8
- scipy/__init__.py +3 -6
- scipy/_cyutility.cpython-312-darwin.so +0 -0
- scipy/_lib/_array_api.py +486 -161
- scipy/_lib/_array_api_compat_vendor.py +9 -0
- scipy/_lib/_bunch.py +4 -0
- scipy/_lib/_ccallback_c.cpython-312-darwin.so +0 -0
- scipy/_lib/_docscrape.py +1 -1
- scipy/_lib/_elementwise_iterative_method.py +15 -26
- scipy/_lib/_sparse.py +41 -0
- scipy/_lib/_test_deprecation_call.cpython-312-darwin.so +0 -0
- scipy/_lib/_test_deprecation_def.cpython-312-darwin.so +0 -0
- scipy/_lib/_testutils.py +6 -2
- scipy/_lib/_util.py +222 -125
- scipy/_lib/array_api_compat/__init__.py +4 -4
- scipy/_lib/array_api_compat/_internal.py +19 -6
- scipy/_lib/array_api_compat/common/__init__.py +1 -1
- scipy/_lib/array_api_compat/common/_aliases.py +365 -193
- scipy/_lib/array_api_compat/common/_fft.py +94 -64
- scipy/_lib/array_api_compat/common/_helpers.py +413 -180
- scipy/_lib/array_api_compat/common/_linalg.py +116 -40
- scipy/_lib/array_api_compat/common/_typing.py +179 -10
- scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
- scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
- scipy/_lib/array_api_compat/cupy/_info.py +16 -6
- scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
- scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
- scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
- scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
- scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
- scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
- scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
- scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
- scipy/_lib/array_api_compat/numpy/_info.py +36 -16
- scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
- scipy/_lib/array_api_compat/numpy/fft.py +11 -5
- scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
- scipy/_lib/array_api_compat/torch/__init__.py +3 -5
- scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
- scipy/_lib/array_api_compat/torch/_info.py +27 -16
- scipy/_lib/array_api_compat/torch/_typing.py +3 -0
- scipy/_lib/array_api_compat/torch/fft.py +17 -18
- scipy/_lib/array_api_compat/torch/linalg.py +16 -16
- scipy/_lib/array_api_extra/__init__.py +26 -3
- scipy/_lib/array_api_extra/_delegation.py +171 -0
- scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
- scipy/_lib/array_api_extra/_lib/_at.py +463 -0
- scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
- scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
- scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
- scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
- scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
- scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
- scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
- scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
- scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
- scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
- scipy/_lib/array_api_extra/testing.py +359 -0
- scipy/_lib/decorator.py +2 -2
- scipy/_lib/doccer.py +1 -7
- scipy/_lib/messagestream.cpython-312-darwin.so +0 -0
- scipy/_lib/pyprima/__init__.py +212 -0
- scipy/_lib/pyprima/cobyla/__init__.py +0 -0
- scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
- scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
- scipy/_lib/pyprima/cobyla/geometry.py +226 -0
- scipy/_lib/pyprima/cobyla/initialize.py +215 -0
- scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
- scipy/_lib/pyprima/cobyla/update.py +289 -0
- scipy/_lib/pyprima/common/__init__.py +0 -0
- scipy/_lib/pyprima/common/_bounds.py +34 -0
- scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
- scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
- scipy/_lib/pyprima/common/_project.py +173 -0
- scipy/_lib/pyprima/common/checkbreak.py +93 -0
- scipy/_lib/pyprima/common/consts.py +47 -0
- scipy/_lib/pyprima/common/evaluate.py +99 -0
- scipy/_lib/pyprima/common/history.py +38 -0
- scipy/_lib/pyprima/common/infos.py +30 -0
- scipy/_lib/pyprima/common/linalg.py +435 -0
- scipy/_lib/pyprima/common/message.py +290 -0
- scipy/_lib/pyprima/common/powalg.py +131 -0
- scipy/_lib/pyprima/common/preproc.py +277 -0
- scipy/_lib/pyprima/common/present.py +5 -0
- scipy/_lib/pyprima/common/ratio.py +54 -0
- scipy/_lib/pyprima/common/redrho.py +47 -0
- scipy/_lib/pyprima/common/selectx.py +296 -0
- scipy/_lib/tests/test__util.py +105 -121
- scipy/_lib/tests/test_array_api.py +166 -35
- scipy/_lib/tests/test_bunch.py +7 -0
- scipy/_lib/tests/test_ccallback.py +2 -10
- scipy/_lib/tests/test_public_api.py +13 -0
- scipy/cluster/_hierarchy.cpython-312-darwin.so +0 -0
- scipy/cluster/_optimal_leaf_ordering.cpython-312-darwin.so +0 -0
- scipy/cluster/_vq.cpython-312-darwin.so +0 -0
- scipy/cluster/hierarchy.py +393 -223
- scipy/cluster/tests/test_hierarchy.py +273 -335
- scipy/cluster/tests/test_vq.py +45 -61
- scipy/cluster/vq.py +39 -35
- scipy/conftest.py +263 -157
- scipy/constants/_constants.py +4 -1
- scipy/constants/tests/test_codata.py +2 -2
- scipy/constants/tests/test_constants.py +11 -18
- scipy/datasets/_download_all.py +15 -1
- scipy/datasets/_fetchers.py +7 -1
- scipy/datasets/_utils.py +1 -1
- scipy/differentiate/_differentiate.py +25 -25
- scipy/differentiate/tests/test_differentiate.py +24 -25
- scipy/fft/_basic.py +20 -0
- scipy/fft/_helper.py +3 -34
- scipy/fft/_pocketfft/helper.py +29 -1
- scipy/fft/_pocketfft/tests/test_basic.py +2 -4
- scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
- scipy/fft/_realtransforms.py +13 -0
- scipy/fft/tests/test_basic.py +27 -25
- scipy/fft/tests/test_fftlog.py +16 -7
- scipy/fft/tests/test_helper.py +18 -34
- scipy/fft/tests/test_real_transforms.py +8 -10
- scipy/fftpack/convolve.cpython-312-darwin.so +0 -0
- scipy/fftpack/tests/test_basic.py +2 -4
- scipy/fftpack/tests/test_real_transforms.py +8 -9
- scipy/integrate/_bvp.py +9 -3
- scipy/integrate/_cubature.py +3 -2
- scipy/integrate/_dop.cpython-312-darwin.so +0 -0
- scipy/integrate/_lsoda.cpython-312-darwin.so +0 -0
- scipy/integrate/_ode.py +9 -2
- scipy/integrate/_odepack.cpython-312-darwin.so +0 -0
- scipy/integrate/_quad_vec.py +21 -29
- scipy/integrate/_quadpack.cpython-312-darwin.so +0 -0
- scipy/integrate/_quadpack_py.py +11 -7
- scipy/integrate/_quadrature.py +3 -3
- scipy/integrate/_rules/_base.py +2 -2
- scipy/integrate/_tanhsinh.py +48 -47
- scipy/integrate/_test_odeint_banded.cpython-312-darwin.so +0 -0
- scipy/integrate/_vode.cpython-312-darwin.so +0 -0
- scipy/integrate/tests/test__quad_vec.py +0 -6
- scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
- scipy/integrate/tests/test_cubature.py +21 -35
- scipy/integrate/tests/test_quadrature.py +6 -8
- scipy/integrate/tests/test_tanhsinh.py +56 -48
- scipy/interpolate/__init__.py +70 -58
- scipy/interpolate/_bary_rational.py +22 -22
- scipy/interpolate/_bsplines.py +119 -66
- scipy/interpolate/_cubic.py +65 -50
- scipy/interpolate/_dfitpack.cpython-312-darwin.so +0 -0
- scipy/interpolate/_dierckx.cpython-312-darwin.so +0 -0
- scipy/interpolate/_fitpack.cpython-312-darwin.so +0 -0
- scipy/interpolate/_fitpack2.py +9 -6
- scipy/interpolate/_fitpack_impl.py +32 -26
- scipy/interpolate/_fitpack_repro.py +23 -19
- scipy/interpolate/_interpnd.cpython-312-darwin.so +0 -0
- scipy/interpolate/_interpolate.py +30 -12
- scipy/interpolate/_ndbspline.py +13 -18
- scipy/interpolate/_ndgriddata.py +5 -8
- scipy/interpolate/_polyint.py +95 -31
- scipy/interpolate/_ppoly.cpython-312-darwin.so +0 -0
- scipy/interpolate/_rbf.py +2 -2
- scipy/interpolate/_rbfinterp.py +1 -1
- scipy/interpolate/_rbfinterp_pythran.cpython-312-darwin.so +0 -0
- scipy/interpolate/_rgi.py +31 -26
- scipy/interpolate/_rgi_cython.cpython-312-darwin.so +0 -0
- scipy/interpolate/dfitpack.py +0 -20
- scipy/interpolate/interpnd.py +1 -2
- scipy/interpolate/tests/test_bary_rational.py +2 -2
- scipy/interpolate/tests/test_bsplines.py +97 -1
- scipy/interpolate/tests/test_fitpack2.py +39 -1
- scipy/interpolate/tests/test_interpnd.py +32 -20
- scipy/interpolate/tests/test_interpolate.py +48 -4
- scipy/interpolate/tests/test_rgi.py +2 -1
- scipy/io/_fast_matrix_market/__init__.py +2 -0
- scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
- scipy/io/_harwell_boeing/hb.py +7 -11
- scipy/io/_idl.py +5 -7
- scipy/io/_netcdf.py +15 -5
- scipy/io/_test_fortran.cpython-312-darwin.so +0 -0
- scipy/io/arff/tests/test_arffread.py +3 -3
- scipy/io/matlab/__init__.py +5 -3
- scipy/io/matlab/_mio.py +4 -1
- scipy/io/matlab/_mio5.py +19 -13
- scipy/io/matlab/_mio5_utils.cpython-312-darwin.so +0 -0
- scipy/io/matlab/_mio_utils.cpython-312-darwin.so +0 -0
- scipy/io/matlab/_miobase.py +4 -1
- scipy/io/matlab/_streams.cpython-312-darwin.so +0 -0
- scipy/io/matlab/tests/test_mio.py +46 -18
- scipy/io/matlab/tests/test_mio_funcs.py +1 -1
- scipy/io/tests/test_mmio.py +7 -1
- scipy/io/tests/test_wavfile.py +41 -0
- scipy/io/wavfile.py +57 -10
- scipy/linalg/_basic.py +113 -86
- scipy/linalg/_cythonized_array_utils.cpython-312-darwin.so +0 -0
- scipy/linalg/_decomp.py +22 -9
- scipy/linalg/_decomp_cholesky.py +28 -13
- scipy/linalg/_decomp_cossin.py +45 -30
- scipy/linalg/_decomp_interpolative.cpython-312-darwin.so +0 -0
- scipy/linalg/_decomp_ldl.py +4 -1
- scipy/linalg/_decomp_lu.py +18 -6
- scipy/linalg/_decomp_lu_cython.cpython-312-darwin.so +0 -0
- scipy/linalg/_decomp_polar.py +2 -0
- scipy/linalg/_decomp_qr.py +6 -2
- scipy/linalg/_decomp_qz.py +3 -0
- scipy/linalg/_decomp_schur.py +3 -1
- scipy/linalg/_decomp_svd.py +13 -2
- scipy/linalg/_decomp_update.cpython-312-darwin.so +0 -0
- scipy/linalg/_expm_frechet.py +4 -0
- scipy/linalg/_fblas.cpython-312-darwin.so +0 -0
- scipy/linalg/_flapack.cpython-312-darwin.so +0 -0
- scipy/linalg/_linalg_pythran.cpython-312-darwin.so +0 -0
- scipy/linalg/_matfuncs.py +187 -4
- scipy/linalg/_matfuncs_expm.cpython-312-darwin.so +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cpython-312-darwin.so +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +1 -99
- scipy/linalg/_matfuncs_sqrtm_triu.cpython-312-darwin.so +0 -0
- scipy/linalg/_procrustes.py +2 -0
- scipy/linalg/_sketches.py +17 -6
- scipy/linalg/_solve_toeplitz.cpython-312-darwin.so +0 -0
- scipy/linalg/_solvers.py +7 -2
- scipy/linalg/_special_matrices.py +26 -36
- scipy/linalg/cython_blas.cpython-312-darwin.so +0 -0
- scipy/linalg/cython_lapack.cpython-312-darwin.so +0 -0
- scipy/linalg/lapack.py +22 -2
- scipy/linalg/tests/_cython_examples/meson.build +7 -0
- scipy/linalg/tests/test_basic.py +31 -16
- scipy/linalg/tests/test_batch.py +588 -0
- scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
- scipy/linalg/tests/test_decomp.py +40 -3
- scipy/linalg/tests/test_decomp_cossin.py +14 -0
- scipy/linalg/tests/test_decomp_ldl.py +1 -1
- scipy/linalg/tests/test_lapack.py +115 -7
- scipy/linalg/tests/test_matfuncs.py +157 -102
- scipy/linalg/tests/test_procrustes.py +0 -7
- scipy/linalg/tests/test_solve_toeplitz.py +1 -1
- scipy/linalg/tests/test_special_matrices.py +1 -5
- scipy/ndimage/__init__.py +1 -0
- scipy/ndimage/_cytest.cpython-312-darwin.so +0 -0
- scipy/ndimage/_delegators.py +8 -2
- scipy/ndimage/_filters.py +453 -5
- scipy/ndimage/_interpolation.py +36 -6
- scipy/ndimage/_measurements.py +4 -2
- scipy/ndimage/_morphology.py +5 -0
- scipy/ndimage/_nd_image.cpython-312-darwin.so +0 -0
- scipy/ndimage/_ni_docstrings.py +5 -1
- scipy/ndimage/_ni_label.cpython-312-darwin.so +0 -0
- scipy/ndimage/_ni_support.py +1 -5
- scipy/ndimage/_rank_filter_1d.cpython-312-darwin.so +0 -0
- scipy/ndimage/_support_alternative_backends.py +18 -6
- scipy/ndimage/tests/test_filters.py +370 -259
- scipy/ndimage/tests/test_fourier.py +7 -9
- scipy/ndimage/tests/test_interpolation.py +68 -61
- scipy/ndimage/tests/test_measurements.py +18 -35
- scipy/ndimage/tests/test_morphology.py +143 -131
- scipy/ndimage/tests/test_splines.py +1 -3
- scipy/odr/__odrpack.cpython-312-darwin.so +0 -0
- scipy/optimize/_basinhopping.py +13 -7
- scipy/optimize/_bglu_dense.cpython-312-darwin.so +0 -0
- scipy/optimize/_bracket.py +17 -24
- scipy/optimize/_chandrupatla.py +9 -10
- scipy/optimize/_cobyla_py.py +104 -123
- scipy/optimize/_constraints.py +14 -10
- scipy/optimize/_differentiable_functions.py +371 -230
- scipy/optimize/_differentialevolution.py +4 -3
- scipy/optimize/_direct.cpython-312-darwin.so +0 -0
- scipy/optimize/_dual_annealing.py +1 -1
- scipy/optimize/_elementwise.py +1 -4
- scipy/optimize/_group_columns.cpython-312-darwin.so +0 -0
- scipy/optimize/_lbfgsb.cpython-312-darwin.so +0 -0
- scipy/optimize/_lbfgsb_py.py +57 -16
- scipy/optimize/_linprog_doc.py +2 -2
- scipy/optimize/_linprog_highs.py +2 -2
- scipy/optimize/_linprog_ip.py +25 -10
- scipy/optimize/_linprog_util.py +14 -16
- scipy/optimize/_lsap.cpython-312-darwin.so +0 -0
- scipy/optimize/_lsq/common.py +3 -3
- scipy/optimize/_lsq/dogbox.py +16 -2
- scipy/optimize/_lsq/givens_elimination.cpython-312-darwin.so +0 -0
- scipy/optimize/_lsq/least_squares.py +198 -126
- scipy/optimize/_lsq/lsq_linear.py +6 -6
- scipy/optimize/_lsq/trf.py +35 -8
- scipy/optimize/_milp.py +3 -1
- scipy/optimize/_minimize.py +105 -36
- scipy/optimize/_minpack.cpython-312-darwin.so +0 -0
- scipy/optimize/_minpack_py.py +21 -14
- scipy/optimize/_moduleTNC.cpython-312-darwin.so +0 -0
- scipy/optimize/_nnls.py +20 -21
- scipy/optimize/_nonlin.py +34 -3
- scipy/optimize/_numdiff.py +288 -110
- scipy/optimize/_optimize.py +86 -48
- scipy/optimize/_pava_pybind.cpython-312-darwin.so +0 -0
- scipy/optimize/_remove_redundancy.py +5 -5
- scipy/optimize/_root_scalar.py +1 -1
- scipy/optimize/_shgo.py +6 -0
- scipy/optimize/_shgo_lib/_complex.py +1 -1
- scipy/optimize/_slsqp_py.py +216 -124
- scipy/optimize/_slsqplib.cpython-312-darwin.so +0 -0
- scipy/optimize/_spectral.py +1 -1
- scipy/optimize/_tnc.py +8 -1
- scipy/optimize/_trlib/_trlib.cpython-312-darwin.so +0 -0
- scipy/optimize/_trustregion.py +20 -6
- scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
- scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
- scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
- scipy/optimize/_trustregion_constr/projections.py +12 -8
- scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
- scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
- scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
- scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
- scipy/optimize/_trustregion_exact.py +0 -1
- scipy/optimize/_zeros.cpython-312-darwin.so +0 -0
- scipy/optimize/_zeros_py.py +97 -17
- scipy/optimize/cython_optimize/_zeros.cpython-312-darwin.so +0 -0
- scipy/optimize/slsqp.py +0 -1
- scipy/optimize/tests/test__basinhopping.py +1 -1
- scipy/optimize/tests/test__differential_evolution.py +4 -4
- scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
- scipy/optimize/tests/test__numdiff.py +66 -22
- scipy/optimize/tests/test__remove_redundancy.py +2 -2
- scipy/optimize/tests/test__shgo.py +9 -1
- scipy/optimize/tests/test_bracket.py +36 -46
- scipy/optimize/tests/test_chandrupatla.py +133 -135
- scipy/optimize/tests/test_cobyla.py +74 -45
- scipy/optimize/tests/test_constraints.py +1 -1
- scipy/optimize/tests/test_differentiable_functions.py +226 -6
- scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
- scipy/optimize/tests/test_least_squares.py +125 -13
- scipy/optimize/tests/test_linear_assignment.py +3 -3
- scipy/optimize/tests/test_linprog.py +3 -3
- scipy/optimize/tests/test_lsq_linear.py +6 -6
- scipy/optimize/tests/test_minimize_constrained.py +2 -2
- scipy/optimize/tests/test_minpack.py +4 -4
- scipy/optimize/tests/test_nnls.py +43 -3
- scipy/optimize/tests/test_nonlin.py +36 -0
- scipy/optimize/tests/test_optimize.py +95 -17
- scipy/optimize/tests/test_slsqp.py +36 -4
- scipy/optimize/tests/test_zeros.py +34 -1
- scipy/signal/__init__.py +12 -23
- scipy/signal/_delegators.py +568 -0
- scipy/signal/_filter_design.py +459 -241
- scipy/signal/_fir_filter_design.py +262 -90
- scipy/signal/_lti_conversion.py +3 -2
- scipy/signal/_ltisys.py +118 -91
- scipy/signal/_max_len_seq_inner.cpython-312-darwin.so +0 -0
- scipy/signal/_peak_finding_utils.cpython-312-darwin.so +0 -0
- scipy/signal/_polyutils.py +172 -0
- scipy/signal/_short_time_fft.py +519 -70
- scipy/signal/_signal_api.py +30 -0
- scipy/signal/_signaltools.py +719 -399
- scipy/signal/_sigtools.cpython-312-darwin.so +0 -0
- scipy/signal/_sosfilt.cpython-312-darwin.so +0 -0
- scipy/signal/_spectral_py.py +230 -50
- scipy/signal/_spline.cpython-312-darwin.so +0 -0
- scipy/signal/_spline_filters.py +108 -68
- scipy/signal/_support_alternative_backends.py +73 -0
- scipy/signal/_upfirdn.py +4 -1
- scipy/signal/_upfirdn_apply.cpython-312-darwin.so +0 -0
- scipy/signal/_waveforms.py +2 -11
- scipy/signal/_wavelets.py +1 -1
- scipy/signal/fir_filter_design.py +1 -0
- scipy/signal/spline.py +4 -11
- scipy/signal/tests/_scipy_spectral_test_shim.py +2 -171
- scipy/signal/tests/test_bsplines.py +114 -79
- scipy/signal/tests/test_cont2discrete.py +9 -2
- scipy/signal/tests/test_filter_design.py +721 -481
- scipy/signal/tests/test_fir_filter_design.py +332 -140
- scipy/signal/tests/test_savitzky_golay.py +4 -3
- scipy/signal/tests/test_short_time_fft.py +221 -3
- scipy/signal/tests/test_signaltools.py +2144 -1348
- scipy/signal/tests/test_spectral.py +50 -6
- scipy/signal/tests/test_splines.py +161 -96
- scipy/signal/tests/test_upfirdn.py +84 -50
- scipy/signal/tests/test_waveforms.py +20 -0
- scipy/signal/tests/test_windows.py +607 -466
- scipy/signal/windows/_windows.py +287 -148
- scipy/sparse/__init__.py +23 -4
- scipy/sparse/_base.py +270 -108
- scipy/sparse/_bsr.py +7 -4
- scipy/sparse/_compressed.py +59 -231
- scipy/sparse/_construct.py +90 -38
- scipy/sparse/_coo.py +115 -181
- scipy/sparse/_csc.py +4 -4
- scipy/sparse/_csparsetools.cpython-312-darwin.so +0 -0
- scipy/sparse/_csr.py +2 -2
- scipy/sparse/_data.py +48 -48
- scipy/sparse/_dia.py +105 -18
- scipy/sparse/_dok.py +0 -23
- scipy/sparse/_index.py +4 -4
- scipy/sparse/_matrix.py +23 -0
- scipy/sparse/_sparsetools.cpython-312-darwin.so +0 -0
- scipy/sparse/_sputils.py +37 -22
- scipy/sparse/base.py +0 -9
- scipy/sparse/bsr.py +0 -14
- scipy/sparse/compressed.py +0 -23
- scipy/sparse/construct.py +0 -6
- scipy/sparse/coo.py +0 -14
- scipy/sparse/csc.py +0 -3
- scipy/sparse/csgraph/_flow.cpython-312-darwin.so +0 -0
- scipy/sparse/csgraph/_matching.cpython-312-darwin.so +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cpython-312-darwin.so +0 -0
- scipy/sparse/csgraph/_reordering.cpython-312-darwin.so +0 -0
- scipy/sparse/csgraph/_shortest_path.cpython-312-darwin.so +0 -0
- scipy/sparse/csgraph/_tools.cpython-312-darwin.so +0 -0
- scipy/sparse/csgraph/_traversal.cpython-312-darwin.so +0 -0
- scipy/sparse/csgraph/tests/test_matching.py +14 -2
- scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
- scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
- scipy/sparse/csr.py +0 -5
- scipy/sparse/data.py +1 -6
- scipy/sparse/dia.py +0 -7
- scipy/sparse/dok.py +0 -10
- scipy/sparse/linalg/_dsolve/_superlu.cpython-312-darwin.so +0 -0
- scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
- scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
- scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-312-darwin.so +0 -0
- scipy/sparse/linalg/_eigen/arpack/arpack.py +23 -17
- scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
- scipy/sparse/linalg/_interface.py +17 -18
- scipy/sparse/linalg/_isolve/_gcrotmk.py +4 -4
- scipy/sparse/linalg/_isolve/iterative.py +51 -45
- scipy/sparse/linalg/_isolve/lgmres.py +6 -6
- scipy/sparse/linalg/_isolve/minres.py +5 -5
- scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
- scipy/sparse/linalg/_isolve/utils.py +2 -8
- scipy/sparse/linalg/_matfuncs.py +1 -1
- scipy/sparse/linalg/_norm.py +1 -1
- scipy/sparse/linalg/_propack/_cpropack.cpython-312-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cpython-312-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_spropack.cpython-312-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cpython-312-darwin.so +0 -0
- scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
- scipy/sparse/linalg/tests/test_pydata_sparse.py +14 -0
- scipy/sparse/tests/test_arithmetic1d.py +5 -2
- scipy/sparse/tests/test_base.py +214 -42
- scipy/sparse/tests/test_common1d.py +7 -7
- scipy/sparse/tests/test_construct.py +1 -1
- scipy/sparse/tests/test_coo.py +272 -4
- scipy/sparse/tests/test_sparsetools.py +5 -0
- scipy/sparse/tests/test_sputils.py +36 -7
- scipy/spatial/_ckdtree.cpython-312-darwin.so +0 -0
- scipy/spatial/_distance_pybind.cpython-312-darwin.so +0 -0
- scipy/spatial/_distance_wrap.cpython-312-darwin.so +0 -0
- scipy/spatial/_hausdorff.cpython-312-darwin.so +0 -0
- scipy/spatial/_qhull.cpython-312-darwin.so +0 -0
- scipy/spatial/_voronoi.cpython-312-darwin.so +0 -0
- scipy/spatial/distance.py +49 -42
- scipy/spatial/tests/test_distance.py +15 -1
- scipy/spatial/tests/test_kdtree.py +1 -0
- scipy/spatial/tests/test_qhull.py +7 -2
- scipy/spatial/transform/__init__.py +5 -3
- scipy/spatial/transform/_rigid_transform.cpython-312-darwin.so +0 -0
- scipy/spatial/transform/_rotation.cpython-312-darwin.so +0 -0
- scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
- scipy/spatial/transform/tests/test_rotation.py +1213 -832
- scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
- scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
- scipy/special/__init__.py +1 -47
- scipy/special/_add_newdocs.py +34 -772
- scipy/special/_basic.py +22 -25
- scipy/special/_comb.cpython-312-darwin.so +0 -0
- scipy/special/_ellip_harm_2.cpython-312-darwin.so +0 -0
- scipy/special/_gufuncs.cpython-312-darwin.so +0 -0
- scipy/special/_logsumexp.py +67 -58
- scipy/special/_orthogonal.pyi +1 -1
- scipy/special/_specfun.cpython-312-darwin.so +0 -0
- scipy/special/_special_ufuncs.cpython-312-darwin.so +0 -0
- scipy/special/_spherical_bessel.py +4 -4
- scipy/special/_support_alternative_backends.py +212 -119
- scipy/special/_test_internal.cpython-312-darwin.so +0 -0
- scipy/special/_testutils.py +4 -4
- scipy/special/_ufuncs.cpython-312-darwin.so +0 -0
- scipy/special/_ufuncs.pyi +1 -0
- scipy/special/_ufuncs.pyx +215 -1400
- scipy/special/_ufuncs_cxx.cpython-312-darwin.so +0 -0
- scipy/special/_ufuncs_cxx.pxd +2 -15
- scipy/special/_ufuncs_cxx.pyx +5 -44
- scipy/special/_ufuncs_cxx_defs.h +2 -16
- scipy/special/_ufuncs_defs.h +0 -8
- scipy/special/cython_special.cpython-312-darwin.so +0 -0
- scipy/special/cython_special.pxd +1 -1
- scipy/special/tests/_cython_examples/meson.build +10 -1
- scipy/special/tests/test_basic.py +153 -20
- scipy/special/tests/test_boost_ufuncs.py +3 -0
- scipy/special/tests/test_cdflib.py +35 -11
- scipy/special/tests/test_gammainc.py +16 -0
- scipy/special/tests/test_hyp2f1.py +2 -2
- scipy/special/tests/test_log1mexp.py +85 -0
- scipy/special/tests/test_logsumexp.py +206 -64
- scipy/special/tests/test_mpmath.py +1 -0
- scipy/special/tests/test_nan_inputs.py +1 -1
- scipy/special/tests/test_orthogonal.py +17 -18
- scipy/special/tests/test_sf_error.py +3 -2
- scipy/special/tests/test_sph_harm.py +6 -7
- scipy/special/tests/test_support_alternative_backends.py +211 -76
- scipy/stats/__init__.py +4 -1
- scipy/stats/_ansari_swilk_statistics.cpython-312-darwin.so +0 -0
- scipy/stats/_axis_nan_policy.py +5 -12
- scipy/stats/_biasedurn.cpython-312-darwin.so +0 -0
- scipy/stats/_continued_fraction.py +387 -0
- scipy/stats/_continuous_distns.py +277 -310
- scipy/stats/_correlation.py +1 -1
- scipy/stats/_covariance.py +6 -3
- scipy/stats/_discrete_distns.py +39 -32
- scipy/stats/_distn_infrastructure.py +39 -12
- scipy/stats/_distribution_infrastructure.py +900 -238
- scipy/stats/_entropy.py +9 -10
- scipy/{_lib → stats}/_finite_differences.py +1 -1
- scipy/stats/_hypotests.py +83 -50
- scipy/stats/_kde.py +53 -49
- scipy/stats/_ksstats.py +1 -1
- scipy/stats/_levy_stable/__init__.py +7 -15
- scipy/stats/_levy_stable/levyst.cpython-312-darwin.so +0 -0
- scipy/stats/_morestats.py +118 -73
- scipy/stats/_mstats_basic.py +13 -17
- scipy/stats/_mstats_extras.py +8 -8
- scipy/stats/_multivariate.py +89 -113
- scipy/stats/_new_distributions.py +97 -20
- scipy/stats/_page_trend_test.py +12 -5
- scipy/stats/_probability_distribution.py +265 -43
- scipy/stats/_qmc.py +14 -9
- scipy/stats/_qmc_cy.cpython-312-darwin.so +0 -0
- scipy/stats/_qmvnt.py +16 -95
- scipy/stats/_qmvnt_cy.cpython-312-darwin.so +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/rcont.cpython-312-darwin.so +0 -0
- scipy/stats/_resampling.py +4 -29
- scipy/stats/_sampling.py +1 -1
- scipy/stats/_sobol.cpython-312-darwin.so +0 -0
- scipy/stats/_stats.cpython-312-darwin.so +0 -0
- scipy/stats/_stats_mstats_common.py +21 -2
- scipy/stats/_stats_py.py +550 -476
- scipy/stats/_stats_pythran.cpython-312-darwin.so +0 -0
- scipy/stats/_unuran/unuran_wrapper.cpython-312-darwin.so +0 -0
- scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
- scipy/stats/_variation.py +6 -8
- scipy/stats/_wilcoxon.py +13 -7
- scipy/stats/tests/common_tests.py +6 -4
- scipy/stats/tests/test_axis_nan_policy.py +62 -24
- scipy/stats/tests/test_continued_fraction.py +173 -0
- scipy/stats/tests/test_continuous.py +379 -60
- scipy/stats/tests/test_continuous_basic.py +18 -12
- scipy/stats/tests/test_discrete_basic.py +14 -8
- scipy/stats/tests/test_discrete_distns.py +16 -16
- scipy/stats/tests/test_distributions.py +95 -75
- scipy/stats/tests/test_entropy.py +40 -48
- scipy/stats/tests/test_fit.py +4 -3
- scipy/stats/tests/test_hypotests.py +153 -24
- scipy/stats/tests/test_kdeoth.py +109 -41
- scipy/stats/tests/test_marray.py +289 -0
- scipy/stats/tests/test_morestats.py +79 -47
- scipy/stats/tests/test_mstats_basic.py +3 -3
- scipy/stats/tests/test_multivariate.py +434 -83
- scipy/stats/tests/test_qmc.py +13 -10
- scipy/stats/tests/test_quantile.py +199 -0
- scipy/stats/tests/test_rank.py +119 -112
- scipy/stats/tests/test_resampling.py +47 -56
- scipy/stats/tests/test_sampling.py +9 -4
- scipy/stats/tests/test_stats.py +799 -939
- scipy/stats/tests/test_variation.py +8 -6
- scipy/version.py +2 -2
- {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/LICENSE.txt +4 -4
- {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/METADATA +11 -11
- {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/RECORD +561 -568
- scipy-1.16.0rc2.dist-info/WHEEL +6 -0
- scipy/_lib/array_api_extra/_funcs.py +0 -484
- scipy/_lib/array_api_extra/_typing.py +0 -8
- scipy/interpolate/_bspl.cpython-312-darwin.so +0 -0
- scipy/optimize/_cobyla.cpython-312-darwin.so +0 -0
- scipy/optimize/_cython_nnls.cpython-312-darwin.so +0 -0
- scipy/optimize/_slsqp.cpython-312-darwin.so +0 -0
- scipy/spatial/qhull_src/COPYING.txt +0 -38
- scipy/special/libsf_error_state.dylib +0 -0
- scipy/special/tests/test_log_softmax.py +0 -109
- scipy/special/tests/test_xsf_cuda.py +0 -114
- scipy/special/xsf/binom.h +0 -89
- scipy/special/xsf/cdflib.h +0 -100
- scipy/special/xsf/cephes/airy.h +0 -307
- scipy/special/xsf/cephes/besselpoly.h +0 -51
- scipy/special/xsf/cephes/beta.h +0 -257
- scipy/special/xsf/cephes/cbrt.h +0 -131
- scipy/special/xsf/cephes/chbevl.h +0 -85
- scipy/special/xsf/cephes/chdtr.h +0 -193
- scipy/special/xsf/cephes/const.h +0 -87
- scipy/special/xsf/cephes/ellie.h +0 -293
- scipy/special/xsf/cephes/ellik.h +0 -251
- scipy/special/xsf/cephes/ellpe.h +0 -107
- scipy/special/xsf/cephes/ellpk.h +0 -117
- scipy/special/xsf/cephes/expn.h +0 -260
- scipy/special/xsf/cephes/gamma.h +0 -398
- scipy/special/xsf/cephes/hyp2f1.h +0 -596
- scipy/special/xsf/cephes/hyperg.h +0 -361
- scipy/special/xsf/cephes/i0.h +0 -149
- scipy/special/xsf/cephes/i1.h +0 -158
- scipy/special/xsf/cephes/igam.h +0 -421
- scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
- scipy/special/xsf/cephes/igami.h +0 -313
- scipy/special/xsf/cephes/j0.h +0 -225
- scipy/special/xsf/cephes/j1.h +0 -198
- scipy/special/xsf/cephes/jv.h +0 -715
- scipy/special/xsf/cephes/k0.h +0 -164
- scipy/special/xsf/cephes/k1.h +0 -163
- scipy/special/xsf/cephes/kn.h +0 -243
- scipy/special/xsf/cephes/lanczos.h +0 -112
- scipy/special/xsf/cephes/ndtr.h +0 -275
- scipy/special/xsf/cephes/poch.h +0 -85
- scipy/special/xsf/cephes/polevl.h +0 -167
- scipy/special/xsf/cephes/psi.h +0 -194
- scipy/special/xsf/cephes/rgamma.h +0 -111
- scipy/special/xsf/cephes/scipy_iv.h +0 -811
- scipy/special/xsf/cephes/shichi.h +0 -248
- scipy/special/xsf/cephes/sici.h +0 -224
- scipy/special/xsf/cephes/sindg.h +0 -221
- scipy/special/xsf/cephes/tandg.h +0 -139
- scipy/special/xsf/cephes/trig.h +0 -58
- scipy/special/xsf/cephes/unity.h +0 -186
- scipy/special/xsf/cephes/zeta.h +0 -172
- scipy/special/xsf/config.h +0 -304
- scipy/special/xsf/digamma.h +0 -205
- scipy/special/xsf/error.h +0 -57
- scipy/special/xsf/evalpoly.h +0 -47
- scipy/special/xsf/expint.h +0 -266
- scipy/special/xsf/hyp2f1.h +0 -694
- scipy/special/xsf/iv_ratio.h +0 -173
- scipy/special/xsf/lambertw.h +0 -150
- scipy/special/xsf/loggamma.h +0 -163
- scipy/special/xsf/sici.h +0 -200
- scipy/special/xsf/tools.h +0 -427
- scipy/special/xsf/trig.h +0 -164
- scipy/special/xsf/wright_bessel.h +0 -843
- scipy/special/xsf/zlog1.h +0 -35
- scipy/stats/_mvn.cpython-312-darwin.so +0 -0
- scipy-1.15.3.dist-info/WHEEL +0 -4
@@ -12,10 +12,8 @@ import pytest
|
|
12
12
|
|
13
13
|
from scipy import ndimage
|
14
14
|
|
15
|
-
from scipy.conftest import array_api_compatible
|
16
15
|
skip_xp_backends = pytest.mark.skip_xp_backends
|
17
|
-
pytestmark = [
|
18
|
-
skip_xp_backends(cpu_only=True, exceptions=['cupy', 'jax.numpy'],)]
|
16
|
+
pytestmark = [skip_xp_backends(cpu_only=True, exceptions=['cupy', 'jax.numpy'])]
|
19
17
|
|
20
18
|
|
21
19
|
@skip_xp_backends('jax.numpy', reason="jax-ml/jax#23827")
|
@@ -177,12 +175,12 @@ class TestNdimageFourier:
|
|
177
175
|
ndimage.fourier_gaussian,
|
178
176
|
ndimage.fourier_uniform])
|
179
177
|
def test_fourier_zero_length_dims(self, shape, dtype, test_func, xp):
|
180
|
-
if
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
178
|
+
if (
|
179
|
+
is_cupy(xp)
|
180
|
+
and test_func.__name__ == "fourier_ellipsoid"
|
181
|
+
and math.prod(shape) == 0
|
182
|
+
):
|
183
|
+
pytest.xfail("CuPy's fourier_ellipsoid does not accept size==0 arrays")
|
186
184
|
dtype = getattr(xp, dtype)
|
187
185
|
a = xp.ones(shape, dtype=dtype)
|
188
186
|
b = test_func(a, 3)
|
@@ -3,10 +3,10 @@ import sys
|
|
3
3
|
import numpy as np
|
4
4
|
from numpy.testing import suppress_warnings
|
5
5
|
from scipy._lib._array_api import (
|
6
|
+
_asarray, assert_array_almost_equal,
|
7
|
+
is_jax, np_compat,
|
6
8
|
xp_assert_equal, xp_assert_close,
|
7
|
-
assert_array_almost_equal,
|
8
9
|
)
|
9
|
-
from scipy._lib._array_api import is_cupy, is_jax, _asarray, array_namespace
|
10
10
|
|
11
11
|
import pytest
|
12
12
|
from pytest import raises as assert_raises
|
@@ -14,10 +14,9 @@ import scipy.ndimage as ndimage
|
|
14
14
|
|
15
15
|
from . import types
|
16
16
|
|
17
|
-
from scipy.conftest import array_api_compatible
|
18
17
|
skip_xp_backends = pytest.mark.skip_xp_backends
|
19
|
-
|
20
|
-
|
18
|
+
xfail_xp_backends = pytest.mark.xfail_xp_backends
|
19
|
+
pytestmark = [skip_xp_backends(cpu_only=True, exceptions=['cupy', 'jax.numpy'])]
|
21
20
|
|
22
21
|
|
23
22
|
eps = 1e-12
|
@@ -91,14 +90,13 @@ class TestBoundaries:
|
|
91
90
|
np_data = np.arange(-6, 7, dtype=np.float64)
|
92
91
|
data = xp.asarray(np_data)
|
93
92
|
x = xp.asarray(np.linspace(-8, 15, num=1000))
|
94
|
-
|
95
|
-
y = ndimage.map_coordinates(data, x[newaxis, ...], order=order, mode=mode)
|
93
|
+
y = ndimage.map_coordinates(data, x[xp.newaxis, ...], order=order, mode=mode)
|
96
94
|
|
97
95
|
# compute expected value using explicit padding via np.pad
|
98
96
|
npad = 32
|
99
97
|
pad_mode = ndimage_to_numpy_mode.get(mode)
|
100
98
|
padded = xp.asarray(np.pad(np_data, npad, mode=pad_mode))
|
101
|
-
coords = xp.asarray(npad + x)[newaxis, ...]
|
99
|
+
coords = xp.asarray(npad + x)[xp.newaxis, ...]
|
102
100
|
expected = ndimage.map_coordinates(padded, coords, order=order, mode=mode)
|
103
101
|
|
104
102
|
atol = 1e-5 if mode == 'grid-constant' else 1e-12
|
@@ -121,7 +119,8 @@ class TestSpline:
|
|
121
119
|
out = ndimage.spline_filter(data, order=order)
|
122
120
|
assert_array_almost_equal(out, xp.asarray([1]))
|
123
121
|
|
124
|
-
@skip_xp_backends(np_only=True,
|
122
|
+
@skip_xp_backends(np_only=True, exceptions=["cupy"],
|
123
|
+
reason='output=dtype is numpy-specific')
|
125
124
|
def test_spline03(self, dtype, order, xp):
|
126
125
|
dtype = getattr(xp, dtype)
|
127
126
|
data = xp.ones([], dtype=dtype)
|
@@ -199,8 +198,7 @@ class TestGeometricTransform:
|
|
199
198
|
[0, 1, 1, 1],
|
200
199
|
[0, 1, 1, 1]], dtype=dtype)
|
201
200
|
|
202
|
-
isdtype
|
203
|
-
if isdtype(data.dtype, 'complex floating'):
|
201
|
+
if xp.isdtype(data.dtype, 'complex floating'):
|
204
202
|
data -= 1j * data
|
205
203
|
expected -= 1j * expected
|
206
204
|
|
@@ -294,54 +292,58 @@ class TestGeometricTransform:
|
|
294
292
|
assert_array_almost_equal(out, xp.asarray([1, 2, 3, 4], dtype=out.dtype))
|
295
293
|
|
296
294
|
def test_geometric_transform15(self, order, xp):
|
297
|
-
data = [1, 2, 3, 4]
|
295
|
+
data = xp.asarray([1, 2, 3, 4])
|
298
296
|
|
299
297
|
def mapping(x):
|
300
298
|
return (x[0] / 2,)
|
301
299
|
|
302
300
|
out = ndimage.geometric_transform(data, mapping, [8], order=order)
|
303
|
-
assert_array_almost_equal(out[::2], [1, 2, 3, 4])
|
301
|
+
assert_array_almost_equal(out[::2], xp.asarray([1, 2, 3, 4]))
|
304
302
|
|
305
303
|
def test_geometric_transform16(self, order, xp):
|
306
304
|
data = [[1, 2, 3, 4],
|
307
305
|
[5, 6, 7, 8],
|
308
306
|
[9.0, 10, 11, 12]]
|
307
|
+
data = xp.asarray(data)
|
309
308
|
|
310
309
|
def mapping(x):
|
311
310
|
return (x[0], x[1] * 2)
|
312
311
|
|
313
312
|
out = ndimage.geometric_transform(data, mapping, (3, 2),
|
314
313
|
order=order)
|
315
|
-
assert_array_almost_equal(out, [[1, 3], [5, 7], [9, 11]])
|
314
|
+
assert_array_almost_equal(out, xp.asarray([[1, 3], [5, 7], [9, 11]]))
|
316
315
|
|
317
316
|
def test_geometric_transform17(self, order, xp):
|
318
317
|
data = [[1, 2, 3, 4],
|
319
318
|
[5, 6, 7, 8],
|
320
319
|
[9, 10, 11, 12]]
|
320
|
+
data = xp.asarray(data)
|
321
321
|
|
322
322
|
def mapping(x):
|
323
323
|
return (x[0] * 2, x[1])
|
324
324
|
|
325
325
|
out = ndimage.geometric_transform(data, mapping, (1, 4),
|
326
326
|
order=order)
|
327
|
-
assert_array_almost_equal(out, [[1, 2, 3, 4]])
|
327
|
+
assert_array_almost_equal(out, xp.asarray([[1, 2, 3, 4]]))
|
328
328
|
|
329
329
|
def test_geometric_transform18(self, order, xp):
|
330
330
|
data = [[1, 2, 3, 4],
|
331
331
|
[5, 6, 7, 8],
|
332
332
|
[9, 10, 11, 12]]
|
333
|
+
data = xp.asarray(data)
|
333
334
|
|
334
335
|
def mapping(x):
|
335
336
|
return (x[0] * 2, x[1] * 2)
|
336
337
|
|
337
338
|
out = ndimage.geometric_transform(data, mapping, (1, 2),
|
338
339
|
order=order)
|
339
|
-
assert_array_almost_equal(out, [[1, 3]])
|
340
|
+
assert_array_almost_equal(out, xp.asarray([[1, 3]]))
|
340
341
|
|
341
342
|
def test_geometric_transform19(self, order, xp):
|
342
343
|
data = [[1, 2, 3, 4],
|
343
344
|
[5, 6, 7, 8],
|
344
345
|
[9, 10, 11, 12]]
|
346
|
+
data = xp.asarray(data)
|
345
347
|
|
346
348
|
def mapping(x):
|
347
349
|
return (x[0], x[1] / 2)
|
@@ -354,6 +356,7 @@ class TestGeometricTransform:
|
|
354
356
|
data = [[1, 2, 3, 4],
|
355
357
|
[5, 6, 7, 8],
|
356
358
|
[9, 10, 11, 12]]
|
359
|
+
data = xp.asarray(data)
|
357
360
|
|
358
361
|
def mapping(x):
|
359
362
|
return (x[0] / 2, x[1])
|
@@ -366,6 +369,7 @@ class TestGeometricTransform:
|
|
366
369
|
data = [[1, 2, 3, 4],
|
367
370
|
[5, 6, 7, 8],
|
368
371
|
[9, 10, 11, 12]]
|
372
|
+
data = xp.asarray(data)
|
369
373
|
|
370
374
|
def mapping(x):
|
371
375
|
return (x[0] / 2, x[1] / 2)
|
@@ -375,9 +379,10 @@ class TestGeometricTransform:
|
|
375
379
|
assert_array_almost_equal(out[::2, ::2], data)
|
376
380
|
|
377
381
|
def test_geometric_transform22(self, order, xp):
|
378
|
-
data =
|
379
|
-
|
380
|
-
|
382
|
+
data = [[1, 2, 3, 4],
|
383
|
+
[5, 6, 7, 8],
|
384
|
+
[9, 10, 11, 12]]
|
385
|
+
data = xp.asarray(data, dtype=xp.float64)
|
381
386
|
|
382
387
|
def mapping1(x):
|
383
388
|
return (x[0] / 2, x[1] / 2)
|
@@ -395,18 +400,19 @@ class TestGeometricTransform:
|
|
395
400
|
data = [[1, 2, 3, 4],
|
396
401
|
[5, 6, 7, 8],
|
397
402
|
[9, 10, 11, 12]]
|
403
|
+
data = xp.asarray(data)
|
398
404
|
|
399
405
|
def mapping(x):
|
400
406
|
return (1, x[0] * 2)
|
401
407
|
|
402
408
|
out = ndimage.geometric_transform(data, mapping, (2,), order=order)
|
403
|
-
out
|
404
|
-
assert_array_almost_equal(out, [5, 7])
|
409
|
+
assert_array_almost_equal(out, xp.asarray([5, 7]))
|
405
410
|
|
406
411
|
def test_geometric_transform24(self, order, xp):
|
407
412
|
data = [[1, 2, 3, 4],
|
408
413
|
[5, 6, 7, 8],
|
409
414
|
[9, 10, 11, 12]]
|
415
|
+
data = xp.asarray(data)
|
410
416
|
|
411
417
|
def mapping(x, a, b):
|
412
418
|
return (a, x[0] * b)
|
@@ -414,7 +420,7 @@ class TestGeometricTransform:
|
|
414
420
|
out = ndimage.geometric_transform(
|
415
421
|
data, mapping, (2,), order=order, extra_arguments=(1,),
|
416
422
|
extra_keywords={'b': 2})
|
417
|
-
assert_array_almost_equal(out, [5, 7])
|
423
|
+
assert_array_almost_equal(out, xp.asarray([5, 7]))
|
418
424
|
|
419
425
|
|
420
426
|
@skip_xp_backends("cupy", reason="CuPy does not have geometric_transform")
|
@@ -509,8 +515,7 @@ class TestMapCoordinates:
|
|
509
515
|
expected = xp.asarray([[0, 0, 0, 0],
|
510
516
|
[0, 4, 1, 3],
|
511
517
|
[0, 7, 6, 8]])
|
512
|
-
isdtype
|
513
|
-
if isdtype(data.dtype, 'complex floating'):
|
518
|
+
if xp.isdtype(data.dtype, 'complex floating'):
|
514
519
|
data = data - 1j * data
|
515
520
|
expected = expected - 1j * expected
|
516
521
|
|
@@ -596,6 +601,7 @@ class TestMapCoordinates:
|
|
596
601
|
assert out.dtype is np.dtype('f')
|
597
602
|
assert_array_almost_equal(out, xp.asarray([[1]]))
|
598
603
|
|
604
|
+
@pytest.mark.skip_xp_backends(cpu_only=True)
|
599
605
|
@pytest.mark.skipif('win32' in sys.platform or np.intp(0).itemsize < 8,
|
600
606
|
reason='do not run on 32 bit or windows '
|
601
607
|
'(no sparse memory)')
|
@@ -650,8 +656,7 @@ class TestAffineTransform:
|
|
650
656
|
expected = xp.asarray([[0, 1, 1, 1],
|
651
657
|
[0, 1, 1, 1],
|
652
658
|
[0, 1, 1, 1]], dtype=dtype)
|
653
|
-
isdtype
|
654
|
-
if isdtype(data.dtype, 'complex floating'):
|
659
|
+
if xp.isdtype(data.dtype, 'complex floating'):
|
655
660
|
data -= 1j * data
|
656
661
|
expected -= 1j * expected
|
657
662
|
out = ndimage.affine_transform(data, xp.asarray([[1, 0], [0, 1]]),
|
@@ -796,11 +801,9 @@ class TestAffineTransform:
|
|
796
801
|
(3, 4), order=order)
|
797
802
|
assert_array_almost_equal(out, data)
|
798
803
|
|
804
|
+
@xfail_xp_backends("cupy", reason="https://github.com/cupy/cupy/issues/8394")
|
799
805
|
@pytest.mark.parametrize('order', range(0, 6))
|
800
806
|
def test_affine_transform20(self, order, xp):
|
801
|
-
if is_cupy(xp):
|
802
|
-
pytest.xfail("https://github.com/cupy/cupy/issues/8394")
|
803
|
-
|
804
807
|
data = [[1, 2, 3, 4],
|
805
808
|
[5, 6, 7, 8],
|
806
809
|
[9, 10, 11, 12]]
|
@@ -809,11 +812,9 @@ class TestAffineTransform:
|
|
809
812
|
order=order)
|
810
813
|
assert_array_almost_equal(out, xp.asarray([1, 3]))
|
811
814
|
|
815
|
+
@xfail_xp_backends("cupy", reason="https://github.com/cupy/cupy/issues/8394")
|
812
816
|
@pytest.mark.parametrize('order', range(0, 6))
|
813
817
|
def test_affine_transform21(self, order, xp):
|
814
|
-
if is_cupy(xp):
|
815
|
-
pytest.xfail("https://github.com/cupy/cupy/issues/8394")
|
816
|
-
|
817
818
|
data = [[1, 2, 3, 4],
|
818
819
|
[5, 6, 7, 8],
|
819
820
|
[9, 10, 11, 12]]
|
@@ -875,9 +876,8 @@ class TestAffineTransform:
|
|
875
876
|
tform_original = xp.eye(2)
|
876
877
|
offset_original = -xp.ones((2, 1))
|
877
878
|
|
878
|
-
|
879
|
-
|
880
|
-
tform_h2 = concat( (tform_h1, xp.asarray([[0.0, 0, 1]])), axis=0) # vstack
|
879
|
+
tform_h1 = xp.concat((tform_original, offset_original), axis=1) # hstack
|
880
|
+
tform_h2 = xp.concat((tform_h1, xp.asarray([[0.0, 0, 1]])), axis=0) # vstack
|
881
881
|
|
882
882
|
offs = [float(x) for x in xp.reshape(offset_original, (-1,))]
|
883
883
|
|
@@ -893,17 +893,14 @@ class TestAffineTransform:
|
|
893
893
|
[0, 4, 1, 3],
|
894
894
|
[0, 7, 6, 8]]))
|
895
895
|
|
896
|
+
@xfail_xp_backends("cupy", reason="does not raise")
|
896
897
|
def test_affine_transform27(self, xp):
|
897
|
-
if is_cupy(xp):
|
898
|
-
pytest.xfail("CuPy does not raise")
|
899
|
-
|
900
898
|
# test valid homogeneous transformation matrix
|
901
899
|
data = xp.asarray([[4, 1, 3, 2],
|
902
900
|
[7, 6, 8, 5],
|
903
901
|
[3, 5, 3, 6]])
|
904
|
-
|
905
|
-
|
906
|
-
tform_h2 = concat((tform_h1, xp.asarray([[5.0, 2, 1]])), axis=0) # hstack
|
902
|
+
tform_h1 = xp.concat((xp.eye(2), -xp.ones((2, 1))) , axis=1) # vstack
|
903
|
+
tform_h2 = xp.concat((tform_h1, xp.asarray([[5.0, 2, 1]])), axis=0) # hstack
|
907
904
|
|
908
905
|
assert_raises(ValueError, ndimage.affine_transform, data, tform_h2)
|
909
906
|
|
@@ -1038,8 +1035,7 @@ class TestShift:
|
|
1038
1035
|
expected = xp.asarray([[0, 1, 1, 1],
|
1039
1036
|
[0, 1, 1, 1],
|
1040
1037
|
[0, 1, 1, 1]], dtype=dtype)
|
1041
|
-
isdtype
|
1042
|
-
if isdtype(data.dtype, 'complex floating'):
|
1038
|
+
if xp.isdtype(data.dtype, 'complex floating'):
|
1043
1039
|
data -= 1j * data
|
1044
1040
|
expected -= 1j * expected
|
1045
1041
|
out = ndimage.shift(data, [0, 1], order=order)
|
@@ -1057,8 +1053,7 @@ class TestShift:
|
|
1057
1053
|
[0, 1, 1, 1],
|
1058
1054
|
[0, 1, 1, 1]], dtype=dtype)
|
1059
1055
|
|
1060
|
-
isdtype
|
1061
|
-
if isdtype(data.dtype, 'complex floating'):
|
1056
|
+
if np_compat.isdtype(data.dtype, 'complex floating'):
|
1062
1057
|
data -= 1j * data
|
1063
1058
|
expected -= 1j * expected
|
1064
1059
|
cval = 5.0
|
@@ -1237,8 +1232,7 @@ class TestZoom:
|
|
1237
1232
|
data = xp.asarray([[1, 2, 3, 4],
|
1238
1233
|
[5, 6, 7, 8],
|
1239
1234
|
[9, 10, 11, 12]], dtype=dtype)
|
1240
|
-
isdtype
|
1241
|
-
if isdtype(data.dtype, 'complex floating'):
|
1235
|
+
if xp.isdtype(data.dtype, 'complex floating'):
|
1242
1236
|
data -= 1j * data
|
1243
1237
|
with suppress_warnings() as sup:
|
1244
1238
|
sup.filter(UserWarning,
|
@@ -1314,7 +1308,8 @@ class TestZoom:
|
|
1314
1308
|
match="It is recommended to use mode"):
|
1315
1309
|
ndimage.zoom(x, 2, mode=mode, grid_mode=True),
|
1316
1310
|
|
1317
|
-
@skip_xp_backends(
|
1311
|
+
@skip_xp_backends("dask.array", reason="output=array requires buffer view")
|
1312
|
+
@skip_xp_backends("jax.numpy", reason="output=array requires buffer view")
|
1318
1313
|
def test_zoom_output_shape(self, xp):
|
1319
1314
|
"""Ticket #643"""
|
1320
1315
|
x = xp.reshape(xp.arange(12), (3, 4))
|
@@ -1328,6 +1323,23 @@ class TestZoom:
|
|
1328
1323
|
expected = ndimage.zoom(a, factor)
|
1329
1324
|
xp_assert_close(actual, expected)
|
1330
1325
|
|
1326
|
+
@xfail_xp_backends("cupy", reason="CuPy `zoom` needs similar fix.")
|
1327
|
+
def test_zoom_1_gh20999(self, xp):
|
1328
|
+
# gh-20999 reported that zoom with `zoom=1` (or sequence of ones)
|
1329
|
+
# introduced noise. Check that this is resolved.
|
1330
|
+
x = xp.eye(3)
|
1331
|
+
xp_assert_equal(ndimage.zoom(x, 1), x)
|
1332
|
+
xp_assert_equal(ndimage.zoom(x, (1, 1)), x)
|
1333
|
+
|
1334
|
+
@xfail_xp_backends("cupy", reason="CuPy `zoom` needs similar fix.")
|
1335
|
+
@skip_xp_backends("jax.numpy", reason="read-only backend")
|
1336
|
+
@xfail_xp_backends("dask.array", reason="numpy round-trip")
|
1337
|
+
def test_zoom_1_gh20999_output(self, xp):
|
1338
|
+
x = xp.eye(3)
|
1339
|
+
output = xp.zeros_like(x)
|
1340
|
+
ndimage.zoom(x, 1, output=output)
|
1341
|
+
xp_assert_equal(output, x)
|
1342
|
+
|
1331
1343
|
|
1332
1344
|
class TestRotate:
|
1333
1345
|
|
@@ -1363,8 +1375,7 @@ class TestRotate:
|
|
1363
1375
|
[0, 1, 0],
|
1364
1376
|
[0, 1, 0],
|
1365
1377
|
[0, 0, 0]], dtype=dtype)
|
1366
|
-
isdtype
|
1367
|
-
if isdtype(data.dtype, 'complex floating'):
|
1378
|
+
if xp.isdtype(data.dtype, 'complex floating'):
|
1368
1379
|
data -= 1j * data
|
1369
1380
|
expected -= 1j * expected
|
1370
1381
|
out = ndimage.rotate(data, 90, order=order)
|
@@ -1418,14 +1429,13 @@ class TestRotate:
|
|
1418
1429
|
data = xp.asarray([[[0, 0, 0, 0, 0],
|
1419
1430
|
[0, 1, 1, 0, 0],
|
1420
1431
|
[0, 0, 0, 0, 0]]] * 2, dtype=xp.float64)
|
1421
|
-
|
1422
|
-
data = permute_dims(data, (2, 1, 0))
|
1432
|
+
data = xp.permute_dims(data, (2, 1, 0))
|
1423
1433
|
expected = xp.asarray([[[0, 0, 0],
|
1424
1434
|
[0, 1, 0],
|
1425
1435
|
[0, 1, 0],
|
1426
1436
|
[0, 0, 0],
|
1427
1437
|
[0, 0, 0]]] * 2, dtype=xp.float64)
|
1428
|
-
expected = permute_dims(expected, (2, 1, 0))
|
1438
|
+
expected = xp.permute_dims(expected, (2, 1, 0))
|
1429
1439
|
out = ndimage.rotate(data, 90, axes=(0, 1), order=order)
|
1430
1440
|
assert_array_almost_equal(out, expected)
|
1431
1441
|
|
@@ -1434,13 +1444,11 @@ class TestRotate:
|
|
1434
1444
|
data = xp.asarray([[[0, 0, 0, 0, 0],
|
1435
1445
|
[0, 1, 1, 0, 0],
|
1436
1446
|
[0, 0, 0, 0, 0]]] * 2, dtype=xp.float64)
|
1437
|
-
|
1438
|
-
data = permute_dims(data, (2, 1, 0)) # == np.transpose
|
1447
|
+
data = xp.permute_dims(data, (2, 1, 0)) # == np.transpose
|
1439
1448
|
expected = xp.asarray([[[0, 0, 1, 0, 0],
|
1440
1449
|
[0, 0, 1, 0, 0],
|
1441
1450
|
[0, 0, 0, 0, 0]]] * 2, dtype=xp.float64)
|
1442
|
-
|
1443
|
-
expected = permute_dims(expected, (2, 1, 0))
|
1451
|
+
expected = xp.permute_dims(expected, (2, 1, 0))
|
1444
1452
|
out = ndimage.rotate(data, 90, axes=(0, 1), reshape=False, order=order)
|
1445
1453
|
assert_array_almost_equal(out, expected)
|
1446
1454
|
|
@@ -1475,10 +1483,9 @@ class TestRotate:
|
|
1475
1483
|
#assert_array_almost_equal(out, expected)
|
1476
1484
|
xp_assert_close(out, expected, rtol=1e-6, atol=2e-6)
|
1477
1485
|
|
1478
|
-
def test_rotate_exact_180(self, xp):
|
1479
|
-
if is_cupy(xp):
|
1480
|
-
pytest.xfail("https://github.com/cupy/cupy/issues/8400")
|
1481
1486
|
|
1482
|
-
|
1487
|
+
@xfail_xp_backends("cupy", reason="https://github.com/cupy/cupy/issues/8400")
|
1488
|
+
def test_rotate_exact_180(self, xp):
|
1489
|
+
a = xp.asarray(np.tile(np.arange(5), (5, 1)))
|
1483
1490
|
b = ndimage.rotate(ndimage.rotate(a, 180), -180)
|
1484
1491
|
xp_assert_equal(a, b)
|
@@ -5,9 +5,7 @@ import numpy as np
|
|
5
5
|
from numpy.testing import suppress_warnings
|
6
6
|
|
7
7
|
from scipy._lib._array_api import (
|
8
|
-
is_jax,
|
9
8
|
is_torch,
|
10
|
-
array_namespace,
|
11
9
|
xp_assert_equal,
|
12
10
|
xp_assert_close,
|
13
11
|
assert_array_almost_equal,
|
@@ -21,10 +19,8 @@ import scipy.ndimage as ndimage
|
|
21
19
|
|
22
20
|
from . import types
|
23
21
|
|
24
|
-
from scipy.conftest import array_api_compatible
|
25
22
|
skip_xp_backends = pytest.mark.skip_xp_backends
|
26
|
-
pytestmark = [
|
27
|
-
skip_xp_backends(cpu_only=True, exceptions=['cupy', 'jax.numpy'],)]
|
23
|
+
pytestmark = [skip_xp_backends(cpu_only=True, exceptions=['cupy', 'jax.numpy'])]
|
28
24
|
|
29
25
|
IS_WINDOWS_AND_NP1 = os.name == 'nt' and np.__version__ < '2'
|
30
26
|
|
@@ -112,6 +108,7 @@ class Test_measurements_stats:
|
|
112
108
|
xp_assert_equal(centers, np.asarray([0.5, 8.0]))
|
113
109
|
|
114
110
|
|
111
|
+
@skip_xp_backends(np_only=True, reason='test internal numpy-only helpers')
|
115
112
|
class Test_measurements_select:
|
116
113
|
"""ndimage._measurements._select() is a utility used by other functions."""
|
117
114
|
|
@@ -151,20 +148,19 @@ class Test_measurements_select:
|
|
151
148
|
|
152
149
|
|
153
150
|
def test_label01(xp):
|
154
|
-
data = xp.ones(
|
151
|
+
data = xp.ones(())
|
155
152
|
out, n = ndimage.label(data)
|
156
153
|
assert out == 1
|
157
154
|
assert n == 1
|
158
155
|
|
159
156
|
|
160
157
|
def test_label02(xp):
|
161
|
-
data = xp.zeros(
|
158
|
+
data = xp.zeros(())
|
162
159
|
out, n = ndimage.label(data)
|
163
160
|
assert out == 0
|
164
161
|
assert n == 0
|
165
162
|
|
166
163
|
|
167
|
-
@pytest.mark.thread_unsafe # due to Cython fused types, see cython#6506
|
168
164
|
def test_label03(xp):
|
169
165
|
data = xp.ones([1])
|
170
166
|
out, n = ndimage.label(data)
|
@@ -342,7 +338,8 @@ def test_label13(xp):
|
|
342
338
|
assert n == 1
|
343
339
|
|
344
340
|
|
345
|
-
@skip_xp_backends(np_only=True,
|
341
|
+
@skip_xp_backends(np_only=True, exceptions=["cupy"],
|
342
|
+
reason='output=dtype is numpy-specific')
|
346
343
|
def test_label_output_typed(xp):
|
347
344
|
data = xp.ones([5])
|
348
345
|
for t in types:
|
@@ -354,7 +351,8 @@ def test_label_output_typed(xp):
|
|
354
351
|
assert n == 1
|
355
352
|
|
356
353
|
|
357
|
-
@skip_xp_backends(np_only=True,
|
354
|
+
@skip_xp_backends(np_only=True, exceptions=["cupy"],
|
355
|
+
reason='output=dtype is numpy-specific')
|
358
356
|
def test_label_output_dtype(xp):
|
359
357
|
data = xp.ones([5])
|
360
358
|
for t in types:
|
@@ -365,17 +363,13 @@ def test_label_output_dtype(xp):
|
|
365
363
|
assert output.dtype == t
|
366
364
|
|
367
365
|
|
366
|
+
@skip_xp_backends(np_only=True, reason="in-place output is numpy-specific")
|
368
367
|
def test_label_output_wrong_size(xp):
|
369
|
-
if is_jax(xp):
|
370
|
-
pytest.xfail("JAX does not raise")
|
371
|
-
|
372
368
|
data = xp.ones([5])
|
373
369
|
for t in types:
|
374
370
|
dtype = getattr(xp, t)
|
375
371
|
output = xp.zeros([10], dtype=dtype)
|
376
|
-
|
377
|
-
assert_raises((ValueError, TypeError),
|
378
|
-
ndimage.label, data, output=output)
|
372
|
+
assert_raises(ValueError, ndimage.label, data, output=output)
|
379
373
|
|
380
374
|
|
381
375
|
def test_label_structuring_elements(xp):
|
@@ -400,9 +394,7 @@ def test_label_structuring_elements(xp):
|
|
400
394
|
xp_assert_equal(ndimage.label(d, s)[0], results[r, :, :], check_dtype=False)
|
401
395
|
r += 1
|
402
396
|
|
403
|
-
@skip_xp_backends("cupy",
|
404
|
-
reason="`cupyx.scipy.ndimage` does not have `find_objects`"
|
405
|
-
)
|
397
|
+
@skip_xp_backends("cupy", reason="`cupyx.scipy.ndimage` does not have `find_objects`")
|
406
398
|
def test_ticket_742(xp):
|
407
399
|
def SE(img, thresh=.7, size=4):
|
408
400
|
mask = img > thresh
|
@@ -533,11 +525,7 @@ def test_value_indices01(xp):
|
|
533
525
|
true_keys = [1, 2, 4]
|
534
526
|
assert list(vi.keys()) == true_keys
|
535
527
|
|
536
|
-
|
537
|
-
|
538
|
-
truevi = {}
|
539
|
-
for k in true_keys:
|
540
|
-
truevi[k] = xp.nonzero(data == k, **nnz_kwd)
|
528
|
+
truevi = {k: xp.nonzero(data == k) for k in true_keys}
|
541
529
|
|
542
530
|
vi = ndimage.value_indices(data, ignore_value=0)
|
543
531
|
assert vi.keys() == truevi.keys()
|
@@ -558,17 +546,15 @@ def test_value_indices02(xp):
|
|
558
546
|
def test_value_indices03(xp):
|
559
547
|
"Test different input array shapes, from 1-D to 4-D"
|
560
548
|
for shape in [(36,), (18, 2), (3, 3, 4), (3, 3, 2, 2)]:
|
561
|
-
a =
|
562
|
-
a =
|
549
|
+
a = np.asarray((12*[1]+12*[2]+12*[3]), dtype=np.int32)
|
550
|
+
a = np.reshape(a, shape)
|
563
551
|
|
564
|
-
|
565
|
-
|
566
|
-
unique_values = array_namespace(a).unique_values
|
567
|
-
trueKeys = unique_values(a)
|
552
|
+
trueKeys = np.unique(a)
|
553
|
+
a = xp.asarray(a)
|
568
554
|
vi = ndimage.value_indices(a)
|
569
555
|
assert list(vi.keys()) == list(trueKeys)
|
570
556
|
for k in [int(x) for x in trueKeys]:
|
571
|
-
trueNdx = xp.nonzero(a == k
|
557
|
+
trueNdx = xp.nonzero(a == k)
|
572
558
|
assert len(vi[k]) == len(trueNdx)
|
573
559
|
for vik, true_vik in zip(vi[k], trueNdx):
|
574
560
|
xp_assert_equal(vik, true_vik)
|
@@ -1139,9 +1125,6 @@ def test_maximum_position06(xp):
|
|
1139
1125
|
|
1140
1126
|
def test_maximum_position07(xp):
|
1141
1127
|
# Test float labels
|
1142
|
-
if is_torch(xp):
|
1143
|
-
pytest.xfail("output[1] is wrong on pytorch")
|
1144
|
-
|
1145
1128
|
labels = xp.asarray([1.0, 2.5, 0.0, 4.5])
|
1146
1129
|
for type in types:
|
1147
1130
|
dtype = getattr(xp, type)
|
@@ -1586,7 +1569,7 @@ class TestWatershedIft:
|
|
1586
1569
|
[1, 1]]
|
1587
1570
|
assert_array_almost_equal(out, xp.asarray(expected))
|
1588
1571
|
|
1589
|
-
@skip_xp_backends("cupy", reason="no watershed_ift on CuPy"
|
1572
|
+
@skip_xp_backends("cupy", reason="no watershed_ift on CuPy")
|
1590
1573
|
def test_watershed_ift09(self, xp):
|
1591
1574
|
# Test large cost. See gh-19575
|
1592
1575
|
data = xp.asarray([[xp.iinfo(xp.uint16).max, 0],
|