scipy 1.15.3__cp313-cp313t-macosx_14_0_arm64.whl → 1.16.0rc2__cp313-cp313t-macosx_14_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- scipy/__config__.py +3 -3
- scipy/__init__.py +3 -6
- scipy/_cyutility.cpython-313t-darwin.so +0 -0
- scipy/_lib/_array_api.py +486 -161
- scipy/_lib/_array_api_compat_vendor.py +9 -0
- scipy/_lib/_bunch.py +4 -0
- scipy/_lib/_ccallback_c.cpython-313t-darwin.so +0 -0
- scipy/_lib/_docscrape.py +1 -1
- scipy/_lib/_elementwise_iterative_method.py +15 -26
- scipy/_lib/_sparse.py +41 -0
- scipy/_lib/_test_deprecation_call.cpython-313t-darwin.so +0 -0
- scipy/_lib/_testutils.py +6 -2
- scipy/_lib/_util.py +222 -125
- scipy/_lib/array_api_compat/__init__.py +4 -4
- scipy/_lib/array_api_compat/_internal.py +19 -6
- scipy/_lib/array_api_compat/common/__init__.py +1 -1
- scipy/_lib/array_api_compat/common/_aliases.py +365 -193
- scipy/_lib/array_api_compat/common/_fft.py +94 -64
- scipy/_lib/array_api_compat/common/_helpers.py +413 -180
- scipy/_lib/array_api_compat/common/_linalg.py +116 -40
- scipy/_lib/array_api_compat/common/_typing.py +179 -10
- scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
- scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
- scipy/_lib/array_api_compat/cupy/_info.py +16 -6
- scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
- scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
- scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
- scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
- scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
- scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
- scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
- scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
- scipy/_lib/array_api_compat/numpy/_info.py +36 -16
- scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
- scipy/_lib/array_api_compat/numpy/fft.py +11 -5
- scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
- scipy/_lib/array_api_compat/torch/__init__.py +3 -5
- scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
- scipy/_lib/array_api_compat/torch/_info.py +27 -16
- scipy/_lib/array_api_compat/torch/_typing.py +3 -0
- scipy/_lib/array_api_compat/torch/fft.py +17 -18
- scipy/_lib/array_api_compat/torch/linalg.py +16 -16
- scipy/_lib/array_api_extra/__init__.py +26 -3
- scipy/_lib/array_api_extra/_delegation.py +171 -0
- scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
- scipy/_lib/array_api_extra/_lib/_at.py +463 -0
- scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
- scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
- scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
- scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
- scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
- scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
- scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
- scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
- scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
- scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
- scipy/_lib/array_api_extra/testing.py +359 -0
- scipy/_lib/decorator.py +2 -2
- scipy/_lib/doccer.py +1 -7
- scipy/_lib/messagestream.cpython-313t-darwin.so +0 -0
- scipy/_lib/pyprima/__init__.py +212 -0
- scipy/_lib/pyprima/cobyla/__init__.py +0 -0
- scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
- scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
- scipy/_lib/pyprima/cobyla/geometry.py +226 -0
- scipy/_lib/pyprima/cobyla/initialize.py +215 -0
- scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
- scipy/_lib/pyprima/cobyla/update.py +289 -0
- scipy/_lib/pyprima/common/__init__.py +0 -0
- scipy/_lib/pyprima/common/_bounds.py +34 -0
- scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
- scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
- scipy/_lib/pyprima/common/_project.py +173 -0
- scipy/_lib/pyprima/common/checkbreak.py +93 -0
- scipy/_lib/pyprima/common/consts.py +47 -0
- scipy/_lib/pyprima/common/evaluate.py +99 -0
- scipy/_lib/pyprima/common/history.py +38 -0
- scipy/_lib/pyprima/common/infos.py +30 -0
- scipy/_lib/pyprima/common/linalg.py +435 -0
- scipy/_lib/pyprima/common/message.py +290 -0
- scipy/_lib/pyprima/common/powalg.py +131 -0
- scipy/_lib/pyprima/common/preproc.py +277 -0
- scipy/_lib/pyprima/common/present.py +5 -0
- scipy/_lib/pyprima/common/ratio.py +54 -0
- scipy/_lib/pyprima/common/redrho.py +47 -0
- scipy/_lib/pyprima/common/selectx.py +296 -0
- scipy/_lib/tests/test__util.py +105 -121
- scipy/_lib/tests/test_array_api.py +166 -35
- scipy/_lib/tests/test_bunch.py +7 -0
- scipy/_lib/tests/test_ccallback.py +2 -10
- scipy/_lib/tests/test_public_api.py +13 -0
- scipy/cluster/_hierarchy.cpython-313t-darwin.so +0 -0
- scipy/cluster/_optimal_leaf_ordering.cpython-313t-darwin.so +0 -0
- scipy/cluster/_vq.cpython-313t-darwin.so +0 -0
- scipy/cluster/hierarchy.py +393 -223
- scipy/cluster/tests/test_hierarchy.py +273 -335
- scipy/cluster/tests/test_vq.py +45 -61
- scipy/cluster/vq.py +39 -35
- scipy/conftest.py +263 -157
- scipy/constants/_constants.py +4 -1
- scipy/constants/tests/test_codata.py +2 -2
- scipy/constants/tests/test_constants.py +11 -18
- scipy/datasets/_download_all.py +15 -1
- scipy/datasets/_fetchers.py +7 -1
- scipy/datasets/_utils.py +1 -1
- scipy/differentiate/_differentiate.py +25 -25
- scipy/differentiate/tests/test_differentiate.py +24 -25
- scipy/fft/_basic.py +20 -0
- scipy/fft/_helper.py +3 -34
- scipy/fft/_pocketfft/helper.py +29 -1
- scipy/fft/_pocketfft/tests/test_basic.py +2 -4
- scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
- scipy/fft/_realtransforms.py +13 -0
- scipy/fft/tests/test_basic.py +27 -25
- scipy/fft/tests/test_fftlog.py +16 -7
- scipy/fft/tests/test_helper.py +18 -34
- scipy/fft/tests/test_real_transforms.py +8 -10
- scipy/fftpack/convolve.cpython-313t-darwin.so +0 -0
- scipy/fftpack/tests/test_basic.py +2 -4
- scipy/fftpack/tests/test_real_transforms.py +8 -9
- scipy/integrate/_bvp.py +9 -3
- scipy/integrate/_cubature.py +3 -2
- scipy/integrate/_dop.cpython-313t-darwin.so +0 -0
- scipy/integrate/_lsoda.cpython-313t-darwin.so +0 -0
- scipy/integrate/_ode.py +9 -2
- scipy/integrate/_odepack.cpython-313t-darwin.so +0 -0
- scipy/integrate/_quad_vec.py +21 -29
- scipy/integrate/_quadpack.cpython-313t-darwin.so +0 -0
- scipy/integrate/_quadpack_py.py +11 -7
- scipy/integrate/_quadrature.py +3 -3
- scipy/integrate/_rules/_base.py +2 -2
- scipy/integrate/_tanhsinh.py +48 -47
- scipy/integrate/_test_odeint_banded.cpython-313t-darwin.so +0 -0
- scipy/integrate/_vode.cpython-313t-darwin.so +0 -0
- scipy/integrate/tests/test__quad_vec.py +0 -6
- scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
- scipy/integrate/tests/test_cubature.py +21 -35
- scipy/integrate/tests/test_quadrature.py +6 -8
- scipy/integrate/tests/test_tanhsinh.py +56 -48
- scipy/interpolate/__init__.py +70 -58
- scipy/interpolate/_bary_rational.py +22 -22
- scipy/interpolate/_bsplines.py +119 -66
- scipy/interpolate/_cubic.py +65 -50
- scipy/interpolate/_dfitpack.cpython-313t-darwin.so +0 -0
- scipy/interpolate/_dierckx.cpython-313t-darwin.so +0 -0
- scipy/interpolate/_fitpack.cpython-313t-darwin.so +0 -0
- scipy/interpolate/_fitpack2.py +9 -6
- scipy/interpolate/_fitpack_impl.py +32 -26
- scipy/interpolate/_fitpack_repro.py +23 -19
- scipy/interpolate/_interpnd.cpython-313t-darwin.so +0 -0
- scipy/interpolate/_interpolate.py +30 -12
- scipy/interpolate/_ndbspline.py +13 -18
- scipy/interpolate/_ndgriddata.py +5 -8
- scipy/interpolate/_polyint.py +95 -31
- scipy/interpolate/_ppoly.cpython-313t-darwin.so +0 -0
- scipy/interpolate/_rbf.py +2 -2
- scipy/interpolate/_rbfinterp.py +1 -1
- scipy/interpolate/_rbfinterp_pythran.cpython-313t-darwin.so +0 -0
- scipy/interpolate/_rgi.py +31 -26
- scipy/interpolate/_rgi_cython.cpython-313t-darwin.so +0 -0
- scipy/interpolate/dfitpack.py +0 -20
- scipy/interpolate/interpnd.py +1 -2
- scipy/interpolate/tests/test_bary_rational.py +2 -2
- scipy/interpolate/tests/test_bsplines.py +97 -1
- scipy/interpolate/tests/test_fitpack2.py +39 -1
- scipy/interpolate/tests/test_interpnd.py +32 -20
- scipy/interpolate/tests/test_interpolate.py +48 -4
- scipy/interpolate/tests/test_rgi.py +2 -1
- scipy/io/_fast_matrix_market/__init__.py +2 -0
- scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
- scipy/io/_harwell_boeing/hb.py +7 -11
- scipy/io/_idl.py +5 -7
- scipy/io/_netcdf.py +15 -5
- scipy/io/_test_fortran.cpython-313t-darwin.so +0 -0
- scipy/io/arff/tests/test_arffread.py +3 -3
- scipy/io/matlab/__init__.py +5 -3
- scipy/io/matlab/_mio.py +4 -1
- scipy/io/matlab/_mio5.py +19 -13
- scipy/io/matlab/_mio5_utils.cpython-313t-darwin.so +0 -0
- scipy/io/matlab/_mio_utils.cpython-313t-darwin.so +0 -0
- scipy/io/matlab/_miobase.py +4 -1
- scipy/io/matlab/_streams.cpython-313t-darwin.so +0 -0
- scipy/io/matlab/tests/test_mio.py +46 -18
- scipy/io/matlab/tests/test_mio_funcs.py +1 -1
- scipy/io/tests/test_mmio.py +7 -1
- scipy/io/tests/test_wavfile.py +41 -0
- scipy/io/wavfile.py +57 -10
- scipy/linalg/_basic.py +113 -86
- scipy/linalg/_cythonized_array_utils.cpython-313t-darwin.so +0 -0
- scipy/linalg/_decomp.py +22 -9
- scipy/linalg/_decomp_cholesky.py +28 -13
- scipy/linalg/_decomp_cossin.py +45 -30
- scipy/linalg/_decomp_interpolative.cpython-313t-darwin.so +0 -0
- scipy/linalg/_decomp_ldl.py +4 -1
- scipy/linalg/_decomp_lu.py +18 -6
- scipy/linalg/_decomp_lu_cython.cpython-313t-darwin.so +0 -0
- scipy/linalg/_decomp_polar.py +2 -0
- scipy/linalg/_decomp_qr.py +6 -2
- scipy/linalg/_decomp_qz.py +3 -0
- scipy/linalg/_decomp_schur.py +3 -1
- scipy/linalg/_decomp_svd.py +13 -2
- scipy/linalg/_decomp_update.cpython-313t-darwin.so +0 -0
- scipy/linalg/_expm_frechet.py +4 -0
- scipy/linalg/_fblas.cpython-313t-darwin.so +0 -0
- scipy/linalg/_flapack.cpython-313t-darwin.so +0 -0
- scipy/linalg/_linalg_pythran.cpython-313t-darwin.so +0 -0
- scipy/linalg/_matfuncs.py +187 -4
- scipy/linalg/_matfuncs_expm.cpython-313t-darwin.so +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cpython-313t-darwin.so +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +1 -99
- scipy/linalg/_matfuncs_sqrtm_triu.cpython-313t-darwin.so +0 -0
- scipy/linalg/_procrustes.py +2 -0
- scipy/linalg/_sketches.py +17 -6
- scipy/linalg/_solve_toeplitz.cpython-313t-darwin.so +0 -0
- scipy/linalg/_solvers.py +7 -2
- scipy/linalg/_special_matrices.py +26 -36
- scipy/linalg/cython_blas.cpython-313t-darwin.so +0 -0
- scipy/linalg/cython_lapack.cpython-313t-darwin.so +0 -0
- scipy/linalg/lapack.py +22 -2
- scipy/linalg/tests/_cython_examples/meson.build +7 -0
- scipy/linalg/tests/test_basic.py +31 -16
- scipy/linalg/tests/test_batch.py +588 -0
- scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
- scipy/linalg/tests/test_decomp.py +40 -3
- scipy/linalg/tests/test_decomp_cossin.py +14 -0
- scipy/linalg/tests/test_decomp_ldl.py +1 -1
- scipy/linalg/tests/test_lapack.py +115 -7
- scipy/linalg/tests/test_matfuncs.py +157 -102
- scipy/linalg/tests/test_procrustes.py +0 -7
- scipy/linalg/tests/test_solve_toeplitz.py +1 -1
- scipy/linalg/tests/test_special_matrices.py +1 -5
- scipy/ndimage/__init__.py +1 -0
- scipy/ndimage/_cytest.cpython-313t-darwin.so +0 -0
- scipy/ndimage/_delegators.py +8 -2
- scipy/ndimage/_filters.py +453 -5
- scipy/ndimage/_interpolation.py +36 -6
- scipy/ndimage/_measurements.py +4 -2
- scipy/ndimage/_morphology.py +5 -0
- scipy/ndimage/_nd_image.cpython-313t-darwin.so +0 -0
- scipy/ndimage/_ni_docstrings.py +5 -1
- scipy/ndimage/_ni_label.cpython-313t-darwin.so +0 -0
- scipy/ndimage/_ni_support.py +1 -5
- scipy/ndimage/_rank_filter_1d.cpython-313t-darwin.so +0 -0
- scipy/ndimage/_support_alternative_backends.py +18 -6
- scipy/ndimage/tests/test_filters.py +370 -259
- scipy/ndimage/tests/test_fourier.py +7 -9
- scipy/ndimage/tests/test_interpolation.py +68 -61
- scipy/ndimage/tests/test_measurements.py +18 -35
- scipy/ndimage/tests/test_morphology.py +143 -131
- scipy/ndimage/tests/test_splines.py +1 -3
- scipy/odr/__odrpack.cpython-313t-darwin.so +0 -0
- scipy/optimize/_basinhopping.py +13 -7
- scipy/optimize/_bglu_dense.cpython-313t-darwin.so +0 -0
- scipy/optimize/_bracket.py +17 -24
- scipy/optimize/_chandrupatla.py +9 -10
- scipy/optimize/_cobyla_py.py +104 -123
- scipy/optimize/_constraints.py +14 -10
- scipy/optimize/_differentiable_functions.py +371 -230
- scipy/optimize/_differentialevolution.py +4 -3
- scipy/optimize/_direct.cpython-313t-darwin.so +0 -0
- scipy/optimize/_dual_annealing.py +1 -1
- scipy/optimize/_elementwise.py +1 -4
- scipy/optimize/_group_columns.cpython-313t-darwin.so +0 -0
- scipy/optimize/_lbfgsb.cpython-313t-darwin.so +0 -0
- scipy/optimize/_lbfgsb_py.py +57 -16
- scipy/optimize/_linprog_doc.py +2 -2
- scipy/optimize/_linprog_highs.py +2 -2
- scipy/optimize/_linprog_ip.py +25 -10
- scipy/optimize/_linprog_util.py +14 -16
- scipy/optimize/_lsap.cpython-313t-darwin.so +0 -0
- scipy/optimize/_lsq/common.py +3 -3
- scipy/optimize/_lsq/dogbox.py +16 -2
- scipy/optimize/_lsq/givens_elimination.cpython-313t-darwin.so +0 -0
- scipy/optimize/_lsq/least_squares.py +198 -126
- scipy/optimize/_lsq/lsq_linear.py +6 -6
- scipy/optimize/_lsq/trf.py +35 -8
- scipy/optimize/_milp.py +3 -1
- scipy/optimize/_minimize.py +105 -36
- scipy/optimize/_minpack.cpython-313t-darwin.so +0 -0
- scipy/optimize/_minpack_py.py +21 -14
- scipy/optimize/_moduleTNC.cpython-313t-darwin.so +0 -0
- scipy/optimize/_nnls.py +20 -21
- scipy/optimize/_nonlin.py +34 -3
- scipy/optimize/_numdiff.py +288 -110
- scipy/optimize/_optimize.py +86 -48
- scipy/optimize/_pava_pybind.cpython-313t-darwin.so +0 -0
- scipy/optimize/_remove_redundancy.py +5 -5
- scipy/optimize/_root_scalar.py +1 -1
- scipy/optimize/_shgo.py +6 -0
- scipy/optimize/_shgo_lib/_complex.py +1 -1
- scipy/optimize/_slsqp_py.py +216 -124
- scipy/optimize/_slsqplib.cpython-313t-darwin.so +0 -0
- scipy/optimize/_spectral.py +1 -1
- scipy/optimize/_tnc.py +8 -1
- scipy/optimize/_trlib/_trlib.cpython-313t-darwin.so +0 -0
- scipy/optimize/_trustregion.py +20 -6
- scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
- scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
- scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
- scipy/optimize/_trustregion_constr/projections.py +12 -8
- scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
- scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
- scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
- scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
- scipy/optimize/_trustregion_exact.py +0 -1
- scipy/optimize/_zeros.cpython-313t-darwin.so +0 -0
- scipy/optimize/_zeros_py.py +97 -17
- scipy/optimize/cython_optimize/_zeros.cpython-313t-darwin.so +0 -0
- scipy/optimize/slsqp.py +0 -1
- scipy/optimize/tests/test__basinhopping.py +1 -1
- scipy/optimize/tests/test__differential_evolution.py +4 -4
- scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
- scipy/optimize/tests/test__numdiff.py +66 -22
- scipy/optimize/tests/test__remove_redundancy.py +2 -2
- scipy/optimize/tests/test__shgo.py +9 -1
- scipy/optimize/tests/test_bracket.py +36 -46
- scipy/optimize/tests/test_chandrupatla.py +133 -135
- scipy/optimize/tests/test_cobyla.py +74 -45
- scipy/optimize/tests/test_constraints.py +1 -1
- scipy/optimize/tests/test_differentiable_functions.py +226 -6
- scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
- scipy/optimize/tests/test_least_squares.py +125 -13
- scipy/optimize/tests/test_linear_assignment.py +3 -3
- scipy/optimize/tests/test_linprog.py +3 -3
- scipy/optimize/tests/test_lsq_linear.py +6 -6
- scipy/optimize/tests/test_minimize_constrained.py +2 -2
- scipy/optimize/tests/test_minpack.py +4 -4
- scipy/optimize/tests/test_nnls.py +43 -3
- scipy/optimize/tests/test_nonlin.py +36 -0
- scipy/optimize/tests/test_optimize.py +95 -17
- scipy/optimize/tests/test_slsqp.py +36 -4
- scipy/optimize/tests/test_zeros.py +34 -1
- scipy/signal/__init__.py +12 -23
- scipy/signal/_delegators.py +568 -0
- scipy/signal/_filter_design.py +459 -241
- scipy/signal/_fir_filter_design.py +262 -90
- scipy/signal/_lti_conversion.py +3 -2
- scipy/signal/_ltisys.py +118 -91
- scipy/signal/_max_len_seq_inner.cpython-313t-darwin.so +0 -0
- scipy/signal/_peak_finding_utils.cpython-313t-darwin.so +0 -0
- scipy/signal/_polyutils.py +172 -0
- scipy/signal/_short_time_fft.py +519 -70
- scipy/signal/_signal_api.py +30 -0
- scipy/signal/_signaltools.py +719 -399
- scipy/signal/_sigtools.cpython-313t-darwin.so +0 -0
- scipy/signal/_sosfilt.cpython-313t-darwin.so +0 -0
- scipy/signal/_spectral_py.py +230 -50
- scipy/signal/_spline.cpython-313t-darwin.so +0 -0
- scipy/signal/_spline_filters.py +108 -68
- scipy/signal/_support_alternative_backends.py +73 -0
- scipy/signal/_upfirdn.py +4 -1
- scipy/signal/_upfirdn_apply.cpython-313t-darwin.so +0 -0
- scipy/signal/_waveforms.py +2 -11
- scipy/signal/_wavelets.py +1 -1
- scipy/signal/fir_filter_design.py +1 -0
- scipy/signal/spline.py +4 -11
- scipy/signal/tests/_scipy_spectral_test_shim.py +2 -171
- scipy/signal/tests/test_bsplines.py +114 -79
- scipy/signal/tests/test_cont2discrete.py +9 -2
- scipy/signal/tests/test_filter_design.py +721 -481
- scipy/signal/tests/test_fir_filter_design.py +332 -140
- scipy/signal/tests/test_savitzky_golay.py +4 -3
- scipy/signal/tests/test_short_time_fft.py +221 -3
- scipy/signal/tests/test_signaltools.py +2144 -1348
- scipy/signal/tests/test_spectral.py +50 -6
- scipy/signal/tests/test_splines.py +161 -96
- scipy/signal/tests/test_upfirdn.py +84 -50
- scipy/signal/tests/test_waveforms.py +20 -0
- scipy/signal/tests/test_windows.py +607 -466
- scipy/signal/windows/_windows.py +287 -148
- scipy/sparse/__init__.py +23 -4
- scipy/sparse/_base.py +270 -108
- scipy/sparse/_bsr.py +7 -4
- scipy/sparse/_compressed.py +59 -231
- scipy/sparse/_construct.py +90 -38
- scipy/sparse/_coo.py +115 -181
- scipy/sparse/_csc.py +4 -4
- scipy/sparse/_csparsetools.cpython-313t-darwin.so +0 -0
- scipy/sparse/_csr.py +2 -2
- scipy/sparse/_data.py +48 -48
- scipy/sparse/_dia.py +105 -18
- scipy/sparse/_dok.py +0 -23
- scipy/sparse/_index.py +4 -4
- scipy/sparse/_matrix.py +23 -0
- scipy/sparse/_sparsetools.cpython-313t-darwin.so +0 -0
- scipy/sparse/_sputils.py +37 -22
- scipy/sparse/base.py +0 -9
- scipy/sparse/bsr.py +0 -14
- scipy/sparse/compressed.py +0 -23
- scipy/sparse/construct.py +0 -6
- scipy/sparse/coo.py +0 -14
- scipy/sparse/csc.py +0 -3
- scipy/sparse/csgraph/_flow.cpython-313t-darwin.so +0 -0
- scipy/sparse/csgraph/_matching.cpython-313t-darwin.so +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cpython-313t-darwin.so +0 -0
- scipy/sparse/csgraph/_reordering.cpython-313t-darwin.so +0 -0
- scipy/sparse/csgraph/_shortest_path.cpython-313t-darwin.so +0 -0
- scipy/sparse/csgraph/_tools.cpython-313t-darwin.so +0 -0
- scipy/sparse/csgraph/_traversal.cpython-313t-darwin.so +0 -0
- scipy/sparse/csgraph/tests/test_matching.py +14 -2
- scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
- scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
- scipy/sparse/csr.py +0 -5
- scipy/sparse/data.py +1 -6
- scipy/sparse/dia.py +0 -7
- scipy/sparse/dok.py +0 -10
- scipy/sparse/linalg/_dsolve/_superlu.cpython-313t-darwin.so +0 -0
- scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
- scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
- scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-313t-darwin.so +0 -0
- scipy/sparse/linalg/_eigen/arpack/arpack.py +23 -17
- scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
- scipy/sparse/linalg/_interface.py +17 -18
- scipy/sparse/linalg/_isolve/_gcrotmk.py +4 -4
- scipy/sparse/linalg/_isolve/iterative.py +51 -45
- scipy/sparse/linalg/_isolve/lgmres.py +6 -6
- scipy/sparse/linalg/_isolve/minres.py +5 -5
- scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
- scipy/sparse/linalg/_isolve/utils.py +2 -8
- scipy/sparse/linalg/_matfuncs.py +1 -1
- scipy/sparse/linalg/_norm.py +1 -1
- scipy/sparse/linalg/_propack/_cpropack.cpython-313t-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cpython-313t-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_spropack.cpython-313t-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cpython-313t-darwin.so +0 -0
- scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
- scipy/sparse/linalg/tests/test_pydata_sparse.py +14 -0
- scipy/sparse/tests/test_arithmetic1d.py +5 -2
- scipy/sparse/tests/test_base.py +214 -42
- scipy/sparse/tests/test_common1d.py +7 -7
- scipy/sparse/tests/test_construct.py +1 -1
- scipy/sparse/tests/test_coo.py +272 -4
- scipy/sparse/tests/test_sparsetools.py +5 -0
- scipy/sparse/tests/test_sputils.py +36 -7
- scipy/spatial/_ckdtree.cpython-313t-darwin.so +0 -0
- scipy/spatial/_distance_pybind.cpython-313t-darwin.so +0 -0
- scipy/spatial/_distance_wrap.cpython-313t-darwin.so +0 -0
- scipy/spatial/_hausdorff.cpython-313t-darwin.so +0 -0
- scipy/spatial/_qhull.cpython-313t-darwin.so +0 -0
- scipy/spatial/_voronoi.cpython-313t-darwin.so +0 -0
- scipy/spatial/distance.py +49 -42
- scipy/spatial/tests/test_distance.py +15 -1
- scipy/spatial/tests/test_kdtree.py +1 -0
- scipy/spatial/tests/test_qhull.py +7 -2
- scipy/spatial/transform/__init__.py +5 -3
- scipy/spatial/transform/_rigid_transform.cpython-313t-darwin.so +0 -0
- scipy/spatial/transform/_rotation.cpython-313t-darwin.so +0 -0
- scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
- scipy/spatial/transform/tests/test_rotation.py +1213 -832
- scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
- scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
- scipy/special/__init__.py +1 -47
- scipy/special/_add_newdocs.py +34 -772
- scipy/special/_basic.py +22 -25
- scipy/special/_comb.cpython-313t-darwin.so +0 -0
- scipy/special/_ellip_harm_2.cpython-313t-darwin.so +0 -0
- scipy/special/_gufuncs.cpython-313t-darwin.so +0 -0
- scipy/special/_logsumexp.py +67 -58
- scipy/special/_orthogonal.pyi +1 -1
- scipy/special/_specfun.cpython-313t-darwin.so +0 -0
- scipy/special/_special_ufuncs.cpython-313t-darwin.so +0 -0
- scipy/special/_spherical_bessel.py +4 -4
- scipy/special/_support_alternative_backends.py +212 -119
- scipy/special/_test_internal.cpython-313t-darwin.so +0 -0
- scipy/special/_testutils.py +4 -4
- scipy/special/_ufuncs.cpython-313t-darwin.so +0 -0
- scipy/special/_ufuncs.pyi +1 -0
- scipy/special/_ufuncs.pyx +215 -1400
- scipy/special/_ufuncs_cxx.cpython-313t-darwin.so +0 -0
- scipy/special/_ufuncs_cxx.pxd +2 -15
- scipy/special/_ufuncs_cxx.pyx +5 -44
- scipy/special/_ufuncs_cxx_defs.h +2 -16
- scipy/special/_ufuncs_defs.h +0 -8
- scipy/special/cython_special.cpython-313t-darwin.so +0 -0
- scipy/special/cython_special.pxd +1 -1
- scipy/special/tests/_cython_examples/meson.build +10 -1
- scipy/special/tests/test_basic.py +153 -20
- scipy/special/tests/test_boost_ufuncs.py +3 -0
- scipy/special/tests/test_cdflib.py +35 -11
- scipy/special/tests/test_gammainc.py +16 -0
- scipy/special/tests/test_hyp2f1.py +2 -2
- scipy/special/tests/test_log1mexp.py +85 -0
- scipy/special/tests/test_logsumexp.py +206 -64
- scipy/special/tests/test_mpmath.py +1 -0
- scipy/special/tests/test_nan_inputs.py +1 -1
- scipy/special/tests/test_orthogonal.py +17 -18
- scipy/special/tests/test_sf_error.py +3 -2
- scipy/special/tests/test_sph_harm.py +6 -7
- scipy/special/tests/test_support_alternative_backends.py +211 -76
- scipy/stats/__init__.py +4 -1
- scipy/stats/_ansari_swilk_statistics.cpython-313t-darwin.so +0 -0
- scipy/stats/_axis_nan_policy.py +5 -12
- scipy/stats/_biasedurn.cpython-313t-darwin.so +0 -0
- scipy/stats/_continued_fraction.py +387 -0
- scipy/stats/_continuous_distns.py +277 -310
- scipy/stats/_correlation.py +1 -1
- scipy/stats/_covariance.py +6 -3
- scipy/stats/_discrete_distns.py +39 -32
- scipy/stats/_distn_infrastructure.py +39 -12
- scipy/stats/_distribution_infrastructure.py +900 -238
- scipy/stats/_entropy.py +9 -10
- scipy/{_lib → stats}/_finite_differences.py +1 -1
- scipy/stats/_hypotests.py +83 -50
- scipy/stats/_kde.py +53 -49
- scipy/stats/_ksstats.py +1 -1
- scipy/stats/_levy_stable/__init__.py +7 -15
- scipy/stats/_levy_stable/levyst.cpython-313t-darwin.so +0 -0
- scipy/stats/_morestats.py +118 -73
- scipy/stats/_mstats_basic.py +13 -17
- scipy/stats/_mstats_extras.py +8 -8
- scipy/stats/_multivariate.py +89 -113
- scipy/stats/_new_distributions.py +97 -20
- scipy/stats/_page_trend_test.py +12 -5
- scipy/stats/_probability_distribution.py +265 -43
- scipy/stats/_qmc.py +14 -9
- scipy/stats/_qmc_cy.cpython-313t-darwin.so +0 -0
- scipy/stats/_qmvnt.py +16 -95
- scipy/stats/_qmvnt_cy.cpython-313t-darwin.so +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/rcont.cpython-313t-darwin.so +0 -0
- scipy/stats/_resampling.py +4 -29
- scipy/stats/_sampling.py +1 -1
- scipy/stats/_sobol.cpython-313t-darwin.so +0 -0
- scipy/stats/_stats.cpython-313t-darwin.so +0 -0
- scipy/stats/_stats_mstats_common.py +21 -2
- scipy/stats/_stats_py.py +550 -476
- scipy/stats/_stats_pythran.cpython-313t-darwin.so +0 -0
- scipy/stats/_unuran/unuran_wrapper.cpython-313t-darwin.so +0 -0
- scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
- scipy/stats/_variation.py +6 -8
- scipy/stats/_wilcoxon.py +13 -7
- scipy/stats/tests/common_tests.py +6 -4
- scipy/stats/tests/test_axis_nan_policy.py +62 -24
- scipy/stats/tests/test_continued_fraction.py +173 -0
- scipy/stats/tests/test_continuous.py +379 -60
- scipy/stats/tests/test_continuous_basic.py +18 -12
- scipy/stats/tests/test_discrete_basic.py +14 -8
- scipy/stats/tests/test_discrete_distns.py +16 -16
- scipy/stats/tests/test_distributions.py +95 -75
- scipy/stats/tests/test_entropy.py +40 -48
- scipy/stats/tests/test_fit.py +4 -3
- scipy/stats/tests/test_hypotests.py +153 -24
- scipy/stats/tests/test_kdeoth.py +109 -41
- scipy/stats/tests/test_marray.py +289 -0
- scipy/stats/tests/test_morestats.py +79 -47
- scipy/stats/tests/test_mstats_basic.py +3 -3
- scipy/stats/tests/test_multivariate.py +434 -83
- scipy/stats/tests/test_qmc.py +13 -10
- scipy/stats/tests/test_quantile.py +199 -0
- scipy/stats/tests/test_rank.py +119 -112
- scipy/stats/tests/test_resampling.py +47 -56
- scipy/stats/tests/test_sampling.py +9 -4
- scipy/stats/tests/test_stats.py +799 -939
- scipy/stats/tests/test_variation.py +8 -6
- scipy/version.py +2 -2
- {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/LICENSE.txt +4 -4
- {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/METADATA +11 -11
- {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/RECORD +559 -566
- scipy-1.16.0rc2.dist-info/WHEEL +6 -0
- scipy/_lib/array_api_extra/_funcs.py +0 -484
- scipy/_lib/array_api_extra/_typing.py +0 -8
- scipy/interpolate/_bspl.cpython-313t-darwin.so +0 -0
- scipy/optimize/_cobyla.cpython-313t-darwin.so +0 -0
- scipy/optimize/_cython_nnls.cpython-313t-darwin.so +0 -0
- scipy/optimize/_slsqp.cpython-313t-darwin.so +0 -0
- scipy/spatial/qhull_src/COPYING.txt +0 -38
- scipy/special/libsf_error_state.dylib +0 -0
- scipy/special/tests/test_log_softmax.py +0 -109
- scipy/special/tests/test_xsf_cuda.py +0 -114
- scipy/special/xsf/binom.h +0 -89
- scipy/special/xsf/cdflib.h +0 -100
- scipy/special/xsf/cephes/airy.h +0 -307
- scipy/special/xsf/cephes/besselpoly.h +0 -51
- scipy/special/xsf/cephes/beta.h +0 -257
- scipy/special/xsf/cephes/cbrt.h +0 -131
- scipy/special/xsf/cephes/chbevl.h +0 -85
- scipy/special/xsf/cephes/chdtr.h +0 -193
- scipy/special/xsf/cephes/const.h +0 -87
- scipy/special/xsf/cephes/ellie.h +0 -293
- scipy/special/xsf/cephes/ellik.h +0 -251
- scipy/special/xsf/cephes/ellpe.h +0 -107
- scipy/special/xsf/cephes/ellpk.h +0 -117
- scipy/special/xsf/cephes/expn.h +0 -260
- scipy/special/xsf/cephes/gamma.h +0 -398
- scipy/special/xsf/cephes/hyp2f1.h +0 -596
- scipy/special/xsf/cephes/hyperg.h +0 -361
- scipy/special/xsf/cephes/i0.h +0 -149
- scipy/special/xsf/cephes/i1.h +0 -158
- scipy/special/xsf/cephes/igam.h +0 -421
- scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
- scipy/special/xsf/cephes/igami.h +0 -313
- scipy/special/xsf/cephes/j0.h +0 -225
- scipy/special/xsf/cephes/j1.h +0 -198
- scipy/special/xsf/cephes/jv.h +0 -715
- scipy/special/xsf/cephes/k0.h +0 -164
- scipy/special/xsf/cephes/k1.h +0 -163
- scipy/special/xsf/cephes/kn.h +0 -243
- scipy/special/xsf/cephes/lanczos.h +0 -112
- scipy/special/xsf/cephes/ndtr.h +0 -275
- scipy/special/xsf/cephes/poch.h +0 -85
- scipy/special/xsf/cephes/polevl.h +0 -167
- scipy/special/xsf/cephes/psi.h +0 -194
- scipy/special/xsf/cephes/rgamma.h +0 -111
- scipy/special/xsf/cephes/scipy_iv.h +0 -811
- scipy/special/xsf/cephes/shichi.h +0 -248
- scipy/special/xsf/cephes/sici.h +0 -224
- scipy/special/xsf/cephes/sindg.h +0 -221
- scipy/special/xsf/cephes/tandg.h +0 -139
- scipy/special/xsf/cephes/trig.h +0 -58
- scipy/special/xsf/cephes/unity.h +0 -186
- scipy/special/xsf/cephes/zeta.h +0 -172
- scipy/special/xsf/config.h +0 -304
- scipy/special/xsf/digamma.h +0 -205
- scipy/special/xsf/error.h +0 -57
- scipy/special/xsf/evalpoly.h +0 -47
- scipy/special/xsf/expint.h +0 -266
- scipy/special/xsf/hyp2f1.h +0 -694
- scipy/special/xsf/iv_ratio.h +0 -173
- scipy/special/xsf/lambertw.h +0 -150
- scipy/special/xsf/loggamma.h +0 -163
- scipy/special/xsf/sici.h +0 -200
- scipy/special/xsf/tools.h +0 -427
- scipy/special/xsf/trig.h +0 -164
- scipy/special/xsf/wright_bessel.h +0 -843
- scipy/special/xsf/zlog1.h +0 -35
- scipy/stats/_mvn.cpython-313t-darwin.so +0 -0
- scipy-1.15.3.dist-info/WHEEL +0 -4
@@ -1,85 +1,114 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
-
from typing import TYPE_CHECKING, NamedTuple
|
4
|
-
if TYPE_CHECKING:
|
5
|
-
from typing import Literal, Optional, Tuple, Union
|
6
|
-
from ._typing import ndarray
|
7
|
-
|
8
3
|
import math
|
4
|
+
from typing import Literal, NamedTuple, cast
|
9
5
|
|
10
6
|
import numpy as np
|
7
|
+
|
11
8
|
if np.__version__[0] == "2":
|
12
9
|
from numpy.lib.array_utils import normalize_axis_tuple
|
13
10
|
else:
|
14
11
|
from numpy.core.numeric import normalize_axis_tuple
|
15
12
|
|
16
|
-
from ._aliases import matmul, matrix_transpose, tensordot, vecdot, isdtype
|
17
13
|
from .._internal import get_xp
|
14
|
+
from ._aliases import isdtype, matmul, matrix_transpose, tensordot, vecdot
|
15
|
+
from ._typing import Array, DType, JustFloat, JustInt, Namespace
|
16
|
+
|
18
17
|
|
19
18
|
# These are in the main NumPy namespace but not in numpy.linalg
|
20
|
-
def cross(
|
19
|
+
def cross(
|
20
|
+
x1: Array,
|
21
|
+
x2: Array,
|
22
|
+
/,
|
23
|
+
xp: Namespace,
|
24
|
+
*,
|
25
|
+
axis: int = -1,
|
26
|
+
**kwargs: object,
|
27
|
+
) -> Array:
|
21
28
|
return xp.cross(x1, x2, axis=axis, **kwargs)
|
22
29
|
|
23
|
-
def outer(x1:
|
30
|
+
def outer(x1: Array, x2: Array, /, xp: Namespace, **kwargs: object) -> Array:
|
24
31
|
return xp.outer(x1, x2, **kwargs)
|
25
32
|
|
26
33
|
class EighResult(NamedTuple):
|
27
|
-
eigenvalues:
|
28
|
-
eigenvectors:
|
34
|
+
eigenvalues: Array
|
35
|
+
eigenvectors: Array
|
29
36
|
|
30
37
|
class QRResult(NamedTuple):
|
31
|
-
Q:
|
32
|
-
R:
|
38
|
+
Q: Array
|
39
|
+
R: Array
|
33
40
|
|
34
41
|
class SlogdetResult(NamedTuple):
|
35
|
-
sign:
|
36
|
-
logabsdet:
|
42
|
+
sign: Array
|
43
|
+
logabsdet: Array
|
37
44
|
|
38
45
|
class SVDResult(NamedTuple):
|
39
|
-
U:
|
40
|
-
S:
|
41
|
-
Vh:
|
46
|
+
U: Array
|
47
|
+
S: Array
|
48
|
+
Vh: Array
|
42
49
|
|
43
50
|
# These functions are the same as their NumPy counterparts except they return
|
44
51
|
# a namedtuple.
|
45
|
-
def eigh(x:
|
52
|
+
def eigh(x: Array, /, xp: Namespace, **kwargs: object) -> EighResult:
|
46
53
|
return EighResult(*xp.linalg.eigh(x, **kwargs))
|
47
54
|
|
48
|
-
def qr(
|
49
|
-
|
55
|
+
def qr(
|
56
|
+
x: Array,
|
57
|
+
/,
|
58
|
+
xp: Namespace,
|
59
|
+
*,
|
60
|
+
mode: Literal["reduced", "complete"] = "reduced",
|
61
|
+
**kwargs: object,
|
62
|
+
) -> QRResult:
|
50
63
|
return QRResult(*xp.linalg.qr(x, mode=mode, **kwargs))
|
51
64
|
|
52
|
-
def slogdet(x:
|
65
|
+
def slogdet(x: Array, /, xp: Namespace, **kwargs: object) -> SlogdetResult:
|
53
66
|
return SlogdetResult(*xp.linalg.slogdet(x, **kwargs))
|
54
67
|
|
55
|
-
def svd(
|
68
|
+
def svd(
|
69
|
+
x: Array,
|
70
|
+
/,
|
71
|
+
xp: Namespace,
|
72
|
+
*,
|
73
|
+
full_matrices: bool = True,
|
74
|
+
**kwargs: object,
|
75
|
+
) -> SVDResult:
|
56
76
|
return SVDResult(*xp.linalg.svd(x, full_matrices=full_matrices, **kwargs))
|
57
77
|
|
58
78
|
# These functions have additional keyword arguments
|
59
79
|
|
60
80
|
# The upper keyword argument is new from NumPy
|
61
|
-
def cholesky(
|
81
|
+
def cholesky(
|
82
|
+
x: Array,
|
83
|
+
/,
|
84
|
+
xp: Namespace,
|
85
|
+
*,
|
86
|
+
upper: bool = False,
|
87
|
+
**kwargs: object,
|
88
|
+
) -> Array:
|
62
89
|
L = xp.linalg.cholesky(x, **kwargs)
|
63
90
|
if upper:
|
64
91
|
U = get_xp(xp)(matrix_transpose)(L)
|
65
92
|
if get_xp(xp)(isdtype)(U.dtype, 'complex floating'):
|
66
|
-
U = xp.conj(U)
|
93
|
+
U = xp.conj(U) # pyright: ignore[reportConstantRedefinition]
|
67
94
|
return U
|
68
95
|
return L
|
69
96
|
|
70
97
|
# The rtol keyword argument of matrix_rank() and pinv() is new from NumPy.
|
71
98
|
# Note that it has a different semantic meaning from tol and rcond.
|
72
|
-
def matrix_rank(
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
99
|
+
def matrix_rank(
|
100
|
+
x: Array,
|
101
|
+
/,
|
102
|
+
xp: Namespace,
|
103
|
+
*,
|
104
|
+
rtol: float | Array | None = None,
|
105
|
+
**kwargs: object,
|
106
|
+
) -> Array:
|
78
107
|
# this is different from xp.linalg.matrix_rank, which supports 1
|
79
108
|
# dimensional arrays.
|
80
109
|
if x.ndim < 2:
|
81
110
|
raise xp.linalg.LinAlgError("1-dimensional array given. Array must be at least two-dimensional")
|
82
|
-
S = get_xp(xp)(svdvals)(x, **kwargs)
|
111
|
+
S: Array = get_xp(xp)(svdvals)(x, **kwargs)
|
83
112
|
if rtol is None:
|
84
113
|
tol = S.max(axis=-1, keepdims=True) * max(x.shape[-2:]) * xp.finfo(S.dtype).eps
|
85
114
|
else:
|
@@ -88,7 +117,14 @@ def matrix_rank(x: ndarray,
|
|
88
117
|
tol = S.max(axis=-1, keepdims=True)*xp.asarray(rtol)[..., xp.newaxis]
|
89
118
|
return xp.count_nonzero(S > tol, axis=-1)
|
90
119
|
|
91
|
-
def pinv(
|
120
|
+
def pinv(
|
121
|
+
x: Array,
|
122
|
+
/,
|
123
|
+
xp: Namespace,
|
124
|
+
*,
|
125
|
+
rtol: float | Array | None = None,
|
126
|
+
**kwargs: object,
|
127
|
+
) -> Array:
|
92
128
|
# this is different from xp.linalg.pinv, which does not multiply the
|
93
129
|
# default tolerance by max(M, N).
|
94
130
|
if rtol is None:
|
@@ -97,15 +133,30 @@ def pinv(x: ndarray, /, xp, *, rtol: Optional[Union[float, ndarray]] = None, **k
|
|
97
133
|
|
98
134
|
# These functions are new in the array API spec
|
99
135
|
|
100
|
-
def matrix_norm(
|
136
|
+
def matrix_norm(
|
137
|
+
x: Array,
|
138
|
+
/,
|
139
|
+
xp: Namespace,
|
140
|
+
*,
|
141
|
+
keepdims: bool = False,
|
142
|
+
ord: Literal[1, 2, -1, -2] | JustFloat | Literal["fro", "nuc"] | None = "fro",
|
143
|
+
) -> Array:
|
101
144
|
return xp.linalg.norm(x, axis=(-2, -1), keepdims=keepdims, ord=ord)
|
102
145
|
|
103
146
|
# svdvals is not in NumPy (but it is in SciPy). It is equivalent to
|
104
147
|
# xp.linalg.svd(compute_uv=False).
|
105
|
-
def svdvals(x:
|
148
|
+
def svdvals(x: Array, /, xp: Namespace) -> Array | tuple[Array, ...]:
|
106
149
|
return xp.linalg.svd(x, compute_uv=False)
|
107
150
|
|
108
|
-
def vector_norm(
|
151
|
+
def vector_norm(
|
152
|
+
x: Array,
|
153
|
+
/,
|
154
|
+
xp: Namespace,
|
155
|
+
*,
|
156
|
+
axis: int | tuple[int, ...] | None = None,
|
157
|
+
keepdims: bool = False,
|
158
|
+
ord: JustInt | JustFloat = 2,
|
159
|
+
) -> Array:
|
109
160
|
# xp.linalg.norm tries to do a matrix norm whenever axis is a 2-tuple or
|
110
161
|
# when axis=None and the input is 2-D, so to force a vector norm, we make
|
111
162
|
# it so the input is 1-D (for axis=None), or reshape so that norm is done
|
@@ -117,7 +168,10 @@ def vector_norm(x: ndarray, /, xp, *, axis: Optional[Union[int, Tuple[int, ...]]
|
|
117
168
|
elif isinstance(axis, tuple):
|
118
169
|
# Note: The axis argument supports any number of axes, whereas
|
119
170
|
# xp.linalg.norm() only supports a single axis for vector norm.
|
120
|
-
normalized_axis =
|
171
|
+
normalized_axis = cast(
|
172
|
+
"tuple[int, ...]",
|
173
|
+
normalize_axis_tuple(axis, x.ndim), # pyright: ignore[reportCallIssue]
|
174
|
+
)
|
121
175
|
rest = tuple(i for i in range(x.ndim) if i not in normalized_axis)
|
122
176
|
newshape = axis + rest
|
123
177
|
_x = xp.transpose(x, newshape).reshape(
|
@@ -133,7 +187,13 @@ def vector_norm(x: ndarray, /, xp, *, axis: Optional[Union[int, Tuple[int, ...]]
|
|
133
187
|
# We can't reuse xp.linalg.norm(keepdims) because of the reshape hacks
|
134
188
|
# above to avoid matrix norm logic.
|
135
189
|
shape = list(x.shape)
|
136
|
-
_axis =
|
190
|
+
_axis = cast(
|
191
|
+
"tuple[int, ...]",
|
192
|
+
normalize_axis_tuple( # pyright: ignore[reportCallIssue]
|
193
|
+
range(x.ndim) if axis is None else axis,
|
194
|
+
x.ndim,
|
195
|
+
),
|
196
|
+
)
|
137
197
|
for i in _axis:
|
138
198
|
shape[i] = 1
|
139
199
|
res = xp.reshape(res, tuple(shape))
|
@@ -143,14 +203,30 @@ def vector_norm(x: ndarray, /, xp, *, axis: Optional[Union[int, Tuple[int, ...]]
|
|
143
203
|
# xp.diagonal and xp.trace operate on the first two axes whereas these
|
144
204
|
# operates on the last two
|
145
205
|
|
146
|
-
def diagonal(x:
|
206
|
+
def diagonal(x: Array, /, xp: Namespace, *, offset: int = 0, **kwargs: object) -> Array:
|
147
207
|
return xp.diagonal(x, offset=offset, axis1=-2, axis2=-1, **kwargs)
|
148
208
|
|
149
|
-
def trace(
|
150
|
-
|
209
|
+
def trace(
|
210
|
+
x: Array,
|
211
|
+
/,
|
212
|
+
xp: Namespace,
|
213
|
+
*,
|
214
|
+
offset: int = 0,
|
215
|
+
dtype: DType | None = None,
|
216
|
+
**kwargs: object,
|
217
|
+
) -> Array:
|
218
|
+
return xp.asarray(
|
219
|
+
xp.trace(x, offset=offset, dtype=dtype, axis1=-2, axis2=-1, **kwargs)
|
220
|
+
)
|
151
221
|
|
152
222
|
__all__ = ['cross', 'matmul', 'outer', 'tensordot', 'EighResult',
|
153
223
|
'QRResult', 'SlogdetResult', 'SVDResult', 'eigh', 'qr', 'slogdet',
|
154
224
|
'svd', 'cholesky', 'matrix_rank', 'pinv', 'matrix_norm',
|
155
225
|
'matrix_transpose', 'svdvals', 'vecdot', 'vector_norm', 'diagonal',
|
156
226
|
'trace']
|
227
|
+
|
228
|
+
_all_ignore = ['math', 'normalize_axis_tuple', 'get_xp', 'np', 'isdtype']
|
229
|
+
|
230
|
+
|
231
|
+
def __dir__() -> list[str]:
|
232
|
+
return __all__
|
@@ -1,23 +1,192 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
"SupportsBufferProtocol",
|
6
|
-
]
|
7
|
-
|
3
|
+
from collections.abc import Mapping
|
4
|
+
from types import ModuleType as Namespace
|
8
5
|
from typing import (
|
9
|
-
|
10
|
-
|
6
|
+
TYPE_CHECKING,
|
7
|
+
Literal,
|
11
8
|
Protocol,
|
9
|
+
TypeAlias,
|
10
|
+
TypedDict,
|
11
|
+
TypeVar,
|
12
|
+
final,
|
12
13
|
)
|
13
14
|
|
15
|
+
if TYPE_CHECKING:
|
16
|
+
from _typeshed import Incomplete
|
17
|
+
|
18
|
+
SupportsBufferProtocol: TypeAlias = Incomplete
|
19
|
+
Array: TypeAlias = Incomplete
|
20
|
+
Device: TypeAlias = Incomplete
|
21
|
+
DType: TypeAlias = Incomplete
|
22
|
+
else:
|
23
|
+
SupportsBufferProtocol = object
|
24
|
+
Array = object
|
25
|
+
Device = object
|
26
|
+
DType = object
|
27
|
+
|
28
|
+
|
14
29
|
_T_co = TypeVar("_T_co", covariant=True)
|
15
30
|
|
31
|
+
|
32
|
+
# These "Just" types are equivalent to the `Just` type from the `optype` library,
|
33
|
+
# apart from them not being `@runtime_checkable`.
|
34
|
+
# - docs: https://github.com/jorenham/optype/blob/master/README.md#just
|
35
|
+
# - code: https://github.com/jorenham/optype/blob/master/optype/_core/_just.py
|
36
|
+
@final
|
37
|
+
class JustInt(Protocol):
|
38
|
+
@property
|
39
|
+
def __class__(self, /) -> type[int]: ...
|
40
|
+
@__class__.setter
|
41
|
+
def __class__(self, value: type[int], /) -> None: ... # pyright: ignore[reportIncompatibleMethodOverride]
|
42
|
+
|
43
|
+
|
44
|
+
@final
|
45
|
+
class JustFloat(Protocol):
|
46
|
+
@property
|
47
|
+
def __class__(self, /) -> type[float]: ...
|
48
|
+
@__class__.setter
|
49
|
+
def __class__(self, value: type[float], /) -> None: ... # pyright: ignore[reportIncompatibleMethodOverride]
|
50
|
+
|
51
|
+
|
52
|
+
@final
|
53
|
+
class JustComplex(Protocol):
|
54
|
+
@property
|
55
|
+
def __class__(self, /) -> type[complex]: ...
|
56
|
+
@__class__.setter
|
57
|
+
def __class__(self, value: type[complex], /) -> None: ... # pyright: ignore[reportIncompatibleMethodOverride]
|
58
|
+
|
59
|
+
|
60
|
+
#
|
61
|
+
|
62
|
+
|
16
63
|
class NestedSequence(Protocol[_T_co]):
|
17
64
|
def __getitem__(self, key: int, /) -> _T_co | NestedSequence[_T_co]: ...
|
18
65
|
def __len__(self, /) -> int: ...
|
19
66
|
|
20
|
-
SupportsBufferProtocol = Any
|
21
67
|
|
22
|
-
|
23
|
-
|
68
|
+
class SupportsArrayNamespace(Protocol[_T_co]):
|
69
|
+
def __array_namespace__(self, /, *, api_version: str | None) -> _T_co: ...
|
70
|
+
|
71
|
+
|
72
|
+
class HasShape(Protocol[_T_co]):
|
73
|
+
@property
|
74
|
+
def shape(self, /) -> _T_co: ...
|
75
|
+
|
76
|
+
|
77
|
+
# Return type of `__array_namespace_info__.default_dtypes`
|
78
|
+
Capabilities = TypedDict(
|
79
|
+
"Capabilities",
|
80
|
+
{
|
81
|
+
"boolean indexing": bool,
|
82
|
+
"data-dependent shapes": bool,
|
83
|
+
"max dimensions": int,
|
84
|
+
},
|
85
|
+
)
|
86
|
+
|
87
|
+
# Return type of `__array_namespace_info__.default_dtypes`
|
88
|
+
DefaultDTypes = TypedDict(
|
89
|
+
"DefaultDTypes",
|
90
|
+
{
|
91
|
+
"real floating": DType,
|
92
|
+
"complex floating": DType,
|
93
|
+
"integral": DType,
|
94
|
+
"indexing": DType,
|
95
|
+
},
|
96
|
+
)
|
97
|
+
|
98
|
+
|
99
|
+
_DTypeKind: TypeAlias = Literal[
|
100
|
+
"bool",
|
101
|
+
"signed integer",
|
102
|
+
"unsigned integer",
|
103
|
+
"integral",
|
104
|
+
"real floating",
|
105
|
+
"complex floating",
|
106
|
+
"numeric",
|
107
|
+
]
|
108
|
+
# Type of the `kind` parameter in `__array_namespace_info__.dtypes`
|
109
|
+
DTypeKind: TypeAlias = _DTypeKind | tuple[_DTypeKind, ...]
|
110
|
+
|
111
|
+
|
112
|
+
# `__array_namespace_info__.dtypes(kind="bool")`
|
113
|
+
class DTypesBool(TypedDict):
|
114
|
+
bool: DType
|
115
|
+
|
116
|
+
|
117
|
+
# `__array_namespace_info__.dtypes(kind="signed integer")`
|
118
|
+
class DTypesSigned(TypedDict):
|
119
|
+
int8: DType
|
120
|
+
int16: DType
|
121
|
+
int32: DType
|
122
|
+
int64: DType
|
123
|
+
|
124
|
+
|
125
|
+
# `__array_namespace_info__.dtypes(kind="unsigned integer")`
|
126
|
+
class DTypesUnsigned(TypedDict):
|
127
|
+
uint8: DType
|
128
|
+
uint16: DType
|
129
|
+
uint32: DType
|
130
|
+
uint64: DType
|
131
|
+
|
132
|
+
|
133
|
+
# `__array_namespace_info__.dtypes(kind="integral")`
|
134
|
+
class DTypesIntegral(DTypesSigned, DTypesUnsigned):
|
135
|
+
pass
|
136
|
+
|
137
|
+
|
138
|
+
# `__array_namespace_info__.dtypes(kind="real floating")`
|
139
|
+
class DTypesReal(TypedDict):
|
140
|
+
float32: DType
|
141
|
+
float64: DType
|
142
|
+
|
143
|
+
|
144
|
+
# `__array_namespace_info__.dtypes(kind="complex floating")`
|
145
|
+
class DTypesComplex(TypedDict):
|
146
|
+
complex64: DType
|
147
|
+
complex128: DType
|
148
|
+
|
149
|
+
|
150
|
+
# `__array_namespace_info__.dtypes(kind="numeric")`
|
151
|
+
class DTypesNumeric(DTypesIntegral, DTypesReal, DTypesComplex):
|
152
|
+
pass
|
153
|
+
|
154
|
+
|
155
|
+
# `__array_namespace_info__.dtypes(kind=None)` (default)
|
156
|
+
class DTypesAll(DTypesBool, DTypesNumeric):
|
157
|
+
pass
|
158
|
+
|
159
|
+
|
160
|
+
# `__array_namespace_info__.dtypes(kind=?)` (fallback)
|
161
|
+
DTypesAny: TypeAlias = Mapping[str, DType]
|
162
|
+
|
163
|
+
|
164
|
+
__all__ = [
|
165
|
+
"Array",
|
166
|
+
"Capabilities",
|
167
|
+
"DType",
|
168
|
+
"DTypeKind",
|
169
|
+
"DTypesAny",
|
170
|
+
"DTypesAll",
|
171
|
+
"DTypesBool",
|
172
|
+
"DTypesNumeric",
|
173
|
+
"DTypesIntegral",
|
174
|
+
"DTypesSigned",
|
175
|
+
"DTypesUnsigned",
|
176
|
+
"DTypesReal",
|
177
|
+
"DTypesComplex",
|
178
|
+
"DefaultDTypes",
|
179
|
+
"Device",
|
180
|
+
"HasShape",
|
181
|
+
"Namespace",
|
182
|
+
"JustInt",
|
183
|
+
"JustFloat",
|
184
|
+
"JustComplex",
|
185
|
+
"NestedSequence",
|
186
|
+
"SupportsArrayNamespace",
|
187
|
+
"SupportsBufferProtocol",
|
188
|
+
]
|
189
|
+
|
190
|
+
|
191
|
+
def __dir__() -> list[str]:
|
192
|
+
return __all__
|
@@ -8,9 +8,6 @@ from ._aliases import * # noqa: F403
|
|
8
8
|
|
9
9
|
# See the comment in the numpy __init__.py
|
10
10
|
__import__(__package__ + '.linalg')
|
11
|
-
|
12
11
|
__import__(__package__ + '.fft')
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
__array_api_version__ = '2023.12'
|
13
|
+
__array_api_version__ = '2024.12'
|
@@ -1,16 +1,14 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
+
from typing import Optional
|
4
|
+
|
3
5
|
import cupy as cp
|
4
6
|
|
5
|
-
from ..common import _aliases
|
7
|
+
from ..common import _aliases, _helpers
|
8
|
+
from ..common._typing import NestedSequence, SupportsBufferProtocol
|
6
9
|
from .._internal import get_xp
|
7
|
-
|
8
10
|
from ._info import __array_namespace_info__
|
9
|
-
|
10
|
-
from typing import TYPE_CHECKING
|
11
|
-
if TYPE_CHECKING:
|
12
|
-
from typing import Optional, Union
|
13
|
-
from ._typing import ndarray, Device, Dtype, NestedSequence, SupportsBufferProtocol
|
11
|
+
from ._typing import Array, Device, DType
|
14
12
|
|
15
13
|
bool = cp.bool_
|
16
14
|
|
@@ -46,10 +44,10 @@ unique_all = get_xp(cp)(_aliases.unique_all)
|
|
46
44
|
unique_counts = get_xp(cp)(_aliases.unique_counts)
|
47
45
|
unique_inverse = get_xp(cp)(_aliases.unique_inverse)
|
48
46
|
unique_values = get_xp(cp)(_aliases.unique_values)
|
49
|
-
astype = _aliases.astype
|
50
47
|
std = get_xp(cp)(_aliases.std)
|
51
48
|
var = get_xp(cp)(_aliases.var)
|
52
49
|
cumulative_sum = get_xp(cp)(_aliases.cumulative_sum)
|
50
|
+
cumulative_prod = get_xp(cp)(_aliases.cumulative_prod)
|
53
51
|
clip = get_xp(cp)(_aliases.clip)
|
54
52
|
permute_dims = get_xp(cp)(_aliases.permute_dims)
|
55
53
|
reshape = get_xp(cp)(_aliases.reshape)
|
@@ -63,26 +61,25 @@ matmul = get_xp(cp)(_aliases.matmul)
|
|
63
61
|
matrix_transpose = get_xp(cp)(_aliases.matrix_transpose)
|
64
62
|
tensordot = get_xp(cp)(_aliases.tensordot)
|
65
63
|
sign = get_xp(cp)(_aliases.sign)
|
64
|
+
finfo = get_xp(cp)(_aliases.finfo)
|
65
|
+
iinfo = get_xp(cp)(_aliases.iinfo)
|
66
66
|
|
67
|
-
_copy_default = object()
|
68
67
|
|
69
68
|
# asarray also adds the copy keyword, which is not present in numpy 1.0.
|
70
69
|
def asarray(
|
71
|
-
obj:
|
72
|
-
|
73
|
-
bool
|
74
|
-
int
|
75
|
-
|
76
|
-
|
77
|
-
SupportsBufferProtocol,
|
78
|
-
],
|
70
|
+
obj: (
|
71
|
+
Array
|
72
|
+
| bool | int | float | complex
|
73
|
+
| NestedSequence[bool | int | float | complex]
|
74
|
+
| SupportsBufferProtocol
|
75
|
+
),
|
79
76
|
/,
|
80
77
|
*,
|
81
|
-
dtype: Optional[
|
78
|
+
dtype: Optional[DType] = None,
|
82
79
|
device: Optional[Device] = None,
|
83
|
-
copy: Optional[bool] =
|
80
|
+
copy: Optional[bool] = None,
|
84
81
|
**kwargs,
|
85
|
-
) ->
|
82
|
+
) -> Array:
|
86
83
|
"""
|
87
84
|
Array API compatibility wrapper for asarray().
|
88
85
|
|
@@ -90,25 +87,47 @@ def asarray(
|
|
90
87
|
specification for more details.
|
91
88
|
"""
|
92
89
|
with cp.cuda.Device(device):
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
return
|
90
|
+
if copy is None:
|
91
|
+
return cp.asarray(obj, dtype=dtype, **kwargs)
|
92
|
+
else:
|
93
|
+
res = cp.array(obj, dtype=dtype, copy=copy, **kwargs)
|
94
|
+
if not copy and res is not obj:
|
95
|
+
raise ValueError("Unable to avoid copy while creating an array as requested")
|
96
|
+
return res
|
97
|
+
|
98
|
+
|
99
|
+
def astype(
|
100
|
+
x: Array,
|
101
|
+
dtype: DType,
|
102
|
+
/,
|
103
|
+
*,
|
104
|
+
copy: bool = True,
|
105
|
+
device: Optional[Device] = None,
|
106
|
+
) -> Array:
|
107
|
+
if device is None:
|
108
|
+
return x.astype(dtype=dtype, copy=copy)
|
109
|
+
out = _helpers.to_device(x.astype(dtype=dtype, copy=False), device)
|
110
|
+
return out.copy() if copy and out is x else out
|
111
|
+
|
112
|
+
|
113
|
+
# cupy.count_nonzero does not have keepdims
|
114
|
+
def count_nonzero(
|
115
|
+
x: Array,
|
116
|
+
axis=None,
|
117
|
+
keepdims=False
|
118
|
+
) -> Array:
|
119
|
+
result = cp.count_nonzero(x, axis)
|
120
|
+
if keepdims:
|
121
|
+
if axis is None:
|
122
|
+
return cp.reshape(result, [1]*x.ndim)
|
123
|
+
return cp.expand_dims(result, axis)
|
124
|
+
return result
|
125
|
+
|
126
|
+
|
127
|
+
# take_along_axis: axis defaults to -1 but in cupy (and numpy) axis is a required arg
|
128
|
+
def take_along_axis(x: Array, indices: Array, /, *, axis: int = -1):
|
129
|
+
return cp.take_along_axis(x, indices, axis=axis)
|
130
|
+
|
112
131
|
|
113
132
|
# These functions are completely new here. If the library already has them
|
114
133
|
# (i.e., numpy 2.0), use the library version instead of our wrapper.
|
@@ -127,10 +146,11 @@ if hasattr(cp, 'unstack'):
|
|
127
146
|
else:
|
128
147
|
unstack = get_xp(cp)(_aliases.unstack)
|
129
148
|
|
130
|
-
__all__ = _aliases.__all__ + ['__array_namespace_info__', 'asarray', '
|
149
|
+
__all__ = _aliases.__all__ + ['__array_namespace_info__', 'asarray', 'astype',
|
131
150
|
'acos', 'acosh', 'asin', 'asinh', 'atan',
|
132
151
|
'atan2', 'atanh', 'bitwise_left_shift',
|
133
152
|
'bitwise_invert', 'bitwise_right_shift',
|
134
|
-
'concat', 'pow', 'sign'
|
153
|
+
'bool', 'concat', 'count_nonzero', 'pow', 'sign',
|
154
|
+
'take_along_axis']
|
135
155
|
|
136
156
|
_all_ignore = ['cp', 'get_xp']
|
@@ -26,6 +26,7 @@ from cupy import (
|
|
26
26
|
complex128,
|
27
27
|
)
|
28
28
|
|
29
|
+
|
29
30
|
class __array_namespace_info__:
|
30
31
|
"""
|
31
32
|
Get the array API inspection namespace for CuPy.
|
@@ -49,7 +50,7 @@ class __array_namespace_info__:
|
|
49
50
|
|
50
51
|
Examples
|
51
52
|
--------
|
52
|
-
>>> info =
|
53
|
+
>>> info = xp.__array_namespace_info__()
|
53
54
|
>>> info.default_dtypes()
|
54
55
|
{'real floating': cupy.float64,
|
55
56
|
'complex floating': cupy.complex128,
|
@@ -94,14 +95,14 @@ class __array_namespace_info__:
|
|
94
95
|
>>> info = xp.__array_namespace_info__()
|
95
96
|
>>> info.capabilities()
|
96
97
|
{'boolean indexing': True,
|
97
|
-
'data-dependent shapes': True
|
98
|
+
'data-dependent shapes': True,
|
99
|
+
'max dimensions': 64}
|
98
100
|
|
99
101
|
"""
|
100
102
|
return {
|
101
103
|
"boolean indexing": True,
|
102
104
|
"data-dependent shapes": True,
|
103
|
-
|
104
|
-
# "max rank": 64,
|
105
|
+
"max dimensions": 64,
|
105
106
|
}
|
106
107
|
|
107
108
|
def default_device(self):
|
@@ -117,7 +118,7 @@ class __array_namespace_info__:
|
|
117
118
|
|
118
119
|
Returns
|
119
120
|
-------
|
120
|
-
device :
|
121
|
+
device : Device
|
121
122
|
The default device used for new CuPy arrays.
|
122
123
|
|
123
124
|
Examples
|
@@ -126,6 +127,15 @@ class __array_namespace_info__:
|
|
126
127
|
>>> info.default_device()
|
127
128
|
Device(0)
|
128
129
|
|
130
|
+
Notes
|
131
|
+
-----
|
132
|
+
This method returns the static default device when CuPy is initialized.
|
133
|
+
However, the *current* device used by creation functions (``empty`` etc.)
|
134
|
+
can be changed globally or with a context manager.
|
135
|
+
|
136
|
+
See Also
|
137
|
+
--------
|
138
|
+
https://github.com/data-apis/array-api/issues/835
|
129
139
|
"""
|
130
140
|
return cuda.Device(0)
|
131
141
|
|
@@ -312,7 +322,7 @@ class __array_namespace_info__:
|
|
312
322
|
|
313
323
|
Returns
|
314
324
|
-------
|
315
|
-
devices : list
|
325
|
+
devices : list[Device]
|
316
326
|
The devices supported by CuPy.
|
317
327
|
|
318
328
|
See Also
|