scipy 1.15.2__cp311-cp311-musllinux_1_2_aarch64.whl → 1.16.0__cp311-cp311-musllinux_1_2_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- scipy/__config__.py +13 -13
- scipy/__init__.py +3 -6
- scipy/_cyutility.cpython-311-aarch64-linux-musl.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-311-aarch64-linux-musl.so +0 -0
- scipy/_lib/_docscrape.py +1 -1
- scipy/_lib/_elementwise_iterative_method.py +15 -26
- scipy/_lib/_fpumode.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/_lib/_sparse.py +41 -0
- scipy/_lib/_test_ccallback.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/_lib/_test_deprecation_call.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/_lib/_test_deprecation_def.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/_lib/_testutils.py +6 -2
- scipy/_lib/_uarray/_uarray.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/_lib/_util.py +222 -125
- scipy/_lib/array_api_compat/__init__.py +4 -4
- scipy/_lib/array_api_compat/_internal.py +19 -6
- scipy/_lib/array_api_compat/common/__init__.py +1 -1
- scipy/_lib/array_api_compat/common/_aliases.py +365 -193
- scipy/_lib/array_api_compat/common/_fft.py +94 -64
- scipy/_lib/array_api_compat/common/_helpers.py +413 -180
- scipy/_lib/array_api_compat/common/_linalg.py +116 -40
- scipy/_lib/array_api_compat/common/_typing.py +179 -10
- scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
- scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
- scipy/_lib/array_api_compat/cupy/_info.py +16 -6
- scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
- scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
- scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
- scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
- scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
- scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
- scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
- scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
- scipy/_lib/array_api_compat/numpy/_info.py +36 -16
- scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
- scipy/_lib/array_api_compat/numpy/fft.py +11 -5
- scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
- scipy/_lib/array_api_compat/torch/__init__.py +3 -5
- scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
- scipy/_lib/array_api_compat/torch/_info.py +27 -16
- scipy/_lib/array_api_compat/torch/_typing.py +3 -0
- scipy/_lib/array_api_compat/torch/fft.py +17 -18
- scipy/_lib/array_api_compat/torch/linalg.py +16 -16
- scipy/_lib/array_api_extra/__init__.py +26 -3
- scipy/_lib/array_api_extra/_delegation.py +171 -0
- scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
- scipy/_lib/array_api_extra/_lib/_at.py +463 -0
- scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
- scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
- scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
- scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
- scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
- scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
- scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
- scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
- scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
- scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
- scipy/_lib/array_api_extra/testing.py +359 -0
- scipy/_lib/decorator.py +2 -2
- scipy/_lib/doccer.py +1 -7
- scipy/_lib/messagestream.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/_lib/pyprima/__init__.py +212 -0
- scipy/_lib/pyprima/cobyla/__init__.py +0 -0
- scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
- scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
- scipy/_lib/pyprima/cobyla/geometry.py +226 -0
- scipy/_lib/pyprima/cobyla/initialize.py +215 -0
- scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
- scipy/_lib/pyprima/cobyla/update.py +289 -0
- scipy/_lib/pyprima/common/__init__.py +0 -0
- scipy/_lib/pyprima/common/_bounds.py +34 -0
- scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
- scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
- scipy/_lib/pyprima/common/_project.py +173 -0
- scipy/_lib/pyprima/common/checkbreak.py +93 -0
- scipy/_lib/pyprima/common/consts.py +47 -0
- scipy/_lib/pyprima/common/evaluate.py +99 -0
- scipy/_lib/pyprima/common/history.py +38 -0
- scipy/_lib/pyprima/common/infos.py +30 -0
- scipy/_lib/pyprima/common/linalg.py +435 -0
- scipy/_lib/pyprima/common/message.py +290 -0
- scipy/_lib/pyprima/common/powalg.py +131 -0
- scipy/_lib/pyprima/common/preproc.py +277 -0
- scipy/_lib/pyprima/common/present.py +5 -0
- scipy/_lib/pyprima/common/ratio.py +54 -0
- scipy/_lib/pyprima/common/redrho.py +47 -0
- scipy/_lib/pyprima/common/selectx.py +296 -0
- scipy/_lib/tests/test__util.py +105 -121
- scipy/_lib/tests/test_array_api.py +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-311-aarch64-linux-musl.so +0 -0
- scipy/cluster/_optimal_leaf_ordering.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/cluster/_vq.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/cluster/hierarchy.py +393 -223
- scipy/cluster/tests/test_hierarchy.py +273 -335
- scipy/cluster/tests/test_vq.py +45 -61
- scipy/cluster/vq.py +39 -35
- scipy/conftest.py +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/pypocketfft.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/fft/_pocketfft/tests/test_basic.py +2 -4
- scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
- scipy/fft/_realtransforms.py +13 -0
- scipy/fft/tests/test_basic.py +27 -25
- scipy/fft/tests/test_fftlog.py +16 -7
- scipy/fft/tests/test_helper.py +18 -34
- scipy/fft/tests/test_real_transforms.py +8 -10
- scipy/fftpack/convolve.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/fftpack/tests/test_basic.py +2 -4
- scipy/fftpack/tests/test_real_transforms.py +8 -9
- scipy/integrate/_bvp.py +9 -3
- scipy/integrate/_cubature.py +3 -2
- scipy/integrate/_dop.cpython-311-aarch64-linux-musl.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-311-aarch64-linux-musl.so +0 -0
- scipy/integrate/_ode.py +9 -2
- scipy/integrate/_odepack.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/integrate/_quad_vec.py +21 -29
- scipy/integrate/_quadpack.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/integrate/_quadpack_py.py +11 -7
- scipy/integrate/_quadrature.py +3 -3
- scipy/integrate/_rules/_base.py +2 -2
- scipy/integrate/_tanhsinh.py +57 -54
- scipy/integrate/_test_multivariate.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/integrate/_test_odeint_banded.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/integrate/_vode.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/integrate/tests/test__quad_vec.py +0 -6
- scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
- scipy/integrate/tests/test_cubature.py +21 -35
- scipy/integrate/tests/test_quadrature.py +6 -8
- scipy/integrate/tests/test_tanhsinh.py +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-311-aarch64-linux-musl.so +0 -0
- scipy/interpolate/_dierckx.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/interpolate/_fitpack.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/interpolate/_fitpack2.py +9 -6
- scipy/interpolate/_fitpack_impl.py +32 -26
- scipy/interpolate/_fitpack_repro.py +23 -19
- scipy/interpolate/_interpnd.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/interpolate/_interpolate.py +30 -12
- scipy/interpolate/_ndbspline.py +13 -18
- scipy/interpolate/_ndgriddata.py +5 -8
- scipy/interpolate/_polyint.py +95 -31
- scipy/interpolate/_ppoly.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/interpolate/_rbf.py +2 -2
- scipy/interpolate/_rbfinterp.py +1 -1
- scipy/interpolate/_rbfinterp_pythran.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/interpolate/_rgi.py +31 -26
- scipy/interpolate/_rgi_cython.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/interpolate/dfitpack.py +0 -20
- scipy/interpolate/interpnd.py +1 -2
- scipy/interpolate/tests/test_bary_rational.py +2 -2
- scipy/interpolate/tests/test_bsplines.py +97 -1
- scipy/interpolate/tests/test_fitpack2.py +39 -1
- scipy/interpolate/tests/test_interpnd.py +32 -20
- scipy/interpolate/tests/test_interpolate.py +48 -4
- scipy/interpolate/tests/test_rgi.py +2 -1
- scipy/io/_fast_matrix_market/__init__.py +2 -0
- scipy/io/_fast_matrix_market/_fmm_core.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
- scipy/io/_harwell_boeing/hb.py +7 -11
- scipy/io/_idl.py +5 -7
- scipy/io/_netcdf.py +15 -5
- scipy/io/_test_fortran.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/io/arff/tests/test_arffread.py +3 -3
- scipy/io/matlab/__init__.py +5 -3
- scipy/io/matlab/_mio.py +4 -1
- scipy/io/matlab/_mio5.py +19 -13
- scipy/io/matlab/_mio5_utils.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/io/matlab/_mio_utils.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/io/matlab/_miobase.py +4 -1
- scipy/io/matlab/_streams.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/io/matlab/tests/test_mio.py +46 -18
- scipy/io/matlab/tests/test_mio_funcs.py +1 -1
- scipy/io/tests/test_mmio.py +7 -1
- scipy/io/tests/test_wavfile.py +41 -0
- scipy/io/wavfile.py +57 -10
- scipy/linalg/_basic.py +113 -86
- scipy/linalg/_cythonized_array_utils.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/linalg/_decomp.py +22 -9
- scipy/linalg/_decomp_cholesky.py +28 -13
- scipy/linalg/_decomp_cossin.py +45 -30
- scipy/linalg/_decomp_interpolative.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/linalg/_decomp_ldl.py +4 -1
- scipy/linalg/_decomp_lu.py +18 -6
- scipy/linalg/_decomp_lu_cython.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/linalg/_decomp_polar.py +2 -0
- scipy/linalg/_decomp_qr.py +6 -2
- scipy/linalg/_decomp_qz.py +3 -0
- scipy/linalg/_decomp_schur.py +3 -1
- scipy/linalg/_decomp_svd.py +13 -2
- scipy/linalg/_decomp_update.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/linalg/_expm_frechet.py +4 -0
- scipy/linalg/_fblas.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/linalg/_flapack.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/linalg/_linalg_pythran.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/linalg/_matfuncs.py +187 -4
- scipy/linalg/_matfuncs_expm.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +1 -99
- scipy/linalg/_matfuncs_sqrtm_triu.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/linalg/_procrustes.py +2 -0
- scipy/linalg/_sketches.py +17 -6
- scipy/linalg/_solve_toeplitz.cpython-311-aarch64-linux-musl.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-311-aarch64-linux-musl.so +0 -0
- scipy/linalg/cython_lapack.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/linalg/lapack.py +22 -2
- scipy/linalg/tests/_cython_examples/meson.build +7 -0
- scipy/linalg/tests/test_basic.py +31 -16
- scipy/linalg/tests/test_batch.py +588 -0
- scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
- scipy/linalg/tests/test_decomp.py +40 -3
- scipy/linalg/tests/test_decomp_cossin.py +14 -0
- scipy/linalg/tests/test_decomp_ldl.py +1 -1
- scipy/linalg/tests/test_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/_ctest.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/ndimage/_cytest.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/ndimage/_delegators.py +8 -2
- scipy/ndimage/_filters.py +453 -5
- scipy/ndimage/_interpolation.py +36 -6
- scipy/ndimage/_measurements.py +4 -2
- scipy/ndimage/_morphology.py +5 -0
- scipy/ndimage/_nd_image.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/ndimage/_ndimage_api.py +2 -1
- scipy/ndimage/_ni_docstrings.py +5 -1
- scipy/ndimage/_ni_label.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/ndimage/_ni_support.py +1 -5
- scipy/ndimage/_rank_filter_1d.cpython-311-aarch64-linux-musl.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-311-aarch64-linux-musl.so +0 -0
- scipy/optimize/_basinhopping.py +13 -7
- scipy/optimize/_bglu_dense.cpython-311-aarch64-linux-musl.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-311-aarch64-linux-musl.so +0 -0
- scipy/optimize/_dual_annealing.py +1 -1
- scipy/optimize/_elementwise.py +1 -4
- scipy/optimize/_group_columns.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/optimize/_highspy/_core.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/optimize/_highspy/_highs_options.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/optimize/_highspy/_highs_wrapper.py +6 -4
- scipy/optimize/_lbfgsb.cpython-311-aarch64-linux-musl.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-311-aarch64-linux-musl.so +0 -0
- scipy/optimize/_lsq/common.py +3 -3
- scipy/optimize/_lsq/dogbox.py +16 -2
- scipy/optimize/_lsq/givens_elimination.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/optimize/_lsq/least_squares.py +198 -126
- scipy/optimize/_lsq/lsq_linear.py +6 -6
- scipy/optimize/_lsq/trf.py +35 -8
- scipy/optimize/_milp.py +3 -1
- scipy/optimize/_minimize.py +105 -36
- scipy/optimize/_minpack.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/optimize/_minpack_py.py +21 -14
- scipy/optimize/_moduleTNC.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/optimize/_nnls.py +20 -21
- scipy/optimize/_nonlin.py +34 -3
- scipy/optimize/_numdiff.py +288 -110
- scipy/optimize/_optimize.py +86 -48
- scipy/optimize/_pava_pybind.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/optimize/_remove_redundancy.py +5 -5
- scipy/optimize/_root_scalar.py +1 -1
- scipy/optimize/_shgo.py +6 -0
- scipy/optimize/_shgo_lib/_complex.py +1 -1
- scipy/optimize/_slsqp_py.py +216 -124
- scipy/optimize/_slsqplib.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/optimize/_spectral.py +1 -1
- scipy/optimize/_tnc.py +8 -1
- scipy/optimize/_trlib/_trlib.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/optimize/_trustregion.py +20 -6
- scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
- scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
- scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
- scipy/optimize/_trustregion_constr/projections.py +12 -8
- scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
- scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
- scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
- scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
- scipy/optimize/_trustregion_exact.py +0 -1
- scipy/optimize/_zeros.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/optimize/_zeros_py.py +97 -17
- scipy/optimize/cython_optimize/_zeros.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/optimize/slsqp.py +0 -1
- scipy/optimize/tests/test__basinhopping.py +1 -1
- scipy/optimize/tests/test__differential_evolution.py +4 -4
- scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
- scipy/optimize/tests/test__numdiff.py +66 -22
- scipy/optimize/tests/test__remove_redundancy.py +2 -2
- scipy/optimize/tests/test__shgo.py +9 -1
- scipy/optimize/tests/test_bracket.py +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-311-aarch64-linux-musl.so +0 -0
- scipy/signal/_peak_finding_utils.cpython-311-aarch64-linux-musl.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-311-aarch64-linux-musl.so +0 -0
- scipy/signal/_sosfilt.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/signal/_spectral_py.py +230 -50
- scipy/signal/_spline.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/signal/_spline_filters.py +108 -68
- scipy/signal/_support_alternative_backends.py +73 -0
- scipy/signal/_upfirdn.py +4 -1
- scipy/signal/_upfirdn_apply.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/signal/_waveforms.py +2 -11
- scipy/signal/_wavelets.py +1 -1
- scipy/signal/fir_filter_design.py +1 -0
- scipy/signal/spline.py +4 -11
- scipy/signal/tests/_scipy_spectral_test_shim.py +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-311-aarch64-linux-musl.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-311-aarch64-linux-musl.so +0 -0
- scipy/sparse/_sputils.py +37 -22
- scipy/sparse/base.py +0 -9
- scipy/sparse/bsr.py +0 -14
- scipy/sparse/compressed.py +0 -23
- scipy/sparse/construct.py +0 -6
- scipy/sparse/coo.py +0 -14
- scipy/sparse/csc.py +0 -3
- scipy/sparse/csgraph/_flow.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_matching.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_reordering.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_shortest_path.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_tools.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/_traversal.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/sparse/csgraph/tests/test_matching.py +14 -2
- scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
- scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
- scipy/sparse/csr.py +0 -5
- scipy/sparse/data.py +1 -6
- scipy/sparse/dia.py +0 -7
- scipy/sparse/dok.py +0 -10
- scipy/sparse/linalg/_dsolve/_superlu.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
- scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
- scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-311-aarch64-linux-musl.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-311-aarch64-linux-musl.so +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/sparse/linalg/_propack/_spropack.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cpython-311-aarch64-linux-musl.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-311-aarch64-linux-musl.so +0 -0
- scipy/spatial/_distance_pybind.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/spatial/_distance_wrap.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/spatial/_hausdorff.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/spatial/_qhull.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/spatial/_voronoi.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/spatial/distance.py +49 -42
- scipy/spatial/tests/test_distance.py +15 -1
- scipy/spatial/tests/test_kdtree.py +1 -0
- scipy/spatial/tests/test_qhull.py +106 -2
- scipy/spatial/transform/__init__.py +5 -3
- scipy/spatial/transform/_rigid_transform.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/spatial/transform/_rotation.cpython-311-aarch64-linux-musl.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-311-aarch64-linux-musl.so +0 -0
- scipy/special/_ellip_harm_2.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/special/_gufuncs.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/special/_logsumexp.py +83 -69
- scipy/special/_orthogonal.pyi +1 -1
- scipy/special/_specfun.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/special/_special_ufuncs.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/special/_spherical_bessel.py +4 -4
- scipy/special/_support_alternative_backends.py +212 -119
- scipy/special/_test_internal.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/special/_testutils.py +4 -4
- scipy/special/_ufuncs.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/special/_ufuncs.pyi +1 -0
- scipy/special/_ufuncs.pyx +215 -1400
- scipy/special/_ufuncs_cxx.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/special/_ufuncs_cxx.pxd +2 -15
- scipy/special/_ufuncs_cxx.pyx +5 -44
- scipy/special/_ufuncs_cxx_defs.h +2 -16
- scipy/special/_ufuncs_defs.h +0 -8
- scipy/special/cython_special.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/special/cython_special.pxd +1 -1
- scipy/special/tests/_cython_examples/meson.build +10 -1
- scipy/special/tests/test_basic.py +153 -20
- scipy/special/tests/test_boost_ufuncs.py +3 -0
- scipy/special/tests/test_cdflib.py +35 -11
- scipy/special/tests/test_gammainc.py +16 -0
- scipy/special/tests/test_hyp2f1.py +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-311-aarch64-linux-musl.so +0 -0
- scipy/stats/_axis_nan_policy.py +5 -12
- scipy/stats/_biasedurn.cpython-311-aarch64-linux-musl.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-311-aarch64-linux-musl.so +0 -0
- scipy/stats/_morestats.py +118 -73
- scipy/stats/_mstats_basic.py +13 -17
- scipy/stats/_mstats_extras.py +8 -8
- scipy/stats/_multivariate.py +89 -113
- scipy/stats/_new_distributions.py +97 -20
- scipy/stats/_page_trend_test.py +12 -5
- scipy/stats/_probability_distribution.py +265 -43
- scipy/stats/_qmc.py +14 -9
- scipy/stats/_qmc_cy.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/stats/_qmvnt.py +16 -95
- scipy/stats/_qmvnt_cy.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/rcont.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/stats/_resampling.py +5 -30
- scipy/stats/_sampling.py +1 -1
- scipy/stats/_sobol.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/stats/_stats.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/stats/_stats_mstats_common.py +21 -2
- scipy/stats/_stats_py.py +551 -477
- scipy/stats/_stats_pythran.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/stats/_unuran/unuran_wrapper.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
- scipy/stats/_variation.py +6 -8
- scipy/stats/_wilcoxon.py +13 -7
- scipy/stats/tests/common_tests.py +6 -4
- scipy/stats/tests/test_axis_nan_policy.py +62 -24
- scipy/stats/tests/test_continued_fraction.py +173 -0
- scipy/stats/tests/test_continuous.py +379 -60
- scipy/stats/tests/test_continuous_basic.py +18 -12
- scipy/stats/tests/test_discrete_basic.py +14 -8
- scipy/stats/tests/test_discrete_distns.py +16 -16
- scipy/stats/tests/test_distributions.py +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 +1316 -1323
- scipy.libs/libgcc_s-2d945d6c.so.1 +0 -0
- scipy.libs/libgfortran-67378ab2.so.5.0.0 +0 -0
- scipy.libs/{libstdc++-1b614e01.so.6.0.32 → libstdc++-85f2cd6d.so.6.0.33} +0 -0
- scipy/_lib/array_api_extra/_funcs.py +0 -484
- scipy/_lib/array_api_extra/_typing.py +0 -8
- scipy/interpolate/_bspl.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/optimize/_cobyla.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/optimize/_cython_nnls.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/optimize/_slsqp.cpython-311-aarch64-linux-musl.so +0 -0
- scipy/spatial/qhull_src/COPYING.txt +0 -38
- scipy/special/libsf_error_state.so +0 -0
- scipy/special/tests/test_log_softmax.py +0 -109
- scipy/special/tests/test_xsf_cuda.py +0 -114
- scipy/special/xsf/binom.h +0 -89
- scipy/special/xsf/cdflib.h +0 -100
- scipy/special/xsf/cephes/airy.h +0 -307
- scipy/special/xsf/cephes/besselpoly.h +0 -51
- scipy/special/xsf/cephes/beta.h +0 -257
- scipy/special/xsf/cephes/cbrt.h +0 -131
- scipy/special/xsf/cephes/chbevl.h +0 -85
- scipy/special/xsf/cephes/chdtr.h +0 -193
- scipy/special/xsf/cephes/const.h +0 -87
- scipy/special/xsf/cephes/ellie.h +0 -293
- scipy/special/xsf/cephes/ellik.h +0 -251
- scipy/special/xsf/cephes/ellpe.h +0 -107
- scipy/special/xsf/cephes/ellpk.h +0 -117
- scipy/special/xsf/cephes/expn.h +0 -260
- scipy/special/xsf/cephes/gamma.h +0 -398
- scipy/special/xsf/cephes/hyp2f1.h +0 -596
- scipy/special/xsf/cephes/hyperg.h +0 -361
- scipy/special/xsf/cephes/i0.h +0 -149
- scipy/special/xsf/cephes/i1.h +0 -158
- scipy/special/xsf/cephes/igam.h +0 -421
- scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
- scipy/special/xsf/cephes/igami.h +0 -313
- scipy/special/xsf/cephes/j0.h +0 -225
- scipy/special/xsf/cephes/j1.h +0 -198
- scipy/special/xsf/cephes/jv.h +0 -715
- scipy/special/xsf/cephes/k0.h +0 -164
- scipy/special/xsf/cephes/k1.h +0 -163
- scipy/special/xsf/cephes/kn.h +0 -243
- scipy/special/xsf/cephes/lanczos.h +0 -112
- scipy/special/xsf/cephes/ndtr.h +0 -275
- scipy/special/xsf/cephes/poch.h +0 -85
- scipy/special/xsf/cephes/polevl.h +0 -167
- scipy/special/xsf/cephes/psi.h +0 -194
- scipy/special/xsf/cephes/rgamma.h +0 -111
- scipy/special/xsf/cephes/scipy_iv.h +0 -811
- scipy/special/xsf/cephes/shichi.h +0 -248
- scipy/special/xsf/cephes/sici.h +0 -224
- scipy/special/xsf/cephes/sindg.h +0 -221
- scipy/special/xsf/cephes/tandg.h +0 -139
- scipy/special/xsf/cephes/trig.h +0 -58
- scipy/special/xsf/cephes/unity.h +0 -186
- scipy/special/xsf/cephes/zeta.h +0 -172
- scipy/special/xsf/config.h +0 -304
- scipy/special/xsf/digamma.h +0 -205
- scipy/special/xsf/error.h +0 -57
- scipy/special/xsf/evalpoly.h +0 -47
- scipy/special/xsf/expint.h +0 -266
- scipy/special/xsf/hyp2f1.h +0 -694
- scipy/special/xsf/iv_ratio.h +0 -173
- scipy/special/xsf/lambertw.h +0 -150
- scipy/special/xsf/loggamma.h +0 -163
- scipy/special/xsf/sici.h +0 -200
- scipy/special/xsf/tools.h +0 -427
- scipy/special/xsf/trig.h +0 -164
- scipy/special/xsf/wright_bessel.h +0 -843
- scipy/special/xsf/zlog1.h +0 -35
- scipy/stats/_mvn.cpython-311-aarch64-linux-musl.so +0 -0
- scipy.libs/libgcc_s-7393e603.so.1 +0 -0
- scipy.libs/libgfortran-eb933d8e.so.5.0.0 +0 -0
- {scipy-1.15.2.dist-info → scipy-1.16.0.dist-info}/WHEEL +0 -0
@@ -11,10 +11,8 @@ from scipy._lib._array_api import (
|
|
11
11
|
np_compat,
|
12
12
|
is_array_api_strict,
|
13
13
|
)
|
14
|
-
from scipy.conftest import array_api_compatible
|
15
|
-
|
16
14
|
from scipy.integrate import cubature
|
17
|
-
|
15
|
+
from scipy.integrate._cubature import _InfiniteLimitsTransform
|
18
16
|
from scipy.integrate._rules import (
|
19
17
|
Rule, FixedRule,
|
20
18
|
NestedFixedRule,
|
@@ -22,10 +20,8 @@ from scipy.integrate._rules import (
|
|
22
20
|
GenzMalikCubature,
|
23
21
|
)
|
24
22
|
|
25
|
-
from scipy.integrate._cubature import _InfiniteLimitsTransform
|
26
|
-
|
27
|
-
pytestmark = [pytest.mark.usefixtures("skip_xp_backends"),]
|
28
23
|
skip_xp_backends = pytest.mark.skip_xp_backends
|
24
|
+
boolean_index_skip_reason = 'JAX/Dask arrays do not support boolean assignment.'
|
29
25
|
|
30
26
|
# The integrands ``genz_malik_1980_*`` come from the paper:
|
31
27
|
# A.C. Genz, A.A. Malik, Remarks on algorithm 006: An adaptive algorithm for
|
@@ -120,13 +116,10 @@ def genz_malik_1980_f_2_exact(a, b, alphas, betas, xp):
|
|
120
116
|
a = xp.reshape(a, (*([1]*(len(alphas.shape) - 1)), ndim))
|
121
117
|
b = xp.reshape(b, (*([1]*(len(alphas.shape) - 1)), ndim))
|
122
118
|
|
123
|
-
# `xp` is the unwrapped namespace, so `.atan` won't work for `xp = np` and np<2.
|
124
|
-
xp_test = array_namespace(a)
|
125
|
-
|
126
119
|
return (
|
127
120
|
(-1)**ndim * 1/xp.prod(alphas, axis=-1)
|
128
121
|
* xp.prod(
|
129
|
-
|
122
|
+
xp.atan((a - betas)/alphas) - xp.atan((b - betas)/alphas),
|
130
123
|
axis=-1,
|
131
124
|
)
|
132
125
|
)
|
@@ -229,7 +222,9 @@ def _eval_indefinite_integral(F, a, b, xp):
|
|
229
222
|
|
230
223
|
out = 0
|
231
224
|
for ind in itertools.product(range(2), repeat=ndim):
|
232
|
-
selected_points = xp.asarray(
|
225
|
+
selected_points = xp.asarray(
|
226
|
+
[float(points[i, j]) for i, j in zip(ind, range(ndim))]
|
227
|
+
)
|
233
228
|
out += pow(-1, sum(ind) + ndim) * F(selected_points)
|
234
229
|
|
235
230
|
return out
|
@@ -377,7 +372,6 @@ def f_with_problematic_points(x_arr, points, xp):
|
|
377
372
|
return xp.ones(x_arr.shape[0])
|
378
373
|
|
379
374
|
|
380
|
-
@array_api_compatible
|
381
375
|
class TestCubature:
|
382
376
|
"""
|
383
377
|
Tests related to the interface of `cubature`.
|
@@ -534,12 +528,13 @@ class TestCubature:
|
|
534
528
|
"gk21",
|
535
529
|
"genz-malik",
|
536
530
|
])
|
537
|
-
@array_api_compatible
|
538
531
|
class TestCubatureProblems:
|
539
532
|
"""
|
540
533
|
Tests that `cubature` gives the correct answer.
|
541
534
|
"""
|
542
535
|
|
536
|
+
@skip_xp_backends("dask.array",
|
537
|
+
reason="Dask hangs/takes a long time for some test cases")
|
543
538
|
@pytest.mark.parametrize("problem", [
|
544
539
|
# -- f1 --
|
545
540
|
(
|
@@ -786,6 +781,8 @@ class TestCubatureProblems:
|
|
786
781
|
err_msg=f"estimate_error={res.error}, subdivisions={res.subdivisions}",
|
787
782
|
)
|
788
783
|
|
784
|
+
@skip_xp_backends("dask.array",
|
785
|
+
reason="Dask hangs/takes a long time for some test cases")
|
789
786
|
@pytest.mark.parametrize("problem", [
|
790
787
|
(
|
791
788
|
# Function to integrate, like `f(x, *args)`
|
@@ -973,10 +970,8 @@ class TestCubatureProblems:
|
|
973
970
|
f"true_error={xp.abs(res.estimate - exact)}")
|
974
971
|
assert res.status == "converged", err_msg
|
975
972
|
|
976
|
-
@skip_xp_backends(
|
977
|
-
|
978
|
-
reasons=["transforms make use of indexing assignment"],
|
979
|
-
)
|
973
|
+
@pytest.mark.skip_xp_backends('jax.numpy', reason=boolean_index_skip_reason)
|
974
|
+
@pytest.mark.skip_xp_backends('dask.array', reason=boolean_index_skip_reason)
|
980
975
|
@pytest.mark.parametrize("problem", [
|
981
976
|
(
|
982
977
|
# Function to integrate
|
@@ -1123,10 +1118,8 @@ class TestCubatureProblems:
|
|
1123
1118
|
check_0d=False,
|
1124
1119
|
)
|
1125
1120
|
|
1126
|
-
@skip_xp_backends(
|
1127
|
-
|
1128
|
-
reasons=["transforms make use of indexing assignment"],
|
1129
|
-
)
|
1121
|
+
@pytest.mark.skip_xp_backends('jax.numpy', reason=boolean_index_skip_reason)
|
1122
|
+
@pytest.mark.skip_xp_backends('dask.array', reason=boolean_index_skip_reason)
|
1130
1123
|
@pytest.mark.parametrize("problem", [
|
1131
1124
|
(
|
1132
1125
|
# Function to integrate
|
@@ -1197,7 +1190,6 @@ class TestCubatureProblems:
|
|
1197
1190
|
)
|
1198
1191
|
|
1199
1192
|
|
1200
|
-
@array_api_compatible
|
1201
1193
|
class TestRules:
|
1202
1194
|
"""
|
1203
1195
|
Tests related to the general Rule interface (currently private).
|
@@ -1238,7 +1230,6 @@ class TestRules:
|
|
1238
1230
|
base_class.estimate(basic_1d_integrand, a, b, args=(xp,))
|
1239
1231
|
|
1240
1232
|
|
1241
|
-
@array_api_compatible
|
1242
1233
|
class TestRulesQuadrature:
|
1243
1234
|
"""
|
1244
1235
|
Tests underlying quadrature rules (ndim == 1).
|
@@ -1311,7 +1302,6 @@ class TestRulesQuadrature:
|
|
1311
1302
|
quadrature(1, xp=xp)
|
1312
1303
|
|
1313
1304
|
|
1314
|
-
@array_api_compatible
|
1315
1305
|
class TestRulesCubature:
|
1316
1306
|
"""
|
1317
1307
|
Tests underlying cubature rules (ndim >= 2).
|
@@ -1333,11 +1323,8 @@ class TestRulesCubature:
|
|
1333
1323
|
GenzMalikCubature(1, xp=xp)
|
1334
1324
|
|
1335
1325
|
|
1336
|
-
@
|
1337
|
-
@skip_xp_backends(
|
1338
|
-
"jax.numpy",
|
1339
|
-
reasons=["transforms make use of indexing assignment"],
|
1340
|
-
)
|
1326
|
+
@pytest.mark.skip_xp_backends('jax.numpy', reason=boolean_index_skip_reason)
|
1327
|
+
@pytest.mark.skip_xp_backends('dask.array', reason=boolean_index_skip_reason)
|
1341
1328
|
class TestTransformations:
|
1342
1329
|
@pytest.mark.parametrize(("a", "b", "points"), [
|
1343
1330
|
(
|
@@ -1355,19 +1342,18 @@ class TestTransformations:
|
|
1355
1342
|
transformation.
|
1356
1343
|
"""
|
1357
1344
|
|
1358
|
-
xp_compat = array_namespace(xp.empty(0))
|
1359
1345
|
points = [xp.asarray(p, dtype=xp.float64) for p in points]
|
1360
1346
|
|
1361
1347
|
f_transformed = _InfiniteLimitsTransform(
|
1362
1348
|
# Bind `points` and `xp` argument in f
|
1363
|
-
lambda x: f_with_problematic_points(x, points,
|
1364
|
-
xp.asarray(a, dtype=
|
1365
|
-
xp.asarray(b, dtype=
|
1366
|
-
xp=
|
1349
|
+
lambda x: f_with_problematic_points(x, points, xp),
|
1350
|
+
xp.asarray(a, dtype=xp.float64),
|
1351
|
+
xp.asarray(b, dtype=xp.float64),
|
1352
|
+
xp=xp,
|
1367
1353
|
)
|
1368
1354
|
|
1369
1355
|
for point in points:
|
1370
|
-
transformed_point = f_transformed.inv(
|
1356
|
+
transformed_point = f_transformed.inv(xp.reshape(point, (1, -1)))
|
1371
1357
|
|
1372
1358
|
with pytest.raises(Exception, match="called with a problematic point"):
|
1373
1359
|
f_transformed(transformed_point)
|
@@ -13,7 +13,7 @@ from scipy.integrate import (romb, newton_cotes,
|
|
13
13
|
from scipy.integrate._quadrature import _cumulative_simpson_unequal_intervals
|
14
14
|
|
15
15
|
from scipy import stats, special, integrate
|
16
|
-
from scipy.conftest import
|
16
|
+
from scipy.conftest import skip_xp_invalid_arg
|
17
17
|
from scipy._lib._array_api_no_0d import xp_assert_close
|
18
18
|
|
19
19
|
skip_xp_backends = pytest.mark.skip_xp_backends
|
@@ -269,7 +269,6 @@ class TestCumulative_trapezoid:
|
|
269
269
|
cumulative_trapezoid(y=[])
|
270
270
|
|
271
271
|
|
272
|
-
@array_api_compatible
|
273
272
|
class TestTrapezoid:
|
274
273
|
def test_simple(self, xp):
|
275
274
|
x = xp.arange(-10, 10, .1)
|
@@ -278,8 +277,7 @@ class TestTrapezoid:
|
|
278
277
|
xp_assert_close(r, xp.asarray(1.0))
|
279
278
|
|
280
279
|
@skip_xp_backends('jax.numpy',
|
281
|
-
|
282
|
-
@pytest.mark.usefixtures("skip_xp_backends")
|
280
|
+
reason="JAX arrays do not support item assignment")
|
283
281
|
def test_ndim(self, xp):
|
284
282
|
x = xp.linspace(0, 1, 3)
|
285
283
|
y = xp.linspace(0, 2, 8)
|
@@ -318,8 +316,7 @@ class TestTrapezoid:
|
|
318
316
|
xp_assert_close(r, qz)
|
319
317
|
|
320
318
|
@skip_xp_backends('jax.numpy',
|
321
|
-
|
322
|
-
@pytest.mark.usefixtures("skip_xp_backends")
|
319
|
+
reason="JAX arrays do not support item assignment")
|
323
320
|
def test_gh21908(self, xp):
|
324
321
|
# extended testing for n-dim arrays
|
325
322
|
x = xp.reshape(xp.linspace(0, 29, 30), (3, 10))
|
@@ -362,8 +359,7 @@ class TestTrapezoid:
|
|
362
359
|
assert_allclose(trapezoid(y, xm), r)
|
363
360
|
|
364
361
|
@skip_xp_backends(np_only=True,
|
365
|
-
|
366
|
-
@pytest.mark.usefixtures("skip_xp_backends")
|
362
|
+
reason='array-likes only supported for NumPy backend')
|
367
363
|
def test_array_like(self, xp):
|
368
364
|
x = list(range(5))
|
369
365
|
y = [t * t for t in x]
|
@@ -635,6 +631,7 @@ class TestCumulativeSimpson:
|
|
635
631
|
# `simpson` uses the trapezoidal rule
|
636
632
|
return theoretical_difference
|
637
633
|
|
634
|
+
@pytest.mark.fail_slow(10)
|
638
635
|
@pytest.mark.thread_unsafe
|
639
636
|
@pytest.mark.slow
|
640
637
|
@given(
|
@@ -666,6 +663,7 @@ class TestCumulativeSimpson:
|
|
666
663
|
res[..., 1:], ref[..., 1:] + theoretical_difference[..., 1:], atol=1e-16
|
667
664
|
)
|
668
665
|
|
666
|
+
@pytest.mark.fail_slow(10)
|
669
667
|
@pytest.mark.thread_unsafe
|
670
668
|
@pytest.mark.slow
|
671
669
|
@given(
|
@@ -6,7 +6,6 @@ import math
|
|
6
6
|
import numpy as np
|
7
7
|
from numpy.testing import assert_allclose
|
8
8
|
|
9
|
-
from scipy.conftest import array_api_compatible
|
10
9
|
import scipy._lib._elementwise_iterative_method as eim
|
11
10
|
from scipy._lib._array_api_no_0d import xp_assert_close, xp_assert_equal
|
12
11
|
from scipy._lib._array_api import array_namespace, xp_size, xp_ravel, xp_copy, is_numpy
|
@@ -20,6 +19,7 @@ def norm_pdf(x, xp=None):
|
|
20
19
|
xp = array_namespace(x) if xp is None else xp
|
21
20
|
return 1/(2*xp.pi)**0.5 * xp.exp(-x**2/2)
|
22
21
|
|
22
|
+
|
23
23
|
def norm_logpdf(x, xp=None):
|
24
24
|
xp = array_namespace(x) if xp is None else xp
|
25
25
|
return -0.5*math.log(2*xp.pi) - x**2/2
|
@@ -43,11 +43,12 @@ def _vectorize(xp):
|
|
43
43
|
return decorator
|
44
44
|
|
45
45
|
|
46
|
-
@array_api_compatible
|
47
|
-
@pytest.mark.usefixtures("skip_xp_backends")
|
48
46
|
@pytest.mark.skip_xp_backends(
|
49
47
|
'array_api_strict', reason='Currently uses fancy indexing assignment.'
|
50
48
|
)
|
49
|
+
@pytest.mark.skip_xp_backends(
|
50
|
+
'dask.array', reason='boolean indexing assignment'
|
51
|
+
)
|
51
52
|
@pytest.mark.skip_xp_backends(
|
52
53
|
'jax.numpy', reason='JAX arrays do not support item assignment.'
|
53
54
|
)
|
@@ -233,11 +234,11 @@ class TestTanhSinh:
|
|
233
234
|
logres = _tanhsinh(norm_logpdf, *limits, log=True)
|
234
235
|
xp_assert_close(xp.exp(logres.integral), ref, check_dtype=False)
|
235
236
|
# Transformation should not make the result complex unnecessarily
|
236
|
-
|
237
|
-
|
238
|
-
else xp_test.isdtype(logres.integral.dtype, "complex floating"))
|
237
|
+
assert (xp.isdtype(logres.integral.dtype, "real floating") if ref > 0
|
238
|
+
else xp.isdtype(logres.integral.dtype, "complex floating"))
|
239
239
|
|
240
|
-
|
240
|
+
atol = 2 * xp.finfo(res.error.dtype).eps
|
241
|
+
xp_assert_close(xp.exp(logres.error), res.error, atol=atol, check_dtype=False)
|
241
242
|
|
242
243
|
# 15 skipped intentionally; it's very difficult numerically
|
243
244
|
@pytest.mark.skip_xp_backends(np_only=True,
|
@@ -248,7 +249,7 @@ class TestTanhSinh:
|
|
248
249
|
rtol = 2e-8
|
249
250
|
res = _tanhsinh(f, 0, f.b, rtol=rtol)
|
250
251
|
assert_allclose(res.integral, f.ref, rtol=rtol)
|
251
|
-
if f_number not in {14}: # mildly underestimates error here
|
252
|
+
if f_number not in {7, 12, 14}: # mildly underestimates error here
|
252
253
|
true_error = abs(self.error(res.integral, f.ref)/res.integral)
|
253
254
|
assert true_error < res.error
|
254
255
|
|
@@ -299,18 +300,17 @@ class TestTanhSinh:
|
|
299
300
|
res = _tanhsinh(f, a, b, args=(p,))
|
300
301
|
refs = _tanhsinh_single(a, b, p)
|
301
302
|
|
302
|
-
xp_test = array_namespace(a) # need xp.stack, isdtype
|
303
303
|
attrs = ['integral', 'error', 'success', 'status', 'nfev', 'maxlevel']
|
304
304
|
for attr in attrs:
|
305
|
-
ref_attr =
|
305
|
+
ref_attr = xp.stack([getattr(ref, attr) for ref in refs])
|
306
306
|
res_attr = xp_ravel(getattr(res, attr))
|
307
307
|
xp_assert_close(res_attr, ref_attr, rtol=1e-15)
|
308
308
|
assert getattr(res, attr).shape == shape
|
309
309
|
|
310
|
-
assert
|
311
|
-
assert
|
312
|
-
assert
|
313
|
-
assert
|
310
|
+
assert xp.isdtype(res.success.dtype, 'bool')
|
311
|
+
assert xp.isdtype(res.status.dtype, 'integral')
|
312
|
+
assert xp.isdtype(res.nfev.dtype, 'integral')
|
313
|
+
assert xp.isdtype(res.maxlevel.dtype, 'integral')
|
314
314
|
assert xp.max(res.nfev) == f.feval
|
315
315
|
# maxlevel = 2 -> 3 function calls (2 initialization, 1 work)
|
316
316
|
assert xp.max(res.maxlevel) >= 2
|
@@ -383,12 +383,10 @@ class TestTanhSinh:
|
|
383
383
|
def test_options_and_result_attributes(self, xp):
|
384
384
|
# demonstrate that options are behaving as advertised and status
|
385
385
|
# messages are as intended
|
386
|
-
xp_test = array_namespace(xp.asarray(1.)) # need xp.atan
|
387
|
-
|
388
386
|
def f(x):
|
389
387
|
f.calls += 1
|
390
388
|
f.feval += xp_size(xp.asarray(x))
|
391
|
-
return x**2 *
|
389
|
+
return x**2 * xp.atan(x)
|
392
390
|
|
393
391
|
f.ref = xp.asarray((math.pi - 2 + 2 * math.log(2)) / 12, dtype=xp.float64)
|
394
392
|
|
@@ -560,21 +558,18 @@ class TestTanhSinh:
|
|
560
558
|
# integrand is evaluated or the integral/error estimates, only the
|
561
559
|
# number of function calls
|
562
560
|
|
563
|
-
# need `xp.concat`, `xp.atan`, and `xp.sort`
|
564
|
-
xp_test = array_namespace(xp.asarray(1.))
|
565
|
-
|
566
561
|
def f(x):
|
567
562
|
f.calls += 1
|
568
563
|
f.feval += xp_size(xp.asarray(x))
|
569
|
-
f.x =
|
570
|
-
return x**2 *
|
564
|
+
f.x = xp.concat((f.x, xp_ravel(x)))
|
565
|
+
return x**2 * xp.atan(x)
|
571
566
|
|
572
567
|
f.feval, f.calls, f.x = 0, 0, xp.asarray([])
|
573
568
|
|
574
569
|
a = xp.asarray(0, dtype=xp.float64)
|
575
570
|
b = xp.asarray(1, dtype=xp.float64)
|
576
571
|
ref = _tanhsinh(f, a, b, minlevel=0, maxlevel=maxlevel)
|
577
|
-
ref_x =
|
572
|
+
ref_x = xp.sort(f.x)
|
578
573
|
|
579
574
|
for minlevel in range(0, maxlevel + 1):
|
580
575
|
f.feval, f.calls, f.x = 0, 0, xp.asarray([])
|
@@ -587,7 +582,7 @@ class TestTanhSinh:
|
|
587
582
|
assert res.nfev == f.feval == f.x.shape[0]
|
588
583
|
assert f.calls == maxlevel - minlevel + 1 + 1 # 1 validation call
|
589
584
|
assert res.status == ref.status
|
590
|
-
xp_assert_equal(ref_x,
|
585
|
+
xp_assert_equal(ref_x, xp.sort(f.x))
|
591
586
|
|
592
587
|
def test_improper_integrals(self, xp):
|
593
588
|
# Test handling of infinite limits of integration (mixed with finite limits)
|
@@ -679,10 +674,9 @@ class TestTanhSinh:
|
|
679
674
|
def test_special_cases(self, xp):
|
680
675
|
# Test edge cases and other special cases
|
681
676
|
a, b = xp.asarray(0), xp.asarray(1)
|
682
|
-
xp_test = array_namespace(a, b) # need `xp.isdtype`
|
683
677
|
|
684
678
|
def f(x):
|
685
|
-
assert
|
679
|
+
assert xp.isdtype(x.dtype, "real floating")
|
686
680
|
return x
|
687
681
|
|
688
682
|
res = _tanhsinh(f, a, b)
|
@@ -753,11 +747,30 @@ class TestTanhSinh:
|
|
753
747
|
x[-1] = 1000
|
754
748
|
_tanhsinh(np.sin, 1, x)
|
755
749
|
|
750
|
+
def test_gh_22681_finite_error(self, xp):
|
751
|
+
# gh-22681 noted a case in which the error was NaN on some platforms;
|
752
|
+
# check that this does in fact fail in CI.
|
753
|
+
c1 = complex(12, -10)
|
754
|
+
c2 = complex(12, 39)
|
755
|
+
def f(t):
|
756
|
+
return xp.sin(c1 * (1 - t) + c2 * t)
|
757
|
+
a, b = xp.asarray(0., dtype=xp.float64), xp.asarray(1., dtype=xp.float64)
|
758
|
+
ref = _tanhsinh(f, a, b, atol=0, rtol=0, maxlevel=10)
|
759
|
+
assert xp.isfinite(ref.error)
|
760
|
+
# Previously, tanhsinh would not detect convergence
|
761
|
+
res = _tanhsinh(f, a, b, rtol=1e-14)
|
762
|
+
assert res.success
|
763
|
+
assert res.maxlevel < 5
|
764
|
+
xp_assert_close(res.integral, ref.integral, rtol=1e-15)
|
765
|
+
|
756
766
|
|
757
|
-
@
|
758
|
-
@pytest.mark.usefixtures("skip_xp_backends")
|
767
|
+
@pytest.mark.skip_xp_backends('torch', reason='data-apis/array-api-compat#271')
|
759
768
|
@pytest.mark.skip_xp_backends('array_api_strict', reason='No fancy indexing.')
|
760
769
|
@pytest.mark.skip_xp_backends('jax.numpy', reason='No mutation.')
|
770
|
+
@pytest.mark.skip_xp_backends(
|
771
|
+
'dask.array',
|
772
|
+
reason='Data-dependent shapes in boolean index assignment'
|
773
|
+
)
|
761
774
|
class TestNSum:
|
762
775
|
rng = np.random.default_rng(5895448232066142650)
|
763
776
|
p = rng.uniform(1, 10, size=10).tolist()
|
@@ -812,13 +825,21 @@ class TestNSum:
|
|
812
825
|
with pytest.raises(ValueError, match=message):
|
813
826
|
nsum(f, a, b, tolerances=dict(rtol=pytest))
|
814
827
|
|
815
|
-
with np.errstate(all='ignore'):
|
828
|
+
with (np.errstate(all='ignore')):
|
816
829
|
res = nsum(f, xp.asarray([np.nan, np.inf]), xp.asarray(1.))
|
817
|
-
assert
|
818
|
-
|
830
|
+
assert (res.status[0] == -1) and not res.success[0]
|
831
|
+
assert xp.isnan(res.sum[0]) and xp.isnan(res.error[0])
|
832
|
+
assert (res.status[1] == 0) and res.success[1]
|
833
|
+
assert res.sum[1] == res.error[1]
|
834
|
+
assert xp.all(res.nfev[0] == 1)
|
835
|
+
|
819
836
|
res = nsum(f, xp.asarray(10.), xp.asarray([np.nan, 1]))
|
820
|
-
assert
|
821
|
-
|
837
|
+
assert (res.status[0] == -1) and not res.success[0]
|
838
|
+
assert xp.isnan(res.sum[0]) and xp.isnan(res.error[0])
|
839
|
+
assert (res.status[1] == 0) and res.success[1]
|
840
|
+
assert res.sum[1] == res.error[1]
|
841
|
+
assert xp.all(res.nfev[0] == 1)
|
842
|
+
|
822
843
|
res = nsum(f, xp.asarray(1.), xp.asarray(10.),
|
823
844
|
step=xp.asarray([xp.nan, -xp.inf, xp.inf, -1, 0]))
|
824
845
|
assert xp.all((res.status == -1) & xp.isnan(res.sum)
|
@@ -852,8 +873,7 @@ class TestNSum:
|
|
852
873
|
res = nsum(f, a, b, args=args)
|
853
874
|
xp_assert_close(res.sum, ref)
|
854
875
|
xp_assert_equal(res.status, xp.zeros(ref.shape, dtype=xp.int32))
|
855
|
-
|
856
|
-
xp_assert_equal(res.success, xp.ones(ref.shape, dtype=xp_test.bool))
|
876
|
+
xp_assert_equal(res.success, xp.ones(ref.shape, dtype=xp.bool))
|
857
877
|
|
858
878
|
with np.errstate(divide='ignore'):
|
859
879
|
logres = nsum(lambda *args: xp.log(f(*args)),
|
@@ -891,8 +911,7 @@ class TestNSum:
|
|
891
911
|
ref_err = (high - low)/2 # error (assuming perfect quadrature)
|
892
912
|
|
893
913
|
# correct reference values where number of terms < maxterms
|
894
|
-
|
895
|
-
a, b, step = xp_test.broadcast_arrays(a, b, step)
|
914
|
+
a, b, step = xp.broadcast_arrays(a, b, step)
|
896
915
|
for i in np.ndindex(a.shape):
|
897
916
|
ai, bi, stepi = float(a[i]), float(b[i]), float(step[i])
|
898
917
|
if (bi - ai)/stepi + 1 <= maxterms:
|
@@ -949,10 +968,9 @@ class TestNSum:
|
|
949
968
|
xp_assert_close(xp_ravel(res_attr), xp.asarray(ref_attr), rtol=1e-15)
|
950
969
|
assert res_attr.shape == shape
|
951
970
|
|
952
|
-
|
953
|
-
assert
|
954
|
-
assert
|
955
|
-
assert xp_test.isdtype(res.nfev.dtype, 'integral')
|
971
|
+
assert xp.isdtype(res.success.dtype, 'bool')
|
972
|
+
assert xp.isdtype(res.status.dtype, 'integral')
|
973
|
+
assert xp.isdtype(res.nfev.dtype, 'integral')
|
956
974
|
if is_numpy(xp): # other libraries might have different number
|
957
975
|
assert int(xp.max(res.nfev)) == f.feval
|
958
976
|
|
@@ -1074,8 +1092,8 @@ class TestNSum:
|
|
1074
1092
|
return 1 / x
|
1075
1093
|
|
1076
1094
|
res = nsum(f, xp.asarray(0), xp.asarray(10), maxterms=0)
|
1077
|
-
assert xp.
|
1078
|
-
assert xp.
|
1095
|
+
assert xp.isinf(res.sum)
|
1096
|
+
assert xp.isinf(res.error)
|
1079
1097
|
assert res.status == -2
|
1080
1098
|
|
1081
1099
|
res = nsum(f, xp.asarray(0), xp.asarray(10), maxterms=1)
|