scipy 1.15.3__cp312-cp312-win_amd64.whl → 1.16.0rc2__cp312-cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/_cyutility.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/_lib/_ccallback_c.cp312-win_amd64.pyd +0 -0
- scipy/_lib/_docscrape.py +1 -1
- scipy/_lib/_elementwise_iterative_method.py +15 -26
- scipy/_lib/_fpumode.cp312-win_amd64.dll.a +0 -0
- scipy/_lib/_fpumode.cp312-win_amd64.pyd +0 -0
- scipy/_lib/_sparse.py +41 -0
- scipy/_lib/_test_ccallback.cp312-win_amd64.dll.a +0 -0
- scipy/_lib/_test_ccallback.cp312-win_amd64.pyd +0 -0
- scipy/_lib/_test_deprecation_call.cp312-win_amd64.dll.a +0 -0
- scipy/_lib/_test_deprecation_call.cp312-win_amd64.pyd +0 -0
- scipy/_lib/_test_deprecation_def.cp312-win_amd64.dll.a +0 -0
- scipy/_lib/_test_deprecation_def.cp312-win_amd64.pyd +0 -0
- scipy/_lib/_testutils.py +6 -2
- scipy/_lib/_uarray/_uarray.cp312-win_amd64.dll.a +0 -0
- scipy/_lib/_uarray/_uarray.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/_lib/messagestream.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/cluster/_hierarchy.cp312-win_amd64.pyd +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp312-win_amd64.dll.a +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp312-win_amd64.pyd +0 -0
- scipy/cluster/_vq.cp312-win_amd64.dll.a +0 -0
- scipy/cluster/_vq.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/fft/_pocketfft/pypocketfft.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/fftpack/convolve.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/integrate/_dop.cp312-win_amd64.pyd +0 -0
- scipy/integrate/_lsoda.cp312-win_amd64.dll.a +0 -0
- scipy/integrate/_lsoda.cp312-win_amd64.pyd +0 -0
- scipy/integrate/_ode.py +9 -2
- scipy/integrate/_odepack.cp312-win_amd64.dll.a +0 -0
- scipy/integrate/_odepack.cp312-win_amd64.pyd +0 -0
- scipy/integrate/_quad_vec.py +21 -29
- scipy/integrate/_quadpack.cp312-win_amd64.dll.a +0 -0
- scipy/integrate/_quadpack.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/integrate/_test_multivariate.cp312-win_amd64.pyd +0 -0
- scipy/integrate/_test_odeint_banded.cp312-win_amd64.dll.a +0 -0
- scipy/integrate/_test_odeint_banded.cp312-win_amd64.pyd +0 -0
- scipy/integrate/_vode.cp312-win_amd64.dll.a +0 -0
- scipy/integrate/_vode.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/interpolate/_dfitpack.cp312-win_amd64.pyd +0 -0
- scipy/interpolate/_dierckx.cp312-win_amd64.dll.a +0 -0
- scipy/interpolate/_dierckx.cp312-win_amd64.pyd +0 -0
- scipy/interpolate/_fitpack.cp312-win_amd64.dll.a +0 -0
- scipy/interpolate/_fitpack.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/interpolate/_interpnd.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/interpolate/_ppoly.cp312-win_amd64.pyd +0 -0
- scipy/interpolate/_rbf.py +2 -2
- scipy/interpolate/_rbfinterp.py +1 -1
- scipy/interpolate/_rbfinterp_pythran.cp312-win_amd64.dll.a +0 -0
- scipy/interpolate/_rbfinterp_pythran.cp312-win_amd64.pyd +0 -0
- scipy/interpolate/_rgi.py +31 -26
- scipy/interpolate/_rgi_cython.cp312-win_amd64.dll.a +0 -0
- scipy/interpolate/_rgi_cython.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/io/_fast_matrix_market/_fmm_core.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/io/_test_fortran.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/io/matlab/_mio5_utils.cp312-win_amd64.pyd +0 -0
- scipy/io/matlab/_mio_utils.cp312-win_amd64.dll.a +0 -0
- scipy/io/matlab/_mio_utils.cp312-win_amd64.pyd +0 -0
- scipy/io/matlab/_miobase.py +4 -1
- scipy/io/matlab/_streams.cp312-win_amd64.dll.a +0 -0
- scipy/io/matlab/_streams.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/_cythonized_array_utils.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_interpolative.cp312-win_amd64.pyd +0 -0
- scipy/linalg/_decomp_ldl.py +4 -1
- scipy/linalg/_decomp_lu.py +18 -6
- scipy/linalg/_decomp_lu_cython.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_lu_cython.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_update.cp312-win_amd64.pyd +0 -0
- scipy/linalg/_expm_frechet.py +4 -0
- scipy/linalg/_fblas.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/_fblas.cp312-win_amd64.pyd +0 -0
- scipy/linalg/_flapack.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/_flapack.cp312-win_amd64.pyd +0 -0
- scipy/linalg/_linalg_pythran.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/_linalg_pythran.cp312-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs.py +187 -4
- scipy/linalg/_matfuncs_expm.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_expm.cp312-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cp312-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +1 -99
- scipy/linalg/_matfuncs_sqrtm_triu.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp312-win_amd64.pyd +0 -0
- scipy/linalg/_procrustes.py +2 -0
- scipy/linalg/_sketches.py +17 -6
- scipy/linalg/_solve_toeplitz.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/_solve_toeplitz.cp312-win_amd64.pyd +0 -0
- scipy/linalg/_solvers.py +7 -2
- scipy/linalg/_special_matrices.py +26 -36
- scipy/linalg/cython_blas.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/cython_blas.cp312-win_amd64.pyd +0 -0
- scipy/linalg/cython_lapack.cp312-win_amd64.dll.a +0 -0
- scipy/linalg/cython_lapack.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/ndimage/_ctest.cp312-win_amd64.pyd +0 -0
- scipy/ndimage/_cytest.cp312-win_amd64.dll.a +0 -0
- scipy/ndimage/_cytest.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/ndimage/_nd_image.cp312-win_amd64.pyd +0 -0
- scipy/ndimage/_ni_docstrings.py +5 -1
- scipy/ndimage/_ni_label.cp312-win_amd64.dll.a +0 -0
- scipy/ndimage/_ni_label.cp312-win_amd64.pyd +0 -0
- scipy/ndimage/_ni_support.py +1 -5
- scipy/ndimage/_rank_filter_1d.cp312-win_amd64.dll.a +0 -0
- scipy/ndimage/_rank_filter_1d.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/odr/__odrpack.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_basinhopping.py +13 -7
- scipy/optimize/_bglu_dense.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_bglu_dense.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_direct.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_dual_annealing.py +1 -1
- scipy/optimize/_elementwise.py +1 -4
- scipy/optimize/_group_columns.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_group_columns.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_highspy/_core.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_highspy/_core.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_highspy/_highs_options.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_highspy/_highs_options.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_lbfgsb.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_lbfgsb.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_lsap.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_lsq/common.py +3 -3
- scipy/optimize/_lsq/dogbox.py +16 -2
- scipy/optimize/_lsq/givens_elimination.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_lsq/givens_elimination.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_minpack.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_minpack_py.py +21 -14
- scipy/optimize/_moduleTNC.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_moduleTNC.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_pava_pybind.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_slsqplib.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_spectral.py +1 -1
- scipy/optimize/_tnc.py +8 -1
- scipy/optimize/_trlib/_trlib.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_trlib/_trlib.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_zeros.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_zeros_py.py +97 -17
- scipy/optimize/cython_optimize/_zeros.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/cython_optimize/_zeros.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/signal/_max_len_seq_inner.cp312-win_amd64.pyd +0 -0
- scipy/signal/_peak_finding_utils.cp312-win_amd64.dll.a +0 -0
- scipy/signal/_peak_finding_utils.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/signal/_sigtools.cp312-win_amd64.pyd +0 -0
- scipy/signal/_sosfilt.cp312-win_amd64.dll.a +0 -0
- scipy/signal/_sosfilt.cp312-win_amd64.pyd +0 -0
- scipy/signal/_spectral_py.py +230 -50
- scipy/signal/_spline.cp312-win_amd64.dll.a +0 -0
- scipy/signal/_spline.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/signal/_upfirdn_apply.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/_csparsetools.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/_sparsetools.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_flow.cp312-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_matching.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_matching.cp312-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp312-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_reordering.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_reordering.cp312-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_shortest_path.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_shortest_path.cp312-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_tools.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_tools.cp312-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_traversal.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_traversal.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_dsolve/_superlu.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_eigen/arpack/_arpack.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_cpropack.cp312-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp312-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp312-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp312-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/spatial/_ckdtree.cp312-win_amd64.pyd +0 -0
- scipy/spatial/_distance_pybind.cp312-win_amd64.dll.a +0 -0
- scipy/spatial/_distance_pybind.cp312-win_amd64.pyd +0 -0
- scipy/spatial/_distance_wrap.cp312-win_amd64.dll.a +0 -0
- scipy/spatial/_distance_wrap.cp312-win_amd64.pyd +0 -0
- scipy/spatial/_hausdorff.cp312-win_amd64.dll.a +0 -0
- scipy/spatial/_hausdorff.cp312-win_amd64.pyd +0 -0
- scipy/spatial/_qhull.cp312-win_amd64.dll.a +0 -0
- scipy/spatial/_qhull.cp312-win_amd64.pyd +0 -0
- scipy/spatial/_voronoi.cp312-win_amd64.dll.a +0 -0
- scipy/spatial/_voronoi.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/spatial/transform/_rigid_transform.cp312-win_amd64.pyd +0 -0
- scipy/spatial/transform/_rotation.cp312-win_amd64.dll.a +0 -0
- scipy/spatial/transform/_rotation.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/special/_comb.cp312-win_amd64.pyd +0 -0
- scipy/special/_ellip_harm_2.cp312-win_amd64.dll.a +0 -0
- scipy/special/_ellip_harm_2.cp312-win_amd64.pyd +0 -0
- scipy/special/_gufuncs.cp312-win_amd64.dll.a +0 -0
- scipy/special/_gufuncs.cp312-win_amd64.pyd +0 -0
- scipy/special/_logsumexp.py +67 -58
- scipy/special/_orthogonal.pyi +1 -1
- scipy/special/_specfun.cp312-win_amd64.dll.a +0 -0
- scipy/special/_specfun.cp312-win_amd64.pyd +0 -0
- scipy/special/_special_ufuncs.cp312-win_amd64.dll.a +0 -0
- scipy/special/_special_ufuncs.cp312-win_amd64.pyd +0 -0
- scipy/special/_spherical_bessel.py +4 -4
- scipy/special/_support_alternative_backends.py +212 -119
- scipy/special/_test_internal.cp312-win_amd64.dll.a +0 -0
- scipy/special/_test_internal.cp312-win_amd64.pyd +0 -0
- scipy/special/_testutils.py +4 -4
- scipy/special/_ufuncs.cp312-win_amd64.dll.a +0 -0
- scipy/special/_ufuncs.cp312-win_amd64.pyd +0 -0
- scipy/special/_ufuncs.pyi +1 -0
- scipy/special/_ufuncs.pyx +215 -1400
- scipy/special/_ufuncs_cxx.cp312-win_amd64.dll.a +0 -0
- scipy/special/_ufuncs_cxx.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/special/cython_special.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/stats/_ansari_swilk_statistics.cp312-win_amd64.pyd +0 -0
- scipy/stats/_axis_nan_policy.py +5 -12
- scipy/stats/_biasedurn.cp312-win_amd64.dll.a +0 -0
- scipy/stats/_biasedurn.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/stats/_levy_stable/levyst.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/stats/_qmc_cy.cp312-win_amd64.pyd +0 -0
- scipy/stats/_qmvnt.py +16 -95
- scipy/stats/_qmvnt_cy.cp312-win_amd64.dll.a +0 -0
- scipy/stats/_qmvnt_cy.cp312-win_amd64.pyd +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/rcont.cp312-win_amd64.dll.a +0 -0
- scipy/stats/_rcont/rcont.cp312-win_amd64.pyd +0 -0
- scipy/stats/_resampling.py +4 -29
- scipy/stats/_sampling.py +1 -1
- scipy/stats/_sobol.cp312-win_amd64.dll.a +0 -0
- scipy/stats/_sobol.cp312-win_amd64.pyd +0 -0
- scipy/stats/_stats.cp312-win_amd64.dll.a +0 -0
- scipy/stats/_stats.cp312-win_amd64.pyd +0 -0
- scipy/stats/_stats_mstats_common.py +21 -2
- scipy/stats/_stats_py.py +550 -476
- scipy/stats/_stats_pythran.cp312-win_amd64.dll.a +0 -0
- scipy/stats/_stats_pythran.cp312-win_amd64.pyd +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp312-win_amd64.dll.a +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/interpolate/_bspl.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_cobyla.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_cobyla.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_cython_nnls.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_cython_nnls.cp312-win_amd64.pyd +0 -0
- scipy/optimize/_slsqp.cp312-win_amd64.dll.a +0 -0
- scipy/optimize/_slsqp.cp312-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.cp312-win_amd64.dll.a +0 -0
- scipy/stats/_mvn.cp312-win_amd64.pyd +0 -0
- scipy-1.15.3.dist-info/DELVEWHEEL +0 -2
- /scipy-1.15.3-cp312-cp312-win_amd64.whl → /scipy-1.16.0rc2-cp312-cp312-win_amd64.whl +0 -0
- {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/WHEEL +0 -0
scipy/interpolate/_bsplines.py
CHANGED
@@ -237,8 +237,7 @@ class BSpline:
|
|
237
237
|
if self.t.ndim != 1:
|
238
238
|
raise ValueError("Knot vector must be one-dimensional.")
|
239
239
|
if n < self.k + 1:
|
240
|
-
raise ValueError("Need at least
|
241
|
-
(2*k + 2, k))
|
240
|
+
raise ValueError(f"Need at least {2*k + 2} knots for degree {k}")
|
242
241
|
if (np.diff(self.t) < 0).any():
|
243
242
|
raise ValueError("Knots must be in a non-decreasing order.")
|
244
243
|
if len(np.unique(self.t[k:n+1])) < 2:
|
@@ -503,25 +502,33 @@ class BSpline:
|
|
503
502
|
# [self.t[k], self.t[n]].
|
504
503
|
if extrapolate == 'periodic':
|
505
504
|
n = self.t.size - self.k - 1
|
506
|
-
x = self.t[self.k] + (x - self.t[self.k]) % (self.t[n] -
|
507
|
-
self.t[self.k])
|
505
|
+
x = self.t[self.k] + (x - self.t[self.k]) % (self.t[n] - self.t[self.k])
|
508
506
|
extrapolate = False
|
509
507
|
|
510
|
-
out = np.empty((len(x), prod(self.c.shape[1:])), dtype=self.c.dtype)
|
511
508
|
self._ensure_c_contiguous()
|
512
509
|
|
513
|
-
# if self.c is complex
|
514
|
-
# floats
|
510
|
+
# if self.c is complex: the C code in _dierckxmodule.cc expects
|
511
|
+
# floats, so make a view---this expands the last axis, and
|
515
512
|
# the view is C contiguous if the original is.
|
516
513
|
# if c.dtype is complex of shape (n,), c.view(float).shape == (2*n,)
|
517
514
|
# if c.dtype is complex of shape (n, m), c.view(float).shape == (n, 2*m)
|
518
515
|
|
519
|
-
|
520
|
-
if
|
521
|
-
cc =
|
516
|
+
is_complex = self.c.dtype.kind == 'c'
|
517
|
+
if is_complex:
|
518
|
+
cc = self.c.view(float)
|
519
|
+
if self.c.ndim == 1:
|
520
|
+
cc = cc.reshape(self.c.shape[0], 2)
|
521
|
+
else:
|
522
|
+
cc = self.c
|
523
|
+
|
524
|
+
# flatten the trailing dims
|
525
|
+
cc = cc.reshape(cc.shape[0], -1)
|
522
526
|
|
523
|
-
|
524
|
-
|
527
|
+
# heavy lifting: actually perform the evaluations
|
528
|
+
out = _dierckx.evaluate_spline(self.t, cc, self.k, x, nu, extrapolate)
|
529
|
+
|
530
|
+
if is_complex:
|
531
|
+
out = out.view(complex)
|
525
532
|
|
526
533
|
out = out.reshape(x_shape + self.c.shape[1:])
|
527
534
|
if self.axis != 0:
|
@@ -553,7 +560,7 @@ class BSpline:
|
|
553
560
|
|
554
561
|
Returns
|
555
562
|
-------
|
556
|
-
b : BSpline object
|
563
|
+
b : `BSpline` object
|
557
564
|
A new instance representing the derivative.
|
558
565
|
|
559
566
|
See Also
|
@@ -580,7 +587,7 @@ class BSpline:
|
|
580
587
|
|
581
588
|
Returns
|
582
589
|
-------
|
583
|
-
b : BSpline object
|
590
|
+
b : `BSpline` object
|
584
591
|
A new instance representing the antiderivative.
|
585
592
|
|
586
593
|
Notes
|
@@ -682,8 +689,6 @@ class BSpline:
|
|
682
689
|
integral = _fitpack_impl.splint(a, b, self.tck)
|
683
690
|
return np.asarray(integral * sign)
|
684
691
|
|
685
|
-
out = np.empty((2, prod(self.c.shape[1:])), dtype=self.c.dtype)
|
686
|
-
|
687
692
|
# Compute the antiderivative.
|
688
693
|
c = self.c
|
689
694
|
ct = len(self.t) - len(c)
|
@@ -703,8 +708,8 @@ class BSpline:
|
|
703
708
|
if n_periods > 0:
|
704
709
|
# Evaluate the difference of antiderivatives.
|
705
710
|
x = np.asarray([ts, te], dtype=np.float64)
|
706
|
-
_dierckx.evaluate_spline(ta, ca.reshape(ca.shape[0], -1),
|
707
|
-
ka, x, 0, False
|
711
|
+
out = _dierckx.evaluate_spline(ta, ca.reshape(ca.shape[0], -1),
|
712
|
+
ka, x, 0, False)
|
708
713
|
integral = out[1] - out[0]
|
709
714
|
integral *= n_periods
|
710
715
|
else:
|
@@ -719,24 +724,24 @@ class BSpline:
|
|
719
724
|
# over [a, te] and from xs to what is remained.
|
720
725
|
if b <= te:
|
721
726
|
x = np.asarray([a, b], dtype=np.float64)
|
722
|
-
_dierckx.evaluate_spline(ta, ca.reshape(ca.shape[0], -1),
|
723
|
-
ka, x, 0, False
|
727
|
+
out = _dierckx.evaluate_spline(ta, ca.reshape(ca.shape[0], -1),
|
728
|
+
ka, x, 0, False)
|
724
729
|
integral += out[1] - out[0]
|
725
730
|
else:
|
726
731
|
x = np.asarray([a, te], dtype=np.float64)
|
727
|
-
_dierckx.evaluate_spline(ta, ca.reshape(ca.shape[0], -1),
|
728
|
-
ka, x, 0, False
|
732
|
+
out = _dierckx.evaluate_spline(ta, ca.reshape(ca.shape[0], -1),
|
733
|
+
ka, x, 0, False)
|
729
734
|
integral += out[1] - out[0]
|
730
735
|
|
731
736
|
x = np.asarray([ts, ts + b - te], dtype=np.float64)
|
732
|
-
_dierckx.evaluate_spline(ta, ca.reshape(ca.shape[0], -1),
|
733
|
-
ka, x, 0, False
|
737
|
+
out = _dierckx.evaluate_spline(ta, ca.reshape(ca.shape[0], -1),
|
738
|
+
ka, x, 0, False)
|
734
739
|
integral += out[1] - out[0]
|
735
740
|
else:
|
736
741
|
# Evaluate the difference of antiderivatives.
|
737
742
|
x = np.asarray([a, b], dtype=np.float64)
|
738
|
-
_dierckx.evaluate_spline(ta, ca.reshape(ca.shape[0], -1),
|
739
|
-
ka, x, 0, extrapolate
|
743
|
+
out = _dierckx.evaluate_spline(ta, ca.reshape(ca.shape[0], -1),
|
744
|
+
ka, x, 0, extrapolate)
|
740
745
|
integral = out[1] - out[0]
|
741
746
|
|
742
747
|
integral *= sign
|
@@ -763,7 +768,7 @@ class BSpline:
|
|
763
768
|
|
764
769
|
Returns
|
765
770
|
-------
|
766
|
-
b : BSpline object
|
771
|
+
b : `BSpline` object
|
767
772
|
A new instance representing the initial polynomial
|
768
773
|
in the B-spline basis.
|
769
774
|
|
@@ -865,8 +870,8 @@ class BSpline:
|
|
865
870
|
|
866
871
|
Returns
|
867
872
|
-------
|
868
|
-
spl : BSpline object
|
869
|
-
A new BSpline object with the new knot inserted.
|
873
|
+
spl : `BSpline` object
|
874
|
+
A new `BSpline` object with the new knot inserted.
|
870
875
|
|
871
876
|
Notes
|
872
877
|
-----
|
@@ -1287,7 +1292,8 @@ def _make_periodic_spline(x, y, t, k, axis):
|
|
1287
1292
|
|
1288
1293
|
Returns
|
1289
1294
|
-------
|
1290
|
-
b :
|
1295
|
+
b : `BSpline` object
|
1296
|
+
A `BSpline` object of the degree ``k`` and with knots ``t``.
|
1291
1297
|
|
1292
1298
|
Notes
|
1293
1299
|
-----
|
@@ -1362,7 +1368,7 @@ def _make_periodic_spline(x, y, t, k, axis):
|
|
1362
1368
|
|
1363
1369
|
def make_interp_spline(x, y, k=3, t=None, bc_type=None, axis=0,
|
1364
1370
|
check_finite=True):
|
1365
|
-
"""
|
1371
|
+
"""Create an interpolating B-spline with specified degree and boundary conditions.
|
1366
1372
|
|
1367
1373
|
Parameters
|
1368
1374
|
----------
|
@@ -1407,7 +1413,8 @@ def make_interp_spline(x, y, k=3, t=None, bc_type=None, axis=0,
|
|
1407
1413
|
|
1408
1414
|
Returns
|
1409
1415
|
-------
|
1410
|
-
b :
|
1416
|
+
b : `BSpline` object
|
1417
|
+
A `BSpline` object of the degree ``k`` and with knots ``t``.
|
1411
1418
|
|
1412
1419
|
See Also
|
1413
1420
|
--------
|
@@ -1565,8 +1572,7 @@ def make_interp_spline(x, y, k=3, t=None, bc_type=None, axis=0,
|
|
1565
1572
|
if t.ndim != 1 or np.any(t[1:] < t[:-1]):
|
1566
1573
|
raise ValueError("Expect t to be a 1-D sorted array_like.")
|
1567
1574
|
if t.size < x.size + k + 1:
|
1568
|
-
raise ValueError(
|
1569
|
-
(t.size, x.size + k + 1))
|
1575
|
+
raise ValueError(f"Got {t.size} knots, need at least {x.size + k + 1}.")
|
1570
1576
|
if (x[0] < t[k]) or (x[-1] > t[-k]):
|
1571
1577
|
raise ValueError(f'Out of bounds w/ x = {x}.')
|
1572
1578
|
|
@@ -1632,15 +1638,13 @@ def make_interp_spline(x, y, k=3, t=None, bc_type=None, axis=0,
|
|
1632
1638
|
if info > 0:
|
1633
1639
|
raise LinAlgError("Colocation matrix is singular.")
|
1634
1640
|
elif info < 0:
|
1635
|
-
raise ValueError('illegal value in
|
1636
|
-
|
1641
|
+
raise ValueError(f'illegal value in {-info}-th argument of internal gbsv')
|
1637
1642
|
c = np.ascontiguousarray(c.reshape((nt,) + y.shape[1:]))
|
1638
1643
|
return BSpline.construct_fast(t, c, k, axis=axis)
|
1639
1644
|
|
1640
1645
|
|
1641
1646
|
def make_lsq_spline(x, y, t, k=3, w=None, axis=0, check_finite=True, *, method="qr"):
|
1642
|
-
r"""
|
1643
|
-
fitting B-spline.
|
1647
|
+
r"""Create a smoothing B-spline satisfying the Least SQuares (LSQ) criterion.
|
1644
1648
|
|
1645
1649
|
The result is a linear combination
|
1646
1650
|
|
@@ -1684,7 +1688,8 @@ def make_lsq_spline(x, y, t, k=3, w=None, axis=0, check_finite=True, *, method="
|
|
1684
1688
|
|
1685
1689
|
Returns
|
1686
1690
|
-------
|
1687
|
-
b :
|
1691
|
+
b : `BSpline` object
|
1692
|
+
A `BSpline` object of the degree ``k`` with knots ``t``.
|
1688
1693
|
|
1689
1694
|
See Also
|
1690
1695
|
--------
|
@@ -1762,6 +1767,9 @@ def make_lsq_spline(x, y, t, k=3, w=None, axis=0, check_finite=True, *, method="
|
|
1762
1767
|
axis = normalize_axis_index(axis, y.ndim)
|
1763
1768
|
|
1764
1769
|
y = np.moveaxis(y, axis, 0) # now internally interp axis is zero
|
1770
|
+
if not y.flags.c_contiguous:
|
1771
|
+
# C routines in _dierckx currently require C contiguity
|
1772
|
+
y = y.copy(order='C')
|
1765
1773
|
|
1766
1774
|
if x.ndim != 1:
|
1767
1775
|
raise ValueError("Expect x to be a 1-D sequence.")
|
@@ -1825,8 +1833,9 @@ def make_lsq_spline(x, y, t, k=3, w=None, axis=0, check_finite=True, *, method="
|
|
1825
1833
|
# have observation matrix & rhs, can solve the LSQ problem
|
1826
1834
|
cho_decomp = cholesky_banded(ab, overwrite_ab=True, lower=lower,
|
1827
1835
|
check_finite=check_finite)
|
1828
|
-
|
1829
|
-
|
1836
|
+
m = rhs.shape[0]
|
1837
|
+
c = cho_solve_banded((cho_decomp, lower), rhs.reshape(m, -1), overwrite_b=True,
|
1838
|
+
check_finite=check_finite).reshape(rhs.shape)
|
1830
1839
|
elif method == "qr":
|
1831
1840
|
_, _, c = _lsq_solve_qr(x, yy, t, k, w)
|
1832
1841
|
|
@@ -2011,7 +2020,7 @@ def _compute_optimal_gcv_parameter(X, wE, y, w):
|
|
2011
2020
|
B[0] = [0.] * n
|
2012
2021
|
return B
|
2013
2022
|
|
2014
|
-
def _gcv(lam, X, XtWX, wE, XtE):
|
2023
|
+
def _gcv(lam, X, XtWX, wE, XtE, y):
|
2015
2024
|
r"""
|
2016
2025
|
Computes the generalized cross-validation criteria [1].
|
2017
2026
|
|
@@ -2096,14 +2105,29 @@ def _compute_optimal_gcv_parameter(X, wE, y, w):
|
|
2096
2105
|
XtWX = compute_banded_symmetric_XT_W_Y(X, w, X)
|
2097
2106
|
XtE = compute_banded_symmetric_XT_W_Y(X, w, wE)
|
2098
2107
|
|
2099
|
-
|
2100
|
-
|
2101
|
-
|
2102
|
-
|
2103
|
-
|
2104
|
-
|
2105
|
-
|
2106
|
-
|
2108
|
+
if y.ndim == 1:
|
2109
|
+
gcv_est = minimize_scalar(
|
2110
|
+
_gcv, bounds=(0, n), method='Bounded', args=(X, XtWX, wE, XtE, y)
|
2111
|
+
)
|
2112
|
+
if gcv_est.success:
|
2113
|
+
return gcv_est.x
|
2114
|
+
raise ValueError(f"Unable to find minimum of the GCV "
|
2115
|
+
f"function: {gcv_est.message}")
|
2116
|
+
elif y.ndim == 2:
|
2117
|
+
gcv_est = np.empty(y.shape[1])
|
2118
|
+
for i in range(y.shape[1]):
|
2119
|
+
est = minimize_scalar(
|
2120
|
+
_gcv, bounds=(0, n), method='Bounded', args=(X, XtWX, wE, XtE, y[:, i])
|
2121
|
+
)
|
2122
|
+
if est.success:
|
2123
|
+
gcv_est[i] = est.x
|
2124
|
+
else:
|
2125
|
+
raise ValueError(f"Unable to find minimum of the GCV "
|
2126
|
+
f"function: {gcv_est.message}")
|
2127
|
+
return gcv_est
|
2128
|
+
else:
|
2129
|
+
# trailing dims must have been flattened already.
|
2130
|
+
raise RuntimeError("Internal error. Please report it to scipy developers.")
|
2107
2131
|
|
2108
2132
|
|
2109
2133
|
def _coeff_of_divided_diff(x):
|
@@ -2139,8 +2163,10 @@ def _coeff_of_divided_diff(x):
|
|
2139
2163
|
return res
|
2140
2164
|
|
2141
2165
|
|
2142
|
-
def make_smoothing_spline(x, y, w=None, lam=None):
|
2166
|
+
def make_smoothing_spline(x, y, w=None, lam=None, *, axis=0):
|
2143
2167
|
r"""
|
2168
|
+
Create a smoothing B-spline satisfying the Generalized Cross Validation (GCV) criterion.
|
2169
|
+
|
2144
2170
|
Compute the (coefficients of) smoothing cubic spline function using
|
2145
2171
|
``lam`` to control the tradeoff between the amount of smoothness of the
|
2146
2172
|
curve and its proximity to the data. In case ``lam`` is None, using the
|
@@ -2167,18 +2193,22 @@ def make_smoothing_spline(x, y, w=None, lam=None):
|
|
2167
2193
|
----------
|
2168
2194
|
x : array_like, shape (n,)
|
2169
2195
|
Abscissas. `n` must be at least 5.
|
2170
|
-
y : array_like, shape (n,)
|
2196
|
+
y : array_like, shape (n, ...)
|
2171
2197
|
Ordinates. `n` must be at least 5.
|
2172
2198
|
w : array_like, shape (n,), optional
|
2173
2199
|
Vector of weights. Default is ``np.ones_like(x)``.
|
2174
2200
|
lam : float, (:math:`\lambda \geq 0`), optional
|
2175
2201
|
Regularization parameter. If ``lam`` is None, then it is found from
|
2176
2202
|
the GCV criteria. Default is None.
|
2203
|
+
axis : int, optional
|
2204
|
+
The data axis. Default is zero.
|
2205
|
+
The assumption is that ``y.shape[axis] == n``, and all other axes of ``y``
|
2206
|
+
are batching axes.
|
2177
2207
|
|
2178
2208
|
Returns
|
2179
2209
|
-------
|
2180
|
-
func :
|
2181
|
-
|
2210
|
+
func : `BSpline` object
|
2211
|
+
An object representing a spline in the B-spline basis
|
2182
2212
|
as a solution of the problem of smoothing splines using
|
2183
2213
|
the GCV criteria [1] in case ``lam`` is None, otherwise using the
|
2184
2214
|
given parameter ``lam``.
|
@@ -2241,13 +2271,13 @@ def make_smoothing_spline(x, y, w=None, lam=None):
|
|
2241
2271
|
|
2242
2272
|
>>> import matplotlib.pyplot as plt
|
2243
2273
|
>>> grid = np.linspace(x[0], x[-1], 400)
|
2274
|
+
>>> plt.plot(x, y, '.')
|
2244
2275
|
>>> plt.plot(grid, spl(grid), label='Spline')
|
2245
2276
|
>>> plt.plot(grid, func(grid), label='Original function')
|
2246
|
-
>>> plt.scatter(x, y, marker='.')
|
2247
2277
|
>>> plt.legend(loc='best')
|
2248
2278
|
>>> plt.show()
|
2249
2279
|
|
2250
|
-
"""
|
2280
|
+
""" # noqa:E501
|
2251
2281
|
|
2252
2282
|
x = np.ascontiguousarray(x, dtype=float)
|
2253
2283
|
y = np.ascontiguousarray(y, dtype=float)
|
@@ -2255,9 +2285,8 @@ def make_smoothing_spline(x, y, w=None, lam=None):
|
|
2255
2285
|
if any(x[1:] - x[:-1] <= 0):
|
2256
2286
|
raise ValueError('``x`` should be an ascending array')
|
2257
2287
|
|
2258
|
-
if x.ndim != 1 or
|
2259
|
-
raise ValueError('``x`` and
|
2260
|
-
' same size')
|
2288
|
+
if x.ndim != 1 or x.shape[0] != y.shape[axis]:
|
2289
|
+
raise ValueError(f'``x`` should be 1D and {x.shape = } == {y.shape = }')
|
2261
2290
|
|
2262
2291
|
if w is None:
|
2263
2292
|
w = np.ones(len(x))
|
@@ -2272,6 +2301,15 @@ def make_smoothing_spline(x, y, w=None, lam=None):
|
|
2272
2301
|
if n <= 4:
|
2273
2302
|
raise ValueError('``x`` and ``y`` length must be at least 5')
|
2274
2303
|
|
2304
|
+
# Internals assume that the data axis is the zero-th axis
|
2305
|
+
axis = normalize_axis_index(axis, y.ndim)
|
2306
|
+
y = np.moveaxis(y, axis, 0)
|
2307
|
+
|
2308
|
+
# flatten the trailing axes of y to simplify further manipulations
|
2309
|
+
y_shape1 = y.shape[1:]
|
2310
|
+
if y_shape1 != ():
|
2311
|
+
y = y.reshape((n, -1))
|
2312
|
+
|
2275
2313
|
# It is known that the solution to the stated minimization problem exists
|
2276
2314
|
# and is a natural cubic spline with vector of knots equal to the unique
|
2277
2315
|
# elements of ``x`` [3], so we will solve the problem in the basis of
|
@@ -2316,15 +2354,30 @@ def make_smoothing_spline(x, y, w=None, lam=None):
|
|
2316
2354
|
raise ValueError('Regularization parameter should be non-negative')
|
2317
2355
|
|
2318
2356
|
# solve the initial problem in the basis of natural splines
|
2319
|
-
|
2357
|
+
if np.ndim(lam) == 0:
|
2358
|
+
c = solve_banded((2, 2), X + lam * wE, y)
|
2359
|
+
elif np.ndim(lam) == 1:
|
2360
|
+
# XXX: solve_banded does not suppport batched `ab` matrices; loop manually
|
2361
|
+
c = np.empty((n, lam.shape[0]))
|
2362
|
+
for i in range(lam.shape[0]):
|
2363
|
+
c[:, i] = solve_banded((2, 2), X + lam[i] * wE, y[:, i])
|
2364
|
+
else:
|
2365
|
+
# this should not happen, ever
|
2366
|
+
raise RuntimeError("Internal error, please report it to SciPy developers.")
|
2367
|
+
c = c.reshape((c.shape[0], *y_shape1))
|
2368
|
+
|
2369
|
+
# hack: these are c[0], c[1] etc, shape-compatible with np.r_ below
|
2370
|
+
c0, c1 = c[0:1, ...], c[1:2, ...] # c[0], c[1]
|
2371
|
+
cm0, cm1 = c[-1:-2:-1, ...], c[-2:-3:-1, ...] # c[-1], c[-2]
|
2372
|
+
|
2320
2373
|
# move back to B-spline basis using equations (2.2.10) [4]
|
2321
|
-
c_ = np.r_[
|
2322
|
-
|
2323
|
-
c[1: -1],
|
2324
|
-
|
2325
|
-
|
2374
|
+
c_ = np.r_[c0 * (t[5] + t[4] - 2 * t[3]) + c1,
|
2375
|
+
c0 * (t[5] - t[3]) + c1,
|
2376
|
+
c[1: -1, ...],
|
2377
|
+
cm0 * (t[-4] - t[-6]) + cm1,
|
2378
|
+
cm0 * (2 * t[-4] - t[-5] - t[-6]) + cm1]
|
2326
2379
|
|
2327
|
-
return BSpline.construct_fast(t, c_, 3)
|
2380
|
+
return BSpline.construct_fast(t, c_, 3, axis=axis)
|
2328
2381
|
|
2329
2382
|
|
2330
2383
|
########################
|
scipy/interpolate/_cubic.py
CHANGED
@@ -70,7 +70,7 @@ def prepare_input(x, y, axis, dydx=None):
|
|
70
70
|
|
71
71
|
|
72
72
|
class CubicHermiteSpline(PPoly):
|
73
|
-
"""Piecewise
|
73
|
+
"""Piecewise cubic interpolator to fit values and first derivatives (C1 smooth).
|
74
74
|
|
75
75
|
The result is represented as a `PPoly` instance.
|
76
76
|
|
@@ -115,6 +115,7 @@ class CubicHermiteSpline(PPoly):
|
|
115
115
|
derivative
|
116
116
|
antiderivative
|
117
117
|
integrate
|
118
|
+
solve
|
118
119
|
roots
|
119
120
|
|
120
121
|
See Also
|
@@ -157,7 +158,7 @@ class CubicHermiteSpline(PPoly):
|
|
157
158
|
|
158
159
|
|
159
160
|
class PchipInterpolator(CubicHermiteSpline):
|
160
|
-
r"""PCHIP
|
161
|
+
r"""PCHIP shape-preserving interpolator (C1 smooth).
|
161
162
|
|
162
163
|
``x`` and ``y`` are arrays of values used to approximate some function f,
|
163
164
|
with ``y = f(x)``. The interpolant uses monotonic cubic splines
|
@@ -185,8 +186,11 @@ class PchipInterpolator(CubicHermiteSpline):
|
|
185
186
|
__call__
|
186
187
|
derivative
|
187
188
|
antiderivative
|
189
|
+
integrate
|
190
|
+
solve
|
188
191
|
roots
|
189
192
|
|
193
|
+
|
190
194
|
See Also
|
191
195
|
--------
|
192
196
|
CubicHermiteSpline : Piecewise-cubic interpolator.
|
@@ -327,12 +331,6 @@ def pchip_interpolate(xi, yi, x, der=0, axis=0):
|
|
327
331
|
A 1-D array of real values. `yi`'s length along the interpolation
|
328
332
|
axis must be equal to the length of `xi`. If N-D array, use axis
|
329
333
|
parameter to select correct axis.
|
330
|
-
|
331
|
-
.. deprecated:: 1.13.0
|
332
|
-
Complex data is deprecated and will raise an error in
|
333
|
-
SciPy 1.15.0. If you are trying to use the real components of
|
334
|
-
the passed array, use ``np.real`` on `yi`.
|
335
|
-
|
336
334
|
x : scalar or array_like
|
337
335
|
Of length M.
|
338
336
|
der : int or list, optional
|
@@ -378,8 +376,7 @@ def pchip_interpolate(xi, yi, x, der=0, axis=0):
|
|
378
376
|
|
379
377
|
|
380
378
|
class Akima1DInterpolator(CubicHermiteSpline):
|
381
|
-
r"""
|
382
|
-
Akima interpolator
|
379
|
+
r"""Akima "visually pleasing" interpolator (C1 smooth).
|
383
380
|
|
384
381
|
Fit piecewise cubic polynomials, given vectors x and y. The interpolation
|
385
382
|
method by Akima uses a continuously differentiable sub-spline built from
|
@@ -404,15 +401,17 @@ class Akima1DInterpolator(CubicHermiteSpline):
|
|
404
401
|
.. versionadded:: 1.13.0
|
405
402
|
|
406
403
|
extrapolate : {bool, None}, optional
|
407
|
-
If bool, determines whether to extrapolate to out-of-bounds points
|
408
|
-
based on first and last intervals, or to return NaNs. If None,
|
404
|
+
If bool, determines whether to extrapolate to out-of-bounds points
|
405
|
+
based on first and last intervals, or to return NaNs. If None,
|
409
406
|
``extrapolate`` is set to False.
|
410
|
-
|
407
|
+
|
411
408
|
Methods
|
412
409
|
-------
|
413
410
|
__call__
|
414
411
|
derivative
|
415
412
|
antiderivative
|
413
|
+
integrate
|
414
|
+
solve
|
416
415
|
roots
|
417
416
|
|
418
417
|
See Also
|
@@ -489,7 +488,7 @@ class Akima1DInterpolator(CubicHermiteSpline):
|
|
489
488
|
|
490
489
|
"""
|
491
490
|
|
492
|
-
def __init__(self, x, y, axis=0, *, method: Literal["akima", "makima"]="akima",
|
491
|
+
def __init__(self, x, y, axis=0, *, method: Literal["akima", "makima"]="akima",
|
493
492
|
extrapolate:bool | None = None):
|
494
493
|
if method not in {"akima", "makima"}:
|
495
494
|
raise NotImplementedError(f"`method`={method} is unsupported.")
|
@@ -507,37 +506,45 @@ class Akima1DInterpolator(CubicHermiteSpline):
|
|
507
506
|
# Akima extrapolation historically False; parent class defaults to True.
|
508
507
|
extrapolate = False if extrapolate is None else extrapolate
|
509
508
|
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
m[0] = 2. * m[1] - m[2]
|
518
|
-
# ... and on the right
|
519
|
-
m[-2] = 2. * m[-3] - m[-4]
|
520
|
-
m[-1] = 2. * m[-2] - m[-3]
|
521
|
-
|
522
|
-
# if m1 == m2 != m3 == m4, the slope at the breakpoint is not
|
523
|
-
# defined. This is the fill value:
|
524
|
-
t = .5 * (m[3:] + m[:-3])
|
525
|
-
# get the denominator of the slope t
|
526
|
-
dm = np.abs(np.diff(m, axis=0))
|
527
|
-
if method == "makima":
|
528
|
-
pm = np.abs(m[1:] + m[:-1])
|
529
|
-
f1 = dm[2:] + 0.5 * pm[2:]
|
530
|
-
f2 = dm[:-2] + 0.5 * pm[:-2]
|
509
|
+
if y.shape[0] == 2:
|
510
|
+
# edge case: only have two points, use linear interpolation
|
511
|
+
xp = x.reshape((x.shape[0],) + (1,)*(y.ndim-1))
|
512
|
+
hk = xp[1:] - xp[:-1]
|
513
|
+
mk = (y[1:] - y[:-1]) / hk
|
514
|
+
t = np.zeros_like(y)
|
515
|
+
t[...] = mk
|
531
516
|
else:
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
517
|
+
# determine slopes between breakpoints
|
518
|
+
m = np.empty((x.size + 3, ) + y.shape[1:])
|
519
|
+
dx = dx[(slice(None), ) + (None, ) * (y.ndim - 1)]
|
520
|
+
m[2:-2] = np.diff(y, axis=0) / dx
|
521
|
+
|
522
|
+
# add two additional points on the left ...
|
523
|
+
m[1] = 2. * m[2] - m[3]
|
524
|
+
m[0] = 2. * m[1] - m[2]
|
525
|
+
# ... and on the right
|
526
|
+
m[-2] = 2. * m[-3] - m[-4]
|
527
|
+
m[-1] = 2. * m[-2] - m[-3]
|
528
|
+
|
529
|
+
# if m1 == m2 != m3 == m4, the slope at the breakpoint is not
|
530
|
+
# defined. This is the fill value:
|
531
|
+
t = .5 * (m[3:] + m[:-3])
|
532
|
+
# get the denominator of the slope t
|
533
|
+
dm = np.abs(np.diff(m, axis=0))
|
534
|
+
if method == "makima":
|
535
|
+
pm = np.abs(m[1:] + m[:-1])
|
536
|
+
f1 = dm[2:] + 0.5 * pm[2:]
|
537
|
+
f2 = dm[:-2] + 0.5 * pm[:-2]
|
538
|
+
else:
|
539
|
+
f1 = dm[2:]
|
540
|
+
f2 = dm[:-2]
|
541
|
+
f12 = f1 + f2
|
542
|
+
# These are the mask of where the slope at breakpoint is defined:
|
543
|
+
ind = np.nonzero(f12 > 1e-9 * np.max(f12, initial=-np.inf))
|
544
|
+
x_ind, y_ind = ind[0], ind[1:]
|
545
|
+
# Set the slope at breakpoint
|
546
|
+
t[ind] = (f1[ind] * m[(x_ind + 1,) + y_ind] +
|
547
|
+
f2[ind] * m[(x_ind + 2,) + y_ind]) / f12[ind]
|
541
548
|
|
542
549
|
super().__init__(x, y, t, axis=0, extrapolate=extrapolate)
|
543
550
|
self.axis = axis
|
@@ -560,7 +567,7 @@ class Akima1DInterpolator(CubicHermiteSpline):
|
|
560
567
|
|
561
568
|
|
562
569
|
class CubicSpline(CubicHermiteSpline):
|
563
|
-
"""
|
570
|
+
"""Piecewise cubic interpolator to fit values (C2 smooth).
|
564
571
|
|
565
572
|
Interpolate data with a piecewise cubic polynomial which is twice
|
566
573
|
continuously differentiable [1]_. The result is represented as a `PPoly`
|
@@ -636,6 +643,7 @@ class CubicSpline(CubicHermiteSpline):
|
|
636
643
|
derivative
|
637
644
|
antiderivative
|
638
645
|
integrate
|
646
|
+
solve
|
639
647
|
roots
|
640
648
|
|
641
649
|
See Also
|
@@ -774,8 +782,9 @@ class CubicSpline(CubicHermiteSpline):
|
|
774
782
|
b[1] = 3 * (dxr[0] * slope[1] + dxr[1] * slope[0])
|
775
783
|
b[2] = 2 * slope[1]
|
776
784
|
|
777
|
-
|
778
|
-
|
785
|
+
m = b.shape[0]
|
786
|
+
s = solve(A, b.reshape(m, -1), overwrite_a=True, overwrite_b=True,
|
787
|
+
check_finite=False).reshape(b.shape)
|
779
788
|
elif n == 3 and bc[0] == 'periodic':
|
780
789
|
# In case when number of points is 3 we compute the derivatives
|
781
790
|
# manually
|
@@ -835,11 +844,15 @@ class CubicSpline(CubicHermiteSpline):
|
|
835
844
|
b2[-1] = -a_m2_m1
|
836
845
|
|
837
846
|
# s1 and s2 are the solutions of (n-2, n-2) system
|
838
|
-
|
847
|
+
m = b1.shape[0]
|
848
|
+
s1 = solve_banded((1, 1), Ac, b1.reshape(m, -1), overwrite_ab=False,
|
839
849
|
overwrite_b=False, check_finite=False)
|
850
|
+
s1 = s1.reshape(b1.shape)
|
840
851
|
|
841
|
-
|
852
|
+
m = b2.shape[0]
|
853
|
+
s2 = solve_banded((1, 1), Ac, b2.reshape(m, -1), overwrite_ab=False,
|
842
854
|
overwrite_b=False, check_finite=False)
|
855
|
+
s2 = s2.reshape(b2.shape)
|
843
856
|
|
844
857
|
# computing the s[n-2] solution:
|
845
858
|
s_m1 = ((b[-1] - a_m1_0 * s1[0] - a_m1_m2 * s1[-1]) /
|
@@ -881,8 +894,10 @@ class CubicSpline(CubicHermiteSpline):
|
|
881
894
|
A[-1, -2] = dx[-1]
|
882
895
|
b[-1] = 0.5 * bc_end[1] * dx[-1]**2 + 3 * (y[-1] - y[-2])
|
883
896
|
|
884
|
-
|
897
|
+
m = b.shape[0]
|
898
|
+
s = solve_banded((1, 1), A, b.reshape(m, -1), overwrite_ab=True,
|
885
899
|
overwrite_b=True, check_finite=False)
|
900
|
+
s = s.reshape(b.shape)
|
886
901
|
|
887
902
|
super().__init__(x, y, s, axis=0, extrapolate=extrapolate)
|
888
903
|
self.axis = axis
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|