scipy 1.15.3__cp313-cp313t-win_amd64.whl → 1.16.0rc2__cp313-cp313t-win_amd64.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/__config__.py +7 -7
- scipy/__init__.py +3 -6
- scipy/_cyutility.cp313t-win_amd64.dll.a +0 -0
- scipy/_cyutility.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/_lib/_ccallback_c.cp313t-win_amd64.pyd +0 -0
- scipy/_lib/_docscrape.py +1 -1
- scipy/_lib/_elementwise_iterative_method.py +15 -26
- scipy/_lib/_fpumode.cp313t-win_amd64.dll.a +0 -0
- scipy/_lib/_fpumode.cp313t-win_amd64.pyd +0 -0
- scipy/_lib/_sparse.py +41 -0
- scipy/_lib/_test_ccallback.cp313t-win_amd64.dll.a +0 -0
- scipy/_lib/_test_ccallback.cp313t-win_amd64.pyd +0 -0
- scipy/_lib/_test_deprecation_call.cp313t-win_amd64.dll.a +0 -0
- scipy/_lib/_test_deprecation_call.cp313t-win_amd64.pyd +0 -0
- scipy/_lib/_test_deprecation_def.cp313t-win_amd64.dll.a +0 -0
- scipy/_lib/_test_deprecation_def.cp313t-win_amd64.pyd +0 -0
- scipy/_lib/_testutils.py +6 -2
- scipy/_lib/_uarray/_uarray.cp313t-win_amd64.dll.a +0 -0
- scipy/_lib/_uarray/_uarray.cp313t-win_amd64.pyd +0 -0
- 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.cp313t-win_amd64.dll.a +0 -0
- scipy/_lib/messagestream.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/cluster/_hierarchy.cp313t-win_amd64.pyd +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp313t-win_amd64.dll.a +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp313t-win_amd64.pyd +0 -0
- scipy/cluster/_vq.cp313t-win_amd64.dll.a +0 -0
- scipy/cluster/_vq.cp313t-win_amd64.pyd +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/pypocketfft.cp313t-win_amd64.dll.a +0 -0
- scipy/fft/_pocketfft/pypocketfft.cp313t-win_amd64.pyd +0 -0
- 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.cp313t-win_amd64.dll.a +0 -0
- scipy/fftpack/convolve.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/integrate/_dop.cp313t-win_amd64.pyd +0 -0
- scipy/integrate/_lsoda.cp313t-win_amd64.dll.a +0 -0
- scipy/integrate/_lsoda.cp313t-win_amd64.pyd +0 -0
- scipy/integrate/_ode.py +9 -2
- scipy/integrate/_odepack.cp313t-win_amd64.dll.a +0 -0
- scipy/integrate/_odepack.cp313t-win_amd64.pyd +0 -0
- scipy/integrate/_quad_vec.py +21 -29
- scipy/integrate/_quadpack.cp313t-win_amd64.dll.a +0 -0
- scipy/integrate/_quadpack.cp313t-win_amd64.pyd +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_multivariate.cp313t-win_amd64.dll.a +0 -0
- scipy/integrate/_test_multivariate.cp313t-win_amd64.pyd +0 -0
- scipy/integrate/_test_odeint_banded.cp313t-win_amd64.dll.a +0 -0
- scipy/integrate/_test_odeint_banded.cp313t-win_amd64.pyd +0 -0
- scipy/integrate/_vode.cp313t-win_amd64.dll.a +0 -0
- scipy/integrate/_vode.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/interpolate/_dfitpack.cp313t-win_amd64.pyd +0 -0
- scipy/interpolate/_dierckx.cp313t-win_amd64.dll.a +0 -0
- scipy/interpolate/_dierckx.cp313t-win_amd64.pyd +0 -0
- scipy/interpolate/_fitpack.cp313t-win_amd64.dll.a +0 -0
- scipy/interpolate/_fitpack.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/interpolate/_interpnd.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/interpolate/_ppoly.cp313t-win_amd64.pyd +0 -0
- scipy/interpolate/_rbf.py +2 -2
- scipy/interpolate/_rbfinterp.py +1 -1
- scipy/interpolate/_rbfinterp_pythran.cp313t-win_amd64.dll.a +0 -0
- scipy/interpolate/_rbfinterp_pythran.cp313t-win_amd64.pyd +0 -0
- scipy/interpolate/_rgi.py +31 -26
- scipy/interpolate/_rgi_cython.cp313t-win_amd64.dll.a +0 -0
- scipy/interpolate/_rgi_cython.cp313t-win_amd64.pyd +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/_fast_matrix_market/_fmm_core.cp313t-win_amd64.dll.a +0 -0
- scipy/io/_fast_matrix_market/_fmm_core.cp313t-win_amd64.pyd +0 -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.cp313t-win_amd64.dll.a +0 -0
- scipy/io/_test_fortran.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/io/matlab/_mio5_utils.cp313t-win_amd64.pyd +0 -0
- scipy/io/matlab/_mio_utils.cp313t-win_amd64.dll.a +0 -0
- scipy/io/matlab/_mio_utils.cp313t-win_amd64.pyd +0 -0
- scipy/io/matlab/_miobase.py +4 -1
- scipy/io/matlab/_streams.cp313t-win_amd64.dll.a +0 -0
- scipy/io/matlab/_streams.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/_cythonized_array_utils.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_interpolative.cp313t-win_amd64.pyd +0 -0
- scipy/linalg/_decomp_ldl.py +4 -1
- scipy/linalg/_decomp_lu.py +18 -6
- scipy/linalg/_decomp_lu_cython.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_lu_cython.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_update.cp313t-win_amd64.pyd +0 -0
- scipy/linalg/_expm_frechet.py +4 -0
- scipy/linalg/_fblas.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/_fblas.cp313t-win_amd64.pyd +0 -0
- scipy/linalg/_flapack.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/_flapack.cp313t-win_amd64.pyd +0 -0
- scipy/linalg/_linalg_pythran.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/_linalg_pythran.cp313t-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs.py +187 -4
- scipy/linalg/_matfuncs_expm.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_expm.cp313t-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cp313t-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +1 -99
- scipy/linalg/_matfuncs_sqrtm_triu.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp313t-win_amd64.pyd +0 -0
- scipy/linalg/_procrustes.py +2 -0
- scipy/linalg/_sketches.py +17 -6
- scipy/linalg/_solve_toeplitz.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/_solve_toeplitz.cp313t-win_amd64.pyd +0 -0
- scipy/linalg/_solvers.py +7 -2
- scipy/linalg/_special_matrices.py +26 -36
- scipy/linalg/cython_blas.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/cython_blas.cp313t-win_amd64.pyd +0 -0
- scipy/linalg/cython_lapack.cp313t-win_amd64.dll.a +0 -0
- scipy/linalg/cython_lapack.cp313t-win_amd64.pyd +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/_ctest.cp313t-win_amd64.dll.a +0 -0
- scipy/ndimage/_ctest.cp313t-win_amd64.pyd +0 -0
- scipy/ndimage/_cytest.cp313t-win_amd64.dll.a +0 -0
- scipy/ndimage/_cytest.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/ndimage/_nd_image.cp313t-win_amd64.pyd +0 -0
- scipy/ndimage/_ni_docstrings.py +5 -1
- scipy/ndimage/_ni_label.cp313t-win_amd64.dll.a +0 -0
- scipy/ndimage/_ni_label.cp313t-win_amd64.pyd +0 -0
- scipy/ndimage/_ni_support.py +1 -5
- scipy/ndimage/_rank_filter_1d.cp313t-win_amd64.dll.a +0 -0
- scipy/ndimage/_rank_filter_1d.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/odr/__odrpack.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_basinhopping.py +13 -7
- scipy/optimize/_bglu_dense.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_bglu_dense.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_direct.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_dual_annealing.py +1 -1
- scipy/optimize/_elementwise.py +1 -4
- scipy/optimize/_group_columns.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_group_columns.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_highspy/_core.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_highspy/_core.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_highspy/_highs_options.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_highspy/_highs_options.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_lbfgsb.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_lbfgsb.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_lsap.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_lsq/common.py +3 -3
- scipy/optimize/_lsq/dogbox.py +16 -2
- scipy/optimize/_lsq/givens_elimination.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_lsq/givens_elimination.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_minpack.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_minpack_py.py +21 -14
- scipy/optimize/_moduleTNC.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_moduleTNC.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_pava_pybind.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_slsqplib.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_spectral.py +1 -1
- scipy/optimize/_tnc.py +8 -1
- scipy/optimize/_trlib/_trlib.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_trlib/_trlib.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_zeros.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_zeros_py.py +97 -17
- scipy/optimize/cython_optimize/_zeros.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/cython_optimize/_zeros.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/signal/_max_len_seq_inner.cp313t-win_amd64.pyd +0 -0
- scipy/signal/_peak_finding_utils.cp313t-win_amd64.dll.a +0 -0
- scipy/signal/_peak_finding_utils.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/signal/_sigtools.cp313t-win_amd64.pyd +0 -0
- scipy/signal/_sosfilt.cp313t-win_amd64.dll.a +0 -0
- scipy/signal/_sosfilt.cp313t-win_amd64.pyd +0 -0
- scipy/signal/_spectral_py.py +230 -50
- scipy/signal/_spline.cp313t-win_amd64.dll.a +0 -0
- scipy/signal/_spline.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/signal/_upfirdn_apply.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/_csparsetools.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/_sparsetools.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_flow.cp313t-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_matching.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_matching.cp313t-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp313t-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_reordering.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_reordering.cp313t-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_shortest_path.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_shortest_path.cp313t-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_tools.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_tools.cp313t-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_traversal.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_traversal.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_dsolve/_superlu.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_eigen/arpack/_arpack.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_cpropack.cp313t-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp313t-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp313t-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp313t-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/spatial/_ckdtree.cp313t-win_amd64.pyd +0 -0
- scipy/spatial/_distance_pybind.cp313t-win_amd64.dll.a +0 -0
- scipy/spatial/_distance_pybind.cp313t-win_amd64.pyd +0 -0
- scipy/spatial/_distance_wrap.cp313t-win_amd64.dll.a +0 -0
- scipy/spatial/_distance_wrap.cp313t-win_amd64.pyd +0 -0
- scipy/spatial/_hausdorff.cp313t-win_amd64.dll.a +0 -0
- scipy/spatial/_hausdorff.cp313t-win_amd64.pyd +0 -0
- scipy/spatial/_qhull.cp313t-win_amd64.dll.a +0 -0
- scipy/spatial/_qhull.cp313t-win_amd64.pyd +0 -0
- scipy/spatial/_voronoi.cp313t-win_amd64.dll.a +0 -0
- scipy/spatial/_voronoi.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/spatial/transform/_rigid_transform.cp313t-win_amd64.pyd +0 -0
- scipy/spatial/transform/_rotation.cp313t-win_amd64.dll.a +0 -0
- scipy/spatial/transform/_rotation.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/special/_comb.cp313t-win_amd64.pyd +0 -0
- scipy/special/_ellip_harm_2.cp313t-win_amd64.dll.a +0 -0
- scipy/special/_ellip_harm_2.cp313t-win_amd64.pyd +0 -0
- scipy/special/_gufuncs.cp313t-win_amd64.dll.a +0 -0
- scipy/special/_gufuncs.cp313t-win_amd64.pyd +0 -0
- scipy/special/_logsumexp.py +67 -58
- scipy/special/_orthogonal.pyi +1 -1
- scipy/special/_specfun.cp313t-win_amd64.dll.a +0 -0
- scipy/special/_specfun.cp313t-win_amd64.pyd +0 -0
- scipy/special/_special_ufuncs.cp313t-win_amd64.dll.a +0 -0
- scipy/special/_special_ufuncs.cp313t-win_amd64.pyd +0 -0
- scipy/special/_spherical_bessel.py +4 -4
- scipy/special/_support_alternative_backends.py +212 -119
- scipy/special/_test_internal.cp313t-win_amd64.dll.a +0 -0
- scipy/special/_test_internal.cp313t-win_amd64.pyd +0 -0
- scipy/special/_testutils.py +4 -4
- scipy/special/_ufuncs.cp313t-win_amd64.dll.a +0 -0
- scipy/special/_ufuncs.cp313t-win_amd64.pyd +0 -0
- scipy/special/_ufuncs.pyi +1 -0
- scipy/special/_ufuncs.pyx +215 -1400
- scipy/special/_ufuncs_cxx.cp313t-win_amd64.dll.a +0 -0
- scipy/special/_ufuncs_cxx.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/special/cython_special.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/stats/_ansari_swilk_statistics.cp313t-win_amd64.pyd +0 -0
- scipy/stats/_axis_nan_policy.py +5 -12
- scipy/stats/_biasedurn.cp313t-win_amd64.dll.a +0 -0
- scipy/stats/_biasedurn.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/stats/_levy_stable/levyst.cp313t-win_amd64.pyd +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.cp313t-win_amd64.dll.a +0 -0
- scipy/stats/_qmc_cy.cp313t-win_amd64.pyd +0 -0
- scipy/stats/_qmvnt.py +16 -95
- scipy/stats/_qmvnt_cy.cp313t-win_amd64.dll.a +0 -0
- scipy/stats/_qmvnt_cy.cp313t-win_amd64.pyd +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/rcont.cp313t-win_amd64.dll.a +0 -0
- scipy/stats/_rcont/rcont.cp313t-win_amd64.pyd +0 -0
- scipy/stats/_resampling.py +4 -29
- scipy/stats/_sampling.py +1 -1
- scipy/stats/_sobol.cp313t-win_amd64.dll.a +0 -0
- scipy/stats/_sobol.cp313t-win_amd64.pyd +0 -0
- scipy/stats/_stats.cp313t-win_amd64.dll.a +0 -0
- scipy/stats/_stats.cp313t-win_amd64.pyd +0 -0
- scipy/stats/_stats_mstats_common.py +21 -2
- scipy/stats/_stats_py.py +550 -476
- scipy/stats/_stats_pythran.cp313t-win_amd64.dll.a +0 -0
- scipy/stats/_stats_pythran.cp313t-win_amd64.pyd +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp313t-win_amd64.dll.a +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp313t-win_amd64.pyd +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.16.0rc2.dist-info/DELVEWHEEL +2 -0
- {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 +685 -693
- scipy/_lib/array_api_extra/_funcs.py +0 -484
- scipy/_lib/array_api_extra/_typing.py +0 -8
- scipy/interpolate/_bspl.cp313t-win_amd64.dll.a +0 -0
- scipy/interpolate/_bspl.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_cobyla.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_cobyla.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_cython_nnls.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_cython_nnls.cp313t-win_amd64.pyd +0 -0
- scipy/optimize/_slsqp.cp313t-win_amd64.dll.a +0 -0
- scipy/optimize/_slsqp.cp313t-win_amd64.pyd +0 -0
- scipy/spatial/qhull_src/COPYING.txt +0 -38
- scipy/special/libsf_error_state.dll +0 -0
- scipy/special/libsf_error_state.dll.a +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.cp313t-win_amd64.dll.a +0 -0
- scipy/stats/_mvn.cp313t-win_amd64.pyd +0 -0
- scipy-1.15.3.dist-info/DELVEWHEEL +0 -2
- /scipy-1.15.3-cp313-cp313t-win_amd64.whl → /scipy-1.16.0rc2-cp313-cp313t-win_amd64.whl +0 -0
- {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/WHEEL +0 -0
@@ -5,22 +5,24 @@
|
|
5
5
|
|
6
6
|
"""
|
7
7
|
import functools
|
8
|
+
import pytest
|
8
9
|
|
9
10
|
import numpy as np
|
10
|
-
from numpy import array, identity,
|
11
|
+
from numpy import array, identity, sqrt
|
11
12
|
from numpy.testing import (assert_array_almost_equal, assert_allclose, assert_,
|
12
|
-
assert_array_less, assert_array_equal, assert_warns
|
13
|
-
|
13
|
+
assert_array_less, assert_array_equal, assert_warns,
|
14
|
+
suppress_warnings)
|
14
15
|
|
15
16
|
import scipy.linalg
|
16
17
|
from scipy.linalg import (funm, signm, logm, sqrtm, fractional_matrix_power,
|
17
18
|
expm, expm_frechet, expm_cond, norm, khatri_rao,
|
18
19
|
cosm, sinm, tanm, coshm, sinhm, tanhm)
|
20
|
+
|
19
21
|
from scipy.linalg import _matfuncs_inv_ssq
|
20
22
|
from scipy.linalg._matfuncs import pick_pade_structure
|
21
23
|
from scipy.linalg._matfuncs_inv_ssq import LogmExactlySingularWarning
|
22
24
|
import scipy.linalg._expm_frechet
|
23
|
-
|
25
|
+
from scipy.linalg import LinAlgWarning
|
24
26
|
from scipy.optimize import minimize
|
25
27
|
|
26
28
|
|
@@ -63,7 +65,7 @@ class TestSignM:
|
|
63
65
|
|
64
66
|
def test_defective1(self):
|
65
67
|
a = array([[0.0,1,0,0],[1,0,1,0],[0,0,0,1],[0,0,1,0]])
|
66
|
-
signm(a
|
68
|
+
signm(a)
|
67
69
|
#XXX: what would be the correct result?
|
68
70
|
|
69
71
|
def test_defective2(self):
|
@@ -73,7 +75,7 @@ class TestSignM:
|
|
73
75
|
[-10.0,6.0,-20.0,-18.0,-2.0],
|
74
76
|
[-9.6,9.6,-25.5,-15.4,-2.0],
|
75
77
|
[9.8,-4.8,18.0,18.2,2.0]))
|
76
|
-
signm(a
|
78
|
+
signm(a)
|
77
79
|
#XXX: what would be the correct result?
|
78
80
|
|
79
81
|
def test_defective3(self):
|
@@ -84,12 +86,15 @@ class TestSignM:
|
|
84
86
|
[0., 0., 0., 0., 3., 10., 0.],
|
85
87
|
[0., 0., 0., 0., 0., -2., 25.],
|
86
88
|
[0., 0., 0., 0., 0., 0., -3.]])
|
87
|
-
signm(a
|
89
|
+
signm(a)
|
88
90
|
#XXX: what would be the correct result?
|
89
91
|
|
90
92
|
|
91
93
|
class TestLogM:
|
94
|
+
def setup_method(self):
|
95
|
+
self.rng = np.random.default_rng(1738098768840254)
|
92
96
|
|
97
|
+
@pytest.mark.filterwarnings("ignore:.*inaccurate.*:RuntimeWarning")
|
93
98
|
def test_nils(self):
|
94
99
|
a = array([[-2., 25., 0., 0., 0., 0., 0.],
|
95
100
|
[0., -3., 10., 3., 3., 3., 0.],
|
@@ -99,14 +104,15 @@ class TestLogM:
|
|
99
104
|
[0., 0., 0., 0., 0., -2., 25.],
|
100
105
|
[0., 0., 0., 0., 0., 0., -3.]])
|
101
106
|
m = (identity(7)*3.1+0j)-a
|
102
|
-
logm(m
|
107
|
+
logm(m)
|
103
108
|
#XXX: what would be the correct result?
|
104
109
|
|
110
|
+
@pytest.mark.filterwarnings("ignore:.*inaccurate.*:RuntimeWarning")
|
105
111
|
def test_al_mohy_higham_2012_experiment_1_logm(self):
|
106
112
|
# The logm completes the round trip successfully.
|
107
113
|
# Note that the expm leg of the round trip is badly conditioned.
|
108
114
|
A = _get_al_mohy_higham_2012_experiment_1()
|
109
|
-
A_logm
|
115
|
+
A_logm = logm(A)
|
110
116
|
A_round_trip = expm(A_logm)
|
111
117
|
assert_allclose(A_round_trip, A, rtol=5e-5, atol=1e-14)
|
112
118
|
|
@@ -114,14 +120,13 @@ class TestLogM:
|
|
114
120
|
# The raw funm with np.log does not complete the round trip.
|
115
121
|
# Note that the expm leg of the round trip is badly conditioned.
|
116
122
|
A = _get_al_mohy_higham_2012_experiment_1()
|
117
|
-
A_funm_log
|
123
|
+
A_funm_log = funm(A, np.log)
|
118
124
|
A_round_trip = expm(A_funm_log)
|
119
125
|
assert_(not np.allclose(A_round_trip, A, rtol=1e-5, atol=1e-14))
|
120
126
|
|
121
127
|
def test_round_trip_random_float(self):
|
122
|
-
np.random.seed(1234)
|
123
128
|
for n in range(1, 6):
|
124
|
-
M_unscaled =
|
129
|
+
M_unscaled = self.rng.uniform(size=(n, n))
|
125
130
|
for scale in np.logspace(-4, 4, 9):
|
126
131
|
M = M_unscaled * scale
|
127
132
|
|
@@ -130,22 +135,26 @@ class TestLogM:
|
|
130
135
|
err_msg = f'M:{M} eivals:{W}'
|
131
136
|
|
132
137
|
# Check sqrtm round trip because it is used within logm.
|
133
|
-
M_sqrtm
|
134
|
-
M_sqrtm_round_trip = M_sqrtm
|
138
|
+
M_sqrtm = sqrtm(M)
|
139
|
+
M_sqrtm_round_trip = M_sqrtm @ M_sqrtm
|
135
140
|
assert_allclose(M_sqrtm_round_trip, M)
|
136
141
|
|
137
142
|
# Check logm round trip.
|
138
|
-
|
139
|
-
|
140
|
-
|
143
|
+
with suppress_warnings() as sup:
|
144
|
+
sup.filter(category=RuntimeWarning)
|
145
|
+
|
146
|
+
M_logm = logm(M)
|
147
|
+
M_logm_round_trip = expm(M_logm)
|
148
|
+
assert_allclose(M_logm_round_trip, M, err_msg=err_msg)
|
141
149
|
|
142
150
|
def test_round_trip_random_complex(self):
|
143
|
-
|
151
|
+
|
144
152
|
for n in range(1, 6):
|
145
|
-
M_unscaled =
|
153
|
+
M_unscaled = (self.rng.standard_normal((n, n)) +
|
154
|
+
1j*self.rng.standard_normal((n, n)))
|
146
155
|
for scale in np.logspace(-4, 4, 9):
|
147
156
|
M = M_unscaled * scale
|
148
|
-
M_logm
|
157
|
+
M_logm = logm(M)
|
149
158
|
M_round_trip = expm(M_logm)
|
150
159
|
assert_allclose(M_round_trip, M)
|
151
160
|
|
@@ -166,17 +175,17 @@ class TestLogM:
|
|
166
175
|
|
167
176
|
# check float type preservation
|
168
177
|
A = np.array(matrix_as_list, dtype=float)
|
169
|
-
A_logm
|
178
|
+
A_logm = logm(A)
|
170
179
|
assert_(A_logm.dtype.char not in complex_dtype_chars)
|
171
180
|
|
172
181
|
# check complex type preservation
|
173
182
|
A = np.array(matrix_as_list, dtype=complex)
|
174
|
-
A_logm
|
183
|
+
A_logm = logm(A)
|
175
184
|
assert_(A_logm.dtype.char in complex_dtype_chars)
|
176
185
|
|
177
186
|
# check float->complex type conversion for the matrix negation
|
178
187
|
A = -np.array(matrix_as_list, dtype=float)
|
179
|
-
A_logm
|
188
|
+
A_logm = logm(A)
|
180
189
|
assert_(A_logm.dtype.char in complex_dtype_chars)
|
181
190
|
|
182
191
|
def test_complex_spectrum_real_logm(self):
|
@@ -187,7 +196,7 @@ class TestLogM:
|
|
187
196
|
X = np.array(M, dtype=dt)
|
188
197
|
w = scipy.linalg.eigvals(X)
|
189
198
|
assert_(1e-2 < np.absolute(w.imag).sum())
|
190
|
-
Y
|
199
|
+
Y = logm(X)
|
191
200
|
assert_(np.issubdtype(Y.dtype, np.inexact))
|
192
201
|
assert_allclose(expm(Y), X)
|
193
202
|
|
@@ -199,7 +208,7 @@ class TestLogM:
|
|
199
208
|
[[0, 1], [1, 0]]):
|
200
209
|
for dt in float, complex:
|
201
210
|
A = np.array(M, dtype=dt)
|
202
|
-
A_logm, info = logm(A
|
211
|
+
A_logm, info = logm(A)
|
203
212
|
assert_(np.issubdtype(A_logm.dtype, np.complexfloating))
|
204
213
|
|
205
214
|
@pytest.mark.thread_unsafe
|
@@ -208,7 +217,7 @@ class TestLogM:
|
|
208
217
|
B = np.asarray([[1, 1], [0, 0]])
|
209
218
|
for M in A, A.T, B, B.T:
|
210
219
|
expected_warning = _matfuncs_inv_ssq.LogmExactlySingularWarning
|
211
|
-
L
|
220
|
+
L = assert_warns(expected_warning, logm, M)
|
212
221
|
E = expm(L)
|
213
222
|
assert_allclose(E, M, atol=1e-14)
|
214
223
|
|
@@ -216,7 +225,7 @@ class TestLogM:
|
|
216
225
|
def test_nearly_singular(self):
|
217
226
|
M = np.array([[1e-100]])
|
218
227
|
expected_warning = _matfuncs_inv_ssq.LogmNearlySingularWarning
|
219
|
-
L
|
228
|
+
L = assert_warns(expected_warning, logm, M)
|
220
229
|
E = expm(L)
|
221
230
|
assert_allclose(E, M, atol=1e-14)
|
222
231
|
|
@@ -264,23 +273,25 @@ class TestLogM:
|
|
264
273
|
|
265
274
|
|
266
275
|
class TestSqrtM:
|
276
|
+
|
267
277
|
def test_round_trip_random_float(self):
|
268
|
-
rng = np.random.
|
278
|
+
rng = np.random.default_rng(1738151906092735)
|
269
279
|
for n in range(1, 6):
|
270
|
-
M_unscaled = rng.
|
280
|
+
M_unscaled = rng.standard_normal((n, n))
|
271
281
|
for scale in np.logspace(-4, 4, 9):
|
272
282
|
M = M_unscaled * scale
|
273
|
-
M_sqrtm
|
283
|
+
M_sqrtm = sqrtm(M)
|
274
284
|
M_sqrtm_round_trip = M_sqrtm.dot(M_sqrtm)
|
275
285
|
assert_allclose(M_sqrtm_round_trip, M)
|
276
286
|
|
277
287
|
def test_round_trip_random_complex(self):
|
278
|
-
rng = np.random.
|
288
|
+
rng = np.random.default_rng(1738151906092736)
|
279
289
|
for n in range(1, 6):
|
280
|
-
M_unscaled = rng.
|
290
|
+
M_unscaled = (rng.standard_normal((n, n)) +
|
291
|
+
1j * rng.standard_normal((n, n)))
|
281
292
|
for scale in np.logspace(-4, 4, 9):
|
282
293
|
M = M_unscaled * scale
|
283
|
-
M_sqrtm
|
294
|
+
M_sqrtm = sqrtm(M)
|
284
295
|
M_sqrtm_round_trip = M_sqrtm.dot(M_sqrtm)
|
285
296
|
assert_allclose(M_sqrtm_round_trip, M)
|
286
297
|
|
@@ -296,14 +307,10 @@ class TestSqrtM:
|
|
296
307
|
[0,se,0,0],
|
297
308
|
[0,0,se,0],
|
298
309
|
[0,0,0,1]])
|
299
|
-
|
300
|
-
assert_array_almost_equal(dot(sa,sa),a)
|
310
|
+
assert_array_almost_equal(sa @ sa, a)
|
301
311
|
# Check default sqrtm.
|
302
|
-
esa = sqrtm(a
|
303
|
-
assert_array_almost_equal(
|
304
|
-
# Check sqrtm with 2x2 blocks.
|
305
|
-
esa = sqrtm(a, disp=False, blocksize=2)[0]
|
306
|
-
assert_array_almost_equal(dot(esa,esa),a)
|
312
|
+
esa = sqrtm(a)
|
313
|
+
assert_array_almost_equal(esa @ esa, a)
|
307
314
|
|
308
315
|
def test_sqrtm_type_preservation_and_conversion(self):
|
309
316
|
# The sqrtm matrix function should preserve the type of a matrix
|
@@ -321,27 +328,31 @@ class TestSqrtM:
|
|
321
328
|
W = scipy.linalg.eigvals(matrix_as_list)
|
322
329
|
assert_(not any(w.imag or w.real < 0 for w in W))
|
323
330
|
|
324
|
-
#
|
325
|
-
|
326
|
-
|
327
|
-
assert_(A_sqrtm.dtype.char not in complex_dtype_chars)
|
331
|
+
# Last test matrix is singular so suppress the warning
|
332
|
+
with suppress_warnings() as sup:
|
333
|
+
sup.filter(category=LinAlgWarning)
|
328
334
|
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
335
|
+
# check float type preservation
|
336
|
+
A = np.array(matrix_as_list, dtype=float)
|
337
|
+
A_sqrtm = sqrtm(A)
|
338
|
+
assert_(A_sqrtm.dtype.char not in complex_dtype_chars)
|
333
339
|
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
340
|
+
# check complex type preservation
|
341
|
+
A = np.array(matrix_as_list, dtype=complex)
|
342
|
+
A_sqrtm = sqrtm(A)
|
343
|
+
assert_(A_sqrtm.dtype.char in complex_dtype_chars)
|
344
|
+
|
345
|
+
# check float->complex type conversion for the matrix negation
|
346
|
+
A = -np.array(matrix_as_list, dtype=float)
|
347
|
+
A_sqrtm = sqrtm(A)
|
348
|
+
assert_(A_sqrtm.dtype.char in complex_dtype_chars)
|
338
349
|
|
339
350
|
def test_sqrtm_type_conversion_mixed_sign_or_complex_spectrum(self):
|
340
351
|
complex_dtype_chars = ('F', 'D', 'G')
|
341
352
|
for matrix_as_list in (
|
342
353
|
[[1, 0], [0, -1]],
|
343
354
|
[[0, 1], [1, 0]],
|
344
|
-
[[0, 1, 0], [0, 0, 1], [1, 0, 0]]):
|
355
|
+
[[0, 1, 0], [0, 0, -1], [1, 0, 0]]):
|
345
356
|
|
346
357
|
# check that the spectrum has the expected properties
|
347
358
|
W = scipy.linalg.eigvals(matrix_as_list)
|
@@ -349,44 +360,44 @@ class TestSqrtM:
|
|
349
360
|
|
350
361
|
# check complex->complex
|
351
362
|
A = np.array(matrix_as_list, dtype=complex)
|
352
|
-
A_sqrtm
|
363
|
+
A_sqrtm = sqrtm(A)
|
353
364
|
assert_(A_sqrtm.dtype.char in complex_dtype_chars)
|
354
365
|
|
355
366
|
# check float->complex
|
356
367
|
A = np.array(matrix_as_list, dtype=float)
|
357
|
-
A_sqrtm
|
368
|
+
A_sqrtm = sqrtm(A)
|
358
369
|
assert_(A_sqrtm.dtype.char in complex_dtype_chars)
|
359
370
|
|
360
|
-
def test_blocksizes(self):
|
361
|
-
# Make sure I do not goof up the blocksizes when they do not divide n.
|
362
|
-
np.random.seed(1234)
|
363
|
-
for n in range(1, 8):
|
364
|
-
A = np.random.rand(n, n) + 1j*np.random.randn(n, n)
|
365
|
-
A_sqrtm_default, info = sqrtm(A, disp=False, blocksize=n)
|
366
|
-
assert_allclose(A, np.linalg.matrix_power(A_sqrtm_default, 2))
|
367
|
-
for blocksize in range(1, 10):
|
368
|
-
A_sqrtm_new, info = sqrtm(A, disp=False, blocksize=blocksize)
|
369
|
-
assert_allclose(A_sqrtm_default, A_sqrtm_new)
|
370
|
-
|
371
371
|
def test_al_mohy_higham_2012_experiment_1(self):
|
372
372
|
# Matrix square root of a tricky upper triangular matrix.
|
373
373
|
A = _get_al_mohy_higham_2012_experiment_1()
|
374
|
-
A_sqrtm
|
375
|
-
A_round_trip = A_sqrtm
|
374
|
+
A_sqrtm = sqrtm(A)
|
375
|
+
A_round_trip = A_sqrtm @ A_sqrtm
|
376
376
|
assert_allclose(A_round_trip, A, rtol=1e-5)
|
377
377
|
assert_allclose(np.tril(A_round_trip), np.tril(A))
|
378
378
|
|
379
379
|
def test_strict_upper_triangular(self):
|
380
|
-
# This matrix has no square root
|
380
|
+
# This matrix has no square root but upper triangular hence upper
|
381
|
+
# triangle will be filled with junk values.
|
381
382
|
for dt in int, float:
|
382
383
|
A = np.array([
|
383
384
|
[0, 3, 0, 0],
|
384
385
|
[0, 0, 3, 0],
|
385
386
|
[0, 0, 0, 3],
|
386
387
|
[0, 0, 0, 0]], dtype=dt)
|
387
|
-
|
388
|
-
|
389
|
-
|
388
|
+
with suppress_warnings() as sup:
|
389
|
+
sup.filter(category=LinAlgWarning)
|
390
|
+
|
391
|
+
A_sqrtm = sqrtm(A)
|
392
|
+
assert_allclose(np.tril(A_sqrtm), np.zeros((4, 4)))
|
393
|
+
assert np.isnan(A_sqrtm).any()
|
394
|
+
assert np.isinf(A_sqrtm).any()
|
395
|
+
|
396
|
+
# Future edit: This squareroot is not possible to find algorithmically
|
397
|
+
# with the current methods. Now sqrtm docstring has another example of
|
398
|
+
# such matrix whose squareroot is not a polynomial in it. Hence no need
|
399
|
+
# to test it here.
|
400
|
+
"""
|
390
401
|
def test_weird_matrix(self):
|
391
402
|
# The square root of matrix B exists.
|
392
403
|
for dt in int, float:
|
@@ -398,18 +409,12 @@ class TestSqrtM:
|
|
398
409
|
[0, 1, 0],
|
399
410
|
[0, 0, 0],
|
400
411
|
[0, 0, 0]], dtype=dt)
|
401
|
-
assert_array_equal(B, A
|
412
|
+
assert_array_equal(B, A @ A)
|
402
413
|
|
403
414
|
# But scipy sqrtm is not clever enough to find it.
|
404
415
|
B_sqrtm, info = sqrtm(B, disp=False)
|
405
416
|
assert_(np.isnan(B_sqrtm).all())
|
406
|
-
|
407
|
-
def test_disp(self):
|
408
|
-
np.random.seed(1234)
|
409
|
-
|
410
|
-
A = np.random.rand(3, 3)
|
411
|
-
B = sqrtm(A, disp=True)
|
412
|
-
assert_allclose(B.dot(B), A)
|
417
|
+
"""
|
413
418
|
|
414
419
|
def test_opposite_sign_complex_eigenvalues(self):
|
415
420
|
M = [[2j, 4], [0, -2j]]
|
@@ -426,22 +431,29 @@ class TestSqrtM:
|
|
426
431
|
[0, 0, 0, 0],
|
427
432
|
[0, 0, 0, 0],
|
428
433
|
[sqrt(0.5), 0, 0, sqrt(0.5)]])
|
429
|
-
assert_allclose(
|
430
|
-
|
434
|
+
assert_allclose(R @ R, M, atol=1e-14)
|
435
|
+
with suppress_warnings() as sup:
|
436
|
+
sup.filter(category=LinAlgWarning)
|
437
|
+
|
438
|
+
assert_allclose(sqrtm(M), R, atol=1e-14)
|
431
439
|
|
432
440
|
def test_gh5336(self):
|
433
441
|
M = np.diag([2, 1, 0])
|
434
442
|
R = np.diag([sqrt(2), 1, 0])
|
435
|
-
assert_allclose(
|
436
|
-
|
443
|
+
assert_allclose(R @ R, M, atol=1e-14)
|
444
|
+
with suppress_warnings() as sup:
|
445
|
+
sup.filter(category=LinAlgWarning)
|
446
|
+
assert_allclose(sqrtm(M), R, atol=1e-14)
|
437
447
|
|
438
448
|
def test_gh7839(self):
|
439
449
|
M = np.zeros((2, 2))
|
440
450
|
R = np.zeros((2, 2))
|
441
|
-
|
442
|
-
|
451
|
+
# Catch and silence LinAlgWarning
|
452
|
+
with suppress_warnings() as sup:
|
453
|
+
sup.filter(category=LinAlgWarning)
|
454
|
+
|
455
|
+
assert_allclose(sqrtm(M), R, atol=1e-14)
|
443
456
|
|
444
|
-
@pytest.mark.xfail(reason="failing on macOS after gh-20212")
|
445
457
|
def test_gh17918(self):
|
446
458
|
M = np.empty((19, 19))
|
447
459
|
M.fill(0.94)
|
@@ -449,23 +461,23 @@ class TestSqrtM:
|
|
449
461
|
assert np.isrealobj(sqrtm(M))
|
450
462
|
|
451
463
|
def test_data_size_preservation_uint_in_float_out(self):
|
452
|
-
M = np.
|
464
|
+
M = np.eye(10, dtype=np.uint8)
|
453
465
|
assert sqrtm(M).dtype == np.float64
|
454
|
-
M = np.
|
466
|
+
M = np.eye(10, dtype=np.uint16)
|
455
467
|
assert sqrtm(M).dtype == np.float64
|
456
|
-
M = np.
|
468
|
+
M = np.eye(10, dtype=np.uint32)
|
457
469
|
assert sqrtm(M).dtype == np.float64
|
458
|
-
M = np.
|
470
|
+
M = np.eye(10, dtype=np.uint64)
|
459
471
|
assert sqrtm(M).dtype == np.float64
|
460
472
|
|
461
473
|
def test_data_size_preservation_int_in_float_out(self):
|
462
|
-
M = np.
|
474
|
+
M = np.eye(10, dtype=np.int8)
|
463
475
|
assert sqrtm(M).dtype == np.float64
|
464
|
-
M = np.
|
476
|
+
M = np.eye(10, dtype=np.int16)
|
465
477
|
assert sqrtm(M).dtype == np.float64
|
466
|
-
M = np.
|
478
|
+
M = np.eye(10, dtype=np.int32)
|
467
479
|
assert sqrtm(M).dtype == np.float64
|
468
|
-
M = np.
|
480
|
+
M = np.eye(10, dtype=np.int64)
|
469
481
|
assert sqrtm(M).dtype == np.float64
|
470
482
|
|
471
483
|
def test_data_size_preservation_int_in_comp_out(self):
|
@@ -479,14 +491,14 @@ class TestSqrtM:
|
|
479
491
|
assert sqrtm(M).dtype == np.complex128
|
480
492
|
|
481
493
|
def test_data_size_preservation_float_in_float_out(self):
|
482
|
-
M = np.
|
494
|
+
M = np.eye(10, dtype=np.float16)
|
483
495
|
assert sqrtm(M).dtype == np.float32
|
484
|
-
M = np.
|
496
|
+
M = np.eye(10, dtype=np.float32)
|
485
497
|
assert sqrtm(M).dtype == np.float32
|
486
|
-
M = np.
|
498
|
+
M = np.eye(10, dtype=np.float64)
|
487
499
|
assert sqrtm(M).dtype == np.float64
|
488
500
|
if hasattr(np, 'float128'):
|
489
|
-
M = np.
|
501
|
+
M = np.eye(10, dtype=np.float128)
|
490
502
|
assert sqrtm(M).dtype == np.float64
|
491
503
|
|
492
504
|
def test_data_size_preservation_float_in_comp_out(self):
|
@@ -519,6 +531,39 @@ class TestSqrtM:
|
|
519
531
|
assert s.shape == (0, 0)
|
520
532
|
assert s.dtype == s0.dtype
|
521
533
|
|
534
|
+
def test_cf_noncontig_nd_inputs(self):
|
535
|
+
# Check that non-contiguous arrays are handled correctly.
|
536
|
+
# Generate an L, U pair for invertible random matrix.
|
537
|
+
rng = np.random.default_rng(1738151906092737)
|
538
|
+
n = 13
|
539
|
+
A = rng.uniform(size=(3, 2*n, 2*n))
|
540
|
+
L, U = np.tril(A, k=-1) + np.eye(2*n), np.triu(A)
|
541
|
+
A = L @ U
|
542
|
+
# Create strided views of 3D array.
|
543
|
+
A_noncontig_c = A[:, ::2, ::2]
|
544
|
+
A_noncontig_f = np.asfortranarray(A)[:, 1::2, 1::2]
|
545
|
+
assert_allclose(sqrtm(A[:, ::2, ::2]), sqrtm(A_noncontig_c))
|
546
|
+
assert_allclose(sqrtm(A[:, 1::2, 1::2]), sqrtm(A_noncontig_f))
|
547
|
+
|
548
|
+
def test_empty_sizes(self):
|
549
|
+
A = np.empty(shape=[4, 0, 5, 5], dtype=float)
|
550
|
+
assert_array_equal(sqrtm(A), A)
|
551
|
+
|
552
|
+
def test_negative_strides(self):
|
553
|
+
rng = np.random.default_rng(1738151906092738)
|
554
|
+
A = rng.uniform(size=(3, 5, 5))
|
555
|
+
A_negneg_orig = A[:, ::-1, ::-1]
|
556
|
+
A_negneg_copy = A[:, ::-1, ::-1].copy()
|
557
|
+
assert_allclose(sqrtm(A_negneg_orig), sqrtm(A_negneg_copy))
|
558
|
+
|
559
|
+
A_posneg_orig = A[:, :, ::-1]
|
560
|
+
A_posneg_copy = A[:, :, ::-1].copy()
|
561
|
+
assert_allclose(sqrtm(A_posneg_orig), sqrtm(A_posneg_copy))
|
562
|
+
|
563
|
+
A_negpos_orig = A[:, ::-1, :]
|
564
|
+
A_negpos_copy = A[:, ::-1, :].copy()
|
565
|
+
assert_allclose(sqrtm(A_negpos_orig), sqrtm(A_negpos_copy))
|
566
|
+
|
522
567
|
|
523
568
|
class TestFractionalMatrixPower:
|
524
569
|
def test_round_trip_random_complex(self):
|
@@ -586,7 +631,7 @@ class TestFractionalMatrixPower:
|
|
586
631
|
# to compute the fractional matrix power.
|
587
632
|
# These can be compared because they both use the principal branch.
|
588
633
|
A_power = fractional_matrix_power(A, p)
|
589
|
-
A_logm
|
634
|
+
A_logm = logm(A)
|
590
635
|
A_power_expm_logm = expm(A_logm * p)
|
591
636
|
assert_allclose(A_power, A_power_expm_logm)
|
592
637
|
|
@@ -595,8 +640,8 @@ class TestFractionalMatrixPower:
|
|
595
640
|
A = _get_al_mohy_higham_2012_experiment_1()
|
596
641
|
|
597
642
|
# Test remainder matrix power.
|
598
|
-
A_funm_sqrt
|
599
|
-
A_sqrtm
|
643
|
+
A_funm_sqrt = funm(A, np.sqrt)
|
644
|
+
A_sqrtm = sqrtm(A)
|
600
645
|
A_rem_power = _matfuncs_inv_ssq._remainder_matrix_power(A, 0.5)
|
601
646
|
A_power = fractional_matrix_power(A, 0.5)
|
602
647
|
assert_allclose(A_rem_power, A_power, rtol=1e-11)
|
@@ -1061,3 +1106,13 @@ class TestKhatriRao:
|
|
1061
1106
|
b = np.empty((5, 0))
|
1062
1107
|
res = khatri_rao(a, b)
|
1063
1108
|
assert_allclose(res, np.empty((15, 0)))
|
1109
|
+
|
1110
|
+
@pytest.mark.parametrize('func',
|
1111
|
+
[logm, sqrtm, signm])
|
1112
|
+
def test_disp_dep(func):
|
1113
|
+
with pytest.deprecated_call():
|
1114
|
+
func(np.eye(2), disp=False)
|
1115
|
+
|
1116
|
+
def test_blocksize_dep():
|
1117
|
+
with pytest.deprecated_call():
|
1118
|
+
sqrtm(np.eye(2), blocksize=10)
|
@@ -10,13 +10,6 @@ from scipy.linalg import orthogonal_procrustes
|
|
10
10
|
from scipy.sparse._sputils import matrix
|
11
11
|
|
12
12
|
|
13
|
-
def test_orthogonal_procrustes_ndim_too_large():
|
14
|
-
rng = np.random.RandomState(1234)
|
15
|
-
A = rng.randn(3, 4, 5)
|
16
|
-
B = rng.randn(3, 4, 5)
|
17
|
-
assert_raises(ValueError, orthogonal_procrustes, A, B)
|
18
|
-
|
19
|
-
|
20
13
|
def test_orthogonal_procrustes_ndim_too_small():
|
21
14
|
rng = np.random.RandomState(1234)
|
22
15
|
A = rng.randn(3)
|
@@ -39,7 +39,7 @@ def test_multiple_rhs():
|
|
39
39
|
c = random.randn(4)
|
40
40
|
r = random.randn(4)
|
41
41
|
for offset in [0, 1j]:
|
42
|
-
for yshape in ((4,), (4, 3)
|
42
|
+
for yshape in ((4,), (4, 3)):
|
43
43
|
y = random.randn(*yshape) + offset
|
44
44
|
actual = solve_toeplitz((c,r), b=y)
|
45
45
|
desired = solve(toeplitz(c, r=r), y)
|
@@ -172,9 +172,6 @@ class TestBlockDiag:
|
|
172
172
|
a = block_diag([2, 3], 4)
|
173
173
|
assert_array_equal(a, [[2, 3, 0], [0, 0, 4]])
|
174
174
|
|
175
|
-
def test_bad_arg(self):
|
176
|
-
assert_raises(ValueError, block_diag, [[[1]]])
|
177
|
-
|
178
175
|
def test_no_args(self):
|
179
176
|
a = block_diag()
|
180
177
|
assert_equal(a.ndim, 2)
|
@@ -504,8 +501,7 @@ def test_invpascal():
|
|
504
501
|
# precision when n is greater than 18. Instead we'll cast both to
|
505
502
|
# object arrays, and then multiply.
|
506
503
|
e = ip.astype(object).dot(p.astype(object))
|
507
|
-
assert_array_equal(e, eye(n), err_msg="n
|
508
|
-
(n, kind, exact))
|
504
|
+
assert_array_equal(e, eye(n), err_msg=f"n={n} kind={kind!r} exact={exact!r}")
|
509
505
|
|
510
506
|
kinds = ['symmetric', 'lower', 'upper']
|
511
507
|
|
scipy/ndimage/__init__.py
CHANGED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
scipy/ndimage/_delegators.py
CHANGED
@@ -25,7 +25,7 @@ for func in funcs:
|
|
25
25
|
"""
|
26
26
|
import numpy as np
|
27
27
|
from scipy._lib._array_api import array_namespace
|
28
|
-
from scipy.ndimage._ni_support import _skip_if_dtype
|
28
|
+
from scipy.ndimage._ni_support import _skip_if_dtype
|
29
29
|
|
30
30
|
|
31
31
|
def affine_transform_signature(
|
@@ -202,7 +202,7 @@ uniform_filter1d_signature = maximum_filter1d_signature
|
|
202
202
|
|
203
203
|
|
204
204
|
def maximum_signature(input, labels=None, index=None):
|
205
|
-
return array_namespace(input, labels,
|
205
|
+
return array_namespace(input, labels, index)
|
206
206
|
|
207
207
|
minimum_signature = maximum_signature
|
208
208
|
median_signature = maximum_signature
|
@@ -288,6 +288,12 @@ def value_indices_signature(arr, *args, **kwds):
|
|
288
288
|
return array_namespace(arr)
|
289
289
|
|
290
290
|
|
291
|
+
def vectorized_filter_signature(
|
292
|
+
input, function, size=None, footprint=None, output=None, *args, **kwds
|
293
|
+
):
|
294
|
+
return array_namespace(input, footprint, _skip_if_dtype(output))
|
295
|
+
|
296
|
+
|
291
297
|
def watershed_ift_signature(input, markers, structure=None, output=None):
|
292
298
|
return array_namespace(input, markers, structure, _skip_if_dtype(output))
|
293
299
|
|