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
@@ -121,19 +121,21 @@ def cases_test_cont_basic():
|
|
121
121
|
|
122
122
|
@pytest.mark.parametrize('distname,arg', cases_test_cont_basic())
|
123
123
|
@pytest.mark.parametrize('sn', [500])
|
124
|
-
def test_cont_basic(distname, arg, sn):
|
124
|
+
def test_cont_basic(distname, arg, sn, num_parallel_threads):
|
125
125
|
try:
|
126
126
|
distfn = getattr(stats, distname)
|
127
127
|
except TypeError:
|
128
128
|
distfn = distname
|
129
129
|
distname = 'rv_histogram_instance'
|
130
130
|
|
131
|
-
rng = np.random.
|
131
|
+
rng = np.random.default_rng(7654565)
|
132
132
|
rvs = distfn.rvs(size=sn, *arg, random_state=rng)
|
133
133
|
m, v = distfn.stats(*arg)
|
134
134
|
|
135
135
|
if distname not in {'laplace_asymmetric'}:
|
136
|
-
|
136
|
+
# TODO: multiple checks in this function are not robust, tweaking the
|
137
|
+
# seed above will make different distributions fail.
|
138
|
+
check_sample_meanvar_(m, v, rvs, rng)
|
137
139
|
check_cdf_ppf(distfn, arg, distname)
|
138
140
|
check_sf_isf(distfn, arg, distname)
|
139
141
|
check_cdf_sf(distfn, arg, distname)
|
@@ -167,13 +169,14 @@ def test_cont_basic(distname, arg, sn):
|
|
167
169
|
arg = (3,)
|
168
170
|
|
169
171
|
check_named_args(distfn, x, arg, locscale_defaults, meths)
|
170
|
-
|
172
|
+
if num_parallel_threads == 1:
|
173
|
+
check_random_state_property(distfn, arg)
|
171
174
|
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
175
|
+
if distname in ['rel_breitwigner'] and _IS_32BIT:
|
176
|
+
# gh18414
|
177
|
+
pytest.skip("fails on Linux 32-bit")
|
178
|
+
else:
|
179
|
+
check_pickling(distfn, arg)
|
177
180
|
check_freezing(distfn, arg)
|
178
181
|
|
179
182
|
# Entropy
|
@@ -281,6 +284,7 @@ def test_rvs_scalar(distname, arg):
|
|
281
284
|
assert np.isscalar(distfn.rvs(*arg, size=None))
|
282
285
|
|
283
286
|
|
287
|
+
@pytest.mark.parallel_threads(1)
|
284
288
|
def test_levy_stable_random_state_property():
|
285
289
|
# levy_stable only implements rvs(), so it is skipped in the
|
286
290
|
# main loop in test_cont_basic(). Here we apply just the test
|
@@ -581,11 +585,11 @@ def test_method_of_moments():
|
|
581
585
|
npt.assert_almost_equal(loc+scale, b, decimal=4)
|
582
586
|
|
583
587
|
|
584
|
-
def check_sample_meanvar_(popmean, popvar, sample):
|
588
|
+
def check_sample_meanvar_(popmean, popvar, sample, rng):
|
585
589
|
if np.isfinite(popmean):
|
586
590
|
check_sample_mean(sample, popmean)
|
587
591
|
if np.isfinite(popvar):
|
588
|
-
check_sample_var(sample, popvar)
|
592
|
+
check_sample_var(sample, popvar, rng)
|
589
593
|
|
590
594
|
|
591
595
|
def check_sample_mean(sample, popmean):
|
@@ -594,7 +598,7 @@ def check_sample_mean(sample, popmean):
|
|
594
598
|
assert prob > 0.01
|
595
599
|
|
596
600
|
|
597
|
-
def check_sample_var(sample, popvar):
|
601
|
+
def check_sample_var(sample, popvar, rng):
|
598
602
|
# check that population mean lies within the CI bootstrapped from the
|
599
603
|
# sample. This used to be a chi-squared test for variance, but there were
|
600
604
|
# too many false positives
|
@@ -602,6 +606,7 @@ def check_sample_var(sample, popvar):
|
|
602
606
|
(sample,),
|
603
607
|
lambda x, axis: x.var(ddof=1, axis=axis),
|
604
608
|
confidence_level=0.995,
|
609
|
+
rng=rng,
|
605
610
|
)
|
606
611
|
conf = res.confidence_interval
|
607
612
|
low, high = conf.low, conf.high
|
@@ -986,6 +991,7 @@ def test_kappa4_array_gh13582():
|
|
986
991
|
assert res2.shape == (4, 4, 3)
|
987
992
|
|
988
993
|
|
994
|
+
@pytest.mark.parallel_threads(1)
|
989
995
|
def test_frozen_attributes():
|
990
996
|
# gh-14827 reported that all frozen distributions had both pmf and pdf
|
991
997
|
# attributes; continuous should have pdf and discrete should have pmf.
|
@@ -36,14 +36,18 @@ def cases_test_discrete_basic():
|
|
36
36
|
|
37
37
|
|
38
38
|
@pytest.mark.parametrize('distname,arg,first_case', cases_test_discrete_basic())
|
39
|
-
def test_discrete_basic(distname, arg, first_case):
|
39
|
+
def test_discrete_basic(distname, arg, first_case, num_parallel_threads):
|
40
|
+
if (isinstance(distname, str) and distname.startswith('nchypergeom')
|
41
|
+
and num_parallel_threads > 1):
|
42
|
+
pytest.skip(reason='nchypergeom has a global random generator')
|
43
|
+
|
40
44
|
try:
|
41
45
|
distfn = getattr(stats, distname)
|
42
46
|
except TypeError:
|
43
47
|
distfn = distname
|
44
48
|
distname = 'sample distribution'
|
45
|
-
np.random.
|
46
|
-
rvs = distfn.rvs(size=2000,
|
49
|
+
rng = np.random.RandomState(9765456)
|
50
|
+
rvs = distfn.rvs(*arg, size=2000, random_state=rng)
|
47
51
|
supp = np.unique(rvs)
|
48
52
|
m, v = distfn.stats(*arg)
|
49
53
|
check_cdf_ppf(distfn, arg, supp, distname + ' cdf_ppf')
|
@@ -68,9 +72,10 @@ def test_discrete_basic(distname, arg, first_case):
|
|
68
72
|
check_named_args(distfn, k, arg, locscale_defaults, meths)
|
69
73
|
if distname != 'sample distribution':
|
70
74
|
check_scale_docstring(distfn)
|
71
|
-
|
72
|
-
|
73
|
-
|
75
|
+
if num_parallel_threads == 1:
|
76
|
+
check_random_state_property(distfn, arg)
|
77
|
+
if distname not in {'poisson_binom'}: # can't be pickled
|
78
|
+
check_pickling(distfn, arg)
|
74
79
|
check_freezing(distfn, arg)
|
75
80
|
|
76
81
|
# Entropy
|
@@ -413,6 +418,7 @@ def test_integer_shapes(distname, shapename, shapes):
|
|
413
418
|
assert not np.any(np.isnan(pmf[2, :]))
|
414
419
|
|
415
420
|
|
421
|
+
@pytest.mark.parallel_threads(1)
|
416
422
|
def test_frozen_attributes():
|
417
423
|
# gh-14827 reported that all frozen distributions had both pmf and pdf
|
418
424
|
# attributes; continuous should have pdf and discrete should have pmf.
|
@@ -564,11 +570,11 @@ def test_rv_sample():
|
|
564
570
|
def test__pmf_float_input():
|
565
571
|
# gh-21272
|
566
572
|
# test that `rvs()` can be computed when `_pmf` requires float input
|
567
|
-
|
573
|
+
|
568
574
|
class rv_exponential(stats.rv_discrete):
|
569
575
|
def _pmf(self, i):
|
570
576
|
return (2/3)*3**(1 - i)
|
571
|
-
|
577
|
+
|
572
578
|
rv = rv_exponential(a=0.0, b=float('inf'))
|
573
579
|
rvs = rv.rvs(random_state=42) # should not crash due to integer input to `_pmf`
|
574
580
|
assert_allclose(rvs, 0)
|
@@ -109,10 +109,10 @@ def test_nhypergeom_rvs_shape():
|
|
109
109
|
def test_nhypergeom_accuracy():
|
110
110
|
# Check that nhypergeom.rvs post-gh-13431 gives the same values as
|
111
111
|
# inverse transform sampling
|
112
|
-
np.random.
|
113
|
-
x = nhypergeom.rvs(22, 7, 11, size=100)
|
114
|
-
np.random.
|
115
|
-
p =
|
112
|
+
rng = np.random.RandomState(0)
|
113
|
+
x = nhypergeom.rvs(22, 7, 11, size=100, random_state=rng)
|
114
|
+
rng = np.random.RandomState(0)
|
115
|
+
p = rng.uniform(size=100)
|
116
116
|
y = nhypergeom.ppf(p, 22, 7, 11)
|
117
117
|
assert_equal(x, y)
|
118
118
|
|
@@ -305,10 +305,10 @@ class TestZipfian:
|
|
305
305
|
# cdf <- pzipf(k, N = n, shape = a)
|
306
306
|
# print(pmf)
|
307
307
|
# print(cdf)
|
308
|
-
np.random.
|
309
|
-
k =
|
310
|
-
a =
|
311
|
-
n =
|
308
|
+
rng = np.random.RandomState(0)
|
309
|
+
k = rng.randint(1, 20, size=10)
|
310
|
+
a = rng.rand(10)*10 + 1
|
311
|
+
n = rng.randint(1, 100, size=10)
|
312
312
|
pmf = [8.076972e-03, 2.950214e-05, 9.799333e-01, 3.216601e-06,
|
313
313
|
3.158895e-04, 3.412497e-05, 4.350472e-10, 2.405773e-06,
|
314
314
|
5.860662e-06, 1.053948e-04]
|
@@ -318,9 +318,9 @@ class TestZipfian:
|
|
318
318
|
assert_allclose(zipfian.pmf(k, a, n)[1:], pmf[1:], rtol=1e-6)
|
319
319
|
assert_allclose(zipfian.cdf(k, a, n)[1:], cdf[1:], rtol=5e-5)
|
320
320
|
|
321
|
-
np.random.
|
321
|
+
rng = np.random.RandomState(0)
|
322
322
|
naive_tests = np.vstack((np.logspace(-2, 1, 10),
|
323
|
-
|
323
|
+
rng.randint(2, 40, 10))).T
|
324
324
|
|
325
325
|
@pytest.mark.parametrize("a, n", naive_tests)
|
326
326
|
def test_zipfian_naive(self, a, n):
|
@@ -424,17 +424,17 @@ class TestNCH:
|
|
424
424
|
def test_nchypergeom_wallenius_naive(self):
|
425
425
|
# test against a very simple implementation
|
426
426
|
|
427
|
-
np.random.
|
427
|
+
rng = np.random.RandomState(2)
|
428
428
|
shape = (2, 4, 3)
|
429
429
|
max_m = 100
|
430
|
-
m1 =
|
431
|
-
m2 =
|
430
|
+
m1 = rng.randint(1, max_m, size=shape)
|
431
|
+
m2 = rng.randint(1, max_m, size=shape)
|
432
432
|
N = m1 + m2
|
433
|
-
n = randint.rvs(0, N, size=N.shape)
|
433
|
+
n = randint.rvs(0, N, size=N.shape, random_state=rng)
|
434
434
|
xl = np.maximum(0, n-m2)
|
435
435
|
xu = np.minimum(n, m1)
|
436
|
-
x = randint.rvs(xl, xu, size=xl.shape)
|
437
|
-
w =
|
436
|
+
x = randint.rvs(xl, xu, size=xl.shape, random_state=rng)
|
437
|
+
w = rng.rand(*x.shape)*2
|
438
438
|
|
439
439
|
def support(N, m1, n, w):
|
440
440
|
m2 = N - m1
|
@@ -5,6 +5,7 @@ import warnings
|
|
5
5
|
import re
|
6
6
|
import sys
|
7
7
|
import pickle
|
8
|
+
import threading
|
8
9
|
from pathlib import Path
|
9
10
|
import os
|
10
11
|
import json
|
@@ -66,7 +67,7 @@ def test_distributions_submodule():
|
|
66
67
|
continuous = [dist[0] for dist in distcont] # continuous dist names
|
67
68
|
discrete = [dist[0] for dist in distdiscrete] # discrete dist names
|
68
69
|
other = ['rv_discrete', 'rv_continuous', 'rv_histogram',
|
69
|
-
'entropy'
|
70
|
+
'entropy']
|
70
71
|
expected = continuous + discrete + other
|
71
72
|
|
72
73
|
# need to remove, e.g.,
|
@@ -1365,25 +1366,27 @@ class TestGennorm:
|
|
1365
1366
|
assert_almost_equal(pdf1, pdf2)
|
1366
1367
|
|
1367
1368
|
def test_rvs(self):
|
1368
|
-
np.random.
|
1369
|
+
rng = np.random.RandomState(0)
|
1369
1370
|
# 0 < beta < 1
|
1370
1371
|
dist = stats.gennorm(0.5)
|
1371
|
-
rvs = dist.rvs(size=1000)
|
1372
|
+
rvs = dist.rvs(size=1000, random_state=rng)
|
1372
1373
|
assert stats.kstest(rvs, dist.cdf).pvalue > 0.1
|
1373
1374
|
# beta = 1
|
1374
1375
|
dist = stats.gennorm(1)
|
1375
|
-
rvs = dist.rvs(size=1000)
|
1376
|
-
rvs_laplace = stats.laplace.rvs(size=1000)
|
1376
|
+
rvs = dist.rvs(size=1000, random_state=rng)
|
1377
|
+
rvs_laplace = stats.laplace.rvs(size=1000, random_state=rng)
|
1377
1378
|
assert stats.ks_2samp(rvs, rvs_laplace).pvalue > 0.1
|
1378
1379
|
# beta = 2
|
1379
1380
|
dist = stats.gennorm(2)
|
1380
|
-
|
1381
|
-
|
1381
|
+
dist.random_state = rng
|
1382
|
+
rvs = dist.rvs(size=1000, random_state=rng)
|
1383
|
+
rvs_norm = stats.norm.rvs(scale=1/2**0.5, size=1000, random_state=rng)
|
1382
1384
|
assert stats.ks_2samp(rvs, rvs_norm).pvalue > 0.1
|
1383
1385
|
|
1384
1386
|
def test_rvs_broadcasting(self):
|
1385
|
-
np.random.
|
1387
|
+
rng = np.random.default_rng(0)
|
1386
1388
|
dist = stats.gennorm([[0.5, 1.], [2., 5.]])
|
1389
|
+
dist.random_state = rng
|
1387
1390
|
rvs = dist.rvs(size=[1000, 2, 2])
|
1388
1391
|
assert stats.kstest(rvs[:, 0, 0], stats.gennorm(0.5).cdf)[1] > 0.1
|
1389
1392
|
assert stats.kstest(rvs[:, 0, 1], stats.gennorm(1.0).cdf)[1] > 0.1
|
@@ -2601,16 +2604,13 @@ class TestPareto:
|
|
2601
2604
|
expected = (scale/x)**b # 2.25e-18
|
2602
2605
|
assert_allclose(p, expected)
|
2603
2606
|
|
2604
|
-
@pytest.fixture(scope='function')
|
2605
|
-
def rng(self):
|
2606
|
-
return np.random.default_rng(1234)
|
2607
|
-
|
2608
2607
|
@pytest.mark.filterwarnings("ignore:invalid value encountered in "
|
2609
2608
|
"double_scalars")
|
2610
2609
|
@pytest.mark.parametrize("rvs_shape", [1, 2])
|
2611
2610
|
@pytest.mark.parametrize("rvs_loc", [0, 2])
|
2612
2611
|
@pytest.mark.parametrize("rvs_scale", [1, 5])
|
2613
|
-
def test_fit(self, rvs_shape, rvs_loc, rvs_scale
|
2612
|
+
def test_fit(self, rvs_shape, rvs_loc, rvs_scale):
|
2613
|
+
rng = np.random.default_rng(1234)
|
2614
2614
|
data = stats.pareto.rvs(size=100, b=rvs_shape, scale=rvs_scale,
|
2615
2615
|
loc=rvs_loc, random_state=rng)
|
2616
2616
|
|
@@ -2641,7 +2641,8 @@ class TestPareto:
|
|
2641
2641
|
if False in p])
|
2642
2642
|
@np.errstate(invalid="ignore")
|
2643
2643
|
def test_fit_MLE_comp_optimizer(self, rvs_shape, rvs_loc, rvs_scale,
|
2644
|
-
fix_shape, fix_loc, fix_scale
|
2644
|
+
fix_shape, fix_loc, fix_scale):
|
2645
|
+
rng = np.random.default_rng(1234)
|
2645
2646
|
data = stats.pareto.rvs(size=100, b=rvs_shape, scale=rvs_scale,
|
2646
2647
|
loc=rvs_loc, random_state=rng)
|
2647
2648
|
|
@@ -2673,7 +2674,8 @@ class TestPareto:
|
|
2673
2674
|
assert_raises(FitDataError, stats.pareto.fit, [5, 2, 3], floc=1,
|
2674
2675
|
fscale=3)
|
2675
2676
|
|
2676
|
-
def test_negative_data(self
|
2677
|
+
def test_negative_data(self):
|
2678
|
+
rng = np.random.default_rng(1234)
|
2677
2679
|
data = stats.pareto.rvs(loc=-130, b=1, size=100, random_state=rng)
|
2678
2680
|
assert_array_less(data, 0)
|
2679
2681
|
# The purpose of this test is to make sure that no runtime warnings are
|
@@ -3345,6 +3347,22 @@ class TestInvgauss:
|
|
3345
3347
|
def test_entropy(self, mu, ref):
|
3346
3348
|
assert_allclose(stats.invgauss.entropy(mu), ref, rtol=5e-14)
|
3347
3349
|
|
3350
|
+
def test_mu_inf_gh13666(self):
|
3351
|
+
# invgauss methods should return correct result when mu=inf
|
3352
|
+
# invgauss as mu -> oo is invgamma with shape and scale 0.5;
|
3353
|
+
# see gh-13666 and gh-22496
|
3354
|
+
dist = stats.invgauss(mu=np.inf)
|
3355
|
+
dist0 = stats.invgamma(0.5, scale=0.5)
|
3356
|
+
x, p = 1., 0.5
|
3357
|
+
assert_allclose(dist.logpdf(x), dist0.logpdf(x))
|
3358
|
+
assert_allclose(dist.pdf(x), dist0.pdf(x))
|
3359
|
+
assert_allclose(dist.logcdf(x), dist0.logcdf(x))
|
3360
|
+
assert_allclose(dist.cdf(x), dist0.cdf(x))
|
3361
|
+
assert_allclose(dist.logsf(x), dist0.logsf(x))
|
3362
|
+
assert_allclose(dist.sf(x), dist0.sf(x))
|
3363
|
+
assert_allclose(dist.ppf(p), dist0.ppf(p))
|
3364
|
+
assert_allclose(dist.isf(p), dist0.isf(p))
|
3365
|
+
|
3348
3366
|
|
3349
3367
|
class TestLandau:
|
3350
3368
|
@pytest.mark.parametrize('name', ['pdf', 'cdf', 'sf', 'ppf', 'isf'])
|
@@ -4168,9 +4186,9 @@ class TestSkewCauchy:
|
|
4168
4186
|
# qsgt(cdf, mu=0, lambda=lambda, sigma=1, q=1/2, mean.cent=FALSE,
|
4169
4187
|
# var.adj = sqrt(2))
|
4170
4188
|
|
4171
|
-
np.random.
|
4172
|
-
a =
|
4173
|
-
x =
|
4189
|
+
rng = np.random.RandomState(0)
|
4190
|
+
a = rng.rand(10) * 2 - 1
|
4191
|
+
x = rng.rand(10) * 10 - 5
|
4174
4192
|
pdf = [0.039473975217333909, 0.305829714049903223, 0.24140158118994162,
|
4175
4193
|
0.019585772402693054, 0.021436553695989482, 0.00909817103867518,
|
4176
4194
|
0.01658423410016873, 0.071083288030394126, 0.103250045941454524,
|
@@ -4284,22 +4302,24 @@ class TestSkewNorm:
|
|
4284
4302
|
stats.norm.pdf(x))
|
4285
4303
|
|
4286
4304
|
def test_rvs(self):
|
4305
|
+
rng = check_random_state(1234)
|
4287
4306
|
shape = (3, 4, 5)
|
4288
|
-
x = stats.skewnorm.rvs(a=0.75, size=shape, random_state=
|
4307
|
+
x = stats.skewnorm.rvs(a=0.75, size=shape, random_state=rng)
|
4289
4308
|
assert_equal(shape, x.shape)
|
4290
4309
|
|
4291
|
-
x = stats.skewnorm.rvs(a=-3, size=shape, random_state=
|
4310
|
+
x = stats.skewnorm.rvs(a=-3, size=shape, random_state=rng)
|
4292
4311
|
assert_equal(shape, x.shape)
|
4293
4312
|
|
4294
4313
|
def test_moments(self):
|
4314
|
+
rng = check_random_state(1234)
|
4295
4315
|
X = stats.skewnorm.rvs(a=4, size=int(1e6), loc=5, scale=2,
|
4296
|
-
random_state=
|
4316
|
+
random_state=rng)
|
4297
4317
|
expected = [np.mean(X), np.var(X), stats.skew(X), stats.kurtosis(X)]
|
4298
4318
|
computed = stats.skewnorm.stats(a=4, loc=5, scale=2, moments='mvsk')
|
4299
4319
|
assert_array_almost_equal(computed, expected, decimal=2)
|
4300
4320
|
|
4301
4321
|
X = stats.skewnorm.rvs(a=-4, size=int(1e6), loc=5, scale=2,
|
4302
|
-
random_state=
|
4322
|
+
random_state=rng)
|
4303
4323
|
expected = [np.mean(X), np.var(X), stats.skew(X), stats.kurtosis(X)]
|
4304
4324
|
computed = stats.skewnorm.stats(a=-4, loc=5, scale=2, moments='mvsk')
|
4305
4325
|
assert_array_almost_equal(computed, expected, decimal=2)
|
@@ -5145,8 +5165,8 @@ class TestBetaPrime:
|
|
5145
5165
|
# Testing for gh-18634 revealed that `betaprime` raised a
|
5146
5166
|
# NotImplementedError for higher moments. Check that this is
|
5147
5167
|
# resolved. Parameters are arbitrary but lie on either side of the
|
5148
|
-
# moment order (5) to test both branches of `
|
5149
|
-
# values produced with Mathematica, e.g.
|
5168
|
+
# moment order (5) to test both branches of `xpx.apply_where`.
|
5169
|
+
# Reference values produced with Mathematica, e.g.
|
5150
5170
|
# `Moment[BetaPrimeDistribution[2,7],5]`
|
5151
5171
|
ref = [np.inf, 0.867096912929055]
|
5152
5172
|
res = stats.betaprime(2, [4.2, 7.1]).moment(5)
|
@@ -5742,6 +5762,7 @@ class TestLevyStable:
|
|
5742
5762
|
),
|
5743
5763
|
]
|
5744
5764
|
)
|
5765
|
+
@pytest.mark.thread_unsafe
|
5745
5766
|
def test_pdf_nolan_samples(
|
5746
5767
|
self, nolan_pdf_sample_data, pct_range, alpha_range, beta_range
|
5747
5768
|
):
|
@@ -5957,6 +5978,7 @@ class TestLevyStable:
|
|
5957
5978
|
),
|
5958
5979
|
]
|
5959
5980
|
)
|
5981
|
+
@pytest.mark.thread_unsafe
|
5960
5982
|
def test_cdf_nolan_samples(
|
5961
5983
|
self, nolan_cdf_sample_data, pct_range, alpha_range, beta_range
|
5962
5984
|
):
|
@@ -6307,7 +6329,11 @@ class TestLevyStable:
|
|
6307
6329
|
expected,
|
6308
6330
|
)
|
6309
6331
|
|
6310
|
-
|
6332
|
+
@pytest.fixture
|
6333
|
+
def levy_stable_lock(self):
|
6334
|
+
return threading.Lock()
|
6335
|
+
|
6336
|
+
def test_frozen_parameterization_gh20821(self, levy_stable_lock):
|
6311
6337
|
# gh-20821 reported that frozen distributions ignore the parameterization.
|
6312
6338
|
# Check that this is resolved and that the frozen distribution's
|
6313
6339
|
# parameterization can be changed independently of stats.levy_stable
|
@@ -6316,37 +6342,39 @@ class TestLevyStable:
|
|
6316
6342
|
unfrozen = stats.levy_stable
|
6317
6343
|
frozen = stats.levy_stable(**shapes)
|
6318
6344
|
|
6319
|
-
|
6320
|
-
|
6321
|
-
|
6322
|
-
|
6323
|
-
|
6324
|
-
|
6325
|
-
|
6326
|
-
|
6327
|
-
|
6328
|
-
|
6329
|
-
|
6330
|
-
|
6331
|
-
|
6332
|
-
|
6345
|
+
with levy_stable_lock:
|
6346
|
+
unfrozen.parameterization = "S0"
|
6347
|
+
frozen.parameterization = "S1"
|
6348
|
+
unfrozen_a = unfrozen.rvs(**shapes, size=10, random_state=rng(329823498))
|
6349
|
+
frozen_a = frozen.rvs(size=10, random_state=rng(329823498))
|
6350
|
+
assert not np.any(frozen_a == unfrozen_a)
|
6351
|
+
|
6352
|
+
unfrozen.parameterization = "S1"
|
6353
|
+
frozen.parameterization = "S0"
|
6354
|
+
unfrozen_b = unfrozen.rvs(**shapes, size=10, random_state=rng(329823498))
|
6355
|
+
frozen_b = frozen.rvs(size=10, random_state=rng(329823498))
|
6356
|
+
assert_equal(frozen_b, unfrozen_a)
|
6357
|
+
assert_equal(unfrozen_b, frozen_a)
|
6358
|
+
|
6359
|
+
def test_frozen_parameterization_gh20821b(self, levy_stable_lock):
|
6333
6360
|
# Check that the parameterization of the frozen distribution is that of
|
6334
6361
|
# the unfrozen distribution at the time of freezing
|
6335
6362
|
rng = np.random.default_rng
|
6336
6363
|
shapes = dict(alpha=1.9, beta=0.1, loc=0.0, scale=1.0)
|
6337
6364
|
unfrozen = stats.levy_stable
|
6338
6365
|
|
6339
|
-
|
6340
|
-
|
6341
|
-
|
6342
|
-
|
6343
|
-
|
6366
|
+
with levy_stable_lock:
|
6367
|
+
unfrozen.parameterization = "S0"
|
6368
|
+
frozen = stats.levy_stable(**shapes)
|
6369
|
+
unfrozen_a = unfrozen.rvs(**shapes, size=10, random_state=rng(329823498))
|
6370
|
+
frozen_a = frozen.rvs(size=10, random_state=rng(329823498))
|
6371
|
+
assert_equal(frozen_a, unfrozen_a)
|
6344
6372
|
|
6345
|
-
|
6346
|
-
|
6347
|
-
|
6348
|
-
|
6349
|
-
|
6373
|
+
unfrozen.parameterization = "S1"
|
6374
|
+
frozen = stats.levy_stable(**shapes)
|
6375
|
+
unfrozen_b = unfrozen.rvs(**shapes, size=10, random_state=rng(329823498))
|
6376
|
+
frozen_b = frozen.rvs(size=10, random_state=rng(329823498))
|
6377
|
+
assert_equal(frozen_b, unfrozen_b)
|
6350
6378
|
|
6351
6379
|
|
6352
6380
|
class TestArrayArgument: # test for ticket:992
|
@@ -6994,6 +7022,7 @@ class TestExpect:
|
|
6994
7022
|
assert_allclose(res,
|
6995
7023
|
sum(_ for _ in range(lo, hi)) / (hi - lo), atol=1e-15)
|
6996
7024
|
|
7025
|
+
@pytest.mark.thread_unsafe
|
6997
7026
|
def test_zipf(self):
|
6998
7027
|
# Test that there is no infinite loop even if the sum diverges
|
6999
7028
|
assert_warns(RuntimeWarning, stats.zipf.expect,
|
@@ -7921,24 +7950,6 @@ class TestTrapezoid:
|
|
7921
7950
|
|
7922
7951
|
assert_allclose(v, res.T.reshape(v.shape), atol=1e-15)
|
7923
7952
|
|
7924
|
-
def test_trapz(self):
|
7925
|
-
# Basic test for alias
|
7926
|
-
x = np.linspace(0, 1, 10)
|
7927
|
-
with pytest.deprecated_call(match="`trapz.pdf` is deprecated"):
|
7928
|
-
result = stats.trapz.pdf(x, 0, 1)
|
7929
|
-
assert_almost_equal(result, stats.uniform.pdf(x))
|
7930
|
-
|
7931
|
-
@pytest.mark.parametrize('method', ['pdf', 'logpdf', 'cdf', 'logcdf',
|
7932
|
-
'sf', 'logsf', 'ppf', 'isf'])
|
7933
|
-
def test_trapz_deprecation(self, method):
|
7934
|
-
c, d = 0.2, 0.8
|
7935
|
-
expected = getattr(stats.trapezoid, method)(1, c, d)
|
7936
|
-
with pytest.deprecated_call(
|
7937
|
-
match=f"`trapz.{method}` is deprecated",
|
7938
|
-
):
|
7939
|
-
result = getattr(stats.trapz, method)(1, c, d)
|
7940
|
-
assert result == expected
|
7941
|
-
|
7942
7953
|
|
7943
7954
|
class TestTriang:
|
7944
7955
|
def test_edge_cases(self):
|
@@ -8520,9 +8531,9 @@ def test_nan_arguments_gh_issue_1362():
|
|
8520
8531
|
|
8521
8532
|
|
8522
8533
|
def test_frozen_fit_ticket_1536():
|
8523
|
-
np.random.
|
8534
|
+
rng = np.random.default_rng(5678)
|
8524
8535
|
true = np.array([0.25, 0., 0.5])
|
8525
|
-
x = stats.lognorm.rvs(true[0], true[1], true[2], size=100)
|
8536
|
+
x = stats.lognorm.rvs(true[0], true[1], true[2], size=100, random_state=rng)
|
8526
8537
|
|
8527
8538
|
with np.errstate(divide='ignore'):
|
8528
8539
|
params = np.array(stats.lognorm.fit(x, floc=0.))
|
@@ -8538,10 +8549,10 @@ def test_frozen_fit_ticket_1536():
|
|
8538
8549
|
params = np.array(stats.lognorm.fit(x, f0=0.25, floc=0))
|
8539
8550
|
assert_almost_equal(params, true, decimal=2)
|
8540
8551
|
|
8541
|
-
np.random.
|
8552
|
+
rng = np.random.default_rng(5678)
|
8542
8553
|
loc = 1
|
8543
8554
|
floc = 0.9
|
8544
|
-
x = stats.norm.rvs(loc, 2., size=100)
|
8555
|
+
x = stats.norm.rvs(loc, 2., size=100, random_state=rng)
|
8545
8556
|
params = np.array(stats.norm.fit(x, floc=floc))
|
8546
8557
|
expected = np.array([floc, np.sqrt(((x-floc)**2).mean())])
|
8547
8558
|
assert_almost_equal(params, expected, decimal=4)
|
@@ -8549,8 +8560,8 @@ def test_frozen_fit_ticket_1536():
|
|
8549
8560
|
|
8550
8561
|
def test_regression_ticket_1530():
|
8551
8562
|
# Check the starting value works for Cauchy distribution fit.
|
8552
|
-
np.random.
|
8553
|
-
rvs = stats.cauchy.rvs(size=100)
|
8563
|
+
rng = np.random.default_rng(654321)
|
8564
|
+
rvs = stats.cauchy.rvs(size=100, random_state=rng)
|
8554
8565
|
params = stats.cauchy.fit(rvs)
|
8555
8566
|
expected = (0.045, 1.142)
|
8556
8567
|
assert_almost_equal(params, expected, decimal=1)
|
@@ -8558,8 +8569,8 @@ def test_regression_ticket_1530():
|
|
8558
8569
|
|
8559
8570
|
def test_gh_pr_4806():
|
8560
8571
|
# Check starting values for Cauchy distribution fit.
|
8561
|
-
np.random.
|
8562
|
-
x =
|
8572
|
+
rng = np.random.RandomState(1234)
|
8573
|
+
x = rng.randn(42)
|
8563
8574
|
for offset in 10000.0, 1222333444.0:
|
8564
8575
|
loc, scale = stats.cauchy.fit(x + offset)
|
8565
8576
|
assert_allclose(loc, offset, atol=1.0)
|
@@ -9940,6 +9951,15 @@ class TestWrapCauchy:
|
|
9940
9951
|
assert_allclose(p[0], np.arctan(cr*np.tan(x1/2))/np.pi)
|
9941
9952
|
assert_allclose(p[1], 1 - np.arctan(cr*np.tan(np.pi - x2/2))/np.pi)
|
9942
9953
|
|
9954
|
+
@pytest.mark.parametrize('c', [1e-10, 1e-1])
|
9955
|
+
@pytest.mark.parametrize('loc', [-100, -2*np.pi, -np.pi, 0, np.pi, 2*np.pi, 100])
|
9956
|
+
@pytest.mark.parametrize('scale', [1e-10, 1, 1e10])
|
9957
|
+
def test_rvs_lie_on_circle(self, c, loc, scale):
|
9958
|
+
# Check that the random variates lie in range [0, 2*pi]
|
9959
|
+
x = stats.wrapcauchy.rvs(c=c, loc=loc, scale=scale, size=1000)
|
9960
|
+
assert np.all(x >= 0)
|
9961
|
+
assert np.all(x <= 2 * np.pi)
|
9962
|
+
|
9943
9963
|
|
9944
9964
|
def test_rvs_no_size_error():
|
9945
9965
|
# _rvs methods must have parameter `size`; see gh-11394
|