scipy 1.15.3__cp312-cp312-macosx_12_0_arm64.whl → 1.16.0rc2__cp312-cp312-macosx_12_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- scipy/.dylibs/libscipy_openblas.dylib +0 -0
- scipy/__config__.py +8 -8
- scipy/__init__.py +3 -6
- scipy/_cyutility.cpython-312-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-312-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-312-darwin.so +0 -0
- scipy/_lib/_test_deprecation_def.cpython-312-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-312-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-312-darwin.so +0 -0
- scipy/cluster/_optimal_leaf_ordering.cpython-312-darwin.so +0 -0
- scipy/cluster/_vq.cpython-312-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-312-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-312-darwin.so +0 -0
- scipy/integrate/_lsoda.cpython-312-darwin.so +0 -0
- scipy/integrate/_ode.py +9 -2
- scipy/integrate/_odepack.cpython-312-darwin.so +0 -0
- scipy/integrate/_quad_vec.py +21 -29
- scipy/integrate/_quadpack.cpython-312-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-312-darwin.so +0 -0
- scipy/integrate/_vode.cpython-312-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-312-darwin.so +0 -0
- scipy/interpolate/_dierckx.cpython-312-darwin.so +0 -0
- scipy/interpolate/_fitpack.cpython-312-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-312-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-312-darwin.so +0 -0
- scipy/interpolate/_rbf.py +2 -2
- scipy/interpolate/_rbfinterp.py +1 -1
- scipy/interpolate/_rbfinterp_pythran.cpython-312-darwin.so +0 -0
- scipy/interpolate/_rgi.py +31 -26
- scipy/interpolate/_rgi_cython.cpython-312-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-312-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-312-darwin.so +0 -0
- scipy/io/matlab/_mio_utils.cpython-312-darwin.so +0 -0
- scipy/io/matlab/_miobase.py +4 -1
- scipy/io/matlab/_streams.cpython-312-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-312-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-312-darwin.so +0 -0
- scipy/linalg/_decomp_ldl.py +4 -1
- scipy/linalg/_decomp_lu.py +18 -6
- scipy/linalg/_decomp_lu_cython.cpython-312-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-312-darwin.so +0 -0
- scipy/linalg/_expm_frechet.py +4 -0
- scipy/linalg/_fblas.cpython-312-darwin.so +0 -0
- scipy/linalg/_flapack.cpython-312-darwin.so +0 -0
- scipy/linalg/_linalg_pythran.cpython-312-darwin.so +0 -0
- scipy/linalg/_matfuncs.py +187 -4
- scipy/linalg/_matfuncs_expm.cpython-312-darwin.so +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cpython-312-darwin.so +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +1 -99
- scipy/linalg/_matfuncs_sqrtm_triu.cpython-312-darwin.so +0 -0
- scipy/linalg/_procrustes.py +2 -0
- scipy/linalg/_sketches.py +17 -6
- scipy/linalg/_solve_toeplitz.cpython-312-darwin.so +0 -0
- scipy/linalg/_solvers.py +7 -2
- scipy/linalg/_special_matrices.py +26 -36
- scipy/linalg/cython_blas.cpython-312-darwin.so +0 -0
- scipy/linalg/cython_lapack.cpython-312-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-312-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-312-darwin.so +0 -0
- scipy/ndimage/_ni_docstrings.py +5 -1
- scipy/ndimage/_ni_label.cpython-312-darwin.so +0 -0
- scipy/ndimage/_ni_support.py +1 -5
- scipy/ndimage/_rank_filter_1d.cpython-312-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-312-darwin.so +0 -0
- scipy/optimize/_basinhopping.py +13 -7
- scipy/optimize/_bglu_dense.cpython-312-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-312-darwin.so +0 -0
- scipy/optimize/_dual_annealing.py +1 -1
- scipy/optimize/_elementwise.py +1 -4
- scipy/optimize/_group_columns.cpython-312-darwin.so +0 -0
- scipy/optimize/_lbfgsb.cpython-312-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-312-darwin.so +0 -0
- scipy/optimize/_lsq/common.py +3 -3
- scipy/optimize/_lsq/dogbox.py +16 -2
- scipy/optimize/_lsq/givens_elimination.cpython-312-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-312-darwin.so +0 -0
- scipy/optimize/_minpack_py.py +21 -14
- scipy/optimize/_moduleTNC.cpython-312-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-312-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-312-darwin.so +0 -0
- scipy/optimize/_spectral.py +1 -1
- scipy/optimize/_tnc.py +8 -1
- scipy/optimize/_trlib/_trlib.cpython-312-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-312-darwin.so +0 -0
- scipy/optimize/_zeros_py.py +97 -17
- scipy/optimize/cython_optimize/_zeros.cpython-312-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-312-darwin.so +0 -0
- scipy/signal/_peak_finding_utils.cpython-312-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-312-darwin.so +0 -0
- scipy/signal/_sosfilt.cpython-312-darwin.so +0 -0
- scipy/signal/_spectral_py.py +230 -50
- scipy/signal/_spline.cpython-312-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-312-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-312-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-312-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-312-darwin.so +0 -0
- scipy/sparse/csgraph/_matching.cpython-312-darwin.so +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cpython-312-darwin.so +0 -0
- scipy/sparse/csgraph/_reordering.cpython-312-darwin.so +0 -0
- scipy/sparse/csgraph/_shortest_path.cpython-312-darwin.so +0 -0
- scipy/sparse/csgraph/_tools.cpython-312-darwin.so +0 -0
- scipy/sparse/csgraph/_traversal.cpython-312-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-312-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-312-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-312-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cpython-312-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_spropack.cpython-312-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cpython-312-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-312-darwin.so +0 -0
- scipy/spatial/_distance_pybind.cpython-312-darwin.so +0 -0
- scipy/spatial/_distance_wrap.cpython-312-darwin.so +0 -0
- scipy/spatial/_hausdorff.cpython-312-darwin.so +0 -0
- scipy/spatial/_qhull.cpython-312-darwin.so +0 -0
- scipy/spatial/_voronoi.cpython-312-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-312-darwin.so +0 -0
- scipy/spatial/transform/_rotation.cpython-312-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-312-darwin.so +0 -0
- scipy/special/_ellip_harm_2.cpython-312-darwin.so +0 -0
- scipy/special/_gufuncs.cpython-312-darwin.so +0 -0
- scipy/special/_logsumexp.py +67 -58
- scipy/special/_orthogonal.pyi +1 -1
- scipy/special/_specfun.cpython-312-darwin.so +0 -0
- scipy/special/_special_ufuncs.cpython-312-darwin.so +0 -0
- scipy/special/_spherical_bessel.py +4 -4
- scipy/special/_support_alternative_backends.py +212 -119
- scipy/special/_test_internal.cpython-312-darwin.so +0 -0
- scipy/special/_testutils.py +4 -4
- scipy/special/_ufuncs.cpython-312-darwin.so +0 -0
- scipy/special/_ufuncs.pyi +1 -0
- scipy/special/_ufuncs.pyx +215 -1400
- scipy/special/_ufuncs_cxx.cpython-312-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-312-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-312-darwin.so +0 -0
- scipy/stats/_axis_nan_policy.py +5 -12
- scipy/stats/_biasedurn.cpython-312-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-312-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-312-darwin.so +0 -0
- scipy/stats/_qmvnt.py +16 -95
- scipy/stats/_qmvnt_cy.cpython-312-darwin.so +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/rcont.cpython-312-darwin.so +0 -0
- scipy/stats/_resampling.py +4 -29
- scipy/stats/_sampling.py +1 -1
- scipy/stats/_sobol.cpython-312-darwin.so +0 -0
- scipy/stats/_stats.cpython-312-darwin.so +0 -0
- scipy/stats/_stats_mstats_common.py +21 -2
- scipy/stats/_stats_py.py +550 -476
- scipy/stats/_stats_pythran.cpython-312-darwin.so +0 -0
- scipy/stats/_unuran/unuran_wrapper.cpython-312-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 +561 -568
- 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-312-darwin.so +0 -0
- scipy/optimize/_cobyla.cpython-312-darwin.so +0 -0
- scipy/optimize/_cython_nnls.cpython-312-darwin.so +0 -0
- scipy/optimize/_slsqp.cpython-312-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-312-darwin.so +0 -0
- scipy-1.15.3.dist-info/WHEEL +0 -4
@@ -7,25 +7,51 @@ https://data-apis.org/array-api/latest/API_specification/inspection.html for
|
|
7
7
|
more details.
|
8
8
|
|
9
9
|
"""
|
10
|
+
|
11
|
+
# pyright: reportPrivateUsage=false
|
12
|
+
|
13
|
+
from __future__ import annotations
|
14
|
+
|
15
|
+
from typing import Literal as L
|
16
|
+
from typing import TypeAlias, overload
|
17
|
+
|
18
|
+
from numpy import bool_ as bool
|
10
19
|
from numpy import (
|
20
|
+
complex64,
|
21
|
+
complex128,
|
11
22
|
dtype,
|
12
|
-
|
13
|
-
|
23
|
+
float32,
|
24
|
+
float64,
|
14
25
|
int8,
|
15
26
|
int16,
|
16
27
|
int32,
|
17
28
|
int64,
|
29
|
+
intp,
|
18
30
|
uint8,
|
19
31
|
uint16,
|
20
32
|
uint32,
|
21
33
|
uint64,
|
22
|
-
float32,
|
23
|
-
float64,
|
24
|
-
complex64,
|
25
|
-
complex128,
|
26
34
|
)
|
27
35
|
|
28
|
-
from ...common._helpers import _DASK_DEVICE
|
36
|
+
from ...common._helpers import _DASK_DEVICE, _dask_device
|
37
|
+
from ...common._typing import (
|
38
|
+
Capabilities,
|
39
|
+
DefaultDTypes,
|
40
|
+
DType,
|
41
|
+
DTypeKind,
|
42
|
+
DTypesAll,
|
43
|
+
DTypesAny,
|
44
|
+
DTypesBool,
|
45
|
+
DTypesComplex,
|
46
|
+
DTypesIntegral,
|
47
|
+
DTypesNumeric,
|
48
|
+
DTypesReal,
|
49
|
+
DTypesSigned,
|
50
|
+
DTypesUnsigned,
|
51
|
+
)
|
52
|
+
|
53
|
+
_Device: TypeAlias = L["cpu"] | _dask_device
|
54
|
+
|
29
55
|
|
30
56
|
class __array_namespace_info__:
|
31
57
|
"""
|
@@ -50,7 +76,7 @@ class __array_namespace_info__:
|
|
50
76
|
|
51
77
|
Examples
|
52
78
|
--------
|
53
|
-
>>> info =
|
79
|
+
>>> info = xp.__array_namespace_info__()
|
54
80
|
>>> info.default_dtypes()
|
55
81
|
{'real floating': dask.float64,
|
56
82
|
'complex floating': dask.complex128,
|
@@ -59,20 +85,31 @@ class __array_namespace_info__:
|
|
59
85
|
|
60
86
|
"""
|
61
87
|
|
62
|
-
__module__ =
|
88
|
+
__module__ = "dask.array"
|
63
89
|
|
64
|
-
def capabilities(self):
|
90
|
+
def capabilities(self) -> Capabilities:
|
65
91
|
"""
|
66
92
|
Return a dictionary of array API library capabilities.
|
67
93
|
|
68
94
|
The resulting dictionary has the following keys:
|
69
95
|
|
70
96
|
- **"boolean indexing"**: boolean indicating whether an array library
|
71
|
-
supports boolean indexing.
|
97
|
+
supports boolean indexing.
|
98
|
+
|
99
|
+
Dask support boolean indexing as long as both the index
|
100
|
+
and the indexed arrays have known shapes.
|
101
|
+
Note however that the output .shape and .size properties
|
102
|
+
will contain a non-compliant math.nan instead of None.
|
72
103
|
|
73
104
|
- **"data-dependent shapes"**: boolean indicating whether an array
|
74
|
-
library supports data-dependent output shapes.
|
75
|
-
|
105
|
+
library supports data-dependent output shapes.
|
106
|
+
|
107
|
+
Dask implements unique_values et.al.
|
108
|
+
Note however that the output .shape and .size properties
|
109
|
+
will contain a non-compliant math.nan instead of None.
|
110
|
+
|
111
|
+
- **"max dimensions"**: integer indicating the maximum number of
|
112
|
+
dimensions supported by the array library.
|
76
113
|
|
77
114
|
See
|
78
115
|
https://data-apis.org/array-api/latest/API_specification/generated/array_api.info.capabilities.html
|
@@ -92,20 +129,20 @@ class __array_namespace_info__:
|
|
92
129
|
|
93
130
|
Examples
|
94
131
|
--------
|
95
|
-
>>> info =
|
132
|
+
>>> info = xp.__array_namespace_info__()
|
96
133
|
>>> info.capabilities()
|
97
134
|
{'boolean indexing': True,
|
98
|
-
'data-dependent shapes': True
|
135
|
+
'data-dependent shapes': True,
|
136
|
+
'max dimensions': 64}
|
99
137
|
|
100
138
|
"""
|
101
139
|
return {
|
102
|
-
"boolean indexing":
|
103
|
-
"data-dependent shapes":
|
104
|
-
|
105
|
-
# "max rank": 64,
|
140
|
+
"boolean indexing": True,
|
141
|
+
"data-dependent shapes": True,
|
142
|
+
"max dimensions": 64,
|
106
143
|
}
|
107
144
|
|
108
|
-
def default_device(self):
|
145
|
+
def default_device(self) -> L["cpu"]:
|
109
146
|
"""
|
110
147
|
The default device used for new Dask arrays.
|
111
148
|
|
@@ -120,19 +157,19 @@ class __array_namespace_info__:
|
|
120
157
|
|
121
158
|
Returns
|
122
159
|
-------
|
123
|
-
device :
|
160
|
+
device : Device
|
124
161
|
The default device used for new Dask arrays.
|
125
162
|
|
126
163
|
Examples
|
127
164
|
--------
|
128
|
-
>>> info =
|
165
|
+
>>> info = xp.__array_namespace_info__()
|
129
166
|
>>> info.default_device()
|
130
167
|
'cpu'
|
131
168
|
|
132
169
|
"""
|
133
170
|
return "cpu"
|
134
171
|
|
135
|
-
def default_dtypes(self, *, device=None):
|
172
|
+
def default_dtypes(self, /, *, device: _Device | None = None) -> DefaultDTypes:
|
136
173
|
"""
|
137
174
|
The default data types used for new Dask arrays.
|
138
175
|
|
@@ -163,7 +200,7 @@ class __array_namespace_info__:
|
|
163
200
|
|
164
201
|
Examples
|
165
202
|
--------
|
166
|
-
>>> info =
|
203
|
+
>>> info = xp.__array_namespace_info__()
|
167
204
|
>>> info.default_dtypes()
|
168
205
|
{'real floating': dask.float64,
|
169
206
|
'complex floating': dask.complex128,
|
@@ -173,8 +210,8 @@ class __array_namespace_info__:
|
|
173
210
|
"""
|
174
211
|
if device not in ["cpu", _DASK_DEVICE, None]:
|
175
212
|
raise ValueError(
|
176
|
-
'Device not understood. Only "cpu" or _DASK_DEVICE is allowed,
|
177
|
-
f
|
213
|
+
f'Device not understood. Only "cpu" or _DASK_DEVICE is allowed, '
|
214
|
+
f"but received: {device!r}"
|
178
215
|
)
|
179
216
|
return {
|
180
217
|
"real floating": dtype(float64),
|
@@ -183,7 +220,41 @@ class __array_namespace_info__:
|
|
183
220
|
"indexing": dtype(intp),
|
184
221
|
}
|
185
222
|
|
186
|
-
|
223
|
+
@overload
|
224
|
+
def dtypes(
|
225
|
+
self, /, *, device: _Device | None = None, kind: None = None
|
226
|
+
) -> DTypesAll: ...
|
227
|
+
@overload
|
228
|
+
def dtypes(
|
229
|
+
self, /, *, device: _Device | None = None, kind: L["bool"]
|
230
|
+
) -> DTypesBool: ...
|
231
|
+
@overload
|
232
|
+
def dtypes(
|
233
|
+
self, /, *, device: _Device | None = None, kind: L["signed integer"]
|
234
|
+
) -> DTypesSigned: ...
|
235
|
+
@overload
|
236
|
+
def dtypes(
|
237
|
+
self, /, *, device: _Device | None = None, kind: L["unsigned integer"]
|
238
|
+
) -> DTypesUnsigned: ...
|
239
|
+
@overload
|
240
|
+
def dtypes(
|
241
|
+
self, /, *, device: _Device | None = None, kind: L["integral"]
|
242
|
+
) -> DTypesIntegral: ...
|
243
|
+
@overload
|
244
|
+
def dtypes(
|
245
|
+
self, /, *, device: _Device | None = None, kind: L["real floating"]
|
246
|
+
) -> DTypesReal: ...
|
247
|
+
@overload
|
248
|
+
def dtypes(
|
249
|
+
self, /, *, device: _Device | None = None, kind: L["complex floating"]
|
250
|
+
) -> DTypesComplex: ...
|
251
|
+
@overload
|
252
|
+
def dtypes(
|
253
|
+
self, /, *, device: _Device | None = None, kind: L["numeric"]
|
254
|
+
) -> DTypesNumeric: ...
|
255
|
+
def dtypes(
|
256
|
+
self, /, *, device: _Device | None = None, kind: DTypeKind | None = None
|
257
|
+
) -> DTypesAny:
|
187
258
|
"""
|
188
259
|
The array API data types supported by Dask.
|
189
260
|
|
@@ -229,7 +300,7 @@ class __array_namespace_info__:
|
|
229
300
|
|
230
301
|
Examples
|
231
302
|
--------
|
232
|
-
>>> info =
|
303
|
+
>>> info = xp.__array_namespace_info__()
|
233
304
|
>>> info.dtypes(kind='signed integer')
|
234
305
|
{'int8': dask.int8,
|
235
306
|
'int16': dask.int16,
|
@@ -240,7 +311,7 @@ class __array_namespace_info__:
|
|
240
311
|
if device not in ["cpu", _DASK_DEVICE, None]:
|
241
312
|
raise ValueError(
|
242
313
|
'Device not understood. Only "cpu" or _DASK_DEVICE is allowed, but received:'
|
243
|
-
f
|
314
|
+
f" {device}"
|
244
315
|
)
|
245
316
|
if kind is None:
|
246
317
|
return {
|
@@ -310,14 +381,14 @@ class __array_namespace_info__:
|
|
310
381
|
"complex64": dtype(complex64),
|
311
382
|
"complex128": dtype(complex128),
|
312
383
|
}
|
313
|
-
if isinstance(kind, tuple):
|
314
|
-
res = {}
|
384
|
+
if isinstance(kind, tuple): # type: ignore[reportUnnecessaryIsinstanceCall]
|
385
|
+
res: dict[str, DType] = {}
|
315
386
|
for k in kind:
|
316
387
|
res.update(self.dtypes(kind=k))
|
317
388
|
return res
|
318
389
|
raise ValueError(f"unsupported kind: {kind!r}")
|
319
390
|
|
320
|
-
def devices(self):
|
391
|
+
def devices(self) -> list[_Device]:
|
321
392
|
"""
|
322
393
|
The devices supported by Dask.
|
323
394
|
|
@@ -325,7 +396,7 @@ class __array_namespace_info__:
|
|
325
396
|
|
326
397
|
Returns
|
327
398
|
-------
|
328
|
-
devices : list
|
399
|
+
devices : list[Device]
|
329
400
|
The devices supported by Dask.
|
330
401
|
|
331
402
|
See Also
|
@@ -337,7 +408,7 @@ class __array_namespace_info__:
|
|
337
408
|
|
338
409
|
Examples
|
339
410
|
--------
|
340
|
-
>>> info =
|
411
|
+
>>> info = xp.__array_namespace_info__()
|
341
412
|
>>> info.devices()
|
342
413
|
['cpu', DASK_DEVICE]
|
343
414
|
|
@@ -4,9 +4,10 @@ from dask.array.fft import * # noqa: F403
|
|
4
4
|
# from dask.array.fft import __all__ as linalg_all
|
5
5
|
_n = {}
|
6
6
|
exec('from dask.array.fft import *', _n)
|
7
|
-
|
7
|
+
for k in ("__builtins__", "Sequence", "annotations", "warnings"):
|
8
|
+
_n.pop(k, None)
|
8
9
|
fft_all = list(_n)
|
9
|
-
del _n
|
10
|
+
del _n, k
|
10
11
|
|
11
12
|
from ...common import _fft
|
12
13
|
from ..._internal import get_xp
|
@@ -16,9 +17,5 @@ import dask.array as da
|
|
16
17
|
fftfreq = get_xp(da)(_fft.fftfreq)
|
17
18
|
rfftfreq = get_xp(da)(_fft.rfftfreq)
|
18
19
|
|
19
|
-
__all__ =
|
20
|
-
|
21
|
-
del get_xp
|
22
|
-
del da
|
23
|
-
del fft_all
|
24
|
-
del _fft
|
20
|
+
__all__ = fft_all + ["fftfreq", "rfftfreq"]
|
21
|
+
_all_ignore = ["da", "fft_all", "get_xp", "warnings"]
|
@@ -1,33 +1,29 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
-
from
|
4
|
-
from ..._internal import get_xp
|
3
|
+
from typing import Literal
|
5
4
|
|
6
|
-
|
7
|
-
from dask.array.linalg import * # noqa: F403
|
8
|
-
from dask.array import outer
|
5
|
+
import dask.array as da
|
9
6
|
|
10
|
-
#
|
11
|
-
from dask.array import matmul, tensordot
|
12
|
-
from ._aliases import matrix_transpose, vecdot
|
7
|
+
# The `matmul` and `tensordot` functions are in both the main and linalg namespaces
|
8
|
+
from dask.array import matmul, outer, tensordot
|
13
9
|
|
14
|
-
|
10
|
+
# Exports
|
11
|
+
from dask.array.linalg import * # noqa: F403
|
15
12
|
|
16
|
-
from
|
17
|
-
|
18
|
-
|
19
|
-
|
13
|
+
from ..._internal import get_xp
|
14
|
+
from ...common import _linalg
|
15
|
+
from ...common._typing import Array as _Array
|
16
|
+
from ._aliases import matrix_transpose, vecdot
|
20
17
|
|
21
18
|
# dask.array.linalg doesn't have __all__. If it is added, replace this with
|
22
19
|
#
|
23
20
|
# from dask.array.linalg import __all__ as linalg_all
|
24
21
|
_n = {}
|
25
22
|
exec('from dask.array.linalg import *', _n)
|
26
|
-
|
27
|
-
|
28
|
-
del _n['annotations']
|
23
|
+
for k in ('__builtins__', 'annotations', 'operator', 'warnings', 'Array'):
|
24
|
+
_n.pop(k, None)
|
29
25
|
linalg_all = list(_n)
|
30
|
-
del _n
|
26
|
+
del _n, k
|
31
27
|
|
32
28
|
EighResult = _linalg.EighResult
|
33
29
|
QRResult = _linalg.QRResult
|
@@ -37,8 +33,11 @@ SVDResult = _linalg.SVDResult
|
|
37
33
|
# supports the mode keyword on QR
|
38
34
|
# https://github.com/dask/dask/issues/10388
|
39
35
|
#qr = get_xp(da)(_linalg.qr)
|
40
|
-
def qr(
|
41
|
-
|
36
|
+
def qr(
|
37
|
+
x: _Array,
|
38
|
+
mode: Literal["reduced", "complete"] = "reduced",
|
39
|
+
**kwargs: object,
|
40
|
+
) -> QRResult:
|
42
41
|
if mode != "reduced":
|
43
42
|
raise ValueError("dask arrays only support using mode='reduced'")
|
44
43
|
return QRResult(*da.linalg.qr(x, **kwargs))
|
@@ -51,12 +50,12 @@ matrix_norm = get_xp(da)(_linalg.matrix_norm)
|
|
51
50
|
# Wrap the svd functions to not pass full_matrices to dask
|
52
51
|
# when full_matrices=False (as that is the default behavior for dask),
|
53
52
|
# and dask doesn't have the full_matrices keyword
|
54
|
-
def svd(x:
|
53
|
+
def svd(x: _Array, full_matrices: bool = True, **kwargs) -> SVDResult:
|
55
54
|
if full_matrices:
|
56
55
|
raise ValueError("full_matrics=True is not supported by dask.")
|
57
56
|
return da.linalg.svd(x, coerce_signs=False, **kwargs)
|
58
57
|
|
59
|
-
def svdvals(x:
|
58
|
+
def svdvals(x: _Array) -> _Array:
|
60
59
|
# TODO: can't avoid computing U or V for dask
|
61
60
|
_, s, _ = svd(x)
|
62
61
|
return s
|
@@ -70,4 +69,4 @@ __all__ = linalg_all + ["trace", "outer", "matmul", "tensordot",
|
|
70
69
|
"cholesky", "matrix_rank", "matrix_norm", "svdvals",
|
71
70
|
"vector_norm", "diagonal"]
|
72
71
|
|
73
|
-
_all_ignore = ['get_xp', 'da', 'linalg_all']
|
72
|
+
_all_ignore = ['get_xp', 'da', 'linalg_all', 'warnings']
|
@@ -1,10 +1,16 @@
|
|
1
|
-
|
1
|
+
# ruff: noqa: PLC0414
|
2
|
+
from typing import Final
|
3
|
+
|
4
|
+
from numpy import * # noqa: F403 # pyright: ignore[reportWildcardImportFromLibrary]
|
2
5
|
|
3
6
|
# from numpy import * doesn't overwrite these builtin names
|
4
|
-
from numpy import abs
|
7
|
+
from numpy import abs as abs
|
8
|
+
from numpy import max as max
|
9
|
+
from numpy import min as min
|
10
|
+
from numpy import round as round
|
5
11
|
|
6
12
|
# These imports may overwrite names from the import * above.
|
7
|
-
from ._aliases import *
|
13
|
+
from ._aliases import * # noqa: F403
|
8
14
|
|
9
15
|
# Don't know why, but we have to do an absolute import to import linalg. If we
|
10
16
|
# instead do
|
@@ -13,18 +19,10 @@ from ._aliases import * # noqa: F403
|
|
13
19
|
#
|
14
20
|
# It doesn't overwrite np.linalg from above. The import is generated
|
15
21
|
# dynamically so that the library can be vendored.
|
16
|
-
__import__(__package__ +
|
17
|
-
|
18
|
-
__import__(__package__ + '.fft')
|
19
|
-
|
20
|
-
from .linalg import matrix_transpose, vecdot # noqa: F401
|
22
|
+
__import__(__package__ + ".linalg")
|
21
23
|
|
22
|
-
|
24
|
+
__import__(__package__ + ".fft")
|
23
25
|
|
24
|
-
|
25
|
-
# Used in asarray(). Not present in older versions.
|
26
|
-
from numpy import _CopyMode # noqa: F401
|
27
|
-
except ImportError:
|
28
|
-
pass
|
26
|
+
from .linalg import matrix_transpose, vecdot # type: ignore[no-redef] # noqa: F401
|
29
27
|
|
30
|
-
__array_api_version__ =
|
28
|
+
__array_api_version__: Final = "2024.12"
|
@@ -1,17 +1,24 @@
|
|
1
|
+
# pyright: reportPrivateUsage=false
|
1
2
|
from __future__ import annotations
|
2
3
|
|
3
|
-
from
|
4
|
+
from builtins import bool as py_bool
|
5
|
+
from typing import TYPE_CHECKING, Any, Literal, TypeAlias, cast
|
4
6
|
|
5
|
-
|
7
|
+
import numpy as np
|
6
8
|
|
9
|
+
from .._internal import get_xp
|
10
|
+
from ..common import _aliases, _helpers
|
11
|
+
from ..common._typing import NestedSequence, SupportsBufferProtocol
|
7
12
|
from ._info import __array_namespace_info__
|
13
|
+
from ._typing import Array, Device, DType
|
8
14
|
|
9
|
-
from typing import TYPE_CHECKING
|
10
15
|
if TYPE_CHECKING:
|
11
|
-
from
|
12
|
-
|
16
|
+
from typing_extensions import Buffer, TypeIs
|
17
|
+
|
18
|
+
# The values of the `_CopyMode` enum can be either `False`, `True`, or `2`:
|
19
|
+
# https://github.com/numpy/numpy/blob/5a8a6a79d9c2fff8f07dcab5d41e14f8508d673f/numpy/_globals.pyi#L7-L10
|
20
|
+
_Copy: TypeAlias = py_bool | Literal[2] | np._CopyMode
|
13
21
|
|
14
|
-
import numpy as np
|
15
22
|
bool = np.bool_
|
16
23
|
|
17
24
|
# Basic renames
|
@@ -46,10 +53,10 @@ unique_all = get_xp(np)(_aliases.unique_all)
|
|
46
53
|
unique_counts = get_xp(np)(_aliases.unique_counts)
|
47
54
|
unique_inverse = get_xp(np)(_aliases.unique_inverse)
|
48
55
|
unique_values = get_xp(np)(_aliases.unique_values)
|
49
|
-
astype = _aliases.astype
|
50
56
|
std = get_xp(np)(_aliases.std)
|
51
57
|
var = get_xp(np)(_aliases.var)
|
52
58
|
cumulative_sum = get_xp(np)(_aliases.cumulative_sum)
|
59
|
+
cumulative_prod = get_xp(np)(_aliases.cumulative_prod)
|
53
60
|
clip = get_xp(np)(_aliases.clip)
|
54
61
|
permute_dims = get_xp(np)(_aliases.permute_dims)
|
55
62
|
reshape = get_xp(np)(_aliases.reshape)
|
@@ -63,79 +70,121 @@ matmul = get_xp(np)(_aliases.matmul)
|
|
63
70
|
matrix_transpose = get_xp(np)(_aliases.matrix_transpose)
|
64
71
|
tensordot = get_xp(np)(_aliases.tensordot)
|
65
72
|
sign = get_xp(np)(_aliases.sign)
|
73
|
+
finfo = get_xp(np)(_aliases.finfo)
|
74
|
+
iinfo = get_xp(np)(_aliases.iinfo)
|
66
75
|
|
67
|
-
|
76
|
+
|
77
|
+
def _supports_buffer_protocol(obj: object) -> TypeIs[Buffer]: # pyright: ignore[reportUnusedFunction]
|
68
78
|
try:
|
69
|
-
memoryview(obj)
|
79
|
+
memoryview(obj) # pyright: ignore[reportArgumentType]
|
70
80
|
except TypeError:
|
71
81
|
return False
|
72
82
|
return True
|
73
83
|
|
84
|
+
|
74
85
|
# asarray also adds the copy keyword, which is not present in numpy 1.0.
|
75
86
|
# asarray() is different enough between numpy, cupy, and dask, the logic
|
76
87
|
# complicated enough that it's easier to define it separately for each module
|
77
88
|
# rather than trying to combine everything into one function in common/
|
78
89
|
def asarray(
|
79
|
-
obj:
|
80
|
-
ndarray,
|
81
|
-
bool,
|
82
|
-
int,
|
83
|
-
float,
|
84
|
-
NestedSequence[bool | int | float],
|
85
|
-
SupportsBufferProtocol,
|
86
|
-
],
|
90
|
+
obj: Array | complex | NestedSequence[complex] | SupportsBufferProtocol,
|
87
91
|
/,
|
88
92
|
*,
|
89
|
-
dtype:
|
90
|
-
device:
|
91
|
-
copy:
|
92
|
-
**kwargs,
|
93
|
-
) ->
|
93
|
+
dtype: DType | None = None,
|
94
|
+
device: Device | None = None,
|
95
|
+
copy: _Copy | None = None,
|
96
|
+
**kwargs: Any,
|
97
|
+
) -> Array:
|
94
98
|
"""
|
95
99
|
Array API compatibility wrapper for asarray().
|
96
100
|
|
97
101
|
See the corresponding documentation in the array library and/or the array API
|
98
102
|
specification for more details.
|
99
103
|
"""
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
104
|
+
_helpers._check_device(np, device)
|
105
|
+
|
106
|
+
if copy is None:
|
107
|
+
copy = np._CopyMode.IF_NEEDED
|
108
|
+
elif copy is False:
|
109
|
+
copy = np._CopyMode.NEVER
|
110
|
+
elif copy is True:
|
111
|
+
copy = np._CopyMode.ALWAYS
|
112
|
+
|
113
|
+
return np.array(obj, copy=copy, dtype=dtype, **kwargs) # pyright: ignore
|
114
|
+
|
115
|
+
|
116
|
+
def astype(
|
117
|
+
x: Array,
|
118
|
+
dtype: DType,
|
119
|
+
/,
|
120
|
+
*,
|
121
|
+
copy: py_bool = True,
|
122
|
+
device: Device | None = None,
|
123
|
+
) -> Array:
|
124
|
+
_helpers._check_device(np, device)
|
125
|
+
return x.astype(dtype=dtype, copy=copy)
|
126
|
+
|
127
|
+
|
128
|
+
# count_nonzero returns a python int for axis=None and keepdims=False
|
129
|
+
# https://github.com/numpy/numpy/issues/17562
|
130
|
+
def count_nonzero(
|
131
|
+
x: Array,
|
132
|
+
axis: int | tuple[int, ...] | None = None,
|
133
|
+
keepdims: py_bool = False,
|
134
|
+
) -> Array:
|
135
|
+
# NOTE: this is currently incorrectly typed in numpy, but will be fixed in
|
136
|
+
# numpy 2.2.5 and 2.3.0: https://github.com/numpy/numpy/pull/28750
|
137
|
+
result = cast("Any", np.count_nonzero(x, axis=axis, keepdims=keepdims)) # pyright: ignore[reportArgumentType, reportCallIssue]
|
138
|
+
if axis is None and not keepdims:
|
139
|
+
return np.asarray(result)
|
140
|
+
return result
|
141
|
+
|
142
|
+
|
143
|
+
# take_along_axis: axis defaults to -1 but in numpy axis is a required arg
|
144
|
+
def take_along_axis(x: Array, indices: Array, /, *, axis: int = -1):
|
145
|
+
return np.take_along_axis(x, indices, axis=axis)
|
146
|
+
|
117
147
|
|
118
148
|
# These functions are completely new here. If the library already has them
|
119
149
|
# (i.e., numpy 2.0), use the library version instead of our wrapper.
|
120
|
-
if hasattr(np,
|
150
|
+
if hasattr(np, "vecdot"):
|
121
151
|
vecdot = np.vecdot
|
122
152
|
else:
|
123
153
|
vecdot = get_xp(np)(_aliases.vecdot)
|
124
154
|
|
125
|
-
if hasattr(np,
|
155
|
+
if hasattr(np, "isdtype"):
|
126
156
|
isdtype = np.isdtype
|
127
157
|
else:
|
128
158
|
isdtype = get_xp(np)(_aliases.isdtype)
|
129
159
|
|
130
|
-
if hasattr(np,
|
160
|
+
if hasattr(np, "unstack"):
|
131
161
|
unstack = np.unstack
|
132
162
|
else:
|
133
163
|
unstack = get_xp(np)(_aliases.unstack)
|
134
164
|
|
135
|
-
__all__ =
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
165
|
+
__all__ = [
|
166
|
+
"__array_namespace_info__",
|
167
|
+
"asarray",
|
168
|
+
"astype",
|
169
|
+
"acos",
|
170
|
+
"acosh",
|
171
|
+
"asin",
|
172
|
+
"asinh",
|
173
|
+
"atan",
|
174
|
+
"atan2",
|
175
|
+
"atanh",
|
176
|
+
"bitwise_left_shift",
|
177
|
+
"bitwise_invert",
|
178
|
+
"bitwise_right_shift",
|
179
|
+
"bool",
|
180
|
+
"concat",
|
181
|
+
"count_nonzero",
|
182
|
+
"pow",
|
183
|
+
"take_along_axis"
|
184
|
+
]
|
185
|
+
__all__ += _aliases.__all__
|
186
|
+
_all_ignore = ["np", "get_xp"]
|
187
|
+
|
188
|
+
|
189
|
+
def __dir__() -> list[str]:
|
190
|
+
return __all__
|