scipy 1.15.2__cp313-cp313t-macosx_14_0_arm64.whl → 1.16.0__cp313-cp313t-macosx_14_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/libgcc_s.1.1.dylib +0 -0
- scipy/.dylibs/libgfortran.5.dylib +0 -0
- scipy/.dylibs/libquadmath.0.dylib +0 -0
- scipy/__config__.py +5 -5
- scipy/__init__.py +3 -6
- scipy/_cyutility.cpython-313t-darwin.so +0 -0
- scipy/_lib/_array_api.py +497 -161
- scipy/_lib/_array_api_compat_vendor.py +9 -0
- scipy/_lib/_bunch.py +4 -0
- scipy/_lib/_ccallback_c.cpython-313t-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_ccallback.cpython-313t-darwin.so +0 -0
- scipy/_lib/_test_deprecation_call.cpython-313t-darwin.so +0 -0
- scipy/_lib/_test_deprecation_def.cpython-313t-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-313t-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 +169 -34
- 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-313t-darwin.so +0 -0
- scipy/cluster/_optimal_leaf_ordering.cpython-313t-darwin.so +0 -0
- scipy/cluster/_vq.cpython-313t-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 +282 -151
- 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-313t-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-313t-darwin.so +0 -0
- scipy/integrate/_ivp/common.py +3 -3
- scipy/integrate/_ivp/ivp.py +9 -2
- scipy/integrate/_ivp/tests/test_ivp.py +19 -0
- scipy/integrate/_lsoda.cpython-313t-darwin.so +0 -0
- scipy/integrate/_ode.py +9 -2
- scipy/integrate/_odepack.cpython-313t-darwin.so +0 -0
- scipy/integrate/_quad_vec.py +21 -29
- scipy/integrate/_quadpack.cpython-313t-darwin.so +0 -0
- scipy/integrate/_quadpack_py.py +11 -7
- scipy/integrate/_quadrature.py +3 -3
- scipy/integrate/_rules/_base.py +2 -2
- scipy/integrate/_tanhsinh.py +57 -54
- scipy/integrate/_test_odeint_banded.cpython-313t-darwin.so +0 -0
- scipy/integrate/_vode.cpython-313t-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 +61 -43
- 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-313t-darwin.so +0 -0
- scipy/interpolate/_dierckx.cpython-313t-darwin.so +0 -0
- scipy/interpolate/_fitpack.cpython-313t-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-313t-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-313t-darwin.so +0 -0
- scipy/interpolate/_rbf.py +2 -2
- scipy/interpolate/_rbfinterp.py +1 -1
- scipy/interpolate/_rbfinterp_pythran.cpython-313t-darwin.so +0 -0
- scipy/interpolate/_rgi.py +31 -26
- scipy/interpolate/_rgi_cython.cpython-313t-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-313t-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-313t-darwin.so +0 -0
- scipy/io/matlab/_mio_utils.cpython-313t-darwin.so +0 -0
- scipy/io/matlab/_miobase.py +4 -1
- scipy/io/matlab/_streams.cpython-313t-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-313t-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-313t-darwin.so +0 -0
- scipy/linalg/_decomp_ldl.py +4 -1
- scipy/linalg/_decomp_lu.py +18 -6
- scipy/linalg/_decomp_lu_cython.cpython-313t-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-313t-darwin.so +0 -0
- scipy/linalg/_expm_frechet.py +4 -0
- scipy/linalg/_fblas.cpython-313t-darwin.so +0 -0
- scipy/linalg/_flapack.cpython-313t-darwin.so +0 -0
- scipy/linalg/_linalg_pythran.cpython-313t-darwin.so +0 -0
- scipy/linalg/_matfuncs.py +187 -4
- scipy/linalg/_matfuncs_expm.cpython-313t-darwin.so +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cpython-313t-darwin.so +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +1 -99
- scipy/linalg/_matfuncs_sqrtm_triu.cpython-313t-darwin.so +0 -0
- scipy/linalg/_procrustes.py +2 -0
- scipy/linalg/_sketches.py +17 -6
- scipy/linalg/_solve_toeplitz.cpython-313t-darwin.so +0 -0
- scipy/linalg/_solvers.py +7 -2
- scipy/linalg/_special_matrices.py +26 -36
- scipy/linalg/blas.py +35 -24
- scipy/linalg/cython_blas.cpython-313t-darwin.so +0 -0
- scipy/linalg/cython_lapack.cpython-313t-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_interpolative.py +17 -0
- 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-313t-darwin.so +0 -0
- scipy/ndimage/_delegators.py +8 -2
- scipy/ndimage/_filters.py +453 -5
- scipy/ndimage/_interpolation.py +36 -6
- scipy/ndimage/_measurements.py +4 -2
- scipy/ndimage/_morphology.py +5 -0
- scipy/ndimage/_nd_image.cpython-313t-darwin.so +0 -0
- scipy/ndimage/_ndimage_api.py +2 -1
- scipy/ndimage/_ni_docstrings.py +5 -1
- scipy/ndimage/_ni_label.cpython-313t-darwin.so +0 -0
- scipy/ndimage/_ni_support.py +1 -5
- scipy/ndimage/_rank_filter_1d.cpython-313t-darwin.so +0 -0
- scipy/ndimage/_support_alternative_backends.py +18 -6
- scipy/ndimage/tests/test_filters.py +384 -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-313t-darwin.so +0 -0
- scipy/optimize/_basinhopping.py +13 -7
- scipy/optimize/_bglu_dense.cpython-313t-darwin.so +0 -0
- scipy/optimize/_bracket.py +46 -26
- 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-313t-darwin.so +0 -0
- scipy/optimize/_dual_annealing.py +1 -1
- scipy/optimize/_elementwise.py +1 -4
- scipy/optimize/_group_columns.cpython-313t-darwin.so +0 -0
- scipy/optimize/_highspy/_highs_wrapper.py +6 -4
- scipy/optimize/_lbfgsb.cpython-313t-darwin.so +0 -0
- scipy/optimize/_lbfgsb_py.py +80 -24
- scipy/optimize/_linprog_doc.py +2 -2
- scipy/optimize/_linprog_highs.py +11 -11
- scipy/optimize/_linprog_ip.py +25 -10
- scipy/optimize/_linprog_util.py +18 -19
- scipy/optimize/_lsap.cpython-313t-darwin.so +0 -0
- scipy/optimize/_lsq/common.py +3 -3
- scipy/optimize/_lsq/dogbox.py +16 -2
- scipy/optimize/_lsq/givens_elimination.cpython-313t-darwin.so +0 -0
- scipy/optimize/_lsq/least_squares.py +198 -126
- scipy/optimize/_lsq/lsq_linear.py +6 -6
- scipy/optimize/_lsq/trf.py +35 -8
- scipy/optimize/_milp.py +3 -1
- scipy/optimize/_minimize.py +105 -36
- scipy/optimize/_minpack.cpython-313t-darwin.so +0 -0
- scipy/optimize/_minpack_py.py +21 -14
- scipy/optimize/_moduleTNC.cpython-313t-darwin.so +0 -0
- scipy/optimize/_nnls.py +20 -21
- scipy/optimize/_nonlin.py +34 -3
- scipy/optimize/_numdiff.py +288 -110
- scipy/optimize/_optimize.py +86 -48
- scipy/optimize/_pava_pybind.cpython-313t-darwin.so +0 -0
- scipy/optimize/_remove_redundancy.py +5 -5
- scipy/optimize/_root_scalar.py +1 -1
- scipy/optimize/_shgo.py +6 -0
- scipy/optimize/_shgo_lib/_complex.py +1 -1
- scipy/optimize/_slsqp_py.py +216 -124
- scipy/optimize/_slsqplib.cpython-313t-darwin.so +0 -0
- scipy/optimize/_spectral.py +1 -1
- scipy/optimize/_tnc.py +8 -1
- scipy/optimize/_trlib/_trlib.cpython-313t-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-313t-darwin.so +0 -0
- scipy/optimize/_zeros_py.py +97 -17
- scipy/optimize/cython_optimize/_zeros.cpython-313t-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 +71 -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 +98 -20
- 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-313t-darwin.so +0 -0
- scipy/signal/_peak_finding_utils.cpython-313t-darwin.so +0 -0
- scipy/signal/_polyutils.py +172 -0
- scipy/signal/_short_time_fft.py +553 -76
- scipy/signal/_signal_api.py +30 -0
- scipy/signal/_signaltools.py +719 -396
- scipy/signal/_sigtools.cpython-313t-darwin.so +0 -0
- scipy/signal/_sosfilt.cpython-313t-darwin.so +0 -0
- scipy/signal/_spectral_py.py +230 -50
- scipy/signal/_spline.cpython-313t-darwin.so +0 -0
- scipy/signal/_spline_filters.py +108 -68
- scipy/signal/_support_alternative_backends.py +73 -0
- scipy/signal/_upfirdn.py +4 -1
- scipy/signal/_upfirdn_apply.cpython-313t-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 +5 -182
- 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 +231 -5
- scipy/signal/tests/test_signaltools.py +2150 -1349
- 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 +269 -120
- scipy/sparse/_bsr.py +7 -4
- scipy/sparse/_compressed.py +59 -234
- scipy/sparse/_construct.py +90 -38
- scipy/sparse/_coo.py +115 -181
- scipy/sparse/_csc.py +4 -4
- scipy/sparse/_csparsetools.cpython-313t-darwin.so +0 -0
- scipy/sparse/_csr.py +2 -2
- scipy/sparse/_data.py +48 -48
- scipy/sparse/_dia.py +105 -21
- scipy/sparse/_dok.py +0 -23
- scipy/sparse/_index.py +4 -4
- scipy/sparse/_matrix.py +23 -0
- scipy/sparse/_sparsetools.cpython-313t-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-313t-darwin.so +0 -0
- scipy/sparse/csgraph/_matching.cpython-313t-darwin.so +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cpython-313t-darwin.so +0 -0
- scipy/sparse/csgraph/_reordering.cpython-313t-darwin.so +0 -0
- scipy/sparse/csgraph/_shortest_path.cpython-313t-darwin.so +0 -0
- scipy/sparse/csgraph/_tools.cpython-313t-darwin.so +0 -0
- scipy/sparse/csgraph/_traversal.cpython-313t-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-313t-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-313t-darwin.so +0 -0
- scipy/sparse/linalg/_eigen/arpack/arpack.py +28 -20
- scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
- scipy/sparse/linalg/_expm_multiply.py +8 -3
- scipy/sparse/linalg/_interface.py +29 -26
- scipy/sparse/linalg/_isolve/_gcrotmk.py +6 -5
- 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-313t-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cpython-313t-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_spropack.cpython-313t-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cpython-313t-darwin.so +0 -0
- scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
- scipy/sparse/linalg/tests/test_expm_multiply.py +10 -0
- scipy/sparse/linalg/tests/test_interface.py +35 -0
- scipy/sparse/linalg/tests/test_pydata_sparse.py +18 -0
- scipy/sparse/tests/test_arithmetic1d.py +5 -2
- scipy/sparse/tests/test_base.py +224 -40
- scipy/sparse/tests/test_common1d.py +17 -12
- 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-313t-darwin.so +0 -0
- scipy/spatial/_distance_pybind.cpython-313t-darwin.so +0 -0
- scipy/spatial/_distance_wrap.cpython-313t-darwin.so +0 -0
- scipy/spatial/_hausdorff.cpython-313t-darwin.so +0 -0
- scipy/spatial/_qhull.cpython-313t-darwin.so +0 -0
- scipy/spatial/_voronoi.cpython-313t-darwin.so +0 -0
- scipy/spatial/distance.py +49 -42
- scipy/spatial/tests/test_distance.py +15 -1
- scipy/spatial/tests/test_kdtree.py +1 -0
- scipy/spatial/tests/test_qhull.py +106 -2
- scipy/spatial/transform/__init__.py +5 -3
- scipy/spatial/transform/_rigid_transform.cpython-313t-darwin.so +0 -0
- scipy/spatial/transform/_rotation.cpython-313t-darwin.so +0 -0
- scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
- scipy/spatial/transform/tests/test_rotation.py +1342 -790
- 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-313t-darwin.so +0 -0
- scipy/special/_ellip_harm_2.cpython-313t-darwin.so +0 -0
- scipy/special/_gufuncs.cpython-313t-darwin.so +0 -0
- scipy/special/_logsumexp.py +83 -69
- scipy/special/_orthogonal.pyi +1 -1
- scipy/special/_specfun.cpython-313t-darwin.so +0 -0
- scipy/special/_special_ufuncs.cpython-313t-darwin.so +0 -0
- scipy/special/_spherical_bessel.py +4 -4
- scipy/special/_support_alternative_backends.py +212 -119
- scipy/special/_test_internal.cpython-313t-darwin.so +0 -0
- scipy/special/_testutils.py +4 -4
- scipy/special/_ufuncs.cpython-313t-darwin.so +0 -0
- scipy/special/_ufuncs.pyi +1 -0
- scipy/special/_ufuncs.pyx +215 -1400
- scipy/special/_ufuncs_cxx.cpython-313t-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-313t-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 +23 -2
- scipy/special/tests/test_log1mexp.py +85 -0
- scipy/special/tests/test_logsumexp.py +220 -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-313t-darwin.so +0 -0
- scipy/stats/_axis_nan_policy.py +5 -12
- scipy/stats/_biasedurn.cpython-313t-darwin.so +0 -0
- scipy/stats/_continued_fraction.py +387 -0
- scipy/stats/_continuous_distns.py +296 -319
- 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 +920 -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-313t-darwin.so +0 -0
- scipy/stats/_morestats.py +118 -73
- scipy/stats/_mstats_basic.py +13 -17
- scipy/stats/_mstats_extras.py +8 -8
- scipy/stats/_multivariate.py +89 -113
- scipy/stats/_new_distributions.py +97 -20
- scipy/stats/_page_trend_test.py +12 -5
- scipy/stats/_probability_distribution.py +265 -43
- scipy/stats/_qmc.py +14 -9
- scipy/stats/_qmc_cy.cpython-313t-darwin.so +0 -0
- scipy/stats/_qmvnt.py +16 -95
- scipy/stats/_qmvnt_cy.cpython-313t-darwin.so +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/rcont.cpython-313t-darwin.so +0 -0
- scipy/stats/_resampling.py +5 -30
- scipy/stats/_sampling.py +1 -1
- scipy/stats/_sobol.cpython-313t-darwin.so +0 -0
- scipy/stats/_stats.cpython-313t-darwin.so +0 -0
- scipy/stats/_stats_mstats_common.py +21 -2
- scipy/stats/_stats_py.py +551 -477
- scipy/stats/_stats_pythran.cpython-313t-darwin.so +0 -0
- scipy/stats/_unuran/unuran_wrapper.cpython-313t-darwin.so +0 -0
- scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
- scipy/stats/_variation.py +6 -8
- scipy/stats/_wilcoxon.py +13 -7
- scipy/stats/tests/common_tests.py +6 -4
- scipy/stats/tests/test_axis_nan_policy.py +62 -24
- scipy/stats/tests/test_continued_fraction.py +173 -0
- scipy/stats/tests/test_continuous.py +379 -60
- scipy/stats/tests/test_continuous_basic.py +18 -12
- scipy/stats/tests/test_discrete_basic.py +14 -8
- scipy/stats/tests/test_discrete_distns.py +16 -16
- scipy/stats/tests/test_distributions.py +117 -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 +81 -49
- 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.2.dist-info → scipy-1.16.0.dist-info}/LICENSE.txt +4 -4
- {scipy-1.15.2.dist-info → scipy-1.16.0.dist-info}/METADATA +12 -12
- {scipy-1.15.2.dist-info → scipy-1.16.0.dist-info}/RECORD +574 -581
- scipy-1.16.0.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-313t-darwin.so +0 -0
- scipy/optimize/_cobyla.cpython-313t-darwin.so +0 -0
- scipy/optimize/_cython_nnls.cpython-313t-darwin.so +0 -0
- scipy/optimize/_slsqp.cpython-313t-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-313t-darwin.so +0 -0
- scipy-1.15.2.dist-info/WHEEL +0 -4
@@ -22,7 +22,8 @@ def _get_atol_rtol(name, b_norm, atol=0., rtol=1e-5):
|
|
22
22
|
|
23
23
|
|
24
24
|
def bicg(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=None):
|
25
|
-
"""
|
25
|
+
"""
|
26
|
+
Solve ``Ax = b`` with the BIConjugate Gradient method.
|
26
27
|
|
27
28
|
Parameters
|
28
29
|
----------
|
@@ -86,13 +87,13 @@ def bicg(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=No
|
|
86
87
|
>>> np.allclose(A.dot(x), b)
|
87
88
|
True
|
88
89
|
"""
|
89
|
-
A, M, x, b
|
90
|
+
A, M, x, b = make_system(A, M, x0, b)
|
90
91
|
bnrm2 = np.linalg.norm(b)
|
91
92
|
|
92
93
|
atol, _ = _get_atol_rtol('bicg', bnrm2, atol, rtol)
|
93
94
|
|
94
95
|
if bnrm2 == 0:
|
95
|
-
return
|
96
|
+
return b, 0
|
96
97
|
|
97
98
|
n = len(b)
|
98
99
|
dotprod = np.vdot if np.iscomplexobj(x) else np.dot
|
@@ -113,7 +114,7 @@ def bicg(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=No
|
|
113
114
|
|
114
115
|
for iteration in range(maxiter):
|
115
116
|
if np.linalg.norm(r) < atol: # Are we done?
|
116
|
-
return
|
117
|
+
return x, 0
|
117
118
|
|
118
119
|
z = psolve(r)
|
119
120
|
ztilde = rpsolve(rtilde)
|
@@ -121,7 +122,7 @@ def bicg(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=No
|
|
121
122
|
rho_cur = dotprod(rtilde, z)
|
122
123
|
|
123
124
|
if np.abs(rho_cur) < rhotol: # Breakdown case
|
124
|
-
return
|
125
|
+
return x, -10
|
125
126
|
|
126
127
|
if iteration > 0:
|
127
128
|
beta = rho_cur / rho_prev
|
@@ -138,7 +139,7 @@ def bicg(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=No
|
|
138
139
|
rv = dotprod(ptilde, q)
|
139
140
|
|
140
141
|
if rv == 0:
|
141
|
-
return
|
142
|
+
return x, -11
|
142
143
|
|
143
144
|
alpha = rho_cur / rv
|
144
145
|
x += alpha*p
|
@@ -151,12 +152,13 @@ def bicg(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=No
|
|
151
152
|
|
152
153
|
else: # for loop exhausted
|
153
154
|
# Return incomplete progress
|
154
|
-
return
|
155
|
+
return x, maxiter
|
155
156
|
|
156
157
|
|
157
158
|
def bicgstab(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None,
|
158
159
|
callback=None):
|
159
|
-
"""
|
160
|
+
"""
|
161
|
+
Solve ``Ax = b`` with the BIConjugate Gradient STABilized method.
|
160
162
|
|
161
163
|
Parameters
|
162
164
|
----------
|
@@ -224,13 +226,13 @@ def bicgstab(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None,
|
|
224
226
|
>>> np.allclose(A.dot(x), b)
|
225
227
|
True
|
226
228
|
"""
|
227
|
-
A, M, x, b
|
229
|
+
A, M, x, b = make_system(A, M, x0, b)
|
228
230
|
bnrm2 = np.linalg.norm(b)
|
229
231
|
|
230
232
|
atol, _ = _get_atol_rtol('bicgstab', bnrm2, atol, rtol)
|
231
233
|
|
232
234
|
if bnrm2 == 0:
|
233
|
-
return
|
235
|
+
return b, 0
|
234
236
|
|
235
237
|
n = len(b)
|
236
238
|
|
@@ -255,15 +257,15 @@ def bicgstab(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None,
|
|
255
257
|
|
256
258
|
for iteration in range(maxiter):
|
257
259
|
if np.linalg.norm(r) < atol: # Are we done?
|
258
|
-
return
|
260
|
+
return x, 0
|
259
261
|
|
260
262
|
rho = dotprod(rtilde, r)
|
261
263
|
if np.abs(rho) < rhotol: # rho breakdown
|
262
|
-
return
|
264
|
+
return x, -10
|
263
265
|
|
264
266
|
if iteration > 0:
|
265
267
|
if np.abs(omega) < omegatol: # omega breakdown
|
266
|
-
return
|
268
|
+
return x, -11
|
267
269
|
|
268
270
|
beta = (rho / rho_prev) * (alpha / omega)
|
269
271
|
p -= omega*v
|
@@ -277,14 +279,14 @@ def bicgstab(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None,
|
|
277
279
|
v = matvec(phat)
|
278
280
|
rv = dotprod(rtilde, v)
|
279
281
|
if rv == 0:
|
280
|
-
return
|
282
|
+
return x, -11
|
281
283
|
alpha = rho / rv
|
282
284
|
r -= alpha*v
|
283
285
|
s[:] = r[:]
|
284
286
|
|
285
287
|
if np.linalg.norm(s) < atol:
|
286
288
|
x += alpha*phat
|
287
|
-
return
|
289
|
+
return x, 0
|
288
290
|
|
289
291
|
shat = psolve(s)
|
290
292
|
t = matvec(shat)
|
@@ -299,11 +301,13 @@ def bicgstab(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None,
|
|
299
301
|
|
300
302
|
else: # for loop exhausted
|
301
303
|
# Return incomplete progress
|
302
|
-
return
|
304
|
+
return x, maxiter
|
303
305
|
|
304
306
|
|
305
307
|
def cg(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=None):
|
306
|
-
"""
|
308
|
+
"""
|
309
|
+
Solve ``Ax = b`` with the Conjugate Gradient method, for a symmetric,
|
310
|
+
positive-definite `A`.
|
307
311
|
|
308
312
|
Parameters
|
309
313
|
----------
|
@@ -372,13 +376,13 @@ def cg(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=None
|
|
372
376
|
>>> np.allclose(A.dot(x), b)
|
373
377
|
True
|
374
378
|
"""
|
375
|
-
A, M, x, b
|
379
|
+
A, M, x, b = make_system(A, M, x0, b)
|
376
380
|
bnrm2 = np.linalg.norm(b)
|
377
381
|
|
378
382
|
atol, _ = _get_atol_rtol('cg', bnrm2, atol, rtol)
|
379
383
|
|
380
384
|
if bnrm2 == 0:
|
381
|
-
return
|
385
|
+
return b, 0
|
382
386
|
|
383
387
|
n = len(b)
|
384
388
|
|
@@ -396,7 +400,7 @@ def cg(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=None
|
|
396
400
|
|
397
401
|
for iteration in range(maxiter):
|
398
402
|
if np.linalg.norm(r) < atol: # Are we done?
|
399
|
-
return
|
403
|
+
return x, 0
|
400
404
|
|
401
405
|
z = psolve(r)
|
402
406
|
rho_cur = dotprod(r, z)
|
@@ -419,11 +423,12 @@ def cg(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=None
|
|
419
423
|
|
420
424
|
else: # for loop exhausted
|
421
425
|
# Return incomplete progress
|
422
|
-
return
|
426
|
+
return x, maxiter
|
423
427
|
|
424
428
|
|
425
429
|
def cgs(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=None):
|
426
|
-
"""
|
430
|
+
"""
|
431
|
+
Solve ``Ax = b`` with the Conjugate Gradient Squared method.
|
427
432
|
|
428
433
|
Parameters
|
429
434
|
----------
|
@@ -491,13 +496,13 @@ def cgs(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=Non
|
|
491
496
|
>>> np.allclose(A.dot(x), b)
|
492
497
|
True
|
493
498
|
"""
|
494
|
-
A, M, x, b
|
499
|
+
A, M, x, b = make_system(A, M, x0, b)
|
495
500
|
bnrm2 = np.linalg.norm(b)
|
496
501
|
|
497
502
|
atol, _ = _get_atol_rtol('cgs', bnrm2, atol, rtol)
|
498
503
|
|
499
504
|
if bnrm2 == 0:
|
500
|
-
return
|
505
|
+
return b, 0
|
501
506
|
|
502
507
|
n = len(b)
|
503
508
|
|
@@ -524,11 +529,11 @@ def cgs(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=Non
|
|
524
529
|
for iteration in range(maxiter):
|
525
530
|
rnorm = np.linalg.norm(r)
|
526
531
|
if rnorm < atol: # Are we done?
|
527
|
-
return
|
532
|
+
return x, 0
|
528
533
|
|
529
534
|
rho_cur = dotprod(rtilde, r)
|
530
535
|
if np.abs(rho_cur) < rhotol: # Breakdown case
|
531
|
-
return
|
536
|
+
return x, -10
|
532
537
|
|
533
538
|
if iteration > 0:
|
534
539
|
beta = rho_cur / rho_prev
|
@@ -553,7 +558,7 @@ def cgs(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=Non
|
|
553
558
|
rv = dotprod(rtilde, vhat)
|
554
559
|
|
555
560
|
if rv == 0: # Dot product breakdown
|
556
|
-
return
|
561
|
+
return x, -11
|
557
562
|
|
558
563
|
alpha = rho_cur / rv
|
559
564
|
q[:] = u[:]
|
@@ -576,13 +581,13 @@ def cgs(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None, callback=Non
|
|
576
581
|
|
577
582
|
else: # for loop exhausted
|
578
583
|
# Return incomplete progress
|
579
|
-
return
|
584
|
+
return x, maxiter
|
580
585
|
|
581
586
|
|
582
587
|
def gmres(A, b, x0=None, *, rtol=1e-5, atol=0., restart=None, maxiter=None, M=None,
|
583
588
|
callback=None, callback_type=None):
|
584
589
|
"""
|
585
|
-
|
590
|
+
Solve ``Ax = b`` with the Generalized Minimal RESidual method.
|
586
591
|
|
587
592
|
Parameters
|
588
593
|
----------
|
@@ -689,7 +694,7 @@ def gmres(A, b, x0=None, *, rtol=1e-5, atol=0., restart=None, maxiter=None, M=No
|
|
689
694
|
if callback is None:
|
690
695
|
callback_type = None
|
691
696
|
|
692
|
-
A, M, x, b
|
697
|
+
A, M, x, b = make_system(A, M, x0, b)
|
693
698
|
matvec = A.matvec
|
694
699
|
psolve = M.matvec
|
695
700
|
n = len(b)
|
@@ -698,7 +703,7 @@ def gmres(A, b, x0=None, *, rtol=1e-5, atol=0., restart=None, maxiter=None, M=No
|
|
698
703
|
atol, _ = _get_atol_rtol('gmres', bnrm2, atol, rtol)
|
699
704
|
|
700
705
|
if bnrm2 == 0:
|
701
|
-
return
|
706
|
+
return b, 0
|
702
707
|
|
703
708
|
eps = np.finfo(x.dtype.char).eps
|
704
709
|
|
@@ -737,7 +742,7 @@ def gmres(A, b, x0=None, *, rtol=1e-5, atol=0., restart=None, maxiter=None, M=No
|
|
737
742
|
if iteration == 0:
|
738
743
|
r = b - matvec(x) if x.any() else b.copy()
|
739
744
|
if np.linalg.norm(r) < atol: # Are we done?
|
740
|
-
return
|
745
|
+
return x, 0
|
741
746
|
|
742
747
|
v[0, :] = psolve(r)
|
743
748
|
tmp = np.linalg.norm(v[0, :])
|
@@ -818,7 +823,7 @@ def gmres(A, b, x0=None, *, rtol=1e-5, atol=0., restart=None, maxiter=None, M=No
|
|
818
823
|
|
819
824
|
# Legacy exit
|
820
825
|
if callback_type == 'legacy' and inner_iter == maxiter:
|
821
|
-
return
|
826
|
+
return x, 0 if rnorm <= atol else maxiter
|
822
827
|
|
823
828
|
if callback_type == 'x':
|
824
829
|
callback(x)
|
@@ -838,12 +843,13 @@ def gmres(A, b, x0=None, *, rtol=1e-5, atol=0., restart=None, maxiter=None, M=No
|
|
838
843
|
ptol = presid * min(ptol_max_factor, atol / rnorm)
|
839
844
|
|
840
845
|
info = 0 if (rnorm <= atol) else maxiter
|
841
|
-
return
|
846
|
+
return x, info
|
842
847
|
|
843
848
|
|
844
849
|
def qmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M1=None, M2=None,
|
845
850
|
callback=None):
|
846
|
-
"""
|
851
|
+
"""
|
852
|
+
Solve ``Ax = b`` with the Quasi-Minimal Residual method.
|
847
853
|
|
848
854
|
Parameters
|
849
855
|
----------
|
@@ -901,13 +907,13 @@ def qmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M1=None, M2=None,
|
|
901
907
|
True
|
902
908
|
"""
|
903
909
|
A_ = A
|
904
|
-
A, M, x, b
|
910
|
+
A, M, x, b = make_system(A, None, x0, b)
|
905
911
|
bnrm2 = np.linalg.norm(b)
|
906
912
|
|
907
913
|
atol, _ = _get_atol_rtol('qmr', bnrm2, atol, rtol)
|
908
914
|
|
909
915
|
if bnrm2 == 0:
|
910
|
-
return
|
916
|
+
return b, 0
|
911
917
|
|
912
918
|
if M1 is None and M2 is None:
|
913
919
|
if hasattr(A_, 'psolve'):
|
@@ -964,11 +970,11 @@ def qmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M1=None, M2=None,
|
|
964
970
|
|
965
971
|
for iteration in range(maxiter):
|
966
972
|
if np.linalg.norm(r) < atol: # Are we done?
|
967
|
-
return
|
973
|
+
return x, 0
|
968
974
|
if np.abs(rho) < rhotol: # rho breakdown
|
969
|
-
return
|
975
|
+
return x, -10
|
970
976
|
if np.abs(xi) < xitol: # xi breakdown
|
971
|
-
return
|
977
|
+
return x, -15
|
972
978
|
|
973
979
|
v[:] = vtilde[:]
|
974
980
|
v *= (1 / rho)
|
@@ -979,7 +985,7 @@ def qmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M1=None, M2=None,
|
|
979
985
|
delta = dotprod(z, y)
|
980
986
|
|
981
987
|
if np.abs(delta) < deltatol: # delta breakdown
|
982
|
-
return
|
988
|
+
return x, -13
|
983
989
|
|
984
990
|
ytilde = M2.matvec(y)
|
985
991
|
ztilde = M1.rmatvec(z)
|
@@ -996,11 +1002,11 @@ def qmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M1=None, M2=None,
|
|
996
1002
|
ptilde = A.matvec(p)
|
997
1003
|
epsilon = dotprod(q, ptilde)
|
998
1004
|
if np.abs(epsilon) < epsilontol: # epsilon breakdown
|
999
|
-
return
|
1005
|
+
return x, -14
|
1000
1006
|
|
1001
1007
|
beta = epsilon / delta
|
1002
1008
|
if np.abs(beta) < betatol: # beta breakdown
|
1003
|
-
return
|
1009
|
+
return x, -11
|
1004
1010
|
|
1005
1011
|
vtilde[:] = ptilde[:]
|
1006
1012
|
vtilde -= beta*v
|
@@ -1019,7 +1025,7 @@ def qmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M1=None, M2=None,
|
|
1019
1025
|
gamma = 1 / np.sqrt(1 + theta**2)
|
1020
1026
|
|
1021
1027
|
if np.abs(gamma) < gammatol: # gamma breakdown
|
1022
|
-
return
|
1028
|
+
return x, -12
|
1023
1029
|
|
1024
1030
|
eta *= -(rho_prev / beta) * (gamma / gamma_prev)**2
|
1025
1031
|
|
@@ -1042,4 +1048,4 @@ def qmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M1=None, M2=None,
|
|
1042
1048
|
|
1043
1049
|
else: # for loop exhausted
|
1044
1050
|
# Return incomplete progress
|
1045
|
-
return
|
1051
|
+
return x, maxiter
|
@@ -16,7 +16,7 @@ def lgmres(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=1000, M=None, callback=
|
|
16
16
|
inner_m=30, outer_k=3, outer_v=None, store_outer_Av=True,
|
17
17
|
prepend_outer_v=False):
|
18
18
|
"""
|
19
|
-
Solve
|
19
|
+
Solve ``Ax = b`` with the LGMRES algorithm.
|
20
20
|
|
21
21
|
The LGMRES algorithm [1]_ [2]_ is designed to avoid some problems
|
22
22
|
in the convergence in restarted GMRES, and often converges in fewer
|
@@ -119,7 +119,7 @@ def lgmres(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=1000, M=None, callback=
|
|
119
119
|
>>> np.allclose(A.dot(x), b)
|
120
120
|
True
|
121
121
|
"""
|
122
|
-
A,M,x,b
|
122
|
+
A,M,x,b = make_system(A,M,x0,b)
|
123
123
|
|
124
124
|
if not np.isfinite(b).all():
|
125
125
|
raise ValueError("RHS must contain only finite numbers")
|
@@ -140,7 +140,7 @@ def lgmres(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=1000, M=None, callback=
|
|
140
140
|
|
141
141
|
if b_norm == 0:
|
142
142
|
x = b
|
143
|
-
return (
|
143
|
+
return (x, 0)
|
144
144
|
|
145
145
|
ptol_max_factor = 1.0
|
146
146
|
|
@@ -192,7 +192,7 @@ def lgmres(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=1000, M=None, callback=
|
|
192
192
|
except LinAlgError:
|
193
193
|
# Floating point over/underflow, non-finite result from
|
194
194
|
# matmul etc. -- report failure.
|
195
|
-
return
|
195
|
+
return x, k_outer + 1
|
196
196
|
|
197
197
|
# Inner loop tolerance control
|
198
198
|
if pres > ptol:
|
@@ -225,6 +225,6 @@ def lgmres(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=1000, M=None, callback=
|
|
225
225
|
x += dx
|
226
226
|
else:
|
227
227
|
# didn't converge ...
|
228
|
-
return
|
228
|
+
return x, maxiter
|
229
229
|
|
230
|
-
return
|
230
|
+
return x, 0
|
@@ -10,7 +10,7 @@ __all__ = ['minres']
|
|
10
10
|
def minres(A, b, x0=None, *, rtol=1e-5, shift=0.0, maxiter=None,
|
11
11
|
M=None, callback=None, show=False, check=False):
|
12
12
|
"""
|
13
|
-
|
13
|
+
Solve ``Ax = b`` with the MINimum RESidual method, for a symmetric `A`.
|
14
14
|
|
15
15
|
MINRES minimizes norm(Ax - b) for a real symmetric matrix A. Unlike
|
16
16
|
the Conjugate Gradient method, A can be indefinite or singular.
|
@@ -89,7 +89,7 @@ def minres(A, b, x0=None, *, rtol=1e-5, shift=0.0, maxiter=None,
|
|
89
89
|
https://web.stanford.edu/group/SOL/software/minres/minres-matlab.zip
|
90
90
|
|
91
91
|
"""
|
92
|
-
A, M, x, b
|
92
|
+
A, M, x, b = make_system(A, M, x0, b)
|
93
93
|
|
94
94
|
matvec = A.matvec
|
95
95
|
psolve = M.matvec
|
@@ -146,12 +146,12 @@ def minres(A, b, x0=None, *, rtol=1e-5, shift=0.0, maxiter=None,
|
|
146
146
|
if beta1 < 0:
|
147
147
|
raise ValueError('indefinite preconditioner')
|
148
148
|
elif beta1 == 0:
|
149
|
-
return (
|
149
|
+
return (x, 0)
|
150
150
|
|
151
151
|
bnorm = norm(b)
|
152
152
|
if bnorm == 0:
|
153
153
|
x = b
|
154
|
-
return (
|
154
|
+
return (x, 0)
|
155
155
|
|
156
156
|
beta1 = sqrt(beta1)
|
157
157
|
|
@@ -369,4 +369,4 @@ def minres(A, b, x0=None, *, rtol=1e-5, shift=0.0, maxiter=None,
|
|
369
369
|
else:
|
370
370
|
info = 0
|
371
371
|
|
372
|
-
return (
|
372
|
+
return (x,info)
|
@@ -9,7 +9,7 @@ __all__ = ['tfqmr']
|
|
9
9
|
def tfqmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None,
|
10
10
|
callback=None, show=False):
|
11
11
|
"""
|
12
|
-
|
12
|
+
Solve ``Ax = b`` with the Transpose-Free Quasi-Minimal Residual method.
|
13
13
|
|
14
14
|
Parameters
|
15
15
|
----------
|
@@ -97,12 +97,12 @@ def tfqmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None,
|
|
97
97
|
if np.issubdtype(b.dtype, np.int64):
|
98
98
|
b = b.astype(dtype)
|
99
99
|
|
100
|
-
A, M, x, b
|
100
|
+
A, M, x, b = make_system(A, M, x0, b)
|
101
101
|
|
102
102
|
# Check if the R.H.S is a zero vector
|
103
103
|
if np.linalg.norm(b) == 0.:
|
104
104
|
x = b.copy()
|
105
|
-
return (
|
105
|
+
return (x, 0)
|
106
106
|
|
107
107
|
ndofs = A.shape[0]
|
108
108
|
if maxiter is None:
|
@@ -125,7 +125,7 @@ def tfqmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None,
|
|
125
125
|
r0norm = np.sqrt(rho)
|
126
126
|
tau = r0norm
|
127
127
|
if r0norm == 0:
|
128
|
-
return (
|
128
|
+
return (x, 0)
|
129
129
|
|
130
130
|
# we call this to get the right atol and raise errors as necessary
|
131
131
|
atol, _ = _get_atol_rtol('tfqmr', r0norm, atol, rtol)
|
@@ -136,7 +136,7 @@ def tfqmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None,
|
|
136
136
|
vtrstar = np.inner(rstar.conjugate(), v)
|
137
137
|
# Check breakdown
|
138
138
|
if vtrstar == 0.:
|
139
|
-
return (
|
139
|
+
return (x, -1)
|
140
140
|
alpha = rho / vtrstar
|
141
141
|
uNext = u - alpha * v # [1]-(5.6)
|
142
142
|
w -= alpha * uhat # [1]-(5.8)
|
@@ -158,7 +158,7 @@ def tfqmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None,
|
|
158
158
|
if (show):
|
159
159
|
print("TFQMR: Linear solve converged due to reach TOL "
|
160
160
|
f"iterations {iter+1}")
|
161
|
-
return (
|
161
|
+
return (x, 0)
|
162
162
|
|
163
163
|
if (not even):
|
164
164
|
# [1]-(5.7)
|
@@ -176,4 +176,4 @@ def tfqmr(A, b, x0=None, *, rtol=1e-5, atol=0., maxiter=None, M=None,
|
|
176
176
|
if (show):
|
177
177
|
print("TFQMR: Linear solve not converged due to reach MAXIT "
|
178
178
|
f"iterations {iter+1}")
|
179
|
-
return (
|
179
|
+
return (x, maxiter)
|
@@ -47,7 +47,7 @@ def make_system(A, M, x0, b):
|
|
47
47
|
|
48
48
|
Returns
|
49
49
|
-------
|
50
|
-
(A, M, x, b
|
50
|
+
(A, M, x, b)
|
51
51
|
A : LinearOperator
|
52
52
|
matrix of the linear system
|
53
53
|
M : LinearOperator
|
@@ -56,9 +56,6 @@ def make_system(A, M, x0, b):
|
|
56
56
|
initial guess
|
57
57
|
b : rank 1 ndarray
|
58
58
|
right hand side
|
59
|
-
postprocess : function
|
60
|
-
converts the solution vector to the appropriate
|
61
|
-
type and dimensions (e.g. (N,1) matrix)
|
62
59
|
|
63
60
|
"""
|
64
61
|
A_ = A
|
@@ -78,9 +75,6 @@ def make_system(A, M, x0, b):
|
|
78
75
|
if b.dtype.char not in 'fdFD':
|
79
76
|
b = b.astype('d') # upcast non-FP types to double
|
80
77
|
|
81
|
-
def postprocess(x):
|
82
|
-
return x
|
83
|
-
|
84
78
|
if hasattr(A,'dtype'):
|
85
79
|
xtype = A.dtype.char
|
86
80
|
else:
|
@@ -124,4 +118,4 @@ def make_system(A, M, x0, b):
|
|
124
118
|
f'x0 {x.shape} are incompatible')
|
125
119
|
x = x.ravel()
|
126
120
|
|
127
|
-
return A, M, x, b
|
121
|
+
return A, M, x, b
|
scipy/sparse/linalg/_matfuncs.py
CHANGED
@@ -596,7 +596,7 @@ def _expm(A, use_exact_onenorm):
|
|
596
596
|
# algorithms.
|
597
597
|
|
598
598
|
# Avoid indiscriminate asarray() to allow sparse or other strange arrays.
|
599
|
-
if isinstance(A,
|
599
|
+
if isinstance(A, list | tuple | np.matrix):
|
600
600
|
A = np.asarray(A)
|
601
601
|
if len(A.shape) != 2 or A.shape[0] != A.shape[1]:
|
602
602
|
raise ValueError('expected a square matrix')
|
scipy/sparse/linalg/_norm.py
CHANGED
@@ -107,7 +107,7 @@ def norm(x, ord=None, axis=None):
|
|
107
107
|
The matrix 2-norm or the spectral norm is the largest singular
|
108
108
|
value, computed approximately and with limitations.
|
109
109
|
|
110
|
-
>>> b = diags_array([-1, 1], [0, 1], shape=(9, 10))
|
110
|
+
>>> b = diags_array([-1, 1], offsets=[0, 1], shape=(9, 10))
|
111
111
|
>>> norm(b, 2)
|
112
112
|
1.9753...
|
113
113
|
"""
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|