scipy 1.15.3__cp311-cp311-win_amd64.whl → 1.16.0rc2__cp311-cp311-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- scipy/__config__.py +8 -8
- scipy/__init__.py +3 -6
- scipy/_cyutility.cp311-win_amd64.dll.a +0 -0
- scipy/_cyutility.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/_lib/_ccallback_c.cp311-win_amd64.pyd +0 -0
- scipy/_lib/_docscrape.py +1 -1
- scipy/_lib/_elementwise_iterative_method.py +15 -26
- scipy/_lib/_fpumode.cp311-win_amd64.dll.a +0 -0
- scipy/_lib/_fpumode.cp311-win_amd64.pyd +0 -0
- scipy/_lib/_sparse.py +41 -0
- scipy/_lib/_test_ccallback.cp311-win_amd64.dll.a +0 -0
- scipy/_lib/_test_ccallback.cp311-win_amd64.pyd +0 -0
- scipy/_lib/_test_deprecation_call.cp311-win_amd64.dll.a +0 -0
- scipy/_lib/_test_deprecation_call.cp311-win_amd64.pyd +0 -0
- scipy/_lib/_test_deprecation_def.cp311-win_amd64.dll.a +0 -0
- scipy/_lib/_test_deprecation_def.cp311-win_amd64.pyd +0 -0
- scipy/_lib/_testutils.py +6 -2
- scipy/_lib/_uarray/_uarray.cp311-win_amd64.dll.a +0 -0
- scipy/_lib/_uarray/_uarray.cp311-win_amd64.pyd +0 -0
- scipy/_lib/_util.py +222 -125
- scipy/_lib/array_api_compat/__init__.py +4 -4
- scipy/_lib/array_api_compat/_internal.py +19 -6
- scipy/_lib/array_api_compat/common/__init__.py +1 -1
- scipy/_lib/array_api_compat/common/_aliases.py +365 -193
- scipy/_lib/array_api_compat/common/_fft.py +94 -64
- scipy/_lib/array_api_compat/common/_helpers.py +413 -180
- scipy/_lib/array_api_compat/common/_linalg.py +116 -40
- scipy/_lib/array_api_compat/common/_typing.py +179 -10
- scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
- scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
- scipy/_lib/array_api_compat/cupy/_info.py +16 -6
- scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
- scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
- scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
- scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
- scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
- scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
- scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
- scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
- scipy/_lib/array_api_compat/numpy/_info.py +36 -16
- scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
- scipy/_lib/array_api_compat/numpy/fft.py +11 -5
- scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
- scipy/_lib/array_api_compat/torch/__init__.py +3 -5
- scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
- scipy/_lib/array_api_compat/torch/_info.py +27 -16
- scipy/_lib/array_api_compat/torch/_typing.py +3 -0
- scipy/_lib/array_api_compat/torch/fft.py +17 -18
- scipy/_lib/array_api_compat/torch/linalg.py +16 -16
- scipy/_lib/array_api_extra/__init__.py +26 -3
- scipy/_lib/array_api_extra/_delegation.py +171 -0
- scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
- scipy/_lib/array_api_extra/_lib/_at.py +463 -0
- scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
- scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
- scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
- scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
- scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
- scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
- scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
- scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
- scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
- scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
- scipy/_lib/array_api_extra/testing.py +359 -0
- scipy/_lib/decorator.py +2 -2
- scipy/_lib/doccer.py +1 -7
- scipy/_lib/messagestream.cp311-win_amd64.dll.a +0 -0
- scipy/_lib/messagestream.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/cluster/_hierarchy.cp311-win_amd64.pyd +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp311-win_amd64.dll.a +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp311-win_amd64.pyd +0 -0
- scipy/cluster/_vq.cp311-win_amd64.dll.a +0 -0
- scipy/cluster/_vq.cp311-win_amd64.pyd +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/pypocketfft.cp311-win_amd64.dll.a +0 -0
- scipy/fft/_pocketfft/pypocketfft.cp311-win_amd64.pyd +0 -0
- scipy/fft/_pocketfft/tests/test_basic.py +2 -4
- scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
- scipy/fft/_realtransforms.py +13 -0
- scipy/fft/tests/test_basic.py +27 -25
- scipy/fft/tests/test_fftlog.py +16 -7
- scipy/fft/tests/test_helper.py +18 -34
- scipy/fft/tests/test_real_transforms.py +8 -10
- scipy/fftpack/convolve.cp311-win_amd64.dll.a +0 -0
- scipy/fftpack/convolve.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/integrate/_dop.cp311-win_amd64.pyd +0 -0
- scipy/integrate/_lsoda.cp311-win_amd64.dll.a +0 -0
- scipy/integrate/_lsoda.cp311-win_amd64.pyd +0 -0
- scipy/integrate/_ode.py +9 -2
- scipy/integrate/_odepack.cp311-win_amd64.dll.a +0 -0
- scipy/integrate/_odepack.cp311-win_amd64.pyd +0 -0
- scipy/integrate/_quad_vec.py +21 -29
- scipy/integrate/_quadpack.cp311-win_amd64.dll.a +0 -0
- scipy/integrate/_quadpack.cp311-win_amd64.pyd +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_multivariate.cp311-win_amd64.dll.a +0 -0
- scipy/integrate/_test_multivariate.cp311-win_amd64.pyd +0 -0
- scipy/integrate/_test_odeint_banded.cp311-win_amd64.dll.a +0 -0
- scipy/integrate/_test_odeint_banded.cp311-win_amd64.pyd +0 -0
- scipy/integrate/_vode.cp311-win_amd64.dll.a +0 -0
- scipy/integrate/_vode.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/interpolate/_dfitpack.cp311-win_amd64.pyd +0 -0
- scipy/interpolate/_dierckx.cp311-win_amd64.dll.a +0 -0
- scipy/interpolate/_dierckx.cp311-win_amd64.pyd +0 -0
- scipy/interpolate/_fitpack.cp311-win_amd64.dll.a +0 -0
- scipy/interpolate/_fitpack.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/interpolate/_interpnd.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/interpolate/_ppoly.cp311-win_amd64.pyd +0 -0
- scipy/interpolate/_rbf.py +2 -2
- scipy/interpolate/_rbfinterp.py +1 -1
- scipy/interpolate/_rbfinterp_pythran.cp311-win_amd64.dll.a +0 -0
- scipy/interpolate/_rbfinterp_pythran.cp311-win_amd64.pyd +0 -0
- scipy/interpolate/_rgi.py +31 -26
- scipy/interpolate/_rgi_cython.cp311-win_amd64.dll.a +0 -0
- scipy/interpolate/_rgi_cython.cp311-win_amd64.pyd +0 -0
- scipy/interpolate/dfitpack.py +0 -20
- scipy/interpolate/interpnd.py +1 -2
- scipy/interpolate/tests/test_bary_rational.py +2 -2
- scipy/interpolate/tests/test_bsplines.py +97 -1
- scipy/interpolate/tests/test_fitpack2.py +39 -1
- scipy/interpolate/tests/test_interpnd.py +32 -20
- scipy/interpolate/tests/test_interpolate.py +48 -4
- scipy/interpolate/tests/test_rgi.py +2 -1
- scipy/io/_fast_matrix_market/__init__.py +2 -0
- scipy/io/_fast_matrix_market/_fmm_core.cp311-win_amd64.dll.a +0 -0
- scipy/io/_fast_matrix_market/_fmm_core.cp311-win_amd64.pyd +0 -0
- scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
- scipy/io/_harwell_boeing/hb.py +7 -11
- scipy/io/_idl.py +5 -7
- scipy/io/_netcdf.py +15 -5
- scipy/io/_test_fortran.cp311-win_amd64.dll.a +0 -0
- scipy/io/_test_fortran.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/io/matlab/_mio5_utils.cp311-win_amd64.pyd +0 -0
- scipy/io/matlab/_mio_utils.cp311-win_amd64.dll.a +0 -0
- scipy/io/matlab/_mio_utils.cp311-win_amd64.pyd +0 -0
- scipy/io/matlab/_miobase.py +4 -1
- scipy/io/matlab/_streams.cp311-win_amd64.dll.a +0 -0
- scipy/io/matlab/_streams.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/_cythonized_array_utils.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_interpolative.cp311-win_amd64.pyd +0 -0
- scipy/linalg/_decomp_ldl.py +4 -1
- scipy/linalg/_decomp_lu.py +18 -6
- scipy/linalg/_decomp_lu_cython.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_lu_cython.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_update.cp311-win_amd64.pyd +0 -0
- scipy/linalg/_expm_frechet.py +4 -0
- scipy/linalg/_fblas.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/_fblas.cp311-win_amd64.pyd +0 -0
- scipy/linalg/_flapack.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/_flapack.cp311-win_amd64.pyd +0 -0
- scipy/linalg/_linalg_pythran.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/_linalg_pythran.cp311-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs.py +187 -4
- scipy/linalg/_matfuncs_expm.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_expm.cp311-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cp311-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +1 -99
- scipy/linalg/_matfuncs_sqrtm_triu.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp311-win_amd64.pyd +0 -0
- scipy/linalg/_procrustes.py +2 -0
- scipy/linalg/_sketches.py +17 -6
- scipy/linalg/_solve_toeplitz.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/_solve_toeplitz.cp311-win_amd64.pyd +0 -0
- scipy/linalg/_solvers.py +7 -2
- scipy/linalg/_special_matrices.py +26 -36
- scipy/linalg/cython_blas.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/cython_blas.cp311-win_amd64.pyd +0 -0
- scipy/linalg/cython_lapack.cp311-win_amd64.dll.a +0 -0
- scipy/linalg/cython_lapack.cp311-win_amd64.pyd +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/_ctest.cp311-win_amd64.dll.a +0 -0
- scipy/ndimage/_ctest.cp311-win_amd64.pyd +0 -0
- scipy/ndimage/_cytest.cp311-win_amd64.dll.a +0 -0
- scipy/ndimage/_cytest.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/ndimage/_nd_image.cp311-win_amd64.pyd +0 -0
- scipy/ndimage/_ni_docstrings.py +5 -1
- scipy/ndimage/_ni_label.cp311-win_amd64.dll.a +0 -0
- scipy/ndimage/_ni_label.cp311-win_amd64.pyd +0 -0
- scipy/ndimage/_ni_support.py +1 -5
- scipy/ndimage/_rank_filter_1d.cp311-win_amd64.dll.a +0 -0
- scipy/ndimage/_rank_filter_1d.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/odr/__odrpack.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_basinhopping.py +13 -7
- scipy/optimize/_bglu_dense.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_bglu_dense.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_direct.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_dual_annealing.py +1 -1
- scipy/optimize/_elementwise.py +1 -4
- scipy/optimize/_group_columns.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_group_columns.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_highspy/_core.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_highspy/_core.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_highspy/_highs_options.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_highspy/_highs_options.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_lbfgsb.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_lbfgsb.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_lsap.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_lsq/common.py +3 -3
- scipy/optimize/_lsq/dogbox.py +16 -2
- scipy/optimize/_lsq/givens_elimination.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_lsq/givens_elimination.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_minpack.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_minpack_py.py +21 -14
- scipy/optimize/_moduleTNC.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_moduleTNC.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_pava_pybind.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_slsqplib.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_spectral.py +1 -1
- scipy/optimize/_tnc.py +8 -1
- scipy/optimize/_trlib/_trlib.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_trlib/_trlib.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_zeros.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_zeros_py.py +97 -17
- scipy/optimize/cython_optimize/_zeros.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/cython_optimize/_zeros.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/signal/_max_len_seq_inner.cp311-win_amd64.pyd +0 -0
- scipy/signal/_peak_finding_utils.cp311-win_amd64.dll.a +0 -0
- scipy/signal/_peak_finding_utils.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/signal/_sigtools.cp311-win_amd64.pyd +0 -0
- scipy/signal/_sosfilt.cp311-win_amd64.dll.a +0 -0
- scipy/signal/_sosfilt.cp311-win_amd64.pyd +0 -0
- scipy/signal/_spectral_py.py +230 -50
- scipy/signal/_spline.cp311-win_amd64.dll.a +0 -0
- scipy/signal/_spline.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/signal/_upfirdn_apply.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/_csparsetools.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/_sparsetools.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_flow.cp311-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_matching.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_matching.cp311-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp311-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_reordering.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_reordering.cp311-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_shortest_path.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_shortest_path.cp311-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_tools.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_tools.cp311-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_traversal.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_traversal.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_dsolve/_superlu.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_eigen/arpack/_arpack.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_cpropack.cp311-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp311-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp311-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp311-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/spatial/_ckdtree.cp311-win_amd64.pyd +0 -0
- scipy/spatial/_distance_pybind.cp311-win_amd64.dll.a +0 -0
- scipy/spatial/_distance_pybind.cp311-win_amd64.pyd +0 -0
- scipy/spatial/_distance_wrap.cp311-win_amd64.dll.a +0 -0
- scipy/spatial/_distance_wrap.cp311-win_amd64.pyd +0 -0
- scipy/spatial/_hausdorff.cp311-win_amd64.dll.a +0 -0
- scipy/spatial/_hausdorff.cp311-win_amd64.pyd +0 -0
- scipy/spatial/_qhull.cp311-win_amd64.dll.a +0 -0
- scipy/spatial/_qhull.cp311-win_amd64.pyd +0 -0
- scipy/spatial/_voronoi.cp311-win_amd64.dll.a +0 -0
- scipy/spatial/_voronoi.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/spatial/transform/_rigid_transform.cp311-win_amd64.pyd +0 -0
- scipy/spatial/transform/_rotation.cp311-win_amd64.dll.a +0 -0
- scipy/spatial/transform/_rotation.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/special/_comb.cp311-win_amd64.pyd +0 -0
- scipy/special/_ellip_harm_2.cp311-win_amd64.dll.a +0 -0
- scipy/special/_ellip_harm_2.cp311-win_amd64.pyd +0 -0
- scipy/special/_gufuncs.cp311-win_amd64.dll.a +0 -0
- scipy/special/_gufuncs.cp311-win_amd64.pyd +0 -0
- scipy/special/_logsumexp.py +67 -58
- scipy/special/_orthogonal.pyi +1 -1
- scipy/special/_specfun.cp311-win_amd64.dll.a +0 -0
- scipy/special/_specfun.cp311-win_amd64.pyd +0 -0
- scipy/special/_special_ufuncs.cp311-win_amd64.dll.a +0 -0
- scipy/special/_special_ufuncs.cp311-win_amd64.pyd +0 -0
- scipy/special/_spherical_bessel.py +4 -4
- scipy/special/_support_alternative_backends.py +212 -119
- scipy/special/_test_internal.cp311-win_amd64.dll.a +0 -0
- scipy/special/_test_internal.cp311-win_amd64.pyd +0 -0
- scipy/special/_testutils.py +4 -4
- scipy/special/_ufuncs.cp311-win_amd64.dll.a +0 -0
- scipy/special/_ufuncs.cp311-win_amd64.pyd +0 -0
- scipy/special/_ufuncs.pyi +1 -0
- scipy/special/_ufuncs.pyx +215 -1400
- scipy/special/_ufuncs_cxx.cp311-win_amd64.dll.a +0 -0
- scipy/special/_ufuncs_cxx.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/special/cython_special.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/stats/_ansari_swilk_statistics.cp311-win_amd64.pyd +0 -0
- scipy/stats/_axis_nan_policy.py +5 -12
- scipy/stats/_biasedurn.cp311-win_amd64.dll.a +0 -0
- scipy/stats/_biasedurn.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/stats/_levy_stable/levyst.cp311-win_amd64.pyd +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.cp311-win_amd64.dll.a +0 -0
- scipy/stats/_qmc_cy.cp311-win_amd64.pyd +0 -0
- scipy/stats/_qmvnt.py +16 -95
- scipy/stats/_qmvnt_cy.cp311-win_amd64.dll.a +0 -0
- scipy/stats/_qmvnt_cy.cp311-win_amd64.pyd +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/rcont.cp311-win_amd64.dll.a +0 -0
- scipy/stats/_rcont/rcont.cp311-win_amd64.pyd +0 -0
- scipy/stats/_resampling.py +4 -29
- scipy/stats/_sampling.py +1 -1
- scipy/stats/_sobol.cp311-win_amd64.dll.a +0 -0
- scipy/stats/_sobol.cp311-win_amd64.pyd +0 -0
- scipy/stats/_stats.cp311-win_amd64.dll.a +0 -0
- scipy/stats/_stats.cp311-win_amd64.pyd +0 -0
- scipy/stats/_stats_mstats_common.py +21 -2
- scipy/stats/_stats_py.py +550 -476
- scipy/stats/_stats_pythran.cp311-win_amd64.dll.a +0 -0
- scipy/stats/_stats_pythran.cp311-win_amd64.pyd +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp311-win_amd64.dll.a +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp311-win_amd64.pyd +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.16.0rc2.dist-info/DELVEWHEEL +2 -0
- {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 +685 -693
- scipy/_lib/array_api_extra/_funcs.py +0 -484
- scipy/_lib/array_api_extra/_typing.py +0 -8
- scipy/interpolate/_bspl.cp311-win_amd64.dll.a +0 -0
- scipy/interpolate/_bspl.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_cobyla.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_cobyla.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_cython_nnls.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_cython_nnls.cp311-win_amd64.pyd +0 -0
- scipy/optimize/_slsqp.cp311-win_amd64.dll.a +0 -0
- scipy/optimize/_slsqp.cp311-win_amd64.pyd +0 -0
- scipy/spatial/qhull_src/COPYING.txt +0 -38
- scipy/special/libsf_error_state.dll +0 -0
- scipy/special/libsf_error_state.dll.a +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.cp311-win_amd64.dll.a +0 -0
- scipy/stats/_mvn.cp311-win_amd64.pyd +0 -0
- scipy-1.15.3.dist-info/DELVEWHEEL +0 -2
- /scipy-1.15.3-cp311-cp311-win_amd64.whl → /scipy-1.16.0rc2-cp311-cp311-win_amd64.whl +0 -0
- {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/WHEEL +0 -0
scipy/interpolate/_fitpack2.py
CHANGED
@@ -1131,8 +1131,7 @@ class _BivariateSplineBase:
|
|
1131
1131
|
newc, ier = dfitpack.pardtc(tx, ty, c, kx, ky, dx, dy)
|
1132
1132
|
if ier != 0:
|
1133
1133
|
# This should not happen under normal conditions.
|
1134
|
-
raise ValueError("Unexpected error code returned by"
|
1135
|
-
" pardtc: %d" % ier)
|
1134
|
+
raise ValueError(f"Unexpected error code returned by pardtc: {ier}")
|
1136
1135
|
nx = len(tx)
|
1137
1136
|
ny = len(ty)
|
1138
1137
|
newtx = tx[dx:nx - dx]
|
@@ -1158,7 +1157,8 @@ Weighted sum of squared residuals does not satisfy abs(fp-s)/s < tol.""",
|
|
1158
1157
|
the maximal number of iterations maxit (set to 20 by the program)
|
1159
1158
|
allowed for finding a smoothing spline with fp=s has been reached:
|
1160
1159
|
s too small.
|
1161
|
-
Weighted sum of squared residuals does not satisfy abs(fp-s)/s < tol.
|
1160
|
+
Weighted sum of squared residuals does not satisfy abs(fp-s)/s < tol.
|
1161
|
+
Try increasing maxit by passing it as a keyword argument.""",
|
1162
1162
|
4: """
|
1163
1163
|
No more knots can be added because the number of b-spline coefficients
|
1164
1164
|
(nx-kx-1)*(ny-ky-1) already exceeds the number of data points m:
|
@@ -1575,6 +1575,9 @@ class RectBivariateSpline(BivariateSpline):
|
|
1575
1575
|
Positive smoothing factor defined for estimation condition:
|
1576
1576
|
``sum((z[i]-f(x[i], y[i]))**2, axis=0) <= s`` where f is a spline
|
1577
1577
|
function. Default is ``s=0``, which is for interpolation.
|
1578
|
+
maxit : int, optional
|
1579
|
+
The maximal number of iterations maxit allowed for finding a
|
1580
|
+
smoothing spline with fp=s. Default is ``maxit=20``.
|
1578
1581
|
|
1579
1582
|
See Also
|
1580
1583
|
--------
|
@@ -1607,7 +1610,7 @@ class RectBivariateSpline(BivariateSpline):
|
|
1607
1610
|
|
1608
1611
|
"""
|
1609
1612
|
|
1610
|
-
def __init__(self, x, y, z, bbox=[None] * 4, kx=3, ky=3, s=0):
|
1613
|
+
def __init__(self, x, y, z, bbox=[None] * 4, kx=3, ky=3, s=0, maxit=20):
|
1611
1614
|
x, y, bbox = ravel(x), ravel(y), ravel(bbox)
|
1612
1615
|
z = np.asarray(z)
|
1613
1616
|
if not np.all(diff(x) > 0.0):
|
@@ -1629,7 +1632,7 @@ class RectBivariateSpline(BivariateSpline):
|
|
1629
1632
|
xb, xe, yb, ye = bbox
|
1630
1633
|
with FITPACK_LOCK:
|
1631
1634
|
nx, tx, ny, ty, c, fp, ier = dfitpack.regrid_smth(x, y, z, xb, xe, yb,
|
1632
|
-
ye, kx, ky, s)
|
1635
|
+
ye, kx, ky, s, maxit)
|
1633
1636
|
|
1634
1637
|
if ier not in [0, -1, -2]:
|
1635
1638
|
msg = _surfit_messages.get(ier, f'ier={ier}')
|
@@ -2313,7 +2316,7 @@ class RectSphereBivariateSpline(SphereBivariateSpline):
|
|
2313
2316
|
ider = np.array([-1, 0, -1, 0], dtype=dfitpack_int)
|
2314
2317
|
if pole_values is None:
|
2315
2318
|
pole_values = (None, None)
|
2316
|
-
elif isinstance(pole_values,
|
2319
|
+
elif isinstance(pole_values, float | np.float32 | np.float64):
|
2317
2320
|
pole_values = (pole_values, pole_values)
|
2318
2321
|
if isinstance(pole_continuity, bool):
|
2319
2322
|
pole_continuity = (pole_continuity, pole_continuity)
|
@@ -117,9 +117,10 @@ def splprep(x, w=None, u=None, ub=None, ue=None, k=3, task=0, s=None, t=None,
|
|
117
117
|
for i in range(idim):
|
118
118
|
if x[i][0] != x[i][-1]:
|
119
119
|
if not quiet:
|
120
|
-
warnings.warn(
|
121
|
-
|
122
|
-
|
120
|
+
warnings.warn(
|
121
|
+
RuntimeWarning(f'Setting x[{i}][{m}]=x[{i}][0]'),
|
122
|
+
stacklevel=2
|
123
|
+
)
|
123
124
|
x[i][-1] = x[i][0]
|
124
125
|
if not 0 < idim < 11:
|
125
126
|
raise TypeError('0 < idim < 11 must hold')
|
@@ -141,7 +142,7 @@ def splprep(x, w=None, u=None, ub=None, ue=None, k=3, task=0, s=None, t=None,
|
|
141
142
|
else:
|
142
143
|
_parcur_cache['u'] = zeros(m, float)
|
143
144
|
if not (1 <= k <= 5):
|
144
|
-
raise TypeError('1 <= k=
|
145
|
+
raise TypeError(f'1 <= k= {k} <=5 must hold')
|
145
146
|
if not (-1 <= task <= 1):
|
146
147
|
raise TypeError('task must be -1, 0 or 1')
|
147
148
|
if (not len(w) == m) or (ipar == 1 and (not len(u) == m)):
|
@@ -187,10 +188,12 @@ def splprep(x, w=None, u=None, ub=None, ue=None, k=3, task=0, s=None, t=None,
|
|
187
188
|
c.shape = idim, n - k - 1
|
188
189
|
tcku = [t, list(c), k], u
|
189
190
|
if ier <= 0 and not quiet:
|
190
|
-
warnings.warn(
|
191
|
-
|
192
|
-
|
193
|
-
|
191
|
+
warnings.warn(
|
192
|
+
RuntimeWarning(
|
193
|
+
_iermess[ier][0] + f"\tk={k} n={len(t)} m={m} fp={fp} s={s}"
|
194
|
+
),
|
195
|
+
stacklevel=2
|
196
|
+
)
|
194
197
|
if ier > 0 and not full_output:
|
195
198
|
if ier in [1, 2, 3]:
|
196
199
|
warnings.warn(RuntimeWarning(_iermess[ier][0]), stacklevel=2)
|
@@ -228,13 +231,14 @@ def splrep(x, y, w=None, xb=None, xe=None, k=3, task=0, s=None, t=None,
|
|
228
231
|
if s is None:
|
229
232
|
s = m - sqrt(2*m)
|
230
233
|
if not len(w) == m:
|
231
|
-
raise TypeError('len(w)
|
234
|
+
raise TypeError(f'len(w)={len(w)} is not equal to m={m}')
|
232
235
|
if (m != len(y)) or (m != len(w)):
|
233
236
|
raise TypeError('Lengths of the first three arguments (x,y,w) must '
|
234
237
|
'be equal')
|
235
238
|
if not (1 <= k <= 5):
|
236
|
-
raise TypeError(
|
237
|
-
|
239
|
+
raise TypeError(
|
240
|
+
f'Given degree of the spline (k={k}) is not supported. (1<=k<=5)'
|
241
|
+
)
|
238
242
|
if m <= k:
|
239
243
|
raise TypeError('m > k must hold')
|
240
244
|
if xb is None:
|
@@ -279,8 +283,7 @@ def splrep(x, y, w=None, xb=None, xe=None, k=3, task=0, s=None, t=None,
|
|
279
283
|
n, c, fp, ier = dfitpack.percur(task, x, y, w, t, wrk, iwrk, k, s)
|
280
284
|
tck = (t[:n], c[:n], k)
|
281
285
|
if ier <= 0 and not quiet:
|
282
|
-
_mess = (_iermess[ier][0] + "\tk
|
283
|
-
(k, len(t), m, fp, s))
|
286
|
+
_mess = (_iermess[ier][0] + f"\tk={k} n={len(t)} m={m} fp={fp} s={s}")
|
284
287
|
warnings.warn(RuntimeWarning(_mess), stacklevel=2)
|
285
288
|
if ier > 0 and not full_output:
|
286
289
|
if ier in [1, 2, 3]:
|
@@ -312,7 +315,7 @@ def splev(x, tck, der=0, ext=0):
|
|
312
315
|
splev(x, [t, c, k], der, ext), c))
|
313
316
|
else:
|
314
317
|
if not (0 <= der <= k):
|
315
|
-
raise ValueError("0<=der
|
318
|
+
raise ValueError(f"0<=der={der}<=k={k} must hold")
|
316
319
|
if ext not in (0, 1, 2, 3):
|
317
320
|
raise ValueError(f"ext = {ext} not in (0, 1, 2, 3) ")
|
318
321
|
|
@@ -516,7 +519,7 @@ def bisplrep(x, y, z, w=None, xb=None, xe=None, yb=None, ye=None,
|
|
516
519
|
else:
|
517
520
|
w = atleast_1d(w)
|
518
521
|
if not len(w) == m:
|
519
|
-
raise TypeError('len(w)
|
522
|
+
raise TypeError(f'len(w)={len(w)} is not equal to m={m}')
|
520
523
|
if xb is None:
|
521
524
|
xb = x.min()
|
522
525
|
if xe is None:
|
@@ -544,8 +547,9 @@ def bisplrep(x, y, z, w=None, xb=None, xe=None, yb=None, ye=None,
|
|
544
547
|
if task == -1 and ny < 2*ky+2:
|
545
548
|
raise TypeError('There must be at least 2*ky+2 knots_x for task=-1')
|
546
549
|
if not ((1 <= kx <= 5) and (1 <= ky <= 5)):
|
547
|
-
raise TypeError(
|
548
|
-
|
550
|
+
raise TypeError(
|
551
|
+
f'Given degree of the spline (kx,ky={kx},{ky}) is not supported. (1<=k<=5)'
|
552
|
+
)
|
549
553
|
if m < (kx + 1)*(ky + 1):
|
550
554
|
raise TypeError('m >= (kx+1)(ky+1) must hold')
|
551
555
|
if nxest is None:
|
@@ -586,14 +590,16 @@ def bisplrep(x, y, z, w=None, xb=None, xe=None, yb=None, ye=None,
|
|
586
590
|
|
587
591
|
ierm = min(11, max(-3, ier))
|
588
592
|
if ierm <= 0 and not quiet:
|
589
|
-
_mess = (
|
590
|
-
|
591
|
-
|
593
|
+
_mess = (
|
594
|
+
_iermess2[ierm][0] +
|
595
|
+
f"\tkx,ky={kx},{ky} nx,ny={len(tx)},{len(ty)} m={m} fp={fp} s={s}"
|
596
|
+
)
|
592
597
|
warnings.warn(RuntimeWarning(_mess), stacklevel=2)
|
593
598
|
if ierm > 0 and not full_output:
|
594
599
|
if ier in [1, 2, 3, 4, 5]:
|
595
|
-
_mess = (
|
596
|
-
|
600
|
+
_mess = (
|
601
|
+
f"\n\tkx,ky={kx},{ky} nx,ny={len(tx)},{len(ty)} m={m} fp={fp} s={s}"
|
602
|
+
)
|
597
603
|
warnings.warn(RuntimeWarning(_iermess2[ierm][0] + _mess), stacklevel=2)
|
598
604
|
else:
|
599
605
|
try:
|
@@ -663,9 +669,9 @@ def bisplev(x, y, tck, dx=0, dy=0):
|
|
663
669
|
"""
|
664
670
|
tx, ty, c, kx, ky = tck
|
665
671
|
if not (0 <= dx < kx):
|
666
|
-
raise ValueError("0 <= dx =
|
672
|
+
raise ValueError(f"0 <= dx = {dx} < kx = {kx} must hold")
|
667
673
|
if not (0 <= dy < ky):
|
668
|
-
raise ValueError("0 <= dy =
|
674
|
+
raise ValueError(f"0 <= dy = {dy} < ky = {ky} must hold")
|
669
675
|
x, y = map(atleast_1d, [x, y])
|
670
676
|
if (len(x.shape) != 1) or (len(y.shape) != 1):
|
671
677
|
raise ValueError("First two entries should be rank-1 arrays.")
|
@@ -771,8 +777,8 @@ def splder(tck, n=1):
|
|
771
777
|
t = t[1:-1]
|
772
778
|
k -= 1
|
773
779
|
except FloatingPointError as e:
|
774
|
-
raise ValueError(
|
775
|
-
"and is not differentiable
|
780
|
+
raise ValueError("The spline has internal repeated knots "
|
781
|
+
f"and is not differentiable {n} times") from e
|
776
782
|
|
777
783
|
return t, c, k
|
778
784
|
|
@@ -57,7 +57,11 @@ def _get_residuals(x, y, t, k, w):
|
|
57
57
|
_, _, c = _lsq_solve_qr(x, y, t, k, w)
|
58
58
|
c = np.ascontiguousarray(c)
|
59
59
|
spl = BSpline(t, c, k)
|
60
|
-
|
60
|
+
residuals = _compute_residuals(w2, spl(x), y)
|
61
|
+
fp = residuals.sum()
|
62
|
+
if np.isnan(fp):
|
63
|
+
raise ValueError(_iermesg[1])
|
64
|
+
return residuals, fp
|
61
65
|
|
62
66
|
|
63
67
|
def _compute_residuals(w2, splx, y):
|
@@ -139,7 +143,7 @@ def _validate_inputs(x, y, w, k, s, xb, xe, parametric):
|
|
139
143
|
|
140
144
|
|
141
145
|
def generate_knots(x, y, *, w=None, xb=None, xe=None, k=3, s=0, nest=None):
|
142
|
-
"""
|
146
|
+
"""Generate knot vectors until the Least SQuares (LSQ) criterion is satified.
|
143
147
|
|
144
148
|
Parameters
|
145
149
|
----------
|
@@ -258,8 +262,7 @@ def _generate_knots_impl(x, y, *, w=None, xb=None, xe=None, k=3, s=0, nest=None)
|
|
258
262
|
|
259
263
|
# construct the LSQ spline with this set of knots
|
260
264
|
fpold = fp
|
261
|
-
residuals = _get_residuals(x, y, t, k, w=w)
|
262
|
-
fp = residuals.sum()
|
265
|
+
residuals, fp = _get_residuals(x, y, t, k, w=w)
|
263
266
|
fpms = fp - s
|
264
267
|
|
265
268
|
# c test whether the approximation sinf(x) is an acceptable solution.
|
@@ -300,7 +303,7 @@ def _generate_knots_impl(x, y, *, w=None, xb=None, xe=None, k=3, s=0, nest=None)
|
|
300
303
|
|
301
304
|
# recompute if needed
|
302
305
|
if j < nplus - 1:
|
303
|
-
residuals = _get_residuals(x, y, t, k, w=w)
|
306
|
+
residuals, _ = _get_residuals(x, y, t, k, w=w)
|
304
307
|
|
305
308
|
# this should never be reached
|
306
309
|
return
|
@@ -536,11 +539,15 @@ class Bunch:
|
|
536
539
|
self.__dict__.update(**kwargs)
|
537
540
|
|
538
541
|
|
539
|
-
|
540
|
-
2: """error. a theoretically impossible result was found during
|
542
|
+
_iermesg1 = """error. a theoretically impossible result was found during
|
541
543
|
the iteration process for finding a smoothing spline with
|
542
544
|
fp = s. probably causes : s too small.
|
543
|
-
|
545
|
+
"""
|
546
|
+
|
547
|
+
_iermesg = {
|
548
|
+
1: _iermesg1 + """the weighted sum of squared residuals is becoming NaN
|
549
|
+
""",
|
550
|
+
2: _iermesg1 + """there is an approximation returned but the corresponding
|
544
551
|
weighted sum of squared residuals does not satisfy the
|
545
552
|
condition abs(fp-s)/s < tol.
|
546
553
|
""",
|
@@ -659,7 +666,7 @@ def _make_splrep_impl(x, y, *, w=None, xb=None, xe=None, k=3, s=0, t=None, nest=
|
|
659
666
|
nest = max(m + k + 1, 2*k + 3)
|
660
667
|
else:
|
661
668
|
if nest < 2*(k + 1):
|
662
|
-
raise ValueError(f"`nest` too small: {nest = } < 2*(k+1) = {2*(k+1)}.")
|
669
|
+
raise ValueError(f"`nest` too small: {nest = } < 2*(k+1) = {2*(k+1)}.")
|
663
670
|
if t is not None:
|
664
671
|
raise ValueError("Either supply `t` or `nest`.")
|
665
672
|
|
@@ -685,13 +692,11 @@ def _make_splrep_impl(x, y, *, w=None, xb=None, xe=None, k=3, s=0, t=None, nest=
|
|
685
692
|
# ### bespoke solver ####
|
686
693
|
# initial conditions
|
687
694
|
# f(p=inf) : LSQ spline with knots t (XXX: reuse R, c)
|
688
|
-
|
689
|
-
fp = residuals.sum()
|
695
|
+
_, fp = _get_residuals(x, y, t, k, w=w)
|
690
696
|
fpinf = fp - s
|
691
697
|
|
692
698
|
# f(p=0): LSQ spline without internal knots
|
693
|
-
|
694
|
-
fp0 = residuals.sum()
|
699
|
+
_, fp0 = _get_residuals(x, y, np.array([xb]*(k+1) + [xe]*(k+1)), k, w)
|
695
700
|
fp0 = fp0 - s
|
696
701
|
|
697
702
|
# solve
|
@@ -712,7 +717,7 @@ def _make_splrep_impl(x, y, *, w=None, xb=None, xe=None, k=3, s=0, t=None, nest=
|
|
712
717
|
|
713
718
|
|
714
719
|
def make_splrep(x, y, *, w=None, xb=None, xe=None, k=3, s=0, t=None, nest=None):
|
715
|
-
r"""
|
720
|
+
r"""Create a smoothing B-spline function with bounded error, minimizing derivative jumps.
|
716
721
|
|
717
722
|
Given the set of data points ``(x[i], y[i])``, determine a smooth spline
|
718
723
|
approximation of degree ``k`` on the interval ``xb <= x <= xe``.
|
@@ -736,7 +741,7 @@ def make_splrep(x, y, *, w=None, xb=None, xe=None, k=3, s=0, t=None, nest=None):
|
|
736
741
|
especially with small `s` values.
|
737
742
|
s : float, optional
|
738
743
|
The smoothing condition. The amount of smoothness is determined by
|
739
|
-
satisfying the
|
744
|
+
satisfying the LSQ (least-squares) constraint::
|
740
745
|
|
741
746
|
sum((w * (g(x) - y))**2 ) <= s
|
742
747
|
|
@@ -829,7 +834,7 @@ def make_splrep(x, y, *, w=None, xb=None, xe=None, k=3, s=0, t=None, nest=None):
|
|
829
834
|
for a spline function :math:`g(x)` with a _fixed_ knot vector ``t``.
|
830
835
|
|
831
836
|
.. versionadded:: 1.15.0
|
832
|
-
"""
|
837
|
+
""" # noqa:E501
|
833
838
|
if s == 0:
|
834
839
|
if t is not None or w is not None or nest is not None:
|
835
840
|
raise ValueError("s==0 is for interpolation only")
|
@@ -846,7 +851,7 @@ def make_splrep(x, y, *, w=None, xb=None, xe=None, k=3, s=0, t=None, nest=None):
|
|
846
851
|
|
847
852
|
def make_splprep(x, *, w=None, u=None, ub=None, ue=None, k=3, s=0, t=None, nest=None):
|
848
853
|
r"""
|
849
|
-
|
854
|
+
Create a smoothing parametric B-spline curve with bounded error, minimizing derivative jumps.
|
850
855
|
|
851
856
|
Given a list of N 1D arrays, `x`, which represent a curve in
|
852
857
|
N-dimensional space parametrized by `u`, find a smooth approximating
|
@@ -965,7 +970,7 @@ def make_splprep(x, *, w=None, u=None, ub=None, ue=None, k=3, s=0, t=None, nest=
|
|
965
970
|
20 (1982) 171-184.
|
966
971
|
.. [2] P. Dierckx, "Curve and surface fitting with splines", Monographs on
|
967
972
|
Numerical Analysis, Oxford University Press, 1993.
|
968
|
-
"""
|
973
|
+
""" # noqa:E501
|
969
974
|
x = np.stack(x, axis=1)
|
970
975
|
|
971
976
|
# construct the default parametrization of the curve
|
@@ -989,4 +994,3 @@ def make_splprep(x, *, w=None, u=None, ub=None, ue=None, k=3, s=0, t=None, nest=
|
|
989
994
|
spl1 = BSpline(spl.t, cc, spl.k, axis=1)
|
990
995
|
|
991
996
|
return spl1, u
|
992
|
-
|
Binary file
|
Binary file
|
@@ -38,6 +38,23 @@ def lagrange(x, w):
|
|
38
38
|
lagrange : `numpy.poly1d` instance
|
39
39
|
The Lagrange interpolating polynomial.
|
40
40
|
|
41
|
+
Notes
|
42
|
+
-----
|
43
|
+
The name of this function refers to the fact that the returned object represents
|
44
|
+
a Lagrange polynomial, the unique polynomial of lowest degree that interpolates
|
45
|
+
a given set of data [1]_. It computes the polynomial using Newton's divided
|
46
|
+
differences formula [2]_; that is, it works with Newton basis polynomials rather
|
47
|
+
than Lagrange basis polynomials. For numerical calculations, the barycentric form
|
48
|
+
of Lagrange interpolation (`scipy.interpolate.BarycentricInterpolator`) is
|
49
|
+
typically more appropriate.
|
50
|
+
|
51
|
+
References
|
52
|
+
----------
|
53
|
+
.. [1] Lagrange polynomial. *Wikipedia*.
|
54
|
+
https://en.wikipedia.org/wiki/Lagrange_polynomial
|
55
|
+
.. [2] Newton polynomial. *Wikipedia*.
|
56
|
+
https://en.wikipedia.org/wiki/Newton_polynomial
|
57
|
+
|
41
58
|
Examples
|
42
59
|
--------
|
43
60
|
Interpolate :math:`f(x) = x^3` by 3 points.
|
@@ -48,7 +65,7 @@ def lagrange(x, w):
|
|
48
65
|
>>> y = x**3
|
49
66
|
>>> poly = lagrange(x, y)
|
50
67
|
|
51
|
-
Since there are only 3 points, Lagrange polynomial has degree 2. Explicitly,
|
68
|
+
Since there are only 3 points, the Lagrange polynomial has degree 2. Explicitly,
|
52
69
|
it is given by
|
53
70
|
|
54
71
|
.. math::
|
@@ -110,6 +127,8 @@ class interp2d:
|
|
110
127
|
interp2d(x, y, z, kind='linear', copy=True, bounds_error=False,
|
111
128
|
fill_value=None)
|
112
129
|
|
130
|
+
Class for 2D interpolation (deprecated and removed)
|
131
|
+
|
113
132
|
.. versionremoved:: 1.14.0
|
114
133
|
|
115
134
|
`interp2d` has been removed in SciPy 1.14.0.
|
@@ -153,7 +172,7 @@ def _do_extrapolate(fill_value):
|
|
153
172
|
|
154
173
|
class interp1d(_Interpolator1D):
|
155
174
|
"""
|
156
|
-
Interpolate a 1-D function.
|
175
|
+
Interpolate a 1-D function (legacy).
|
157
176
|
|
158
177
|
.. legacy:: class
|
159
178
|
|
@@ -402,8 +421,7 @@ class interp1d(_Interpolator1D):
|
|
402
421
|
self._call = self.__class__._call_spline
|
403
422
|
|
404
423
|
if len(self.x) < minval:
|
405
|
-
raise ValueError("x and y arrays must have at "
|
406
|
-
"least %d entries" % minval)
|
424
|
+
raise ValueError(f"x and y arrays must have at least {minval} entries")
|
407
425
|
|
408
426
|
self.fill_value = fill_value # calls the setter, can modify bounds_err
|
409
427
|
|
@@ -796,8 +814,7 @@ class _PPolyBase:
|
|
796
814
|
|
797
815
|
|
798
816
|
class PPoly(_PPolyBase):
|
799
|
-
"""
|
800
|
-
Piecewise polynomial in terms of coefficients and breakpoints
|
817
|
+
"""Piecewise polynomial in the power basis.
|
801
818
|
|
802
819
|
The polynomial between ``x[i]`` and ``x[i + 1]`` is written in the
|
803
820
|
local power basis::
|
@@ -1260,7 +1277,7 @@ class PPoly(_PPolyBase):
|
|
1260
1277
|
|
1261
1278
|
|
1262
1279
|
class BPoly(_PPolyBase):
|
1263
|
-
"""Piecewise polynomial in
|
1280
|
+
"""Piecewise polynomial in the Bernstein basis.
|
1264
1281
|
|
1265
1282
|
The polynomial between ``x[i]`` and ``x[i + 1]`` is written in the
|
1266
1283
|
Bernstein polynomial basis::
|
@@ -1650,7 +1667,7 @@ class BPoly(_PPolyBase):
|
|
1650
1667
|
if orders is None:
|
1651
1668
|
orders = [None] * m
|
1652
1669
|
else:
|
1653
|
-
if isinstance(orders,
|
1670
|
+
if isinstance(orders, int | np.integer):
|
1654
1671
|
orders = [orders] * m
|
1655
1672
|
k = max(k, max(orders))
|
1656
1673
|
|
@@ -1667,10 +1684,11 @@ class BPoly(_PPolyBase):
|
|
1667
1684
|
n1 = min(n//2, len(y1))
|
1668
1685
|
n2 = min(n - n1, len(y2))
|
1669
1686
|
n1 = min(n - n2, len(y2))
|
1670
|
-
if n1+n2 != n:
|
1671
|
-
mesg = (
|
1672
|
-
|
1673
|
-
|
1687
|
+
if n1 + n2 != n:
|
1688
|
+
mesg = (
|
1689
|
+
f"Point {xi[i]} has {len(y1)} derivatives, point {xi[i+1]} has "
|
1690
|
+
f"{len(y2)} derivatives, but order {orders[i]} requested"
|
1691
|
+
)
|
1674
1692
|
raise ValueError(mesg)
|
1675
1693
|
|
1676
1694
|
if not (n1 <= len(y1) and n2 <= len(y2)):
|
scipy/interpolate/_ndbspline.py
CHANGED
@@ -5,7 +5,7 @@ import numpy as np
|
|
5
5
|
|
6
6
|
from math import prod
|
7
7
|
|
8
|
-
from . import
|
8
|
+
from . import _dierckx # type: ignore[attr-defined]
|
9
9
|
|
10
10
|
import scipy.sparse.linalg as ssl
|
11
11
|
from scipy.sparse import csr_array
|
@@ -139,9 +139,9 @@ class NdBSpline:
|
|
139
139
|
extrapolate = bool(extrapolate)
|
140
140
|
|
141
141
|
if nu is None:
|
142
|
-
nu = np.zeros((ndim,), dtype=np.
|
142
|
+
nu = np.zeros((ndim,), dtype=np.int64)
|
143
143
|
else:
|
144
|
-
nu = np.asarray(nu, dtype=np.
|
144
|
+
nu = np.asarray(nu, dtype=np.int64)
|
145
145
|
if nu.ndim != 1 or nu.shape[0] != ndim:
|
146
146
|
raise ValueError(
|
147
147
|
f"invalid number of derivative orders {nu = } for "
|
@@ -173,12 +173,10 @@ class NdBSpline:
|
|
173
173
|
|
174
174
|
# replacement for np.ravel_multi_index for indexing of `c1`:
|
175
175
|
_strides_c1 = np.asarray([s // c1.dtype.itemsize
|
176
|
-
for s in c1.strides], dtype=np.
|
176
|
+
for s in c1.strides], dtype=np.int64)
|
177
177
|
|
178
178
|
num_c_tr = c1.shape[-1] # # of trailing coefficients
|
179
|
-
out =
|
180
|
-
|
181
|
-
_bspl.evaluate_ndbspline(xi,
|
179
|
+
out = _dierckx.evaluate_ndbspline(xi,
|
182
180
|
self._t,
|
183
181
|
self._len_t,
|
184
182
|
self._k,
|
@@ -188,7 +186,7 @@ class NdBSpline:
|
|
188
186
|
num_c_tr,
|
189
187
|
_strides_c1,
|
190
188
|
self._indices_k1d,
|
191
|
-
|
189
|
+
)
|
192
190
|
out = out.view(self.c.dtype)
|
193
191
|
return out.reshape(xi_shape[:-1] + self.c.shape[ndim:])
|
194
192
|
|
@@ -235,15 +233,12 @@ class NdBSpline:
|
|
235
233
|
# The strides of the coeffs array: the computation is equivalent to
|
236
234
|
# >>> cstrides = [s // 8 for s in np.empty(c_shape).strides]
|
237
235
|
cs = c_shape[1:] + (1,)
|
238
|
-
cstrides = np.cumprod(cs[::-1], dtype=np.
|
236
|
+
cstrides = np.cumprod(cs[::-1], dtype=np.int64)[::-1].copy()
|
239
237
|
|
240
238
|
# heavy lifting happens here
|
241
|
-
data, indices, indptr =
|
242
|
-
|
243
|
-
|
244
|
-
k,
|
245
|
-
_indices_k1d,
|
246
|
-
cstrides)
|
239
|
+
data, indices, indptr = _dierckx._coloc_nd(xvals,
|
240
|
+
_t, len_t, k, _indices_k1d, cstrides)
|
241
|
+
|
247
242
|
return csr_array((data, indices, indptr))
|
248
243
|
|
249
244
|
|
@@ -271,7 +266,7 @@ def _preprocess_inputs(k, t_tpl):
|
|
271
266
|
# make k a tuple
|
272
267
|
k = (k,)*ndim
|
273
268
|
|
274
|
-
k = np.asarray([operator.index(ki) for ki in k], dtype=np.
|
269
|
+
k = np.asarray([operator.index(ki) for ki in k], dtype=np.int64)
|
275
270
|
|
276
271
|
if len(k) != ndim:
|
277
272
|
raise ValueError(f"len(t) = {len(t_tpl)} != {len(k) = }.")
|
@@ -305,7 +300,7 @@ def _preprocess_inputs(k, t_tpl):
|
|
305
300
|
# non-zero b-spline elements
|
306
301
|
shape = tuple(kd + 1 for kd in k)
|
307
302
|
indices = np.unravel_index(np.arange(prod(shape)), shape)
|
308
|
-
_indices_k1d = np.asarray(indices, dtype=np.
|
303
|
+
_indices_k1d = np.asarray(indices, dtype=np.int64).T.copy()
|
309
304
|
|
310
305
|
# 5. pack the knots into a single array:
|
311
306
|
# ([1, 2, 3, 4], [5, 6], (7, 8, 9)) -->
|
@@ -318,7 +313,7 @@ def _preprocess_inputs(k, t_tpl):
|
|
318
313
|
_t.fill(np.nan)
|
319
314
|
for d in range(ndim):
|
320
315
|
_t[d, :len(t_tpl[d])] = t_tpl[d]
|
321
|
-
len_t = np.asarray(len_t, dtype=np.
|
316
|
+
len_t = np.asarray(len_t, dtype=np.int64)
|
322
317
|
|
323
318
|
return k, _indices_k1d, (_t, len_t)
|
324
319
|
|
scipy/interpolate/_ndgriddata.py
CHANGED
@@ -18,11 +18,7 @@ __all__ = ['griddata', 'NearestNDInterpolator', 'LinearNDInterpolator',
|
|
18
18
|
|
19
19
|
|
20
20
|
class NearestNDInterpolator(NDInterpolatorBase):
|
21
|
-
"""
|
22
|
-
|
23
|
-
Nearest-neighbor interpolator in N > 1 dimensions.
|
24
|
-
|
25
|
-
.. versionadded:: 0.9
|
21
|
+
"""Nearest-neighbor interpolator in N > 1 dimensions.
|
26
22
|
|
27
23
|
Methods
|
28
24
|
-------
|
@@ -174,7 +170,7 @@ class NearestNDInterpolator(NDInterpolatorBase):
|
|
174
170
|
def griddata(points, values, xi, method='linear', fill_value=np.nan,
|
175
171
|
rescale=False):
|
176
172
|
"""
|
177
|
-
|
173
|
+
Convenience function for interpolating unstructured data in multiple dimensions.
|
178
174
|
|
179
175
|
Parameters
|
180
176
|
----------
|
@@ -328,5 +324,6 @@ def griddata(points, values, xi, method='linear', fill_value=np.nan,
|
|
328
324
|
rescale=rescale)
|
329
325
|
return ip(xi)
|
330
326
|
else:
|
331
|
-
raise ValueError(
|
332
|
-
|
327
|
+
raise ValueError(
|
328
|
+
f"Unknown interpolation method {method!r} for {ndim} dimensional data"
|
329
|
+
)
|