scipy 1.15.3__cp312-cp312-musllinux_1_2_aarch64.whl → 1.16.0rc2__cp312-cp312-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-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/_lib/_docscrape.py +1 -1
- scipy/_lib/_elementwise_iterative_method.py +15 -26
- scipy/_lib/_fpumode.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/_lib/_sparse.py +41 -0
- scipy/_lib/_test_ccallback.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/_lib/_test_deprecation_call.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/_lib/_test_deprecation_def.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/_lib/_testutils.py +6 -2
- scipy/_lib/_uarray/_uarray.cpython-312-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-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/cluster/_optimal_leaf_ordering.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/cluster/_vq.cpython-312-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-312-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-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/integrate/_lsoda.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/integrate/_ode.py +9 -2
- scipy/integrate/_odepack.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/integrate/_quad_vec.py +21 -29
- scipy/integrate/_quadpack.cpython-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/integrate/_test_odeint_banded.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/integrate/_vode.cpython-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/interpolate/_dierckx.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/interpolate/_fitpack.cpython-312-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-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/interpolate/_rbf.py +2 -2
- scipy/interpolate/_rbfinterp.py +1 -1
- scipy/interpolate/_rbfinterp_pythran.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/interpolate/_rgi.py +31 -26
- scipy/interpolate/_rgi_cython.cpython-312-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-312-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-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/io/matlab/_mio_utils.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/io/matlab/_miobase.py +4 -1
- scipy/io/matlab/_streams.cpython-312-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-312-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-312-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-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/linalg/_expm_frechet.py +4 -0
- scipy/linalg/_fblas.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/linalg/_flapack.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/linalg/_linalg_pythran.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/linalg/_matfuncs.py +187 -4
- scipy/linalg/_matfuncs_expm.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +1 -99
- scipy/linalg/_matfuncs_sqrtm_triu.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/linalg/_procrustes.py +2 -0
- scipy/linalg/_sketches.py +17 -6
- scipy/linalg/_solve_toeplitz.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/linalg/_solvers.py +7 -2
- scipy/linalg/_special_matrices.py +26 -36
- scipy/linalg/cython_blas.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/linalg/cython_lapack.cpython-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/ndimage/_cytest.cpython-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/ndimage/_ni_docstrings.py +5 -1
- scipy/ndimage/_ni_label.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/ndimage/_ni_support.py +1 -5
- scipy/ndimage/_rank_filter_1d.cpython-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/optimize/_basinhopping.py +13 -7
- scipy/optimize/_bglu_dense.cpython-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/optimize/_dual_annealing.py +1 -1
- scipy/optimize/_elementwise.py +1 -4
- scipy/optimize/_group_columns.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/optimize/_highspy/_core.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/optimize/_highspy/_highs_options.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/optimize/_lbfgsb.cpython-312-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-312-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-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/optimize/_minpack_py.py +21 -14
- scipy/optimize/_moduleTNC.cpython-312-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-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/optimize/_spectral.py +1 -1
- scipy/optimize/_tnc.py +8 -1
- scipy/optimize/_trlib/_trlib.cpython-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/optimize/_zeros_py.py +97 -17
- scipy/optimize/cython_optimize/_zeros.cpython-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/signal/_peak_finding_utils.cpython-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/signal/_sosfilt.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/signal/_spectral_py.py +230 -50
- scipy/signal/_spline.cpython-312-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-312-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-312-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-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_matching.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_reordering.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_shortest_path.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_tools.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_traversal.cpython-312-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-312-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-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/sparse/linalg/_propack/_spropack.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cpython-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/spatial/_distance_pybind.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/spatial/_distance_wrap.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/spatial/_hausdorff.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/spatial/_qhull.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/spatial/_voronoi.cpython-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/spatial/transform/_rotation.cpython-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/special/_ellip_harm_2.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/special/_gufuncs.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/special/_logsumexp.py +67 -58
- scipy/special/_orthogonal.pyi +1 -1
- scipy/special/_specfun.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/special/_special_ufuncs.cpython-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/special/_testutils.py +4 -4
- scipy/special/_ufuncs.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/special/_ufuncs.pyi +1 -0
- scipy/special/_ufuncs.pyx +215 -1400
- scipy/special/_ufuncs_cxx.cpython-312-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-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/stats/_axis_nan_policy.py +5 -12
- scipy/stats/_biasedurn.cpython-312-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-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/stats/_qmvnt.py +16 -95
- scipy/stats/_qmvnt_cy.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/rcont.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/stats/_resampling.py +4 -29
- scipy/stats/_sampling.py +1 -1
- scipy/stats/_sobol.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/stats/_stats.cpython-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/stats/_unuran/unuran_wrapper.cpython-312-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-312-aarch64-linux-musl.so +0 -0
- scipy/optimize/_cobyla.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/optimize/_cython_nnls.cpython-312-aarch64-linux-musl.so +0 -0
- scipy/optimize/_slsqp.cpython-312-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-312-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
@@ -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
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import numpy as np
|
2
2
|
from scipy.sparse.linalg import LinearOperator
|
3
|
-
from scipy.sparse import kron,
|
3
|
+
from scipy.sparse import kron, eye_array, dia_array
|
4
4
|
|
5
5
|
__all__ = ['LaplacianNd']
|
6
6
|
# Sakurai and Mikota classes are intended for tests and benchmarks
|
@@ -71,7 +71,7 @@ of_the_second_derivative
|
|
71
71
|
--------
|
72
72
|
>>> import numpy as np
|
73
73
|
>>> from scipy.sparse.linalg import LaplacianNd
|
74
|
-
>>> from scipy.sparse import
|
74
|
+
>>> from scipy.sparse import diags_array, csgraph
|
75
75
|
>>> from scipy.linalg import eigvalsh
|
76
76
|
|
77
77
|
The one-dimensional Laplacian demonstrated below for pure Neumann boundary
|
@@ -81,7 +81,7 @@ of_the_second_derivative
|
|
81
81
|
famous tri-diagonal matrix:
|
82
82
|
|
83
83
|
>>> n = 6
|
84
|
-
>>> G =
|
84
|
+
>>> G = diags_array(np.ones(n - 1), offsets=1, format='csr')
|
85
85
|
>>> Lf = csgraph.laplacian(G, symmetrized=True, form='function')
|
86
86
|
>>> grid_shape = (n, )
|
87
87
|
>>> lap = LaplacianNd(grid_shape, boundary_conditions='neumann')
|
@@ -107,7 +107,7 @@ of_the_second_derivative
|
|
107
107
|
True
|
108
108
|
|
109
109
|
Any number of extreme eigenvalues and/or eigenvectors can be computed.
|
110
|
-
|
110
|
+
|
111
111
|
>>> lap = LaplacianNd(grid_shape, boundary_conditions='periodic')
|
112
112
|
>>> lap.eigenvalues()
|
113
113
|
array([-4., -3., -3., -1., -1., 0.])
|
@@ -292,13 +292,13 @@ of_the_second_derivative
|
|
292
292
|
|
293
293
|
def eigenvalues(self, m=None):
|
294
294
|
"""Return the requested number of eigenvalues.
|
295
|
-
|
295
|
+
|
296
296
|
Parameters
|
297
297
|
----------
|
298
298
|
m : int, optional
|
299
299
|
The positive number of smallest eigenvalues to return.
|
300
300
|
If not provided, then all eigenvalues will be returned.
|
301
|
-
|
301
|
+
|
302
302
|
Returns
|
303
303
|
-------
|
304
304
|
eigenvalues : float array
|
@@ -309,7 +309,7 @@ of_the_second_derivative
|
|
309
309
|
|
310
310
|
def _ev1d(self, j, n):
|
311
311
|
"""Return 1 eigenvector in 1d with index `j`
|
312
|
-
and number of grid points `n` where ``j < n``.
|
312
|
+
and number of grid points `n` where ``j < n``.
|
313
313
|
"""
|
314
314
|
if self.boundary_conditions == 'dirichlet':
|
315
315
|
i = np.pi * (np.arange(n) + 1) / (n + 1)
|
@@ -326,13 +326,13 @@ of_the_second_derivative
|
|
326
326
|
i = 2. * np.pi * (np.arange(n) + 0.5) / n
|
327
327
|
ev = np.sqrt(2. / n) * np.cos(i * np.floor((j + 1) / 2))
|
328
328
|
# make small values exact zeros correcting round-off errors
|
329
|
-
# due to symmetry of eigenvectors the exact 0. is correct
|
329
|
+
# due to symmetry of eigenvectors the exact 0. is correct
|
330
330
|
ev[np.abs(ev) < np.finfo(np.float64).eps] = 0.
|
331
331
|
return ev
|
332
332
|
|
333
333
|
def _one_eve(self, k):
|
334
334
|
"""Return 1 eigenvector in Nd with multi-index `j`
|
335
|
-
as a tensor product of the corresponding 1d eigenvectors.
|
335
|
+
as a tensor product of the corresponding 1d eigenvectors.
|
336
336
|
"""
|
337
337
|
phi = [self._ev1d(j, n) for j, n in zip(k, self.grid_shape)]
|
338
338
|
result = phi[0]
|
@@ -342,18 +342,18 @@ of_the_second_derivative
|
|
342
342
|
|
343
343
|
def eigenvectors(self, m=None):
|
344
344
|
"""Return the requested number of eigenvectors for ordered eigenvalues.
|
345
|
-
|
345
|
+
|
346
346
|
Parameters
|
347
347
|
----------
|
348
348
|
m : int, optional
|
349
349
|
The positive number of eigenvectors to return. If not provided,
|
350
350
|
then all eigenvectors will be returned.
|
351
|
-
|
351
|
+
|
352
352
|
Returns
|
353
353
|
-------
|
354
354
|
eigenvectors : float array
|
355
355
|
An array with columns made of the requested `m` or all eigenvectors.
|
356
|
-
The columns are ordered according to the `m` ordered eigenvalues.
|
356
|
+
The columns are ordered according to the `m` ordered eigenvalues.
|
357
357
|
"""
|
358
358
|
_, ind = self._eigenvalue_ordering(m)
|
359
359
|
if m is None:
|
@@ -466,9 +466,9 @@ of_the_second_derivative
|
|
466
466
|
L_i += t
|
467
467
|
|
468
468
|
for j in range(i):
|
469
|
-
L_i = kron(
|
469
|
+
L_i = kron(eye_array(self.grid_shape[j], dtype=np.int8), L_i)
|
470
470
|
for j in range(i + 1, N):
|
471
|
-
L_i = kron(L_i,
|
471
|
+
L_i = kron(L_i, eye_array(self.grid_shape[j], dtype=np.int8))
|
472
472
|
L += L_i
|
473
473
|
return L.astype(self.dtype)
|
474
474
|
|
@@ -556,7 +556,7 @@ class Sakurai(LinearOperator):
|
|
556
556
|
`A` and `B` where `A` is the identity so we turn it into an eigenproblem
|
557
557
|
just for the matrix `B` that this function outputs in various formats
|
558
558
|
together with its eigenvalues.
|
559
|
-
|
559
|
+
|
560
560
|
.. versionadded:: 1.12.0
|
561
561
|
|
562
562
|
References
|
@@ -602,7 +602,7 @@ class Sakurai(LinearOperator):
|
|
602
602
|
The banded form can be used in scipy functions for banded matrices, e.g.,
|
603
603
|
|
604
604
|
>>> e = eig_banded(sak.tobanded(), eigvals_only=True)
|
605
|
-
>>> np.allclose(sak.eigenvalues, e, atol= n * n * n * np.finfo(float).eps)
|
605
|
+
>>> np.allclose(sak.eigenvalues(), e, atol= n * n * n * np.finfo(float).eps)
|
606
606
|
True
|
607
607
|
|
608
608
|
"""
|
@@ -614,13 +614,13 @@ class Sakurai(LinearOperator):
|
|
614
614
|
|
615
615
|
def eigenvalues(self, m=None):
|
616
616
|
"""Return the requested number of eigenvalues.
|
617
|
-
|
617
|
+
|
618
618
|
Parameters
|
619
619
|
----------
|
620
620
|
m : int, optional
|
621
621
|
The positive number of smallest eigenvalues to return.
|
622
622
|
If not provided, then all eigenvalues will be returned.
|
623
|
-
|
623
|
+
|
624
624
|
Returns
|
625
625
|
-------
|
626
626
|
eigenvalues : `np.float64` array
|
@@ -642,18 +642,18 @@ class Sakurai(LinearOperator):
|
|
642
642
|
|
643
643
|
def tosparse(self):
|
644
644
|
"""
|
645
|
-
Construct the Sakurai matrix
|
645
|
+
Construct the Sakurai matrix in a sparse format.
|
646
646
|
"""
|
647
|
-
from scipy.sparse import
|
647
|
+
from scipy.sparse import diags_array
|
648
648
|
d = self.tobanded()
|
649
649
|
# the banded format has the main diagonal at the bottom
|
650
|
-
# `
|
651
|
-
return
|
652
|
-
|
650
|
+
# `diags_array` inherits dtype from banded
|
651
|
+
return diags_array([d[0], d[1], d[2], d[1], d[0]], offsets=[-2, -1, 0, 1, 2],
|
652
|
+
shape=(self.n, self.n), dtype=d.dtype)
|
653
653
|
|
654
654
|
def toarray(self):
|
655
655
|
return self.tosparse().toarray()
|
656
|
-
|
656
|
+
|
657
657
|
def _matvec(self, x):
|
658
658
|
"""
|
659
659
|
Construct matrix-free callable banded-matrix-vector multiplication by
|
@@ -675,7 +675,7 @@ class Sakurai(LinearOperator):
|
|
675
675
|
Construct matrix-free callable matrix-matrix multiplication by
|
676
676
|
the Sakurai matrix without constructing or storing the matrix itself
|
677
677
|
by reusing the ``_matvec(x)`` that supports both 1D and 2D arrays ``x``.
|
678
|
-
"""
|
678
|
+
"""
|
679
679
|
return self._matvec(x)
|
680
680
|
|
681
681
|
def _adjoint(self):
|
@@ -723,8 +723,9 @@ class MikotaM(LinearOperator):
|
|
723
723
|
return self._diag()
|
724
724
|
|
725
725
|
def tosparse(self):
|
726
|
-
from scipy.sparse import
|
727
|
-
return
|
726
|
+
from scipy.sparse import diags_array
|
727
|
+
return diags_array([self._diag()], offsets=[0],
|
728
|
+
shape=self.shape, dtype=self.dtype)
|
728
729
|
|
729
730
|
def toarray(self):
|
730
731
|
return np.diag(self._diag()).astype(self.dtype)
|
@@ -743,7 +744,7 @@ class MikotaM(LinearOperator):
|
|
743
744
|
Construct matrix-free callable matrix-matrix multiplication by
|
744
745
|
the Mikota mass matrix without constructing or storing the matrix itself
|
745
746
|
by reusing the ``_matvec(x)`` that supports both 1D and 2D arrays ``x``.
|
746
|
-
"""
|
747
|
+
"""
|
747
748
|
return self._matvec(x)
|
748
749
|
|
749
750
|
def _adjoint(self):
|
@@ -758,7 +759,7 @@ class MikotaK(LinearOperator):
|
|
758
759
|
Construct a stiffness matrix in various formats of Mikota pair.
|
759
760
|
|
760
761
|
The stiffness matrix `K` is square real tri-diagonal symmetric
|
761
|
-
positive definite with integer entries.
|
762
|
+
positive definite with integer entries.
|
762
763
|
|
763
764
|
Parameters
|
764
765
|
----------
|
@@ -792,9 +793,9 @@ class MikotaK(LinearOperator):
|
|
792
793
|
return np.array([np.pad(self._diag1, (1, 0), 'constant'), self._diag0])
|
793
794
|
|
794
795
|
def tosparse(self):
|
795
|
-
from scipy.sparse import
|
796
|
-
return
|
797
|
-
|
796
|
+
from scipy.sparse import diags_array
|
797
|
+
return diags_array([self._diag1, self._diag0, self._diag1], offsets=[-1, 0, 1],
|
798
|
+
shape=self.shape, dtype=self.dtype)
|
798
799
|
|
799
800
|
def toarray(self):
|
800
801
|
return self.tosparse().toarray()
|
@@ -822,7 +823,7 @@ class MikotaK(LinearOperator):
|
|
822
823
|
Construct matrix-free callable matrix-matrix multiplication by
|
823
824
|
the Stiffness mass matrix without constructing or storing the matrix itself
|
824
825
|
by reusing the ``_matvec(x)`` that supports both 1D and 2D arrays ``x``.
|
825
|
-
"""
|
826
|
+
"""
|
826
827
|
return self._matvec(x)
|
827
828
|
|
828
829
|
def _adjoint(self):
|
@@ -870,7 +871,7 @@ class MikotaPair:
|
|
870
871
|
A `LinearOperator` custom object for the stiffness matrix.
|
871
872
|
MikotaM()
|
872
873
|
A `LinearOperator` custom object for the mass matrix.
|
873
|
-
|
874
|
+
|
874
875
|
.. versionadded:: 1.12.0
|
875
876
|
|
876
877
|
References
|
@@ -907,7 +908,7 @@ class MikotaPair:
|
|
907
908
|
0.16666667])
|
908
909
|
>>> mik_k.tosparse()
|
909
910
|
<DIAgonal sparse array of dtype 'float64'
|
910
|
-
with
|
911
|
+
with 16 stored elements (3 diagonals) and shape (6, 6)>
|
911
912
|
>>> mik_m.tosparse()
|
912
913
|
<DIAgonal sparse array of dtype 'float64'
|
913
914
|
with 6 stored elements (1 diagonals) and shape (6, 6)>
|
@@ -916,7 +917,7 @@ class MikotaPair:
|
|
916
917
|
>>> np.array_equal(mik_m(np.eye(n)), mik_m.toarray())
|
917
918
|
True
|
918
919
|
>>> mik.eigenvalues()
|
919
|
-
array([ 1, 4, 9, 16, 25, 36])
|
920
|
+
array([ 1, 4, 9, 16, 25, 36])
|
920
921
|
>>> mik.eigenvalues(2)
|
921
922
|
array([ 1, 4])
|
922
923
|
|
@@ -930,13 +931,13 @@ class MikotaPair:
|
|
930
931
|
|
931
932
|
def eigenvalues(self, m=None):
|
932
933
|
"""Return the requested number of eigenvalues.
|
933
|
-
|
934
|
+
|
934
935
|
Parameters
|
935
936
|
----------
|
936
937
|
m : int, optional
|
937
938
|
The positive number of smallest eigenvalues to return.
|
938
939
|
If not provided, then all eigenvalues will be returned.
|
939
|
-
|
940
|
+
|
940
941
|
Returns
|
941
942
|
-------
|
942
943
|
eigenvalues : `np.uint64` array
|
@@ -256,3 +256,17 @@ def test_ne(same_matrix):
|
|
256
256
|
# temporary splint until pydata sparse support sparray equality
|
257
257
|
sp_sparse = sp.coo_matrix(sp_sparse).asformat(sp_sparse.format)
|
258
258
|
assert not (sp_sparse != pd_sparse).any()
|
259
|
+
|
260
|
+
|
261
|
+
def test_ge(same_matrix):
|
262
|
+
sp_sparse, pd_sparse = same_matrix
|
263
|
+
# temporary splint until pydata sparse support sparray equality
|
264
|
+
sp_sparse = sp.coo_matrix(sp_sparse).asformat(sp_sparse.format)
|
265
|
+
assert (sp_sparse >= pd_sparse).all()
|
266
|
+
|
267
|
+
|
268
|
+
def test_gt(same_matrix):
|
269
|
+
sp_sparse, pd_sparse = same_matrix
|
270
|
+
# temporary splint until pydata sparse support sparray equality
|
271
|
+
sp_sparse = sp.coo_matrix(sp_sparse).asformat(sp_sparse.format)
|
272
|
+
assert not (sp_sparse > pd_sparse).any()
|
@@ -194,7 +194,10 @@ class TestArithmetic1D:
|
|
194
194
|
with pytest.raises(ValueError, match=matchme):
|
195
195
|
i.multiply(j)
|
196
196
|
continue
|
197
|
-
|
197
|
+
try:
|
198
|
+
sp_mult = i.multiply(j)
|
199
|
+
except ValueError:
|
200
|
+
continue
|
198
201
|
assert_allclose(toarray(sp_mult), dense_mult)
|
199
202
|
|
200
203
|
def test_elementwise_divide(self, spcreator, dat1d):
|
@@ -320,7 +323,7 @@ class TestArithmetic1D:
|
|
320
323
|
assert_equal(asp.dot(asp), np.dot(a, a))
|
321
324
|
|
322
325
|
# bad matrix products
|
323
|
-
with pytest.raises(ValueError, match='dimension mismatch'):
|
326
|
+
with pytest.raises(ValueError, match='dimension mismatch|shapes.*not aligned'):
|
324
327
|
asp.dot(f)
|
325
328
|
|
326
329
|
# elemente-wise multiplication
|