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
scipy/sparse/tests/test_base.py
CHANGED
@@ -28,6 +28,9 @@ import random
|
|
28
28
|
from numpy.testing import (assert_equal, assert_array_equal,
|
29
29
|
assert_array_almost_equal, assert_almost_equal, assert_,
|
30
30
|
assert_allclose, suppress_warnings)
|
31
|
+
from numpy.exceptions import ComplexWarning
|
32
|
+
|
33
|
+
from types import GenericAlias
|
31
34
|
|
32
35
|
import scipy.linalg
|
33
36
|
|
@@ -36,14 +39,13 @@ from scipy.sparse import (csc_matrix, csr_matrix, dok_matrix,
|
|
36
39
|
coo_matrix, lil_matrix, dia_matrix, bsr_matrix,
|
37
40
|
csc_array, csr_array, dok_array,
|
38
41
|
coo_array, lil_array, dia_array, bsr_array,
|
39
|
-
eye, issparse, SparseEfficiencyWarning, sparray)
|
42
|
+
eye, issparse, SparseEfficiencyWarning, sparray, spmatrix)
|
40
43
|
from scipy.sparse._base import _formats
|
41
44
|
from scipy.sparse._sputils import (supported_dtypes, isscalarlike,
|
42
45
|
get_index_dtype, asmatrix, matrix)
|
43
46
|
from scipy.sparse.linalg import splu, expm, inv
|
44
47
|
|
45
48
|
from scipy._lib.decorator import decorator
|
46
|
-
from scipy._lib._util import ComplexWarning
|
47
49
|
|
48
50
|
IS_COLAB = ('google.colab' in sys.modules)
|
49
51
|
|
@@ -431,6 +433,13 @@ class _TestCommon:
|
|
431
433
|
for dtype in self.checked_dtypes:
|
432
434
|
check(dtype)
|
433
435
|
|
436
|
+
def test_eq_ne_different_shapes(self):
|
437
|
+
if self.datsp.format not in ['bsr', 'csc', 'csr']:
|
438
|
+
pytest.skip("Bool comparisons only implemented for BSR, CSC, and CSR.")
|
439
|
+
# Is this what we want? numpy raises when shape differs. we return False.
|
440
|
+
assert (self.datsp == self.datsp.T) is False
|
441
|
+
assert (self.datsp != self.datsp.T) is True
|
442
|
+
|
434
443
|
def test_lt(self):
|
435
444
|
sup = suppress_warnings()
|
436
445
|
sup.filter(SparseEfficiencyWarning)
|
@@ -1021,10 +1030,8 @@ class _TestCommon:
|
|
1021
1030
|
assert_array_almost_equal(dat.sum(), datsp.sum())
|
1022
1031
|
assert_equal(dat.sum().dtype, datsp.sum().dtype)
|
1023
1032
|
assert_(np.isscalar(datsp.sum(axis=None)))
|
1024
|
-
assert_array_almost_equal(dat.sum(axis=None),
|
1025
|
-
|
1026
|
-
assert_equal(dat.sum(axis=None).dtype,
|
1027
|
-
datsp.sum(axis=None).dtype)
|
1033
|
+
assert_array_almost_equal(dat.sum(axis=None), datsp.sum(axis=None))
|
1034
|
+
assert_equal(dat.sum(axis=None).dtype, datsp.sum(axis=None).dtype)
|
1028
1035
|
assert_array_almost_equal(dat.sum(axis=0), datsp.sum(axis=0))
|
1029
1036
|
assert_equal(dat.sum(axis=0).dtype, datsp.sum(axis=0).dtype)
|
1030
1037
|
assert_array_almost_equal(dat.sum(axis=1), datsp.sum(axis=1))
|
@@ -1033,6 +1040,8 @@ class _TestCommon:
|
|
1033
1040
|
assert_equal(dat.sum(axis=-2).dtype, datsp.sum(axis=-2).dtype)
|
1034
1041
|
assert_array_almost_equal(dat.sum(axis=-1), datsp.sum(axis=-1))
|
1035
1042
|
assert_equal(dat.sum(axis=-1).dtype, datsp.sum(axis=-1).dtype)
|
1043
|
+
assert_array_almost_equal(dat.sum(axis=(0, 1)), datsp.sum(axis=(0, 1)))
|
1044
|
+
assert_equal(dat.sum(axis=(0, 1)).dtype, datsp.sum(axis=(0, 1)).dtype)
|
1036
1045
|
|
1037
1046
|
for dtype in self.checked_dtypes:
|
1038
1047
|
for j in range(len(matrices)):
|
@@ -1045,10 +1054,15 @@ class _TestCommon:
|
|
1045
1054
|
[-6, 7, 9]])
|
1046
1055
|
datsp = self.spcreator(dat)
|
1047
1056
|
|
1048
|
-
assert_raises(ValueError,
|
1049
|
-
|
1050
|
-
assert_raises(
|
1051
|
-
|
1057
|
+
with assert_raises(ValueError, match="axis out of range"):
|
1058
|
+
datsp.sum(axis=3)
|
1059
|
+
with assert_raises(ValueError, match="axis out of range"):
|
1060
|
+
datsp.sum(axis=(0, 3))
|
1061
|
+
with assert_raises(TypeError, match="axis must be an integer"):
|
1062
|
+
datsp.sum(axis=1.5)
|
1063
|
+
# error msg varies by sparray (1d result) or spmatrix (2d result)
|
1064
|
+
with assert_raises(ValueError, match="do.*n.t match.*shape|wrong.*dimensions"):
|
1065
|
+
datsp.mean(axis=1, out=out)
|
1052
1066
|
|
1053
1067
|
def test_sum_dtype(self):
|
1054
1068
|
dat = array([[0, 1, 2],
|
@@ -1088,9 +1102,9 @@ class _TestCommon:
|
|
1088
1102
|
assert_array_almost_equal(dat_out, datsp_out)
|
1089
1103
|
|
1090
1104
|
# check that wrong shape out parameter raises
|
1091
|
-
with assert_raises(ValueError, match="output parameter
|
1105
|
+
with assert_raises(ValueError, match="output parameter"):
|
1092
1106
|
datsp.sum(out=array([0]))
|
1093
|
-
with assert_raises(ValueError, match="output parameter
|
1107
|
+
with assert_raises(ValueError, match="output parameter"):
|
1094
1108
|
datsp.sum(out=array([[0]] if self.is_array_test else 0))
|
1095
1109
|
|
1096
1110
|
def test_numpy_sum(self):
|
@@ -1106,6 +1120,21 @@ class _TestCommon:
|
|
1106
1120
|
assert_array_almost_equal(dat_sum, datsp_sum)
|
1107
1121
|
assert_equal(dat_sum.dtype, datsp_sum.dtype)
|
1108
1122
|
|
1123
|
+
def test_sum_mean_container_type(self):
|
1124
|
+
dat = array([[0, 1, 2],
|
1125
|
+
[3, -4, 5],
|
1126
|
+
[-6, 7, 9]])
|
1127
|
+
datsp = self.spcreator(dat)
|
1128
|
+
|
1129
|
+
assert isscalarlike(datsp.sum())
|
1130
|
+
matrix_or_array = ndarray if self.is_array_test else np.matrix
|
1131
|
+
assert isinstance(datsp.sum(axis=0), matrix_or_array)
|
1132
|
+
assert isinstance(datsp.sum(axis=1), matrix_or_array)
|
1133
|
+
|
1134
|
+
assert isscalarlike(datsp.mean())
|
1135
|
+
assert isinstance(datsp.mean(axis=0), matrix_or_array)
|
1136
|
+
assert isinstance(datsp.mean(axis=1), matrix_or_array)
|
1137
|
+
|
1109
1138
|
def test_mean(self):
|
1110
1139
|
keep = not self.is_array_test
|
1111
1140
|
def check(dtype):
|
@@ -1137,21 +1166,31 @@ class _TestCommon:
|
|
1137
1166
|
dat.mean(axis=-1, keepdims=keep), datsp.mean(axis=-1)
|
1138
1167
|
)
|
1139
1168
|
assert_equal(dat.mean(axis=-1).dtype, datsp.mean(axis=-1).dtype)
|
1169
|
+
assert_array_almost_equal(
|
1170
|
+
dat.mean(axis=(0, 1), keepdims=keep), datsp.mean(axis=(0, 1))
|
1171
|
+
)
|
1172
|
+
assert_equal(dat.mean(axis=(0, 1)).dtype, datsp.mean(axis=(0, 1)).dtype)
|
1173
|
+
|
1140
1174
|
|
1141
1175
|
for dtype in self.checked_dtypes:
|
1142
1176
|
check(dtype)
|
1143
1177
|
|
1144
|
-
def
|
1178
|
+
def test_mean_invalid_param(self):
|
1145
1179
|
out = self.asdense(np.zeros((1, 3)))
|
1146
1180
|
dat = array([[0, 1, 2],
|
1147
1181
|
[3, -4, 5],
|
1148
1182
|
[-6, 7, 9]])
|
1149
1183
|
datsp = self.spcreator(dat)
|
1150
1184
|
|
1151
|
-
assert_raises(ValueError,
|
1152
|
-
|
1153
|
-
assert_raises(
|
1154
|
-
|
1185
|
+
with assert_raises(ValueError, match="axis out of range"):
|
1186
|
+
datsp.mean(axis=3)
|
1187
|
+
with assert_raises(ValueError, match="axis out of range"):
|
1188
|
+
datsp.mean(axis=(0, 3))
|
1189
|
+
with assert_raises(TypeError, match="axis must be an integer"):
|
1190
|
+
datsp.mean(axis=1.5)
|
1191
|
+
# error msg varies by sparray (1d result) or spmatrix (2d result)
|
1192
|
+
with assert_raises(ValueError, match="do.*n.t match.*shape|wrong.*dimensions"):
|
1193
|
+
datsp.mean(axis=1, out=out)
|
1155
1194
|
|
1156
1195
|
def test_mean_dtype(self):
|
1157
1196
|
dat = array([[0, 1, 2],
|
@@ -1649,7 +1688,10 @@ class _TestCommon:
|
|
1649
1688
|
except ValueError:
|
1650
1689
|
assert_raises(ValueError, i.multiply, j)
|
1651
1690
|
continue
|
1652
|
-
|
1691
|
+
try:
|
1692
|
+
sp_mult = i.multiply(j)
|
1693
|
+
except ValueError:
|
1694
|
+
continue
|
1653
1695
|
if issparse(sp_mult):
|
1654
1696
|
assert_almost_equal(sp_mult.toarray(), dense_mult)
|
1655
1697
|
else:
|
@@ -1695,13 +1737,7 @@ class _TestCommon:
|
|
1695
1737
|
B = self.spcreator(A)
|
1696
1738
|
|
1697
1739
|
if self.is_array_test: # sparrays use element-wise power
|
1698
|
-
|
1699
|
-
# Complex exponents of 0 (our implicit fill value) change in numpy-1.25
|
1700
|
-
# from `(nan+nanj)` to `0`. Old value makes array element-wise result
|
1701
|
-
# dense and is hard to check for without any `isnan` method.
|
1702
|
-
# So while untested here, element-wise complex exponents work with np>=1.25.
|
1703
|
-
# for exponent in [1, 2, 2.2, 3, 1+3j]:
|
1704
|
-
for exponent in [1, 2, 2.2, 3]:
|
1740
|
+
for exponent in [1, 2, 2.2, 3, 1+3j]:
|
1705
1741
|
ret_sp = B**exponent
|
1706
1742
|
ret_np = A**exponent
|
1707
1743
|
assert_array_equal(ret_sp.toarray(), ret_np)
|
@@ -2072,8 +2108,8 @@ class _TestCommon:
|
|
2072
2108
|
|
2073
2109
|
with suppress_warnings() as sup:
|
2074
2110
|
sup.filter(SparseEfficiencyWarning,
|
2075
|
-
"Taking maximum
|
2076
|
-
"results
|
2111
|
+
"Taking (maximum|minimum) with a (positive|negative) number "
|
2112
|
+
"results in a dense matrix")
|
2077
2113
|
|
2078
2114
|
max_s = A.maximum(B)
|
2079
2115
|
min_s = A.minimum(B)
|
@@ -2366,20 +2402,14 @@ class _TestInplaceArithmetic:
|
|
2366
2402
|
|
2367
2403
|
# Matrix multiply from __rmatmul__
|
2368
2404
|
y = a.copy()
|
2369
|
-
|
2370
|
-
|
2371
|
-
|
2372
|
-
|
2373
|
-
|
2374
|
-
|
2375
|
-
|
2376
|
-
|
2377
|
-
y = a.copy()
|
2378
|
-
with assert_raises(ValueError, match="dimension mismatch"):
|
2379
|
-
x @= b
|
2380
|
-
x = x.dot(a.T)
|
2381
|
-
y @= b.T
|
2382
|
-
assert_array_equal(x, y)
|
2405
|
+
y @= b.T
|
2406
|
+
x = a.copy()
|
2407
|
+
y = a.copy()
|
2408
|
+
with assert_raises(ValueError, match="dimension mismatch"):
|
2409
|
+
x @= b
|
2410
|
+
x = x.dot(a.T)
|
2411
|
+
y @= b.T
|
2412
|
+
assert_array_equal(x, y)
|
2383
2413
|
|
2384
2414
|
# Floor division is not supported
|
2385
2415
|
with assert_raises(TypeError, match="unsupported operand"):
|
@@ -3720,9 +3750,11 @@ class _TestMinMax:
|
|
3720
3750
|
X = self.spcreator(np.arange(1, 10).reshape(3, 3))
|
3721
3751
|
assert_equal(X.min(), 1)
|
3722
3752
|
assert_equal(X.min().dtype, X.dtype)
|
3753
|
+
assert_equal(X.min(explicit=True), 1)
|
3723
3754
|
|
3724
3755
|
X = -X
|
3725
3756
|
assert_equal(X.max(), -1)
|
3757
|
+
assert_equal(X.max(explicit=True), -1)
|
3726
3758
|
|
3727
3759
|
# and a fully sparse matrix
|
3728
3760
|
Z = self.spcreator(np.zeros((1, 1)))
|
@@ -3797,6 +3829,7 @@ class _TestMinMax:
|
|
3797
3829
|
assert_array_equal(
|
3798
3830
|
X.min(axis=axis).toarray(), D.min(axis=axis, keepdims=keep)
|
3799
3831
|
)
|
3832
|
+
assert_equal(X.max(axis=(0, 1)), D.max(axis=(0, 1), keepdims=keep))
|
3800
3833
|
|
3801
3834
|
for axis in axes_even:
|
3802
3835
|
expected_max = D[-1, :]
|
@@ -3844,6 +3877,38 @@ class _TestMinMax:
|
|
3844
3877
|
assert_equal(X.max(axis=axis, explicit=ex).toarray(), D.max(axis=axis))
|
3845
3878
|
assert_equal(X.min(axis=axis, explicit=ex).toarray(), D.min(axis=axis))
|
3846
3879
|
|
3880
|
+
def test_minmax_container_type(self):
|
3881
|
+
dat = array([[0, 1, 2],
|
3882
|
+
[3, -4, 5],
|
3883
|
+
[-6, 7, 9]])
|
3884
|
+
datsp = self.spcreator(dat)
|
3885
|
+
matrix_or_array = ndarray if self.is_array_test else np.matrix
|
3886
|
+
spmatrix_or_sparray = sparray if self.is_array_test else spmatrix
|
3887
|
+
|
3888
|
+
assert isscalarlike(datsp.min())
|
3889
|
+
assert isinstance(datsp.min(axis=0), spmatrix_or_sparray)
|
3890
|
+
assert isinstance(datsp.min(axis=1), spmatrix_or_sparray)
|
3891
|
+
|
3892
|
+
assert isscalarlike(datsp.max())
|
3893
|
+
assert isinstance(datsp.max(axis=0), spmatrix_or_sparray)
|
3894
|
+
assert isinstance(datsp.max(axis=1), spmatrix_or_sparray)
|
3895
|
+
|
3896
|
+
assert isscalarlike(datsp.nanmin())
|
3897
|
+
assert isinstance(datsp.nanmin(axis=0), spmatrix_or_sparray)
|
3898
|
+
assert isinstance(datsp.nanmin(axis=1), spmatrix_or_sparray)
|
3899
|
+
|
3900
|
+
assert isscalarlike(datsp.nanmax())
|
3901
|
+
assert isinstance(datsp.nanmax(axis=0), spmatrix_or_sparray)
|
3902
|
+
assert isinstance(datsp.nanmax(axis=1), spmatrix_or_sparray)
|
3903
|
+
|
3904
|
+
assert isscalarlike(datsp.argmin())
|
3905
|
+
assert isinstance(datsp.argmin(axis=0), matrix_or_array)
|
3906
|
+
assert isinstance(datsp.argmin(axis=1), matrix_or_array)
|
3907
|
+
|
3908
|
+
assert isscalarlike(datsp.argmax())
|
3909
|
+
assert isinstance(datsp.argmax(axis=0), matrix_or_array)
|
3910
|
+
assert isinstance(datsp.argmax(axis=1), matrix_or_array)
|
3911
|
+
|
3847
3912
|
def test_nanminmax(self):
|
3848
3913
|
D = self.asdense(np.arange(50).reshape(5,10), dtype=float)
|
3849
3914
|
D[1, :] = 0
|
@@ -3862,6 +3927,10 @@ class _TestMinMax:
|
|
3862
3927
|
assert np.isscalar(X_nan_minimum)
|
3863
3928
|
assert X_nan_minimum == np.nanmin(D)
|
3864
3929
|
|
3930
|
+
X_nan_minimum = X.nanmin(axis=(0, 1))
|
3931
|
+
assert np.isscalar(X_nan_minimum)
|
3932
|
+
assert X_nan_minimum == np.nanmin(D, axis=(0, 1))
|
3933
|
+
|
3865
3934
|
axes = [-2, -1, 0, 1]
|
3866
3935
|
for axis in axes:
|
3867
3936
|
X_nan_maxima = X.nanmax(axis=axis)
|
@@ -3879,11 +3948,12 @@ class _TestMinMax:
|
|
3879
3948
|
datsp = self.spcreator(dat)
|
3880
3949
|
|
3881
3950
|
for fname in ('min', 'max'):
|
3951
|
+
datfunc = getattr(dat, fname)
|
3882
3952
|
func = getattr(datsp, fname)
|
3883
3953
|
assert_raises(ValueError, func, axis=3)
|
3884
|
-
assert_raises(TypeError, func, axis=(0, 1))
|
3885
3954
|
assert_raises(TypeError, func, axis=1.5)
|
3886
3955
|
assert_raises(ValueError, func, axis=1, out=1)
|
3956
|
+
assert_equal(func(axis=(0, 1)), datfunc(axis=(0, 1)))
|
3887
3957
|
|
3888
3958
|
def test_numpy_minmax(self):
|
3889
3959
|
# See gh-5987
|
@@ -3933,6 +4003,13 @@ class _TestMinMax:
|
|
3933
4003
|
assert_equal(mat.argmax(axis=1), np.argmax(D, axis=1))
|
3934
4004
|
assert_equal(mat.argmin(axis=1), np.argmin(D, axis=1))
|
3935
4005
|
|
4006
|
+
# full matrix with explicit=True
|
4007
|
+
mat = self.spcreator(self.asdense(D5))
|
4008
|
+
assert_equal(mat.argmax(explicit=True), 5)
|
4009
|
+
assert_equal((-mat).argmax(explicit=True), 2)
|
4010
|
+
assert_equal(mat.argmin(explicit=True), 2)
|
4011
|
+
assert_equal((-mat).argmin(explicit=True), 5)
|
4012
|
+
|
3936
4013
|
# zero-size matrices
|
3937
4014
|
D6 = self.spcreator(np.empty((0, 5)))
|
3938
4015
|
D7 = self.spcreator(np.empty((5, 0)))
|
@@ -4355,6 +4432,12 @@ class TestCSRMatrix(_MatrixMixin, TestCSR):
|
|
4355
4432
|
with suppress_warnings() as sup:
|
4356
4433
|
sup.filter(SparseEfficiencyWarning, "Changing the sparsity structure")
|
4357
4434
|
return csr_matrix(*args, **kwargs)
|
4435
|
+
|
4436
|
+
def test_spmatrix_subscriptable(self):
|
4437
|
+
result = csr_matrix[np.int8]
|
4438
|
+
assert isinstance(result, GenericAlias)
|
4439
|
+
assert result.__origin__ is csr_matrix
|
4440
|
+
assert result.__args__ == (np.int8,)
|
4358
4441
|
|
4359
4442
|
|
4360
4443
|
TestCSRMatrix.init_class()
|
@@ -4890,6 +4973,17 @@ class TestCOO(sparse_test_class(getset=False,
|
|
4890
4973
|
# Using __ne__ and nnz instead
|
4891
4974
|
assert_((mat1.reshape((1001, 3000001), order='C') != mat2).nnz == 0)
|
4892
4975
|
assert_((mat2.reshape((3000001, 1001), order='F') != mat1).nnz == 0)
|
4976
|
+
|
4977
|
+
def test_sparray_subscriptable(self):
|
4978
|
+
result = coo_array[np.int8, tuple[int]]
|
4979
|
+
assert isinstance(result, GenericAlias)
|
4980
|
+
assert result.__origin__ is coo_array
|
4981
|
+
assert result.__args__ == (np.int8, tuple[int])
|
4982
|
+
|
4983
|
+
result = coo_array[np.int8]
|
4984
|
+
assert isinstance(result, GenericAlias)
|
4985
|
+
assert result.__origin__ is coo_array
|
4986
|
+
assert result.__args__ == (np.int8,)
|
4893
4987
|
|
4894
4988
|
|
4895
4989
|
class TestCOOMatrix(_MatrixMixin, TestCOO):
|
@@ -4962,6 +5056,40 @@ class TestDIA(sparse_test_class(getset=False, slicing=False, slicing_assign=Fals
|
|
4962
5056
|
csc = dia.tocsc()
|
4963
5057
|
assert csc.indices.dtype == np.int32
|
4964
5058
|
|
5059
|
+
def test_add_sparse(self):
|
5060
|
+
# test format and cases not covered by common add tests
|
5061
|
+
A = diag([1, 2])
|
5062
|
+
B = A + diag([3], 1)
|
5063
|
+
Asp = dia_matrix(A)
|
5064
|
+
Bsp = dia_matrix(B)
|
5065
|
+
|
5066
|
+
Csp = Asp + Bsp
|
5067
|
+
assert isinstance(Csp, dia_matrix)
|
5068
|
+
assert_array_equal(Csp.toarray(), A + B)
|
5069
|
+
|
5070
|
+
Csp = Bsp + Asp
|
5071
|
+
assert isinstance(Csp, dia_matrix)
|
5072
|
+
assert_array_equal(Csp.toarray(), B + A)
|
5073
|
+
|
5074
|
+
def test_sub_sparse(self):
|
5075
|
+
# test format and cases not covered by common sub tests
|
5076
|
+
A = diag([1, 2])
|
5077
|
+
B = A + diag([3], 1)
|
5078
|
+
Asp = dia_matrix(A)
|
5079
|
+
Bsp = dia_matrix(B)
|
5080
|
+
|
5081
|
+
Csp = Asp - Bsp
|
5082
|
+
assert isinstance(Csp, dia_matrix)
|
5083
|
+
assert_array_equal(Csp.toarray(), A - B)
|
5084
|
+
|
5085
|
+
Csp = Bsp - Asp
|
5086
|
+
assert isinstance(Csp, dia_matrix)
|
5087
|
+
assert_array_equal(Csp.toarray(), B - A)
|
5088
|
+
|
5089
|
+
Bsp = Bsp.asformat('csr')
|
5090
|
+
assert_array_equal((Asp - Bsp).toarray(), A - B)
|
5091
|
+
assert_array_equal((Bsp - Asp).toarray(), B - A)
|
5092
|
+
|
4965
5093
|
def test_mul_scalar(self):
|
4966
5094
|
# repro for gh-20434
|
4967
5095
|
m = self.dia_container([[1, 2], [0, 4]])
|
@@ -4973,6 +5101,50 @@ class TestDIA(sparse_test_class(getset=False, slicing=False, slicing_assign=Fals
|
|
4973
5101
|
assert isinstance(res2, m.__class__)
|
4974
5102
|
assert_array_equal(res2.toarray(), [[3, 6], [0, 12]])
|
4975
5103
|
|
5104
|
+
def test_matmul_dia(self):
|
5105
|
+
# test DIA structure of DIA @ DIA:
|
5106
|
+
|
5107
|
+
# that all and only needed elements are used and produced
|
5108
|
+
A = array([[1, 2, 3],
|
5109
|
+
[4, 5, 6]])
|
5110
|
+
B = array([[11, 12],
|
5111
|
+
[13, 14],
|
5112
|
+
[15, 16]])
|
5113
|
+
Asp = dia_matrix(A)
|
5114
|
+
Bsp = dia_matrix(B)
|
5115
|
+
Asp.data[Asp.data == 0] = -1 # poison outside elements
|
5116
|
+
Bsp.data[Bsp.data == 0] = -1
|
5117
|
+
assert_array_equal(Asp.toarray(), A)
|
5118
|
+
assert_array_equal(Bsp.toarray(), B)
|
5119
|
+
|
5120
|
+
C = A @ B
|
5121
|
+
Csp = Asp @ Bsp
|
5122
|
+
assert isinstance(Csp, dia_matrix)
|
5123
|
+
assert_array_equal(Csp.toarray(), C)
|
5124
|
+
assert_array_equal(Csp.offsets, [-1, 0, 1])
|
5125
|
+
assert_array_equal(Csp.data, dia_matrix(C).data)
|
5126
|
+
|
5127
|
+
C = B @ A
|
5128
|
+
Csp = Bsp @ Asp
|
5129
|
+
assert isinstance(Csp, dia_matrix)
|
5130
|
+
assert_array_equal(Csp.toarray(), C)
|
5131
|
+
assert_array_equal(Csp.offsets, [-2, -1, 0, 1, 2])
|
5132
|
+
assert_array_equal(Csp.data, dia_matrix(C).data)
|
5133
|
+
|
5134
|
+
# short data and that order of input offsets doesn't matter
|
5135
|
+
Asp = dia_matrix(([[0., 1., 2.], [3., 4., 5.]], [1, -2]), (5, 5))
|
5136
|
+
Bsp = dia_matrix(([[6., 7., 8.], [0., 0., 9.]], [-1, 2]), (5, 5))
|
5137
|
+
|
5138
|
+
Csp = Asp @ Bsp
|
5139
|
+
assert_array_equal(Csp.offsets, array([-3, 0]))
|
5140
|
+
assert_array_equal(Csp.data, [[24., 35., 0.],
|
5141
|
+
[6., 14., 27.]])
|
5142
|
+
|
5143
|
+
Csp = Bsp @ Asp
|
5144
|
+
assert_array_equal(Csp.offsets, array([-3, 0]))
|
5145
|
+
assert_array_equal(Csp.data, [[24., 0., 0.],
|
5146
|
+
[27., 6., 14.]])
|
5147
|
+
|
4976
5148
|
|
4977
5149
|
class TestDIAMatrix(_MatrixMixin, TestDIA):
|
4978
5150
|
spcreator = dia_matrix
|
@@ -4,13 +4,13 @@ import pytest
|
|
4
4
|
|
5
5
|
import numpy as np
|
6
6
|
from numpy.testing import assert_equal, assert_allclose
|
7
|
+
from numpy.exceptions import ComplexWarning
|
7
8
|
|
8
9
|
from scipy.sparse import (
|
9
10
|
bsr_array, csc_array, dia_array, lil_array,
|
10
11
|
coo_array, csr_array, dok_array,
|
11
12
|
)
|
12
13
|
from scipy.sparse._sputils import supported_dtypes, matrix
|
13
|
-
from scipy._lib._util import ComplexWarning
|
14
14
|
|
15
15
|
|
16
16
|
sup_complex = np.testing.suppress_warnings()
|
@@ -136,10 +136,10 @@ class TestCommon1D:
|
|
136
136
|
dat = np.array([0, 1, 2])
|
137
137
|
datsp = spcreator(dat)
|
138
138
|
|
139
|
-
with pytest.raises(ValueError, match='axis
|
139
|
+
with pytest.raises(ValueError, match='axis out of range'):
|
140
140
|
datsp.sum(axis=1)
|
141
|
-
with pytest.raises(
|
142
|
-
datsp.sum(axis=(0,
|
141
|
+
with pytest.raises(ValueError, match='axis out of range'):
|
142
|
+
datsp.sum(axis=(0, 3))
|
143
143
|
with pytest.raises(TypeError, match='axis must be an integer'):
|
144
144
|
datsp.sum(axis=1.5)
|
145
145
|
with pytest.raises(ValueError, match='output parameter.*wrong.*dimension'):
|
@@ -176,11 +176,11 @@ class TestCommon1D:
|
|
176
176
|
datsp = spcreator(dat)
|
177
177
|
with pytest.raises(ValueError, match='axis out of range'):
|
178
178
|
datsp.mean(axis=3)
|
179
|
-
with pytest.raises(
|
180
|
-
datsp.mean(axis=(0,
|
179
|
+
with pytest.raises(ValueError, match='axis out of range'):
|
180
|
+
datsp.mean(axis=(0, 3))
|
181
181
|
with pytest.raises(TypeError, match='axis must be an integer'):
|
182
182
|
datsp.mean(axis=1.5)
|
183
|
-
with pytest.raises(ValueError, match='
|
183
|
+
with pytest.raises(ValueError, match='out.*not match shape'):
|
184
184
|
datsp.mean(axis=1, out=out)
|
185
185
|
|
186
186
|
def test_sum_dtype(self, spcreator):
|
@@ -673,7 +673,7 @@ class TestConstructUtils:
|
|
673
673
|
assert isinstance(bmat([[Gm.tocsc(), Gm]], format="csr"), spmatrix)
|
674
674
|
assert isinstance(bmat([[Gm, Gm]], format="csc"), spmatrix)
|
675
675
|
|
676
|
-
@pytest.mark.
|
676
|
+
@pytest.mark.xslow
|
677
677
|
@pytest.mark.thread_unsafe
|
678
678
|
@pytest.mark.xfail_on_32bit("Can't create large array for test")
|
679
679
|
def test_concatenate_int32_overflow(self):
|