scipy 1.15.3__cp313-cp313-musllinux_1_2_aarch64.whl → 1.16.0rc2__cp313-cp313-musllinux_1_2_aarch64.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 +10 -10
- scipy/__init__.py +3 -6
- scipy/_cyutility.cpython-313-aarch64-linux-musl.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-313-aarch64-linux-musl.so +0 -0
- scipy/_lib/_docscrape.py +1 -1
- scipy/_lib/_elementwise_iterative_method.py +15 -26
- scipy/_lib/_fpumode.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/_lib/_sparse.py +41 -0
- scipy/_lib/_test_ccallback.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/_lib/_test_deprecation_call.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/_lib/_test_deprecation_def.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/_lib/_testutils.py +6 -2
- scipy/_lib/_uarray/_uarray.cpython-313-aarch64-linux-musl.so +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.cpython-313-aarch64-linux-musl.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-313-aarch64-linux-musl.so +0 -0
- scipy/cluster/_optimal_leaf_ordering.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/cluster/_vq.cpython-313-aarch64-linux-musl.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/pypocketfft.cpython-313-aarch64-linux-musl.so +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.cpython-313-aarch64-linux-musl.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-313-aarch64-linux-musl.so +0 -0
- scipy/integrate/_lsoda.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/integrate/_ode.py +9 -2
- scipy/integrate/_odepack.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/integrate/_quad_vec.py +21 -29
- scipy/integrate/_quadpack.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/integrate/_quadpack_py.py +11 -7
- scipy/integrate/_quadrature.py +3 -3
- scipy/integrate/_rules/_base.py +2 -2
- scipy/integrate/_tanhsinh.py +48 -47
- scipy/integrate/_test_multivariate.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/integrate/_test_odeint_banded.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/integrate/_vode.cpython-313-aarch64-linux-musl.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-313-aarch64-linux-musl.so +0 -0
- scipy/interpolate/_dierckx.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/interpolate/_fitpack.cpython-313-aarch64-linux-musl.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-313-aarch64-linux-musl.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-313-aarch64-linux-musl.so +0 -0
- scipy/interpolate/_rbf.py +2 -2
- scipy/interpolate/_rbfinterp.py +1 -1
- scipy/interpolate/_rbfinterp_pythran.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/interpolate/_rgi.py +31 -26
- scipy/interpolate/_rgi_cython.cpython-313-aarch64-linux-musl.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/_fast_matrix_market/_fmm_core.cpython-313-aarch64-linux-musl.so +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.cpython-313-aarch64-linux-musl.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-313-aarch64-linux-musl.so +0 -0
- scipy/io/matlab/_mio_utils.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/io/matlab/_miobase.py +4 -1
- scipy/io/matlab/_streams.cpython-313-aarch64-linux-musl.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-313-aarch64-linux-musl.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-313-aarch64-linux-musl.so +0 -0
- scipy/linalg/_decomp_ldl.py +4 -1
- scipy/linalg/_decomp_lu.py +18 -6
- scipy/linalg/_decomp_lu_cython.cpython-313-aarch64-linux-musl.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-313-aarch64-linux-musl.so +0 -0
- scipy/linalg/_expm_frechet.py +4 -0
- scipy/linalg/_fblas.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/linalg/_flapack.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/linalg/_linalg_pythran.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/linalg/_matfuncs.py +187 -4
- scipy/linalg/_matfuncs_expm.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +1 -99
- scipy/linalg/_matfuncs_sqrtm_triu.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/linalg/_procrustes.py +2 -0
- scipy/linalg/_sketches.py +17 -6
- scipy/linalg/_solve_toeplitz.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/linalg/_solvers.py +7 -2
- scipy/linalg/_special_matrices.py +26 -36
- scipy/linalg/cython_blas.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/linalg/cython_lapack.cpython-313-aarch64-linux-musl.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/_ctest.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/ndimage/_cytest.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/ndimage/_delegators.py +8 -2
- scipy/ndimage/_filters.py +453 -5
- scipy/ndimage/_interpolation.py +36 -6
- scipy/ndimage/_measurements.py +4 -2
- scipy/ndimage/_morphology.py +5 -0
- scipy/ndimage/_nd_image.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/ndimage/_ni_docstrings.py +5 -1
- scipy/ndimage/_ni_label.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/ndimage/_ni_support.py +1 -5
- scipy/ndimage/_rank_filter_1d.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/ndimage/_support_alternative_backends.py +18 -6
- scipy/ndimage/tests/test_filters.py +370 -259
- scipy/ndimage/tests/test_fourier.py +7 -9
- scipy/ndimage/tests/test_interpolation.py +68 -61
- scipy/ndimage/tests/test_measurements.py +18 -35
- scipy/ndimage/tests/test_morphology.py +143 -131
- scipy/ndimage/tests/test_splines.py +1 -3
- scipy/odr/__odrpack.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/optimize/_basinhopping.py +13 -7
- scipy/optimize/_bglu_dense.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/optimize/_bracket.py +17 -24
- scipy/optimize/_chandrupatla.py +9 -10
- scipy/optimize/_cobyla_py.py +104 -123
- scipy/optimize/_constraints.py +14 -10
- scipy/optimize/_differentiable_functions.py +371 -230
- scipy/optimize/_differentialevolution.py +4 -3
- scipy/optimize/_direct.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/optimize/_dual_annealing.py +1 -1
- scipy/optimize/_elementwise.py +1 -4
- scipy/optimize/_group_columns.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/optimize/_highspy/_core.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/optimize/_highspy/_highs_options.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/optimize/_lbfgsb.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/optimize/_lbfgsb_py.py +57 -16
- scipy/optimize/_linprog_doc.py +2 -2
- scipy/optimize/_linprog_highs.py +2 -2
- scipy/optimize/_linprog_ip.py +25 -10
- scipy/optimize/_linprog_util.py +14 -16
- scipy/optimize/_lsap.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/optimize/_lsq/common.py +3 -3
- scipy/optimize/_lsq/dogbox.py +16 -2
- scipy/optimize/_lsq/givens_elimination.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/optimize/_lsq/least_squares.py +198 -126
- scipy/optimize/_lsq/lsq_linear.py +6 -6
- scipy/optimize/_lsq/trf.py +35 -8
- scipy/optimize/_milp.py +3 -1
- scipy/optimize/_minimize.py +105 -36
- scipy/optimize/_minpack.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/optimize/_minpack_py.py +21 -14
- scipy/optimize/_moduleTNC.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/optimize/_nnls.py +20 -21
- scipy/optimize/_nonlin.py +34 -3
- scipy/optimize/_numdiff.py +288 -110
- scipy/optimize/_optimize.py +86 -48
- scipy/optimize/_pava_pybind.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/optimize/_remove_redundancy.py +5 -5
- scipy/optimize/_root_scalar.py +1 -1
- scipy/optimize/_shgo.py +6 -0
- scipy/optimize/_shgo_lib/_complex.py +1 -1
- scipy/optimize/_slsqp_py.py +216 -124
- scipy/optimize/_slsqplib.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/optimize/_spectral.py +1 -1
- scipy/optimize/_tnc.py +8 -1
- scipy/optimize/_trlib/_trlib.cpython-313-aarch64-linux-musl.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-313-aarch64-linux-musl.so +0 -0
- scipy/optimize/_zeros_py.py +97 -17
- scipy/optimize/cython_optimize/_zeros.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/optimize/slsqp.py +0 -1
- scipy/optimize/tests/test__basinhopping.py +1 -1
- scipy/optimize/tests/test__differential_evolution.py +4 -4
- scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
- scipy/optimize/tests/test__numdiff.py +66 -22
- scipy/optimize/tests/test__remove_redundancy.py +2 -2
- scipy/optimize/tests/test__shgo.py +9 -1
- scipy/optimize/tests/test_bracket.py +36 -46
- scipy/optimize/tests/test_chandrupatla.py +133 -135
- scipy/optimize/tests/test_cobyla.py +74 -45
- scipy/optimize/tests/test_constraints.py +1 -1
- scipy/optimize/tests/test_differentiable_functions.py +226 -6
- scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
- scipy/optimize/tests/test_least_squares.py +125 -13
- scipy/optimize/tests/test_linear_assignment.py +3 -3
- scipy/optimize/tests/test_linprog.py +3 -3
- scipy/optimize/tests/test_lsq_linear.py +6 -6
- scipy/optimize/tests/test_minimize_constrained.py +2 -2
- scipy/optimize/tests/test_minpack.py +4 -4
- scipy/optimize/tests/test_nnls.py +43 -3
- scipy/optimize/tests/test_nonlin.py +36 -0
- scipy/optimize/tests/test_optimize.py +95 -17
- scipy/optimize/tests/test_slsqp.py +36 -4
- scipy/optimize/tests/test_zeros.py +34 -1
- scipy/signal/__init__.py +12 -23
- scipy/signal/_delegators.py +568 -0
- scipy/signal/_filter_design.py +459 -241
- scipy/signal/_fir_filter_design.py +262 -90
- scipy/signal/_lti_conversion.py +3 -2
- scipy/signal/_ltisys.py +118 -91
- scipy/signal/_max_len_seq_inner.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/signal/_peak_finding_utils.cpython-313-aarch64-linux-musl.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-313-aarch64-linux-musl.so +0 -0
- scipy/signal/_sosfilt.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/signal/_spectral_py.py +230 -50
- scipy/signal/_spline.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/signal/_spline_filters.py +108 -68
- scipy/signal/_support_alternative_backends.py +73 -0
- scipy/signal/_upfirdn.py +4 -1
- scipy/signal/_upfirdn_apply.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/signal/_waveforms.py +2 -11
- scipy/signal/_wavelets.py +1 -1
- scipy/signal/fir_filter_design.py +1 -0
- scipy/signal/spline.py +4 -11
- scipy/signal/tests/_scipy_spectral_test_shim.py +2 -171
- scipy/signal/tests/test_bsplines.py +114 -79
- scipy/signal/tests/test_cont2discrete.py +9 -2
- scipy/signal/tests/test_filter_design.py +721 -481
- scipy/signal/tests/test_fir_filter_design.py +332 -140
- scipy/signal/tests/test_savitzky_golay.py +4 -3
- scipy/signal/tests/test_short_time_fft.py +221 -3
- scipy/signal/tests/test_signaltools.py +2144 -1348
- scipy/signal/tests/test_spectral.py +50 -6
- scipy/signal/tests/test_splines.py +161 -96
- scipy/signal/tests/test_upfirdn.py +84 -50
- scipy/signal/tests/test_waveforms.py +20 -0
- scipy/signal/tests/test_windows.py +607 -466
- scipy/signal/windows/_windows.py +287 -148
- scipy/sparse/__init__.py +23 -4
- scipy/sparse/_base.py +270 -108
- scipy/sparse/_bsr.py +7 -4
- scipy/sparse/_compressed.py +59 -231
- scipy/sparse/_construct.py +90 -38
- scipy/sparse/_coo.py +115 -181
- scipy/sparse/_csc.py +4 -4
- scipy/sparse/_csparsetools.cpython-313-aarch64-linux-musl.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-313-aarch64-linux-musl.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-313-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_matching.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_reordering.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_shortest_path.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_tools.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_traversal.cpython-313-aarch64-linux-musl.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-313-aarch64-linux-musl.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-313-aarch64-linux-musl.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-313-aarch64-linux-musl.so +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/sparse/linalg/_propack/_spropack.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
- scipy/sparse/linalg/tests/test_pydata_sparse.py +14 -0
- scipy/sparse/tests/test_arithmetic1d.py +5 -2
- scipy/sparse/tests/test_base.py +214 -42
- scipy/sparse/tests/test_common1d.py +7 -7
- scipy/sparse/tests/test_construct.py +1 -1
- scipy/sparse/tests/test_coo.py +272 -4
- scipy/sparse/tests/test_sparsetools.py +5 -0
- scipy/sparse/tests/test_sputils.py +36 -7
- scipy/spatial/_ckdtree.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/spatial/_distance_pybind.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/spatial/_distance_wrap.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/spatial/_hausdorff.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/spatial/_qhull.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/spatial/_voronoi.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/spatial/distance.py +49 -42
- scipy/spatial/tests/test_distance.py +15 -1
- scipy/spatial/tests/test_kdtree.py +1 -0
- scipy/spatial/tests/test_qhull.py +7 -2
- scipy/spatial/transform/__init__.py +5 -3
- scipy/spatial/transform/_rigid_transform.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/spatial/transform/_rotation.cpython-313-aarch64-linux-musl.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-313-aarch64-linux-musl.so +0 -0
- scipy/special/_ellip_harm_2.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/special/_gufuncs.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/special/_logsumexp.py +67 -58
- scipy/special/_orthogonal.pyi +1 -1
- scipy/special/_specfun.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/special/_special_ufuncs.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/special/_spherical_bessel.py +4 -4
- scipy/special/_support_alternative_backends.py +212 -119
- scipy/special/_test_internal.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/special/_testutils.py +4 -4
- scipy/special/_ufuncs.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/special/_ufuncs.pyi +1 -0
- scipy/special/_ufuncs.pyx +215 -1400
- scipy/special/_ufuncs_cxx.cpython-313-aarch64-linux-musl.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-313-aarch64-linux-musl.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-313-aarch64-linux-musl.so +0 -0
- scipy/stats/_axis_nan_policy.py +5 -12
- scipy/stats/_biasedurn.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/stats/_continued_fraction.py +387 -0
- scipy/stats/_continuous_distns.py +277 -310
- scipy/stats/_correlation.py +1 -1
- scipy/stats/_covariance.py +6 -3
- scipy/stats/_discrete_distns.py +39 -32
- scipy/stats/_distn_infrastructure.py +39 -12
- scipy/stats/_distribution_infrastructure.py +900 -238
- scipy/stats/_entropy.py +9 -10
- scipy/{_lib → stats}/_finite_differences.py +1 -1
- scipy/stats/_hypotests.py +83 -50
- scipy/stats/_kde.py +53 -49
- scipy/stats/_ksstats.py +1 -1
- scipy/stats/_levy_stable/__init__.py +7 -15
- scipy/stats/_levy_stable/levyst.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/stats/_morestats.py +118 -73
- scipy/stats/_mstats_basic.py +13 -17
- scipy/stats/_mstats_extras.py +8 -8
- scipy/stats/_multivariate.py +89 -113
- scipy/stats/_new_distributions.py +97 -20
- scipy/stats/_page_trend_test.py +12 -5
- scipy/stats/_probability_distribution.py +265 -43
- scipy/stats/_qmc.py +14 -9
- scipy/stats/_qmc_cy.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/stats/_qmvnt.py +16 -95
- scipy/stats/_qmvnt_cy.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/rcont.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/stats/_resampling.py +4 -29
- scipy/stats/_sampling.py +1 -1
- scipy/stats/_sobol.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/stats/_stats.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/stats/_stats_mstats_common.py +21 -2
- scipy/stats/_stats_py.py +550 -476
- scipy/stats/_stats_pythran.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/stats/_unuran/unuran_wrapper.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
- scipy/stats/_variation.py +6 -8
- scipy/stats/_wilcoxon.py +13 -7
- scipy/stats/tests/common_tests.py +6 -4
- scipy/stats/tests/test_axis_nan_policy.py +62 -24
- scipy/stats/tests/test_continued_fraction.py +173 -0
- scipy/stats/tests/test_continuous.py +379 -60
- scipy/stats/tests/test_continuous_basic.py +18 -12
- scipy/stats/tests/test_discrete_basic.py +14 -8
- scipy/stats/tests/test_discrete_distns.py +16 -16
- scipy/stats/tests/test_distributions.py +95 -75
- scipy/stats/tests/test_entropy.py +40 -48
- scipy/stats/tests/test_fit.py +4 -3
- scipy/stats/tests/test_hypotests.py +153 -24
- scipy/stats/tests/test_kdeoth.py +109 -41
- scipy/stats/tests/test_marray.py +289 -0
- scipy/stats/tests/test_morestats.py +79 -47
- scipy/stats/tests/test_mstats_basic.py +3 -3
- scipy/stats/tests/test_multivariate.py +434 -83
- scipy/stats/tests/test_qmc.py +13 -10
- scipy/stats/tests/test_quantile.py +199 -0
- scipy/stats/tests/test_rank.py +119 -112
- scipy/stats/tests/test_resampling.py +47 -56
- scipy/stats/tests/test_sampling.py +9 -4
- scipy/stats/tests/test_stats.py +799 -939
- scipy/stats/tests/test_variation.py +8 -6
- scipy/version.py +2 -2
- {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/LICENSE.txt +4 -4
- {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/METADATA +11 -11
- {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/RECORD +1262 -1269
- scipy.libs/libgcc_s-69c45f16.so.1 +0 -0
- scipy.libs/libgfortran-db0b6589.so.5.0.0 +0 -0
- scipy.libs/{libstdc++-1b614e01.so.6.0.32 → libstdc++-1f1a71be.so.6.0.33} +0 -0
- scipy/_lib/array_api_extra/_funcs.py +0 -484
- scipy/_lib/array_api_extra/_typing.py +0 -8
- scipy/interpolate/_bspl.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/optimize/_cobyla.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/optimize/_cython_nnls.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/optimize/_slsqp.cpython-313-aarch64-linux-musl.so +0 -0
- scipy/spatial/qhull_src/COPYING.txt +0 -38
- scipy/special/libsf_error_state.so +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-313-aarch64-linux-musl.so +0 -0
- scipy.libs/libgcc_s-7393e603.so.1 +0 -0
- scipy.libs/libgfortran-eb933d8e.so.5.0.0 +0 -0
- {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/WHEEL +0 -0
scipy/sparse/construct.py
CHANGED
@@ -9,10 +9,8 @@ __all__ = [ # noqa: F822
|
|
9
9
|
'block_diag',
|
10
10
|
'bmat',
|
11
11
|
'bsr_matrix',
|
12
|
-
'check_random_state',
|
13
12
|
'coo_matrix',
|
14
13
|
'csc_matrix',
|
15
|
-
'csr_hstack',
|
16
14
|
'csr_matrix',
|
17
15
|
'dia_matrix',
|
18
16
|
'diags',
|
@@ -20,16 +18,12 @@ __all__ = [ # noqa: F822
|
|
20
18
|
'get_index_dtype',
|
21
19
|
'hstack',
|
22
20
|
'identity',
|
23
|
-
'isscalarlike',
|
24
21
|
'issparse',
|
25
22
|
'kron',
|
26
23
|
'kronsum',
|
27
|
-
'numbers',
|
28
24
|
'rand',
|
29
25
|
'random',
|
30
|
-
'rng_integers',
|
31
26
|
'spdiags',
|
32
|
-
'upcast',
|
33
27
|
'vstack',
|
34
28
|
]
|
35
29
|
|
scipy/sparse/coo.py
CHANGED
@@ -7,23 +7,9 @@ from scipy._lib.deprecation import _sub_module_deprecation
|
|
7
7
|
|
8
8
|
__all__ = [ # noqa: F822
|
9
9
|
'SparseEfficiencyWarning',
|
10
|
-
'check_reshape_kwargs',
|
11
|
-
'check_shape',
|
12
10
|
'coo_matrix',
|
13
|
-
'coo_matvec',
|
14
|
-
'coo_tocsr',
|
15
|
-
'coo_todense',
|
16
|
-
'downcast_intp_index',
|
17
|
-
'getdata',
|
18
|
-
'getdtype',
|
19
|
-
'isshape',
|
20
11
|
'isspmatrix_coo',
|
21
|
-
'operator',
|
22
12
|
'spmatrix',
|
23
|
-
'to_native',
|
24
|
-
'upcast',
|
25
|
-
'upcast_char',
|
26
|
-
'warn',
|
27
13
|
]
|
28
14
|
|
29
15
|
|
scipy/sparse/csc.py
CHANGED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -4,7 +4,7 @@ import numpy as np
|
|
4
4
|
from numpy.testing import assert_array_equal, assert_equal
|
5
5
|
import pytest
|
6
6
|
|
7
|
-
from scipy.sparse import csr_array, diags_array
|
7
|
+
from scipy.sparse import csr_array, coo_array, diags_array
|
8
8
|
from scipy.sparse.csgraph import (
|
9
9
|
maximum_bipartite_matching, min_weight_full_bipartite_matching
|
10
10
|
)
|
@@ -152,10 +152,16 @@ def test_matching_large_random_graph_with_one_edge_incident_to_each_vertex():
|
|
152
152
|
@pytest.mark.parametrize('num_rows,num_cols', [(0, 0), (2, 0), (0, 3)])
|
153
153
|
def test_min_weight_full_matching_trivial_graph(num_rows, num_cols):
|
154
154
|
biadjacency = csr_array((num_cols, num_rows))
|
155
|
+
biadjacency1 = coo_array((num_cols, num_rows))
|
156
|
+
|
155
157
|
row_ind, col_ind = min_weight_full_bipartite_matching(biadjacency)
|
156
158
|
assert len(row_ind) == 0
|
157
159
|
assert len(col_ind) == 0
|
158
160
|
|
161
|
+
row_ind1, col_ind1 = min_weight_full_bipartite_matching(biadjacency1)
|
162
|
+
assert len(row_ind1) == 0
|
163
|
+
assert len(col_ind1) == 0
|
164
|
+
|
159
165
|
|
160
166
|
@pytest.mark.parametrize('biadjacency',
|
161
167
|
[
|
@@ -169,6 +175,8 @@ def test_min_weight_full_matching_trivial_graph(num_rows, num_cols):
|
|
169
175
|
def test_min_weight_full_matching_infeasible_problems(biadjacency):
|
170
176
|
with pytest.raises(ValueError):
|
171
177
|
min_weight_full_bipartite_matching(csr_array(biadjacency))
|
178
|
+
with pytest.raises(ValueError):
|
179
|
+
min_weight_full_bipartite_matching(coo_array(biadjacency))
|
172
180
|
|
173
181
|
|
174
182
|
def test_min_weight_full_matching_large_infeasible():
|
@@ -223,13 +231,17 @@ def test_min_weight_full_matching_large_infeasible():
|
|
223
231
|
])
|
224
232
|
with pytest.raises(ValueError, match='no full matching exists'):
|
225
233
|
min_weight_full_bipartite_matching(csr_array(a))
|
234
|
+
with pytest.raises(ValueError, match='no full matching exists'):
|
235
|
+
min_weight_full_bipartite_matching(coo_array(a))
|
226
236
|
|
227
237
|
|
228
238
|
@pytest.mark.thread_unsafe
|
229
239
|
def test_explicit_zero_causes_warning():
|
240
|
+
biadjacency = csr_array(((2, 0, 3), (0, 1, 1), (0, 2, 3)))
|
230
241
|
with pytest.warns(UserWarning):
|
231
|
-
biadjacency = csr_array(((2, 0, 3), (0, 1, 1), (0, 2, 3)))
|
232
242
|
min_weight_full_bipartite_matching(biadjacency)
|
243
|
+
with pytest.warns(UserWarning):
|
244
|
+
min_weight_full_bipartite_matching(biadjacency.tocoo())
|
233
245
|
|
234
246
|
|
235
247
|
# General test for linear sum assignment solvers to make it possible to rely
|
@@ -154,9 +154,12 @@ def test_min_weight_full_bipartite_matching(graphs):
|
|
154
154
|
func = spgraph.min_weight_full_bipartite_matching
|
155
155
|
|
156
156
|
actual = func(A_sparse[0:2, 1:3])
|
157
|
-
|
157
|
+
A_csc = sp.csc_array(A_dense)
|
158
|
+
desired = func(A_csc[0:2, 1:3])
|
159
|
+
desired1 = func(A_csc[0:2, 1:3].tocoo())
|
158
160
|
|
159
161
|
assert_equal(actual, desired)
|
162
|
+
assert_equal(actual, desired1)
|
160
163
|
|
161
164
|
|
162
165
|
@check_sparse_version("0.15.4")
|
@@ -16,6 +16,7 @@ directed_G = np.array([[0, 3, 3, 0, 0],
|
|
16
16
|
[1, 0, 0, 0, 0],
|
17
17
|
[2, 0, 0, 2, 0]], dtype=float)
|
18
18
|
|
19
|
+
# Undirected version of directed_G
|
19
20
|
undirected_G = np.array([[0, 3, 3, 1, 2],
|
20
21
|
[3, 0, 0, 2, 4],
|
21
22
|
[3, 0, 0, 0, 0],
|
@@ -24,6 +25,7 @@ undirected_G = np.array([[0, 3, 3, 1, 2],
|
|
24
25
|
|
25
26
|
unweighted_G = (directed_G > 0).astype(float)
|
26
27
|
|
28
|
+
# Correct shortest path lengths for directed_G and undirected_G
|
27
29
|
directed_SP = [[0, 3, 3, 5, 7],
|
28
30
|
[3, 0, 6, 2, 4],
|
29
31
|
[np.inf, np.inf, 0, np.inf, np.inf],
|
@@ -33,6 +35,35 @@ directed_SP = [[0, 3, 3, 5, 7],
|
|
33
35
|
directed_2SP_0_to_3 = [[-9999, 0, -9999, 1, -9999],
|
34
36
|
[-9999, 0, -9999, 4, 1]]
|
35
37
|
|
38
|
+
undirected_SP = np.array([[0, 3, 3, 1, 2],
|
39
|
+
[3, 0, 6, 2, 4],
|
40
|
+
[3, 6, 0, 4, 5],
|
41
|
+
[1, 2, 4, 0, 2],
|
42
|
+
[2, 4, 5, 2, 0]], dtype=float)
|
43
|
+
|
44
|
+
undirected_SP_limit_2 = np.array([[0, np.inf, np.inf, 1, 2],
|
45
|
+
[np.inf, 0, np.inf, 2, np.inf],
|
46
|
+
[np.inf, np.inf, 0, np.inf, np.inf],
|
47
|
+
[1, 2, np.inf, 0, 2],
|
48
|
+
[2, np.inf, np.inf, 2, 0]], dtype=float)
|
49
|
+
|
50
|
+
undirected_SP_limit_0 = np.ones((5, 5), dtype=float) - np.eye(5)
|
51
|
+
undirected_SP_limit_0[undirected_SP_limit_0 > 0] = np.inf
|
52
|
+
|
53
|
+
# Correct predecessors for directed_G and undirected_G
|
54
|
+
directed_pred = np.array([[-9999, 0, 0, 1, 1],
|
55
|
+
[3, -9999, 0, 1, 1],
|
56
|
+
[-9999, -9999, -9999, -9999, -9999],
|
57
|
+
[3, 0, 0, -9999, 1],
|
58
|
+
[4, 0, 0, 4, -9999]], dtype=float)
|
59
|
+
|
60
|
+
undirected_pred = np.array([[-9999, 0, 0, 0, 0],
|
61
|
+
[1, -9999, 0, 1, 1],
|
62
|
+
[2, 0, -9999, 0, 0],
|
63
|
+
[3, 3, 0, -9999, 3],
|
64
|
+
[4, 4, 0, 4, -9999]], dtype=float)
|
65
|
+
|
66
|
+
# Other graphs
|
36
67
|
directed_sparse_zero_G = scipy.sparse.csr_array(
|
37
68
|
(
|
38
69
|
[0, 1, 2, 3, 1],
|
@@ -61,33 +92,6 @@ undirected_sparse_zero_SP = [[0, 0, 1, np.inf, np.inf],
|
|
61
92
|
[np.inf, np.inf, np.inf, 0, 1],
|
62
93
|
[np.inf, np.inf, np.inf, 1, 0]]
|
63
94
|
|
64
|
-
directed_pred = np.array([[-9999, 0, 0, 1, 1],
|
65
|
-
[3, -9999, 0, 1, 1],
|
66
|
-
[-9999, -9999, -9999, -9999, -9999],
|
67
|
-
[3, 0, 0, -9999, 1],
|
68
|
-
[4, 0, 0, 4, -9999]], dtype=float)
|
69
|
-
|
70
|
-
undirected_SP = np.array([[0, 3, 3, 1, 2],
|
71
|
-
[3, 0, 6, 2, 4],
|
72
|
-
[3, 6, 0, 4, 5],
|
73
|
-
[1, 2, 4, 0, 2],
|
74
|
-
[2, 4, 5, 2, 0]], dtype=float)
|
75
|
-
|
76
|
-
undirected_SP_limit_2 = np.array([[0, np.inf, np.inf, 1, 2],
|
77
|
-
[np.inf, 0, np.inf, 2, np.inf],
|
78
|
-
[np.inf, np.inf, 0, np.inf, np.inf],
|
79
|
-
[1, 2, np.inf, 0, 2],
|
80
|
-
[2, np.inf, np.inf, 2, 0]], dtype=float)
|
81
|
-
|
82
|
-
undirected_SP_limit_0 = np.ones((5, 5), dtype=float) - np.eye(5)
|
83
|
-
undirected_SP_limit_0[undirected_SP_limit_0 > 0] = np.inf
|
84
|
-
|
85
|
-
undirected_pred = np.array([[-9999, 0, 0, 0, 0],
|
86
|
-
[1, -9999, 0, 1, 1],
|
87
|
-
[2, 0, -9999, 0, 0],
|
88
|
-
[3, 3, 0, -9999, 3],
|
89
|
-
[4, 4, 0, 4, -9999]], dtype=float)
|
90
|
-
|
91
95
|
directed_negative_weighted_G = np.array([[0, 0, 0],
|
92
96
|
[-1, 0, 0],
|
93
97
|
[0, -1, 0]], dtype=float)
|
@@ -217,6 +221,28 @@ def test_dijkstra_min_only_random(n):
|
|
217
221
|
p = pred[p]
|
218
222
|
|
219
223
|
|
224
|
+
@pytest.mark.parametrize('n', (10, 100))
|
225
|
+
@pytest.mark.parametrize("method", ['FW', 'J', 'BF'])
|
226
|
+
@pytest.mark.parametrize('directed', (True, False))
|
227
|
+
def test_star_graph(n, method, directed):
|
228
|
+
# Build the star graph
|
229
|
+
star_arr = np.zeros((n, n), dtype=float)
|
230
|
+
star_center_idx = 0
|
231
|
+
star_arr[star_center_idx, :] = star_arr[:, star_center_idx] = range(n)
|
232
|
+
G = scipy.sparse.csr_matrix(star_arr, shape=(n, n))
|
233
|
+
# Build the distances matrix
|
234
|
+
SP_solution = np.zeros((n, n), dtype=float)
|
235
|
+
SP_solution[:] = star_arr[star_center_idx]
|
236
|
+
for idx in range(1, n):
|
237
|
+
SP_solution[idx] += star_arr[idx, star_center_idx]
|
238
|
+
np.fill_diagonal(SP_solution, 0)
|
239
|
+
|
240
|
+
SP = shortest_path(G, method=method, directed=directed)
|
241
|
+
assert_allclose(
|
242
|
+
SP_solution, SP
|
243
|
+
)
|
244
|
+
|
245
|
+
|
220
246
|
def test_dijkstra_random():
|
221
247
|
# reproduces the hang observed in gh-17782
|
222
248
|
n = 10
|
@@ -307,6 +333,15 @@ def test_construct_shortest_path():
|
|
307
333
|
for directed in (True, False):
|
308
334
|
check(method, directed)
|
309
335
|
|
336
|
+
@pytest.mark.parametrize("directed", [True, False])
|
337
|
+
def test_construct_dist_matrix_predecessors_error(directed):
|
338
|
+
SP1, pred = shortest_path(directed_G,
|
339
|
+
directed=directed,
|
340
|
+
overwrite=False,
|
341
|
+
return_predecessors=True)
|
342
|
+
assert_raises(TypeError, construct_dist_matrix,
|
343
|
+
directed_G, pred.astype(np.int64), directed)
|
344
|
+
|
310
345
|
|
311
346
|
def test_unweighted_path():
|
312
347
|
def check(method, directed):
|
@@ -419,15 +454,34 @@ def test_yen_directed():
|
|
419
454
|
assert_allclose(predecessors, directed_2SP_0_to_3)
|
420
455
|
|
421
456
|
|
457
|
+
def test_yen_dense():
|
458
|
+
dense_undirected_G = np.array([
|
459
|
+
[0, 3, 3, 1, 2],
|
460
|
+
[3, 0, 7, 6, 5],
|
461
|
+
[3, 7, 0, 4, 0],
|
462
|
+
[1, 6, 4, 0, 2],
|
463
|
+
[2, 5, 0, 2, 0]], dtype=float)
|
464
|
+
distances = yen(
|
465
|
+
dense_undirected_G,
|
466
|
+
source=0,
|
467
|
+
sink=4,
|
468
|
+
K=5,
|
469
|
+
directed=False,
|
470
|
+
)
|
471
|
+
assert_allclose(distances, [2., 3., 8., 9., 11.])
|
472
|
+
|
473
|
+
|
422
474
|
def test_yen_undirected():
|
423
475
|
distances = yen(
|
424
476
|
undirected_G,
|
425
477
|
source=0,
|
426
478
|
sink=3,
|
427
479
|
K=4,
|
480
|
+
directed=False,
|
428
481
|
)
|
429
482
|
assert_allclose(distances, [1., 4., 5., 8.])
|
430
483
|
|
484
|
+
|
431
485
|
def test_yen_unweighted():
|
432
486
|
# Ask for more paths than there are, verify only the available paths are returned
|
433
487
|
distances, predecessors = yen(
|
@@ -441,6 +495,7 @@ def test_yen_unweighted():
|
|
441
495
|
assert_allclose(distances, [2., 3.])
|
442
496
|
assert_allclose(predecessors, directed_2SP_0_to_3)
|
443
497
|
|
498
|
+
|
444
499
|
def test_yen_no_paths():
|
445
500
|
distances = yen(
|
446
501
|
directed_G,
|
@@ -450,6 +505,7 @@ def test_yen_no_paths():
|
|
450
505
|
)
|
451
506
|
assert distances.size == 0
|
452
507
|
|
508
|
+
|
453
509
|
def test_yen_negative_weights():
|
454
510
|
distances = yen(
|
455
511
|
directed_negative_weighted_G,
|
scipy/sparse/csr.py
CHANGED
scipy/sparse/data.py
CHANGED
scipy/sparse/dia.py
CHANGED
@@ -6,16 +6,9 @@ from scipy._lib.deprecation import _sub_module_deprecation
|
|
6
6
|
|
7
7
|
|
8
8
|
__all__ = [ # noqa: F822
|
9
|
-
'check_shape',
|
10
9
|
'dia_matrix',
|
11
|
-
'dia_matvec',
|
12
|
-
'get_sum_dtype',
|
13
|
-
'getdtype',
|
14
|
-
'isshape',
|
15
10
|
'isspmatrix_dia',
|
16
11
|
'spmatrix',
|
17
|
-
'upcast_char',
|
18
|
-
'validateaxis',
|
19
12
|
]
|
20
13
|
|
21
14
|
|
scipy/sparse/dok.py
CHANGED
@@ -6,19 +6,9 @@ from scipy._lib.deprecation import _sub_module_deprecation
|
|
6
6
|
|
7
7
|
|
8
8
|
__all__ = [ # noqa: F822
|
9
|
-
'IndexMixin',
|
10
|
-
'check_shape',
|
11
9
|
'dok_matrix',
|
12
|
-
'getdtype',
|
13
|
-
'isdense',
|
14
|
-
'isintlike',
|
15
|
-
'isscalarlike',
|
16
|
-
'isshape',
|
17
10
|
'isspmatrix_dok',
|
18
|
-
'itertools',
|
19
11
|
'spmatrix',
|
20
|
-
'upcast',
|
21
|
-
'upcast_scalar',
|
22
12
|
]
|
23
13
|
|
24
14
|
|
Binary file
|
@@ -26,6 +26,7 @@ __all__ = ['use_solver', 'spsolve', 'splu', 'spilu', 'factorized',
|
|
26
26
|
|
27
27
|
|
28
28
|
class MatrixRankWarning(UserWarning):
|
29
|
+
"""Warning for exactly singular matrices."""
|
29
30
|
pass
|
30
31
|
|
31
32
|
|
@@ -371,6 +372,10 @@ def splu(A, permc_spec=None, diag_pivot_thresh=None,
|
|
371
372
|
|
372
373
|
Notes
|
373
374
|
-----
|
375
|
+
When a real array is factorized and the returned SuperLU object's ``solve()``
|
376
|
+
method is used with complex arguments an error is generated. Instead, cast the
|
377
|
+
initial array to complex and then factorize.
|
378
|
+
|
374
379
|
This function uses the SuperLU library.
|
375
380
|
|
376
381
|
References
|
@@ -468,6 +473,10 @@ def spilu(A, drop_tol=None, fill_factor=None, drop_rule=None, permc_spec=None,
|
|
468
473
|
|
469
474
|
Notes
|
470
475
|
-----
|
476
|
+
When a real array is factorized and the returned SuperLU object's ``solve()`` method
|
477
|
+
is used with complex arguments an error is generated. Instead, cast the initial
|
478
|
+
array to complex and then factorize.
|
479
|
+
|
471
480
|
To improve the better approximation to the inverse, you may need to
|
472
481
|
increase `fill_factor` AND decrease `drop_tol`.
|
473
482
|
|
@@ -3,7 +3,7 @@ import threading
|
|
3
3
|
|
4
4
|
import numpy as np
|
5
5
|
from numpy import array, finfo, arange, eye, all, unique, ones, dot
|
6
|
-
|
6
|
+
from numpy.exceptions import ComplexWarning
|
7
7
|
from numpy.testing import (
|
8
8
|
assert_array_almost_equal, assert_almost_equal,
|
9
9
|
assert_equal, assert_array_equal, assert_, assert_allclose,
|
@@ -22,7 +22,6 @@ from scipy.sparse.linalg._dsolve import (spsolve, use_solver, splu, spilu,
|
|
22
22
|
import scipy.sparse
|
23
23
|
|
24
24
|
from scipy._lib._testutils import check_free_memory
|
25
|
-
from scipy._lib._util import ComplexWarning
|
26
25
|
|
27
26
|
|
28
27
|
sup_sparse_efficiency = suppress_warnings()
|
@@ -61,7 +60,6 @@ class TestFactorized:
|
|
61
60
|
d = arange(n) + 1
|
62
61
|
self.n = n
|
63
62
|
self.A = dia_array(((d, 2*d, d[::-1]), (-3, 0, 5)), shape=(n,n)).tocsc()
|
64
|
-
random.seed(1234)
|
65
63
|
|
66
64
|
def _check_singular(self):
|
67
65
|
A = csc_array((5,5), dtype='d')
|
@@ -71,7 +69,8 @@ class TestFactorized:
|
|
71
69
|
def _check_non_singular(self):
|
72
70
|
# Make a diagonal dominant, to make sure it is not singular
|
73
71
|
n = 5
|
74
|
-
|
72
|
+
rng = np.random.default_rng(14332)
|
73
|
+
a = csc_array(rng.random((n, n)))
|
75
74
|
b = ones(n)
|
76
75
|
|
77
76
|
expected = splu(a).solve(b)
|
@@ -113,9 +112,11 @@ class TestFactorized:
|
|
113
112
|
def test_call_with_incorrectly_sized_matrix_without_umfpack(self):
|
114
113
|
use_solver(useUmfpack=False)
|
115
114
|
solve = factorized(self.A)
|
116
|
-
|
117
|
-
|
118
|
-
|
115
|
+
|
116
|
+
rng = np.random.default_rng(230498)
|
117
|
+
b = rng.random(4)
|
118
|
+
B = rng.random((4, 3))
|
119
|
+
BB = rng.random((self.n, 3, 9))
|
119
120
|
|
120
121
|
with assert_raises(ValueError, match="is of incompatible size"):
|
121
122
|
solve(b)
|
@@ -129,9 +130,11 @@ class TestFactorized:
|
|
129
130
|
def test_call_with_incorrectly_sized_matrix_with_umfpack(self):
|
130
131
|
use_solver(useUmfpack=True)
|
131
132
|
solve = factorized(self.A)
|
132
|
-
|
133
|
-
|
134
|
-
|
133
|
+
|
134
|
+
rng = np.random.default_rng(643095823)
|
135
|
+
b = rng.random(4)
|
136
|
+
B = rng.random((4, 3))
|
137
|
+
BB = rng.random((self.n, 3, 9))
|
135
138
|
|
136
139
|
# does not raise
|
137
140
|
solve(b)
|
@@ -144,7 +147,8 @@ class TestFactorized:
|
|
144
147
|
def test_call_with_cast_to_complex_without_umfpack(self):
|
145
148
|
use_solver(useUmfpack=False)
|
146
149
|
solve = factorized(self.A)
|
147
|
-
|
150
|
+
rng = np.random.default_rng(23454)
|
151
|
+
b = rng.random(4)
|
148
152
|
for t in [np.complex64, np.complex128]:
|
149
153
|
with assert_raises(TypeError, match="Cannot cast array data"):
|
150
154
|
solve(b.astype(t))
|
@@ -153,7 +157,8 @@ class TestFactorized:
|
|
153
157
|
def test_call_with_cast_to_complex_with_umfpack(self):
|
154
158
|
use_solver(useUmfpack=True)
|
155
159
|
solve = factorized(self.A)
|
156
|
-
|
160
|
+
rng = np.random.default_rng(23454)
|
161
|
+
b = rng.random(4)
|
157
162
|
for t in [np.complex64, np.complex128]:
|
158
163
|
assert_warns(ComplexWarning, solve, b.astype(t))
|
159
164
|
|
@@ -246,8 +251,8 @@ class TestLinsolve:
|
|
246
251
|
[1., 0., 1.],
|
247
252
|
[0., 0., 1.]])
|
248
253
|
As = csc_array(Adense)
|
249
|
-
random.
|
250
|
-
x =
|
254
|
+
rng = np.random.default_rng(1234)
|
255
|
+
x = rng.standard_normal(3)
|
251
256
|
b = As@x
|
252
257
|
x2 = spsolve(As, b)
|
253
258
|
|
@@ -258,8 +263,8 @@ class TestLinsolve:
|
|
258
263
|
[1., 0., 1.],
|
259
264
|
[0., 0., 1.]])
|
260
265
|
As = csc_array(Adense)
|
261
|
-
random.
|
262
|
-
x =
|
266
|
+
rng = np.random.default_rng(1234)
|
267
|
+
x = rng.standard_normal((3, 4))
|
263
268
|
Bdense = As.dot(x)
|
264
269
|
Bs = csc_array(Bdense)
|
265
270
|
x2 = spsolve(As, Bs)
|
@@ -452,7 +457,6 @@ class TestSplu:
|
|
452
457
|
d = arange(n) + 1
|
453
458
|
self.n = n
|
454
459
|
self.A = dia_array(((d, 2*d, d[::-1]), (-3, 0, 5)), shape=(n, n)).tocsc()
|
455
|
-
random.seed(1234)
|
456
460
|
|
457
461
|
def _smoketest(self, spxlu, check, dtype, idx_dtype):
|
458
462
|
if np.issubdtype(dtype, np.complexfloating):
|
@@ -465,7 +469,7 @@ class TestSplu:
|
|
465
469
|
A.indptr = A.indptr.astype(idx_dtype, copy=False)
|
466
470
|
lu = spxlu(A)
|
467
471
|
|
468
|
-
rng = random.RandomState(1234)
|
472
|
+
rng = np.random.RandomState(1234)
|
469
473
|
|
470
474
|
# Input shapes
|
471
475
|
for k in [None, 1, 2, self.n, self.n+2]:
|
@@ -552,7 +556,7 @@ class TestSplu:
|
|
552
556
|
def test_splu_basic(self):
|
553
557
|
# Test basic splu functionality.
|
554
558
|
n = 30
|
555
|
-
rng = random.RandomState(12)
|
559
|
+
rng = np.random.RandomState(12)
|
556
560
|
a = rng.rand(n, n)
|
557
561
|
a[a < 0.95] = 0
|
558
562
|
# First test with a singular matrix
|
@@ -572,7 +576,8 @@ class TestSplu:
|
|
572
576
|
def test_splu_perm(self):
|
573
577
|
# Test the permutation vectors exposed by splu.
|
574
578
|
n = 30
|
575
|
-
|
579
|
+
rng = np.random.default_rng(1342354)
|
580
|
+
a = rng.random((n, n))
|
576
581
|
a[a < 0.95] = 0
|
577
582
|
# Make a diagonal dominant, to make sure it is not singular
|
578
583
|
a += 4*eye(n)
|
@@ -621,7 +626,8 @@ class TestSplu:
|
|
621
626
|
def test_lu_refcount(self):
|
622
627
|
# Test that we are keeping track of the reference count with splu.
|
623
628
|
n = 30
|
624
|
-
|
629
|
+
rng = np.random.default_rng(1342354)
|
630
|
+
a = rng.random((n, n))
|
625
631
|
a[a < 0.95] = 0
|
626
632
|
# Make a diagonal dominant, to make sure it is not singular
|
627
633
|
a += 4*eye(n)
|
@@ -638,14 +644,15 @@ class TestSplu:
|
|
638
644
|
|
639
645
|
def test_bad_inputs(self):
|
640
646
|
A = self.A.tocsc()
|
647
|
+
rng = np.random.default_rng(235634)
|
641
648
|
|
642
649
|
assert_raises(ValueError, splu, A[:,:4])
|
643
650
|
assert_raises(ValueError, spilu, A[:,:4])
|
644
651
|
|
645
652
|
for lu in [splu(A), spilu(A)]:
|
646
|
-
b = random
|
647
|
-
B = random
|
648
|
-
BB = random
|
653
|
+
b = rng.random(42)
|
654
|
+
B = rng.random((42, 3))
|
655
|
+
BB = rng.random((self.n, 3, 9))
|
649
656
|
assert_raises(ValueError, lu.solve, b)
|
650
657
|
assert_raises(ValueError, lu.solve, B)
|
651
658
|
assert_raises(ValueError, lu.solve, BB)
|
@@ -877,14 +884,14 @@ class TestSpsolveTriangular:
|
|
877
884
|
A = A.tocsr(copy=False)
|
878
885
|
return A
|
879
886
|
|
880
|
-
np.random.
|
887
|
+
rng = np.random.default_rng(1234)
|
881
888
|
A = random_triangle_matrix(n, lower=lower)
|
882
889
|
if choice_of_b == "floats":
|
883
|
-
b =
|
890
|
+
b = rng.random((n, m))
|
884
891
|
elif choice_of_b == "ints":
|
885
|
-
b =
|
892
|
+
b = rng.integers(-9, 9, (n, m))
|
886
893
|
elif choice_of_b == "complexints":
|
887
|
-
b =
|
894
|
+
b = rng.integers(-9, 9, (n, m)) + rng.integers(-9, 9, (n, m)) * 1j
|
888
895
|
else:
|
889
896
|
raise ValueError(
|
890
897
|
"choice_of_b must be 'floats', 'ints', or 'complexints'.")
|
Binary file
|