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
@@ -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)
|
@@ -756,18 +750,27 @@ class TestTanhSinh:
|
|
756
750
|
def test_gh_22681_finite_error(self, xp):
|
757
751
|
# gh-22681 noted a case in which the error was NaN on some platforms;
|
758
752
|
# check that this does in fact fail in CI.
|
759
|
-
|
760
|
-
|
753
|
+
c1 = complex(12, -10)
|
754
|
+
c2 = complex(12, 39)
|
761
755
|
def f(t):
|
762
|
-
return xp.sin(
|
763
|
-
|
764
|
-
|
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
765
|
|
766
766
|
|
767
|
-
@
|
768
|
-
@pytest.mark.usefixtures("skip_xp_backends")
|
767
|
+
@pytest.mark.skip_xp_backends('torch', reason='data-apis/array-api-compat#271')
|
769
768
|
@pytest.mark.skip_xp_backends('array_api_strict', reason='No fancy indexing.')
|
770
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
|
+
)
|
771
774
|
class TestNSum:
|
772
775
|
rng = np.random.default_rng(5895448232066142650)
|
773
776
|
p = rng.uniform(1, 10, size=10).tolist()
|
@@ -822,13 +825,21 @@ class TestNSum:
|
|
822
825
|
with pytest.raises(ValueError, match=message):
|
823
826
|
nsum(f, a, b, tolerances=dict(rtol=pytest))
|
824
827
|
|
825
|
-
with np.errstate(all='ignore'):
|
828
|
+
with (np.errstate(all='ignore')):
|
826
829
|
res = nsum(f, xp.asarray([np.nan, np.inf]), xp.asarray(1.))
|
827
|
-
assert
|
828
|
-
|
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
|
+
|
829
836
|
res = nsum(f, xp.asarray(10.), xp.asarray([np.nan, 1]))
|
830
|
-
assert
|
831
|
-
|
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
|
+
|
832
843
|
res = nsum(f, xp.asarray(1.), xp.asarray(10.),
|
833
844
|
step=xp.asarray([xp.nan, -xp.inf, xp.inf, -1, 0]))
|
834
845
|
assert xp.all((res.status == -1) & xp.isnan(res.sum)
|
@@ -862,8 +873,7 @@ class TestNSum:
|
|
862
873
|
res = nsum(f, a, b, args=args)
|
863
874
|
xp_assert_close(res.sum, ref)
|
864
875
|
xp_assert_equal(res.status, xp.zeros(ref.shape, dtype=xp.int32))
|
865
|
-
|
866
|
-
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))
|
867
877
|
|
868
878
|
with np.errstate(divide='ignore'):
|
869
879
|
logres = nsum(lambda *args: xp.log(f(*args)),
|
@@ -901,8 +911,7 @@ class TestNSum:
|
|
901
911
|
ref_err = (high - low)/2 # error (assuming perfect quadrature)
|
902
912
|
|
903
913
|
# correct reference values where number of terms < maxterms
|
904
|
-
|
905
|
-
a, b, step = xp_test.broadcast_arrays(a, b, step)
|
914
|
+
a, b, step = xp.broadcast_arrays(a, b, step)
|
906
915
|
for i in np.ndindex(a.shape):
|
907
916
|
ai, bi, stepi = float(a[i]), float(b[i]), float(step[i])
|
908
917
|
if (bi - ai)/stepi + 1 <= maxterms:
|
@@ -959,10 +968,9 @@ class TestNSum:
|
|
959
968
|
xp_assert_close(xp_ravel(res_attr), xp.asarray(ref_attr), rtol=1e-15)
|
960
969
|
assert res_attr.shape == shape
|
961
970
|
|
962
|
-
|
963
|
-
assert
|
964
|
-
assert
|
965
|
-
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')
|
966
974
|
if is_numpy(xp): # other libraries might have different number
|
967
975
|
assert int(xp.max(res.nfev)) == f.feval
|
968
976
|
|
@@ -1084,8 +1092,8 @@ class TestNSum:
|
|
1084
1092
|
return 1 / x
|
1085
1093
|
|
1086
1094
|
res = nsum(f, xp.asarray(0), xp.asarray(10), maxterms=0)
|
1087
|
-
assert xp.
|
1088
|
-
assert xp.
|
1095
|
+
assert xp.isinf(res.sum)
|
1096
|
+
assert xp.isinf(res.error)
|
1089
1097
|
assert res.status == -2
|
1090
1098
|
|
1091
1099
|
res = nsum(f, xp.asarray(0), xp.asarray(10), maxterms=1)
|
scipy/interpolate/__init__.py
CHANGED
@@ -5,13 +5,11 @@ Interpolation (:mod:`scipy.interpolate`)
|
|
5
5
|
|
6
6
|
.. currentmodule:: scipy.interpolate
|
7
7
|
|
8
|
-
Sub-package for objects used in interpolation.
|
8
|
+
Sub-package for functions and objects used in interpolation.
|
9
|
+
|
10
|
+
See the :ref:`user guide <tutorial-interpolate>` for recommendations on choosing a
|
11
|
+
routine, and other usage details.
|
9
12
|
|
10
|
-
As listed below, this sub-package contains spline functions and classes,
|
11
|
-
1-D and multidimensional (univariate and multivariate)
|
12
|
-
interpolation classes, Lagrange and Taylor polynomial interpolators, and
|
13
|
-
wrappers for `FITPACK <http://www.netlib.org/dierckx/>`__
|
14
|
-
and DFITPACK functions.
|
15
13
|
|
16
14
|
Univariate interpolation
|
17
15
|
========================
|
@@ -19,51 +17,53 @@ Univariate interpolation
|
|
19
17
|
.. autosummary::
|
20
18
|
:toctree: generated/
|
21
19
|
|
22
|
-
|
20
|
+
make_interp_spline
|
21
|
+
CubicSpline
|
22
|
+
PchipInterpolator
|
23
|
+
Akima1DInterpolator
|
24
|
+
FloaterHormannInterpolator
|
23
25
|
BarycentricInterpolator
|
24
26
|
KroghInterpolator
|
25
|
-
barycentric_interpolate
|
26
|
-
krogh_interpolate
|
27
|
-
pchip_interpolate
|
28
27
|
CubicHermiteSpline
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
|
29
|
+
**Low-level data structures for univariate interpolation:**
|
30
|
+
|
31
|
+
.. autosummary::
|
32
|
+
:toctree: generated/
|
33
|
+
|
32
34
|
PPoly
|
33
35
|
BPoly
|
34
|
-
|
36
|
+
BSpline
|
35
37
|
|
36
38
|
|
37
39
|
Multivariate interpolation
|
38
40
|
==========================
|
39
41
|
|
40
|
-
Unstructured data
|
42
|
+
**Unstructured data**
|
41
43
|
|
42
44
|
.. autosummary::
|
43
45
|
:toctree: generated/
|
44
46
|
|
45
|
-
griddata
|
46
47
|
LinearNDInterpolator
|
47
48
|
NearestNDInterpolator
|
48
49
|
CloughTocher2DInterpolator
|
49
50
|
RBFInterpolator
|
50
|
-
Rbf
|
51
|
-
interp2d
|
52
51
|
|
53
|
-
For data on a grid
|
52
|
+
**For data on a grid:**
|
54
53
|
|
55
54
|
.. autosummary::
|
56
55
|
:toctree: generated/
|
57
56
|
|
58
|
-
interpn
|
59
57
|
RegularGridInterpolator
|
60
|
-
RectBivariateSpline
|
61
58
|
|
62
59
|
.. seealso::
|
63
60
|
|
64
|
-
`scipy.ndimage.map_coordinates
|
61
|
+
`scipy.ndimage.map_coordinates`,
|
62
|
+
:ref:`An example wrapper for map_coordinates <tutorial-interpolate_cartesian-grids>`
|
63
|
+
|
64
|
+
|
65
|
+
**Low-level data structures for tensor product polynomials and splines:**
|
65
66
|
|
66
|
-
Tensor product polynomials:
|
67
67
|
|
68
68
|
.. autosummary::
|
69
69
|
:toctree: generated/
|
@@ -71,21 +71,44 @@ Tensor product polynomials:
|
|
71
71
|
NdPPoly
|
72
72
|
NdBSpline
|
73
73
|
|
74
|
-
|
75
|
-
|
74
|
+
|
75
|
+
1-D spline smoothing and approximation
|
76
|
+
======================================
|
76
77
|
|
77
78
|
.. autosummary::
|
78
79
|
:toctree: generated/
|
79
80
|
|
80
|
-
BSpline
|
81
|
-
make_interp_spline
|
82
81
|
make_lsq_spline
|
83
82
|
make_smoothing_spline
|
84
|
-
generate_knots
|
85
83
|
make_splrep
|
86
84
|
make_splprep
|
85
|
+
generate_knots
|
86
|
+
|
87
|
+
Rational Approximation
|
88
|
+
======================
|
89
|
+
|
90
|
+
.. autosummary::
|
91
|
+
:toctree: generated/
|
92
|
+
|
93
|
+
AAA
|
94
|
+
|
95
|
+
|
96
|
+
Interfaces to FITPACK routines for 1D and 2D spline fitting
|
97
|
+
===========================================================
|
98
|
+
|
99
|
+
This section lists wrappers for `FITPACK <http://www.netlib.org/dierckx/>`__
|
100
|
+
functionality for 1D and 2D smoothing splines. In most cases, users are better off
|
101
|
+
using higher-level routines listed in previous sections.
|
102
|
+
|
103
|
+
|
104
|
+
1D FITPACK splines
|
105
|
+
------------------
|
106
|
+
|
107
|
+
This package provides two sets of functionally equivalent wrappers: object-oriented and
|
108
|
+
functional.
|
109
|
+
|
110
|
+
**Functional FITPACK interface:**
|
87
111
|
|
88
|
-
Functional interface to FITPACK routines:
|
89
112
|
|
90
113
|
.. autosummary::
|
91
114
|
:toctree: generated/
|
@@ -100,7 +123,7 @@ Functional interface to FITPACK routines:
|
|
100
123
|
splantider
|
101
124
|
insert
|
102
125
|
|
103
|
-
Object-oriented FITPACK interface
|
126
|
+
**Object-oriented FITPACK interface:**
|
104
127
|
|
105
128
|
.. autosummary::
|
106
129
|
:toctree: generated/
|
@@ -110,11 +133,10 @@ Object-oriented FITPACK interface:
|
|
110
133
|
LSQUnivariateSpline
|
111
134
|
|
112
135
|
|
136
|
+
2D FITPACK splines
|
137
|
+
------------------
|
113
138
|
|
114
|
-
|
115
|
-
===========
|
116
|
-
|
117
|
-
For data on a grid:
|
139
|
+
**For data on a grid:**
|
118
140
|
|
119
141
|
.. autosummary::
|
120
142
|
:toctree: generated/
|
@@ -122,7 +144,7 @@ For data on a grid:
|
|
122
144
|
RectBivariateSpline
|
123
145
|
RectSphereBivariateSpline
|
124
146
|
|
125
|
-
For unstructured data
|
147
|
+
**For unstructured data (OOP interface):**
|
126
148
|
|
127
149
|
.. autosummary::
|
128
150
|
:toctree: generated/
|
@@ -133,7 +155,7 @@ For unstructured data:
|
|
133
155
|
LSQBivariateSpline
|
134
156
|
LSQSphereBivariateSpline
|
135
157
|
|
136
|
-
|
158
|
+
**For unstructured data (functional interface):**
|
137
159
|
|
138
160
|
.. autosummary::
|
139
161
|
:toctree: generated/
|
@@ -141,14 +163,6 @@ Low-level interface to FITPACK functions:
|
|
141
163
|
bisplrep
|
142
164
|
bisplev
|
143
165
|
|
144
|
-
Rational Approximation
|
145
|
-
======================
|
146
|
-
|
147
|
-
.. autosummary::
|
148
|
-
:toctree: generated/
|
149
|
-
|
150
|
-
pade
|
151
|
-
AAA
|
152
166
|
|
153
167
|
Additional tools
|
154
168
|
================
|
@@ -158,28 +172,26 @@ Additional tools
|
|
158
172
|
|
159
173
|
lagrange
|
160
174
|
approximate_taylor_polynomial
|
175
|
+
pade
|
176
|
+
|
177
|
+
interpn
|
178
|
+
griddata
|
179
|
+
barycentric_interpolate
|
180
|
+
krogh_interpolate
|
181
|
+
pchip_interpolate
|
182
|
+
Rbf
|
183
|
+
interp1d
|
184
|
+
interp2d
|
161
185
|
|
162
186
|
.. seealso::
|
163
187
|
|
164
188
|
`scipy.ndimage.map_coordinates`,
|
165
189
|
`scipy.ndimage.spline_filter`,
|
166
|
-
|
167
|
-
|
168
|
-
`scipy.signal.gauss_spline`,
|
169
|
-
`scipy.signal.qspline1d`,
|
170
|
-
`scipy.signal.cspline1d`,
|
171
|
-
`scipy.signal.qspline1d_eval`,
|
172
|
-
`scipy.signal.cspline1d_eval`,
|
173
|
-
`scipy.signal.qspline2d`,
|
174
|
-
`scipy.signal.cspline2d`.
|
175
|
-
|
176
|
-
``pchip`` is an alias of `PchipInterpolator` for backward compatibility
|
177
|
-
(should not be used in new code).
|
178
|
-
"""
|
190
|
+
|
191
|
+
""" # noqa: E501
|
179
192
|
from ._interpolate import *
|
180
193
|
from ._fitpack_py import *
|
181
194
|
|
182
|
-
# New interface to fitpack library:
|
183
195
|
from ._fitpack2 import *
|
184
196
|
|
185
197
|
from ._rbf import Rbf
|
@@ -34,7 +34,7 @@ __all__ = ["AAA", "FloaterHormannInterpolator"]
|
|
34
34
|
|
35
35
|
|
36
36
|
class _BarycentricRational:
|
37
|
-
"""Base class for
|
37
|
+
"""Base class for barycentric representation of a rational function."""
|
38
38
|
def __init__(self, x, y, **kwargs):
|
39
39
|
# input validation
|
40
40
|
z = np.asarray(x)
|
@@ -399,7 +399,7 @@ class AAA(_BarycentricRational):
|
|
399
399
|
>>> with warnings.catch_warnings():
|
400
400
|
... warnings.simplefilter('ignore', RuntimeWarning)
|
401
401
|
... r.clean_up()
|
402
|
-
4
|
402
|
+
4 # may vary
|
403
403
|
>>> mask = np.abs(r.residues()) < 1e-13
|
404
404
|
>>> axs[1].plot(r.poles().real[~mask], r.poles().imag[~mask], '.')
|
405
405
|
>>> axs[1].plot(r.poles().real[mask], r.poles().imag[mask], 'r.')
|
@@ -597,11 +597,10 @@ class AAA(_BarycentricRational):
|
|
597
597
|
|
598
598
|
|
599
599
|
class FloaterHormannInterpolator(_BarycentricRational):
|
600
|
-
r"""
|
601
|
-
Floater-Hormann barycentric rational interpolation.
|
600
|
+
r"""Floater-Hormann barycentric rational interpolator (C∞ smooth on real axis).
|
602
601
|
|
603
602
|
As described in [1]_, the method of Floater and Hormann computes weights for a
|
604
|
-
|
603
|
+
barycentric rational interpolant with no poles on the real axis.
|
605
604
|
|
606
605
|
Parameters
|
607
606
|
----------
|
@@ -610,11 +609,11 @@ class FloaterHormannInterpolator(_BarycentricRational):
|
|
610
609
|
complex but must be finite.
|
611
610
|
y : array_like, shape (n, ...)
|
612
611
|
Array containing values of the dependent variable. Infinite and NaN values
|
613
|
-
of `
|
614
|
-
d : int,
|
615
|
-
|
616
|
-
|
617
|
-
|
612
|
+
of `y` and corresponding values of `x` will be discarded.
|
613
|
+
d : int, default: 3
|
614
|
+
Integer satisfying ``0 <= d < n``. Floater-Hormann interpolation blends
|
615
|
+
``n - d`` polynomials of degree `d` together; for ``d = n - 1``, this is
|
616
|
+
equivalent to polynomial interpolation.
|
618
617
|
|
619
618
|
Attributes
|
620
619
|
----------
|
@@ -639,8 +638,8 @@ class FloaterHormannInterpolator(_BarycentricRational):
|
|
639
638
|
r(x) = \frac{\sum_{i=0}^{n-d} \lambda_i(x) p_i(x)}
|
640
639
|
{\sum_{i=0}^{n-d} \lambda_i(x)},
|
641
640
|
|
642
|
-
where :math:`p_i(x)` is an interpolating
|
643
|
-
the points :math:`(x_i,y_i),\dots,(x_{i+d},y_{i+d})
|
641
|
+
where :math:`p_i(x)` is an interpolating polynomial of at most degree `d` through
|
642
|
+
the points :math:`(x_i,y_i),\dots,(x_{i+d},y_{i+d})`, and :math:`\lambda_i(z)` are
|
644
643
|
blending functions defined by
|
645
644
|
|
646
645
|
.. math::
|
@@ -649,8 +648,8 @@ class FloaterHormannInterpolator(_BarycentricRational):
|
|
649
648
|
|
650
649
|
When ``d = n - 1`` this reduces to polynomial interpolation.
|
651
650
|
|
652
|
-
Due to its stability following barycentric representation of the above equation
|
653
|
-
is used
|
651
|
+
Due to its stability, the following barycentric representation of the above equation
|
652
|
+
is used for computation
|
654
653
|
|
655
654
|
.. math::
|
656
655
|
|
@@ -680,16 +679,17 @@ class FloaterHormannInterpolator(_BarycentricRational):
|
|
680
679
|
>>> import numpy as np
|
681
680
|
>>> from scipy.interpolate import (FloaterHormannInterpolator,
|
682
681
|
... BarycentricInterpolator)
|
683
|
-
>>> def f(
|
684
|
-
... return 1/(1 +
|
685
|
-
>>>
|
686
|
-
>>> r = FloaterHormannInterpolator(
|
687
|
-
>>> p = BarycentricInterpolator(
|
688
|
-
>>>
|
682
|
+
>>> def f(x):
|
683
|
+
... return 1/(1 + x**2)
|
684
|
+
>>> x = np.linspace(-5, 5, num=15)
|
685
|
+
>>> r = FloaterHormannInterpolator(x, f(x))
|
686
|
+
>>> p = BarycentricInterpolator(x, f(x))
|
687
|
+
>>> xx = np.linspace(-5, 5, num=1000)
|
689
688
|
>>> import matplotlib.pyplot as plt
|
690
689
|
>>> fig, ax = plt.subplots()
|
691
|
-
>>> ax.plot(
|
692
|
-
>>> ax.plot(
|
690
|
+
>>> ax.plot(xx, f(xx), label="f(x)")
|
691
|
+
>>> ax.plot(xx, r(xx), "--", label="Floater-Hormann")
|
692
|
+
>>> ax.plot(xx, p(xx), "--", label="Polynomial")
|
693
693
|
>>> ax.legend()
|
694
694
|
>>> plt.show()
|
695
695
|
"""
|