scipy 1.15.2__cp313-cp313t-macosx_14_0_arm64.whl → 1.16.0__cp313-cp313t-macosx_14_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- scipy/.dylibs/libgcc_s.1.1.dylib +0 -0
- scipy/.dylibs/libgfortran.5.dylib +0 -0
- scipy/.dylibs/libquadmath.0.dylib +0 -0
- scipy/__config__.py +5 -5
- scipy/__init__.py +3 -6
- scipy/_cyutility.cpython-313t-darwin.so +0 -0
- scipy/_lib/_array_api.py +497 -161
- scipy/_lib/_array_api_compat_vendor.py +9 -0
- scipy/_lib/_bunch.py +4 -0
- scipy/_lib/_ccallback_c.cpython-313t-darwin.so +0 -0
- scipy/_lib/_docscrape.py +1 -1
- scipy/_lib/_elementwise_iterative_method.py +15 -26
- scipy/_lib/_sparse.py +41 -0
- scipy/_lib/_test_ccallback.cpython-313t-darwin.so +0 -0
- scipy/_lib/_test_deprecation_call.cpython-313t-darwin.so +0 -0
- scipy/_lib/_test_deprecation_def.cpython-313t-darwin.so +0 -0
- scipy/_lib/_testutils.py +6 -2
- scipy/_lib/_util.py +222 -125
- scipy/_lib/array_api_compat/__init__.py +4 -4
- scipy/_lib/array_api_compat/_internal.py +19 -6
- scipy/_lib/array_api_compat/common/__init__.py +1 -1
- scipy/_lib/array_api_compat/common/_aliases.py +365 -193
- scipy/_lib/array_api_compat/common/_fft.py +94 -64
- scipy/_lib/array_api_compat/common/_helpers.py +413 -180
- scipy/_lib/array_api_compat/common/_linalg.py +116 -40
- scipy/_lib/array_api_compat/common/_typing.py +179 -10
- scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
- scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
- scipy/_lib/array_api_compat/cupy/_info.py +16 -6
- scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
- scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
- scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
- scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
- scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
- scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
- scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
- scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
- scipy/_lib/array_api_compat/numpy/_info.py +36 -16
- scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
- scipy/_lib/array_api_compat/numpy/fft.py +11 -5
- scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
- scipy/_lib/array_api_compat/torch/__init__.py +3 -5
- scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
- scipy/_lib/array_api_compat/torch/_info.py +27 -16
- scipy/_lib/array_api_compat/torch/_typing.py +3 -0
- scipy/_lib/array_api_compat/torch/fft.py +17 -18
- scipy/_lib/array_api_compat/torch/linalg.py +16 -16
- scipy/_lib/array_api_extra/__init__.py +26 -3
- scipy/_lib/array_api_extra/_delegation.py +171 -0
- scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
- scipy/_lib/array_api_extra/_lib/_at.py +463 -0
- scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
- scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
- scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
- scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
- scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
- scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
- scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
- scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
- scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
- scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
- scipy/_lib/array_api_extra/testing.py +359 -0
- scipy/_lib/decorator.py +2 -2
- scipy/_lib/doccer.py +1 -7
- scipy/_lib/messagestream.cpython-313t-darwin.so +0 -0
- scipy/_lib/pyprima/__init__.py +212 -0
- scipy/_lib/pyprima/cobyla/__init__.py +0 -0
- scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
- scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
- scipy/_lib/pyprima/cobyla/geometry.py +226 -0
- scipy/_lib/pyprima/cobyla/initialize.py +215 -0
- scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
- scipy/_lib/pyprima/cobyla/update.py +289 -0
- scipy/_lib/pyprima/common/__init__.py +0 -0
- scipy/_lib/pyprima/common/_bounds.py +34 -0
- scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
- scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
- scipy/_lib/pyprima/common/_project.py +173 -0
- scipy/_lib/pyprima/common/checkbreak.py +93 -0
- scipy/_lib/pyprima/common/consts.py +47 -0
- scipy/_lib/pyprima/common/evaluate.py +99 -0
- scipy/_lib/pyprima/common/history.py +38 -0
- scipy/_lib/pyprima/common/infos.py +30 -0
- scipy/_lib/pyprima/common/linalg.py +435 -0
- scipy/_lib/pyprima/common/message.py +290 -0
- scipy/_lib/pyprima/common/powalg.py +131 -0
- scipy/_lib/pyprima/common/preproc.py +277 -0
- scipy/_lib/pyprima/common/present.py +5 -0
- scipy/_lib/pyprima/common/ratio.py +54 -0
- scipy/_lib/pyprima/common/redrho.py +47 -0
- scipy/_lib/pyprima/common/selectx.py +296 -0
- scipy/_lib/tests/test__util.py +105 -121
- scipy/_lib/tests/test_array_api.py +169 -34
- scipy/_lib/tests/test_bunch.py +7 -0
- scipy/_lib/tests/test_ccallback.py +2 -10
- scipy/_lib/tests/test_public_api.py +13 -0
- scipy/cluster/_hierarchy.cpython-313t-darwin.so +0 -0
- scipy/cluster/_optimal_leaf_ordering.cpython-313t-darwin.so +0 -0
- scipy/cluster/_vq.cpython-313t-darwin.so +0 -0
- scipy/cluster/hierarchy.py +393 -223
- scipy/cluster/tests/test_hierarchy.py +273 -335
- scipy/cluster/tests/test_vq.py +45 -61
- scipy/cluster/vq.py +39 -35
- scipy/conftest.py +282 -151
- scipy/constants/_constants.py +4 -1
- scipy/constants/tests/test_codata.py +2 -2
- scipy/constants/tests/test_constants.py +11 -18
- scipy/datasets/_download_all.py +15 -1
- scipy/datasets/_fetchers.py +7 -1
- scipy/datasets/_utils.py +1 -1
- scipy/differentiate/_differentiate.py +25 -25
- scipy/differentiate/tests/test_differentiate.py +24 -25
- scipy/fft/_basic.py +20 -0
- scipy/fft/_helper.py +3 -34
- scipy/fft/_pocketfft/helper.py +29 -1
- scipy/fft/_pocketfft/tests/test_basic.py +2 -4
- scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
- scipy/fft/_realtransforms.py +13 -0
- scipy/fft/tests/test_basic.py +27 -25
- scipy/fft/tests/test_fftlog.py +16 -7
- scipy/fft/tests/test_helper.py +18 -34
- scipy/fft/tests/test_real_transforms.py +8 -10
- scipy/fftpack/convolve.cpython-313t-darwin.so +0 -0
- scipy/fftpack/tests/test_basic.py +2 -4
- scipy/fftpack/tests/test_real_transforms.py +8 -9
- scipy/integrate/_bvp.py +9 -3
- scipy/integrate/_cubature.py +3 -2
- scipy/integrate/_dop.cpython-313t-darwin.so +0 -0
- scipy/integrate/_ivp/common.py +3 -3
- scipy/integrate/_ivp/ivp.py +9 -2
- scipy/integrate/_ivp/tests/test_ivp.py +19 -0
- scipy/integrate/_lsoda.cpython-313t-darwin.so +0 -0
- scipy/integrate/_ode.py +9 -2
- scipy/integrate/_odepack.cpython-313t-darwin.so +0 -0
- scipy/integrate/_quad_vec.py +21 -29
- scipy/integrate/_quadpack.cpython-313t-darwin.so +0 -0
- scipy/integrate/_quadpack_py.py +11 -7
- scipy/integrate/_quadrature.py +3 -3
- scipy/integrate/_rules/_base.py +2 -2
- scipy/integrate/_tanhsinh.py +57 -54
- scipy/integrate/_test_odeint_banded.cpython-313t-darwin.so +0 -0
- scipy/integrate/_vode.cpython-313t-darwin.so +0 -0
- scipy/integrate/tests/test__quad_vec.py +0 -6
- scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
- scipy/integrate/tests/test_cubature.py +21 -35
- scipy/integrate/tests/test_quadrature.py +6 -8
- scipy/integrate/tests/test_tanhsinh.py +61 -43
- scipy/interpolate/__init__.py +70 -58
- scipy/interpolate/_bary_rational.py +22 -22
- scipy/interpolate/_bsplines.py +119 -66
- scipy/interpolate/_cubic.py +65 -50
- scipy/interpolate/_dfitpack.cpython-313t-darwin.so +0 -0
- scipy/interpolate/_dierckx.cpython-313t-darwin.so +0 -0
- scipy/interpolate/_fitpack.cpython-313t-darwin.so +0 -0
- scipy/interpolate/_fitpack2.py +9 -6
- scipy/interpolate/_fitpack_impl.py +32 -26
- scipy/interpolate/_fitpack_repro.py +23 -19
- scipy/interpolate/_interpnd.cpython-313t-darwin.so +0 -0
- scipy/interpolate/_interpolate.py +30 -12
- scipy/interpolate/_ndbspline.py +13 -18
- scipy/interpolate/_ndgriddata.py +5 -8
- scipy/interpolate/_polyint.py +95 -31
- scipy/interpolate/_ppoly.cpython-313t-darwin.so +0 -0
- scipy/interpolate/_rbf.py +2 -2
- scipy/interpolate/_rbfinterp.py +1 -1
- scipy/interpolate/_rbfinterp_pythran.cpython-313t-darwin.so +0 -0
- scipy/interpolate/_rgi.py +31 -26
- scipy/interpolate/_rgi_cython.cpython-313t-darwin.so +0 -0
- scipy/interpolate/dfitpack.py +0 -20
- scipy/interpolate/interpnd.py +1 -2
- scipy/interpolate/tests/test_bary_rational.py +2 -2
- scipy/interpolate/tests/test_bsplines.py +97 -1
- scipy/interpolate/tests/test_fitpack2.py +39 -1
- scipy/interpolate/tests/test_interpnd.py +32 -20
- scipy/interpolate/tests/test_interpolate.py +48 -4
- scipy/interpolate/tests/test_rgi.py +2 -1
- scipy/io/_fast_matrix_market/__init__.py +2 -0
- scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
- scipy/io/_harwell_boeing/hb.py +7 -11
- scipy/io/_idl.py +5 -7
- scipy/io/_netcdf.py +15 -5
- scipy/io/_test_fortran.cpython-313t-darwin.so +0 -0
- scipy/io/arff/tests/test_arffread.py +3 -3
- scipy/io/matlab/__init__.py +5 -3
- scipy/io/matlab/_mio.py +4 -1
- scipy/io/matlab/_mio5.py +19 -13
- scipy/io/matlab/_mio5_utils.cpython-313t-darwin.so +0 -0
- scipy/io/matlab/_mio_utils.cpython-313t-darwin.so +0 -0
- scipy/io/matlab/_miobase.py +4 -1
- scipy/io/matlab/_streams.cpython-313t-darwin.so +0 -0
- scipy/io/matlab/tests/test_mio.py +46 -18
- scipy/io/matlab/tests/test_mio_funcs.py +1 -1
- scipy/io/tests/test_mmio.py +7 -1
- scipy/io/tests/test_wavfile.py +41 -0
- scipy/io/wavfile.py +57 -10
- scipy/linalg/_basic.py +113 -86
- scipy/linalg/_cythonized_array_utils.cpython-313t-darwin.so +0 -0
- scipy/linalg/_decomp.py +22 -9
- scipy/linalg/_decomp_cholesky.py +28 -13
- scipy/linalg/_decomp_cossin.py +45 -30
- scipy/linalg/_decomp_interpolative.cpython-313t-darwin.so +0 -0
- scipy/linalg/_decomp_ldl.py +4 -1
- scipy/linalg/_decomp_lu.py +18 -6
- scipy/linalg/_decomp_lu_cython.cpython-313t-darwin.so +0 -0
- scipy/linalg/_decomp_polar.py +2 -0
- scipy/linalg/_decomp_qr.py +6 -2
- scipy/linalg/_decomp_qz.py +3 -0
- scipy/linalg/_decomp_schur.py +3 -1
- scipy/linalg/_decomp_svd.py +13 -2
- scipy/linalg/_decomp_update.cpython-313t-darwin.so +0 -0
- scipy/linalg/_expm_frechet.py +4 -0
- scipy/linalg/_fblas.cpython-313t-darwin.so +0 -0
- scipy/linalg/_flapack.cpython-313t-darwin.so +0 -0
- scipy/linalg/_linalg_pythran.cpython-313t-darwin.so +0 -0
- scipy/linalg/_matfuncs.py +187 -4
- scipy/linalg/_matfuncs_expm.cpython-313t-darwin.so +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cpython-313t-darwin.so +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +1 -99
- scipy/linalg/_matfuncs_sqrtm_triu.cpython-313t-darwin.so +0 -0
- scipy/linalg/_procrustes.py +2 -0
- scipy/linalg/_sketches.py +17 -6
- scipy/linalg/_solve_toeplitz.cpython-313t-darwin.so +0 -0
- scipy/linalg/_solvers.py +7 -2
- scipy/linalg/_special_matrices.py +26 -36
- scipy/linalg/blas.py +35 -24
- scipy/linalg/cython_blas.cpython-313t-darwin.so +0 -0
- scipy/linalg/cython_lapack.cpython-313t-darwin.so +0 -0
- scipy/linalg/lapack.py +22 -2
- scipy/linalg/tests/_cython_examples/meson.build +7 -0
- scipy/linalg/tests/test_basic.py +31 -16
- scipy/linalg/tests/test_batch.py +588 -0
- scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
- scipy/linalg/tests/test_decomp.py +40 -3
- scipy/linalg/tests/test_decomp_cossin.py +14 -0
- scipy/linalg/tests/test_decomp_ldl.py +1 -1
- scipy/linalg/tests/test_interpolative.py +17 -0
- scipy/linalg/tests/test_lapack.py +115 -7
- scipy/linalg/tests/test_matfuncs.py +157 -102
- scipy/linalg/tests/test_procrustes.py +0 -7
- scipy/linalg/tests/test_solve_toeplitz.py +1 -1
- scipy/linalg/tests/test_special_matrices.py +1 -5
- scipy/ndimage/__init__.py +1 -0
- scipy/ndimage/_cytest.cpython-313t-darwin.so +0 -0
- scipy/ndimage/_delegators.py +8 -2
- scipy/ndimage/_filters.py +453 -5
- scipy/ndimage/_interpolation.py +36 -6
- scipy/ndimage/_measurements.py +4 -2
- scipy/ndimage/_morphology.py +5 -0
- scipy/ndimage/_nd_image.cpython-313t-darwin.so +0 -0
- scipy/ndimage/_ndimage_api.py +2 -1
- scipy/ndimage/_ni_docstrings.py +5 -1
- scipy/ndimage/_ni_label.cpython-313t-darwin.so +0 -0
- scipy/ndimage/_ni_support.py +1 -5
- scipy/ndimage/_rank_filter_1d.cpython-313t-darwin.so +0 -0
- scipy/ndimage/_support_alternative_backends.py +18 -6
- scipy/ndimage/tests/test_filters.py +384 -259
- scipy/ndimage/tests/test_fourier.py +7 -9
- scipy/ndimage/tests/test_interpolation.py +68 -61
- scipy/ndimage/tests/test_measurements.py +18 -35
- scipy/ndimage/tests/test_morphology.py +143 -131
- scipy/ndimage/tests/test_splines.py +1 -3
- scipy/odr/__odrpack.cpython-313t-darwin.so +0 -0
- scipy/optimize/_basinhopping.py +13 -7
- scipy/optimize/_bglu_dense.cpython-313t-darwin.so +0 -0
- scipy/optimize/_bracket.py +46 -26
- scipy/optimize/_chandrupatla.py +9 -10
- scipy/optimize/_cobyla_py.py +104 -123
- scipy/optimize/_constraints.py +14 -10
- scipy/optimize/_differentiable_functions.py +371 -230
- scipy/optimize/_differentialevolution.py +4 -3
- scipy/optimize/_direct.cpython-313t-darwin.so +0 -0
- scipy/optimize/_dual_annealing.py +1 -1
- scipy/optimize/_elementwise.py +1 -4
- scipy/optimize/_group_columns.cpython-313t-darwin.so +0 -0
- scipy/optimize/_highspy/_highs_wrapper.py +6 -4
- scipy/optimize/_lbfgsb.cpython-313t-darwin.so +0 -0
- scipy/optimize/_lbfgsb_py.py +80 -24
- scipy/optimize/_linprog_doc.py +2 -2
- scipy/optimize/_linprog_highs.py +11 -11
- scipy/optimize/_linprog_ip.py +25 -10
- scipy/optimize/_linprog_util.py +18 -19
- scipy/optimize/_lsap.cpython-313t-darwin.so +0 -0
- scipy/optimize/_lsq/common.py +3 -3
- scipy/optimize/_lsq/dogbox.py +16 -2
- scipy/optimize/_lsq/givens_elimination.cpython-313t-darwin.so +0 -0
- scipy/optimize/_lsq/least_squares.py +198 -126
- scipy/optimize/_lsq/lsq_linear.py +6 -6
- scipy/optimize/_lsq/trf.py +35 -8
- scipy/optimize/_milp.py +3 -1
- scipy/optimize/_minimize.py +105 -36
- scipy/optimize/_minpack.cpython-313t-darwin.so +0 -0
- scipy/optimize/_minpack_py.py +21 -14
- scipy/optimize/_moduleTNC.cpython-313t-darwin.so +0 -0
- scipy/optimize/_nnls.py +20 -21
- scipy/optimize/_nonlin.py +34 -3
- scipy/optimize/_numdiff.py +288 -110
- scipy/optimize/_optimize.py +86 -48
- scipy/optimize/_pava_pybind.cpython-313t-darwin.so +0 -0
- scipy/optimize/_remove_redundancy.py +5 -5
- scipy/optimize/_root_scalar.py +1 -1
- scipy/optimize/_shgo.py +6 -0
- scipy/optimize/_shgo_lib/_complex.py +1 -1
- scipy/optimize/_slsqp_py.py +216 -124
- scipy/optimize/_slsqplib.cpython-313t-darwin.so +0 -0
- scipy/optimize/_spectral.py +1 -1
- scipy/optimize/_tnc.py +8 -1
- scipy/optimize/_trlib/_trlib.cpython-313t-darwin.so +0 -0
- scipy/optimize/_trustregion.py +20 -6
- scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
- scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
- scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
- scipy/optimize/_trustregion_constr/projections.py +12 -8
- scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
- scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
- scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
- scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
- scipy/optimize/_trustregion_exact.py +0 -1
- scipy/optimize/_zeros.cpython-313t-darwin.so +0 -0
- scipy/optimize/_zeros_py.py +97 -17
- scipy/optimize/cython_optimize/_zeros.cpython-313t-darwin.so +0 -0
- scipy/optimize/slsqp.py +0 -1
- scipy/optimize/tests/test__basinhopping.py +1 -1
- scipy/optimize/tests/test__differential_evolution.py +4 -4
- scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
- scipy/optimize/tests/test__numdiff.py +66 -22
- scipy/optimize/tests/test__remove_redundancy.py +2 -2
- scipy/optimize/tests/test__shgo.py +9 -1
- scipy/optimize/tests/test_bracket.py +71 -46
- scipy/optimize/tests/test_chandrupatla.py +133 -135
- scipy/optimize/tests/test_cobyla.py +74 -45
- scipy/optimize/tests/test_constraints.py +1 -1
- scipy/optimize/tests/test_differentiable_functions.py +226 -6
- scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
- scipy/optimize/tests/test_least_squares.py +125 -13
- scipy/optimize/tests/test_linear_assignment.py +3 -3
- scipy/optimize/tests/test_linprog.py +3 -3
- scipy/optimize/tests/test_lsq_linear.py +6 -6
- scipy/optimize/tests/test_minimize_constrained.py +2 -2
- scipy/optimize/tests/test_minpack.py +4 -4
- scipy/optimize/tests/test_nnls.py +43 -3
- scipy/optimize/tests/test_nonlin.py +36 -0
- scipy/optimize/tests/test_optimize.py +98 -20
- scipy/optimize/tests/test_slsqp.py +36 -4
- scipy/optimize/tests/test_zeros.py +34 -1
- scipy/signal/__init__.py +12 -23
- scipy/signal/_delegators.py +568 -0
- scipy/signal/_filter_design.py +459 -241
- scipy/signal/_fir_filter_design.py +262 -90
- scipy/signal/_lti_conversion.py +3 -2
- scipy/signal/_ltisys.py +118 -91
- scipy/signal/_max_len_seq_inner.cpython-313t-darwin.so +0 -0
- scipy/signal/_peak_finding_utils.cpython-313t-darwin.so +0 -0
- scipy/signal/_polyutils.py +172 -0
- scipy/signal/_short_time_fft.py +553 -76
- scipy/signal/_signal_api.py +30 -0
- scipy/signal/_signaltools.py +719 -396
- scipy/signal/_sigtools.cpython-313t-darwin.so +0 -0
- scipy/signal/_sosfilt.cpython-313t-darwin.so +0 -0
- scipy/signal/_spectral_py.py +230 -50
- scipy/signal/_spline.cpython-313t-darwin.so +0 -0
- scipy/signal/_spline_filters.py +108 -68
- scipy/signal/_support_alternative_backends.py +73 -0
- scipy/signal/_upfirdn.py +4 -1
- scipy/signal/_upfirdn_apply.cpython-313t-darwin.so +0 -0
- scipy/signal/_waveforms.py +2 -11
- scipy/signal/_wavelets.py +1 -1
- scipy/signal/fir_filter_design.py +1 -0
- scipy/signal/spline.py +4 -11
- scipy/signal/tests/_scipy_spectral_test_shim.py +5 -182
- scipy/signal/tests/test_bsplines.py +114 -79
- scipy/signal/tests/test_cont2discrete.py +9 -2
- scipy/signal/tests/test_filter_design.py +721 -481
- scipy/signal/tests/test_fir_filter_design.py +332 -140
- scipy/signal/tests/test_savitzky_golay.py +4 -3
- scipy/signal/tests/test_short_time_fft.py +231 -5
- scipy/signal/tests/test_signaltools.py +2150 -1349
- scipy/signal/tests/test_spectral.py +50 -6
- scipy/signal/tests/test_splines.py +161 -96
- scipy/signal/tests/test_upfirdn.py +84 -50
- scipy/signal/tests/test_waveforms.py +20 -0
- scipy/signal/tests/test_windows.py +607 -466
- scipy/signal/windows/_windows.py +287 -148
- scipy/sparse/__init__.py +23 -4
- scipy/sparse/_base.py +269 -120
- scipy/sparse/_bsr.py +7 -4
- scipy/sparse/_compressed.py +59 -234
- scipy/sparse/_construct.py +90 -38
- scipy/sparse/_coo.py +115 -181
- scipy/sparse/_csc.py +4 -4
- scipy/sparse/_csparsetools.cpython-313t-darwin.so +0 -0
- scipy/sparse/_csr.py +2 -2
- scipy/sparse/_data.py +48 -48
- scipy/sparse/_dia.py +105 -21
- scipy/sparse/_dok.py +0 -23
- scipy/sparse/_index.py +4 -4
- scipy/sparse/_matrix.py +23 -0
- scipy/sparse/_sparsetools.cpython-313t-darwin.so +0 -0
- scipy/sparse/_sputils.py +37 -22
- scipy/sparse/base.py +0 -9
- scipy/sparse/bsr.py +0 -14
- scipy/sparse/compressed.py +0 -23
- scipy/sparse/construct.py +0 -6
- scipy/sparse/coo.py +0 -14
- scipy/sparse/csc.py +0 -3
- scipy/sparse/csgraph/_flow.cpython-313t-darwin.so +0 -0
- scipy/sparse/csgraph/_matching.cpython-313t-darwin.so +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cpython-313t-darwin.so +0 -0
- scipy/sparse/csgraph/_reordering.cpython-313t-darwin.so +0 -0
- scipy/sparse/csgraph/_shortest_path.cpython-313t-darwin.so +0 -0
- scipy/sparse/csgraph/_tools.cpython-313t-darwin.so +0 -0
- scipy/sparse/csgraph/_traversal.cpython-313t-darwin.so +0 -0
- scipy/sparse/csgraph/tests/test_matching.py +14 -2
- scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
- scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
- scipy/sparse/csr.py +0 -5
- scipy/sparse/data.py +1 -6
- scipy/sparse/dia.py +0 -7
- scipy/sparse/dok.py +0 -10
- scipy/sparse/linalg/_dsolve/_superlu.cpython-313t-darwin.so +0 -0
- scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
- scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
- scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-313t-darwin.so +0 -0
- scipy/sparse/linalg/_eigen/arpack/arpack.py +28 -20
- scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
- scipy/sparse/linalg/_expm_multiply.py +8 -3
- scipy/sparse/linalg/_interface.py +29 -26
- scipy/sparse/linalg/_isolve/_gcrotmk.py +6 -5
- scipy/sparse/linalg/_isolve/iterative.py +51 -45
- scipy/sparse/linalg/_isolve/lgmres.py +6 -6
- scipy/sparse/linalg/_isolve/minres.py +5 -5
- scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
- scipy/sparse/linalg/_isolve/utils.py +2 -8
- scipy/sparse/linalg/_matfuncs.py +1 -1
- scipy/sparse/linalg/_norm.py +1 -1
- scipy/sparse/linalg/_propack/_cpropack.cpython-313t-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cpython-313t-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_spropack.cpython-313t-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cpython-313t-darwin.so +0 -0
- scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
- scipy/sparse/linalg/tests/test_expm_multiply.py +10 -0
- scipy/sparse/linalg/tests/test_interface.py +35 -0
- scipy/sparse/linalg/tests/test_pydata_sparse.py +18 -0
- scipy/sparse/tests/test_arithmetic1d.py +5 -2
- scipy/sparse/tests/test_base.py +224 -40
- scipy/sparse/tests/test_common1d.py +17 -12
- scipy/sparse/tests/test_construct.py +1 -1
- scipy/sparse/tests/test_coo.py +272 -4
- scipy/sparse/tests/test_sparsetools.py +5 -0
- scipy/sparse/tests/test_sputils.py +36 -7
- scipy/spatial/_ckdtree.cpython-313t-darwin.so +0 -0
- scipy/spatial/_distance_pybind.cpython-313t-darwin.so +0 -0
- scipy/spatial/_distance_wrap.cpython-313t-darwin.so +0 -0
- scipy/spatial/_hausdorff.cpython-313t-darwin.so +0 -0
- scipy/spatial/_qhull.cpython-313t-darwin.so +0 -0
- scipy/spatial/_voronoi.cpython-313t-darwin.so +0 -0
- scipy/spatial/distance.py +49 -42
- scipy/spatial/tests/test_distance.py +15 -1
- scipy/spatial/tests/test_kdtree.py +1 -0
- scipy/spatial/tests/test_qhull.py +106 -2
- scipy/spatial/transform/__init__.py +5 -3
- scipy/spatial/transform/_rigid_transform.cpython-313t-darwin.so +0 -0
- scipy/spatial/transform/_rotation.cpython-313t-darwin.so +0 -0
- scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
- scipy/spatial/transform/tests/test_rotation.py +1342 -790
- scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
- scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
- scipy/special/__init__.py +1 -47
- scipy/special/_add_newdocs.py +34 -772
- scipy/special/_basic.py +22 -25
- scipy/special/_comb.cpython-313t-darwin.so +0 -0
- scipy/special/_ellip_harm_2.cpython-313t-darwin.so +0 -0
- scipy/special/_gufuncs.cpython-313t-darwin.so +0 -0
- scipy/special/_logsumexp.py +83 -69
- scipy/special/_orthogonal.pyi +1 -1
- scipy/special/_specfun.cpython-313t-darwin.so +0 -0
- scipy/special/_special_ufuncs.cpython-313t-darwin.so +0 -0
- scipy/special/_spherical_bessel.py +4 -4
- scipy/special/_support_alternative_backends.py +212 -119
- scipy/special/_test_internal.cpython-313t-darwin.so +0 -0
- scipy/special/_testutils.py +4 -4
- scipy/special/_ufuncs.cpython-313t-darwin.so +0 -0
- scipy/special/_ufuncs.pyi +1 -0
- scipy/special/_ufuncs.pyx +215 -1400
- scipy/special/_ufuncs_cxx.cpython-313t-darwin.so +0 -0
- scipy/special/_ufuncs_cxx.pxd +2 -15
- scipy/special/_ufuncs_cxx.pyx +5 -44
- scipy/special/_ufuncs_cxx_defs.h +2 -16
- scipy/special/_ufuncs_defs.h +0 -8
- scipy/special/cython_special.cpython-313t-darwin.so +0 -0
- scipy/special/cython_special.pxd +1 -1
- scipy/special/tests/_cython_examples/meson.build +10 -1
- scipy/special/tests/test_basic.py +153 -20
- scipy/special/tests/test_boost_ufuncs.py +3 -0
- scipy/special/tests/test_cdflib.py +35 -11
- scipy/special/tests/test_gammainc.py +16 -0
- scipy/special/tests/test_hyp2f1.py +23 -2
- scipy/special/tests/test_log1mexp.py +85 -0
- scipy/special/tests/test_logsumexp.py +220 -64
- scipy/special/tests/test_mpmath.py +1 -0
- scipy/special/tests/test_nan_inputs.py +1 -1
- scipy/special/tests/test_orthogonal.py +17 -18
- scipy/special/tests/test_sf_error.py +3 -2
- scipy/special/tests/test_sph_harm.py +6 -7
- scipy/special/tests/test_support_alternative_backends.py +211 -76
- scipy/stats/__init__.py +4 -1
- scipy/stats/_ansari_swilk_statistics.cpython-313t-darwin.so +0 -0
- scipy/stats/_axis_nan_policy.py +5 -12
- scipy/stats/_biasedurn.cpython-313t-darwin.so +0 -0
- scipy/stats/_continued_fraction.py +387 -0
- scipy/stats/_continuous_distns.py +296 -319
- scipy/stats/_correlation.py +1 -1
- scipy/stats/_covariance.py +6 -3
- scipy/stats/_discrete_distns.py +39 -32
- scipy/stats/_distn_infrastructure.py +39 -12
- scipy/stats/_distribution_infrastructure.py +920 -238
- scipy/stats/_entropy.py +9 -10
- scipy/{_lib → stats}/_finite_differences.py +1 -1
- scipy/stats/_hypotests.py +83 -50
- scipy/stats/_kde.py +53 -49
- scipy/stats/_ksstats.py +1 -1
- scipy/stats/_levy_stable/__init__.py +7 -15
- scipy/stats/_levy_stable/levyst.cpython-313t-darwin.so +0 -0
- scipy/stats/_morestats.py +118 -73
- scipy/stats/_mstats_basic.py +13 -17
- scipy/stats/_mstats_extras.py +8 -8
- scipy/stats/_multivariate.py +89 -113
- scipy/stats/_new_distributions.py +97 -20
- scipy/stats/_page_trend_test.py +12 -5
- scipy/stats/_probability_distribution.py +265 -43
- scipy/stats/_qmc.py +14 -9
- scipy/stats/_qmc_cy.cpython-313t-darwin.so +0 -0
- scipy/stats/_qmvnt.py +16 -95
- scipy/stats/_qmvnt_cy.cpython-313t-darwin.so +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/rcont.cpython-313t-darwin.so +0 -0
- scipy/stats/_resampling.py +5 -30
- scipy/stats/_sampling.py +1 -1
- scipy/stats/_sobol.cpython-313t-darwin.so +0 -0
- scipy/stats/_stats.cpython-313t-darwin.so +0 -0
- scipy/stats/_stats_mstats_common.py +21 -2
- scipy/stats/_stats_py.py +551 -477
- scipy/stats/_stats_pythran.cpython-313t-darwin.so +0 -0
- scipy/stats/_unuran/unuran_wrapper.cpython-313t-darwin.so +0 -0
- scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
- scipy/stats/_variation.py +6 -8
- scipy/stats/_wilcoxon.py +13 -7
- scipy/stats/tests/common_tests.py +6 -4
- scipy/stats/tests/test_axis_nan_policy.py +62 -24
- scipy/stats/tests/test_continued_fraction.py +173 -0
- scipy/stats/tests/test_continuous.py +379 -60
- scipy/stats/tests/test_continuous_basic.py +18 -12
- scipy/stats/tests/test_discrete_basic.py +14 -8
- scipy/stats/tests/test_discrete_distns.py +16 -16
- scipy/stats/tests/test_distributions.py +117 -75
- scipy/stats/tests/test_entropy.py +40 -48
- scipy/stats/tests/test_fit.py +4 -3
- scipy/stats/tests/test_hypotests.py +153 -24
- scipy/stats/tests/test_kdeoth.py +109 -41
- scipy/stats/tests/test_marray.py +289 -0
- scipy/stats/tests/test_morestats.py +81 -49
- scipy/stats/tests/test_mstats_basic.py +3 -3
- scipy/stats/tests/test_multivariate.py +434 -83
- scipy/stats/tests/test_qmc.py +13 -10
- scipy/stats/tests/test_quantile.py +199 -0
- scipy/stats/tests/test_rank.py +119 -112
- scipy/stats/tests/test_resampling.py +47 -56
- scipy/stats/tests/test_sampling.py +9 -4
- scipy/stats/tests/test_stats.py +799 -939
- scipy/stats/tests/test_variation.py +8 -6
- scipy/version.py +2 -2
- {scipy-1.15.2.dist-info → scipy-1.16.0.dist-info}/LICENSE.txt +4 -4
- {scipy-1.15.2.dist-info → scipy-1.16.0.dist-info}/METADATA +12 -12
- {scipy-1.15.2.dist-info → scipy-1.16.0.dist-info}/RECORD +574 -581
- scipy-1.16.0.dist-info/WHEEL +6 -0
- scipy/_lib/array_api_extra/_funcs.py +0 -484
- scipy/_lib/array_api_extra/_typing.py +0 -8
- scipy/interpolate/_bspl.cpython-313t-darwin.so +0 -0
- scipy/optimize/_cobyla.cpython-313t-darwin.so +0 -0
- scipy/optimize/_cython_nnls.cpython-313t-darwin.so +0 -0
- scipy/optimize/_slsqp.cpython-313t-darwin.so +0 -0
- scipy/spatial/qhull_src/COPYING.txt +0 -38
- scipy/special/libsf_error_state.dylib +0 -0
- scipy/special/tests/test_log_softmax.py +0 -109
- scipy/special/tests/test_xsf_cuda.py +0 -114
- scipy/special/xsf/binom.h +0 -89
- scipy/special/xsf/cdflib.h +0 -100
- scipy/special/xsf/cephes/airy.h +0 -307
- scipy/special/xsf/cephes/besselpoly.h +0 -51
- scipy/special/xsf/cephes/beta.h +0 -257
- scipy/special/xsf/cephes/cbrt.h +0 -131
- scipy/special/xsf/cephes/chbevl.h +0 -85
- scipy/special/xsf/cephes/chdtr.h +0 -193
- scipy/special/xsf/cephes/const.h +0 -87
- scipy/special/xsf/cephes/ellie.h +0 -293
- scipy/special/xsf/cephes/ellik.h +0 -251
- scipy/special/xsf/cephes/ellpe.h +0 -107
- scipy/special/xsf/cephes/ellpk.h +0 -117
- scipy/special/xsf/cephes/expn.h +0 -260
- scipy/special/xsf/cephes/gamma.h +0 -398
- scipy/special/xsf/cephes/hyp2f1.h +0 -596
- scipy/special/xsf/cephes/hyperg.h +0 -361
- scipy/special/xsf/cephes/i0.h +0 -149
- scipy/special/xsf/cephes/i1.h +0 -158
- scipy/special/xsf/cephes/igam.h +0 -421
- scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
- scipy/special/xsf/cephes/igami.h +0 -313
- scipy/special/xsf/cephes/j0.h +0 -225
- scipy/special/xsf/cephes/j1.h +0 -198
- scipy/special/xsf/cephes/jv.h +0 -715
- scipy/special/xsf/cephes/k0.h +0 -164
- scipy/special/xsf/cephes/k1.h +0 -163
- scipy/special/xsf/cephes/kn.h +0 -243
- scipy/special/xsf/cephes/lanczos.h +0 -112
- scipy/special/xsf/cephes/ndtr.h +0 -275
- scipy/special/xsf/cephes/poch.h +0 -85
- scipy/special/xsf/cephes/polevl.h +0 -167
- scipy/special/xsf/cephes/psi.h +0 -194
- scipy/special/xsf/cephes/rgamma.h +0 -111
- scipy/special/xsf/cephes/scipy_iv.h +0 -811
- scipy/special/xsf/cephes/shichi.h +0 -248
- scipy/special/xsf/cephes/sici.h +0 -224
- scipy/special/xsf/cephes/sindg.h +0 -221
- scipy/special/xsf/cephes/tandg.h +0 -139
- scipy/special/xsf/cephes/trig.h +0 -58
- scipy/special/xsf/cephes/unity.h +0 -186
- scipy/special/xsf/cephes/zeta.h +0 -172
- scipy/special/xsf/config.h +0 -304
- scipy/special/xsf/digamma.h +0 -205
- scipy/special/xsf/error.h +0 -57
- scipy/special/xsf/evalpoly.h +0 -47
- scipy/special/xsf/expint.h +0 -266
- scipy/special/xsf/hyp2f1.h +0 -694
- scipy/special/xsf/iv_ratio.h +0 -173
- scipy/special/xsf/lambertw.h +0 -150
- scipy/special/xsf/loggamma.h +0 -163
- scipy/special/xsf/sici.h +0 -200
- scipy/special/xsf/tools.h +0 -427
- scipy/special/xsf/trig.h +0 -164
- scipy/special/xsf/wright_bessel.h +0 -843
- scipy/special/xsf/zlog1.h +0 -35
- scipy/stats/_mvn.cpython-313t-darwin.so +0 -0
- scipy-1.15.2.dist-info/WHEEL +0 -4
@@ -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
|
@@ -7,6 +7,7 @@ import pytest
|
|
7
7
|
from numpy.testing import (assert_allclose, assert_, assert_equal,
|
8
8
|
suppress_warnings)
|
9
9
|
from scipy.sparse import SparseEfficiencyWarning
|
10
|
+
import scipy.sparse
|
10
11
|
from scipy.sparse.linalg import aslinearoperator
|
11
12
|
import scipy.linalg
|
12
13
|
from scipy.sparse.linalg import expm as sp_expm
|
@@ -260,19 +261,28 @@ class TestExpmActionInterval:
|
|
260
261
|
A = scipy.sparse.diags_array(np.arange(5),format='csr', dtype=int)
|
261
262
|
B = np.ones(5, dtype=int)
|
262
263
|
Aexpm = scipy.sparse.diags_array(np.exp(np.arange(5)),format='csr')
|
264
|
+
BI = np.identity(5, dtype=int)
|
265
|
+
BI_sparse = scipy.sparse.csr_array(BI)
|
263
266
|
assert_allclose(expm_multiply(A,B,0,1)[-1], Aexpm.dot(B))
|
267
|
+
assert_allclose(np.diag(expm_multiply(A, BI_sparse, 0, 1)[-1]), Aexpm.dot(B))
|
264
268
|
|
265
269
|
# Test A complex, B int
|
266
270
|
A = scipy.sparse.diags_array(-1j*np.arange(5),format='csr', dtype=complex)
|
267
271
|
B = np.ones(5, dtype=int)
|
268
272
|
Aexpm = scipy.sparse.diags_array(np.exp(-1j*np.arange(5)),format='csr')
|
269
273
|
assert_allclose(expm_multiply(A,B,0,1)[-1], Aexpm.dot(B))
|
274
|
+
assert_allclose(np.diag(expm_multiply(A, BI_sparse, 0, 1)[-1]), Aexpm.dot(B))
|
270
275
|
|
271
276
|
# Test A int, B complex
|
272
277
|
A = scipy.sparse.diags_array(np.arange(5),format='csr', dtype=int)
|
273
278
|
B = np.full(5, 1j, dtype=complex)
|
274
279
|
Aexpm = scipy.sparse.diags_array(np.exp(np.arange(5)),format='csr')
|
275
280
|
assert_allclose(expm_multiply(A,B,0,1)[-1], Aexpm.dot(B))
|
281
|
+
BI = np.identity(5, dtype=complex)*1j
|
282
|
+
assert_allclose(
|
283
|
+
np.diag(expm_multiply(A, scipy.sparse.csr_array(BI), 0, 1)[-1]),
|
284
|
+
Aexpm.dot(B)
|
285
|
+
)
|
276
286
|
|
277
287
|
def test_expm_multiply_interval_status_0(self):
|
278
288
|
self._help_test_specific_expm_interval_status(0)
|
@@ -13,6 +13,7 @@ import scipy.sparse as sparse
|
|
13
13
|
|
14
14
|
import scipy.sparse.linalg._interface as interface
|
15
15
|
from scipy.sparse._sputils import matrix
|
16
|
+
from scipy._lib._gcutils import assert_deallocated, IS_PYPY
|
16
17
|
|
17
18
|
|
18
19
|
class TestLinearOperator:
|
@@ -512,6 +513,30 @@ def test_transpose_noconjugate():
|
|
512
513
|
assert_equal(B.dot(v), Y.dot(v))
|
513
514
|
assert_equal(B.T.dot(v), Y.T.dot(v))
|
514
515
|
|
516
|
+
def test_transpose_multiplication():
|
517
|
+
class MyMatrix(interface.LinearOperator):
|
518
|
+
def __init__(self, A):
|
519
|
+
super().__init__(A.dtype, A.shape)
|
520
|
+
self.A = A
|
521
|
+
def _matmat(self, other): return self.A @ other
|
522
|
+
def _rmatmat(self, other): return self.A.T @ other
|
523
|
+
|
524
|
+
A = MyMatrix(np.array([[1, 2], [3, 4]]))
|
525
|
+
X = np.array([1, 2])
|
526
|
+
B = np.array([[10, 20], [30, 40]])
|
527
|
+
X2 = X.reshape(-1, 1)
|
528
|
+
Y = np.array([[1, 2], [3, 4]])
|
529
|
+
|
530
|
+
assert_equal(A @ B, Y @ B)
|
531
|
+
assert_equal(B.T @ A, B.T @ Y)
|
532
|
+
assert_equal(A.T @ B, Y.T @ B)
|
533
|
+
assert_equal(A @ X, Y @ X)
|
534
|
+
assert_equal(X.T @ A, X.T @ Y)
|
535
|
+
assert_equal(A.T @ X, Y.T @ X)
|
536
|
+
assert_equal(A @ X2, Y @ X2)
|
537
|
+
assert_equal(X2.T @ A, X2.T @ Y)
|
538
|
+
assert_equal(A.T @ X2, Y.T @ X2)
|
539
|
+
|
515
540
|
def test_sparse_matmat_exception():
|
516
541
|
A = interface.LinearOperator((2, 2), matvec=lambda x: x)
|
517
542
|
B = sparse.eye_array(2)
|
@@ -524,3 +549,13 @@ def test_sparse_matmat_exception():
|
|
524
549
|
A @ np.identity(4)
|
525
550
|
with assert_raises(ValueError):
|
526
551
|
np.identity(4) @ A
|
552
|
+
|
553
|
+
|
554
|
+
@pytest.mark.skipif(IS_PYPY, reason="Test not meaningful on PyPy")
|
555
|
+
def test_MatrixLinearOperator_refcycle():
|
556
|
+
# gh-10634
|
557
|
+
# Test that MatrixLinearOperator can be automatically garbage collected
|
558
|
+
A = np.eye(2)
|
559
|
+
with assert_deallocated(interface.MatrixLinearOperator, A) as op:
|
560
|
+
op.adjoint()
|
561
|
+
del op
|
@@ -239,6 +239,10 @@ def test_expm_multiply(matrices):
|
|
239
239
|
x = splin.expm_multiply(A_sparse, b)
|
240
240
|
assert_allclose(x, x0)
|
241
241
|
|
242
|
+
x0 = splin.expm_multiply(A_dense, A_dense)
|
243
|
+
x = splin.expm_multiply(A_sparse, A_sparse)
|
244
|
+
assert_allclose(x.todense(), x0)
|
245
|
+
|
242
246
|
|
243
247
|
def test_eq(same_matrix):
|
244
248
|
sp_sparse, pd_sparse = same_matrix
|
@@ -252,3 +256,17 @@ def test_ne(same_matrix):
|
|
252
256
|
# temporary splint until pydata sparse support sparray equality
|
253
257
|
sp_sparse = sp.coo_matrix(sp_sparse).asformat(sp_sparse.format)
|
254
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
|