scipy 1.15.3__cp312-cp312-macosx_14_0_arm64.whl → 1.16.0rc2__cp312-cp312-macosx_14_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) hide show
  1. scipy/__config__.py +4 -4
  2. scipy/__init__.py +3 -6
  3. scipy/_cyutility.cpython-312-darwin.so +0 -0
  4. scipy/_lib/_array_api.py +486 -161
  5. scipy/_lib/_array_api_compat_vendor.py +9 -0
  6. scipy/_lib/_bunch.py +4 -0
  7. scipy/_lib/_ccallback_c.cpython-312-darwin.so +0 -0
  8. scipy/_lib/_docscrape.py +1 -1
  9. scipy/_lib/_elementwise_iterative_method.py +15 -26
  10. scipy/_lib/_sparse.py +41 -0
  11. scipy/_lib/_test_deprecation_call.cpython-312-darwin.so +0 -0
  12. scipy/_lib/_test_deprecation_def.cpython-312-darwin.so +0 -0
  13. scipy/_lib/_testutils.py +6 -2
  14. scipy/_lib/_util.py +222 -125
  15. scipy/_lib/array_api_compat/__init__.py +4 -4
  16. scipy/_lib/array_api_compat/_internal.py +19 -6
  17. scipy/_lib/array_api_compat/common/__init__.py +1 -1
  18. scipy/_lib/array_api_compat/common/_aliases.py +365 -193
  19. scipy/_lib/array_api_compat/common/_fft.py +94 -64
  20. scipy/_lib/array_api_compat/common/_helpers.py +413 -180
  21. scipy/_lib/array_api_compat/common/_linalg.py +116 -40
  22. scipy/_lib/array_api_compat/common/_typing.py +179 -10
  23. scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
  24. scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
  25. scipy/_lib/array_api_compat/cupy/_info.py +16 -6
  26. scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
  27. scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
  28. scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
  29. scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
  30. scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
  31. scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
  32. scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
  33. scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
  34. scipy/_lib/array_api_compat/numpy/_info.py +36 -16
  35. scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
  36. scipy/_lib/array_api_compat/numpy/fft.py +11 -5
  37. scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
  38. scipy/_lib/array_api_compat/torch/__init__.py +3 -5
  39. scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
  40. scipy/_lib/array_api_compat/torch/_info.py +27 -16
  41. scipy/_lib/array_api_compat/torch/_typing.py +3 -0
  42. scipy/_lib/array_api_compat/torch/fft.py +17 -18
  43. scipy/_lib/array_api_compat/torch/linalg.py +16 -16
  44. scipy/_lib/array_api_extra/__init__.py +26 -3
  45. scipy/_lib/array_api_extra/_delegation.py +171 -0
  46. scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
  47. scipy/_lib/array_api_extra/_lib/_at.py +463 -0
  48. scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
  49. scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
  50. scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
  51. scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
  52. scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
  53. scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
  54. scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
  55. scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
  56. scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
  57. scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
  58. scipy/_lib/array_api_extra/testing.py +359 -0
  59. scipy/_lib/decorator.py +2 -2
  60. scipy/_lib/doccer.py +1 -7
  61. scipy/_lib/messagestream.cpython-312-darwin.so +0 -0
  62. scipy/_lib/pyprima/__init__.py +212 -0
  63. scipy/_lib/pyprima/cobyla/__init__.py +0 -0
  64. scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
  65. scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
  66. scipy/_lib/pyprima/cobyla/geometry.py +226 -0
  67. scipy/_lib/pyprima/cobyla/initialize.py +215 -0
  68. scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
  69. scipy/_lib/pyprima/cobyla/update.py +289 -0
  70. scipy/_lib/pyprima/common/__init__.py +0 -0
  71. scipy/_lib/pyprima/common/_bounds.py +34 -0
  72. scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
  73. scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
  74. scipy/_lib/pyprima/common/_project.py +173 -0
  75. scipy/_lib/pyprima/common/checkbreak.py +93 -0
  76. scipy/_lib/pyprima/common/consts.py +47 -0
  77. scipy/_lib/pyprima/common/evaluate.py +99 -0
  78. scipy/_lib/pyprima/common/history.py +38 -0
  79. scipy/_lib/pyprima/common/infos.py +30 -0
  80. scipy/_lib/pyprima/common/linalg.py +435 -0
  81. scipy/_lib/pyprima/common/message.py +290 -0
  82. scipy/_lib/pyprima/common/powalg.py +131 -0
  83. scipy/_lib/pyprima/common/preproc.py +277 -0
  84. scipy/_lib/pyprima/common/present.py +5 -0
  85. scipy/_lib/pyprima/common/ratio.py +54 -0
  86. scipy/_lib/pyprima/common/redrho.py +47 -0
  87. scipy/_lib/pyprima/common/selectx.py +296 -0
  88. scipy/_lib/tests/test__util.py +105 -121
  89. scipy/_lib/tests/test_array_api.py +166 -35
  90. scipy/_lib/tests/test_bunch.py +7 -0
  91. scipy/_lib/tests/test_ccallback.py +2 -10
  92. scipy/_lib/tests/test_public_api.py +13 -0
  93. scipy/cluster/_hierarchy.cpython-312-darwin.so +0 -0
  94. scipy/cluster/_optimal_leaf_ordering.cpython-312-darwin.so +0 -0
  95. scipy/cluster/_vq.cpython-312-darwin.so +0 -0
  96. scipy/cluster/hierarchy.py +393 -223
  97. scipy/cluster/tests/test_hierarchy.py +273 -335
  98. scipy/cluster/tests/test_vq.py +45 -61
  99. scipy/cluster/vq.py +39 -35
  100. scipy/conftest.py +263 -157
  101. scipy/constants/_constants.py +4 -1
  102. scipy/constants/tests/test_codata.py +2 -2
  103. scipy/constants/tests/test_constants.py +11 -18
  104. scipy/datasets/_download_all.py +15 -1
  105. scipy/datasets/_fetchers.py +7 -1
  106. scipy/datasets/_utils.py +1 -1
  107. scipy/differentiate/_differentiate.py +25 -25
  108. scipy/differentiate/tests/test_differentiate.py +24 -25
  109. scipy/fft/_basic.py +20 -0
  110. scipy/fft/_helper.py +3 -34
  111. scipy/fft/_pocketfft/helper.py +29 -1
  112. scipy/fft/_pocketfft/tests/test_basic.py +2 -4
  113. scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
  114. scipy/fft/_realtransforms.py +13 -0
  115. scipy/fft/tests/test_basic.py +27 -25
  116. scipy/fft/tests/test_fftlog.py +16 -7
  117. scipy/fft/tests/test_helper.py +18 -34
  118. scipy/fft/tests/test_real_transforms.py +8 -10
  119. scipy/fftpack/convolve.cpython-312-darwin.so +0 -0
  120. scipy/fftpack/tests/test_basic.py +2 -4
  121. scipy/fftpack/tests/test_real_transforms.py +8 -9
  122. scipy/integrate/_bvp.py +9 -3
  123. scipy/integrate/_cubature.py +3 -2
  124. scipy/integrate/_dop.cpython-312-darwin.so +0 -0
  125. scipy/integrate/_lsoda.cpython-312-darwin.so +0 -0
  126. scipy/integrate/_ode.py +9 -2
  127. scipy/integrate/_odepack.cpython-312-darwin.so +0 -0
  128. scipy/integrate/_quad_vec.py +21 -29
  129. scipy/integrate/_quadpack.cpython-312-darwin.so +0 -0
  130. scipy/integrate/_quadpack_py.py +11 -7
  131. scipy/integrate/_quadrature.py +3 -3
  132. scipy/integrate/_rules/_base.py +2 -2
  133. scipy/integrate/_tanhsinh.py +48 -47
  134. scipy/integrate/_test_odeint_banded.cpython-312-darwin.so +0 -0
  135. scipy/integrate/_vode.cpython-312-darwin.so +0 -0
  136. scipy/integrate/tests/test__quad_vec.py +0 -6
  137. scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
  138. scipy/integrate/tests/test_cubature.py +21 -35
  139. scipy/integrate/tests/test_quadrature.py +6 -8
  140. scipy/integrate/tests/test_tanhsinh.py +56 -48
  141. scipy/interpolate/__init__.py +70 -58
  142. scipy/interpolate/_bary_rational.py +22 -22
  143. scipy/interpolate/_bsplines.py +119 -66
  144. scipy/interpolate/_cubic.py +65 -50
  145. scipy/interpolate/_dfitpack.cpython-312-darwin.so +0 -0
  146. scipy/interpolate/_dierckx.cpython-312-darwin.so +0 -0
  147. scipy/interpolate/_fitpack.cpython-312-darwin.so +0 -0
  148. scipy/interpolate/_fitpack2.py +9 -6
  149. scipy/interpolate/_fitpack_impl.py +32 -26
  150. scipy/interpolate/_fitpack_repro.py +23 -19
  151. scipy/interpolate/_interpnd.cpython-312-darwin.so +0 -0
  152. scipy/interpolate/_interpolate.py +30 -12
  153. scipy/interpolate/_ndbspline.py +13 -18
  154. scipy/interpolate/_ndgriddata.py +5 -8
  155. scipy/interpolate/_polyint.py +95 -31
  156. scipy/interpolate/_ppoly.cpython-312-darwin.so +0 -0
  157. scipy/interpolate/_rbf.py +2 -2
  158. scipy/interpolate/_rbfinterp.py +1 -1
  159. scipy/interpolate/_rbfinterp_pythran.cpython-312-darwin.so +0 -0
  160. scipy/interpolate/_rgi.py +31 -26
  161. scipy/interpolate/_rgi_cython.cpython-312-darwin.so +0 -0
  162. scipy/interpolate/dfitpack.py +0 -20
  163. scipy/interpolate/interpnd.py +1 -2
  164. scipy/interpolate/tests/test_bary_rational.py +2 -2
  165. scipy/interpolate/tests/test_bsplines.py +97 -1
  166. scipy/interpolate/tests/test_fitpack2.py +39 -1
  167. scipy/interpolate/tests/test_interpnd.py +32 -20
  168. scipy/interpolate/tests/test_interpolate.py +48 -4
  169. scipy/interpolate/tests/test_rgi.py +2 -1
  170. scipy/io/_fast_matrix_market/__init__.py +2 -0
  171. scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
  172. scipy/io/_harwell_boeing/hb.py +7 -11
  173. scipy/io/_idl.py +5 -7
  174. scipy/io/_netcdf.py +15 -5
  175. scipy/io/_test_fortran.cpython-312-darwin.so +0 -0
  176. scipy/io/arff/tests/test_arffread.py +3 -3
  177. scipy/io/matlab/__init__.py +5 -3
  178. scipy/io/matlab/_mio.py +4 -1
  179. scipy/io/matlab/_mio5.py +19 -13
  180. scipy/io/matlab/_mio5_utils.cpython-312-darwin.so +0 -0
  181. scipy/io/matlab/_mio_utils.cpython-312-darwin.so +0 -0
  182. scipy/io/matlab/_miobase.py +4 -1
  183. scipy/io/matlab/_streams.cpython-312-darwin.so +0 -0
  184. scipy/io/matlab/tests/test_mio.py +46 -18
  185. scipy/io/matlab/tests/test_mio_funcs.py +1 -1
  186. scipy/io/tests/test_mmio.py +7 -1
  187. scipy/io/tests/test_wavfile.py +41 -0
  188. scipy/io/wavfile.py +57 -10
  189. scipy/linalg/_basic.py +113 -86
  190. scipy/linalg/_cythonized_array_utils.cpython-312-darwin.so +0 -0
  191. scipy/linalg/_decomp.py +22 -9
  192. scipy/linalg/_decomp_cholesky.py +28 -13
  193. scipy/linalg/_decomp_cossin.py +45 -30
  194. scipy/linalg/_decomp_interpolative.cpython-312-darwin.so +0 -0
  195. scipy/linalg/_decomp_ldl.py +4 -1
  196. scipy/linalg/_decomp_lu.py +18 -6
  197. scipy/linalg/_decomp_lu_cython.cpython-312-darwin.so +0 -0
  198. scipy/linalg/_decomp_polar.py +2 -0
  199. scipy/linalg/_decomp_qr.py +6 -2
  200. scipy/linalg/_decomp_qz.py +3 -0
  201. scipy/linalg/_decomp_schur.py +3 -1
  202. scipy/linalg/_decomp_svd.py +13 -2
  203. scipy/linalg/_decomp_update.cpython-312-darwin.so +0 -0
  204. scipy/linalg/_expm_frechet.py +4 -0
  205. scipy/linalg/_fblas.cpython-312-darwin.so +0 -0
  206. scipy/linalg/_flapack.cpython-312-darwin.so +0 -0
  207. scipy/linalg/_linalg_pythran.cpython-312-darwin.so +0 -0
  208. scipy/linalg/_matfuncs.py +187 -4
  209. scipy/linalg/_matfuncs_expm.cpython-312-darwin.so +0 -0
  210. scipy/linalg/_matfuncs_schur_sqrtm.cpython-312-darwin.so +0 -0
  211. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  212. scipy/linalg/_matfuncs_sqrtm_triu.cpython-312-darwin.so +0 -0
  213. scipy/linalg/_procrustes.py +2 -0
  214. scipy/linalg/_sketches.py +17 -6
  215. scipy/linalg/_solve_toeplitz.cpython-312-darwin.so +0 -0
  216. scipy/linalg/_solvers.py +7 -2
  217. scipy/linalg/_special_matrices.py +26 -36
  218. scipy/linalg/cython_blas.cpython-312-darwin.so +0 -0
  219. scipy/linalg/cython_lapack.cpython-312-darwin.so +0 -0
  220. scipy/linalg/lapack.py +22 -2
  221. scipy/linalg/tests/_cython_examples/meson.build +7 -0
  222. scipy/linalg/tests/test_basic.py +31 -16
  223. scipy/linalg/tests/test_batch.py +588 -0
  224. scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
  225. scipy/linalg/tests/test_decomp.py +40 -3
  226. scipy/linalg/tests/test_decomp_cossin.py +14 -0
  227. scipy/linalg/tests/test_decomp_ldl.py +1 -1
  228. scipy/linalg/tests/test_lapack.py +115 -7
  229. scipy/linalg/tests/test_matfuncs.py +157 -102
  230. scipy/linalg/tests/test_procrustes.py +0 -7
  231. scipy/linalg/tests/test_solve_toeplitz.py +1 -1
  232. scipy/linalg/tests/test_special_matrices.py +1 -5
  233. scipy/ndimage/__init__.py +1 -0
  234. scipy/ndimage/_cytest.cpython-312-darwin.so +0 -0
  235. scipy/ndimage/_delegators.py +8 -2
  236. scipy/ndimage/_filters.py +453 -5
  237. scipy/ndimage/_interpolation.py +36 -6
  238. scipy/ndimage/_measurements.py +4 -2
  239. scipy/ndimage/_morphology.py +5 -0
  240. scipy/ndimage/_nd_image.cpython-312-darwin.so +0 -0
  241. scipy/ndimage/_ni_docstrings.py +5 -1
  242. scipy/ndimage/_ni_label.cpython-312-darwin.so +0 -0
  243. scipy/ndimage/_ni_support.py +1 -5
  244. scipy/ndimage/_rank_filter_1d.cpython-312-darwin.so +0 -0
  245. scipy/ndimage/_support_alternative_backends.py +18 -6
  246. scipy/ndimage/tests/test_filters.py +370 -259
  247. scipy/ndimage/tests/test_fourier.py +7 -9
  248. scipy/ndimage/tests/test_interpolation.py +68 -61
  249. scipy/ndimage/tests/test_measurements.py +18 -35
  250. scipy/ndimage/tests/test_morphology.py +143 -131
  251. scipy/ndimage/tests/test_splines.py +1 -3
  252. scipy/odr/__odrpack.cpython-312-darwin.so +0 -0
  253. scipy/optimize/_basinhopping.py +13 -7
  254. scipy/optimize/_bglu_dense.cpython-312-darwin.so +0 -0
  255. scipy/optimize/_bracket.py +17 -24
  256. scipy/optimize/_chandrupatla.py +9 -10
  257. scipy/optimize/_cobyla_py.py +104 -123
  258. scipy/optimize/_constraints.py +14 -10
  259. scipy/optimize/_differentiable_functions.py +371 -230
  260. scipy/optimize/_differentialevolution.py +4 -3
  261. scipy/optimize/_direct.cpython-312-darwin.so +0 -0
  262. scipy/optimize/_dual_annealing.py +1 -1
  263. scipy/optimize/_elementwise.py +1 -4
  264. scipy/optimize/_group_columns.cpython-312-darwin.so +0 -0
  265. scipy/optimize/_lbfgsb.cpython-312-darwin.so +0 -0
  266. scipy/optimize/_lbfgsb_py.py +57 -16
  267. scipy/optimize/_linprog_doc.py +2 -2
  268. scipy/optimize/_linprog_highs.py +2 -2
  269. scipy/optimize/_linprog_ip.py +25 -10
  270. scipy/optimize/_linprog_util.py +14 -16
  271. scipy/optimize/_lsap.cpython-312-darwin.so +0 -0
  272. scipy/optimize/_lsq/common.py +3 -3
  273. scipy/optimize/_lsq/dogbox.py +16 -2
  274. scipy/optimize/_lsq/givens_elimination.cpython-312-darwin.so +0 -0
  275. scipy/optimize/_lsq/least_squares.py +198 -126
  276. scipy/optimize/_lsq/lsq_linear.py +6 -6
  277. scipy/optimize/_lsq/trf.py +35 -8
  278. scipy/optimize/_milp.py +3 -1
  279. scipy/optimize/_minimize.py +105 -36
  280. scipy/optimize/_minpack.cpython-312-darwin.so +0 -0
  281. scipy/optimize/_minpack_py.py +21 -14
  282. scipy/optimize/_moduleTNC.cpython-312-darwin.so +0 -0
  283. scipy/optimize/_nnls.py +20 -21
  284. scipy/optimize/_nonlin.py +34 -3
  285. scipy/optimize/_numdiff.py +288 -110
  286. scipy/optimize/_optimize.py +86 -48
  287. scipy/optimize/_pava_pybind.cpython-312-darwin.so +0 -0
  288. scipy/optimize/_remove_redundancy.py +5 -5
  289. scipy/optimize/_root_scalar.py +1 -1
  290. scipy/optimize/_shgo.py +6 -0
  291. scipy/optimize/_shgo_lib/_complex.py +1 -1
  292. scipy/optimize/_slsqp_py.py +216 -124
  293. scipy/optimize/_slsqplib.cpython-312-darwin.so +0 -0
  294. scipy/optimize/_spectral.py +1 -1
  295. scipy/optimize/_tnc.py +8 -1
  296. scipy/optimize/_trlib/_trlib.cpython-312-darwin.so +0 -0
  297. scipy/optimize/_trustregion.py +20 -6
  298. scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
  299. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
  300. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
  301. scipy/optimize/_trustregion_constr/projections.py +12 -8
  302. scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
  303. scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
  304. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
  305. scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
  306. scipy/optimize/_trustregion_exact.py +0 -1
  307. scipy/optimize/_zeros.cpython-312-darwin.so +0 -0
  308. scipy/optimize/_zeros_py.py +97 -17
  309. scipy/optimize/cython_optimize/_zeros.cpython-312-darwin.so +0 -0
  310. scipy/optimize/slsqp.py +0 -1
  311. scipy/optimize/tests/test__basinhopping.py +1 -1
  312. scipy/optimize/tests/test__differential_evolution.py +4 -4
  313. scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
  314. scipy/optimize/tests/test__numdiff.py +66 -22
  315. scipy/optimize/tests/test__remove_redundancy.py +2 -2
  316. scipy/optimize/tests/test__shgo.py +9 -1
  317. scipy/optimize/tests/test_bracket.py +36 -46
  318. scipy/optimize/tests/test_chandrupatla.py +133 -135
  319. scipy/optimize/tests/test_cobyla.py +74 -45
  320. scipy/optimize/tests/test_constraints.py +1 -1
  321. scipy/optimize/tests/test_differentiable_functions.py +226 -6
  322. scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
  323. scipy/optimize/tests/test_least_squares.py +125 -13
  324. scipy/optimize/tests/test_linear_assignment.py +3 -3
  325. scipy/optimize/tests/test_linprog.py +3 -3
  326. scipy/optimize/tests/test_lsq_linear.py +6 -6
  327. scipy/optimize/tests/test_minimize_constrained.py +2 -2
  328. scipy/optimize/tests/test_minpack.py +4 -4
  329. scipy/optimize/tests/test_nnls.py +43 -3
  330. scipy/optimize/tests/test_nonlin.py +36 -0
  331. scipy/optimize/tests/test_optimize.py +95 -17
  332. scipy/optimize/tests/test_slsqp.py +36 -4
  333. scipy/optimize/tests/test_zeros.py +34 -1
  334. scipy/signal/__init__.py +12 -23
  335. scipy/signal/_delegators.py +568 -0
  336. scipy/signal/_filter_design.py +459 -241
  337. scipy/signal/_fir_filter_design.py +262 -90
  338. scipy/signal/_lti_conversion.py +3 -2
  339. scipy/signal/_ltisys.py +118 -91
  340. scipy/signal/_max_len_seq_inner.cpython-312-darwin.so +0 -0
  341. scipy/signal/_peak_finding_utils.cpython-312-darwin.so +0 -0
  342. scipy/signal/_polyutils.py +172 -0
  343. scipy/signal/_short_time_fft.py +519 -70
  344. scipy/signal/_signal_api.py +30 -0
  345. scipy/signal/_signaltools.py +719 -399
  346. scipy/signal/_sigtools.cpython-312-darwin.so +0 -0
  347. scipy/signal/_sosfilt.cpython-312-darwin.so +0 -0
  348. scipy/signal/_spectral_py.py +230 -50
  349. scipy/signal/_spline.cpython-312-darwin.so +0 -0
  350. scipy/signal/_spline_filters.py +108 -68
  351. scipy/signal/_support_alternative_backends.py +73 -0
  352. scipy/signal/_upfirdn.py +4 -1
  353. scipy/signal/_upfirdn_apply.cpython-312-darwin.so +0 -0
  354. scipy/signal/_waveforms.py +2 -11
  355. scipy/signal/_wavelets.py +1 -1
  356. scipy/signal/fir_filter_design.py +1 -0
  357. scipy/signal/spline.py +4 -11
  358. scipy/signal/tests/_scipy_spectral_test_shim.py +2 -171
  359. scipy/signal/tests/test_bsplines.py +114 -79
  360. scipy/signal/tests/test_cont2discrete.py +9 -2
  361. scipy/signal/tests/test_filter_design.py +721 -481
  362. scipy/signal/tests/test_fir_filter_design.py +332 -140
  363. scipy/signal/tests/test_savitzky_golay.py +4 -3
  364. scipy/signal/tests/test_short_time_fft.py +221 -3
  365. scipy/signal/tests/test_signaltools.py +2144 -1348
  366. scipy/signal/tests/test_spectral.py +50 -6
  367. scipy/signal/tests/test_splines.py +161 -96
  368. scipy/signal/tests/test_upfirdn.py +84 -50
  369. scipy/signal/tests/test_waveforms.py +20 -0
  370. scipy/signal/tests/test_windows.py +607 -466
  371. scipy/signal/windows/_windows.py +287 -148
  372. scipy/sparse/__init__.py +23 -4
  373. scipy/sparse/_base.py +270 -108
  374. scipy/sparse/_bsr.py +7 -4
  375. scipy/sparse/_compressed.py +59 -231
  376. scipy/sparse/_construct.py +90 -38
  377. scipy/sparse/_coo.py +115 -181
  378. scipy/sparse/_csc.py +4 -4
  379. scipy/sparse/_csparsetools.cpython-312-darwin.so +0 -0
  380. scipy/sparse/_csr.py +2 -2
  381. scipy/sparse/_data.py +48 -48
  382. scipy/sparse/_dia.py +105 -18
  383. scipy/sparse/_dok.py +0 -23
  384. scipy/sparse/_index.py +4 -4
  385. scipy/sparse/_matrix.py +23 -0
  386. scipy/sparse/_sparsetools.cpython-312-darwin.so +0 -0
  387. scipy/sparse/_sputils.py +37 -22
  388. scipy/sparse/base.py +0 -9
  389. scipy/sparse/bsr.py +0 -14
  390. scipy/sparse/compressed.py +0 -23
  391. scipy/sparse/construct.py +0 -6
  392. scipy/sparse/coo.py +0 -14
  393. scipy/sparse/csc.py +0 -3
  394. scipy/sparse/csgraph/_flow.cpython-312-darwin.so +0 -0
  395. scipy/sparse/csgraph/_matching.cpython-312-darwin.so +0 -0
  396. scipy/sparse/csgraph/_min_spanning_tree.cpython-312-darwin.so +0 -0
  397. scipy/sparse/csgraph/_reordering.cpython-312-darwin.so +0 -0
  398. scipy/sparse/csgraph/_shortest_path.cpython-312-darwin.so +0 -0
  399. scipy/sparse/csgraph/_tools.cpython-312-darwin.so +0 -0
  400. scipy/sparse/csgraph/_traversal.cpython-312-darwin.so +0 -0
  401. scipy/sparse/csgraph/tests/test_matching.py +14 -2
  402. scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
  403. scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
  404. scipy/sparse/csr.py +0 -5
  405. scipy/sparse/data.py +1 -6
  406. scipy/sparse/dia.py +0 -7
  407. scipy/sparse/dok.py +0 -10
  408. scipy/sparse/linalg/_dsolve/_superlu.cpython-312-darwin.so +0 -0
  409. scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
  410. scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
  411. scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-312-darwin.so +0 -0
  412. scipy/sparse/linalg/_eigen/arpack/arpack.py +23 -17
  413. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
  414. scipy/sparse/linalg/_interface.py +17 -18
  415. scipy/sparse/linalg/_isolve/_gcrotmk.py +4 -4
  416. scipy/sparse/linalg/_isolve/iterative.py +51 -45
  417. scipy/sparse/linalg/_isolve/lgmres.py +6 -6
  418. scipy/sparse/linalg/_isolve/minres.py +5 -5
  419. scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
  420. scipy/sparse/linalg/_isolve/utils.py +2 -8
  421. scipy/sparse/linalg/_matfuncs.py +1 -1
  422. scipy/sparse/linalg/_norm.py +1 -1
  423. scipy/sparse/linalg/_propack/_cpropack.cpython-312-darwin.so +0 -0
  424. scipy/sparse/linalg/_propack/_dpropack.cpython-312-darwin.so +0 -0
  425. scipy/sparse/linalg/_propack/_spropack.cpython-312-darwin.so +0 -0
  426. scipy/sparse/linalg/_propack/_zpropack.cpython-312-darwin.so +0 -0
  427. scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
  428. scipy/sparse/linalg/tests/test_pydata_sparse.py +14 -0
  429. scipy/sparse/tests/test_arithmetic1d.py +5 -2
  430. scipy/sparse/tests/test_base.py +214 -42
  431. scipy/sparse/tests/test_common1d.py +7 -7
  432. scipy/sparse/tests/test_construct.py +1 -1
  433. scipy/sparse/tests/test_coo.py +272 -4
  434. scipy/sparse/tests/test_sparsetools.py +5 -0
  435. scipy/sparse/tests/test_sputils.py +36 -7
  436. scipy/spatial/_ckdtree.cpython-312-darwin.so +0 -0
  437. scipy/spatial/_distance_pybind.cpython-312-darwin.so +0 -0
  438. scipy/spatial/_distance_wrap.cpython-312-darwin.so +0 -0
  439. scipy/spatial/_hausdorff.cpython-312-darwin.so +0 -0
  440. scipy/spatial/_qhull.cpython-312-darwin.so +0 -0
  441. scipy/spatial/_voronoi.cpython-312-darwin.so +0 -0
  442. scipy/spatial/distance.py +49 -42
  443. scipy/spatial/tests/test_distance.py +15 -1
  444. scipy/spatial/tests/test_kdtree.py +1 -0
  445. scipy/spatial/tests/test_qhull.py +7 -2
  446. scipy/spatial/transform/__init__.py +5 -3
  447. scipy/spatial/transform/_rigid_transform.cpython-312-darwin.so +0 -0
  448. scipy/spatial/transform/_rotation.cpython-312-darwin.so +0 -0
  449. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  450. scipy/spatial/transform/tests/test_rotation.py +1213 -832
  451. scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
  452. scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
  453. scipy/special/__init__.py +1 -47
  454. scipy/special/_add_newdocs.py +34 -772
  455. scipy/special/_basic.py +22 -25
  456. scipy/special/_comb.cpython-312-darwin.so +0 -0
  457. scipy/special/_ellip_harm_2.cpython-312-darwin.so +0 -0
  458. scipy/special/_gufuncs.cpython-312-darwin.so +0 -0
  459. scipy/special/_logsumexp.py +67 -58
  460. scipy/special/_orthogonal.pyi +1 -1
  461. scipy/special/_specfun.cpython-312-darwin.so +0 -0
  462. scipy/special/_special_ufuncs.cpython-312-darwin.so +0 -0
  463. scipy/special/_spherical_bessel.py +4 -4
  464. scipy/special/_support_alternative_backends.py +212 -119
  465. scipy/special/_test_internal.cpython-312-darwin.so +0 -0
  466. scipy/special/_testutils.py +4 -4
  467. scipy/special/_ufuncs.cpython-312-darwin.so +0 -0
  468. scipy/special/_ufuncs.pyi +1 -0
  469. scipy/special/_ufuncs.pyx +215 -1400
  470. scipy/special/_ufuncs_cxx.cpython-312-darwin.so +0 -0
  471. scipy/special/_ufuncs_cxx.pxd +2 -15
  472. scipy/special/_ufuncs_cxx.pyx +5 -44
  473. scipy/special/_ufuncs_cxx_defs.h +2 -16
  474. scipy/special/_ufuncs_defs.h +0 -8
  475. scipy/special/cython_special.cpython-312-darwin.so +0 -0
  476. scipy/special/cython_special.pxd +1 -1
  477. scipy/special/tests/_cython_examples/meson.build +10 -1
  478. scipy/special/tests/test_basic.py +153 -20
  479. scipy/special/tests/test_boost_ufuncs.py +3 -0
  480. scipy/special/tests/test_cdflib.py +35 -11
  481. scipy/special/tests/test_gammainc.py +16 -0
  482. scipy/special/tests/test_hyp2f1.py +2 -2
  483. scipy/special/tests/test_log1mexp.py +85 -0
  484. scipy/special/tests/test_logsumexp.py +206 -64
  485. scipy/special/tests/test_mpmath.py +1 -0
  486. scipy/special/tests/test_nan_inputs.py +1 -1
  487. scipy/special/tests/test_orthogonal.py +17 -18
  488. scipy/special/tests/test_sf_error.py +3 -2
  489. scipy/special/tests/test_sph_harm.py +6 -7
  490. scipy/special/tests/test_support_alternative_backends.py +211 -76
  491. scipy/stats/__init__.py +4 -1
  492. scipy/stats/_ansari_swilk_statistics.cpython-312-darwin.so +0 -0
  493. scipy/stats/_axis_nan_policy.py +5 -12
  494. scipy/stats/_biasedurn.cpython-312-darwin.so +0 -0
  495. scipy/stats/_continued_fraction.py +387 -0
  496. scipy/stats/_continuous_distns.py +277 -310
  497. scipy/stats/_correlation.py +1 -1
  498. scipy/stats/_covariance.py +6 -3
  499. scipy/stats/_discrete_distns.py +39 -32
  500. scipy/stats/_distn_infrastructure.py +39 -12
  501. scipy/stats/_distribution_infrastructure.py +900 -238
  502. scipy/stats/_entropy.py +9 -10
  503. scipy/{_lib → stats}/_finite_differences.py +1 -1
  504. scipy/stats/_hypotests.py +83 -50
  505. scipy/stats/_kde.py +53 -49
  506. scipy/stats/_ksstats.py +1 -1
  507. scipy/stats/_levy_stable/__init__.py +7 -15
  508. scipy/stats/_levy_stable/levyst.cpython-312-darwin.so +0 -0
  509. scipy/stats/_morestats.py +118 -73
  510. scipy/stats/_mstats_basic.py +13 -17
  511. scipy/stats/_mstats_extras.py +8 -8
  512. scipy/stats/_multivariate.py +89 -113
  513. scipy/stats/_new_distributions.py +97 -20
  514. scipy/stats/_page_trend_test.py +12 -5
  515. scipy/stats/_probability_distribution.py +265 -43
  516. scipy/stats/_qmc.py +14 -9
  517. scipy/stats/_qmc_cy.cpython-312-darwin.so +0 -0
  518. scipy/stats/_qmvnt.py +16 -95
  519. scipy/stats/_qmvnt_cy.cpython-312-darwin.so +0 -0
  520. scipy/stats/_quantile.py +335 -0
  521. scipy/stats/_rcont/rcont.cpython-312-darwin.so +0 -0
  522. scipy/stats/_resampling.py +4 -29
  523. scipy/stats/_sampling.py +1 -1
  524. scipy/stats/_sobol.cpython-312-darwin.so +0 -0
  525. scipy/stats/_stats.cpython-312-darwin.so +0 -0
  526. scipy/stats/_stats_mstats_common.py +21 -2
  527. scipy/stats/_stats_py.py +550 -476
  528. scipy/stats/_stats_pythran.cpython-312-darwin.so +0 -0
  529. scipy/stats/_unuran/unuran_wrapper.cpython-312-darwin.so +0 -0
  530. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  531. scipy/stats/_variation.py +6 -8
  532. scipy/stats/_wilcoxon.py +13 -7
  533. scipy/stats/tests/common_tests.py +6 -4
  534. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  535. scipy/stats/tests/test_continued_fraction.py +173 -0
  536. scipy/stats/tests/test_continuous.py +379 -60
  537. scipy/stats/tests/test_continuous_basic.py +18 -12
  538. scipy/stats/tests/test_discrete_basic.py +14 -8
  539. scipy/stats/tests/test_discrete_distns.py +16 -16
  540. scipy/stats/tests/test_distributions.py +95 -75
  541. scipy/stats/tests/test_entropy.py +40 -48
  542. scipy/stats/tests/test_fit.py +4 -3
  543. scipy/stats/tests/test_hypotests.py +153 -24
  544. scipy/stats/tests/test_kdeoth.py +109 -41
  545. scipy/stats/tests/test_marray.py +289 -0
  546. scipy/stats/tests/test_morestats.py +79 -47
  547. scipy/stats/tests/test_mstats_basic.py +3 -3
  548. scipy/stats/tests/test_multivariate.py +434 -83
  549. scipy/stats/tests/test_qmc.py +13 -10
  550. scipy/stats/tests/test_quantile.py +199 -0
  551. scipy/stats/tests/test_rank.py +119 -112
  552. scipy/stats/tests/test_resampling.py +47 -56
  553. scipy/stats/tests/test_sampling.py +9 -4
  554. scipy/stats/tests/test_stats.py +799 -939
  555. scipy/stats/tests/test_variation.py +8 -6
  556. scipy/version.py +2 -2
  557. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/LICENSE.txt +4 -4
  558. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/METADATA +11 -11
  559. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/RECORD +560 -567
  560. scipy-1.16.0rc2.dist-info/WHEEL +6 -0
  561. scipy/_lib/array_api_extra/_funcs.py +0 -484
  562. scipy/_lib/array_api_extra/_typing.py +0 -8
  563. scipy/interpolate/_bspl.cpython-312-darwin.so +0 -0
  564. scipy/optimize/_cobyla.cpython-312-darwin.so +0 -0
  565. scipy/optimize/_cython_nnls.cpython-312-darwin.so +0 -0
  566. scipy/optimize/_slsqp.cpython-312-darwin.so +0 -0
  567. scipy/spatial/qhull_src/COPYING.txt +0 -38
  568. scipy/special/libsf_error_state.dylib +0 -0
  569. scipy/special/tests/test_log_softmax.py +0 -109
  570. scipy/special/tests/test_xsf_cuda.py +0 -114
  571. scipy/special/xsf/binom.h +0 -89
  572. scipy/special/xsf/cdflib.h +0 -100
  573. scipy/special/xsf/cephes/airy.h +0 -307
  574. scipy/special/xsf/cephes/besselpoly.h +0 -51
  575. scipy/special/xsf/cephes/beta.h +0 -257
  576. scipy/special/xsf/cephes/cbrt.h +0 -131
  577. scipy/special/xsf/cephes/chbevl.h +0 -85
  578. scipy/special/xsf/cephes/chdtr.h +0 -193
  579. scipy/special/xsf/cephes/const.h +0 -87
  580. scipy/special/xsf/cephes/ellie.h +0 -293
  581. scipy/special/xsf/cephes/ellik.h +0 -251
  582. scipy/special/xsf/cephes/ellpe.h +0 -107
  583. scipy/special/xsf/cephes/ellpk.h +0 -117
  584. scipy/special/xsf/cephes/expn.h +0 -260
  585. scipy/special/xsf/cephes/gamma.h +0 -398
  586. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  587. scipy/special/xsf/cephes/hyperg.h +0 -361
  588. scipy/special/xsf/cephes/i0.h +0 -149
  589. scipy/special/xsf/cephes/i1.h +0 -158
  590. scipy/special/xsf/cephes/igam.h +0 -421
  591. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  592. scipy/special/xsf/cephes/igami.h +0 -313
  593. scipy/special/xsf/cephes/j0.h +0 -225
  594. scipy/special/xsf/cephes/j1.h +0 -198
  595. scipy/special/xsf/cephes/jv.h +0 -715
  596. scipy/special/xsf/cephes/k0.h +0 -164
  597. scipy/special/xsf/cephes/k1.h +0 -163
  598. scipy/special/xsf/cephes/kn.h +0 -243
  599. scipy/special/xsf/cephes/lanczos.h +0 -112
  600. scipy/special/xsf/cephes/ndtr.h +0 -275
  601. scipy/special/xsf/cephes/poch.h +0 -85
  602. scipy/special/xsf/cephes/polevl.h +0 -167
  603. scipy/special/xsf/cephes/psi.h +0 -194
  604. scipy/special/xsf/cephes/rgamma.h +0 -111
  605. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  606. scipy/special/xsf/cephes/shichi.h +0 -248
  607. scipy/special/xsf/cephes/sici.h +0 -224
  608. scipy/special/xsf/cephes/sindg.h +0 -221
  609. scipy/special/xsf/cephes/tandg.h +0 -139
  610. scipy/special/xsf/cephes/trig.h +0 -58
  611. scipy/special/xsf/cephes/unity.h +0 -186
  612. scipy/special/xsf/cephes/zeta.h +0 -172
  613. scipy/special/xsf/config.h +0 -304
  614. scipy/special/xsf/digamma.h +0 -205
  615. scipy/special/xsf/error.h +0 -57
  616. scipy/special/xsf/evalpoly.h +0 -47
  617. scipy/special/xsf/expint.h +0 -266
  618. scipy/special/xsf/hyp2f1.h +0 -694
  619. scipy/special/xsf/iv_ratio.h +0 -173
  620. scipy/special/xsf/lambertw.h +0 -150
  621. scipy/special/xsf/loggamma.h +0 -163
  622. scipy/special/xsf/sici.h +0 -200
  623. scipy/special/xsf/tools.h +0 -427
  624. scipy/special/xsf/trig.h +0 -164
  625. scipy/special/xsf/wright_bessel.h +0 -843
  626. scipy/special/xsf/zlog1.h +0 -35
  627. scipy/stats/_mvn.cpython-312-darwin.so +0 -0
  628. scipy-1.15.3.dist-info/WHEEL +0 -4
@@ -3,9 +3,8 @@ import pytest
3
3
  import numpy as np
4
4
  from numpy.testing import assert_allclose, assert_equal, suppress_warnings
5
5
 
6
- from scipy.conftest import array_api_compatible
7
6
  from scipy._lib._util import rng_integers
8
- from scipy._lib._array_api import array_namespace, is_numpy
7
+ from scipy._lib._array_api import is_numpy
9
8
  from scipy._lib._array_api_no_0d import xp_assert_close, xp_assert_equal
10
9
  from scipy import stats, special
11
10
  from scipy.optimize import root
@@ -81,15 +80,15 @@ def test_bootstrap_iv():
81
80
  @pytest.mark.parametrize("axis", [0, 1, 2])
82
81
  def test_bootstrap_batch(method, axis):
83
82
  # for one-sample statistics, batch size shouldn't affect the result
84
- np.random.seed(0)
83
+ rng = np.random.RandomState(0)
85
84
 
86
- x = np.random.rand(10, 11, 12)
85
+ x = rng.rand(10, 11, 12)
87
86
  # SPEC-007 leave one call with random_state to ensure it still works
88
87
  res1 = bootstrap((x,), np.mean, batch=None, method=method,
89
88
  random_state=0, axis=axis, n_resamples=100)
90
- np.random.seed(0)
89
+ rng = np.random.RandomState(0)
91
90
  res2 = bootstrap((x,), np.mean, batch=10, method=method,
92
- axis=axis, n_resamples=100)
91
+ axis=axis, n_resamples=100, random_state=rng)
93
92
 
94
93
  assert_equal(res2.confidence_interval.low, res1.confidence_interval.low)
95
94
  assert_equal(res2.confidence_interval.high, res1.confidence_interval.high)
@@ -99,10 +98,10 @@ def test_bootstrap_batch(method, axis):
99
98
  @pytest.mark.parametrize("method", ['basic', 'percentile', 'BCa'])
100
99
  def test_bootstrap_paired(method):
101
100
  # test that `paired` works as expected
102
- np.random.seed(0)
101
+ rng = np.random.RandomState(0)
103
102
  n = 100
104
- x = np.random.rand(n)
105
- y = np.random.rand(n)
103
+ x = rng.rand(n)
104
+ y = rng.rand(n)
106
105
 
107
106
  def my_statistic(x, y, axis=-1):
108
107
  return ((x-y)**2).mean(axis=axis)
@@ -130,7 +129,7 @@ def test_bootstrap_vectorized(method, axis, paired):
130
129
  # CI and standard_error of each axis-slice is the same as those of the
131
130
  # original 1d sample
132
131
 
133
- np.random.seed(0)
132
+ rng = np.random.RandomState(0)
134
133
 
135
134
  def my_statistic(x, y, z, axis=-1):
136
135
  return x.mean(axis=axis) + y.mean(axis=axis) + z.mean(axis=axis)
@@ -138,9 +137,9 @@ def test_bootstrap_vectorized(method, axis, paired):
138
137
  shape = 10, 11, 12
139
138
  n_samples = shape[axis]
140
139
 
141
- x = np.random.rand(n_samples)
142
- y = np.random.rand(n_samples)
143
- z = np.random.rand(n_samples)
140
+ x = rng.rand(n_samples)
141
+ y = rng.rand(n_samples)
142
+ z = rng.rand(n_samples)
144
143
  res1 = bootstrap((x, y, z), my_statistic, paired=paired, method=method,
145
144
  rng=0, axis=0, n_resamples=100)
146
145
  assert (res1.bootstrap_distribution.shape
@@ -224,11 +223,6 @@ def test_bootstrap_against_R(method, expected):
224
223
  assert_allclose(res.confidence_interval, expected, rtol=0.005)
225
224
 
226
225
 
227
- tests_against_itself_1samp = {"basic": 1780,
228
- "percentile": 1784,
229
- "BCa": 1784}
230
-
231
-
232
226
  def test_multisample_BCa_against_R():
233
227
  # Because bootstrap is stochastic, it's tricky to test against reference
234
228
  # behavior. Here, we show that SciPy's BCa CI matches R wboot's BCa CI
@@ -312,6 +306,11 @@ def test_BCa_acceleration_against_reference():
312
306
  assert_allclose(a_hat, 0.011008228344026734)
313
307
 
314
308
 
309
+ tests_against_itself_1samp = {"basic": 1789,
310
+ "percentile": 1790,
311
+ "BCa": 1789}
312
+
313
+
315
314
  @pytest.mark.slow
316
315
  @pytest.mark.parametrize("method, expected",
317
316
  tests_against_itself_1samp.items())
@@ -320,7 +319,7 @@ def test_bootstrap_against_itself_1samp(method, expected):
320
319
  # to check for unintended changes in behavior. The test also makes sure
321
320
  # that bootstrap works with multi-sample statistics and that the
322
321
  # `axis` argument works as expected / function is vectorized.
323
- np.random.seed(0)
322
+ rng = np.random.default_rng(9123847)
324
323
 
325
324
  n = 100 # size of sample
326
325
  n_resamples = 999 # number of bootstrap resamples used to form each CI
@@ -332,14 +331,15 @@ def test_bootstrap_against_itself_1samp(method, expected):
332
331
 
333
332
  # Do the same thing 2000 times. (The code is fully vectorized.)
334
333
  n_replications = 2000
335
- data = dist.rvs(size=(n_replications, n))
334
+ data = dist.rvs(size=(n_replications, n), random_state=rng)
336
335
  res = bootstrap((data,),
337
336
  statistic=np.mean,
338
337
  confidence_level=confidence_level,
339
338
  n_resamples=n_resamples,
340
339
  batch=50,
341
340
  method=method,
342
- axis=-1)
341
+ axis=-1,
342
+ rng=rng)
343
343
  ci = res.confidence_interval
344
344
 
345
345
  # ci contains vectors of lower and upper confidence interval bounds
@@ -364,7 +364,7 @@ def test_bootstrap_against_itself_2samp(method, expected):
364
364
  # to check for unintended changes in behavior. The test also makes sure
365
365
  # that bootstrap works with multi-sample statistics and that the
366
366
  # `axis` argument works as expected / function is vectorized.
367
- np.random.seed(0)
367
+ rng = np.random.RandomState(0)
368
368
 
369
369
  n1 = 100 # size of sample 1
370
370
  n2 = 120 # size of sample 2
@@ -384,15 +384,16 @@ def test_bootstrap_against_itself_2samp(method, expected):
384
384
 
385
385
  # Do the same thing 1000 times. (The code is fully vectorized.)
386
386
  n_replications = 1000
387
- data1 = dist1.rvs(size=(n_replications, n1))
388
- data2 = dist2.rvs(size=(n_replications, n2))
387
+ data1 = dist1.rvs(size=(n_replications, n1), random_state=rng)
388
+ data2 = dist2.rvs(size=(n_replications, n2), random_state=rng)
389
389
  res = bootstrap((data1, data2),
390
390
  statistic=my_stat,
391
391
  confidence_level=confidence_level,
392
392
  n_resamples=n_resamples,
393
393
  batch=50,
394
394
  method=method,
395
- axis=-1)
395
+ axis=-1,
396
+ random_state=rng)
396
397
  ci = res.confidence_interval
397
398
 
398
399
  # ci contains vectors of lower and upper confidence interval bounds
@@ -418,10 +419,10 @@ def test_bootstrap_vectorized_3samp(method, axis):
418
419
  assert sample.ndim == 1
419
420
  return statistic(*data, axis=0)
420
421
 
421
- np.random.seed(0)
422
- x = np.random.rand(4, 5)
423
- y = np.random.rand(4, 5)
424
- z = np.random.rand(4, 5)
422
+ rng = np.random.RandomState(0)
423
+ x = rng.rand(4, 5)
424
+ y = rng.rand(4, 5)
425
+ z = rng.rand(4, 5)
425
426
  res1 = bootstrap((x, y, z), statistic, vectorized=True,
426
427
  axis=axis, n_resamples=100, method=method, rng=0)
427
428
  res2 = bootstrap((x, y, z), statistic_1d, vectorized=False,
@@ -443,8 +444,8 @@ def test_bootstrap_vectorized_1samp(method, axis):
443
444
  assert x.ndim == 1
444
445
  return statistic(x, axis=0)
445
446
 
446
- np.random.seed(0)
447
- x = np.random.rand(4, 5)
447
+ rng = np.random.RandomState(0)
448
+ x = rng.rand(4, 5)
448
449
  res1 = bootstrap((x,), statistic, vectorized=True, axis=axis,
449
450
  n_resamples=100, batch=None, method=method,
450
451
  rng=0)
@@ -625,9 +626,9 @@ def test_percentile_along_axis():
625
626
  # _percentile_along_axis gets the q corresponding with each axis slice
626
627
 
627
628
  shape = 10, 20
628
- np.random.seed(0)
629
- x = np.random.rand(*shape)
630
- q = np.random.rand(*shape[:-1]) * 100
629
+ rng = np.random.RandomState(0)
630
+ x = rng.rand(*shape)
631
+ q = rng.rand(*shape[:-1]) * 100
631
632
  y = _resampling._percentile_along_axis(x, q)
632
633
 
633
634
  for i in range(shape[0]):
@@ -653,10 +654,10 @@ def test_vectorize_statistic(axis):
653
654
  # vectorize the non-vectorized statistic
654
655
  statistic2 = _resampling._vectorize_statistic(statistic_1d)
655
656
 
656
- np.random.seed(0)
657
- x = np.random.rand(4, 5, 6)
658
- y = np.random.rand(4, 1, 6)
659
- z = np.random.rand(1, 5, 6)
657
+ rng = np.random.RandomState(0)
658
+ x = rng.rand(4, 5, 6)
659
+ y = rng.rand(4, 1, 6)
660
+ z = rng.rand(1, 5, 6)
660
661
 
661
662
  res1 = statistic(x, y, z, axis=axis)
662
663
  res2 = statistic2(x, y, z, axis=axis)
@@ -683,7 +684,7 @@ def test_vector_valued_statistic(method):
683
684
  np.std(data, axis, ddof=1)])
684
685
 
685
686
  res = bootstrap((sample,), statistic, method=method, axis=-1,
686
- n_resamples=9999, batch=200)
687
+ n_resamples=9999, batch=200, random_state=rng)
687
688
 
688
689
  counts = np.sum((res.confidence_interval.low.T < params)
689
690
  & (res.confidence_interval.high.T > params),
@@ -746,13 +747,11 @@ def test_gh_20850():
746
747
  stats.bootstrap((x.T, y.T), statistic, axis=1)
747
748
  # But even when the shapes *are* the same along axis, the lengths
748
749
  # along other dimensions have to be the same (or `bootstrap` warns).
749
- message = "Ignoring the dimension specified by `axis`..."
750
- with pytest.warns(FutureWarning, match=message):
750
+ message = "Array shapes are incompatible for broadcasting."
751
+ with pytest.raises(ValueError, match=message):
751
752
  stats.bootstrap((x, y[:10, 0]), statistic) # this won't work after 1.16
752
- with pytest.warns(FutureWarning, match=message):
753
- stats.bootstrap((x, y[:10, 0:1]), statistic) # this will
754
- with pytest.warns(FutureWarning, match=message):
755
- stats.bootstrap((x.T, y.T[0:1, :10]), statistic, axis=1) # this will
753
+ stats.bootstrap((x, y[:10, 0:1]), statistic) # this will
754
+ stats.bootstrap((x.T, y.T[0:1, :10]), statistic, axis=1) # this will
756
755
 
757
756
 
758
757
  # --- Test Monte Carlo Hypothesis Test --- #
@@ -773,7 +772,6 @@ class TestMonteCarloHypothesisTest:
773
772
  # return stats.ttest_1samp(x, popmean=0., axis=axis).statistic)
774
773
  return statistic
775
774
 
776
- @array_api_compatible
777
775
  def test_input_validation(self, xp):
778
776
  # test that the appropriate error messages are raised for invalid input
779
777
 
@@ -840,7 +838,6 @@ class TestMonteCarloHypothesisTest:
840
838
  except ValueError as e:
841
839
  assert str(e).startswith(message)
842
840
 
843
- @array_api_compatible
844
841
  def test_input_validation_xp(self, xp):
845
842
  def non_vectorized_statistic(x):
846
843
  return xp.mean(x)
@@ -857,19 +854,17 @@ class TestMonteCarloHypothesisTest:
857
854
  monte_carlo_test(sample, stats.norm.rvs, xp.mean, vectorized=False)
858
855
 
859
856
  @pytest.mark.xslow
860
- @array_api_compatible
861
857
  def test_batch(self, xp):
862
858
  # make sure that the `batch` parameter is respected by checking the
863
859
  # maximum batch size provided in calls to `statistic`
864
860
  rng = np.random.default_rng(23492340193)
865
861
  x = xp.asarray(rng.standard_normal(size=10))
866
862
 
867
- xp_test = array_namespace(x) # numpy.std doesn't have `correction`
868
863
  def statistic(x, axis):
869
864
  batch_size = 1 if x.ndim == 1 else x.shape[0]
870
865
  statistic.batch_size = max(batch_size, statistic.batch_size)
871
866
  statistic.counter += 1
872
- return self.get_statistic(xp_test)(x, axis=axis)
867
+ return self.get_statistic(xp)(x, axis=axis)
873
868
  statistic.counter = 0
874
869
  statistic.batch_size = 0
875
870
 
@@ -896,7 +891,6 @@ class TestMonteCarloHypothesisTest:
896
891
  xp_assert_equal(res1.pvalue, res3.pvalue)
897
892
  xp_assert_equal(res2.pvalue, res3.pvalue)
898
893
 
899
- @array_api_compatible
900
894
  @pytest.mark.parametrize('axis', range(-3, 3))
901
895
  def test_axis_dtype(self, axis, xp):
902
896
  # test that Nd-array samples are handled correctly for valid values
@@ -919,8 +913,7 @@ class TestMonteCarloHypothesisTest:
919
913
  expected = stats.ttest_1samp(x, popmean=0., axis=axis)
920
914
 
921
915
  x = xp.asarray(x, dtype=dtype)
922
- xp_test = array_namespace(x) # numpy.std doesn't have `correction`
923
- statistic = self.get_statistic(xp_test)
916
+ statistic = self.get_statistic(xp)
924
917
  rvs = self.get_rvs(stats.norm.rvs, rng, dtype=dtype, xp=xp)
925
918
 
926
919
  res = monte_carlo_test(x, rvs, statistic, vectorized=True,
@@ -931,7 +924,6 @@ class TestMonteCarloHypothesisTest:
931
924
  xp_assert_close(res.statistic, ref_statistic)
932
925
  xp_assert_close(res.pvalue, ref_pvalue, atol=self.atol)
933
926
 
934
- @array_api_compatible
935
927
  @pytest.mark.parametrize('alternative', ("two-sided", "less", "greater"))
936
928
  def test_alternative(self, alternative, xp):
937
929
  # test that `alternative` is working as expected
@@ -941,8 +933,7 @@ class TestMonteCarloHypothesisTest:
941
933
  ref = stats.ttest_1samp(x, 0., alternative=alternative)
942
934
 
943
935
  x = xp.asarray(x)
944
- xp_test = array_namespace(x) # numpy.std doesn't have `correction`
945
- statistic = self.get_statistic(xp_test)
936
+ statistic = self.get_statistic(xp)
946
937
  rvs = self.get_rvs(stats.norm.rvs, rng, xp=xp)
947
938
 
948
939
  res = monte_carlo_test(x, rvs, statistic, alternative=alternative)
@@ -171,9 +171,9 @@ def test_random_state(method, kwargs):
171
171
  assert_equal(rng1.rvs(100), rng2.rvs(100))
172
172
 
173
173
  # global seed
174
- np.random.seed(123)
174
+ rng = np.random.RandomState(123)
175
175
  rng1 = Method(**kwargs)
176
- rvs1 = rng1.rvs(100)
176
+ rvs1 = rng1.rvs(100, random_state=rng)
177
177
  np.random.seed(None)
178
178
  rng2 = Method(**kwargs, random_state=123)
179
179
  rvs2 = rng2.rvs(100)
@@ -375,6 +375,7 @@ class TestQRVS:
375
375
  @pytest.mark.parametrize('qrng', qrngs)
376
376
  @pytest.mark.parametrize('size_in, size_out', sizes)
377
377
  @pytest.mark.parametrize('d_in, d_out', ds)
378
+ @pytest.mark.thread_unsafe
378
379
  def test_QRVS_shape_consistency(self, qrng, size_in, size_out,
379
380
  d_in, d_out, method):
380
381
  w32 = sys.platform == "win32" and platform.architecture()[0] == "32bit"
@@ -502,6 +503,7 @@ class TestTransformedDensityRejection:
502
503
 
503
504
  @pytest.mark.parametrize("dist, mv_ex",
504
505
  zip(dists, mvs))
506
+ @pytest.mark.thread_unsafe
505
507
  def test_basic(self, dist, mv_ex):
506
508
  with suppress_warnings() as sup:
507
509
  # filter the warnings thrown by UNU.RAN
@@ -1065,6 +1067,7 @@ class TestNumericalInverseHermite:
1065
1067
  @pytest.mark.parametrize("dist, mv_ex",
1066
1068
  zip(dists, mvs))
1067
1069
  @pytest.mark.parametrize("order", [3, 5])
1070
+ @pytest.mark.thread_unsafe
1068
1071
  def test_basic(self, dist, mv_ex, order):
1069
1072
  rng = NumericalInverseHermite(dist, order=order, random_state=42)
1070
1073
  check_cont_samples(rng, dist, mv_ex)
@@ -1134,6 +1137,7 @@ class TestNumericalInverseHermite:
1134
1137
 
1135
1138
  @pytest.mark.parametrize('rng', rngs)
1136
1139
  @pytest.mark.parametrize('size_in, size_out', sizes)
1140
+ @pytest.mark.thread_unsafe
1137
1141
  def test_RVS(self, rng, size_in, size_out):
1138
1142
  dist = StandardNormal()
1139
1143
  fni = NumericalInverseHermite(dist)
@@ -1356,6 +1360,7 @@ class TestSimpleRatioUniforms:
1356
1360
 
1357
1361
  @pytest.mark.parametrize("dist, mv_ex",
1358
1362
  zip(dists, mvs))
1363
+ @pytest.mark.thread_unsafe
1359
1364
  def test_basic(self, dist, mv_ex):
1360
1365
  rng = SimpleRatioUniforms(dist, mode=dist.mode, random_state=42)
1361
1366
  check_cont_samples(rng, dist, mv_ex)
@@ -1426,8 +1431,8 @@ class TestRatioUniforms:
1426
1431
  umax = np.sqrt(f(0))
1427
1432
  gen1 = RatioUniforms(f, umax=umax, vmin=-v, vmax=v, random_state=1234)
1428
1433
  r1 = gen1.rvs(10)
1429
- np.random.seed(1234)
1430
- gen2 = RatioUniforms(f, umax=umax, vmin=-v, vmax=v)
1434
+ rng = np.random.RandomState(1234)
1435
+ gen2 = RatioUniforms(f, umax=umax, vmin=-v, vmax=v, random_state=rng)
1431
1436
  r2 = gen2.rvs(10)
1432
1437
  assert_equal(r1, r2)
1433
1438