scipy 1.15.3__cp313-cp313-win_amd64.whl → 1.16.0rc2__cp313-cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/_cyutility.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/_lib/_ccallback_c.cp313-win_amd64.pyd +0 -0
- scipy/_lib/_docscrape.py +1 -1
- scipy/_lib/_elementwise_iterative_method.py +15 -26
- scipy/_lib/_fpumode.cp313-win_amd64.dll.a +0 -0
- scipy/_lib/_fpumode.cp313-win_amd64.pyd +0 -0
- scipy/_lib/_sparse.py +41 -0
- scipy/_lib/_test_ccallback.cp313-win_amd64.dll.a +0 -0
- scipy/_lib/_test_ccallback.cp313-win_amd64.pyd +0 -0
- scipy/_lib/_test_deprecation_call.cp313-win_amd64.dll.a +0 -0
- scipy/_lib/_test_deprecation_call.cp313-win_amd64.pyd +0 -0
- scipy/_lib/_test_deprecation_def.cp313-win_amd64.dll.a +0 -0
- scipy/_lib/_test_deprecation_def.cp313-win_amd64.pyd +0 -0
- scipy/_lib/_testutils.py +6 -2
- scipy/_lib/_uarray/_uarray.cp313-win_amd64.dll.a +0 -0
- scipy/_lib/_uarray/_uarray.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/_lib/messagestream.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/cluster/_hierarchy.cp313-win_amd64.pyd +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp313-win_amd64.dll.a +0 -0
- scipy/cluster/_optimal_leaf_ordering.cp313-win_amd64.pyd +0 -0
- scipy/cluster/_vq.cp313-win_amd64.dll.a +0 -0
- scipy/cluster/_vq.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/fft/_pocketfft/pypocketfft.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/fftpack/convolve.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/integrate/_dop.cp313-win_amd64.pyd +0 -0
- scipy/integrate/_lsoda.cp313-win_amd64.dll.a +0 -0
- scipy/integrate/_lsoda.cp313-win_amd64.pyd +0 -0
- scipy/integrate/_ode.py +9 -2
- scipy/integrate/_odepack.cp313-win_amd64.dll.a +0 -0
- scipy/integrate/_odepack.cp313-win_amd64.pyd +0 -0
- scipy/integrate/_quad_vec.py +21 -29
- scipy/integrate/_quadpack.cp313-win_amd64.dll.a +0 -0
- scipy/integrate/_quadpack.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/integrate/_test_multivariate.cp313-win_amd64.pyd +0 -0
- scipy/integrate/_test_odeint_banded.cp313-win_amd64.dll.a +0 -0
- scipy/integrate/_test_odeint_banded.cp313-win_amd64.pyd +0 -0
- scipy/integrate/_vode.cp313-win_amd64.dll.a +0 -0
- scipy/integrate/_vode.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/interpolate/_dfitpack.cp313-win_amd64.pyd +0 -0
- scipy/interpolate/_dierckx.cp313-win_amd64.dll.a +0 -0
- scipy/interpolate/_dierckx.cp313-win_amd64.pyd +0 -0
- scipy/interpolate/_fitpack.cp313-win_amd64.dll.a +0 -0
- scipy/interpolate/_fitpack.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/interpolate/_interpnd.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/interpolate/_ppoly.cp313-win_amd64.pyd +0 -0
- scipy/interpolate/_rbf.py +2 -2
- scipy/interpolate/_rbfinterp.py +1 -1
- scipy/interpolate/_rbfinterp_pythran.cp313-win_amd64.dll.a +0 -0
- scipy/interpolate/_rbfinterp_pythran.cp313-win_amd64.pyd +0 -0
- scipy/interpolate/_rgi.py +31 -26
- scipy/interpolate/_rgi_cython.cp313-win_amd64.dll.a +0 -0
- scipy/interpolate/_rgi_cython.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/io/_fast_matrix_market/_fmm_core.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/io/_test_fortran.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/io/matlab/_mio5_utils.cp313-win_amd64.pyd +0 -0
- scipy/io/matlab/_mio_utils.cp313-win_amd64.dll.a +0 -0
- scipy/io/matlab/_mio_utils.cp313-win_amd64.pyd +0 -0
- scipy/io/matlab/_miobase.py +4 -1
- scipy/io/matlab/_streams.cp313-win_amd64.dll.a +0 -0
- scipy/io/matlab/_streams.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/_cythonized_array_utils.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_interpolative.cp313-win_amd64.pyd +0 -0
- scipy/linalg/_decomp_ldl.py +4 -1
- scipy/linalg/_decomp_lu.py +18 -6
- scipy/linalg/_decomp_lu_cython.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_lu_cython.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/_decomp_update.cp313-win_amd64.pyd +0 -0
- scipy/linalg/_expm_frechet.py +4 -0
- scipy/linalg/_fblas.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/_fblas.cp313-win_amd64.pyd +0 -0
- scipy/linalg/_flapack.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/_flapack.cp313-win_amd64.pyd +0 -0
- scipy/linalg/_linalg_pythran.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/_linalg_pythran.cp313-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs.py +187 -4
- scipy/linalg/_matfuncs_expm.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_expm.cp313-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cp313-win_amd64.pyd +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +1 -99
- scipy/linalg/_matfuncs_sqrtm_triu.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/_matfuncs_sqrtm_triu.cp313-win_amd64.pyd +0 -0
- scipy/linalg/_procrustes.py +2 -0
- scipy/linalg/_sketches.py +17 -6
- scipy/linalg/_solve_toeplitz.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/_solve_toeplitz.cp313-win_amd64.pyd +0 -0
- scipy/linalg/_solvers.py +7 -2
- scipy/linalg/_special_matrices.py +26 -36
- scipy/linalg/cython_blas.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/cython_blas.cp313-win_amd64.pyd +0 -0
- scipy/linalg/cython_lapack.cp313-win_amd64.dll.a +0 -0
- scipy/linalg/cython_lapack.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/ndimage/_ctest.cp313-win_amd64.pyd +0 -0
- scipy/ndimage/_cytest.cp313-win_amd64.dll.a +0 -0
- scipy/ndimage/_cytest.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/ndimage/_nd_image.cp313-win_amd64.pyd +0 -0
- scipy/ndimage/_ni_docstrings.py +5 -1
- scipy/ndimage/_ni_label.cp313-win_amd64.dll.a +0 -0
- scipy/ndimage/_ni_label.cp313-win_amd64.pyd +0 -0
- scipy/ndimage/_ni_support.py +1 -5
- scipy/ndimage/_rank_filter_1d.cp313-win_amd64.dll.a +0 -0
- scipy/ndimage/_rank_filter_1d.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/odr/__odrpack.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_basinhopping.py +13 -7
- scipy/optimize/_bglu_dense.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_bglu_dense.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_direct.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_dual_annealing.py +1 -1
- scipy/optimize/_elementwise.py +1 -4
- scipy/optimize/_group_columns.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_group_columns.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_highspy/_core.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_highspy/_core.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_highspy/_highs_options.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_highspy/_highs_options.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_lbfgsb.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_lbfgsb.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_lsap.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_lsq/common.py +3 -3
- scipy/optimize/_lsq/dogbox.py +16 -2
- scipy/optimize/_lsq/givens_elimination.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_lsq/givens_elimination.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_minpack.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_minpack_py.py +21 -14
- scipy/optimize/_moduleTNC.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_moduleTNC.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_pava_pybind.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_slsqplib.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_spectral.py +1 -1
- scipy/optimize/_tnc.py +8 -1
- scipy/optimize/_trlib/_trlib.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_trlib/_trlib.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_zeros.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_zeros_py.py +97 -17
- scipy/optimize/cython_optimize/_zeros.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/cython_optimize/_zeros.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/signal/_max_len_seq_inner.cp313-win_amd64.pyd +0 -0
- scipy/signal/_peak_finding_utils.cp313-win_amd64.dll.a +0 -0
- scipy/signal/_peak_finding_utils.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/signal/_sigtools.cp313-win_amd64.pyd +0 -0
- scipy/signal/_sosfilt.cp313-win_amd64.dll.a +0 -0
- scipy/signal/_sosfilt.cp313-win_amd64.pyd +0 -0
- scipy/signal/_spectral_py.py +230 -50
- scipy/signal/_spline.cp313-win_amd64.dll.a +0 -0
- scipy/signal/_spline.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/signal/_upfirdn_apply.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/_csparsetools.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/_sparsetools.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_flow.cp313-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_matching.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_matching.cp313-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cp313-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_reordering.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_reordering.cp313-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_shortest_path.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_shortest_path.cp313-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_tools.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_tools.cp313-win_amd64.pyd +0 -0
- scipy/sparse/csgraph/_traversal.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/csgraph/_traversal.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_dsolve/_superlu.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_eigen/arpack/_arpack.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_cpropack.cp313-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cp313-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_spropack.cp313-win_amd64.pyd +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp313-win_amd64.dll.a +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/spatial/_ckdtree.cp313-win_amd64.pyd +0 -0
- scipy/spatial/_distance_pybind.cp313-win_amd64.dll.a +0 -0
- scipy/spatial/_distance_pybind.cp313-win_amd64.pyd +0 -0
- scipy/spatial/_distance_wrap.cp313-win_amd64.dll.a +0 -0
- scipy/spatial/_distance_wrap.cp313-win_amd64.pyd +0 -0
- scipy/spatial/_hausdorff.cp313-win_amd64.dll.a +0 -0
- scipy/spatial/_hausdorff.cp313-win_amd64.pyd +0 -0
- scipy/spatial/_qhull.cp313-win_amd64.dll.a +0 -0
- scipy/spatial/_qhull.cp313-win_amd64.pyd +0 -0
- scipy/spatial/_voronoi.cp313-win_amd64.dll.a +0 -0
- scipy/spatial/_voronoi.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/spatial/transform/_rigid_transform.cp313-win_amd64.pyd +0 -0
- scipy/spatial/transform/_rotation.cp313-win_amd64.dll.a +0 -0
- scipy/spatial/transform/_rotation.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/special/_comb.cp313-win_amd64.pyd +0 -0
- scipy/special/_ellip_harm_2.cp313-win_amd64.dll.a +0 -0
- scipy/special/_ellip_harm_2.cp313-win_amd64.pyd +0 -0
- scipy/special/_gufuncs.cp313-win_amd64.dll.a +0 -0
- scipy/special/_gufuncs.cp313-win_amd64.pyd +0 -0
- scipy/special/_logsumexp.py +67 -58
- scipy/special/_orthogonal.pyi +1 -1
- scipy/special/_specfun.cp313-win_amd64.dll.a +0 -0
- scipy/special/_specfun.cp313-win_amd64.pyd +0 -0
- scipy/special/_special_ufuncs.cp313-win_amd64.dll.a +0 -0
- scipy/special/_special_ufuncs.cp313-win_amd64.pyd +0 -0
- scipy/special/_spherical_bessel.py +4 -4
- scipy/special/_support_alternative_backends.py +212 -119
- scipy/special/_test_internal.cp313-win_amd64.dll.a +0 -0
- scipy/special/_test_internal.cp313-win_amd64.pyd +0 -0
- scipy/special/_testutils.py +4 -4
- scipy/special/_ufuncs.cp313-win_amd64.dll.a +0 -0
- scipy/special/_ufuncs.cp313-win_amd64.pyd +0 -0
- scipy/special/_ufuncs.pyi +1 -0
- scipy/special/_ufuncs.pyx +215 -1400
- scipy/special/_ufuncs_cxx.cp313-win_amd64.dll.a +0 -0
- scipy/special/_ufuncs_cxx.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/special/cython_special.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/stats/_ansari_swilk_statistics.cp313-win_amd64.pyd +0 -0
- scipy/stats/_axis_nan_policy.py +5 -12
- scipy/stats/_biasedurn.cp313-win_amd64.dll.a +0 -0
- scipy/stats/_biasedurn.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/stats/_levy_stable/levyst.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/stats/_qmc_cy.cp313-win_amd64.pyd +0 -0
- scipy/stats/_qmvnt.py +16 -95
- scipy/stats/_qmvnt_cy.cp313-win_amd64.dll.a +0 -0
- scipy/stats/_qmvnt_cy.cp313-win_amd64.pyd +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/rcont.cp313-win_amd64.dll.a +0 -0
- scipy/stats/_rcont/rcont.cp313-win_amd64.pyd +0 -0
- scipy/stats/_resampling.py +4 -29
- scipy/stats/_sampling.py +1 -1
- scipy/stats/_sobol.cp313-win_amd64.dll.a +0 -0
- scipy/stats/_sobol.cp313-win_amd64.pyd +0 -0
- scipy/stats/_stats.cp313-win_amd64.dll.a +0 -0
- scipy/stats/_stats.cp313-win_amd64.pyd +0 -0
- scipy/stats/_stats_mstats_common.py +21 -2
- scipy/stats/_stats_py.py +550 -476
- scipy/stats/_stats_pythran.cp313-win_amd64.dll.a +0 -0
- scipy/stats/_stats_pythran.cp313-win_amd64.pyd +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp313-win_amd64.dll.a +0 -0
- scipy/stats/_unuran/unuran_wrapper.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/interpolate/_bspl.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_cobyla.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_cobyla.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_cython_nnls.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_cython_nnls.cp313-win_amd64.pyd +0 -0
- scipy/optimize/_slsqp.cp313-win_amd64.dll.a +0 -0
- scipy/optimize/_slsqp.cp313-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.cp313-win_amd64.dll.a +0 -0
- scipy/stats/_mvn.cp313-win_amd64.pyd +0 -0
- scipy-1.15.3.dist-info/DELVEWHEEL +0 -2
- /scipy-1.15.3-cp313-cp313-win_amd64.whl → /scipy-1.16.0rc2-cp313-cp313-win_amd64.whl +0 -0
- {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/WHEEL +0 -0
@@ -1,484 +0,0 @@
|
|
1
|
-
from __future__ import annotations
|
2
|
-
|
3
|
-
import warnings
|
4
|
-
from typing import TYPE_CHECKING
|
5
|
-
|
6
|
-
if TYPE_CHECKING:
|
7
|
-
from ._typing import Array, ModuleType
|
8
|
-
|
9
|
-
__all__ = ["atleast_nd", "cov", "create_diagonal", "expand_dims", "kron", "sinc"]
|
10
|
-
|
11
|
-
|
12
|
-
def atleast_nd(x: Array, /, *, ndim: int, xp: ModuleType) -> Array:
|
13
|
-
"""
|
14
|
-
Recursively expand the dimension of an array to at least `ndim`.
|
15
|
-
|
16
|
-
Parameters
|
17
|
-
----------
|
18
|
-
x : array
|
19
|
-
ndim : int
|
20
|
-
The minimum number of dimensions for the result.
|
21
|
-
xp : array_namespace
|
22
|
-
The standard-compatible namespace for `x`.
|
23
|
-
|
24
|
-
Returns
|
25
|
-
-------
|
26
|
-
res : array
|
27
|
-
An array with ``res.ndim`` >= `ndim`.
|
28
|
-
If ``x.ndim`` >= `ndim`, `x` is returned.
|
29
|
-
If ``x.ndim`` < `ndim`, `x` is expanded by prepending new axes
|
30
|
-
until ``res.ndim`` equals `ndim`.
|
31
|
-
|
32
|
-
Examples
|
33
|
-
--------
|
34
|
-
>>> import array_api_strict as xp
|
35
|
-
>>> import array_api_extra as xpx
|
36
|
-
>>> x = xp.asarray([1])
|
37
|
-
>>> xpx.atleast_nd(x, ndim=3, xp=xp)
|
38
|
-
Array([[[1]]], dtype=array_api_strict.int64)
|
39
|
-
|
40
|
-
>>> x = xp.asarray([[[1, 2],
|
41
|
-
... [3, 4]]])
|
42
|
-
>>> xpx.atleast_nd(x, ndim=1, xp=xp) is x
|
43
|
-
True
|
44
|
-
|
45
|
-
"""
|
46
|
-
if x.ndim < ndim:
|
47
|
-
x = xp.expand_dims(x, axis=0)
|
48
|
-
x = atleast_nd(x, ndim=ndim, xp=xp)
|
49
|
-
return x
|
50
|
-
|
51
|
-
|
52
|
-
def cov(m: Array, /, *, xp: ModuleType) -> Array:
|
53
|
-
"""
|
54
|
-
Estimate a covariance matrix.
|
55
|
-
|
56
|
-
Covariance indicates the level to which two variables vary together.
|
57
|
-
If we examine N-dimensional samples, :math:`X = [x_1, x_2, ... x_N]^T`,
|
58
|
-
then the covariance matrix element :math:`C_{ij}` is the covariance of
|
59
|
-
:math:`x_i` and :math:`x_j`. The element :math:`C_{ii}` is the variance
|
60
|
-
of :math:`x_i`.
|
61
|
-
|
62
|
-
This provides a subset of the functionality of ``numpy.cov``.
|
63
|
-
|
64
|
-
Parameters
|
65
|
-
----------
|
66
|
-
m : array
|
67
|
-
A 1-D or 2-D array containing multiple variables and observations.
|
68
|
-
Each row of `m` represents a variable, and each column a single
|
69
|
-
observation of all those variables.
|
70
|
-
xp : array_namespace
|
71
|
-
The standard-compatible namespace for `m`.
|
72
|
-
|
73
|
-
Returns
|
74
|
-
-------
|
75
|
-
res : array
|
76
|
-
The covariance matrix of the variables.
|
77
|
-
|
78
|
-
Examples
|
79
|
-
--------
|
80
|
-
>>> import array_api_strict as xp
|
81
|
-
>>> import array_api_extra as xpx
|
82
|
-
|
83
|
-
Consider two variables, :math:`x_0` and :math:`x_1`, which
|
84
|
-
correlate perfectly, but in opposite directions:
|
85
|
-
|
86
|
-
>>> x = xp.asarray([[0, 2], [1, 1], [2, 0]]).T
|
87
|
-
>>> x
|
88
|
-
Array([[0, 1, 2],
|
89
|
-
[2, 1, 0]], dtype=array_api_strict.int64)
|
90
|
-
|
91
|
-
Note how :math:`x_0` increases while :math:`x_1` decreases. The covariance
|
92
|
-
matrix shows this clearly:
|
93
|
-
|
94
|
-
>>> xpx.cov(x, xp=xp)
|
95
|
-
Array([[ 1., -1.],
|
96
|
-
[-1., 1.]], dtype=array_api_strict.float64)
|
97
|
-
|
98
|
-
|
99
|
-
Note that element :math:`C_{0,1}`, which shows the correlation between
|
100
|
-
:math:`x_0` and :math:`x_1`, is negative.
|
101
|
-
|
102
|
-
Further, note how `x` and `y` are combined:
|
103
|
-
|
104
|
-
>>> x = xp.asarray([-2.1, -1, 4.3])
|
105
|
-
>>> y = xp.asarray([3, 1.1, 0.12])
|
106
|
-
>>> X = xp.stack((x, y), axis=0)
|
107
|
-
>>> xpx.cov(X, xp=xp)
|
108
|
-
Array([[11.71 , -4.286 ],
|
109
|
-
[-4.286 , 2.14413333]], dtype=array_api_strict.float64)
|
110
|
-
|
111
|
-
>>> xpx.cov(x, xp=xp)
|
112
|
-
Array(11.71, dtype=array_api_strict.float64)
|
113
|
-
|
114
|
-
>>> xpx.cov(y, xp=xp)
|
115
|
-
Array(2.14413333, dtype=array_api_strict.float64)
|
116
|
-
|
117
|
-
"""
|
118
|
-
m = xp.asarray(m, copy=True)
|
119
|
-
dtype = (
|
120
|
-
xp.float64 if xp.isdtype(m.dtype, "integral") else xp.result_type(m, xp.float64)
|
121
|
-
)
|
122
|
-
|
123
|
-
m = atleast_nd(m, ndim=2, xp=xp)
|
124
|
-
m = xp.astype(m, dtype)
|
125
|
-
|
126
|
-
avg = _mean(m, axis=1, xp=xp)
|
127
|
-
fact = m.shape[1] - 1
|
128
|
-
|
129
|
-
if fact <= 0:
|
130
|
-
warnings.warn("Degrees of freedom <= 0 for slice", RuntimeWarning, stacklevel=2)
|
131
|
-
fact = 0.0
|
132
|
-
|
133
|
-
m -= avg[:, None]
|
134
|
-
m_transpose = m.T
|
135
|
-
if xp.isdtype(m_transpose.dtype, "complex floating"):
|
136
|
-
m_transpose = xp.conj(m_transpose)
|
137
|
-
c = m @ m_transpose
|
138
|
-
c /= fact
|
139
|
-
axes = tuple(axis for axis, length in enumerate(c.shape) if length == 1)
|
140
|
-
return xp.squeeze(c, axis=axes)
|
141
|
-
|
142
|
-
|
143
|
-
def create_diagonal(x: Array, /, *, offset: int = 0, xp: ModuleType) -> Array:
|
144
|
-
"""
|
145
|
-
Construct a diagonal array.
|
146
|
-
|
147
|
-
Parameters
|
148
|
-
----------
|
149
|
-
x : array
|
150
|
-
A 1-D array
|
151
|
-
offset : int, optional
|
152
|
-
Offset from the leading diagonal (default is ``0``).
|
153
|
-
Use positive ints for diagonals above the leading diagonal,
|
154
|
-
and negative ints for diagonals below the leading diagonal.
|
155
|
-
xp : array_namespace
|
156
|
-
The standard-compatible namespace for `x`.
|
157
|
-
|
158
|
-
Returns
|
159
|
-
-------
|
160
|
-
res : array
|
161
|
-
A 2-D array with `x` on the diagonal (offset by `offset`).
|
162
|
-
|
163
|
-
Examples
|
164
|
-
--------
|
165
|
-
>>> import array_api_strict as xp
|
166
|
-
>>> import array_api_extra as xpx
|
167
|
-
>>> x = xp.asarray([2, 4, 8])
|
168
|
-
|
169
|
-
>>> xpx.create_diagonal(x, xp=xp)
|
170
|
-
Array([[2, 0, 0],
|
171
|
-
[0, 4, 0],
|
172
|
-
[0, 0, 8]], dtype=array_api_strict.int64)
|
173
|
-
|
174
|
-
>>> xpx.create_diagonal(x, offset=-2, xp=xp)
|
175
|
-
Array([[0, 0, 0, 0, 0],
|
176
|
-
[0, 0, 0, 0, 0],
|
177
|
-
[2, 0, 0, 0, 0],
|
178
|
-
[0, 4, 0, 0, 0],
|
179
|
-
[0, 0, 8, 0, 0]], dtype=array_api_strict.int64)
|
180
|
-
|
181
|
-
"""
|
182
|
-
if x.ndim != 1:
|
183
|
-
err_msg = "`x` must be 1-dimensional."
|
184
|
-
raise ValueError(err_msg)
|
185
|
-
n = x.shape[0] + abs(offset)
|
186
|
-
diag = xp.zeros(n**2, dtype=x.dtype)
|
187
|
-
i = offset if offset >= 0 else abs(offset) * n
|
188
|
-
diag[i : min(n * (n - offset), diag.shape[0]) : n + 1] = x
|
189
|
-
return xp.reshape(diag, (n, n))
|
190
|
-
|
191
|
-
|
192
|
-
def _mean(
|
193
|
-
x: Array,
|
194
|
-
/,
|
195
|
-
*,
|
196
|
-
axis: int | tuple[int, ...] | None = None,
|
197
|
-
keepdims: bool = False,
|
198
|
-
xp: ModuleType,
|
199
|
-
) -> Array:
|
200
|
-
"""
|
201
|
-
Complex mean, https://github.com/data-apis/array-api/issues/846.
|
202
|
-
"""
|
203
|
-
if xp.isdtype(x.dtype, "complex floating"):
|
204
|
-
x_real = xp.real(x)
|
205
|
-
x_imag = xp.imag(x)
|
206
|
-
mean_real = xp.mean(x_real, axis=axis, keepdims=keepdims)
|
207
|
-
mean_imag = xp.mean(x_imag, axis=axis, keepdims=keepdims)
|
208
|
-
return mean_real + (mean_imag * xp.asarray(1j))
|
209
|
-
return xp.mean(x, axis=axis, keepdims=keepdims)
|
210
|
-
|
211
|
-
|
212
|
-
def expand_dims(
|
213
|
-
a: Array, /, *, axis: int | tuple[int, ...] = (0,), xp: ModuleType
|
214
|
-
) -> Array:
|
215
|
-
"""
|
216
|
-
Expand the shape of an array.
|
217
|
-
|
218
|
-
Insert (a) new axis/axes that will appear at the position(s) specified by
|
219
|
-
`axis` in the expanded array shape.
|
220
|
-
|
221
|
-
This is ``xp.expand_dims`` for `axis` an int *or a tuple of ints*.
|
222
|
-
Roughly equivalent to ``numpy.expand_dims`` for NumPy arrays.
|
223
|
-
|
224
|
-
Parameters
|
225
|
-
----------
|
226
|
-
a : array
|
227
|
-
axis : int or tuple of ints, optional
|
228
|
-
Position(s) in the expanded axes where the new axis (or axes) is/are placed.
|
229
|
-
If multiple positions are provided, they should be unique (note that a position
|
230
|
-
given by a positive index could also be referred to by a negative index -
|
231
|
-
that will also result in an error).
|
232
|
-
Default: ``(0,)``.
|
233
|
-
xp : array_namespace
|
234
|
-
The standard-compatible namespace for `a`.
|
235
|
-
|
236
|
-
Returns
|
237
|
-
-------
|
238
|
-
res : array
|
239
|
-
`a` with an expanded shape.
|
240
|
-
|
241
|
-
Examples
|
242
|
-
--------
|
243
|
-
>>> import array_api_strict as xp
|
244
|
-
>>> import array_api_extra as xpx
|
245
|
-
>>> x = xp.asarray([1, 2])
|
246
|
-
>>> x.shape
|
247
|
-
(2,)
|
248
|
-
|
249
|
-
The following is equivalent to ``x[xp.newaxis, :]`` or ``x[xp.newaxis]``:
|
250
|
-
|
251
|
-
>>> y = xpx.expand_dims(x, axis=0, xp=xp)
|
252
|
-
>>> y
|
253
|
-
Array([[1, 2]], dtype=array_api_strict.int64)
|
254
|
-
>>> y.shape
|
255
|
-
(1, 2)
|
256
|
-
|
257
|
-
The following is equivalent to ``x[:, xp.newaxis]``:
|
258
|
-
|
259
|
-
>>> y = xpx.expand_dims(x, axis=1, xp=xp)
|
260
|
-
>>> y
|
261
|
-
Array([[1],
|
262
|
-
[2]], dtype=array_api_strict.int64)
|
263
|
-
>>> y.shape
|
264
|
-
(2, 1)
|
265
|
-
|
266
|
-
``axis`` may also be a tuple:
|
267
|
-
|
268
|
-
>>> y = xpx.expand_dims(x, axis=(0, 1), xp=xp)
|
269
|
-
>>> y
|
270
|
-
Array([[[1, 2]]], dtype=array_api_strict.int64)
|
271
|
-
|
272
|
-
>>> y = xpx.expand_dims(x, axis=(2, 0), xp=xp)
|
273
|
-
>>> y
|
274
|
-
Array([[[1],
|
275
|
-
[2]]], dtype=array_api_strict.int64)
|
276
|
-
|
277
|
-
"""
|
278
|
-
if not isinstance(axis, tuple):
|
279
|
-
axis = (axis,)
|
280
|
-
ndim = a.ndim + len(axis)
|
281
|
-
if axis != () and (min(axis) < -ndim or max(axis) >= ndim):
|
282
|
-
err_msg = (
|
283
|
-
f"a provided axis position is out of bounds for array of dimension {a.ndim}"
|
284
|
-
)
|
285
|
-
raise IndexError(err_msg)
|
286
|
-
axis = tuple(dim % ndim for dim in axis)
|
287
|
-
if len(set(axis)) != len(axis):
|
288
|
-
err_msg = "Duplicate dimensions specified in `axis`."
|
289
|
-
raise ValueError(err_msg)
|
290
|
-
for i in sorted(axis):
|
291
|
-
a = xp.expand_dims(a, axis=i)
|
292
|
-
return a
|
293
|
-
|
294
|
-
|
295
|
-
def kron(a: Array, b: Array, /, *, xp: ModuleType) -> Array:
|
296
|
-
"""
|
297
|
-
Kronecker product of two arrays.
|
298
|
-
|
299
|
-
Computes the Kronecker product, a composite array made of blocks of the
|
300
|
-
second array scaled by the first.
|
301
|
-
|
302
|
-
Equivalent to ``numpy.kron`` for NumPy arrays.
|
303
|
-
|
304
|
-
Parameters
|
305
|
-
----------
|
306
|
-
a, b : array
|
307
|
-
xp : array_namespace
|
308
|
-
The standard-compatible namespace for `a` and `b`.
|
309
|
-
|
310
|
-
Returns
|
311
|
-
-------
|
312
|
-
res : array
|
313
|
-
The Kronecker product of `a` and `b`.
|
314
|
-
|
315
|
-
Notes
|
316
|
-
-----
|
317
|
-
The function assumes that the number of dimensions of `a` and `b`
|
318
|
-
are the same, if necessary prepending the smallest with ones.
|
319
|
-
If ``a.shape = (r0,r1,..,rN)`` and ``b.shape = (s0,s1,...,sN)``,
|
320
|
-
the Kronecker product has shape ``(r0*s0, r1*s1, ..., rN*SN)``.
|
321
|
-
The elements are products of elements from `a` and `b`, organized
|
322
|
-
explicitly by::
|
323
|
-
|
324
|
-
kron(a,b)[k0,k1,...,kN] = a[i0,i1,...,iN] * b[j0,j1,...,jN]
|
325
|
-
|
326
|
-
where::
|
327
|
-
|
328
|
-
kt = it * st + jt, t = 0,...,N
|
329
|
-
|
330
|
-
In the common 2-D case (N=1), the block structure can be visualized::
|
331
|
-
|
332
|
-
[[ a[0,0]*b, a[0,1]*b, ... , a[0,-1]*b ],
|
333
|
-
[ ... ... ],
|
334
|
-
[ a[-1,0]*b, a[-1,1]*b, ... , a[-1,-1]*b ]]
|
335
|
-
|
336
|
-
|
337
|
-
Examples
|
338
|
-
--------
|
339
|
-
>>> import array_api_strict as xp
|
340
|
-
>>> import array_api_extra as xpx
|
341
|
-
>>> xpx.kron(xp.asarray([1, 10, 100]), xp.asarray([5, 6, 7]), xp=xp)
|
342
|
-
Array([ 5, 6, 7, 50, 60, 70, 500,
|
343
|
-
600, 700], dtype=array_api_strict.int64)
|
344
|
-
|
345
|
-
>>> xpx.kron(xp.asarray([5, 6, 7]), xp.asarray([1, 10, 100]), xp=xp)
|
346
|
-
Array([ 5, 50, 500, 6, 60, 600, 7,
|
347
|
-
70, 700], dtype=array_api_strict.int64)
|
348
|
-
|
349
|
-
>>> xpx.kron(xp.eye(2), xp.ones((2, 2)), xp=xp)
|
350
|
-
Array([[1., 1., 0., 0.],
|
351
|
-
[1., 1., 0., 0.],
|
352
|
-
[0., 0., 1., 1.],
|
353
|
-
[0., 0., 1., 1.]], dtype=array_api_strict.float64)
|
354
|
-
|
355
|
-
|
356
|
-
>>> a = xp.reshape(xp.arange(100), (2, 5, 2, 5))
|
357
|
-
>>> b = xp.reshape(xp.arange(24), (2, 3, 4))
|
358
|
-
>>> c = xpx.kron(a, b, xp=xp)
|
359
|
-
>>> c.shape
|
360
|
-
(2, 10, 6, 20)
|
361
|
-
>>> I = (1, 3, 0, 2)
|
362
|
-
>>> J = (0, 2, 1)
|
363
|
-
>>> J1 = (0,) + J # extend to ndim=4
|
364
|
-
>>> S1 = (1,) + b.shape
|
365
|
-
>>> K = tuple(xp.asarray(I) * xp.asarray(S1) + xp.asarray(J1))
|
366
|
-
>>> c[K] == a[I]*b[J]
|
367
|
-
Array(True, dtype=array_api_strict.bool)
|
368
|
-
|
369
|
-
"""
|
370
|
-
|
371
|
-
b = xp.asarray(b)
|
372
|
-
singletons = (1,) * (b.ndim - a.ndim)
|
373
|
-
a = xp.broadcast_to(xp.asarray(a), singletons + a.shape)
|
374
|
-
|
375
|
-
nd_b, nd_a = b.ndim, a.ndim
|
376
|
-
nd_max = max(nd_b, nd_a)
|
377
|
-
if nd_a == 0 or nd_b == 0:
|
378
|
-
return xp.multiply(a, b)
|
379
|
-
|
380
|
-
a_shape = a.shape
|
381
|
-
b_shape = b.shape
|
382
|
-
|
383
|
-
# Equalise the shapes by prepending smaller one with 1s
|
384
|
-
a_shape = (1,) * max(0, nd_b - nd_a) + a_shape
|
385
|
-
b_shape = (1,) * max(0, nd_a - nd_b) + b_shape
|
386
|
-
|
387
|
-
# Insert empty dimensions
|
388
|
-
a_arr = expand_dims(a, axis=tuple(range(nd_b - nd_a)), xp=xp)
|
389
|
-
b_arr = expand_dims(b, axis=tuple(range(nd_a - nd_b)), xp=xp)
|
390
|
-
|
391
|
-
# Compute the product
|
392
|
-
a_arr = expand_dims(a_arr, axis=tuple(range(1, nd_max * 2, 2)), xp=xp)
|
393
|
-
b_arr = expand_dims(b_arr, axis=tuple(range(0, nd_max * 2, 2)), xp=xp)
|
394
|
-
result = xp.multiply(a_arr, b_arr)
|
395
|
-
|
396
|
-
# Reshape back and return
|
397
|
-
a_shape = xp.asarray(a_shape)
|
398
|
-
b_shape = xp.asarray(b_shape)
|
399
|
-
return xp.reshape(result, tuple(xp.multiply(a_shape, b_shape)))
|
400
|
-
|
401
|
-
|
402
|
-
def sinc(x: Array, /, *, xp: ModuleType) -> Array:
|
403
|
-
r"""
|
404
|
-
Return the normalized sinc function.
|
405
|
-
|
406
|
-
The sinc function is equal to :math:`\sin(\pi x)/(\pi x)` for any argument
|
407
|
-
:math:`x\ne 0`. ``sinc(0)`` takes the limit value 1, making ``sinc`` not
|
408
|
-
only everywhere continuous but also infinitely differentiable.
|
409
|
-
|
410
|
-
.. note::
|
411
|
-
|
412
|
-
Note the normalization factor of ``pi`` used in the definition.
|
413
|
-
This is the most commonly used definition in signal processing.
|
414
|
-
Use ``sinc(x / xp.pi)`` to obtain the unnormalized sinc function
|
415
|
-
:math:`\sin(x)/x` that is more common in mathematics.
|
416
|
-
|
417
|
-
Parameters
|
418
|
-
----------
|
419
|
-
x : array
|
420
|
-
Array (possibly multi-dimensional) of values for which to calculate
|
421
|
-
``sinc(x)``. Must have a real floating point dtype.
|
422
|
-
xp : array_namespace
|
423
|
-
The standard-compatible namespace for `x`.
|
424
|
-
|
425
|
-
Returns
|
426
|
-
-------
|
427
|
-
res : array
|
428
|
-
``sinc(x)`` calculated elementwise, which has the same shape as the input.
|
429
|
-
|
430
|
-
Notes
|
431
|
-
-----
|
432
|
-
The name sinc is short for "sine cardinal" or "sinus cardinalis".
|
433
|
-
|
434
|
-
The sinc function is used in various signal processing applications,
|
435
|
-
including in anti-aliasing, in the construction of a Lanczos resampling
|
436
|
-
filter, and in interpolation.
|
437
|
-
|
438
|
-
For bandlimited interpolation of discrete-time signals, the ideal
|
439
|
-
interpolation kernel is proportional to the sinc function.
|
440
|
-
|
441
|
-
References
|
442
|
-
----------
|
443
|
-
.. [1] Weisstein, Eric W. "Sinc Function." From MathWorld--A Wolfram Web
|
444
|
-
Resource. https://mathworld.wolfram.com/SincFunction.html
|
445
|
-
.. [2] Wikipedia, "Sinc function",
|
446
|
-
https://en.wikipedia.org/wiki/Sinc_function
|
447
|
-
|
448
|
-
Examples
|
449
|
-
--------
|
450
|
-
>>> import array_api_strict as xp
|
451
|
-
>>> import array_api_extra as xpx
|
452
|
-
>>> x = xp.linspace(-4, 4, 41)
|
453
|
-
>>> xpx.sinc(x, xp=xp)
|
454
|
-
Array([-3.89817183e-17, -4.92362781e-02,
|
455
|
-
-8.40918587e-02, -8.90384387e-02,
|
456
|
-
-5.84680802e-02, 3.89817183e-17,
|
457
|
-
6.68206631e-02, 1.16434881e-01,
|
458
|
-
1.26137788e-01, 8.50444803e-02,
|
459
|
-
-3.89817183e-17, -1.03943254e-01,
|
460
|
-
-1.89206682e-01, -2.16236208e-01,
|
461
|
-
-1.55914881e-01, 3.89817183e-17,
|
462
|
-
2.33872321e-01, 5.04551152e-01,
|
463
|
-
7.56826729e-01, 9.35489284e-01,
|
464
|
-
1.00000000e+00, 9.35489284e-01,
|
465
|
-
7.56826729e-01, 5.04551152e-01,
|
466
|
-
2.33872321e-01, 3.89817183e-17,
|
467
|
-
-1.55914881e-01, -2.16236208e-01,
|
468
|
-
-1.89206682e-01, -1.03943254e-01,
|
469
|
-
-3.89817183e-17, 8.50444803e-02,
|
470
|
-
1.26137788e-01, 1.16434881e-01,
|
471
|
-
6.68206631e-02, 3.89817183e-17,
|
472
|
-
-5.84680802e-02, -8.90384387e-02,
|
473
|
-
-8.40918587e-02, -4.92362781e-02,
|
474
|
-
-3.89817183e-17], dtype=array_api_strict.float64)
|
475
|
-
|
476
|
-
"""
|
477
|
-
if not xp.isdtype(x.dtype, "real floating"):
|
478
|
-
err_msg = "`x` must have a real floating data type."
|
479
|
-
raise ValueError(err_msg)
|
480
|
-
# no scalars in `where` - array-api#807
|
481
|
-
y = xp.pi * xp.where(
|
482
|
-
x, x, xp.asarray(xp.finfo(x.dtype).smallest_normal, dtype=x.dtype)
|
483
|
-
)
|
484
|
-
return xp.sin(y) / y
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -1,38 +0,0 @@
|
|
1
|
-
Qhull, Copyright (c) 1993-2019
|
2
|
-
|
3
|
-
C.B. Barber
|
4
|
-
Arlington, MA
|
5
|
-
|
6
|
-
and
|
7
|
-
|
8
|
-
The National Science and Technology Research Center for
|
9
|
-
Computation and Visualization of Geometric Structures
|
10
|
-
(The Geometry Center)
|
11
|
-
University of Minnesota
|
12
|
-
|
13
|
-
email: qhull@qhull.org
|
14
|
-
|
15
|
-
This software includes Qhull from C.B. Barber and The Geometry Center.
|
16
|
-
Qhull is copyrighted as noted above. Qhull is free software and may
|
17
|
-
be obtained via http from www.qhull.org. It may be freely copied, modified,
|
18
|
-
and redistributed under the following conditions:
|
19
|
-
|
20
|
-
1. All copyright notices must remain intact in all files.
|
21
|
-
|
22
|
-
2. A copy of this text file must be distributed along with any copies
|
23
|
-
of Qhull that you redistribute; this includes copies that you have
|
24
|
-
modified, or copies of programs or other software products that
|
25
|
-
include Qhull.
|
26
|
-
|
27
|
-
3. If you modify Qhull, you must include a notice giving the
|
28
|
-
name of the person performing the modification, the date of
|
29
|
-
modification, and the reason for such modification.
|
30
|
-
|
31
|
-
4. When distributing modified versions of Qhull, or other software
|
32
|
-
products that include Qhull, you must provide notice that the original
|
33
|
-
source code may be obtained as noted above.
|
34
|
-
|
35
|
-
5. There is no warranty or other guarantee of fitness for Qhull, it is
|
36
|
-
provided solely "as is". Bug reports or fixes may be sent to
|
37
|
-
qhull_bug@qhull.org; the authors may or may not act on them as
|
38
|
-
they desire.
|
Binary file
|
Binary file
|
@@ -1,109 +0,0 @@
|
|
1
|
-
import numpy as np
|
2
|
-
from numpy.testing import assert_allclose
|
3
|
-
|
4
|
-
import pytest
|
5
|
-
|
6
|
-
import scipy.special as sc
|
7
|
-
|
8
|
-
|
9
|
-
@pytest.mark.parametrize('x, expected', [
|
10
|
-
(np.array([1000, 1]), np.array([0, -999])),
|
11
|
-
|
12
|
-
# Expected value computed using mpmath (with mpmath.mp.dps = 200) and then
|
13
|
-
# converted to float.
|
14
|
-
(np.arange(4), np.array([-3.4401896985611953,
|
15
|
-
-2.4401896985611953,
|
16
|
-
-1.4401896985611953,
|
17
|
-
-0.44018969856119533]))
|
18
|
-
])
|
19
|
-
def test_log_softmax(x, expected):
|
20
|
-
assert_allclose(sc.log_softmax(x), expected, rtol=1e-13)
|
21
|
-
|
22
|
-
|
23
|
-
@pytest.fixture
|
24
|
-
def log_softmax_x():
|
25
|
-
x = np.arange(4)
|
26
|
-
return x
|
27
|
-
|
28
|
-
|
29
|
-
@pytest.fixture
|
30
|
-
def log_softmax_expected():
|
31
|
-
# Expected value computed using mpmath (with mpmath.mp.dps = 200) and then
|
32
|
-
# converted to float.
|
33
|
-
expected = np.array([-3.4401896985611953,
|
34
|
-
-2.4401896985611953,
|
35
|
-
-1.4401896985611953,
|
36
|
-
-0.44018969856119533])
|
37
|
-
return expected
|
38
|
-
|
39
|
-
|
40
|
-
def test_log_softmax_translation(log_softmax_x, log_softmax_expected):
|
41
|
-
# Translation property. If all the values are changed by the same amount,
|
42
|
-
# the softmax result does not change.
|
43
|
-
x = log_softmax_x + 100
|
44
|
-
expected = log_softmax_expected
|
45
|
-
assert_allclose(sc.log_softmax(x), expected, rtol=1e-13)
|
46
|
-
|
47
|
-
|
48
|
-
def test_log_softmax_noneaxis(log_softmax_x, log_softmax_expected):
|
49
|
-
# When axis=None, softmax operates on the entire array, and preserves
|
50
|
-
# the shape.
|
51
|
-
x = log_softmax_x.reshape(2, 2)
|
52
|
-
expected = log_softmax_expected.reshape(2, 2)
|
53
|
-
assert_allclose(sc.log_softmax(x), expected, rtol=1e-13)
|
54
|
-
|
55
|
-
|
56
|
-
@pytest.mark.parametrize('axis_2d, expected_2d', [
|
57
|
-
(0, np.log(0.5) * np.ones((2, 2))),
|
58
|
-
(1, np.array([[0, -999], [0, -999]]))
|
59
|
-
])
|
60
|
-
def test_axes(axis_2d, expected_2d):
|
61
|
-
assert_allclose(
|
62
|
-
sc.log_softmax([[1000, 1], [1000, 1]], axis=axis_2d),
|
63
|
-
expected_2d,
|
64
|
-
rtol=1e-13,
|
65
|
-
)
|
66
|
-
|
67
|
-
|
68
|
-
@pytest.fixture
|
69
|
-
def log_softmax_2d_x():
|
70
|
-
x = np.arange(8).reshape(2, 4)
|
71
|
-
return x
|
72
|
-
|
73
|
-
|
74
|
-
@pytest.fixture
|
75
|
-
def log_softmax_2d_expected():
|
76
|
-
# Expected value computed using mpmath (with mpmath.mp.dps = 200) and then
|
77
|
-
# converted to float.
|
78
|
-
expected = np.array([[-3.4401896985611953,
|
79
|
-
-2.4401896985611953,
|
80
|
-
-1.4401896985611953,
|
81
|
-
-0.44018969856119533],
|
82
|
-
[-3.4401896985611953,
|
83
|
-
-2.4401896985611953,
|
84
|
-
-1.4401896985611953,
|
85
|
-
-0.44018969856119533]])
|
86
|
-
return expected
|
87
|
-
|
88
|
-
|
89
|
-
def test_log_softmax_2d_axis1(log_softmax_2d_x, log_softmax_2d_expected):
|
90
|
-
x = log_softmax_2d_x
|
91
|
-
expected = log_softmax_2d_expected
|
92
|
-
assert_allclose(sc.log_softmax(x, axis=1), expected, rtol=1e-13)
|
93
|
-
|
94
|
-
|
95
|
-
def test_log_softmax_2d_axis0(log_softmax_2d_x, log_softmax_2d_expected):
|
96
|
-
x = log_softmax_2d_x.T
|
97
|
-
expected = log_softmax_2d_expected.T
|
98
|
-
assert_allclose(sc.log_softmax(x, axis=0), expected, rtol=1e-13)
|
99
|
-
|
100
|
-
|
101
|
-
def test_log_softmax_3d(log_softmax_2d_x, log_softmax_2d_expected):
|
102
|
-
# 3-d input, with a tuple for the axis.
|
103
|
-
x_3d = log_softmax_2d_x.reshape(2, 2, 2)
|
104
|
-
expected_3d = log_softmax_2d_expected.reshape(2, 2, 2)
|
105
|
-
assert_allclose(sc.log_softmax(x_3d, axis=(1, 2)), expected_3d, rtol=1e-13)
|
106
|
-
|
107
|
-
|
108
|
-
def test_log_softmax_scalar():
|
109
|
-
assert_allclose(sc.log_softmax(1.0), 0.0, rtol=1e-13)
|