scipy 1.15.3__cp313-cp313-macosx_12_0_arm64.whl → 1.16.0rc2__cp313-cp313-macosx_12_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/libscipy_openblas.dylib +0 -0
- scipy/__config__.py +8 -8
- scipy/__init__.py +3 -6
- scipy/_cyutility.cpython-313-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-313-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-313-darwin.so +0 -0
- scipy/_lib/_test_deprecation_def.cpython-313-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-313-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-313-darwin.so +0 -0
- scipy/cluster/_optimal_leaf_ordering.cpython-313-darwin.so +0 -0
- scipy/cluster/_vq.cpython-313-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-313-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-313-darwin.so +0 -0
- scipy/integrate/_lsoda.cpython-313-darwin.so +0 -0
- scipy/integrate/_ode.py +9 -2
- scipy/integrate/_odepack.cpython-313-darwin.so +0 -0
- scipy/integrate/_quad_vec.py +21 -29
- scipy/integrate/_quadpack.cpython-313-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-313-darwin.so +0 -0
- scipy/integrate/_vode.cpython-313-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-313-darwin.so +0 -0
- scipy/interpolate/_dierckx.cpython-313-darwin.so +0 -0
- scipy/interpolate/_fitpack.cpython-313-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-313-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-313-darwin.so +0 -0
- scipy/interpolate/_rbf.py +2 -2
- scipy/interpolate/_rbfinterp.py +1 -1
- scipy/interpolate/_rbfinterp_pythran.cpython-313-darwin.so +0 -0
- scipy/interpolate/_rgi.py +31 -26
- scipy/interpolate/_rgi_cython.cpython-313-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-313-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-313-darwin.so +0 -0
- scipy/io/matlab/_mio_utils.cpython-313-darwin.so +0 -0
- scipy/io/matlab/_miobase.py +4 -1
- scipy/io/matlab/_streams.cpython-313-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-313-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-313-darwin.so +0 -0
- scipy/linalg/_decomp_ldl.py +4 -1
- scipy/linalg/_decomp_lu.py +18 -6
- scipy/linalg/_decomp_lu_cython.cpython-313-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-313-darwin.so +0 -0
- scipy/linalg/_expm_frechet.py +4 -0
- scipy/linalg/_fblas.cpython-313-darwin.so +0 -0
- scipy/linalg/_flapack.cpython-313-darwin.so +0 -0
- scipy/linalg/_linalg_pythran.cpython-313-darwin.so +0 -0
- scipy/linalg/_matfuncs.py +187 -4
- scipy/linalg/_matfuncs_expm.cpython-313-darwin.so +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cpython-313-darwin.so +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +1 -99
- scipy/linalg/_matfuncs_sqrtm_triu.cpython-313-darwin.so +0 -0
- scipy/linalg/_procrustes.py +2 -0
- scipy/linalg/_sketches.py +17 -6
- scipy/linalg/_solve_toeplitz.cpython-313-darwin.so +0 -0
- scipy/linalg/_solvers.py +7 -2
- scipy/linalg/_special_matrices.py +26 -36
- scipy/linalg/cython_blas.cpython-313-darwin.so +0 -0
- scipy/linalg/cython_lapack.cpython-313-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-313-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-313-darwin.so +0 -0
- scipy/ndimage/_ni_docstrings.py +5 -1
- scipy/ndimage/_ni_label.cpython-313-darwin.so +0 -0
- scipy/ndimage/_ni_support.py +1 -5
- scipy/ndimage/_rank_filter_1d.cpython-313-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-313-darwin.so +0 -0
- scipy/optimize/_basinhopping.py +13 -7
- scipy/optimize/_bglu_dense.cpython-313-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-313-darwin.so +0 -0
- scipy/optimize/_dual_annealing.py +1 -1
- scipy/optimize/_elementwise.py +1 -4
- scipy/optimize/_group_columns.cpython-313-darwin.so +0 -0
- scipy/optimize/_lbfgsb.cpython-313-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-313-darwin.so +0 -0
- scipy/optimize/_lsq/common.py +3 -3
- scipy/optimize/_lsq/dogbox.py +16 -2
- scipy/optimize/_lsq/givens_elimination.cpython-313-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-313-darwin.so +0 -0
- scipy/optimize/_minpack_py.py +21 -14
- scipy/optimize/_moduleTNC.cpython-313-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-313-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-313-darwin.so +0 -0
- scipy/optimize/_spectral.py +1 -1
- scipy/optimize/_tnc.py +8 -1
- scipy/optimize/_trlib/_trlib.cpython-313-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-313-darwin.so +0 -0
- scipy/optimize/_zeros_py.py +97 -17
- scipy/optimize/cython_optimize/_zeros.cpython-313-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-313-darwin.so +0 -0
- scipy/signal/_peak_finding_utils.cpython-313-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-313-darwin.so +0 -0
- scipy/signal/_sosfilt.cpython-313-darwin.so +0 -0
- scipy/signal/_spectral_py.py +230 -50
- scipy/signal/_spline.cpython-313-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-313-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-313-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-313-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-313-darwin.so +0 -0
- scipy/sparse/csgraph/_matching.cpython-313-darwin.so +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cpython-313-darwin.so +0 -0
- scipy/sparse/csgraph/_reordering.cpython-313-darwin.so +0 -0
- scipy/sparse/csgraph/_shortest_path.cpython-313-darwin.so +0 -0
- scipy/sparse/csgraph/_tools.cpython-313-darwin.so +0 -0
- scipy/sparse/csgraph/_traversal.cpython-313-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-313-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-313-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-313-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cpython-313-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_spropack.cpython-313-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cpython-313-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-313-darwin.so +0 -0
- scipy/spatial/_distance_pybind.cpython-313-darwin.so +0 -0
- scipy/spatial/_distance_wrap.cpython-313-darwin.so +0 -0
- scipy/spatial/_hausdorff.cpython-313-darwin.so +0 -0
- scipy/spatial/_qhull.cpython-313-darwin.so +0 -0
- scipy/spatial/_voronoi.cpython-313-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-313-darwin.so +0 -0
- scipy/spatial/transform/_rotation.cpython-313-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-313-darwin.so +0 -0
- scipy/special/_ellip_harm_2.cpython-313-darwin.so +0 -0
- scipy/special/_gufuncs.cpython-313-darwin.so +0 -0
- scipy/special/_logsumexp.py +67 -58
- scipy/special/_orthogonal.pyi +1 -1
- scipy/special/_specfun.cpython-313-darwin.so +0 -0
- scipy/special/_special_ufuncs.cpython-313-darwin.so +0 -0
- scipy/special/_spherical_bessel.py +4 -4
- scipy/special/_support_alternative_backends.py +212 -119
- scipy/special/_test_internal.cpython-313-darwin.so +0 -0
- scipy/special/_testutils.py +4 -4
- scipy/special/_ufuncs.cpython-313-darwin.so +0 -0
- scipy/special/_ufuncs.pyi +1 -0
- scipy/special/_ufuncs.pyx +215 -1400
- scipy/special/_ufuncs_cxx.cpython-313-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-313-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-313-darwin.so +0 -0
- scipy/stats/_axis_nan_policy.py +5 -12
- scipy/stats/_biasedurn.cpython-313-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-313-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-313-darwin.so +0 -0
- scipy/stats/_qmvnt.py +16 -95
- scipy/stats/_qmvnt_cy.cpython-313-darwin.so +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/rcont.cpython-313-darwin.so +0 -0
- scipy/stats/_resampling.py +4 -29
- scipy/stats/_sampling.py +1 -1
- scipy/stats/_sobol.cpython-313-darwin.so +0 -0
- scipy/stats/_stats.cpython-313-darwin.so +0 -0
- scipy/stats/_stats_mstats_common.py +21 -2
- scipy/stats/_stats_py.py +550 -476
- scipy/stats/_stats_pythran.cpython-313-darwin.so +0 -0
- scipy/stats/_unuran/unuran_wrapper.cpython-313-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 +561 -568
- 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-313-darwin.so +0 -0
- scipy/optimize/_cobyla.cpython-313-darwin.so +0 -0
- scipy/optimize/_cython_nnls.cpython-313-darwin.so +0 -0
- scipy/optimize/_slsqp.cpython-313-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-313-darwin.so +0 -0
- scipy-1.15.3.dist-info/WHEEL +0 -4
scipy/fft/tests/test_fftlog.py
CHANGED
@@ -7,10 +7,8 @@ import pytest
|
|
7
7
|
from scipy.fft._fftlog import fht, ifht, fhtoffset
|
8
8
|
from scipy.special import poch
|
9
9
|
|
10
|
-
from scipy.
|
11
|
-
from scipy._lib._array_api import xp_assert_close, xp_assert_less, array_namespace
|
10
|
+
from scipy._lib._array_api import xp_assert_close, xp_assert_less
|
12
11
|
|
13
|
-
pytestmark = [array_api_compatible, pytest.mark.usefixtures("skip_xp_backends"),]
|
14
12
|
skip_xp_backends = pytest.mark.skip_xp_backends
|
15
13
|
|
16
14
|
|
@@ -25,7 +23,7 @@ def test_fht_agrees_with_fftlog(xp):
|
|
25
23
|
|
26
24
|
r = np.logspace(-4, 4, 16)
|
27
25
|
|
28
|
-
dln =
|
26
|
+
dln = math.log(r[1]/r[0])
|
29
27
|
mu = 0.3
|
30
28
|
offset = 0.0
|
31
29
|
bias = 0.0
|
@@ -62,6 +60,10 @@ def test_fht_agrees_with_fftlog(xp):
|
|
62
60
|
# test 3: positive bias
|
63
61
|
bias = 0.8
|
64
62
|
offset = fhtoffset(dln, mu, bias=bias)
|
63
|
+
# offset is a np.float64, which array-api-strict disallows
|
64
|
+
# even if it's technically a subclass of float
|
65
|
+
offset = float(offset)
|
66
|
+
|
65
67
|
ours = fht(a, dln, mu, offset=offset, bias=bias)
|
66
68
|
theirs = [-7.3436673558316850E+00, +0.1710271207817100E+00,
|
67
69
|
+0.1065374386206564E+00, -0.5121739602708132E-01,
|
@@ -77,6 +79,8 @@ def test_fht_agrees_with_fftlog(xp):
|
|
77
79
|
# test 4: negative bias
|
78
80
|
bias = -0.8
|
79
81
|
offset = fhtoffset(dln, mu, bias=bias)
|
82
|
+
offset = float(offset)
|
83
|
+
|
80
84
|
ours = fht(a, dln, mu, offset=offset, bias=bias)
|
81
85
|
theirs = [+0.8985777068568745E-05, +0.4074898209936099E-04,
|
82
86
|
+0.2123969254700955E-03, +0.1009558244834628E-02,
|
@@ -103,6 +107,9 @@ def test_fht_identity(n, bias, offset, optimal, xp):
|
|
103
107
|
|
104
108
|
if optimal:
|
105
109
|
offset = fhtoffset(dln, mu, initial=offset, bias=bias)
|
110
|
+
# offset is a np.float64, which array-api-strict disallows
|
111
|
+
# even if it's technically a subclass of float
|
112
|
+
offset = float(offset)
|
106
113
|
|
107
114
|
A = fht(a, dln, mu, offset=offset, bias=bias)
|
108
115
|
a_ = ifht(A, dln, mu, offset=offset, bias=bias)
|
@@ -163,9 +170,12 @@ def test_fht_exact(n, xp):
|
|
163
170
|
r = np.logspace(-2, 2, n)
|
164
171
|
a = xp.asarray(r**gamma)
|
165
172
|
|
166
|
-
dln =
|
173
|
+
dln = math.log(r[1]/r[0])
|
167
174
|
|
168
175
|
offset = fhtoffset(dln, mu, initial=0.0, bias=gamma)
|
176
|
+
# offset is a np.float64, which array-api-strict disallows
|
177
|
+
# even if it's technically a subclass of float
|
178
|
+
offset = float(offset)
|
169
179
|
|
170
180
|
A = fht(a, dln, mu, offset=offset, bias=gamma)
|
171
181
|
|
@@ -188,13 +198,12 @@ def test_array_like(xp, op):
|
|
188
198
|
@pytest.mark.parametrize('n', [128, 129])
|
189
199
|
def test_gh_21661(xp, n):
|
190
200
|
one = xp.asarray(1.0)
|
191
|
-
xp_test = array_namespace(one)
|
192
201
|
mu = 0.0
|
193
202
|
r = np.logspace(-7, 1, n)
|
194
203
|
dln = math.log(r[1] / r[0])
|
195
204
|
offset = fhtoffset(dln, initial=-6 * np.log(10), mu=mu)
|
196
205
|
r = xp.asarray(r, dtype=one.dtype)
|
197
|
-
k = math.exp(offset) /
|
206
|
+
k = math.exp(offset) / xp.flip(r, axis=-1)
|
198
207
|
|
199
208
|
def f(x, mu):
|
200
209
|
return x**(mu + 1)*xp.exp(-x**2/2)
|
scipy/fft/tests/test_helper.py
CHANGED
@@ -10,13 +10,9 @@ from pytest import raises as assert_raises
|
|
10
10
|
import pytest
|
11
11
|
import numpy as np
|
12
12
|
import sys
|
13
|
-
from scipy.
|
14
|
-
from scipy._lib._array_api import (
|
15
|
-
xp_assert_close, get_xp_devices, xp_device, array_namespace
|
16
|
-
)
|
13
|
+
from scipy._lib._array_api import xp_assert_close, xp_device
|
17
14
|
from scipy import fft
|
18
15
|
|
19
|
-
pytestmark = [array_api_compatible, pytest.mark.usefixtures("skip_xp_backends")]
|
20
16
|
skip_xp_backends = pytest.mark.skip_xp_backends
|
21
17
|
|
22
18
|
_5_smooth_numbers = [
|
@@ -26,7 +22,8 @@ _5_smooth_numbers = [
|
|
26
22
|
2**3 * 3**3 * 5**2,
|
27
23
|
]
|
28
24
|
|
29
|
-
|
25
|
+
@skip_xp_backends(np_only=True)
|
26
|
+
def test_next_fast_len(xp):
|
30
27
|
for n in _5_smooth_numbers:
|
31
28
|
assert_equal(next_fast_len(n), n)
|
32
29
|
|
@@ -56,7 +53,7 @@ def _assert_n_smooth(x, n):
|
|
56
53
|
@skip_xp_backends(np_only=True)
|
57
54
|
class TestNextFastLen:
|
58
55
|
|
59
|
-
def test_next_fast_len(self):
|
56
|
+
def test_next_fast_len(self, xp):
|
60
57
|
np.random.seed(1234)
|
61
58
|
|
62
59
|
def nums():
|
@@ -71,14 +68,14 @@ class TestNextFastLen:
|
|
71
68
|
m = next_fast_len(n, True)
|
72
69
|
_assert_n_smooth(m, 5)
|
73
70
|
|
74
|
-
def test_np_integers(self):
|
71
|
+
def test_np_integers(self, xp):
|
75
72
|
ITYPES = [np.int16, np.int32, np.int64, np.uint16, np.uint32, np.uint64]
|
76
73
|
for ityp in ITYPES:
|
77
74
|
x = ityp(12345)
|
78
75
|
testN = next_fast_len(x)
|
79
76
|
assert_equal(testN, next_fast_len(int(x)))
|
80
77
|
|
81
|
-
def testnext_fast_len_small(self):
|
78
|
+
def testnext_fast_len_small(self, xp):
|
82
79
|
hams = {
|
83
80
|
1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 8, 8: 8, 14: 15, 15: 15,
|
84
81
|
16: 16, 17: 18, 1021: 1024, 1536: 1536, 51200000: 51200000
|
@@ -89,7 +86,7 @@ class TestNextFastLen:
|
|
89
86
|
@pytest.mark.xfail(sys.maxsize < 2**32,
|
90
87
|
reason="Hamming Numbers too large for 32-bit",
|
91
88
|
raises=ValueError, strict=True)
|
92
|
-
def testnext_fast_len_big(self):
|
89
|
+
def testnext_fast_len_big(self, xp):
|
93
90
|
hams = {
|
94
91
|
510183360: 510183360, 510183360 + 1: 512000000,
|
95
92
|
511000000: 512000000,
|
@@ -123,14 +120,14 @@ class TestNextFastLen:
|
|
123
120
|
for x, y in hams.items():
|
124
121
|
assert_equal(next_fast_len(x, True), y)
|
125
122
|
|
126
|
-
def test_keyword_args(self):
|
123
|
+
def test_keyword_args(self, xp):
|
127
124
|
assert next_fast_len(11, real=True) == 12
|
128
125
|
assert next_fast_len(target=7, real=False) == 7
|
129
126
|
|
130
127
|
@skip_xp_backends(np_only=True)
|
131
128
|
class TestPrevFastLen:
|
132
129
|
|
133
|
-
def test_prev_fast_len(self):
|
130
|
+
def test_prev_fast_len(self, xp):
|
134
131
|
np.random.seed(1234)
|
135
132
|
|
136
133
|
def nums():
|
@@ -145,7 +142,7 @@ class TestPrevFastLen:
|
|
145
142
|
m = prev_fast_len(n, True)
|
146
143
|
_assert_n_smooth(m, 5)
|
147
144
|
|
148
|
-
def test_np_integers(self):
|
145
|
+
def test_np_integers(self, xp):
|
149
146
|
ITYPES = [np.int16, np.int32, np.int64, np.uint16, np.uint32,
|
150
147
|
np.uint64]
|
151
148
|
for ityp in ITYPES:
|
@@ -156,7 +153,7 @@ class TestPrevFastLen:
|
|
156
153
|
testN = prev_fast_len(x, real=True)
|
157
154
|
assert_equal(testN, prev_fast_len(int(x), real=True))
|
158
155
|
|
159
|
-
def testprev_fast_len_small(self):
|
156
|
+
def testprev_fast_len_small(self, xp):
|
160
157
|
hams = {
|
161
158
|
1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 6, 8: 8, 14: 12, 15: 15,
|
162
159
|
16: 16, 17: 16, 1021: 1000, 1536: 1536, 51200000: 51200000
|
@@ -176,7 +173,7 @@ class TestPrevFastLen:
|
|
176
173
|
@pytest.mark.xfail(sys.maxsize < 2**32,
|
177
174
|
reason="Hamming Numbers too large for 32-bit",
|
178
175
|
raises=ValueError, strict=True)
|
179
|
-
def testprev_fast_len_big(self):
|
176
|
+
def testprev_fast_len_big(self, xp):
|
180
177
|
hams = {
|
181
178
|
# 2**6 * 3**13 * 5**1
|
182
179
|
510183360: 510183360,
|
@@ -238,7 +235,7 @@ class TestPrevFastLen:
|
|
238
235
|
for x, y in hams.items():
|
239
236
|
assert_equal(prev_fast_len(x, True), y)
|
240
237
|
|
241
|
-
def test_keyword_args(self):
|
238
|
+
def test_keyword_args(self, xp):
|
242
239
|
assert prev_fast_len(11, real=True) == 10
|
243
240
|
assert prev_fast_len(target=7, real=False) == 7
|
244
241
|
|
@@ -508,12 +505,7 @@ class TestFFTShift:
|
|
508
505
|
xp_assert_close(fft.ifftshift(shift_dim_both), freqs)
|
509
506
|
|
510
507
|
|
511
|
-
@skip_xp_backends("cupy",
|
512
|
-
reason="CuPy has not implemented the `device` param")
|
513
|
-
@skip_xp_backends("jax.numpy",
|
514
|
-
reason="JAX has not implemented the `device` param")
|
515
508
|
class TestFFTFreq:
|
516
|
-
|
517
509
|
def test_definition(self, xp):
|
518
510
|
x = xp.asarray([0, 1, 2, 3, 4, -4, -3, -2, -1], dtype=xp.float64)
|
519
511
|
x2 = xp.asarray([0, 1, 2, 3, 4, -5, -4, -3, -2, -1], dtype=xp.float64)
|
@@ -532,19 +524,13 @@ class TestFFTFreq:
|
|
532
524
|
y = 10 * xp.pi * fft.fftfreq(10, xp.pi, xp=xp)
|
533
525
|
xp_assert_close(y, x2, check_dtype=False)
|
534
526
|
|
535
|
-
def test_device(self, xp):
|
536
|
-
xp_test = array_namespace(xp.empty(0))
|
537
|
-
devices = get_xp_devices(xp)
|
527
|
+
def test_device(self, xp, devices):
|
538
528
|
for d in devices:
|
539
529
|
y = fft.fftfreq(9, xp=xp, device=d)
|
540
|
-
x =
|
530
|
+
x = xp.empty(0, device=d)
|
541
531
|
assert xp_device(y) == xp_device(x)
|
542
532
|
|
543
533
|
|
544
|
-
@skip_xp_backends("cupy",
|
545
|
-
reason="CuPy has not implemented the `device` param")
|
546
|
-
@skip_xp_backends("jax.numpy",
|
547
|
-
reason="JAX has not implemented the `device` param")
|
548
534
|
class TestRFFTFreq:
|
549
535
|
|
550
536
|
def test_definition(self, xp):
|
@@ -552,7 +538,7 @@ class TestRFFTFreq:
|
|
552
538
|
x2 = xp.asarray([0, 1, 2, 3, 4, 5], dtype=xp.float64)
|
553
539
|
|
554
540
|
# default dtype varies across backends
|
555
|
-
|
541
|
+
|
556
542
|
y = 9 * fft.rfftfreq(9, xp=xp)
|
557
543
|
xp_assert_close(y, x, check_dtype=False, check_namespace=True)
|
558
544
|
|
@@ -565,10 +551,8 @@ class TestRFFTFreq:
|
|
565
551
|
y = 10 * xp.pi * fft.rfftfreq(10, xp.pi, xp=xp)
|
566
552
|
xp_assert_close(y, x2, check_dtype=False)
|
567
553
|
|
568
|
-
def test_device(self, xp):
|
569
|
-
xp_test = array_namespace(xp.empty(0))
|
570
|
-
devices = get_xp_devices(xp)
|
554
|
+
def test_device(self, xp, devices):
|
571
555
|
for d in devices:
|
572
556
|
y = fft.rfftfreq(9, xp=xp, device=d)
|
573
|
-
x =
|
557
|
+
x = xp.empty(0, device=d)
|
574
558
|
assert xp_device(y) == xp_device(x)
|
@@ -6,10 +6,8 @@ import math
|
|
6
6
|
from scipy.fft import dct, idct, dctn, idctn, dst, idst, dstn, idstn
|
7
7
|
import scipy.fft as fft
|
8
8
|
from scipy import fftpack
|
9
|
-
from scipy.conftest import array_api_compatible
|
10
9
|
from scipy._lib._array_api import xp_copy, xp_assert_close
|
11
10
|
|
12
|
-
pytestmark = [array_api_compatible, pytest.mark.usefixtures("skip_xp_backends")]
|
13
11
|
skip_xp_backends = pytest.mark.skip_xp_backends
|
14
12
|
|
15
13
|
SQRT_2 = math.sqrt(2)
|
@@ -52,7 +50,7 @@ def test_identity_1d(forward, backward, type, n, axis, norm, orthogonalize, xp):
|
|
52
50
|
@pytest.mark.parametrize("norm", [None, 'backward', 'ortho', 'forward'])
|
53
51
|
@pytest.mark.parametrize("overwrite_x", [True, False])
|
54
52
|
def test_identity_1d_overwrite(forward, backward, type, dtype, axis, norm,
|
55
|
-
overwrite_x):
|
53
|
+
overwrite_x, xp):
|
56
54
|
# Test the identity f^-1(f(x)) == x
|
57
55
|
x = np.random.rand(7, 8).astype(dtype)
|
58
56
|
x_orig = x.copy()
|
@@ -130,7 +128,7 @@ def test_identity_nd(forward, backward, type, shape, axes, norm,
|
|
130
128
|
@pytest.mark.parametrize("norm", [None, 'backward', 'ortho', 'forward'])
|
131
129
|
@pytest.mark.parametrize("overwrite_x", [False, True])
|
132
130
|
def test_identity_nd_overwrite(forward, backward, type, shape, axes, dtype,
|
133
|
-
norm, overwrite_x):
|
131
|
+
norm, overwrite_x, xp):
|
134
132
|
# Test the identity f^-1(f(x)) == x
|
135
133
|
|
136
134
|
x = np.random.random(shape).astype(dtype)
|
@@ -193,8 +191,8 @@ def test_orthogonalize_noop(func, type, norm, xp):
|
|
193
191
|
|
194
192
|
|
195
193
|
@skip_xp_backends('jax.numpy',
|
196
|
-
reason='jax arrays do not support item assignment'
|
197
|
-
|
194
|
+
reason='jax arrays do not support item assignment')
|
195
|
+
@skip_xp_backends(cpu_only=True)
|
198
196
|
@pytest.mark.parametrize("norm", ["backward", "ortho", "forward"])
|
199
197
|
def test_orthogonalize_dct1(norm, xp):
|
200
198
|
x = xp.asarray(np.random.rand(100))
|
@@ -212,8 +210,8 @@ def test_orthogonalize_dct1(norm, xp):
|
|
212
210
|
|
213
211
|
|
214
212
|
@skip_xp_backends('jax.numpy',
|
215
|
-
reason='jax arrays do not support item assignment'
|
216
|
-
|
213
|
+
reason='jax arrays do not support item assignment')
|
214
|
+
@skip_xp_backends(cpu_only=True)
|
217
215
|
@pytest.mark.parametrize("norm", ["backward", "ortho", "forward"])
|
218
216
|
@pytest.mark.parametrize("func", [dct, dst])
|
219
217
|
def test_orthogonalize_dcst2(func, norm, xp):
|
@@ -226,8 +224,8 @@ def test_orthogonalize_dcst2(func, norm, xp):
|
|
226
224
|
|
227
225
|
|
228
226
|
@skip_xp_backends('jax.numpy',
|
229
|
-
reason='jax arrays do not support item assignment'
|
230
|
-
|
227
|
+
reason='jax arrays do not support item assignment')
|
228
|
+
@skip_xp_backends(cpu_only=True)
|
231
229
|
@pytest.mark.parametrize("norm", ["backward", "ortho", "forward"])
|
232
230
|
@pytest.mark.parametrize("func", [dct, dst])
|
233
231
|
def test_orthogonalize_dcst3(func, norm, xp):
|
Binary file
|
@@ -350,10 +350,8 @@ class _TestIRFFTBase:
|
|
350
350
|
y2 = rfft(irfft(x))
|
351
351
|
assert_equal(y1.dtype, self.rdt)
|
352
352
|
assert_equal(y2.dtype, self.rdt)
|
353
|
-
assert_array_almost_equal(y1, x, decimal=self.ndec,
|
354
|
-
|
355
|
-
assert_array_almost_equal(y2, x, decimal=self.ndec,
|
356
|
-
err_msg="size=%d" % size)
|
353
|
+
assert_array_almost_equal(y1, x, decimal=self.ndec, err_msg=f"size={size}")
|
354
|
+
assert_array_almost_equal(y2, x, decimal=self.ndec, err_msg=f"size={size}")
|
357
355
|
|
358
356
|
def test_size_accuracy(self):
|
359
357
|
# Sanity check for the accuracy for prime and non-prime sized inputs
|
@@ -11,8 +11,8 @@ from scipy.fftpack._realtransforms import (
|
|
11
11
|
|
12
12
|
# Matlab reference data
|
13
13
|
MDATA = np.load(join(dirname(__file__), 'test.npz'))
|
14
|
-
X = [MDATA['x
|
15
|
-
Y = [MDATA['y
|
14
|
+
X = [MDATA[f'x{i}'] for i in range(8)]
|
15
|
+
Y = [MDATA[f'y{i}'] for i in range(8)]
|
16
16
|
|
17
17
|
# FFTW reference data: the data are organized as follows:
|
18
18
|
# * SIZES is an array containing all available sizes
|
@@ -33,7 +33,7 @@ def fftw_dct_ref(type, size, dt):
|
|
33
33
|
data = FFTWDATA_SINGLE
|
34
34
|
else:
|
35
35
|
raise ValueError()
|
36
|
-
y = (data['dct_
|
36
|
+
y = (data[f'dct_{type}_{size}']).astype(dt)
|
37
37
|
return x, y, dt
|
38
38
|
|
39
39
|
|
@@ -46,7 +46,7 @@ def fftw_dst_ref(type, size, dt):
|
|
46
46
|
data = FFTWDATA_SINGLE
|
47
47
|
else:
|
48
48
|
raise ValueError()
|
49
|
-
y = (data['dst_
|
49
|
+
y = (data[f'dst_{type}_{size}']).astype(dt)
|
50
50
|
return x, y, dt
|
51
51
|
|
52
52
|
|
@@ -208,7 +208,7 @@ class _TestDCTBase:
|
|
208
208
|
# difference is due to fftw using a better algorithm w.r.t error
|
209
209
|
# propagation compared to the ones from fftpack.
|
210
210
|
assert_array_almost_equal(y / np.max(y), yr / np.max(y), decimal=self.dec,
|
211
|
-
err_msg="Size
|
211
|
+
err_msg=f"Size {i} failed")
|
212
212
|
|
213
213
|
def test_axis(self):
|
214
214
|
nt = 2
|
@@ -381,8 +381,7 @@ class _TestIDCTBase:
|
|
381
381
|
# difference is due to fftw using a better algorithm w.r.t error
|
382
382
|
# propagation compared to the ones from fftpack.
|
383
383
|
assert_array_almost_equal(x / np.max(x), xr / np.max(x), decimal=self.dec,
|
384
|
-
err_msg="Size
|
385
|
-
|
384
|
+
err_msg=f"Size {i} failed")
|
386
385
|
|
387
386
|
class TestIDCTIDouble(_TestIDCTBase):
|
388
387
|
def setup_method(self):
|
@@ -487,7 +486,7 @@ class _TestDSTBase:
|
|
487
486
|
# difference is due to fftw using a better algorithm w.r.t error
|
488
487
|
# propagation compared to the ones from fftpack.
|
489
488
|
assert_array_almost_equal(y / np.max(y), yr / np.max(y), decimal=self.dec,
|
490
|
-
err_msg="Size
|
489
|
+
err_msg=f"Size {i} failed")
|
491
490
|
|
492
491
|
|
493
492
|
class _TestDSTIBase(_TestDSTBase):
|
@@ -621,7 +620,7 @@ class _TestIDSTBase:
|
|
621
620
|
# difference is due to fftw using a better algorithm w.r.t error
|
622
621
|
# propagation compared to the ones from fftpack.
|
623
622
|
assert_array_almost_equal(x / np.max(x), xr / np.max(x), decimal=self.dec,
|
624
|
-
err_msg="Size
|
623
|
+
err_msg=f"Size {i} failed")
|
625
624
|
|
626
625
|
|
627
626
|
class TestIDSTIDouble(_TestIDSTBase):
|
scipy/integrate/_bvp.py
CHANGED
@@ -402,7 +402,9 @@ def solve_newton(n, m, h, col_fun, bc, jac, y, p, B, bvp_tol, bc_tol):
|
|
402
402
|
References
|
403
403
|
----------
|
404
404
|
.. [1] U. Ascher, R. Mattheij and R. Russell "Numerical Solution of
|
405
|
-
Boundary Value Problems for Ordinary Differential Equations"
|
405
|
+
Boundary Value Problems for Ordinary Differential Equations",
|
406
|
+
Philidelphia, PA: Society for Industrial and Applied Mathematics,
|
407
|
+
1995.
|
406
408
|
"""
|
407
409
|
# We know that the solution residuals at the middle points of the mesh
|
408
410
|
# are connected with collocation residuals r_middle = 1.5 * col_res / h.
|
@@ -872,9 +874,13 @@ def solve_bvp(fun, bc, x, y, p=None, S=None, fun_jac=None, bc_jac=None,
|
|
872
874
|
Control and the Maltab PSE", ACM Trans. Math. Softw., Vol. 27,
|
873
875
|
Number 3, pp. 299-316, 2001.
|
874
876
|
.. [2] L.F. Shampine, P. H. Muir and H. Xu, "A User-Friendly Fortran BVP
|
875
|
-
Solver".
|
877
|
+
Solver", J. Numer. Anal., Ind. Appl. Math. (JNAIAM), Vol. 1,
|
878
|
+
Number 2, pp. 201-217, 2006.
|
876
879
|
.. [3] U. Ascher, R. Mattheij and R. Russell "Numerical Solution of
|
877
|
-
Boundary Value Problems for Ordinary Differential Equations"
|
880
|
+
Boundary Value Problems for Ordinary Differential Equations",
|
881
|
+
Philidelphia, PA: Society for Industrial and Applied Mathematics,
|
882
|
+
1995.
|
883
|
+
:doi:`10.1137/1.9781611971231`
|
878
884
|
.. [4] `Cauchy-Riemann equations
|
879
885
|
<https://en.wikipedia.org/wiki/Cauchy-Riemann_equations>`_ on
|
880
886
|
Wikipedia.
|
scipy/integrate/_cubature.py
CHANGED
@@ -10,7 +10,7 @@ from scipy._lib._array_api import (
|
|
10
10
|
array_namespace,
|
11
11
|
xp_size,
|
12
12
|
xp_copy,
|
13
|
-
|
13
|
+
xp_promote
|
14
14
|
)
|
15
15
|
from scipy._lib._util import MapWrapper
|
16
16
|
|
@@ -323,7 +323,8 @@ def cubature(f, a, b, *, rule="gk21", rtol=1e-8, atol=0, max_subdivisions=10000,
|
|
323
323
|
|
324
324
|
# Convert a and b to arrays and convert each point in points to an array, promoting
|
325
325
|
# each to a common floating dtype.
|
326
|
-
a, b, *points =
|
326
|
+
a, b, *points = xp_promote(a, b, *points, broadcast=True, force_floating=True,
|
327
|
+
xp=xp)
|
327
328
|
result_dtype = a.dtype
|
328
329
|
|
329
330
|
if xp_size(a) == 0 or xp_size(b) == 0:
|
Binary file
|
Binary file
|
scipy/integrate/_ode.py
CHANGED
@@ -826,7 +826,7 @@ class IntegratorBase:
|
|
826
826
|
# XXX: __str__ method for getting visual state of the integrator
|
827
827
|
|
828
828
|
|
829
|
-
def
|
829
|
+
def _banded_jac_wrapper(jacfunc, ml, jac_params):
|
830
830
|
"""
|
831
831
|
Wrap a banded Jacobian function with a function that pads
|
832
832
|
the Jacobian with `ml` rows of zeros.
|
@@ -1007,7 +1007,7 @@ class vode(IntegratorBase):
|
|
1007
1007
|
# Banded Jacobian. Wrap the user-provided function with one
|
1008
1008
|
# that pads the Jacobian array with the extra `self.ml` rows
|
1009
1009
|
# required by the f2py-generated wrapper.
|
1010
|
-
jac =
|
1010
|
+
jac = _banded_jac_wrapper(jac, self.ml, jac_params)
|
1011
1011
|
|
1012
1012
|
args = ((f, jac, y0, t0, t1) + tuple(self.call_args) +
|
1013
1013
|
(f_params, jac_params))
|
@@ -1351,6 +1351,13 @@ class lsoda(IntegratorBase):
|
|
1351
1351
|
else:
|
1352
1352
|
self.initialized = True
|
1353
1353
|
self.acquire_new_handle()
|
1354
|
+
|
1355
|
+
if jac is not None and self.ml is not None and self.ml > 0:
|
1356
|
+
# Banded Jacobian. Wrap the user-provided function with one
|
1357
|
+
# that pads the Jacobian array with the extra `self.ml` rows
|
1358
|
+
# required by the f2py-generated wrapper.
|
1359
|
+
jac = _banded_jac_wrapper(jac, self.ml, jac_params)
|
1360
|
+
|
1354
1361
|
args = [f, y0, t0, t1] + self.call_args[:-1] + \
|
1355
1362
|
[jac, self.call_args[-1], f_params, 0, jac_params]
|
1356
1363
|
|
Binary file
|
scipy/integrate/_quad_vec.py
CHANGED
@@ -3,7 +3,6 @@ import copy
|
|
3
3
|
import heapq
|
4
4
|
import collections
|
5
5
|
import functools
|
6
|
-
import warnings
|
7
6
|
|
8
7
|
import numpy as np
|
9
8
|
|
@@ -144,9 +143,9 @@ def quad_vec(f, a, b, epsabs=1e-200, epsrel=1e-8, norm='2', cache_size=100e6,
|
|
144
143
|
Options: 'gk21' (Gauss-Kronrod 21-point rule),
|
145
144
|
'gk15' (Gauss-Kronrod 15-point rule),
|
146
145
|
'trapezoid' (composite trapezoid rule).
|
147
|
-
Default: 'gk21' for finite intervals and 'gk15' for (semi-)infinite
|
146
|
+
Default: 'gk21' for finite intervals and 'gk15' for (semi-)infinite.
|
148
147
|
full_output : bool, optional
|
149
|
-
Return an additional ``info``
|
148
|
+
Return an additional ``info`` object.
|
150
149
|
args : tuple, optional
|
151
150
|
Extra arguments to pass to function, if any.
|
152
151
|
|
@@ -158,25 +157,25 @@ def quad_vec(f, a, b, epsabs=1e-200, epsrel=1e-8, norm='2', cache_size=100e6,
|
|
158
157
|
Estimate for the result
|
159
158
|
err : float
|
160
159
|
Error estimate for the result in the given norm
|
161
|
-
info :
|
160
|
+
info : object
|
162
161
|
Returned only when ``full_output=True``.
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
162
|
+
Result object with the attributes:
|
163
|
+
|
164
|
+
success : bool
|
165
|
+
Whether integration reached target precision.
|
166
|
+
status : int
|
167
|
+
Indicator for convergence, success (0),
|
168
|
+
failure (1), and failure due to rounding error (2).
|
169
|
+
neval : int
|
170
|
+
Number of function evaluations.
|
171
|
+
intervals : ndarray, shape (num_intervals, 2)
|
172
|
+
Start and end points of subdivision intervals.
|
173
|
+
integrals : ndarray, shape (num_intervals, ...)
|
174
|
+
Integral for each interval.
|
175
|
+
Note that at most ``cache_size`` values are recorded,
|
176
|
+
and the array may contains *nan* for missing items.
|
177
|
+
errors : ndarray, shape (num_intervals,)
|
178
|
+
Estimated integration error for each interval.
|
180
179
|
|
181
180
|
Notes
|
182
181
|
-----
|
@@ -310,17 +309,10 @@ def quad_vec(f, a, b, epsabs=1e-200, epsrel=1e-8, norm='2', cache_size=100e6,
|
|
310
309
|
_quadrature = {None: _quadrature_gk21,
|
311
310
|
'gk21': _quadrature_gk21,
|
312
311
|
'gk15': _quadrature_gk15,
|
313
|
-
'trapz': _quadrature_trapezoid, # alias for backcompat
|
314
312
|
'trapezoid': _quadrature_trapezoid}[quadrature]
|
315
313
|
except KeyError as e:
|
316
314
|
raise ValueError(f"unknown quadrature {quadrature!r}") from e
|
317
315
|
|
318
|
-
if quadrature == "trapz":
|
319
|
-
msg = ("`quadrature='trapz'` is deprecated in favour of "
|
320
|
-
"`quadrature='trapezoid' and will raise an error from SciPy 1.16.0 "
|
321
|
-
"onwards.")
|
322
|
-
warnings.warn(msg, DeprecationWarning, stacklevel=2)
|
323
|
-
|
324
316
|
# Initial interval set
|
325
317
|
if points is None:
|
326
318
|
initial_intervals = [(a, b)]
|
@@ -347,7 +339,7 @@ def quad_vec(f, a, b, epsabs=1e-200, epsrel=1e-8, norm='2', cache_size=100e6,
|
|
347
339
|
neval += _quadrature.num_eval
|
348
340
|
|
349
341
|
if global_integral is None:
|
350
|
-
if isinstance(ig,
|
342
|
+
if isinstance(ig, float | complex):
|
351
343
|
# Specialize for scalars
|
352
344
|
if norm_func in (_max_norm, np.linalg.norm):
|
353
345
|
norm_func = abs
|
Binary file
|
scipy/integrate/_quadpack_py.py
CHANGED
@@ -211,9 +211,9 @@ def quad(func, a, b, args=(), full_output=0, epsabs=1.49e-8, epsrel=1.49e-8,
|
|
211
211
|
For the 'cos' and 'sin' weighting, additional inputs and outputs are
|
212
212
|
available.
|
213
213
|
|
214
|
-
For finite integration limits, the integration
|
215
|
-
Clenshaw-Curtis method which uses Chebyshev moments.
|
216
|
-
calculations, these moments are saved in the output dictionary:
|
214
|
+
For weighted integrals with finite integration limits, the integration
|
215
|
+
is performed using a Clenshaw-Curtis method, which uses Chebyshev moments.
|
216
|
+
For repeated calculations, these moments are saved in the output dictionary:
|
217
217
|
|
218
218
|
'momcom'
|
219
219
|
The maximum level of Chebyshev moments that have been computed,
|
@@ -284,7 +284,8 @@ def quad(func, a, b, args=(), full_output=0, epsabs=1.49e-8, epsrel=1.49e-8,
|
|
284
284
|
is an integrator based on globally adaptive interval
|
285
285
|
subdivision in connection with extrapolation, which will
|
286
286
|
eliminate the effects of integrand singularities of
|
287
|
-
several types.
|
287
|
+
several types. The integration is performed using a 21-point Gauss-Kronrod
|
288
|
+
quadrature within each subinterval.
|
288
289
|
qagie
|
289
290
|
handles integration over infinite intervals. The infinite range is
|
290
291
|
mapped onto a finite interval and subsequently the same strategy as
|
@@ -745,7 +746,8 @@ def dblquad(func, a, b, gfun, hfun, args=(), epsabs=1.49e-8, epsrel=1.49e-8):
|
|
745
746
|
is an integrator based on globally adaptive interval
|
746
747
|
subdivision in connection with extrapolation, which will
|
747
748
|
eliminate the effects of integrand singularities of
|
748
|
-
several types.
|
749
|
+
several types. The integration is is performed using a 21-point Gauss-Kronrod
|
750
|
+
quadrature within each subinterval.
|
749
751
|
qagie
|
750
752
|
handles integration over infinite intervals. The infinite range is
|
751
753
|
mapped onto a finite interval and subsequently the same strategy as
|
@@ -877,7 +879,8 @@ def tplquad(func, a, b, gfun, hfun, qfun, rfun, args=(), epsabs=1.49e-8,
|
|
877
879
|
is an integrator based on globally adaptive interval
|
878
880
|
subdivision in connection with extrapolation, which will
|
879
881
|
eliminate the effects of integrand singularities of
|
880
|
-
several types.
|
882
|
+
several types. The integration is is performed using a 21-point Gauss-Kronrod
|
883
|
+
quadrature within each subinterval.
|
881
884
|
qagie
|
882
885
|
handles integration over infinite intervals. The infinite range is
|
883
886
|
mapped onto a finite interval and subsequently the same strategy as
|
@@ -1066,7 +1069,8 @@ def nquad(func, ranges, args=None, opts=None, full_output=False):
|
|
1066
1069
|
is an integrator based on globally adaptive interval
|
1067
1070
|
subdivision in connection with extrapolation, which will
|
1068
1071
|
eliminate the effects of integrand singularities of
|
1069
|
-
several types.
|
1072
|
+
several types. The integration is is performed using a 21-point Gauss-Kronrod
|
1073
|
+
quadrature within each subinterval.
|
1070
1074
|
qagie
|
1071
1075
|
handles integration over infinite intervals. The infinite range is
|
1072
1076
|
mapped onto a finite interval and subsequently the same strategy as
|
scipy/integrate/_quadrature.py
CHANGED
@@ -8,7 +8,7 @@ from collections.abc import Callable
|
|
8
8
|
from scipy.special import roots_legendre
|
9
9
|
from scipy.special import gammaln, logsumexp
|
10
10
|
from scipy._lib._util import _rng_spawn
|
11
|
-
from scipy._lib._array_api import _asarray, array_namespace,
|
11
|
+
from scipy._lib._array_api import _asarray, array_namespace, xp_result_type
|
12
12
|
|
13
13
|
|
14
14
|
__all__ = ['fixed_quad', 'romb',
|
@@ -124,7 +124,7 @@ def trapezoid(y, x=None, dx=1.0, axis=-1):
|
|
124
124
|
# Cannot just use the broadcasted arrays that are returned
|
125
125
|
# because trapezoid does not follow normal broadcasting rules
|
126
126
|
# cf. https://github.com/scipy/scipy/pull/21524#issuecomment-2354105942
|
127
|
-
result_dtype =
|
127
|
+
result_dtype = xp_result_type(y, force_floating=True, xp=xp)
|
128
128
|
nd = y.ndim
|
129
129
|
slice1 = [slice(None)]*nd
|
130
130
|
slice2 = [slice(None)]*nd
|
@@ -894,7 +894,7 @@ def romb(y, dx=1.0, axis=-1, show=False):
|
|
894
894
|
width = show[1]
|
895
895
|
except (TypeError, IndexError):
|
896
896
|
width = 8
|
897
|
-
formstr = "
|
897
|
+
formstr = f"%{width}.{precis}f"
|
898
898
|
|
899
899
|
title = "Richardson Extrapolation Table for Romberg Integration"
|
900
900
|
print(title, "=" * len(title), sep="\n", end="\n")
|
scipy/integrate/_rules/_base.py
CHANGED
@@ -463,8 +463,8 @@ def _split_subregion(a, b, xp, split_at=None):
|
|
463
463
|
if split_at is None:
|
464
464
|
split_at = (a + b) / 2
|
465
465
|
|
466
|
-
left = [xp.
|
467
|
-
right = [xp.
|
466
|
+
left = [xp.stack((a[i], split_at[i])) for i in range(a.shape[0])]
|
467
|
+
right = [xp.stack((split_at[i], b[i])) for i in range(b.shape[0])]
|
468
468
|
|
469
469
|
a_sub = _cartesian_product(left)
|
470
470
|
b_sub = _cartesian_product(right)
|