scipy 1.15.3__cp313-cp313t-macosx_14_0_arm64.whl → 1.16.0rc2__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/__config__.py +3 -3
- scipy/__init__.py +3 -6
- scipy/_cyutility.cpython-313t-darwin.so +0 -0
- scipy/_lib/_array_api.py +486 -161
- scipy/_lib/_array_api_compat_vendor.py +9 -0
- scipy/_lib/_bunch.py +4 -0
- scipy/_lib/_ccallback_c.cpython-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_deprecation_call.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 +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-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 +263 -157
- scipy/constants/_constants.py +4 -1
- scipy/constants/tests/test_codata.py +2 -2
- scipy/constants/tests/test_constants.py +11 -18
- scipy/datasets/_download_all.py +15 -1
- scipy/datasets/_fetchers.py +7 -1
- scipy/datasets/_utils.py +1 -1
- scipy/differentiate/_differentiate.py +25 -25
- scipy/differentiate/tests/test_differentiate.py +24 -25
- scipy/fft/_basic.py +20 -0
- scipy/fft/_helper.py +3 -34
- scipy/fft/_pocketfft/helper.py +29 -1
- scipy/fft/_pocketfft/tests/test_basic.py +2 -4
- scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
- scipy/fft/_realtransforms.py +13 -0
- scipy/fft/tests/test_basic.py +27 -25
- scipy/fft/tests/test_fftlog.py +16 -7
- scipy/fft/tests/test_helper.py +18 -34
- scipy/fft/tests/test_real_transforms.py +8 -10
- scipy/fftpack/convolve.cpython-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/_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 +48 -47
- 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 +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-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/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_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/_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 +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-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 +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-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/_lbfgsb.cpython-313t-darwin.so +0 -0
- scipy/optimize/_lbfgsb_py.py +57 -16
- scipy/optimize/_linprog_doc.py +2 -2
- scipy/optimize/_linprog_highs.py +2 -2
- scipy/optimize/_linprog_ip.py +25 -10
- scipy/optimize/_linprog_util.py +14 -16
- scipy/optimize/_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 +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-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 +519 -70
- scipy/signal/_signal_api.py +30 -0
- scipy/signal/_signaltools.py +719 -399
- 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 +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-313t-darwin.so +0 -0
- scipy/sparse/_csr.py +2 -2
- scipy/sparse/_data.py +48 -48
- scipy/sparse/_dia.py +105 -18
- scipy/sparse/_dok.py +0 -23
- scipy/sparse/_index.py +4 -4
- scipy/sparse/_matrix.py +23 -0
- scipy/sparse/_sparsetools.cpython-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 +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-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_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-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 +7 -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 +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-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 +67 -58
- 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 +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-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 +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-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 +4 -29
- 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 +550 -476
- 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 +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 +559 -566
- scipy-1.16.0rc2.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.3.dist-info/WHEEL +0 -4
scipy/linalg/_decomp.py
CHANGED
@@ -21,7 +21,7 @@ from numpy import (array, isfinite, inexact, nonzero, iscomplexobj,
|
|
21
21
|
flatnonzero, conj, asarray, argsort, empty,
|
22
22
|
iscomplex, zeros, einsum, eye, inf)
|
23
23
|
# Local imports
|
24
|
-
from scipy._lib._util import _asarray_validated
|
24
|
+
from scipy._lib._util import _asarray_validated, _apply_over_batch
|
25
25
|
from ._misc import LinAlgError, _datacopied, norm
|
26
26
|
from .lapack import get_lapack_funcs, _compute_lwork
|
27
27
|
|
@@ -111,6 +111,7 @@ def _geneig(a1, b1, left, right, overwrite_a, overwrite_b,
|
|
111
111
|
return w, vr
|
112
112
|
|
113
113
|
|
114
|
+
@_apply_over_batch(('a', 2), ('b', 2))
|
114
115
|
def eig(a, b=None, left=False, right=True, overwrite_a=False,
|
115
116
|
overwrite_b=False, check_finite=True, homogeneous_eigvals=False):
|
116
117
|
"""
|
@@ -280,6 +281,7 @@ def eig(a, b=None, left=False, right=True, overwrite_a=False,
|
|
280
281
|
return w, vr
|
281
282
|
|
282
283
|
|
284
|
+
@_apply_over_batch(('a', 2), ('b', 2))
|
283
285
|
def eigh(a, b=None, *, lower=True, eigvals_only=False, overwrite_a=False,
|
284
286
|
overwrite_b=False, type=1, check_finite=True, subset_by_index=None,
|
285
287
|
subset_by_value=None, driver=None):
|
@@ -656,6 +658,7 @@ def _check_select(select, select_range, max_ev, max_len):
|
|
656
658
|
return select, vl, vu, il, iu, max_ev
|
657
659
|
|
658
660
|
|
661
|
+
@_apply_over_batch(('a_band', 2))
|
659
662
|
def eig_banded(a_band, lower=False, eigvals_only=False, overwrite_a_band=False,
|
660
663
|
select='a', select_range=None, max_ev=0, check_finite=True):
|
661
664
|
"""
|
@@ -835,6 +838,7 @@ def eig_banded(a_band, lower=False, eigvals_only=False, overwrite_a_band=False,
|
|
835
838
|
return w, v
|
836
839
|
|
837
840
|
|
841
|
+
@_apply_over_batch(('a', 2), ('b', 2))
|
838
842
|
def eigvals(a, b=None, overwrite_a=False, check_finite=True,
|
839
843
|
homogeneous_eigvals=False):
|
840
844
|
"""
|
@@ -910,6 +914,7 @@ def eigvals(a, b=None, overwrite_a=False, check_finite=True,
|
|
910
914
|
homogeneous_eigvals=homogeneous_eigvals)
|
911
915
|
|
912
916
|
|
917
|
+
@_apply_over_batch(('a', 2), ('b', 2))
|
913
918
|
def eigvalsh(a, b=None, *, lower=True, overwrite_a=False,
|
914
919
|
overwrite_b=False, type=1, check_finite=True, subset_by_index=None,
|
915
920
|
subset_by_value=None, driver=None):
|
@@ -1028,6 +1033,7 @@ def eigvalsh(a, b=None, *, lower=True, overwrite_a=False,
|
|
1028
1033
|
driver=driver)
|
1029
1034
|
|
1030
1035
|
|
1036
|
+
@_apply_over_batch(('a_band', 2))
|
1031
1037
|
def eigvals_banded(a_band, lower=False, overwrite_a_band=False,
|
1032
1038
|
select='a', select_range=None, check_finite=True):
|
1033
1039
|
"""
|
@@ -1121,6 +1127,7 @@ def eigvals_banded(a_band, lower=False, overwrite_a_band=False,
|
|
1121
1127
|
select_range=select_range, check_finite=check_finite)
|
1122
1128
|
|
1123
1129
|
|
1130
|
+
@_apply_over_batch(('d', 1), ('e', 1))
|
1124
1131
|
def eigvalsh_tridiagonal(d, e, select='a', select_range=None,
|
1125
1132
|
check_finite=True, tol=0., lapack_driver='auto'):
|
1126
1133
|
"""
|
@@ -1165,9 +1172,9 @@ def eigvalsh_tridiagonal(d, e, select='a', select_range=None,
|
|
1165
1172
|
and ``|a|`` is the 1-norm of the matrix ``a``.
|
1166
1173
|
lapack_driver : str
|
1167
1174
|
LAPACK function to use, can be 'auto', 'stemr', 'stebz', 'sterf',
|
1168
|
-
or '
|
1169
|
-
and 'stebz' otherwise. 'sterf' and 'stev' can only
|
1170
|
-
``select='a'``.
|
1175
|
+
'stev', or 'stevd'. When 'auto' (default), it will use 'stevd' if
|
1176
|
+
``select='a'`` and 'stebz' otherwise. 'sterf' and 'stev' can only
|
1177
|
+
be used when ``select='a'``.
|
1171
1178
|
|
1172
1179
|
Returns
|
1173
1180
|
-------
|
@@ -1202,6 +1209,7 @@ def eigvalsh_tridiagonal(d, e, select='a', select_range=None,
|
|
1202
1209
|
check_finite=check_finite, tol=tol, lapack_driver=lapack_driver)
|
1203
1210
|
|
1204
1211
|
|
1212
|
+
@_apply_over_batch(('d', 1), ('e', 1))
|
1205
1213
|
def eigh_tridiagonal(d, e, eigvals_only=False, select='a', select_range=None,
|
1206
1214
|
check_finite=True, tol=0., lapack_driver='auto'):
|
1207
1215
|
"""
|
@@ -1249,7 +1257,7 @@ def eigh_tridiagonal(d, e, eigvals_only=False, select='a', select_range=None,
|
|
1249
1257
|
and ``|a|`` is the 1-norm of the matrix ``a``.
|
1250
1258
|
lapack_driver : str
|
1251
1259
|
LAPACK function to use, can be 'auto', 'stemr', 'stebz', 'sterf',
|
1252
|
-
or '
|
1260
|
+
'stev', or 'stevd'. When 'auto' (default), it will use 'stevd' if ``select='a'``
|
1253
1261
|
and 'stebz' otherwise. When 'stebz' is used to find the eigenvalues and
|
1254
1262
|
``eigvals_only=False``, then a second LAPACK call (to ``?STEIN``) is
|
1255
1263
|
used to find the corresponding eigenvectors. 'sterf' can only be
|
@@ -1307,12 +1315,12 @@ def eigh_tridiagonal(d, e, eigvals_only=False, select='a', select_range=None,
|
|
1307
1315
|
select, select_range, 0, d.size)
|
1308
1316
|
if not isinstance(lapack_driver, str):
|
1309
1317
|
raise TypeError('lapack_driver must be str')
|
1310
|
-
drivers = ('auto', 'stemr', 'sterf', 'stebz', 'stev')
|
1318
|
+
drivers = ('auto', 'stemr', 'sterf', 'stebz', 'stev', 'stevd')
|
1311
1319
|
if lapack_driver not in drivers:
|
1312
1320
|
raise ValueError(f'lapack_driver must be one of {drivers}, '
|
1313
1321
|
f'got {lapack_driver}')
|
1314
1322
|
if lapack_driver == 'auto':
|
1315
|
-
lapack_driver = '
|
1323
|
+
lapack_driver = 'stevd' if select == 0 else 'stebz'
|
1316
1324
|
|
1317
1325
|
# Quick exit for 1x1 case
|
1318
1326
|
if len(d) == 1:
|
@@ -1343,6 +1351,11 @@ def eigh_tridiagonal(d, e, eigvals_only=False, select='a', select_range=None,
|
|
1343
1351
|
raise ValueError('stev can only be used when select == "a"')
|
1344
1352
|
w, v, info = func(d, e, compute_v=compute_v)
|
1345
1353
|
m = len(w)
|
1354
|
+
elif lapack_driver == 'stevd':
|
1355
|
+
if select != 0:
|
1356
|
+
raise ValueError('stevd can only be used when select == "a"')
|
1357
|
+
w, v, info = func(d, e, compute_v=compute_v)
|
1358
|
+
m = len(w)
|
1346
1359
|
elif lapack_driver == 'stebz':
|
1347
1360
|
tol = float(tol)
|
1348
1361
|
internal_name = 'stebz'
|
@@ -1384,12 +1397,12 @@ def eigh_tridiagonal(d, e, eigvals_only=False, select='a', select_range=None,
|
|
1384
1397
|
def _check_info(info, driver, positive='did not converge (LAPACK info=%d)'):
|
1385
1398
|
"""Check info return value."""
|
1386
1399
|
if info < 0:
|
1387
|
-
raise ValueError('illegal value in argument
|
1388
|
-
% (-info, driver))
|
1400
|
+
raise ValueError(f'illegal value in argument {-info} of internal {driver}')
|
1389
1401
|
if info > 0 and positive:
|
1390
1402
|
raise LinAlgError(("%s " + positive) % (driver, info,))
|
1391
1403
|
|
1392
1404
|
|
1405
|
+
@_apply_over_batch(('a', 2))
|
1393
1406
|
def hessenberg(a, calc_q=False, overwrite_a=False, check_finite=True):
|
1394
1407
|
"""
|
1395
1408
|
Compute Hessenberg form of a matrix.
|
scipy/linalg/_decomp_cholesky.py
CHANGED
@@ -4,6 +4,7 @@ import numpy as np
|
|
4
4
|
from numpy import asarray_chkfinite, asarray, atleast_2d, empty_like
|
5
5
|
|
6
6
|
# Local imports
|
7
|
+
from scipy._lib._util import _apply_over_batch
|
7
8
|
from ._misc import LinAlgError, _datacopied
|
8
9
|
from .lapack import get_lapack_funcs
|
9
10
|
|
@@ -35,14 +36,18 @@ def _cholesky(a, lower=False, overwrite_a=False, clean=True,
|
|
35
36
|
potrf, = get_lapack_funcs(('potrf',), (a1,))
|
36
37
|
c, info = potrf(a1, lower=lower, overwrite_a=overwrite_a, clean=clean)
|
37
38
|
if info > 0:
|
38
|
-
raise LinAlgError(
|
39
|
-
|
39
|
+
raise LinAlgError(
|
40
|
+
f"{info}-th leading minor of the array is not positive definite"
|
41
|
+
)
|
40
42
|
if info < 0:
|
41
|
-
raise ValueError(
|
42
|
-
|
43
|
+
raise ValueError(
|
44
|
+
f'LAPACK reported an illegal value in {-info}-th argument '
|
45
|
+
f'on entry to "POTRF".'
|
46
|
+
)
|
43
47
|
return c, lower
|
44
48
|
|
45
49
|
|
50
|
+
@_apply_over_batch(('a', 2))
|
46
51
|
def cholesky(a, lower=False, overwrite_a=False, check_finite=True):
|
47
52
|
"""
|
48
53
|
Compute the Cholesky decomposition of a matrix.
|
@@ -103,6 +108,7 @@ def cholesky(a, lower=False, overwrite_a=False, check_finite=True):
|
|
103
108
|
return c
|
104
109
|
|
105
110
|
|
111
|
+
@_apply_over_batch(("a", 2))
|
106
112
|
def cho_factor(a, lower=False, overwrite_a=False, check_finite=True):
|
107
113
|
"""
|
108
114
|
Compute the Cholesky decomposition of a matrix, to use in cho_solve
|
@@ -215,7 +221,12 @@ def cho_solve(c_and_lower, b, overwrite_b=False, check_finite=True):
|
|
215
221
|
True
|
216
222
|
|
217
223
|
"""
|
218
|
-
|
224
|
+
c, lower = c_and_lower
|
225
|
+
return _cho_solve(c, b, lower, overwrite_b=overwrite_b, check_finite=check_finite)
|
226
|
+
|
227
|
+
|
228
|
+
@_apply_over_batch(('c', 2), ('b', '1|2'))
|
229
|
+
def _cho_solve(c, b, lower, overwrite_b, check_finite):
|
219
230
|
if check_finite:
|
220
231
|
b1 = asarray_chkfinite(b)
|
221
232
|
c = asarray_chkfinite(c)
|
@@ -239,11 +250,11 @@ def cho_solve(c_and_lower, b, overwrite_b=False, check_finite=True):
|
|
239
250
|
potrs, = get_lapack_funcs(('potrs',), (c, b1))
|
240
251
|
x, info = potrs(c, b1, lower=lower, overwrite_b=overwrite_b)
|
241
252
|
if info != 0:
|
242
|
-
raise ValueError('illegal value in
|
243
|
-
% -info)
|
253
|
+
raise ValueError(f'illegal value in {-info}th argument of internal potrs')
|
244
254
|
return x
|
245
255
|
|
246
256
|
|
257
|
+
@_apply_over_batch(("ab", 2))
|
247
258
|
def cholesky_banded(ab, overwrite_ab=False, lower=False, check_finite=True):
|
248
259
|
"""
|
249
260
|
Cholesky decompose a banded Hermitian positive-definite matrix
|
@@ -317,10 +328,9 @@ def cholesky_banded(ab, overwrite_ab=False, lower=False, check_finite=True):
|
|
317
328
|
pbtrf, = get_lapack_funcs(('pbtrf',), (ab,))
|
318
329
|
c, info = pbtrf(ab, lower=lower, overwrite_ab=overwrite_ab)
|
319
330
|
if info > 0:
|
320
|
-
raise LinAlgError("
|
331
|
+
raise LinAlgError(f"{info}-th leading minor not positive definite")
|
321
332
|
if info < 0:
|
322
|
-
raise ValueError('illegal value in
|
323
|
-
% -info)
|
333
|
+
raise ValueError(f'illegal value in {info}-th argument of internal pbtrf')
|
324
334
|
return c
|
325
335
|
|
326
336
|
|
@@ -371,6 +381,12 @@ def cho_solve_banded(cb_and_lower, b, overwrite_b=False, check_finite=True):
|
|
371
381
|
|
372
382
|
"""
|
373
383
|
(cb, lower) = cb_and_lower
|
384
|
+
return _cho_solve_banded(cb, b, lower, overwrite_b=overwrite_b,
|
385
|
+
check_finite=check_finite)
|
386
|
+
|
387
|
+
|
388
|
+
@_apply_over_batch(('cb', 2), ('b', '1|2'))
|
389
|
+
def _cho_solve_banded(cb, b, lower, overwrite_b, check_finite):
|
374
390
|
if check_finite:
|
375
391
|
cb = asarray_chkfinite(cb)
|
376
392
|
b = asarray_chkfinite(b)
|
@@ -391,8 +407,7 @@ def cho_solve_banded(cb_and_lower, b, overwrite_b=False, check_finite=True):
|
|
391
407
|
pbtrs, = get_lapack_funcs(('pbtrs',), (cb, b))
|
392
408
|
x, info = pbtrs(cb, b, lower=lower, overwrite_b=overwrite_b)
|
393
409
|
if info > 0:
|
394
|
-
raise LinAlgError("
|
410
|
+
raise LinAlgError(f"{info}th leading minor not positive definite")
|
395
411
|
if info < 0:
|
396
|
-
raise ValueError('illegal value in
|
397
|
-
% -info)
|
412
|
+
raise ValueError(f'illegal value in {-info}th argument of internal pbtrs')
|
398
413
|
return x
|
scipy/linalg/_decomp_cossin.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
from collections.abc import Iterable
|
2
2
|
import numpy as np
|
3
3
|
|
4
|
-
from scipy._lib._util import _asarray_validated
|
4
|
+
from scipy._lib._util import _asarray_validated, _apply_over_batch
|
5
5
|
from scipy.linalg import block_diag, LinAlgError
|
6
6
|
from .lapack import _compute_lwork, get_lapack_funcs
|
7
7
|
|
@@ -80,6 +80,13 @@ def cossin(X, p=None, q=None, separate=False,
|
|
80
80
|
(``m-q`` x ``m-q``) orthogonal/unitary matrices. If ``separate=True``,
|
81
81
|
this contains the tuple of ``(V1H, V2H)``.
|
82
82
|
|
83
|
+
Notes
|
84
|
+
-----
|
85
|
+
The documentation is written assuming array arguments are of specified
|
86
|
+
"core" shapes. However, array argument(s) of this function may have additional
|
87
|
+
"batch" dimensions prepended to the core shape. In this case, the array is treated
|
88
|
+
as a batch of lower-dimensional slices; see :ref:`linalg_batch` for details.
|
89
|
+
|
83
90
|
References
|
84
91
|
----------
|
85
92
|
.. [1] Brian D. Sutton. Computing the complete CS decomposition. Numer.
|
@@ -111,16 +118,17 @@ def cossin(X, p=None, q=None, separate=False,
|
|
111
118
|
p = 1 if p is None else int(p)
|
112
119
|
q = 1 if q is None else int(q)
|
113
120
|
X = _asarray_validated(X, check_finite=True)
|
114
|
-
if not np.equal(*X.shape):
|
121
|
+
if not np.equal(*X.shape[-2:]):
|
115
122
|
raise ValueError("Cosine Sine decomposition only supports square"
|
116
|
-
f" matrices, got {X.shape}")
|
117
|
-
m = X.shape[
|
123
|
+
f" matrices, got {X.shape[-2:]}")
|
124
|
+
m = X.shape[-2]
|
118
125
|
if p >= m or p <= 0:
|
119
|
-
raise ValueError(f"invalid p={p}, 0<p<{X.shape[
|
126
|
+
raise ValueError(f"invalid p={p}, 0<p<{X.shape[-2]} must hold")
|
120
127
|
if q >= m or q <= 0:
|
121
|
-
raise ValueError(f"invalid q={q}, 0<q<{X.shape[
|
128
|
+
raise ValueError(f"invalid q={q}, 0<q<{X.shape[-2]} must hold")
|
122
129
|
|
123
|
-
x11, x12, x21, x22 = X[:p, :q], X[:p, q:],
|
130
|
+
x11, x12, x21, x22 = (X[..., :p, :q], X[..., :p, q:],
|
131
|
+
X[..., p:, :q], X[..., p:, q:])
|
124
132
|
elif not isinstance(X, Iterable):
|
125
133
|
raise ValueError("When p and q are None, X must be an Iterable"
|
126
134
|
" containing the subblocks of X")
|
@@ -128,30 +136,37 @@ def cossin(X, p=None, q=None, separate=False,
|
|
128
136
|
if len(X) != 4:
|
129
137
|
raise ValueError("When p and q are None, exactly four arrays"
|
130
138
|
f" should be in X, got {len(X)}")
|
131
|
-
|
132
139
|
x11, x12, x21, x22 = (np.atleast_2d(x) for x in X)
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
140
|
+
|
141
|
+
return _cossin(x11, x12, x21, x22, separate=separate, swap_sign=swap_sign,
|
142
|
+
compute_u=compute_u, compute_vh=compute_vh)
|
143
|
+
|
144
|
+
|
145
|
+
@_apply_over_batch(('x11', 2), ('x12', 2), ('x21', 2), ('x22', 2))
|
146
|
+
def _cossin(x11, x12, x21, x22, separate, swap_sign, compute_u, compute_vh):
|
147
|
+
|
148
|
+
for name, block in zip(["x11", "x12", "x21", "x22"],
|
149
|
+
[x11, x12, x21, x22]):
|
150
|
+
if block.shape[1] == 0:
|
151
|
+
raise ValueError(f"{name} can't be empty")
|
152
|
+
p, q = x11.shape
|
153
|
+
mmp, mmq = x22.shape
|
154
|
+
|
155
|
+
if x12.shape != (p, mmq):
|
156
|
+
raise ValueError(f"Invalid x12 dimensions: desired {(p, mmq)}, "
|
157
|
+
f"got {x12.shape}")
|
158
|
+
|
159
|
+
if x21.shape != (mmp, q):
|
160
|
+
raise ValueError(f"Invalid x21 dimensions: desired {(mmp, q)}, "
|
161
|
+
f"got {x21.shape}")
|
162
|
+
|
163
|
+
if p + mmp != q + mmq:
|
164
|
+
raise ValueError("The subblocks have compatible sizes but "
|
165
|
+
"don't form a square array (instead they form a"
|
166
|
+
f" {p + mmp}x{q + mmq} array). This might be "
|
167
|
+
"due to missing p, q arguments.")
|
168
|
+
|
169
|
+
m = p + mmp
|
155
170
|
|
156
171
|
cplx = any([np.iscomplexobj(x) for x in [x11, x12, x21, x22]])
|
157
172
|
driver = "uncsd" if cplx else "orcsd"
|
Binary file
|
scipy/linalg/_decomp_ldl.py
CHANGED
@@ -3,13 +3,16 @@ from warnings import warn
|
|
3
3
|
import numpy as np
|
4
4
|
from numpy import (atleast_2d, arange, zeros_like, imag, diag,
|
5
5
|
iscomplexobj, tril, triu, argsort, empty_like)
|
6
|
-
from
|
6
|
+
from numpy.exceptions import ComplexWarning
|
7
|
+
|
8
|
+
from scipy._lib._util import _apply_over_batch
|
7
9
|
from ._decomp import _asarray_validated
|
8
10
|
from .lapack import get_lapack_funcs, _compute_lwork
|
9
11
|
|
10
12
|
__all__ = ['ldl']
|
11
13
|
|
12
14
|
|
15
|
+
@_apply_over_batch(('A', 2))
|
13
16
|
def ldl(A, lower=True, hermitian=True, overwrite_a=False, check_finite=True):
|
14
17
|
""" Computes the LDLt or Bunch-Kaufman factorization of a symmetric/
|
15
18
|
hermitian matrix.
|
scipy/linalg/_decomp_lu.py
CHANGED
@@ -6,6 +6,8 @@ from numpy import asarray, asarray_chkfinite
|
|
6
6
|
import numpy as np
|
7
7
|
from itertools import product
|
8
8
|
|
9
|
+
from scipy._lib._util import _apply_over_batch
|
10
|
+
|
9
11
|
# Local imports
|
10
12
|
from ._misc import _datacopied, LinAlgWarning
|
11
13
|
from .lapack import get_lapack_funcs
|
@@ -17,6 +19,7 @@ lapack_cast_dict = {x: ''.join([y for y in 'fdFD' if np.can_cast(x, y)])
|
|
17
19
|
__all__ = ['lu', 'lu_solve', 'lu_factor']
|
18
20
|
|
19
21
|
|
22
|
+
@_apply_over_batch(('a', 2))
|
20
23
|
def lu_factor(a, overwrite_a=False, check_finite=True):
|
21
24
|
"""
|
22
25
|
Compute pivoted LU decomposition of a matrix.
|
@@ -118,11 +121,15 @@ def lu_factor(a, overwrite_a=False, check_finite=True):
|
|
118
121
|
getrf, = get_lapack_funcs(('getrf',), (a1,))
|
119
122
|
lu, piv, info = getrf(a1, overwrite_a=overwrite_a)
|
120
123
|
if info < 0:
|
121
|
-
raise ValueError(
|
122
|
-
|
124
|
+
raise ValueError(
|
125
|
+
f'illegal value in {-info}th argument of internal getrf (lu_factor)'
|
126
|
+
)
|
123
127
|
if info > 0:
|
124
|
-
warn(
|
125
|
-
|
128
|
+
warn(
|
129
|
+
f"Diagonal number {info} is exactly zero. Singular matrix.",
|
130
|
+
LinAlgWarning,
|
131
|
+
stacklevel=2
|
132
|
+
)
|
126
133
|
return lu, piv
|
127
134
|
|
128
135
|
|
@@ -175,6 +182,12 @@ def lu_solve(lu_and_piv, b, trans=0, overwrite_b=False, check_finite=True):
|
|
175
182
|
|
176
183
|
"""
|
177
184
|
(lu, piv) = lu_and_piv
|
185
|
+
return _lu_solve(lu, piv, b, trans=trans, overwrite_b=overwrite_b,
|
186
|
+
check_finite=check_finite)
|
187
|
+
|
188
|
+
|
189
|
+
@_apply_over_batch(('lu', 2), ('piv', 1), ('b', '1|2'))
|
190
|
+
def _lu_solve(lu, piv, b, trans, overwrite_b, check_finite):
|
178
191
|
if check_finite:
|
179
192
|
b1 = asarray_chkfinite(b)
|
180
193
|
else:
|
@@ -194,8 +207,7 @@ def lu_solve(lu_and_piv, b, trans=0, overwrite_b=False, check_finite=True):
|
|
194
207
|
x, info = getrs(lu, piv, b1, trans=trans, overwrite_b=overwrite_b)
|
195
208
|
if info == 0:
|
196
209
|
return x
|
197
|
-
raise ValueError('illegal value in
|
198
|
-
% -info)
|
210
|
+
raise ValueError(f'illegal value in {-info}th argument of internal gesv|posv')
|
199
211
|
|
200
212
|
|
201
213
|
def lu(a, permute_l=False, overwrite_a=False, check_finite=True,
|
Binary file
|
scipy/linalg/_decomp_polar.py
CHANGED
scipy/linalg/_decomp_qr.py
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
"""QR decomposition functions."""
|
2
2
|
import numpy as np
|
3
3
|
|
4
|
+
from scipy._lib._util import _apply_over_batch
|
5
|
+
|
4
6
|
# Local imports
|
5
7
|
from .lapack import get_lapack_funcs
|
6
8
|
from ._misc import _datacopied
|
@@ -18,11 +20,11 @@ def safecall(f, name, *args, **kwargs):
|
|
18
20
|
kwargs['lwork'] = ret[-2][0].real.astype(np.int_)
|
19
21
|
ret = f(*args, **kwargs)
|
20
22
|
if ret[-1] < 0:
|
21
|
-
raise ValueError("illegal value in
|
22
|
-
% (-ret[-1], name))
|
23
|
+
raise ValueError(f"illegal value in {-ret[-1]}th argument of internal {name}")
|
23
24
|
return ret[:-2]
|
24
25
|
|
25
26
|
|
27
|
+
@_apply_over_batch(('a', 2))
|
26
28
|
def qr(a, overwrite_a=False, lwork=None, mode='full', pivoting=False,
|
27
29
|
check_finite=True):
|
28
30
|
"""
|
@@ -214,6 +216,7 @@ def qr(a, overwrite_a=False, lwork=None, mode='full', pivoting=False,
|
|
214
216
|
return (Q,) + Rj
|
215
217
|
|
216
218
|
|
219
|
+
@_apply_over_batch(('a', 2), ('c', '1|2'))
|
217
220
|
def qr_multiply(a, c, mode='right', pivoting=False, conjugate=False,
|
218
221
|
overwrite_a=False, overwrite_c=False):
|
219
222
|
"""
|
@@ -366,6 +369,7 @@ def qr_multiply(a, c, mode='right', pivoting=False, conjugate=False,
|
|
366
369
|
return (cQ,) + raw[1:]
|
367
370
|
|
368
371
|
|
372
|
+
@_apply_over_batch(('a', 2))
|
369
373
|
def rq(a, overwrite_a=False, lwork=None, mode='full', check_finite=True):
|
370
374
|
"""
|
371
375
|
Compute RQ decomposition of a matrix.
|
scipy/linalg/_decomp_qz.py
CHANGED
@@ -2,6 +2,7 @@ import warnings
|
|
2
2
|
|
3
3
|
import numpy as np
|
4
4
|
from numpy import asarray_chkfinite
|
5
|
+
from scipy._lib._util import _apply_over_batch
|
5
6
|
from ._misc import LinAlgError, _datacopied, LinAlgWarning
|
6
7
|
from .lapack import get_lapack_funcs
|
7
8
|
|
@@ -142,6 +143,7 @@ def _qz(A, B, output='real', lwork=None, sort=None, overwrite_a=False,
|
|
142
143
|
return result, gges.typecode
|
143
144
|
|
144
145
|
|
146
|
+
@_apply_over_batch(('A', 2), ('B', 2))
|
145
147
|
def qz(A, B, output='real', lwork=None, sort=None, overwrite_a=False,
|
146
148
|
overwrite_b=False, check_finite=True):
|
147
149
|
"""
|
@@ -317,6 +319,7 @@ def qz(A, B, output='real', lwork=None, sort=None, overwrite_a=False,
|
|
317
319
|
return result[0], result[1], result[-4], result[-3]
|
318
320
|
|
319
321
|
|
322
|
+
@_apply_over_batch(('A', 2), ('B', 2))
|
320
323
|
def ordqz(A, B, sort='lhp', output='real', overwrite_a=False,
|
321
324
|
overwrite_b=False, check_finite=True):
|
322
325
|
"""QZ decomposition for a pair of matrices with reordering.
|
scipy/linalg/_decomp_schur.py
CHANGED
@@ -3,7 +3,7 @@ import numpy as np
|
|
3
3
|
from numpy import asarray_chkfinite, single, asarray, array
|
4
4
|
from numpy.linalg import norm
|
5
5
|
|
6
|
-
|
6
|
+
from scipy._lib._util import _apply_over_batch
|
7
7
|
# Local imports.
|
8
8
|
from ._misc import LinAlgError, _datacopied
|
9
9
|
from .lapack import get_lapack_funcs
|
@@ -14,6 +14,7 @@ __all__ = ['schur', 'rsf2csf']
|
|
14
14
|
_double_precision = ['i', 'l', 'd']
|
15
15
|
|
16
16
|
|
17
|
+
@_apply_over_batch(('a', 2))
|
17
18
|
def schur(a, output='real', lwork=None, overwrite_a=False, sort=None,
|
18
19
|
check_finite=True):
|
19
20
|
"""
|
@@ -248,6 +249,7 @@ def _castCopy(type, *arrays):
|
|
248
249
|
return cast_arrays
|
249
250
|
|
250
251
|
|
252
|
+
@_apply_over_batch(('T', 2), ('Z', 2))
|
251
253
|
def rsf2csf(T, Z, check_finite=True):
|
252
254
|
"""
|
253
255
|
Convert real Schur form to complex Schur form.
|
scipy/linalg/_decomp_svd.py
CHANGED
@@ -2,14 +2,18 @@
|
|
2
2
|
import numpy as np
|
3
3
|
from numpy import zeros, r_, diag, dot, arccos, arcsin, where, clip
|
4
4
|
|
5
|
+
from scipy._lib._util import _apply_over_batch
|
6
|
+
|
5
7
|
# Local imports.
|
6
8
|
from ._misc import LinAlgError, _datacopied
|
7
9
|
from .lapack import get_lapack_funcs, _compute_lwork
|
8
10
|
from ._decomp import _asarray_validated
|
9
11
|
|
12
|
+
|
10
13
|
__all__ = ['svd', 'svdvals', 'diagsvd', 'orth', 'subspace_angles', 'null_space']
|
11
14
|
|
12
15
|
|
16
|
+
@_apply_over_batch(('a', 2))
|
13
17
|
def svd(a, full_matrices=True, compute_uv=True, overwrite_a=False,
|
14
18
|
check_finite=True, lapack_driver='gesdd'):
|
15
19
|
"""
|
@@ -165,14 +169,17 @@ def svd(a, full_matrices=True, compute_uv=True, overwrite_a=False,
|
|
165
169
|
if info > 0:
|
166
170
|
raise LinAlgError("SVD did not converge")
|
167
171
|
if info < 0:
|
168
|
-
|
169
|
-
|
172
|
+
if lapack_driver == "gesdd" and info == -4:
|
173
|
+
msg = "A has a NaN entry"
|
174
|
+
raise ValueError(msg)
|
175
|
+
raise ValueError(f'illegal value in {-info}th argument of internal gesdd')
|
170
176
|
if compute_uv:
|
171
177
|
return u, s, v
|
172
178
|
else:
|
173
179
|
return s
|
174
180
|
|
175
181
|
|
182
|
+
@_apply_over_batch(('a', 2))
|
176
183
|
def svdvals(a, overwrite_a=False, check_finite=True):
|
177
184
|
"""
|
178
185
|
Compute singular values of a matrix.
|
@@ -249,6 +256,7 @@ def svdvals(a, overwrite_a=False, check_finite=True):
|
|
249
256
|
check_finite=check_finite)
|
250
257
|
|
251
258
|
|
259
|
+
@_apply_over_batch(('s', 1))
|
252
260
|
def diagsvd(s, M, N):
|
253
261
|
"""
|
254
262
|
Construct the sigma matrix in SVD from singular values and size M, N.
|
@@ -301,6 +309,7 @@ def diagsvd(s, M, N):
|
|
301
309
|
|
302
310
|
# Orthonormal decomposition
|
303
311
|
|
312
|
+
@_apply_over_batch(('A', 2))
|
304
313
|
def orth(A, rcond=None):
|
305
314
|
"""
|
306
315
|
Construct an orthonormal basis for the range of A using SVD
|
@@ -349,6 +358,7 @@ def orth(A, rcond=None):
|
|
349
358
|
return Q
|
350
359
|
|
351
360
|
|
361
|
+
@_apply_over_batch(('A', 2))
|
352
362
|
def null_space(A, rcond=None, *, overwrite_a=False, check_finite=True,
|
353
363
|
lapack_driver='gesdd'):
|
354
364
|
"""
|
@@ -427,6 +437,7 @@ def null_space(A, rcond=None, *, overwrite_a=False, check_finite=True,
|
|
427
437
|
return Q
|
428
438
|
|
429
439
|
|
440
|
+
@_apply_over_batch(('A', 2), ('B', 2))
|
430
441
|
def subspace_angles(A, B):
|
431
442
|
r"""
|
432
443
|
Compute the subspace angles between two matrices.
|
Binary file
|
scipy/linalg/_expm_frechet.py
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
"""Frechet derivative of the matrix exponential."""
|
2
2
|
import numpy as np
|
3
3
|
import scipy.linalg
|
4
|
+
from scipy._lib._util import _apply_over_batch
|
5
|
+
|
4
6
|
|
5
7
|
__all__ = ['expm_frechet', 'expm_cond']
|
6
8
|
|
7
9
|
|
10
|
+
@_apply_over_batch(('A', 2), ('E', 2))
|
8
11
|
def expm_frechet(A, E, method=None, compute_expm=True, check_finite=True):
|
9
12
|
"""
|
10
13
|
Frechet derivative of the matrix exponential of A in the direction E.
|
@@ -351,6 +354,7 @@ def expm_frechet_kronform(A, method=None, check_finite=True):
|
|
351
354
|
return np.vstack(cols).T
|
352
355
|
|
353
356
|
|
357
|
+
@_apply_over_batch(('A', 2))
|
354
358
|
def expm_cond(A, check_finite=True):
|
355
359
|
"""
|
356
360
|
Relative condition number of the matrix exponential in the Frobenius norm.
|
Binary file
|
Binary file
|
Binary file
|