scipy 1.15.3__cp313-cp313-macosx_12_0_arm64.whl → 1.16.0rc2__cp313-cp313-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-313-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-313-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-313-darwin.so +0 -0
- scipy/_lib/_test_deprecation_def.cpython-313-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-313-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-313-darwin.so +0 -0
- scipy/cluster/_optimal_leaf_ordering.cpython-313-darwin.so +0 -0
- scipy/cluster/_vq.cpython-313-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-313-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-313-darwin.so +0 -0
- scipy/integrate/_lsoda.cpython-313-darwin.so +0 -0
- scipy/integrate/_ode.py +9 -2
- scipy/integrate/_odepack.cpython-313-darwin.so +0 -0
- scipy/integrate/_quad_vec.py +21 -29
- scipy/integrate/_quadpack.cpython-313-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-313-darwin.so +0 -0
- scipy/integrate/_vode.cpython-313-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-313-darwin.so +0 -0
- scipy/interpolate/_dierckx.cpython-313-darwin.so +0 -0
- scipy/interpolate/_fitpack.cpython-313-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-313-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-313-darwin.so +0 -0
- scipy/interpolate/_rbf.py +2 -2
- scipy/interpolate/_rbfinterp.py +1 -1
- scipy/interpolate/_rbfinterp_pythran.cpython-313-darwin.so +0 -0
- scipy/interpolate/_rgi.py +31 -26
- scipy/interpolate/_rgi_cython.cpython-313-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-313-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-313-darwin.so +0 -0
- scipy/io/matlab/_mio_utils.cpython-313-darwin.so +0 -0
- scipy/io/matlab/_miobase.py +4 -1
- scipy/io/matlab/_streams.cpython-313-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-313-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-313-darwin.so +0 -0
- scipy/linalg/_decomp_ldl.py +4 -1
- scipy/linalg/_decomp_lu.py +18 -6
- scipy/linalg/_decomp_lu_cython.cpython-313-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-313-darwin.so +0 -0
- scipy/linalg/_expm_frechet.py +4 -0
- scipy/linalg/_fblas.cpython-313-darwin.so +0 -0
- scipy/linalg/_flapack.cpython-313-darwin.so +0 -0
- scipy/linalg/_linalg_pythran.cpython-313-darwin.so +0 -0
- scipy/linalg/_matfuncs.py +187 -4
- scipy/linalg/_matfuncs_expm.cpython-313-darwin.so +0 -0
- scipy/linalg/_matfuncs_schur_sqrtm.cpython-313-darwin.so +0 -0
- scipy/linalg/_matfuncs_sqrtm.py +1 -99
- scipy/linalg/_matfuncs_sqrtm_triu.cpython-313-darwin.so +0 -0
- scipy/linalg/_procrustes.py +2 -0
- scipy/linalg/_sketches.py +17 -6
- scipy/linalg/_solve_toeplitz.cpython-313-darwin.so +0 -0
- scipy/linalg/_solvers.py +7 -2
- scipy/linalg/_special_matrices.py +26 -36
- scipy/linalg/cython_blas.cpython-313-darwin.so +0 -0
- scipy/linalg/cython_lapack.cpython-313-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-313-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-313-darwin.so +0 -0
- scipy/ndimage/_ni_docstrings.py +5 -1
- scipy/ndimage/_ni_label.cpython-313-darwin.so +0 -0
- scipy/ndimage/_ni_support.py +1 -5
- scipy/ndimage/_rank_filter_1d.cpython-313-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-313-darwin.so +0 -0
- scipy/optimize/_basinhopping.py +13 -7
- scipy/optimize/_bglu_dense.cpython-313-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-313-darwin.so +0 -0
- scipy/optimize/_dual_annealing.py +1 -1
- scipy/optimize/_elementwise.py +1 -4
- scipy/optimize/_group_columns.cpython-313-darwin.so +0 -0
- scipy/optimize/_lbfgsb.cpython-313-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-313-darwin.so +0 -0
- scipy/optimize/_lsq/common.py +3 -3
- scipy/optimize/_lsq/dogbox.py +16 -2
- scipy/optimize/_lsq/givens_elimination.cpython-313-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-313-darwin.so +0 -0
- scipy/optimize/_minpack_py.py +21 -14
- scipy/optimize/_moduleTNC.cpython-313-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-313-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-313-darwin.so +0 -0
- scipy/optimize/_spectral.py +1 -1
- scipy/optimize/_tnc.py +8 -1
- scipy/optimize/_trlib/_trlib.cpython-313-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-313-darwin.so +0 -0
- scipy/optimize/_zeros_py.py +97 -17
- scipy/optimize/cython_optimize/_zeros.cpython-313-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-313-darwin.so +0 -0
- scipy/signal/_peak_finding_utils.cpython-313-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-313-darwin.so +0 -0
- scipy/signal/_sosfilt.cpython-313-darwin.so +0 -0
- scipy/signal/_spectral_py.py +230 -50
- scipy/signal/_spline.cpython-313-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-313-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-313-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-313-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-313-darwin.so +0 -0
- scipy/sparse/csgraph/_matching.cpython-313-darwin.so +0 -0
- scipy/sparse/csgraph/_min_spanning_tree.cpython-313-darwin.so +0 -0
- scipy/sparse/csgraph/_reordering.cpython-313-darwin.so +0 -0
- scipy/sparse/csgraph/_shortest_path.cpython-313-darwin.so +0 -0
- scipy/sparse/csgraph/_tools.cpython-313-darwin.so +0 -0
- scipy/sparse/csgraph/_traversal.cpython-313-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-313-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-313-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-313-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_dpropack.cpython-313-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_spropack.cpython-313-darwin.so +0 -0
- scipy/sparse/linalg/_propack/_zpropack.cpython-313-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-313-darwin.so +0 -0
- scipy/spatial/_distance_pybind.cpython-313-darwin.so +0 -0
- scipy/spatial/_distance_wrap.cpython-313-darwin.so +0 -0
- scipy/spatial/_hausdorff.cpython-313-darwin.so +0 -0
- scipy/spatial/_qhull.cpython-313-darwin.so +0 -0
- scipy/spatial/_voronoi.cpython-313-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-313-darwin.so +0 -0
- scipy/spatial/transform/_rotation.cpython-313-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-313-darwin.so +0 -0
- scipy/special/_ellip_harm_2.cpython-313-darwin.so +0 -0
- scipy/special/_gufuncs.cpython-313-darwin.so +0 -0
- scipy/special/_logsumexp.py +67 -58
- scipy/special/_orthogonal.pyi +1 -1
- scipy/special/_specfun.cpython-313-darwin.so +0 -0
- scipy/special/_special_ufuncs.cpython-313-darwin.so +0 -0
- scipy/special/_spherical_bessel.py +4 -4
- scipy/special/_support_alternative_backends.py +212 -119
- scipy/special/_test_internal.cpython-313-darwin.so +0 -0
- scipy/special/_testutils.py +4 -4
- scipy/special/_ufuncs.cpython-313-darwin.so +0 -0
- scipy/special/_ufuncs.pyi +1 -0
- scipy/special/_ufuncs.pyx +215 -1400
- scipy/special/_ufuncs_cxx.cpython-313-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-313-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-313-darwin.so +0 -0
- scipy/stats/_axis_nan_policy.py +5 -12
- scipy/stats/_biasedurn.cpython-313-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-313-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-313-darwin.so +0 -0
- scipy/stats/_qmvnt.py +16 -95
- scipy/stats/_qmvnt_cy.cpython-313-darwin.so +0 -0
- scipy/stats/_quantile.py +335 -0
- scipy/stats/_rcont/rcont.cpython-313-darwin.so +0 -0
- scipy/stats/_resampling.py +4 -29
- scipy/stats/_sampling.py +1 -1
- scipy/stats/_sobol.cpython-313-darwin.so +0 -0
- scipy/stats/_stats.cpython-313-darwin.so +0 -0
- scipy/stats/_stats_mstats_common.py +21 -2
- scipy/stats/_stats_py.py +550 -476
- scipy/stats/_stats_pythran.cpython-313-darwin.so +0 -0
- scipy/stats/_unuran/unuran_wrapper.cpython-313-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-313-darwin.so +0 -0
- scipy/optimize/_cobyla.cpython-313-darwin.so +0 -0
- scipy/optimize/_cython_nnls.cpython-313-darwin.so +0 -0
- scipy/optimize/_slsqp.cpython-313-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-313-darwin.so +0 -0
- scipy-1.15.3.dist-info/WHEEL +0 -4
@@ -1,46 +1,31 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
-
__all__ = [
|
4
|
-
|
5
|
-
"Device",
|
6
|
-
"Dtype",
|
7
|
-
]
|
3
|
+
__all__ = ["Array", "DType", "Device"]
|
4
|
+
_all_ignore = ["cp"]
|
8
5
|
|
9
|
-
import
|
10
|
-
from typing import (
|
11
|
-
Union,
|
12
|
-
TYPE_CHECKING,
|
13
|
-
)
|
14
|
-
|
15
|
-
from cupy import (
|
16
|
-
ndarray,
|
17
|
-
dtype,
|
18
|
-
int8,
|
19
|
-
int16,
|
20
|
-
int32,
|
21
|
-
int64,
|
22
|
-
uint8,
|
23
|
-
uint16,
|
24
|
-
uint32,
|
25
|
-
uint64,
|
26
|
-
float32,
|
27
|
-
float64,
|
28
|
-
)
|
6
|
+
from typing import TYPE_CHECKING
|
29
7
|
|
8
|
+
import cupy as cp
|
9
|
+
from cupy import ndarray as Array
|
30
10
|
from cupy.cuda.device import Device
|
31
11
|
|
32
|
-
if TYPE_CHECKING
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
12
|
+
if TYPE_CHECKING:
|
13
|
+
# NumPy 1.x on Python 3.10 fails to parse np.dtype[]
|
14
|
+
DType = cp.dtype[
|
15
|
+
cp.intp
|
16
|
+
| cp.int8
|
17
|
+
| cp.int16
|
18
|
+
| cp.int32
|
19
|
+
| cp.int64
|
20
|
+
| cp.uint8
|
21
|
+
| cp.uint16
|
22
|
+
| cp.uint32
|
23
|
+
| cp.uint64
|
24
|
+
| cp.float32
|
25
|
+
| cp.float64
|
26
|
+
| cp.complex64
|
27
|
+
| cp.complex128
|
28
|
+
| cp.bool_
|
29
|
+
]
|
45
30
|
else:
|
46
|
-
|
31
|
+
DType = cp.dtype
|
@@ -1,9 +1,12 @@
|
|
1
|
-
from
|
1
|
+
from typing import Final
|
2
|
+
|
3
|
+
from dask.array import * # noqa: F403
|
2
4
|
|
3
5
|
# These imports may overwrite names from the import * above.
|
4
|
-
from ._aliases import *
|
6
|
+
from ._aliases import * # noqa: F403
|
5
7
|
|
6
|
-
__array_api_version__ =
|
8
|
+
__array_api_version__: Final = "2024.12"
|
7
9
|
|
10
|
+
# See the comment in the numpy __init__.py
|
8
11
|
__import__(__package__ + '.linalg')
|
9
12
|
__import__(__package__ + '.fft')
|
@@ -1,66 +1,102 @@
|
|
1
|
-
|
1
|
+
# pyright: reportPrivateUsage=false
|
2
|
+
# pyright: reportUnknownArgumentType=false
|
3
|
+
# pyright: reportUnknownMemberType=false
|
4
|
+
# pyright: reportUnknownVariableType=false
|
2
5
|
|
3
|
-
from
|
4
|
-
from ...common._helpers import _check_device
|
6
|
+
from __future__ import annotations
|
5
7
|
|
6
|
-
from
|
8
|
+
from builtins import bool as py_bool
|
9
|
+
from collections.abc import Callable
|
10
|
+
from typing import TYPE_CHECKING, Any
|
7
11
|
|
8
|
-
|
12
|
+
if TYPE_CHECKING:
|
13
|
+
from typing_extensions import TypeIs
|
9
14
|
|
15
|
+
import dask.array as da
|
10
16
|
import numpy as np
|
17
|
+
from numpy import bool_ as bool
|
11
18
|
from numpy import (
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
bool_ as bool,
|
19
|
+
can_cast,
|
20
|
+
complex64,
|
21
|
+
complex128,
|
16
22
|
float32,
|
17
23
|
float64,
|
18
24
|
int8,
|
19
25
|
int16,
|
20
26
|
int32,
|
21
27
|
int64,
|
28
|
+
result_type,
|
22
29
|
uint8,
|
23
30
|
uint16,
|
24
31
|
uint32,
|
25
32
|
uint64,
|
26
|
-
complex64,
|
27
|
-
complex128,
|
28
|
-
can_cast,
|
29
|
-
result_type,
|
30
33
|
)
|
31
34
|
|
32
|
-
from
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
35
|
+
from ..._internal import get_xp
|
36
|
+
from ...common import _aliases, _helpers, array_namespace
|
37
|
+
from ...common._typing import (
|
38
|
+
Array,
|
39
|
+
Device,
|
40
|
+
DType,
|
41
|
+
NestedSequence,
|
42
|
+
SupportsBufferProtocol,
|
43
|
+
)
|
44
|
+
from ._info import __array_namespace_info__
|
39
45
|
|
40
46
|
isdtype = get_xp(np)(_aliases.isdtype)
|
41
47
|
unstack = get_xp(da)(_aliases.unstack)
|
42
|
-
|
48
|
+
|
49
|
+
|
50
|
+
# da.astype doesn't respect copy=True
|
51
|
+
def astype(
|
52
|
+
x: Array,
|
53
|
+
dtype: DType,
|
54
|
+
/,
|
55
|
+
*,
|
56
|
+
copy: py_bool = True,
|
57
|
+
device: Device | None = None,
|
58
|
+
) -> Array:
|
59
|
+
"""
|
60
|
+
Array API compatibility wrapper for astype().
|
61
|
+
|
62
|
+
See the corresponding documentation in the array library and/or the array API
|
63
|
+
specification for more details.
|
64
|
+
"""
|
65
|
+
# TODO: respect device keyword?
|
66
|
+
_helpers._check_device(da, device)
|
67
|
+
|
68
|
+
if not copy and dtype == x.dtype:
|
69
|
+
return x
|
70
|
+
x = x.astype(dtype)
|
71
|
+
return x.copy() if copy else x
|
72
|
+
|
43
73
|
|
44
74
|
# Common aliases
|
45
75
|
|
76
|
+
|
46
77
|
# This arange func is modified from the common one to
|
47
78
|
# not pass stop/step as keyword arguments, which will cause
|
48
79
|
# an error with dask
|
49
|
-
|
50
|
-
|
51
|
-
def _dask_arange(
|
52
|
-
start: Union[int, float],
|
80
|
+
def arange(
|
81
|
+
start: float,
|
53
82
|
/,
|
54
|
-
stop:
|
55
|
-
step:
|
83
|
+
stop: float | None = None,
|
84
|
+
step: float = 1,
|
56
85
|
*,
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
**kwargs,
|
86
|
+
dtype: DType | None = None,
|
87
|
+
device: Device | None = None,
|
88
|
+
**kwargs: object,
|
61
89
|
) -> Array:
|
62
|
-
|
63
|
-
|
90
|
+
"""
|
91
|
+
Array API compatibility wrapper for arange().
|
92
|
+
|
93
|
+
See the corresponding documentation in the array library and/or the array API
|
94
|
+
specification for more details.
|
95
|
+
"""
|
96
|
+
# TODO: respect device keyword?
|
97
|
+
_helpers._check_device(da, device)
|
98
|
+
|
99
|
+
args: list[Any] = [start]
|
64
100
|
if stop is not None:
|
65
101
|
args.append(stop)
|
66
102
|
else:
|
@@ -68,13 +104,12 @@ def _dask_arange(
|
|
68
104
|
# prepend the default value for start which is 0
|
69
105
|
args.insert(0, 0)
|
70
106
|
args.append(step)
|
71
|
-
return xp.arange(*args, dtype=dtype, **kwargs)
|
72
107
|
|
73
|
-
arange =
|
74
|
-
|
108
|
+
return da.arange(*args, dtype=dtype, **kwargs)
|
109
|
+
|
75
110
|
|
76
|
-
linspace = get_xp(da)(_aliases.linspace)
|
77
111
|
eye = get_xp(da)(_aliases.eye)
|
112
|
+
linspace = get_xp(da)(_aliases.linspace)
|
78
113
|
UniqueAllResult = get_xp(da)(_aliases.UniqueAllResult)
|
79
114
|
UniqueCountsResult = get_xp(da)(_aliases.UniqueCountsResult)
|
80
115
|
UniqueInverseResult = get_xp(da)(_aliases.UniqueInverseResult)
|
@@ -86,6 +121,7 @@ permute_dims = get_xp(da)(_aliases.permute_dims)
|
|
86
121
|
std = get_xp(da)(_aliases.std)
|
87
122
|
var = get_xp(da)(_aliases.var)
|
88
123
|
cumulative_sum = get_xp(da)(_aliases.cumulative_sum)
|
124
|
+
cumulative_prod = get_xp(da)(_aliases.cumulative_prod)
|
89
125
|
empty = get_xp(da)(_aliases.empty)
|
90
126
|
empty_like = get_xp(da)(_aliases.empty_like)
|
91
127
|
full = get_xp(da)(_aliases.full)
|
@@ -97,7 +133,6 @@ zeros_like = get_xp(da)(_aliases.zeros_like)
|
|
97
133
|
reshape = get_xp(da)(_aliases.reshape)
|
98
134
|
matrix_transpose = get_xp(da)(_aliases.matrix_transpose)
|
99
135
|
vecdot = get_xp(da)(_aliases.vecdot)
|
100
|
-
|
101
136
|
nonzero = get_xp(da)(_aliases.nonzero)
|
102
137
|
ceil = get_xp(np)(_aliases.ceil)
|
103
138
|
floor = get_xp(np)(_aliases.floor)
|
@@ -105,23 +140,19 @@ trunc = get_xp(np)(_aliases.trunc)
|
|
105
140
|
matmul = get_xp(np)(_aliases.matmul)
|
106
141
|
tensordot = get_xp(np)(_aliases.tensordot)
|
107
142
|
sign = get_xp(np)(_aliases.sign)
|
143
|
+
finfo = get_xp(np)(_aliases.finfo)
|
144
|
+
iinfo = get_xp(np)(_aliases.iinfo)
|
145
|
+
|
108
146
|
|
109
147
|
# asarray also adds the copy keyword, which is not present in numpy 1.0.
|
110
148
|
def asarray(
|
111
|
-
obj:
|
112
|
-
Array,
|
113
|
-
bool,
|
114
|
-
int,
|
115
|
-
float,
|
116
|
-
NestedSequence[bool | int | float],
|
117
|
-
SupportsBufferProtocol,
|
118
|
-
],
|
149
|
+
obj: complex | NestedSequence[complex] | Array | SupportsBufferProtocol,
|
119
150
|
/,
|
120
151
|
*,
|
121
|
-
dtype:
|
122
|
-
device:
|
123
|
-
copy:
|
124
|
-
**kwargs,
|
152
|
+
dtype: DType | None = None,
|
153
|
+
device: Device | None = None,
|
154
|
+
copy: py_bool | None = None,
|
155
|
+
**kwargs: object,
|
125
156
|
) -> Array:
|
126
157
|
"""
|
127
158
|
Array API compatibility wrapper for asarray().
|
@@ -129,89 +160,217 @@ def asarray(
|
|
129
160
|
See the corresponding documentation in the array library and/or the array API
|
130
161
|
specification for more details.
|
131
162
|
"""
|
163
|
+
# TODO: respect device keyword?
|
164
|
+
_helpers._check_device(da, device)
|
165
|
+
|
166
|
+
if isinstance(obj, da.Array):
|
167
|
+
if dtype is not None and dtype != obj.dtype:
|
168
|
+
if copy is False:
|
169
|
+
raise ValueError("Unable to avoid copy when changing dtype")
|
170
|
+
obj = obj.astype(dtype)
|
171
|
+
return obj.copy() if copy else obj # pyright: ignore[reportAttributeAccessIssue]
|
172
|
+
|
132
173
|
if copy is False:
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
from dask.array import
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
right_shift as bitwise_right_shift,
|
160
|
-
invert as bitwise_invert,
|
161
|
-
power as pow,
|
162
|
-
# Other
|
163
|
-
concatenate as concat,
|
164
|
-
)
|
174
|
+
raise ValueError(
|
175
|
+
"Unable to avoid copy when converting a non-dask object to dask"
|
176
|
+
)
|
177
|
+
|
178
|
+
# copy=None to be uniform across dask < 2024.12 and >= 2024.12
|
179
|
+
# see https://github.com/dask/dask/pull/11524/
|
180
|
+
obj = np.array(obj, dtype=dtype, copy=True)
|
181
|
+
return da.from_array(obj)
|
182
|
+
|
183
|
+
|
184
|
+
# Element wise aliases
|
185
|
+
from dask.array import arccos as acos
|
186
|
+
from dask.array import arccosh as acosh
|
187
|
+
from dask.array import arcsin as asin
|
188
|
+
from dask.array import arcsinh as asinh
|
189
|
+
from dask.array import arctan as atan
|
190
|
+
from dask.array import arctan2 as atan2
|
191
|
+
from dask.array import arctanh as atanh
|
192
|
+
|
193
|
+
# Other
|
194
|
+
from dask.array import concatenate as concat
|
195
|
+
from dask.array import invert as bitwise_invert
|
196
|
+
from dask.array import left_shift as bitwise_left_shift
|
197
|
+
from dask.array import power as pow
|
198
|
+
from dask.array import right_shift as bitwise_right_shift
|
199
|
+
|
165
200
|
|
166
201
|
# dask.array.clip does not work unless all three arguments are provided.
|
167
202
|
# Furthermore, the masking workaround in common._aliases.clip cannot work with
|
168
203
|
# dask (meaning uint64 promoting to float64 is going to just be unfixed for
|
169
204
|
# now).
|
170
|
-
@get_xp(da)
|
171
205
|
def clip(
|
172
206
|
x: Array,
|
173
207
|
/,
|
174
|
-
min:
|
175
|
-
max:
|
176
|
-
*,
|
177
|
-
xp,
|
208
|
+
min: float | Array | None = None,
|
209
|
+
max: float | Array | None = None,
|
178
210
|
) -> Array:
|
179
|
-
|
180
|
-
|
211
|
+
"""
|
212
|
+
Array API compatibility wrapper for clip().
|
213
|
+
|
214
|
+
See the corresponding documentation in the array library and/or the array API
|
215
|
+
specification for more details.
|
216
|
+
"""
|
217
|
+
|
218
|
+
def _isscalar(a: float | Array | None, /) -> TypeIs[float | None]:
|
219
|
+
return a is None or isinstance(a, (int, float))
|
220
|
+
|
181
221
|
min_shape = () if _isscalar(min) else min.shape
|
182
222
|
max_shape = () if _isscalar(max) else max.shape
|
183
223
|
|
184
224
|
# TODO: This won't handle dask unknown shapes
|
185
|
-
import numpy as np
|
186
225
|
result_shape = np.broadcast_shapes(x.shape, min_shape, max_shape)
|
187
226
|
|
188
227
|
if min is not None:
|
189
|
-
min =
|
228
|
+
min = da.broadcast_to(da.asarray(min), result_shape)
|
190
229
|
if max is not None:
|
191
|
-
max =
|
230
|
+
max = da.broadcast_to(da.asarray(max), result_shape)
|
192
231
|
|
193
232
|
if min is None and max is None:
|
194
|
-
return
|
233
|
+
return da.positive(x)
|
195
234
|
|
196
235
|
if min is None:
|
197
|
-
return astype(
|
236
|
+
return astype(da.minimum(x, max), x.dtype)
|
198
237
|
if max is None:
|
199
|
-
return astype(
|
238
|
+
return astype(da.maximum(x, min), x.dtype)
|
239
|
+
|
240
|
+
return astype(da.minimum(da.maximum(x, min), max), x.dtype)
|
241
|
+
|
242
|
+
|
243
|
+
def _ensure_single_chunk(x: Array, axis: int) -> tuple[Array, Callable[[Array], Array]]:
|
244
|
+
"""
|
245
|
+
Make sure that Array is not broken into multiple chunks along axis.
|
246
|
+
|
247
|
+
Returns
|
248
|
+
-------
|
249
|
+
x : Array
|
250
|
+
The input Array with a single chunk along axis.
|
251
|
+
restore : Callable[Array, Array]
|
252
|
+
function to apply to the output to rechunk it back into reasonable chunks
|
253
|
+
"""
|
254
|
+
if axis < 0:
|
255
|
+
axis += x.ndim
|
256
|
+
if x.numblocks[axis] < 2:
|
257
|
+
return x, lambda x: x
|
258
|
+
|
259
|
+
# Break chunks on other axes in an attempt to keep chunk size low
|
260
|
+
x = x.rechunk({i: -1 if i == axis else "auto" for i in range(x.ndim)})
|
261
|
+
|
262
|
+
# Rather than reconstructing the original chunks, which can be a
|
263
|
+
# very expensive affair, just break down oversized chunks without
|
264
|
+
# incurring in any transfers over the network.
|
265
|
+
# This has the downside of a risk of overchunking if the array is
|
266
|
+
# then used in operations against other arrays that match the
|
267
|
+
# original chunking pattern.
|
268
|
+
return x, lambda x: x.rechunk()
|
269
|
+
|
270
|
+
|
271
|
+
def sort(
|
272
|
+
x: Array,
|
273
|
+
/,
|
274
|
+
*,
|
275
|
+
axis: int = -1,
|
276
|
+
descending: py_bool = False,
|
277
|
+
stable: py_bool = True,
|
278
|
+
) -> Array:
|
279
|
+
"""
|
280
|
+
Array API compatibility layer around the lack of sort() in Dask.
|
281
|
+
|
282
|
+
Warnings
|
283
|
+
--------
|
284
|
+
This function temporarily rechunks the array along `axis` to a single chunk.
|
285
|
+
This can be extremely inefficient and can lead to out-of-memory errors.
|
286
|
+
|
287
|
+
See the corresponding documentation in the array library and/or the array API
|
288
|
+
specification for more details.
|
289
|
+
"""
|
290
|
+
x, restore = _ensure_single_chunk(x, axis)
|
291
|
+
|
292
|
+
meta_xp = array_namespace(x._meta)
|
293
|
+
x = da.map_blocks(
|
294
|
+
meta_xp.sort,
|
295
|
+
x,
|
296
|
+
axis=axis,
|
297
|
+
meta=x._meta,
|
298
|
+
dtype=x.dtype,
|
299
|
+
descending=descending,
|
300
|
+
stable=stable,
|
301
|
+
)
|
302
|
+
|
303
|
+
return restore(x)
|
304
|
+
|
305
|
+
|
306
|
+
def argsort(
|
307
|
+
x: Array,
|
308
|
+
/,
|
309
|
+
*,
|
310
|
+
axis: int = -1,
|
311
|
+
descending: py_bool = False,
|
312
|
+
stable: py_bool = True,
|
313
|
+
) -> Array:
|
314
|
+
"""
|
315
|
+
Array API compatibility layer around the lack of argsort() in Dask.
|
200
316
|
|
201
|
-
|
317
|
+
See the corresponding documentation in the array library and/or the array API
|
318
|
+
specification for more details.
|
319
|
+
|
320
|
+
Warnings
|
321
|
+
--------
|
322
|
+
This function temporarily rechunks the array along `axis` into a single chunk.
|
323
|
+
This can be extremely inefficient and can lead to out-of-memory errors.
|
324
|
+
"""
|
325
|
+
x, restore = _ensure_single_chunk(x, axis)
|
326
|
+
|
327
|
+
meta_xp = array_namespace(x._meta)
|
328
|
+
dtype = meta_xp.argsort(x._meta).dtype
|
329
|
+
meta = meta_xp.astype(x._meta, dtype)
|
330
|
+
x = da.map_blocks(
|
331
|
+
meta_xp.argsort,
|
332
|
+
x,
|
333
|
+
axis=axis,
|
334
|
+
meta=meta,
|
335
|
+
dtype=dtype,
|
336
|
+
descending=descending,
|
337
|
+
stable=stable,
|
338
|
+
)
|
339
|
+
|
340
|
+
return restore(x)
|
341
|
+
|
342
|
+
|
343
|
+
# dask.array.count_nonzero does not have keepdims
|
344
|
+
def count_nonzero(
|
345
|
+
x: Array,
|
346
|
+
axis: int | None = None,
|
347
|
+
keepdims: py_bool = False,
|
348
|
+
) -> Array:
|
349
|
+
result = da.count_nonzero(x, axis)
|
350
|
+
if keepdims:
|
351
|
+
if axis is None:
|
352
|
+
return da.reshape(result, [1] * x.ndim)
|
353
|
+
return da.expand_dims(result, axis)
|
354
|
+
return result
|
202
355
|
|
203
|
-
# exclude these from all since dask.array has no sorting functions
|
204
|
-
_da_unsupported = ['sort', 'argsort']
|
205
356
|
|
206
|
-
|
357
|
+
__all__ = [
|
358
|
+
"__array_namespace_info__",
|
359
|
+
"count_nonzero",
|
360
|
+
"bool",
|
361
|
+
"int8", "int16", "int32", "int64",
|
362
|
+
"uint8", "uint16", "uint32", "uint64",
|
363
|
+
"float32", "float64",
|
364
|
+
"complex64", "complex128",
|
365
|
+
"asarray", "astype", "can_cast", "result_type",
|
366
|
+
"pow",
|
367
|
+
"concat",
|
368
|
+
"acos", "acosh", "asin", "asinh", "atan", "atan2", "atanh",
|
369
|
+
"bitwise_left_shift", "bitwise_right_shift", "bitwise_invert",
|
370
|
+
] # fmt: skip
|
371
|
+
__all__ += _aliases.__all__
|
372
|
+
_all_ignore = ["array_namespace", "get_xp", "da", "np"]
|
207
373
|
|
208
|
-
__all__ = _common_aliases + ['__array_namespace_info__', 'asarray', 'acos',
|
209
|
-
'acosh', 'asin', 'asinh', 'atan', 'atan2',
|
210
|
-
'atanh', 'bitwise_left_shift', 'bitwise_invert',
|
211
|
-
'bitwise_right_shift', 'concat', 'pow', 'iinfo', 'finfo', 'can_cast',
|
212
|
-
'result_type', 'bool', 'float32', 'float64', 'int8', 'int16', 'int32', 'int64',
|
213
|
-
'uint8', 'uint16', 'uint32', 'uint64',
|
214
|
-
'complex64', 'complex128', 'iinfo', 'finfo',
|
215
|
-
'can_cast', 'result_type']
|
216
374
|
|
217
|
-
|
375
|
+
def __dir__() -> list[str]:
|
376
|
+
return __all__
|