scipy 1.15.3__cp313-cp313-macosx_12_0_arm64.whl → 1.16.0__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 +282 -151
- scipy/constants/_constants.py +4 -1
- scipy/constants/tests/test_codata.py +2 -2
- scipy/constants/tests/test_constants.py +11 -18
- scipy/datasets/_download_all.py +15 -1
- scipy/datasets/_fetchers.py +7 -1
- scipy/datasets/_utils.py +1 -1
- scipy/differentiate/_differentiate.py +25 -25
- scipy/differentiate/tests/test_differentiate.py +24 -25
- scipy/fft/_basic.py +20 -0
- scipy/fft/_helper.py +3 -34
- scipy/fft/_pocketfft/helper.py +29 -1
- scipy/fft/_pocketfft/tests/test_basic.py +2 -4
- scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
- scipy/fft/_realtransforms.py +13 -0
- scipy/fft/tests/test_basic.py +27 -25
- scipy/fft/tests/test_fftlog.py +16 -7
- scipy/fft/tests/test_helper.py +18 -34
- scipy/fft/tests/test_real_transforms.py +8 -10
- scipy/fftpack/convolve.cpython-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/blas.py +35 -24
- 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 +80 -24
- 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 +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-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 +2145 -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 +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 +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-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 +5 -30
- 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 +551 -477
- 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 +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.3.dist-info → scipy-1.16.0.dist-info}/LICENSE.txt +4 -4
- {scipy-1.15.3.dist-info → scipy-1.16.0.dist-info}/METADATA +11 -11
- {scipy-1.15.3.dist-info → scipy-1.16.0.dist-info}/RECORD +562 -569
- scipy-1.16.0.dist-info/WHEEL +6 -0
- scipy/_lib/array_api_extra/_funcs.py +0 -484
- scipy/_lib/array_api_extra/_typing.py +0 -8
- scipy/interpolate/_bspl.cpython-313-darwin.so +0 -0
- scipy/optimize/_cobyla.cpython-313-darwin.so +0 -0
- scipy/optimize/_cython_nnls.cpython-313-darwin.so +0 -0
- scipy/optimize/_slsqp.cpython-313-darwin.so +0 -0
- scipy/spatial/qhull_src/COPYING.txt +0 -38
- scipy/special/libsf_error_state.dylib +0 -0
- scipy/special/tests/test_log_softmax.py +0 -109
- scipy/special/tests/test_xsf_cuda.py +0 -114
- scipy/special/xsf/binom.h +0 -89
- scipy/special/xsf/cdflib.h +0 -100
- scipy/special/xsf/cephes/airy.h +0 -307
- scipy/special/xsf/cephes/besselpoly.h +0 -51
- scipy/special/xsf/cephes/beta.h +0 -257
- scipy/special/xsf/cephes/cbrt.h +0 -131
- scipy/special/xsf/cephes/chbevl.h +0 -85
- scipy/special/xsf/cephes/chdtr.h +0 -193
- scipy/special/xsf/cephes/const.h +0 -87
- scipy/special/xsf/cephes/ellie.h +0 -293
- scipy/special/xsf/cephes/ellik.h +0 -251
- scipy/special/xsf/cephes/ellpe.h +0 -107
- scipy/special/xsf/cephes/ellpk.h +0 -117
- scipy/special/xsf/cephes/expn.h +0 -260
- scipy/special/xsf/cephes/gamma.h +0 -398
- scipy/special/xsf/cephes/hyp2f1.h +0 -596
- scipy/special/xsf/cephes/hyperg.h +0 -361
- scipy/special/xsf/cephes/i0.h +0 -149
- scipy/special/xsf/cephes/i1.h +0 -158
- scipy/special/xsf/cephes/igam.h +0 -421
- scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
- scipy/special/xsf/cephes/igami.h +0 -313
- scipy/special/xsf/cephes/j0.h +0 -225
- scipy/special/xsf/cephes/j1.h +0 -198
- scipy/special/xsf/cephes/jv.h +0 -715
- scipy/special/xsf/cephes/k0.h +0 -164
- scipy/special/xsf/cephes/k1.h +0 -163
- scipy/special/xsf/cephes/kn.h +0 -243
- scipy/special/xsf/cephes/lanczos.h +0 -112
- scipy/special/xsf/cephes/ndtr.h +0 -275
- scipy/special/xsf/cephes/poch.h +0 -85
- scipy/special/xsf/cephes/polevl.h +0 -167
- scipy/special/xsf/cephes/psi.h +0 -194
- scipy/special/xsf/cephes/rgamma.h +0 -111
- scipy/special/xsf/cephes/scipy_iv.h +0 -811
- scipy/special/xsf/cephes/shichi.h +0 -248
- scipy/special/xsf/cephes/sici.h +0 -224
- scipy/special/xsf/cephes/sindg.h +0 -221
- scipy/special/xsf/cephes/tandg.h +0 -139
- scipy/special/xsf/cephes/trig.h +0 -58
- scipy/special/xsf/cephes/unity.h +0 -186
- scipy/special/xsf/cephes/zeta.h +0 -172
- scipy/special/xsf/config.h +0 -304
- scipy/special/xsf/digamma.h +0 -205
- scipy/special/xsf/error.h +0 -57
- scipy/special/xsf/evalpoly.h +0 -47
- scipy/special/xsf/expint.h +0 -266
- scipy/special/xsf/hyp2f1.h +0 -694
- scipy/special/xsf/iv_ratio.h +0 -173
- scipy/special/xsf/lambertw.h +0 -150
- scipy/special/xsf/loggamma.h +0 -163
- scipy/special/xsf/sici.h +0 -200
- scipy/special/xsf/tools.h +0 -427
- scipy/special/xsf/trig.h +0 -164
- scipy/special/xsf/wright_bessel.h +0 -843
- scipy/special/xsf/zlog1.h +0 -35
- scipy/stats/_mvn.cpython-313-darwin.so +0 -0
- scipy-1.15.3.dist-info/WHEEL +0 -4
scipy/fft/tests/test_basic.py
CHANGED
@@ -7,12 +7,10 @@ from numpy.random import random
|
|
7
7
|
from numpy.testing import assert_array_almost_equal, assert_allclose
|
8
8
|
from pytest import raises as assert_raises
|
9
9
|
import scipy.fft as fft
|
10
|
-
from scipy.conftest import array_api_compatible
|
11
10
|
from scipy._lib._array_api import (
|
12
|
-
|
11
|
+
is_numpy, xp_size, xp_assert_close, xp_assert_equal
|
13
12
|
)
|
14
13
|
|
15
|
-
pytestmark = [array_api_compatible, pytest.mark.usefixtures("skip_xp_backends")]
|
16
14
|
skip_xp_backends = pytest.mark.skip_xp_backends
|
17
15
|
|
18
16
|
|
@@ -230,10 +228,10 @@ class TestFFT:
|
|
230
228
|
dtype = get_expected_input_dtype(op, xp)
|
231
229
|
x = xp.asarray(random((30, 20, 10)), dtype=dtype)
|
232
230
|
axes = [(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 2, 0), (2, 0, 1), (2, 1, 0)]
|
233
|
-
|
231
|
+
|
234
232
|
for a in axes:
|
235
|
-
op_tr = op(
|
236
|
-
tr_op =
|
233
|
+
op_tr = op(xp.permute_dims(x, axes=a))
|
234
|
+
tr_op = xp.permute_dims(op(x, axes=a), axes=a)
|
237
235
|
xp_assert_close(op_tr, tr_op)
|
238
236
|
|
239
237
|
@pytest.mark.parametrize("op", [fft.fftn, fft.ifftn, fft.rfftn, fft.irfftn])
|
@@ -250,15 +248,15 @@ class TestFFT:
|
|
250
248
|
dtype = get_expected_input_dtype(op, xp)
|
251
249
|
x = xp.asarray(random((16, 8, 4)), dtype=dtype)
|
252
250
|
axes = [(0, 1, 2), (0, 2, 1), (1, 2, 0)]
|
253
|
-
|
251
|
+
|
254
252
|
for a in axes:
|
255
253
|
# different shape on the first two axes
|
256
254
|
shape = tuple([2*x.shape[ax] if ax in a[:2] else x.shape[ax]
|
257
255
|
for ax in range(x.ndim)])
|
258
256
|
# transform only the first two axes
|
259
|
-
op_tr = op(
|
257
|
+
op_tr = op(xp.permute_dims(x, axes=a),
|
260
258
|
s=shape[:2], axes=(0, 1))
|
261
|
-
tr_op =
|
259
|
+
tr_op = xp.permute_dims(op(x, s=shape[:2], axes=a[:2]),
|
262
260
|
axes=a)
|
263
261
|
xp_assert_close(op_tr, tr_op)
|
264
262
|
|
@@ -270,21 +268,21 @@ class TestFFT:
|
|
270
268
|
dtype = get_expected_input_dtype(op, xp)
|
271
269
|
x = xp.asarray(random((16, 8, 4)), dtype=dtype)
|
272
270
|
axes = [(0, 1, 2), (0, 2, 1), (1, 2, 0)]
|
273
|
-
|
271
|
+
|
274
272
|
for a in axes:
|
275
273
|
# different shape on the first two axes
|
276
274
|
shape = tuple([2*x.shape[ax] if ax in a[:2] else x.shape[ax]
|
277
275
|
for ax in range(x.ndim)])
|
278
276
|
# transform only the first two axes
|
279
|
-
op_tr = op(
|
280
|
-
tr_op =
|
277
|
+
op_tr = op(xp.permute_dims(x, axes=a), s=shape[:2], axes=(0, 1))
|
278
|
+
tr_op = xp.permute_dims(op(x, s=shape[:2], axes=a[:2]), axes=a)
|
281
279
|
xp_assert_close(op_tr, tr_op)
|
282
280
|
|
283
281
|
def test_all_1d_norm_preserving(self, xp):
|
284
282
|
# verify that round-trip transforms are norm-preserving
|
285
283
|
x = xp.asarray(random(30), dtype=xp.float64)
|
286
|
-
|
287
|
-
x_norm =
|
284
|
+
|
285
|
+
x_norm = xp.linalg.vector_norm(x)
|
288
286
|
n = xp_size(x) * 2
|
289
287
|
func_pairs = [(fft.rfft, fft.irfft),
|
290
288
|
# hfft: order so the first function takes x.size samples
|
@@ -296,16 +294,16 @@ class TestFFT:
|
|
296
294
|
for forw, back in func_pairs:
|
297
295
|
if forw == fft.fft:
|
298
296
|
x = xp.asarray(x, dtype=xp.complex128)
|
299
|
-
x_norm =
|
297
|
+
x_norm = xp.linalg.vector_norm(x)
|
300
298
|
for n in [xp_size(x), 2*xp_size(x)]:
|
301
299
|
for norm in ['backward', 'ortho', 'forward']:
|
302
300
|
tmp = forw(x, n=n, norm=norm)
|
303
301
|
tmp = back(tmp, n=n, norm=norm)
|
304
|
-
xp_assert_close(
|
302
|
+
xp_assert_close(xp.linalg.vector_norm(tmp), x_norm)
|
305
303
|
|
306
304
|
@skip_xp_backends(np_only=True)
|
307
305
|
@pytest.mark.parametrize("dtype", [np.float16, np.longdouble])
|
308
|
-
def test_dtypes_nonstandard(self, dtype):
|
306
|
+
def test_dtypes_nonstandard(self, dtype, xp):
|
309
307
|
x = random(30).astype(dtype)
|
310
308
|
out_dtypes = {np.float16: np.complex64, np.longdouble: np.clongdouble}
|
311
309
|
x_complex = x.astype(out_dtypes[dtype])
|
@@ -368,7 +366,7 @@ class TestFFT:
|
|
368
366
|
"fft",
|
369
367
|
[fft.fft, fft.fft2, fft.fftn,
|
370
368
|
fft.ifft, fft.ifft2, fft.ifftn])
|
371
|
-
def test_fft_with_order(dtype, order, fft):
|
369
|
+
def test_fft_with_order(dtype, order, fft, xp):
|
372
370
|
# Check that FFT/IFFT produces identical results for C, Fortran and
|
373
371
|
# non contiguous arrays
|
374
372
|
rng = np.random.RandomState(42)
|
@@ -450,7 +448,7 @@ class TestFFTThreadSafe:
|
|
450
448
|
|
451
449
|
@skip_xp_backends(np_only=True)
|
452
450
|
@pytest.mark.parametrize("func", [fft.fft, fft.ifft, fft.rfft, fft.irfft])
|
453
|
-
def test_multiprocess(func):
|
451
|
+
def test_multiprocess(func, xp):
|
454
452
|
# Test that fft still works after fork (gh-10422)
|
455
453
|
|
456
454
|
with multiprocessing.Pool(2) as p:
|
@@ -483,13 +481,17 @@ def test_non_standard_params(func, xp):
|
|
483
481
|
else:
|
484
482
|
dtype = xp.complex128
|
485
483
|
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
484
|
+
x = xp.asarray([1, 2, 3], dtype=dtype)
|
485
|
+
# func(x) should not raise an exception
|
486
|
+
func(x)
|
487
|
+
|
488
|
+
if is_numpy(xp):
|
489
|
+
func(x, workers=2)
|
490
|
+
else:
|
490
491
|
assert_raises(ValueError, func, x, workers=2)
|
491
|
-
|
492
|
-
|
492
|
+
|
493
|
+
# `plan` param is not tested since SciPy does not use it currently
|
494
|
+
# but should be tested if it comes into use
|
493
495
|
|
494
496
|
|
495
497
|
@pytest.mark.parametrize("dtype", ['float32', 'float64'])
|
scipy/fft/tests/test_fftlog.py
CHANGED
@@ -7,10 +7,8 @@ import pytest
|
|
7
7
|
from scipy.fft._fftlog import fht, ifht, fhtoffset
|
8
8
|
from scipy.special import poch
|
9
9
|
|
10
|
-
from scipy.
|
11
|
-
from scipy._lib._array_api import xp_assert_close, xp_assert_less, array_namespace
|
10
|
+
from scipy._lib._array_api import xp_assert_close, xp_assert_less
|
12
11
|
|
13
|
-
pytestmark = [array_api_compatible, pytest.mark.usefixtures("skip_xp_backends"),]
|
14
12
|
skip_xp_backends = pytest.mark.skip_xp_backends
|
15
13
|
|
16
14
|
|
@@ -25,7 +23,7 @@ def test_fht_agrees_with_fftlog(xp):
|
|
25
23
|
|
26
24
|
r = np.logspace(-4, 4, 16)
|
27
25
|
|
28
|
-
dln =
|
26
|
+
dln = math.log(r[1]/r[0])
|
29
27
|
mu = 0.3
|
30
28
|
offset = 0.0
|
31
29
|
bias = 0.0
|
@@ -62,6 +60,10 @@ def test_fht_agrees_with_fftlog(xp):
|
|
62
60
|
# test 3: positive bias
|
63
61
|
bias = 0.8
|
64
62
|
offset = fhtoffset(dln, mu, bias=bias)
|
63
|
+
# offset is a np.float64, which array-api-strict disallows
|
64
|
+
# even if it's technically a subclass of float
|
65
|
+
offset = float(offset)
|
66
|
+
|
65
67
|
ours = fht(a, dln, mu, offset=offset, bias=bias)
|
66
68
|
theirs = [-7.3436673558316850E+00, +0.1710271207817100E+00,
|
67
69
|
+0.1065374386206564E+00, -0.5121739602708132E-01,
|
@@ -77,6 +79,8 @@ def test_fht_agrees_with_fftlog(xp):
|
|
77
79
|
# test 4: negative bias
|
78
80
|
bias = -0.8
|
79
81
|
offset = fhtoffset(dln, mu, bias=bias)
|
82
|
+
offset = float(offset)
|
83
|
+
|
80
84
|
ours = fht(a, dln, mu, offset=offset, bias=bias)
|
81
85
|
theirs = [+0.8985777068568745E-05, +0.4074898209936099E-04,
|
82
86
|
+0.2123969254700955E-03, +0.1009558244834628E-02,
|
@@ -103,6 +107,9 @@ def test_fht_identity(n, bias, offset, optimal, xp):
|
|
103
107
|
|
104
108
|
if optimal:
|
105
109
|
offset = fhtoffset(dln, mu, initial=offset, bias=bias)
|
110
|
+
# offset is a np.float64, which array-api-strict disallows
|
111
|
+
# even if it's technically a subclass of float
|
112
|
+
offset = float(offset)
|
106
113
|
|
107
114
|
A = fht(a, dln, mu, offset=offset, bias=bias)
|
108
115
|
a_ = ifht(A, dln, mu, offset=offset, bias=bias)
|
@@ -163,9 +170,12 @@ def test_fht_exact(n, xp):
|
|
163
170
|
r = np.logspace(-2, 2, n)
|
164
171
|
a = xp.asarray(r**gamma)
|
165
172
|
|
166
|
-
dln =
|
173
|
+
dln = math.log(r[1]/r[0])
|
167
174
|
|
168
175
|
offset = fhtoffset(dln, mu, initial=0.0, bias=gamma)
|
176
|
+
# offset is a np.float64, which array-api-strict disallows
|
177
|
+
# even if it's technically a subclass of float
|
178
|
+
offset = float(offset)
|
169
179
|
|
170
180
|
A = fht(a, dln, mu, offset=offset, bias=gamma)
|
171
181
|
|
@@ -188,13 +198,12 @@ def test_array_like(xp, op):
|
|
188
198
|
@pytest.mark.parametrize('n', [128, 129])
|
189
199
|
def test_gh_21661(xp, n):
|
190
200
|
one = xp.asarray(1.0)
|
191
|
-
xp_test = array_namespace(one)
|
192
201
|
mu = 0.0
|
193
202
|
r = np.logspace(-7, 1, n)
|
194
203
|
dln = math.log(r[1] / r[0])
|
195
204
|
offset = fhtoffset(dln, initial=-6 * np.log(10), mu=mu)
|
196
205
|
r = xp.asarray(r, dtype=one.dtype)
|
197
|
-
k = math.exp(offset) /
|
206
|
+
k = math.exp(offset) / xp.flip(r, axis=-1)
|
198
207
|
|
199
208
|
def f(x, mu):
|
200
209
|
return x**(mu + 1)*xp.exp(-x**2/2)
|
scipy/fft/tests/test_helper.py
CHANGED
@@ -10,13 +10,9 @@ from pytest import raises as assert_raises
|
|
10
10
|
import pytest
|
11
11
|
import numpy as np
|
12
12
|
import sys
|
13
|
-
from scipy.
|
14
|
-
from scipy._lib._array_api import (
|
15
|
-
xp_assert_close, get_xp_devices, xp_device, array_namespace
|
16
|
-
)
|
13
|
+
from scipy._lib._array_api import xp_assert_close, xp_device
|
17
14
|
from scipy import fft
|
18
15
|
|
19
|
-
pytestmark = [array_api_compatible, pytest.mark.usefixtures("skip_xp_backends")]
|
20
16
|
skip_xp_backends = pytest.mark.skip_xp_backends
|
21
17
|
|
22
18
|
_5_smooth_numbers = [
|
@@ -26,7 +22,8 @@ _5_smooth_numbers = [
|
|
26
22
|
2**3 * 3**3 * 5**2,
|
27
23
|
]
|
28
24
|
|
29
|
-
|
25
|
+
@skip_xp_backends(np_only=True)
|
26
|
+
def test_next_fast_len(xp):
|
30
27
|
for n in _5_smooth_numbers:
|
31
28
|
assert_equal(next_fast_len(n), n)
|
32
29
|
|
@@ -56,7 +53,7 @@ def _assert_n_smooth(x, n):
|
|
56
53
|
@skip_xp_backends(np_only=True)
|
57
54
|
class TestNextFastLen:
|
58
55
|
|
59
|
-
def test_next_fast_len(self):
|
56
|
+
def test_next_fast_len(self, xp):
|
60
57
|
np.random.seed(1234)
|
61
58
|
|
62
59
|
def nums():
|
@@ -71,14 +68,14 @@ class TestNextFastLen:
|
|
71
68
|
m = next_fast_len(n, True)
|
72
69
|
_assert_n_smooth(m, 5)
|
73
70
|
|
74
|
-
def test_np_integers(self):
|
71
|
+
def test_np_integers(self, xp):
|
75
72
|
ITYPES = [np.int16, np.int32, np.int64, np.uint16, np.uint32, np.uint64]
|
76
73
|
for ityp in ITYPES:
|
77
74
|
x = ityp(12345)
|
78
75
|
testN = next_fast_len(x)
|
79
76
|
assert_equal(testN, next_fast_len(int(x)))
|
80
77
|
|
81
|
-
def testnext_fast_len_small(self):
|
78
|
+
def testnext_fast_len_small(self, xp):
|
82
79
|
hams = {
|
83
80
|
1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 8, 8: 8, 14: 15, 15: 15,
|
84
81
|
16: 16, 17: 18, 1021: 1024, 1536: 1536, 51200000: 51200000
|
@@ -89,7 +86,7 @@ class TestNextFastLen:
|
|
89
86
|
@pytest.mark.xfail(sys.maxsize < 2**32,
|
90
87
|
reason="Hamming Numbers too large for 32-bit",
|
91
88
|
raises=ValueError, strict=True)
|
92
|
-
def testnext_fast_len_big(self):
|
89
|
+
def testnext_fast_len_big(self, xp):
|
93
90
|
hams = {
|
94
91
|
510183360: 510183360, 510183360 + 1: 512000000,
|
95
92
|
511000000: 512000000,
|
@@ -123,14 +120,14 @@ class TestNextFastLen:
|
|
123
120
|
for x, y in hams.items():
|
124
121
|
assert_equal(next_fast_len(x, True), y)
|
125
122
|
|
126
|
-
def test_keyword_args(self):
|
123
|
+
def test_keyword_args(self, xp):
|
127
124
|
assert next_fast_len(11, real=True) == 12
|
128
125
|
assert next_fast_len(target=7, real=False) == 7
|
129
126
|
|
130
127
|
@skip_xp_backends(np_only=True)
|
131
128
|
class TestPrevFastLen:
|
132
129
|
|
133
|
-
def test_prev_fast_len(self):
|
130
|
+
def test_prev_fast_len(self, xp):
|
134
131
|
np.random.seed(1234)
|
135
132
|
|
136
133
|
def nums():
|
@@ -145,7 +142,7 @@ class TestPrevFastLen:
|
|
145
142
|
m = prev_fast_len(n, True)
|
146
143
|
_assert_n_smooth(m, 5)
|
147
144
|
|
148
|
-
def test_np_integers(self):
|
145
|
+
def test_np_integers(self, xp):
|
149
146
|
ITYPES = [np.int16, np.int32, np.int64, np.uint16, np.uint32,
|
150
147
|
np.uint64]
|
151
148
|
for ityp in ITYPES:
|
@@ -156,7 +153,7 @@ class TestPrevFastLen:
|
|
156
153
|
testN = prev_fast_len(x, real=True)
|
157
154
|
assert_equal(testN, prev_fast_len(int(x), real=True))
|
158
155
|
|
159
|
-
def testprev_fast_len_small(self):
|
156
|
+
def testprev_fast_len_small(self, xp):
|
160
157
|
hams = {
|
161
158
|
1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 6, 8: 8, 14: 12, 15: 15,
|
162
159
|
16: 16, 17: 16, 1021: 1000, 1536: 1536, 51200000: 51200000
|
@@ -176,7 +173,7 @@ class TestPrevFastLen:
|
|
176
173
|
@pytest.mark.xfail(sys.maxsize < 2**32,
|
177
174
|
reason="Hamming Numbers too large for 32-bit",
|
178
175
|
raises=ValueError, strict=True)
|
179
|
-
def testprev_fast_len_big(self):
|
176
|
+
def testprev_fast_len_big(self, xp):
|
180
177
|
hams = {
|
181
178
|
# 2**6 * 3**13 * 5**1
|
182
179
|
510183360: 510183360,
|
@@ -238,7 +235,7 @@ class TestPrevFastLen:
|
|
238
235
|
for x, y in hams.items():
|
239
236
|
assert_equal(prev_fast_len(x, True), y)
|
240
237
|
|
241
|
-
def test_keyword_args(self):
|
238
|
+
def test_keyword_args(self, xp):
|
242
239
|
assert prev_fast_len(11, real=True) == 10
|
243
240
|
assert prev_fast_len(target=7, real=False) == 7
|
244
241
|
|
@@ -508,12 +505,7 @@ class TestFFTShift:
|
|
508
505
|
xp_assert_close(fft.ifftshift(shift_dim_both), freqs)
|
509
506
|
|
510
507
|
|
511
|
-
@skip_xp_backends("cupy",
|
512
|
-
reason="CuPy has not implemented the `device` param")
|
513
|
-
@skip_xp_backends("jax.numpy",
|
514
|
-
reason="JAX has not implemented the `device` param")
|
515
508
|
class TestFFTFreq:
|
516
|
-
|
517
509
|
def test_definition(self, xp):
|
518
510
|
x = xp.asarray([0, 1, 2, 3, 4, -4, -3, -2, -1], dtype=xp.float64)
|
519
511
|
x2 = xp.asarray([0, 1, 2, 3, 4, -5, -4, -3, -2, -1], dtype=xp.float64)
|
@@ -532,19 +524,13 @@ class TestFFTFreq:
|
|
532
524
|
y = 10 * xp.pi * fft.fftfreq(10, xp.pi, xp=xp)
|
533
525
|
xp_assert_close(y, x2, check_dtype=False)
|
534
526
|
|
535
|
-
def test_device(self, xp):
|
536
|
-
xp_test = array_namespace(xp.empty(0))
|
537
|
-
devices = get_xp_devices(xp)
|
527
|
+
def test_device(self, xp, devices):
|
538
528
|
for d in devices:
|
539
529
|
y = fft.fftfreq(9, xp=xp, device=d)
|
540
|
-
x =
|
530
|
+
x = xp.empty(0, device=d)
|
541
531
|
assert xp_device(y) == xp_device(x)
|
542
532
|
|
543
533
|
|
544
|
-
@skip_xp_backends("cupy",
|
545
|
-
reason="CuPy has not implemented the `device` param")
|
546
|
-
@skip_xp_backends("jax.numpy",
|
547
|
-
reason="JAX has not implemented the `device` param")
|
548
534
|
class TestRFFTFreq:
|
549
535
|
|
550
536
|
def test_definition(self, xp):
|
@@ -552,7 +538,7 @@ class TestRFFTFreq:
|
|
552
538
|
x2 = xp.asarray([0, 1, 2, 3, 4, 5], dtype=xp.float64)
|
553
539
|
|
554
540
|
# default dtype varies across backends
|
555
|
-
|
541
|
+
|
556
542
|
y = 9 * fft.rfftfreq(9, xp=xp)
|
557
543
|
xp_assert_close(y, x, check_dtype=False, check_namespace=True)
|
558
544
|
|
@@ -565,10 +551,8 @@ class TestRFFTFreq:
|
|
565
551
|
y = 10 * xp.pi * fft.rfftfreq(10, xp.pi, xp=xp)
|
566
552
|
xp_assert_close(y, x2, check_dtype=False)
|
567
553
|
|
568
|
-
def test_device(self, xp):
|
569
|
-
xp_test = array_namespace(xp.empty(0))
|
570
|
-
devices = get_xp_devices(xp)
|
554
|
+
def test_device(self, xp, devices):
|
571
555
|
for d in devices:
|
572
556
|
y = fft.rfftfreq(9, xp=xp, device=d)
|
573
|
-
x =
|
557
|
+
x = xp.empty(0, device=d)
|
574
558
|
assert xp_device(y) == xp_device(x)
|
@@ -6,10 +6,8 @@ import math
|
|
6
6
|
from scipy.fft import dct, idct, dctn, idctn, dst, idst, dstn, idstn
|
7
7
|
import scipy.fft as fft
|
8
8
|
from scipy import fftpack
|
9
|
-
from scipy.conftest import array_api_compatible
|
10
9
|
from scipy._lib._array_api import xp_copy, xp_assert_close
|
11
10
|
|
12
|
-
pytestmark = [array_api_compatible, pytest.mark.usefixtures("skip_xp_backends")]
|
13
11
|
skip_xp_backends = pytest.mark.skip_xp_backends
|
14
12
|
|
15
13
|
SQRT_2 = math.sqrt(2)
|
@@ -52,7 +50,7 @@ def test_identity_1d(forward, backward, type, n, axis, norm, orthogonalize, xp):
|
|
52
50
|
@pytest.mark.parametrize("norm", [None, 'backward', 'ortho', 'forward'])
|
53
51
|
@pytest.mark.parametrize("overwrite_x", [True, False])
|
54
52
|
def test_identity_1d_overwrite(forward, backward, type, dtype, axis, norm,
|
55
|
-
overwrite_x):
|
53
|
+
overwrite_x, xp):
|
56
54
|
# Test the identity f^-1(f(x)) == x
|
57
55
|
x = np.random.rand(7, 8).astype(dtype)
|
58
56
|
x_orig = x.copy()
|
@@ -130,7 +128,7 @@ def test_identity_nd(forward, backward, type, shape, axes, norm,
|
|
130
128
|
@pytest.mark.parametrize("norm", [None, 'backward', 'ortho', 'forward'])
|
131
129
|
@pytest.mark.parametrize("overwrite_x", [False, True])
|
132
130
|
def test_identity_nd_overwrite(forward, backward, type, shape, axes, dtype,
|
133
|
-
norm, overwrite_x):
|
131
|
+
norm, overwrite_x, xp):
|
134
132
|
# Test the identity f^-1(f(x)) == x
|
135
133
|
|
136
134
|
x = np.random.random(shape).astype(dtype)
|
@@ -193,8 +191,8 @@ def test_orthogonalize_noop(func, type, norm, xp):
|
|
193
191
|
|
194
192
|
|
195
193
|
@skip_xp_backends('jax.numpy',
|
196
|
-
reason='jax arrays do not support item assignment'
|
197
|
-
|
194
|
+
reason='jax arrays do not support item assignment')
|
195
|
+
@skip_xp_backends(cpu_only=True)
|
198
196
|
@pytest.mark.parametrize("norm", ["backward", "ortho", "forward"])
|
199
197
|
def test_orthogonalize_dct1(norm, xp):
|
200
198
|
x = xp.asarray(np.random.rand(100))
|
@@ -212,8 +210,8 @@ def test_orthogonalize_dct1(norm, xp):
|
|
212
210
|
|
213
211
|
|
214
212
|
@skip_xp_backends('jax.numpy',
|
215
|
-
reason='jax arrays do not support item assignment'
|
216
|
-
|
213
|
+
reason='jax arrays do not support item assignment')
|
214
|
+
@skip_xp_backends(cpu_only=True)
|
217
215
|
@pytest.mark.parametrize("norm", ["backward", "ortho", "forward"])
|
218
216
|
@pytest.mark.parametrize("func", [dct, dst])
|
219
217
|
def test_orthogonalize_dcst2(func, norm, xp):
|
@@ -226,8 +224,8 @@ def test_orthogonalize_dcst2(func, norm, xp):
|
|
226
224
|
|
227
225
|
|
228
226
|
@skip_xp_backends('jax.numpy',
|
229
|
-
reason='jax arrays do not support item assignment'
|
230
|
-
|
227
|
+
reason='jax arrays do not support item assignment')
|
228
|
+
@skip_xp_backends(cpu_only=True)
|
231
229
|
@pytest.mark.parametrize("norm", ["backward", "ortho", "forward"])
|
232
230
|
@pytest.mark.parametrize("func", [dct, dst])
|
233
231
|
def test_orthogonalize_dcst3(func, norm, xp):
|
Binary file
|
@@ -350,10 +350,8 @@ class _TestIRFFTBase:
|
|
350
350
|
y2 = rfft(irfft(x))
|
351
351
|
assert_equal(y1.dtype, self.rdt)
|
352
352
|
assert_equal(y2.dtype, self.rdt)
|
353
|
-
assert_array_almost_equal(y1, x, decimal=self.ndec,
|
354
|
-
|
355
|
-
assert_array_almost_equal(y2, x, decimal=self.ndec,
|
356
|
-
err_msg="size=%d" % size)
|
353
|
+
assert_array_almost_equal(y1, x, decimal=self.ndec, err_msg=f"size={size}")
|
354
|
+
assert_array_almost_equal(y2, x, decimal=self.ndec, err_msg=f"size={size}")
|
357
355
|
|
358
356
|
def test_size_accuracy(self):
|
359
357
|
# Sanity check for the accuracy for prime and non-prime sized inputs
|
@@ -11,8 +11,8 @@ from scipy.fftpack._realtransforms import (
|
|
11
11
|
|
12
12
|
# Matlab reference data
|
13
13
|
MDATA = np.load(join(dirname(__file__), 'test.npz'))
|
14
|
-
X = [MDATA['x
|
15
|
-
Y = [MDATA['y
|
14
|
+
X = [MDATA[f'x{i}'] for i in range(8)]
|
15
|
+
Y = [MDATA[f'y{i}'] for i in range(8)]
|
16
16
|
|
17
17
|
# FFTW reference data: the data are organized as follows:
|
18
18
|
# * SIZES is an array containing all available sizes
|
@@ -33,7 +33,7 @@ def fftw_dct_ref(type, size, dt):
|
|
33
33
|
data = FFTWDATA_SINGLE
|
34
34
|
else:
|
35
35
|
raise ValueError()
|
36
|
-
y = (data['dct_
|
36
|
+
y = (data[f'dct_{type}_{size}']).astype(dt)
|
37
37
|
return x, y, dt
|
38
38
|
|
39
39
|
|
@@ -46,7 +46,7 @@ def fftw_dst_ref(type, size, dt):
|
|
46
46
|
data = FFTWDATA_SINGLE
|
47
47
|
else:
|
48
48
|
raise ValueError()
|
49
|
-
y = (data['dst_
|
49
|
+
y = (data[f'dst_{type}_{size}']).astype(dt)
|
50
50
|
return x, y, dt
|
51
51
|
|
52
52
|
|
@@ -208,7 +208,7 @@ class _TestDCTBase:
|
|
208
208
|
# difference is due to fftw using a better algorithm w.r.t error
|
209
209
|
# propagation compared to the ones from fftpack.
|
210
210
|
assert_array_almost_equal(y / np.max(y), yr / np.max(y), decimal=self.dec,
|
211
|
-
err_msg="Size
|
211
|
+
err_msg=f"Size {i} failed")
|
212
212
|
|
213
213
|
def test_axis(self):
|
214
214
|
nt = 2
|
@@ -381,8 +381,7 @@ class _TestIDCTBase:
|
|
381
381
|
# difference is due to fftw using a better algorithm w.r.t error
|
382
382
|
# propagation compared to the ones from fftpack.
|
383
383
|
assert_array_almost_equal(x / np.max(x), xr / np.max(x), decimal=self.dec,
|
384
|
-
err_msg="Size
|
385
|
-
|
384
|
+
err_msg=f"Size {i} failed")
|
386
385
|
|
387
386
|
class TestIDCTIDouble(_TestIDCTBase):
|
388
387
|
def setup_method(self):
|
@@ -487,7 +486,7 @@ class _TestDSTBase:
|
|
487
486
|
# difference is due to fftw using a better algorithm w.r.t error
|
488
487
|
# propagation compared to the ones from fftpack.
|
489
488
|
assert_array_almost_equal(y / np.max(y), yr / np.max(y), decimal=self.dec,
|
490
|
-
err_msg="Size
|
489
|
+
err_msg=f"Size {i} failed")
|
491
490
|
|
492
491
|
|
493
492
|
class _TestDSTIBase(_TestDSTBase):
|
@@ -621,7 +620,7 @@ class _TestIDSTBase:
|
|
621
620
|
# difference is due to fftw using a better algorithm w.r.t error
|
622
621
|
# propagation compared to the ones from fftpack.
|
623
622
|
assert_array_almost_equal(x / np.max(x), xr / np.max(x), decimal=self.dec,
|
624
|
-
err_msg="Size
|
623
|
+
err_msg=f"Size {i} failed")
|
625
624
|
|
626
625
|
|
627
626
|
class TestIDSTIDouble(_TestIDSTBase):
|
scipy/integrate/_bvp.py
CHANGED
@@ -402,7 +402,9 @@ def solve_newton(n, m, h, col_fun, bc, jac, y, p, B, bvp_tol, bc_tol):
|
|
402
402
|
References
|
403
403
|
----------
|
404
404
|
.. [1] U. Ascher, R. Mattheij and R. Russell "Numerical Solution of
|
405
|
-
Boundary Value Problems for Ordinary Differential Equations"
|
405
|
+
Boundary Value Problems for Ordinary Differential Equations",
|
406
|
+
Philidelphia, PA: Society for Industrial and Applied Mathematics,
|
407
|
+
1995.
|
406
408
|
"""
|
407
409
|
# We know that the solution residuals at the middle points of the mesh
|
408
410
|
# are connected with collocation residuals r_middle = 1.5 * col_res / h.
|
@@ -872,9 +874,13 @@ def solve_bvp(fun, bc, x, y, p=None, S=None, fun_jac=None, bc_jac=None,
|
|
872
874
|
Control and the Maltab PSE", ACM Trans. Math. Softw., Vol. 27,
|
873
875
|
Number 3, pp. 299-316, 2001.
|
874
876
|
.. [2] L.F. Shampine, P. H. Muir and H. Xu, "A User-Friendly Fortran BVP
|
875
|
-
Solver".
|
877
|
+
Solver", J. Numer. Anal., Ind. Appl. Math. (JNAIAM), Vol. 1,
|
878
|
+
Number 2, pp. 201-217, 2006.
|
876
879
|
.. [3] U. Ascher, R. Mattheij and R. Russell "Numerical Solution of
|
877
|
-
Boundary Value Problems for Ordinary Differential Equations"
|
880
|
+
Boundary Value Problems for Ordinary Differential Equations",
|
881
|
+
Philidelphia, PA: Society for Industrial and Applied Mathematics,
|
882
|
+
1995.
|
883
|
+
:doi:`10.1137/1.9781611971231`
|
878
884
|
.. [4] `Cauchy-Riemann equations
|
879
885
|
<https://en.wikipedia.org/wiki/Cauchy-Riemann_equations>`_ on
|
880
886
|
Wikipedia.
|
scipy/integrate/_cubature.py
CHANGED
@@ -10,7 +10,7 @@ from scipy._lib._array_api import (
|
|
10
10
|
array_namespace,
|
11
11
|
xp_size,
|
12
12
|
xp_copy,
|
13
|
-
|
13
|
+
xp_promote
|
14
14
|
)
|
15
15
|
from scipy._lib._util import MapWrapper
|
16
16
|
|
@@ -323,7 +323,8 @@ def cubature(f, a, b, *, rule="gk21", rtol=1e-8, atol=0, max_subdivisions=10000,
|
|
323
323
|
|
324
324
|
# Convert a and b to arrays and convert each point in points to an array, promoting
|
325
325
|
# each to a common floating dtype.
|
326
|
-
a, b, *points =
|
326
|
+
a, b, *points = xp_promote(a, b, *points, broadcast=True, force_floating=True,
|
327
|
+
xp=xp)
|
327
328
|
result_dtype = a.dtype
|
328
329
|
|
329
330
|
if xp_size(a) == 0 or xp_size(b) == 0:
|
Binary file
|
Binary file
|
scipy/integrate/_ode.py
CHANGED
@@ -826,7 +826,7 @@ class IntegratorBase:
|
|
826
826
|
# XXX: __str__ method for getting visual state of the integrator
|
827
827
|
|
828
828
|
|
829
|
-
def
|
829
|
+
def _banded_jac_wrapper(jacfunc, ml, jac_params):
|
830
830
|
"""
|
831
831
|
Wrap a banded Jacobian function with a function that pads
|
832
832
|
the Jacobian with `ml` rows of zeros.
|
@@ -1007,7 +1007,7 @@ class vode(IntegratorBase):
|
|
1007
1007
|
# Banded Jacobian. Wrap the user-provided function with one
|
1008
1008
|
# that pads the Jacobian array with the extra `self.ml` rows
|
1009
1009
|
# required by the f2py-generated wrapper.
|
1010
|
-
jac =
|
1010
|
+
jac = _banded_jac_wrapper(jac, self.ml, jac_params)
|
1011
1011
|
|
1012
1012
|
args = ((f, jac, y0, t0, t1) + tuple(self.call_args) +
|
1013
1013
|
(f_params, jac_params))
|
@@ -1351,6 +1351,13 @@ class lsoda(IntegratorBase):
|
|
1351
1351
|
else:
|
1352
1352
|
self.initialized = True
|
1353
1353
|
self.acquire_new_handle()
|
1354
|
+
|
1355
|
+
if jac is not None and self.ml is not None and self.ml > 0:
|
1356
|
+
# Banded Jacobian. Wrap the user-provided function with one
|
1357
|
+
# that pads the Jacobian array with the extra `self.ml` rows
|
1358
|
+
# required by the f2py-generated wrapper.
|
1359
|
+
jac = _banded_jac_wrapper(jac, self.ml, jac_params)
|
1360
|
+
|
1354
1361
|
args = [f, y0, t0, t1] + self.call_args[:-1] + \
|
1355
1362
|
[jac, self.call_args[-1], f_params, 0, jac_params]
|
1356
1363
|
|
Binary file
|