scipy 1.15.3__cp312-cp312-macosx_12_0_arm64.whl → 1.16.0rc1__cp312-cp312-macosx_12_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- scipy/.dylibs/libscipy_openblas.dylib +0 -0
- scipy/__config__.py +7 -7
- scipy/__init__.py +3 -6
- scipy/_cyutility.cpython-312-darwin.so +0 -0
- scipy/_lib/_array_api.py +486 -161
- scipy/_lib/_array_api_compat_vendor.py +9 -0
- scipy/_lib/_bunch.py +4 -0
- scipy/_lib/_ccallback_c.cpython-312-darwin.so +0 -0
- scipy/_lib/_docscrape.py +1 -1
- scipy/_lib/_elementwise_iterative_method.py +15 -26
- scipy/_lib/_sparse.py +41 -0
- scipy/_lib/_test_deprecation_call.cpython-312-darwin.so +0 -0
- scipy/_lib/_test_deprecation_def.cpython-312-darwin.so +0 -0
- scipy/_lib/_testutils.py +6 -2
- scipy/_lib/_util.py +222 -125
- scipy/_lib/array_api_compat/__init__.py +4 -4
- scipy/_lib/array_api_compat/_internal.py +19 -6
- scipy/_lib/array_api_compat/common/__init__.py +1 -1
- scipy/_lib/array_api_compat/common/_aliases.py +365 -193
- scipy/_lib/array_api_compat/common/_fft.py +94 -64
- scipy/_lib/array_api_compat/common/_helpers.py +413 -180
- scipy/_lib/array_api_compat/common/_linalg.py +116 -40
- scipy/_lib/array_api_compat/common/_typing.py +179 -10
- scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
- scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
- scipy/_lib/array_api_compat/cupy/_info.py +16 -6
- scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
- scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
- scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
- scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
- scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
- scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
- scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
- scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
- scipy/_lib/array_api_compat/numpy/_info.py +36 -16
- scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
- scipy/_lib/array_api_compat/numpy/fft.py +11 -5
- scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
- scipy/_lib/array_api_compat/torch/__init__.py +3 -5
- scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
- scipy/_lib/array_api_compat/torch/_info.py +27 -16
- scipy/_lib/array_api_compat/torch/_typing.py +3 -0
- scipy/_lib/array_api_compat/torch/fft.py +17 -18
- scipy/_lib/array_api_compat/torch/linalg.py +16 -16
- scipy/_lib/array_api_extra/__init__.py +26 -3
- scipy/_lib/array_api_extra/_delegation.py +171 -0
- scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
- scipy/_lib/array_api_extra/_lib/_at.py +463 -0
- scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
- scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
- scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
- scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
- scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
- scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
- scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
- scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
- scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
- scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
- scipy/_lib/array_api_extra/testing.py +359 -0
- scipy/_lib/decorator.py +2 -2
- scipy/_lib/doccer.py +1 -7
- scipy/_lib/messagestream.cpython-312-darwin.so +0 -0
- scipy/_lib/pyprima/__init__.py +212 -0
- scipy/_lib/pyprima/cobyla/__init__.py +0 -0
- scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
- scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
- scipy/_lib/pyprima/cobyla/geometry.py +226 -0
- scipy/_lib/pyprima/cobyla/initialize.py +215 -0
- scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
- scipy/_lib/pyprima/cobyla/update.py +289 -0
- scipy/_lib/pyprima/common/__init__.py +0 -0
- scipy/_lib/pyprima/common/_bounds.py +34 -0
- scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
- scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
- scipy/_lib/pyprima/common/_project.py +173 -0
- scipy/_lib/pyprima/common/checkbreak.py +93 -0
- scipy/_lib/pyprima/common/consts.py +47 -0
- scipy/_lib/pyprima/common/evaluate.py +99 -0
- scipy/_lib/pyprima/common/history.py +38 -0
- scipy/_lib/pyprima/common/infos.py +30 -0
- scipy/_lib/pyprima/common/linalg.py +435 -0
- scipy/_lib/pyprima/common/message.py +290 -0
- scipy/_lib/pyprima/common/powalg.py +131 -0
- scipy/_lib/pyprima/common/preproc.py +277 -0
- scipy/_lib/pyprima/common/present.py +5 -0
- scipy/_lib/pyprima/common/ratio.py +54 -0
- scipy/_lib/pyprima/common/redrho.py +47 -0
- scipy/_lib/pyprima/common/selectx.py +296 -0
- scipy/_lib/tests/test__util.py +105 -121
- scipy/_lib/tests/test_array_api.py +166 -35
- scipy/_lib/tests/test_bunch.py +7 -0
- scipy/_lib/tests/test_ccallback.py +2 -10
- scipy/_lib/tests/test_public_api.py +13 -0
- scipy/cluster/_hierarchy.cpython-312-darwin.so +0 -0
- scipy/cluster/_optimal_leaf_ordering.cpython-312-darwin.so +0 -0
- scipy/cluster/_vq.cpython-312-darwin.so +0 -0
- scipy/cluster/hierarchy.py +393 -223
- scipy/cluster/tests/test_hierarchy.py +273 -335
- scipy/cluster/tests/test_vq.py +45 -61
- scipy/cluster/vq.py +39 -35
- scipy/conftest.py +263 -157
- scipy/constants/_constants.py +4 -1
- scipy/constants/tests/test_codata.py +2 -2
- scipy/constants/tests/test_constants.py +11 -18
- scipy/datasets/_download_all.py +15 -1
- scipy/datasets/_fetchers.py +7 -1
- scipy/datasets/_utils.py +1 -1
- scipy/differentiate/_differentiate.py +25 -25
- scipy/differentiate/tests/test_differentiate.py +24 -25
- scipy/fft/_basic.py +20 -0
- scipy/fft/_helper.py +3 -34
- scipy/fft/_pocketfft/helper.py +29 -1
- scipy/fft/_pocketfft/tests/test_basic.py +2 -4
- scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
- scipy/fft/_realtransforms.py +13 -0
- scipy/fft/tests/test_basic.py +27 -25
- scipy/fft/tests/test_fftlog.py +16 -7
- scipy/fft/tests/test_helper.py +18 -34
- scipy/fft/tests/test_real_transforms.py +8 -10
- scipy/fftpack/convolve.cpython-312-darwin.so +0 -0
- scipy/fftpack/tests/test_basic.py +2 -4
- scipy/fftpack/tests/test_real_transforms.py +8 -9
- scipy/integrate/_bvp.py +9 -3
- scipy/integrate/_cubature.py +3 -2
- scipy/integrate/_dop.cpython-312-darwin.so +0 -0
- scipy/integrate/_lsoda.cpython-312-darwin.so +0 -0
- scipy/integrate/_ode.py +9 -2
- scipy/integrate/_odepack.cpython-312-darwin.so +0 -0
- scipy/integrate/_quad_vec.py +21 -29
- scipy/integrate/_quadpack_py.py +11 -7
- scipy/integrate/_quadrature.py +3 -3
- scipy/integrate/_rules/_base.py +2 -2
- scipy/integrate/_tanhsinh.py +48 -47
- scipy/integrate/_test_odeint_banded.cpython-312-darwin.so +0 -0
- scipy/integrate/_vode.cpython-312-darwin.so +0 -0
- scipy/integrate/tests/test__quad_vec.py +0 -6
- scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
- scipy/integrate/tests/test_cubature.py +21 -35
- scipy/integrate/tests/test_quadrature.py +6 -8
- scipy/integrate/tests/test_tanhsinh.py +56 -48
- scipy/interpolate/__init__.py +70 -58
- scipy/interpolate/_bary_rational.py +22 -22
- scipy/interpolate/_bsplines.py +119 -66
- scipy/interpolate/_cubic.py +65 -50
- scipy/interpolate/_dfitpack.cpython-312-darwin.so +0 -0
- scipy/interpolate/_dierckx.cpython-312-darwin.so +0 -0
- scipy/interpolate/_fitpack2.py +9 -6
- scipy/interpolate/_fitpack_impl.py +32 -26
- scipy/interpolate/_fitpack_repro.py +23 -19
- scipy/interpolate/_interpnd.cpython-312-darwin.so +0 -0
- scipy/interpolate/_interpolate.py +30 -12
- scipy/interpolate/_ndbspline.py +13 -18
- scipy/interpolate/_ndgriddata.py +5 -8
- scipy/interpolate/_polyint.py +95 -31
- scipy/interpolate/_ppoly.cpython-312-darwin.so +0 -0
- scipy/interpolate/_rbf.py +2 -2
- scipy/interpolate/_rbfinterp.py +1 -1
- scipy/interpolate/_rgi.py +31 -26
- scipy/interpolate/_rgi_cython.cpython-312-darwin.so +0 -0
- scipy/interpolate/dfitpack.py +0 -20
- scipy/interpolate/interpnd.py +1 -2
- scipy/interpolate/tests/test_bary_rational.py +2 -2
- scipy/interpolate/tests/test_bsplines.py +97 -1
- scipy/interpolate/tests/test_fitpack2.py +39 -1
- scipy/interpolate/tests/test_interpnd.py +32 -20
- scipy/interpolate/tests/test_interpolate.py +48 -4
- scipy/interpolate/tests/test_rgi.py +2 -1
- scipy/io/_fast_matrix_market/__init__.py +2 -0
- scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
- scipy/io/_harwell_boeing/hb.py +7 -11
- scipy/io/_idl.py +5 -7
- scipy/io/_netcdf.py +15 -5
- scipy/io/_test_fortran.cpython-312-darwin.so +0 -0
- scipy/io/arff/tests/test_arffread.py +3 -3
- scipy/io/matlab/__init__.py +5 -3
- scipy/io/matlab/_mio.py +4 -1
- scipy/io/matlab/_mio5.py +19 -13
- scipy/io/matlab/_mio5_utils.cpython-312-darwin.so +0 -0
- scipy/io/matlab/_mio_utils.cpython-312-darwin.so +0 -0
- scipy/io/matlab/_miobase.py +4 -1
- scipy/io/matlab/_streams.cpython-312-darwin.so +0 -0
- scipy/io/matlab/tests/test_mio.py +46 -18
- scipy/io/matlab/tests/test_mio_funcs.py +1 -1
- scipy/io/tests/test_mmio.py +7 -1
- scipy/io/tests/test_wavfile.py +41 -0
- scipy/io/wavfile.py +57 -10
- scipy/linalg/_basic.py +113 -86
- scipy/linalg/_cythonized_array_utils.cpython-312-darwin.so +0 -0
- scipy/linalg/_decomp.py +22 -9
- scipy/linalg/_decomp_cholesky.py +28 -13
- scipy/linalg/_decomp_cossin.py +45 -30
- scipy/linalg/_decomp_interpolative.cpython-312-darwin.so +0 -0
- scipy/linalg/_decomp_ldl.py +4 -1
- scipy/linalg/_decomp_lu.py +18 -6
- scipy/linalg/_decomp_lu_cython.cpython-312-darwin.so +0 -0
- scipy/linalg/_decomp_polar.py +2 -0
- scipy/linalg/_decomp_qr.py +6 -2
- scipy/linalg/_decomp_qz.py +3 -0
- scipy/linalg/_decomp_schur.py +3 -1
- scipy/linalg/_decomp_svd.py +13 -2
- scipy/linalg/_decomp_update.cpython-312-darwin.so +0 -0
- scipy/linalg/_expm_frechet.py +4 -0
- scipy/linalg/_fblas.cpython-312-darwin.so +0 -0
- scipy/linalg/_flapack.cpython-312-darwin.so +0 -0
- scipy/linalg/_matfuncs.py +187 -4
- scipy/linalg/_matfuncs_expm.cpython-312-darwin.so +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cpython-312-darwin.so +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +1 -99
- scipy/linalg/_matfuncs_sqrtm_triu.cpython-312-darwin.so +0 -0
- scipy/linalg/_procrustes.py +2 -0
- scipy/linalg/_sketches.py +17 -6
- scipy/linalg/_solve_toeplitz.cpython-312-darwin.so +0 -0
- scipy/linalg/_solvers.py +7 -2
- scipy/linalg/_special_matrices.py +26 -36
- scipy/linalg/cython_blas.cpython-312-darwin.so +0 -0
- scipy/linalg/cython_lapack.cpython-312-darwin.so +0 -0
- scipy/linalg/lapack.py +22 -2
- scipy/linalg/tests/_cython_examples/meson.build +7 -0
- scipy/linalg/tests/test_basic.py +31 -16
- scipy/linalg/tests/test_batch.py +588 -0
- scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
- scipy/linalg/tests/test_decomp.py +40 -3
- scipy/linalg/tests/test_decomp_cossin.py +14 -0
- scipy/linalg/tests/test_decomp_ldl.py +1 -1
- scipy/linalg/tests/test_lapack.py +115 -7
- scipy/linalg/tests/test_matfuncs.py +157 -102
- scipy/linalg/tests/test_procrustes.py +0 -7
- scipy/linalg/tests/test_solve_toeplitz.py +1 -1
- scipy/linalg/tests/test_special_matrices.py +1 -5
- scipy/ndimage/__init__.py +1 -0
- scipy/ndimage/_cytest.cpython-312-darwin.so +0 -0
- scipy/ndimage/_delegators.py +8 -2
- scipy/ndimage/_filters.py +433 -5
- scipy/ndimage/_interpolation.py +36 -6
- scipy/ndimage/_measurements.py +4 -2
- scipy/ndimage/_morphology.py +5 -0
- scipy/ndimage/_nd_image.cpython-312-darwin.so +0 -0
- scipy/ndimage/_ni_docstrings.py +5 -1
- scipy/ndimage/_ni_label.cpython-312-darwin.so +0 -0
- scipy/ndimage/_ni_support.py +1 -5
- scipy/ndimage/_support_alternative_backends.py +18 -6
- scipy/ndimage/tests/test_filters.py +337 -259
- scipy/ndimage/tests/test_fourier.py +7 -9
- scipy/ndimage/tests/test_interpolation.py +68 -61
- scipy/ndimage/tests/test_measurements.py +18 -35
- scipy/ndimage/tests/test_morphology.py +143 -131
- scipy/ndimage/tests/test_splines.py +1 -3
- scipy/odr/__odrpack.cpython-312-darwin.so +0 -0
- scipy/optimize/_basinhopping.py +13 -7
- scipy/optimize/_bglu_dense.cpython-312-darwin.so +0 -0
- scipy/optimize/_bracket.py +17 -24
- scipy/optimize/_chandrupatla.py +9 -10
- scipy/optimize/_cobyla_py.py +104 -123
- scipy/optimize/_constraints.py +14 -10
- scipy/optimize/_differentiable_functions.py +371 -230
- scipy/optimize/_differentialevolution.py +4 -3
- scipy/optimize/_dual_annealing.py +1 -1
- scipy/optimize/_elementwise.py +1 -4
- scipy/optimize/_lbfgsb.cpython-312-darwin.so +0 -0
- scipy/optimize/_lbfgsb_py.py +57 -16
- scipy/optimize/_linprog_doc.py +2 -2
- scipy/optimize/_linprog_highs.py +2 -2
- scipy/optimize/_linprog_ip.py +25 -10
- scipy/optimize/_linprog_util.py +14 -16
- scipy/optimize/_lsq/common.py +3 -3
- scipy/optimize/_lsq/dogbox.py +16 -2
- scipy/optimize/_lsq/givens_elimination.cpython-312-darwin.so +0 -0
- scipy/optimize/_lsq/least_squares.py +198 -126
- scipy/optimize/_lsq/lsq_linear.py +6 -6
- scipy/optimize/_lsq/trf.py +35 -8
- scipy/optimize/_milp.py +3 -1
- scipy/optimize/_minimize.py +105 -36
- scipy/optimize/_minpack_py.py +21 -14
- scipy/optimize/_moduleTNC.cpython-312-darwin.so +0 -0
- scipy/optimize/_nnls.py +20 -21
- scipy/optimize/_nonlin.py +34 -3
- scipy/optimize/_numdiff.py +288 -110
- scipy/optimize/_optimize.py +86 -48
- scipy/optimize/_remove_redundancy.py +5 -5
- scipy/optimize/_root_scalar.py +1 -1
- scipy/optimize/_shgo.py +6 -0
- scipy/optimize/_shgo_lib/_complex.py +1 -1
- scipy/optimize/_slsqp_py.py +216 -124
- scipy/optimize/_slsqplib.cpython-312-darwin.so +0 -0
- scipy/optimize/_spectral.py +1 -1
- scipy/optimize/_tnc.py +8 -1
- scipy/optimize/_trlib/_trlib.cpython-312-darwin.so +0 -0
- scipy/optimize/_trustregion.py +20 -6
- scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
- scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
- scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
- scipy/optimize/_trustregion_constr/projections.py +12 -8
- scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
- scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
- scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
- scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
- scipy/optimize/_trustregion_exact.py +0 -1
- scipy/optimize/_zeros.cpython-312-darwin.so +0 -0
- scipy/optimize/_zeros_py.py +97 -17
- scipy/optimize/cython_optimize/_zeros.cpython-312-darwin.so +0 -0
- scipy/optimize/slsqp.py +0 -1
- scipy/optimize/tests/test__basinhopping.py +1 -1
- scipy/optimize/tests/test__differential_evolution.py +4 -4
- scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
- scipy/optimize/tests/test__numdiff.py +66 -22
- scipy/optimize/tests/test__remove_redundancy.py +2 -2
- scipy/optimize/tests/test__shgo.py +9 -1
- scipy/optimize/tests/test_bracket.py +36 -46
- scipy/optimize/tests/test_chandrupatla.py +133 -135
- scipy/optimize/tests/test_cobyla.py +74 -45
- scipy/optimize/tests/test_constraints.py +1 -1
- scipy/optimize/tests/test_differentiable_functions.py +226 -6
- scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
- scipy/optimize/tests/test_least_squares.py +125 -13
- scipy/optimize/tests/test_linear_assignment.py +3 -3
- scipy/optimize/tests/test_linprog.py +3 -3
- scipy/optimize/tests/test_lsq_linear.py +5 -5
- 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/_peak_finding_utils.cpython-312-darwin.so +0 -0
- scipy/signal/_polyutils.py +172 -0
- scipy/signal/_short_time_fft.py +519 -70
- scipy/signal/_signal_api.py +30 -0
- scipy/signal/_signaltools.py +719 -399
- scipy/signal/_sigtools.cpython-312-darwin.so +0 -0
- scipy/signal/_sosfilt.cpython-312-darwin.so +0 -0
- scipy/signal/_spectral_py.py +221 -50
- scipy/signal/_spline_filters.py +108 -68
- scipy/signal/_support_alternative_backends.py +73 -0
- scipy/signal/_upfirdn.py +4 -1
- scipy/signal/_upfirdn_apply.cpython-312-darwin.so +0 -0
- scipy/signal/_waveforms.py +2 -11
- scipy/signal/_wavelets.py +1 -1
- scipy/signal/fir_filter_design.py +1 -0
- scipy/signal/spline.py +4 -11
- scipy/signal/tests/_scipy_spectral_test_shim.py +2 -171
- scipy/signal/tests/test_bsplines.py +114 -79
- scipy/signal/tests/test_cont2discrete.py +9 -2
- scipy/signal/tests/test_filter_design.py +721 -481
- scipy/signal/tests/test_fir_filter_design.py +332 -140
- scipy/signal/tests/test_savitzky_golay.py +4 -3
- scipy/signal/tests/test_short_time_fft.py +221 -3
- scipy/signal/tests/test_signaltools.py +2144 -1348
- scipy/signal/tests/test_spectral.py +19 -6
- scipy/signal/tests/test_splines.py +161 -96
- scipy/signal/tests/test_upfirdn.py +84 -50
- scipy/signal/tests/test_waveforms.py +20 -0
- scipy/signal/tests/test_windows.py +607 -466
- scipy/signal/windows/_windows.py +287 -148
- scipy/sparse/__init__.py +23 -4
- scipy/sparse/_base.py +270 -108
- scipy/sparse/_bsr.py +7 -4
- scipy/sparse/_compressed.py +59 -231
- scipy/sparse/_construct.py +90 -38
- scipy/sparse/_coo.py +115 -181
- scipy/sparse/_csc.py +4 -4
- scipy/sparse/_csparsetools.cpython-312-darwin.so +0 -0
- scipy/sparse/_csr.py +2 -2
- scipy/sparse/_data.py +48 -48
- scipy/sparse/_dia.py +105 -18
- scipy/sparse/_dok.py +0 -23
- scipy/sparse/_index.py +4 -4
- scipy/sparse/_matrix.py +23 -0
- scipy/sparse/_sparsetools.cpython-312-darwin.so +0 -0
- scipy/sparse/_sputils.py +37 -22
- scipy/sparse/base.py +0 -9
- scipy/sparse/bsr.py +0 -14
- scipy/sparse/compressed.py +0 -23
- scipy/sparse/construct.py +0 -6
- scipy/sparse/coo.py +0 -14
- scipy/sparse/csc.py +0 -3
- scipy/sparse/csgraph/_flow.cpython-312-darwin.so +0 -0
- scipy/sparse/csgraph/_matching.cpython-312-darwin.so +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cpython-312-darwin.so +0 -0
- scipy/sparse/csgraph/_reordering.cpython-312-darwin.so +0 -0
- scipy/sparse/csgraph/_shortest_path.cpython-312-darwin.so +0 -0
- scipy/sparse/csgraph/_tools.cpython-312-darwin.so +0 -0
- scipy/sparse/csgraph/_traversal.cpython-312-darwin.so +0 -0
- scipy/sparse/csgraph/tests/test_matching.py +14 -2
- scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
- scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
- scipy/sparse/csr.py +0 -5
- scipy/sparse/data.py +1 -6
- scipy/sparse/dia.py +0 -7
- scipy/sparse/dok.py +0 -10
- scipy/sparse/linalg/_dsolve/_superlu.cpython-312-darwin.so +0 -0
- scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
- scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
- scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-312-darwin.so +0 -0
- scipy/sparse/linalg/_eigen/arpack/arpack.py +23 -17
- scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
- scipy/sparse/linalg/_interface.py +17 -18
- scipy/sparse/linalg/_isolve/_gcrotmk.py +4 -4
- scipy/sparse/linalg/_isolve/iterative.py +51 -45
- scipy/sparse/linalg/_isolve/lgmres.py +6 -6
- scipy/sparse/linalg/_isolve/minres.py +5 -5
- scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
- scipy/sparse/linalg/_isolve/utils.py +2 -8
- scipy/sparse/linalg/_matfuncs.py +1 -1
- scipy/sparse/linalg/_norm.py +1 -1
- scipy/sparse/linalg/_propack/_cpropack.cpython-312-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cpython-312-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_spropack.cpython-312-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cpython-312-darwin.so +0 -0
- scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
- scipy/sparse/linalg/tests/test_pydata_sparse.py +14 -0
- scipy/sparse/tests/test_arithmetic1d.py +5 -2
- scipy/sparse/tests/test_base.py +207 -42
- scipy/sparse/tests/test_common1d.py +7 -7
- scipy/sparse/tests/test_construct.py +1 -1
- scipy/sparse/tests/test_coo.py +272 -4
- scipy/sparse/tests/test_sparsetools.py +5 -0
- scipy/sparse/tests/test_sputils.py +36 -7
- scipy/spatial/_ckdtree.cpython-312-darwin.so +0 -0
- scipy/spatial/_hausdorff.cpython-312-darwin.so +0 -0
- scipy/spatial/_qhull.cpython-312-darwin.so +0 -0
- scipy/spatial/_voronoi.cpython-312-darwin.so +0 -0
- scipy/spatial/distance.py +49 -42
- scipy/spatial/tests/test_distance.py +3 -1
- scipy/spatial/tests/test_kdtree.py +1 -0
- scipy/spatial/tests/test_qhull.py +7 -2
- scipy/spatial/transform/__init__.py +5 -3
- scipy/spatial/transform/_rigid_transform.cpython-312-darwin.so +0 -0
- scipy/spatial/transform/_rotation.cpython-312-darwin.so +0 -0
- scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
- scipy/spatial/transform/tests/test_rotation.py +1213 -832
- scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
- scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
- scipy/special/__init__.py +1 -47
- scipy/special/_add_newdocs.py +34 -772
- scipy/special/_basic.py +22 -25
- scipy/special/_comb.cpython-312-darwin.so +0 -0
- scipy/special/_ellip_harm_2.cpython-312-darwin.so +0 -0
- scipy/special/_gufuncs.cpython-312-darwin.so +0 -0
- scipy/special/_logsumexp.py +67 -58
- scipy/special/_orthogonal.pyi +1 -1
- scipy/special/_specfun.cpython-312-darwin.so +0 -0
- scipy/special/_special_ufuncs.cpython-312-darwin.so +0 -0
- scipy/special/_spherical_bessel.py +4 -4
- scipy/special/_support_alternative_backends.py +212 -119
- scipy/special/_test_internal.cpython-312-darwin.so +0 -0
- scipy/special/_testutils.py +4 -4
- scipy/special/_ufuncs.cpython-312-darwin.so +0 -0
- scipy/special/_ufuncs.pyi +1 -0
- scipy/special/_ufuncs.pyx +215 -1400
- scipy/special/_ufuncs_cxx.cpython-312-darwin.so +0 -0
- scipy/special/_ufuncs_cxx.pxd +2 -15
- scipy/special/_ufuncs_cxx.pyx +5 -44
- scipy/special/_ufuncs_cxx_defs.h +2 -16
- scipy/special/_ufuncs_defs.h +0 -8
- scipy/special/cython_special.cpython-312-darwin.so +0 -0
- scipy/special/cython_special.pxd +1 -1
- scipy/special/tests/_cython_examples/meson.build +10 -1
- scipy/special/tests/test_basic.py +153 -20
- scipy/special/tests/test_boost_ufuncs.py +3 -0
- scipy/special/tests/test_cdflib.py +35 -11
- scipy/special/tests/test_gammainc.py +16 -0
- scipy/special/tests/test_hyp2f1.py +2 -2
- scipy/special/tests/test_log1mexp.py +85 -0
- scipy/special/tests/test_logsumexp.py +206 -64
- scipy/special/tests/test_mpmath.py +1 -0
- scipy/special/tests/test_nan_inputs.py +1 -1
- scipy/special/tests/test_orthogonal.py +17 -18
- scipy/special/tests/test_sf_error.py +3 -2
- scipy/special/tests/test_sph_harm.py +6 -7
- scipy/special/tests/test_support_alternative_backends.py +211 -76
- scipy/stats/__init__.py +4 -1
- scipy/stats/_ansari_swilk_statistics.cpython-312-darwin.so +0 -0
- scipy/stats/_axis_nan_policy.py +4 -3
- scipy/stats/_biasedurn.cpython-312-darwin.so +0 -0
- scipy/stats/_continued_fraction.py +387 -0
- scipy/stats/_continuous_distns.py +277 -310
- scipy/stats/_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 +7 -8
- scipy/{_lib → stats}/_finite_differences.py +1 -1
- scipy/stats/_hypotests.py +82 -49
- scipy/stats/_kde.py +53 -49
- scipy/stats/_ksstats.py +1 -1
- scipy/stats/_levy_stable/__init__.py +7 -15
- scipy/stats/_levy_stable/levyst.cpython-312-darwin.so +0 -0
- scipy/stats/_morestats.py +112 -67
- scipy/stats/_mstats_basic.py +13 -17
- scipy/stats/_mstats_extras.py +8 -8
- scipy/stats/_multivariate.py +89 -113
- scipy/stats/_new_distributions.py +97 -20
- scipy/stats/_page_trend_test.py +12 -5
- scipy/stats/_probability_distribution.py +265 -43
- scipy/stats/_qmc.py +14 -9
- scipy/stats/_qmc_cy.cpython-312-darwin.so +0 -0
- scipy/stats/_qmvnt.py +16 -95
- scipy/stats/_qmvnt_cy.cpython-312-darwin.so +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/rcont.cpython-312-darwin.so +0 -0
- scipy/stats/_resampling.py +4 -29
- scipy/stats/_sampling.py +1 -1
- scipy/stats/_sobol.cpython-312-darwin.so +0 -0
- scipy/stats/_stats.cpython-312-darwin.so +0 -0
- scipy/stats/_stats_mstats_common.py +19 -2
- scipy/stats/_stats_py.py +534 -460
- scipy/stats/_unuran/unuran_wrapper.cpython-312-darwin.so +0 -0
- scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
- scipy/stats/_variation.py +5 -7
- scipy/stats/_wilcoxon.py +13 -7
- scipy/stats/tests/common_tests.py +6 -4
- scipy/stats/tests/test_axis_nan_policy.py +62 -24
- scipy/stats/tests/test_continued_fraction.py +173 -0
- scipy/stats/tests/test_continuous.py +379 -60
- scipy/stats/tests/test_continuous_basic.py +18 -12
- scipy/stats/tests/test_discrete_basic.py +14 -8
- scipy/stats/tests/test_discrete_distns.py +16 -16
- scipy/stats/tests/test_distributions.py +95 -75
- scipy/stats/tests/test_entropy.py +40 -48
- scipy/stats/tests/test_fit.py +4 -3
- scipy/stats/tests/test_hypotests.py +153 -24
- scipy/stats/tests/test_kdeoth.py +109 -41
- scipy/stats/tests/test_marray.py +289 -0
- scipy/stats/tests/test_morestats.py +79 -47
- scipy/stats/tests/test_mstats_basic.py +3 -3
- scipy/stats/tests/test_multivariate.py +434 -83
- scipy/stats/tests/test_qmc.py +13 -10
- scipy/stats/tests/test_quantile.py +199 -0
- scipy/stats/tests/test_rank.py +119 -112
- scipy/stats/tests/test_resampling.py +47 -56
- scipy/stats/tests/test_sampling.py +9 -4
- scipy/stats/tests/test_stats.py +799 -939
- scipy/stats/tests/test_variation.py +8 -6
- scipy/version.py +2 -2
- {scipy-1.15.3.dist-info → scipy-1.16.0rc1.dist-info}/LICENSE.txt +1 -1
- {scipy-1.15.3.dist-info → scipy-1.16.0rc1.dist-info}/METADATA +8 -8
- {scipy-1.15.3.dist-info → scipy-1.16.0rc1.dist-info}/RECORD +545 -552
- scipy-1.16.0rc1.dist-info/WHEEL +6 -0
- scipy/_lib/array_api_extra/_funcs.py +0 -484
- scipy/_lib/array_api_extra/_typing.py +0 -8
- scipy/interpolate/_bspl.cpython-312-darwin.so +0 -0
- scipy/optimize/_cobyla.cpython-312-darwin.so +0 -0
- scipy/optimize/_cython_nnls.cpython-312-darwin.so +0 -0
- scipy/optimize/_slsqp.cpython-312-darwin.so +0 -0
- scipy/spatial/qhull_src/COPYING.txt +0 -38
- scipy/special/libsf_error_state.dylib +0 -0
- scipy/special/tests/test_log_softmax.py +0 -109
- scipy/special/tests/test_xsf_cuda.py +0 -114
- scipy/special/xsf/binom.h +0 -89
- scipy/special/xsf/cdflib.h +0 -100
- scipy/special/xsf/cephes/airy.h +0 -307
- scipy/special/xsf/cephes/besselpoly.h +0 -51
- scipy/special/xsf/cephes/beta.h +0 -257
- scipy/special/xsf/cephes/cbrt.h +0 -131
- scipy/special/xsf/cephes/chbevl.h +0 -85
- scipy/special/xsf/cephes/chdtr.h +0 -193
- scipy/special/xsf/cephes/const.h +0 -87
- scipy/special/xsf/cephes/ellie.h +0 -293
- scipy/special/xsf/cephes/ellik.h +0 -251
- scipy/special/xsf/cephes/ellpe.h +0 -107
- scipy/special/xsf/cephes/ellpk.h +0 -117
- scipy/special/xsf/cephes/expn.h +0 -260
- scipy/special/xsf/cephes/gamma.h +0 -398
- scipy/special/xsf/cephes/hyp2f1.h +0 -596
- scipy/special/xsf/cephes/hyperg.h +0 -361
- scipy/special/xsf/cephes/i0.h +0 -149
- scipy/special/xsf/cephes/i1.h +0 -158
- scipy/special/xsf/cephes/igam.h +0 -421
- scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
- scipy/special/xsf/cephes/igami.h +0 -313
- scipy/special/xsf/cephes/j0.h +0 -225
- scipy/special/xsf/cephes/j1.h +0 -198
- scipy/special/xsf/cephes/jv.h +0 -715
- scipy/special/xsf/cephes/k0.h +0 -164
- scipy/special/xsf/cephes/k1.h +0 -163
- scipy/special/xsf/cephes/kn.h +0 -243
- scipy/special/xsf/cephes/lanczos.h +0 -112
- scipy/special/xsf/cephes/ndtr.h +0 -275
- scipy/special/xsf/cephes/poch.h +0 -85
- scipy/special/xsf/cephes/polevl.h +0 -167
- scipy/special/xsf/cephes/psi.h +0 -194
- scipy/special/xsf/cephes/rgamma.h +0 -111
- scipy/special/xsf/cephes/scipy_iv.h +0 -811
- scipy/special/xsf/cephes/shichi.h +0 -248
- scipy/special/xsf/cephes/sici.h +0 -224
- scipy/special/xsf/cephes/sindg.h +0 -221
- scipy/special/xsf/cephes/tandg.h +0 -139
- scipy/special/xsf/cephes/trig.h +0 -58
- scipy/special/xsf/cephes/unity.h +0 -186
- scipy/special/xsf/cephes/zeta.h +0 -172
- scipy/special/xsf/config.h +0 -304
- scipy/special/xsf/digamma.h +0 -205
- scipy/special/xsf/error.h +0 -57
- scipy/special/xsf/evalpoly.h +0 -47
- scipy/special/xsf/expint.h +0 -266
- scipy/special/xsf/hyp2f1.h +0 -694
- scipy/special/xsf/iv_ratio.h +0 -173
- scipy/special/xsf/lambertw.h +0 -150
- scipy/special/xsf/loggamma.h +0 -163
- scipy/special/xsf/sici.h +0 -200
- scipy/special/xsf/tools.h +0 -427
- scipy/special/xsf/trig.h +0 -164
- scipy/special/xsf/wright_bessel.h +0 -843
- scipy/special/xsf/zlog1.h +0 -35
- scipy/stats/_mvn.cpython-312-darwin.so +0 -0
- scipy-1.15.3.dist-info/WHEEL +0 -4
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
|
|
@@ -1021,10 +1023,8 @@ class _TestCommon:
|
|
1021
1023
|
assert_array_almost_equal(dat.sum(), datsp.sum())
|
1022
1024
|
assert_equal(dat.sum().dtype, datsp.sum().dtype)
|
1023
1025
|
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)
|
1026
|
+
assert_array_almost_equal(dat.sum(axis=None), datsp.sum(axis=None))
|
1027
|
+
assert_equal(dat.sum(axis=None).dtype, datsp.sum(axis=None).dtype)
|
1028
1028
|
assert_array_almost_equal(dat.sum(axis=0), datsp.sum(axis=0))
|
1029
1029
|
assert_equal(dat.sum(axis=0).dtype, datsp.sum(axis=0).dtype)
|
1030
1030
|
assert_array_almost_equal(dat.sum(axis=1), datsp.sum(axis=1))
|
@@ -1033,6 +1033,8 @@ class _TestCommon:
|
|
1033
1033
|
assert_equal(dat.sum(axis=-2).dtype, datsp.sum(axis=-2).dtype)
|
1034
1034
|
assert_array_almost_equal(dat.sum(axis=-1), datsp.sum(axis=-1))
|
1035
1035
|
assert_equal(dat.sum(axis=-1).dtype, datsp.sum(axis=-1).dtype)
|
1036
|
+
assert_array_almost_equal(dat.sum(axis=(0, 1)), datsp.sum(axis=(0, 1)))
|
1037
|
+
assert_equal(dat.sum(axis=(0, 1)).dtype, datsp.sum(axis=(0, 1)).dtype)
|
1036
1038
|
|
1037
1039
|
for dtype in self.checked_dtypes:
|
1038
1040
|
for j in range(len(matrices)):
|
@@ -1045,10 +1047,15 @@ class _TestCommon:
|
|
1045
1047
|
[-6, 7, 9]])
|
1046
1048
|
datsp = self.spcreator(dat)
|
1047
1049
|
|
1048
|
-
assert_raises(ValueError,
|
1049
|
-
|
1050
|
-
assert_raises(
|
1051
|
-
|
1050
|
+
with assert_raises(ValueError, match="axis out of range"):
|
1051
|
+
datsp.sum(axis=3)
|
1052
|
+
with assert_raises(ValueError, match="axis out of range"):
|
1053
|
+
datsp.sum(axis=(0, 3))
|
1054
|
+
with assert_raises(TypeError, match="axis must be an integer"):
|
1055
|
+
datsp.sum(axis=1.5)
|
1056
|
+
# error msg varies by sparray (1d result) or spmatrix (2d result)
|
1057
|
+
with assert_raises(ValueError, match="do.*n.t match.*shape|wrong.*dimensions"):
|
1058
|
+
datsp.mean(axis=1, out=out)
|
1052
1059
|
|
1053
1060
|
def test_sum_dtype(self):
|
1054
1061
|
dat = array([[0, 1, 2],
|
@@ -1088,9 +1095,9 @@ class _TestCommon:
|
|
1088
1095
|
assert_array_almost_equal(dat_out, datsp_out)
|
1089
1096
|
|
1090
1097
|
# check that wrong shape out parameter raises
|
1091
|
-
with assert_raises(ValueError, match="output parameter
|
1098
|
+
with assert_raises(ValueError, match="output parameter"):
|
1092
1099
|
datsp.sum(out=array([0]))
|
1093
|
-
with assert_raises(ValueError, match="output parameter
|
1100
|
+
with assert_raises(ValueError, match="output parameter"):
|
1094
1101
|
datsp.sum(out=array([[0]] if self.is_array_test else 0))
|
1095
1102
|
|
1096
1103
|
def test_numpy_sum(self):
|
@@ -1106,6 +1113,21 @@ class _TestCommon:
|
|
1106
1113
|
assert_array_almost_equal(dat_sum, datsp_sum)
|
1107
1114
|
assert_equal(dat_sum.dtype, datsp_sum.dtype)
|
1108
1115
|
|
1116
|
+
def test_sum_mean_container_type(self):
|
1117
|
+
dat = array([[0, 1, 2],
|
1118
|
+
[3, -4, 5],
|
1119
|
+
[-6, 7, 9]])
|
1120
|
+
datsp = self.spcreator(dat)
|
1121
|
+
|
1122
|
+
assert isscalarlike(datsp.sum())
|
1123
|
+
matrix_or_array = ndarray if self.is_array_test else np.matrix
|
1124
|
+
assert isinstance(datsp.sum(axis=0), matrix_or_array)
|
1125
|
+
assert isinstance(datsp.sum(axis=1), matrix_or_array)
|
1126
|
+
|
1127
|
+
assert isscalarlike(datsp.mean())
|
1128
|
+
assert isinstance(datsp.mean(axis=0), matrix_or_array)
|
1129
|
+
assert isinstance(datsp.mean(axis=1), matrix_or_array)
|
1130
|
+
|
1109
1131
|
def test_mean(self):
|
1110
1132
|
keep = not self.is_array_test
|
1111
1133
|
def check(dtype):
|
@@ -1137,21 +1159,31 @@ class _TestCommon:
|
|
1137
1159
|
dat.mean(axis=-1, keepdims=keep), datsp.mean(axis=-1)
|
1138
1160
|
)
|
1139
1161
|
assert_equal(dat.mean(axis=-1).dtype, datsp.mean(axis=-1).dtype)
|
1162
|
+
assert_array_almost_equal(
|
1163
|
+
dat.mean(axis=(0, 1), keepdims=keep), datsp.mean(axis=(0, 1))
|
1164
|
+
)
|
1165
|
+
assert_equal(dat.mean(axis=(0, 1)).dtype, datsp.mean(axis=(0, 1)).dtype)
|
1166
|
+
|
1140
1167
|
|
1141
1168
|
for dtype in self.checked_dtypes:
|
1142
1169
|
check(dtype)
|
1143
1170
|
|
1144
|
-
def
|
1171
|
+
def test_mean_invalid_param(self):
|
1145
1172
|
out = self.asdense(np.zeros((1, 3)))
|
1146
1173
|
dat = array([[0, 1, 2],
|
1147
1174
|
[3, -4, 5],
|
1148
1175
|
[-6, 7, 9]])
|
1149
1176
|
datsp = self.spcreator(dat)
|
1150
1177
|
|
1151
|
-
assert_raises(ValueError,
|
1152
|
-
|
1153
|
-
assert_raises(
|
1154
|
-
|
1178
|
+
with assert_raises(ValueError, match="axis out of range"):
|
1179
|
+
datsp.mean(axis=3)
|
1180
|
+
with assert_raises(ValueError, match="axis out of range"):
|
1181
|
+
datsp.mean(axis=(0, 3))
|
1182
|
+
with assert_raises(TypeError, match="axis must be an integer"):
|
1183
|
+
datsp.mean(axis=1.5)
|
1184
|
+
# error msg varies by sparray (1d result) or spmatrix (2d result)
|
1185
|
+
with assert_raises(ValueError, match="do.*n.t match.*shape|wrong.*dimensions"):
|
1186
|
+
datsp.mean(axis=1, out=out)
|
1155
1187
|
|
1156
1188
|
def test_mean_dtype(self):
|
1157
1189
|
dat = array([[0, 1, 2],
|
@@ -1649,7 +1681,10 @@ class _TestCommon:
|
|
1649
1681
|
except ValueError:
|
1650
1682
|
assert_raises(ValueError, i.multiply, j)
|
1651
1683
|
continue
|
1652
|
-
|
1684
|
+
try:
|
1685
|
+
sp_mult = i.multiply(j)
|
1686
|
+
except ValueError:
|
1687
|
+
continue
|
1653
1688
|
if issparse(sp_mult):
|
1654
1689
|
assert_almost_equal(sp_mult.toarray(), dense_mult)
|
1655
1690
|
else:
|
@@ -1695,13 +1730,7 @@ class _TestCommon:
|
|
1695
1730
|
B = self.spcreator(A)
|
1696
1731
|
|
1697
1732
|
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]:
|
1733
|
+
for exponent in [1, 2, 2.2, 3, 1+3j]:
|
1705
1734
|
ret_sp = B**exponent
|
1706
1735
|
ret_np = A**exponent
|
1707
1736
|
assert_array_equal(ret_sp.toarray(), ret_np)
|
@@ -2072,8 +2101,8 @@ class _TestCommon:
|
|
2072
2101
|
|
2073
2102
|
with suppress_warnings() as sup:
|
2074
2103
|
sup.filter(SparseEfficiencyWarning,
|
2075
|
-
"Taking maximum
|
2076
|
-
"results
|
2104
|
+
"Taking (maximum|minimum) with a (positive|negative) number "
|
2105
|
+
"results in a dense matrix")
|
2077
2106
|
|
2078
2107
|
max_s = A.maximum(B)
|
2079
2108
|
min_s = A.minimum(B)
|
@@ -2366,20 +2395,14 @@ class _TestInplaceArithmetic:
|
|
2366
2395
|
|
2367
2396
|
# Matrix multiply from __rmatmul__
|
2368
2397
|
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)
|
2398
|
+
y @= b.T
|
2399
|
+
x = a.copy()
|
2400
|
+
y = a.copy()
|
2401
|
+
with assert_raises(ValueError, match="dimension mismatch"):
|
2402
|
+
x @= b
|
2403
|
+
x = x.dot(a.T)
|
2404
|
+
y @= b.T
|
2405
|
+
assert_array_equal(x, y)
|
2383
2406
|
|
2384
2407
|
# Floor division is not supported
|
2385
2408
|
with assert_raises(TypeError, match="unsupported operand"):
|
@@ -3720,9 +3743,11 @@ class _TestMinMax:
|
|
3720
3743
|
X = self.spcreator(np.arange(1, 10).reshape(3, 3))
|
3721
3744
|
assert_equal(X.min(), 1)
|
3722
3745
|
assert_equal(X.min().dtype, X.dtype)
|
3746
|
+
assert_equal(X.min(explicit=True), 1)
|
3723
3747
|
|
3724
3748
|
X = -X
|
3725
3749
|
assert_equal(X.max(), -1)
|
3750
|
+
assert_equal(X.max(explicit=True), -1)
|
3726
3751
|
|
3727
3752
|
# and a fully sparse matrix
|
3728
3753
|
Z = self.spcreator(np.zeros((1, 1)))
|
@@ -3797,6 +3822,7 @@ class _TestMinMax:
|
|
3797
3822
|
assert_array_equal(
|
3798
3823
|
X.min(axis=axis).toarray(), D.min(axis=axis, keepdims=keep)
|
3799
3824
|
)
|
3825
|
+
assert_equal(X.max(axis=(0, 1)), D.max(axis=(0, 1), keepdims=keep))
|
3800
3826
|
|
3801
3827
|
for axis in axes_even:
|
3802
3828
|
expected_max = D[-1, :]
|
@@ -3844,6 +3870,38 @@ class _TestMinMax:
|
|
3844
3870
|
assert_equal(X.max(axis=axis, explicit=ex).toarray(), D.max(axis=axis))
|
3845
3871
|
assert_equal(X.min(axis=axis, explicit=ex).toarray(), D.min(axis=axis))
|
3846
3872
|
|
3873
|
+
def test_minmax_container_type(self):
|
3874
|
+
dat = array([[0, 1, 2],
|
3875
|
+
[3, -4, 5],
|
3876
|
+
[-6, 7, 9]])
|
3877
|
+
datsp = self.spcreator(dat)
|
3878
|
+
matrix_or_array = ndarray if self.is_array_test else np.matrix
|
3879
|
+
spmatrix_or_sparray = sparray if self.is_array_test else spmatrix
|
3880
|
+
|
3881
|
+
assert isscalarlike(datsp.min())
|
3882
|
+
assert isinstance(datsp.min(axis=0), spmatrix_or_sparray)
|
3883
|
+
assert isinstance(datsp.min(axis=1), spmatrix_or_sparray)
|
3884
|
+
|
3885
|
+
assert isscalarlike(datsp.max())
|
3886
|
+
assert isinstance(datsp.max(axis=0), spmatrix_or_sparray)
|
3887
|
+
assert isinstance(datsp.max(axis=1), spmatrix_or_sparray)
|
3888
|
+
|
3889
|
+
assert isscalarlike(datsp.nanmin())
|
3890
|
+
assert isinstance(datsp.nanmin(axis=0), spmatrix_or_sparray)
|
3891
|
+
assert isinstance(datsp.nanmin(axis=1), spmatrix_or_sparray)
|
3892
|
+
|
3893
|
+
assert isscalarlike(datsp.nanmax())
|
3894
|
+
assert isinstance(datsp.nanmax(axis=0), spmatrix_or_sparray)
|
3895
|
+
assert isinstance(datsp.nanmax(axis=1), spmatrix_or_sparray)
|
3896
|
+
|
3897
|
+
assert isscalarlike(datsp.argmin())
|
3898
|
+
assert isinstance(datsp.argmin(axis=0), matrix_or_array)
|
3899
|
+
assert isinstance(datsp.argmin(axis=1), matrix_or_array)
|
3900
|
+
|
3901
|
+
assert isscalarlike(datsp.argmax())
|
3902
|
+
assert isinstance(datsp.argmax(axis=0), matrix_or_array)
|
3903
|
+
assert isinstance(datsp.argmax(axis=1), matrix_or_array)
|
3904
|
+
|
3847
3905
|
def test_nanminmax(self):
|
3848
3906
|
D = self.asdense(np.arange(50).reshape(5,10), dtype=float)
|
3849
3907
|
D[1, :] = 0
|
@@ -3862,6 +3920,10 @@ class _TestMinMax:
|
|
3862
3920
|
assert np.isscalar(X_nan_minimum)
|
3863
3921
|
assert X_nan_minimum == np.nanmin(D)
|
3864
3922
|
|
3923
|
+
X_nan_minimum = X.nanmin(axis=(0, 1))
|
3924
|
+
assert np.isscalar(X_nan_minimum)
|
3925
|
+
assert X_nan_minimum == np.nanmin(D, axis=(0, 1))
|
3926
|
+
|
3865
3927
|
axes = [-2, -1, 0, 1]
|
3866
3928
|
for axis in axes:
|
3867
3929
|
X_nan_maxima = X.nanmax(axis=axis)
|
@@ -3879,11 +3941,12 @@ class _TestMinMax:
|
|
3879
3941
|
datsp = self.spcreator(dat)
|
3880
3942
|
|
3881
3943
|
for fname in ('min', 'max'):
|
3944
|
+
datfunc = getattr(dat, fname)
|
3882
3945
|
func = getattr(datsp, fname)
|
3883
3946
|
assert_raises(ValueError, func, axis=3)
|
3884
|
-
assert_raises(TypeError, func, axis=(0, 1))
|
3885
3947
|
assert_raises(TypeError, func, axis=1.5)
|
3886
3948
|
assert_raises(ValueError, func, axis=1, out=1)
|
3949
|
+
assert_equal(func(axis=(0, 1)), datfunc(axis=(0, 1)))
|
3887
3950
|
|
3888
3951
|
def test_numpy_minmax(self):
|
3889
3952
|
# See gh-5987
|
@@ -3933,6 +3996,13 @@ class _TestMinMax:
|
|
3933
3996
|
assert_equal(mat.argmax(axis=1), np.argmax(D, axis=1))
|
3934
3997
|
assert_equal(mat.argmin(axis=1), np.argmin(D, axis=1))
|
3935
3998
|
|
3999
|
+
# full matrix with explicit=True
|
4000
|
+
mat = self.spcreator(self.asdense(D5))
|
4001
|
+
assert_equal(mat.argmax(explicit=True), 5)
|
4002
|
+
assert_equal((-mat).argmax(explicit=True), 2)
|
4003
|
+
assert_equal(mat.argmin(explicit=True), 2)
|
4004
|
+
assert_equal((-mat).argmin(explicit=True), 5)
|
4005
|
+
|
3936
4006
|
# zero-size matrices
|
3937
4007
|
D6 = self.spcreator(np.empty((0, 5)))
|
3938
4008
|
D7 = self.spcreator(np.empty((5, 0)))
|
@@ -4355,6 +4425,12 @@ class TestCSRMatrix(_MatrixMixin, TestCSR):
|
|
4355
4425
|
with suppress_warnings() as sup:
|
4356
4426
|
sup.filter(SparseEfficiencyWarning, "Changing the sparsity structure")
|
4357
4427
|
return csr_matrix(*args, **kwargs)
|
4428
|
+
|
4429
|
+
def test_spmatrix_subscriptable(self):
|
4430
|
+
result = csr_matrix[np.int8]
|
4431
|
+
assert isinstance(result, GenericAlias)
|
4432
|
+
assert result.__origin__ is csr_matrix
|
4433
|
+
assert result.__args__ == (np.int8,)
|
4358
4434
|
|
4359
4435
|
|
4360
4436
|
TestCSRMatrix.init_class()
|
@@ -4890,6 +4966,17 @@ class TestCOO(sparse_test_class(getset=False,
|
|
4890
4966
|
# Using __ne__ and nnz instead
|
4891
4967
|
assert_((mat1.reshape((1001, 3000001), order='C') != mat2).nnz == 0)
|
4892
4968
|
assert_((mat2.reshape((3000001, 1001), order='F') != mat1).nnz == 0)
|
4969
|
+
|
4970
|
+
def test_sparray_subscriptable(self):
|
4971
|
+
result = coo_array[np.int8, tuple[int]]
|
4972
|
+
assert isinstance(result, GenericAlias)
|
4973
|
+
assert result.__origin__ is coo_array
|
4974
|
+
assert result.__args__ == (np.int8, tuple[int])
|
4975
|
+
|
4976
|
+
result = coo_array[np.int8]
|
4977
|
+
assert isinstance(result, GenericAlias)
|
4978
|
+
assert result.__origin__ is coo_array
|
4979
|
+
assert result.__args__ == (np.int8,)
|
4893
4980
|
|
4894
4981
|
|
4895
4982
|
class TestCOOMatrix(_MatrixMixin, TestCOO):
|
@@ -4962,6 +5049,40 @@ class TestDIA(sparse_test_class(getset=False, slicing=False, slicing_assign=Fals
|
|
4962
5049
|
csc = dia.tocsc()
|
4963
5050
|
assert csc.indices.dtype == np.int32
|
4964
5051
|
|
5052
|
+
def test_add_sparse(self):
|
5053
|
+
# test format and cases not covered by common add tests
|
5054
|
+
A = diag([1, 2])
|
5055
|
+
B = A + diag([3], 1)
|
5056
|
+
Asp = dia_matrix(A)
|
5057
|
+
Bsp = dia_matrix(B)
|
5058
|
+
|
5059
|
+
Csp = Asp + Bsp
|
5060
|
+
assert isinstance(Csp, dia_matrix)
|
5061
|
+
assert_array_equal(Csp.toarray(), A + B)
|
5062
|
+
|
5063
|
+
Csp = Bsp + Asp
|
5064
|
+
assert isinstance(Csp, dia_matrix)
|
5065
|
+
assert_array_equal(Csp.toarray(), B + A)
|
5066
|
+
|
5067
|
+
def test_sub_sparse(self):
|
5068
|
+
# test format and cases not covered by common sub tests
|
5069
|
+
A = diag([1, 2])
|
5070
|
+
B = A + diag([3], 1)
|
5071
|
+
Asp = dia_matrix(A)
|
5072
|
+
Bsp = dia_matrix(B)
|
5073
|
+
|
5074
|
+
Csp = Asp - Bsp
|
5075
|
+
assert isinstance(Csp, dia_matrix)
|
5076
|
+
assert_array_equal(Csp.toarray(), A - B)
|
5077
|
+
|
5078
|
+
Csp = Bsp - Asp
|
5079
|
+
assert isinstance(Csp, dia_matrix)
|
5080
|
+
assert_array_equal(Csp.toarray(), B - A)
|
5081
|
+
|
5082
|
+
Bsp = Bsp.asformat('csr')
|
5083
|
+
assert_array_equal((Asp - Bsp).toarray(), A - B)
|
5084
|
+
assert_array_equal((Bsp - Asp).toarray(), B - A)
|
5085
|
+
|
4965
5086
|
def test_mul_scalar(self):
|
4966
5087
|
# repro for gh-20434
|
4967
5088
|
m = self.dia_container([[1, 2], [0, 4]])
|
@@ -4973,6 +5094,50 @@ class TestDIA(sparse_test_class(getset=False, slicing=False, slicing_assign=Fals
|
|
4973
5094
|
assert isinstance(res2, m.__class__)
|
4974
5095
|
assert_array_equal(res2.toarray(), [[3, 6], [0, 12]])
|
4975
5096
|
|
5097
|
+
def test_matmul_dia(self):
|
5098
|
+
# test DIA structure of DIA @ DIA:
|
5099
|
+
|
5100
|
+
# that all and only needed elements are used and produced
|
5101
|
+
A = array([[1, 2, 3],
|
5102
|
+
[4, 5, 6]])
|
5103
|
+
B = array([[11, 12],
|
5104
|
+
[13, 14],
|
5105
|
+
[15, 16]])
|
5106
|
+
Asp = dia_matrix(A)
|
5107
|
+
Bsp = dia_matrix(B)
|
5108
|
+
Asp.data[Asp.data == 0] = -1 # poison outside elements
|
5109
|
+
Bsp.data[Bsp.data == 0] = -1
|
5110
|
+
assert_array_equal(Asp.toarray(), A)
|
5111
|
+
assert_array_equal(Bsp.toarray(), B)
|
5112
|
+
|
5113
|
+
C = A @ B
|
5114
|
+
Csp = Asp @ Bsp
|
5115
|
+
assert isinstance(Csp, dia_matrix)
|
5116
|
+
assert_array_equal(Csp.toarray(), C)
|
5117
|
+
assert_array_equal(Csp.offsets, [-1, 0, 1])
|
5118
|
+
assert_array_equal(Csp.data, dia_matrix(C).data)
|
5119
|
+
|
5120
|
+
C = B @ A
|
5121
|
+
Csp = Bsp @ Asp
|
5122
|
+
assert isinstance(Csp, dia_matrix)
|
5123
|
+
assert_array_equal(Csp.toarray(), C)
|
5124
|
+
assert_array_equal(Csp.offsets, [-2, -1, 0, 1, 2])
|
5125
|
+
assert_array_equal(Csp.data, dia_matrix(C).data)
|
5126
|
+
|
5127
|
+
# short data and that order of input offsets doesn't matter
|
5128
|
+
Asp = dia_matrix(([[0., 1., 2.], [3., 4., 5.]], [1, -2]), (5, 5))
|
5129
|
+
Bsp = dia_matrix(([[6., 7., 8.], [0., 0., 9.]], [-1, 2]), (5, 5))
|
5130
|
+
|
5131
|
+
Csp = Asp @ Bsp
|
5132
|
+
assert_array_equal(Csp.offsets, array([-3, 0]))
|
5133
|
+
assert_array_equal(Csp.data, [[24., 35., 0.],
|
5134
|
+
[6., 14., 27.]])
|
5135
|
+
|
5136
|
+
Csp = Bsp @ Asp
|
5137
|
+
assert_array_equal(Csp.offsets, array([-3, 0]))
|
5138
|
+
assert_array_equal(Csp.data, [[24., 0., 0.],
|
5139
|
+
[27., 6., 14.]])
|
5140
|
+
|
4976
5141
|
|
4977
5142
|
class TestDIAMatrix(_MatrixMixin, TestDIA):
|
4978
5143
|
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):
|