scipy 1.15.3__cp311-cp311-musllinux_1_2_aarch64.whl → 1.16.0__cp311-cp311-musllinux_1_2_aarch64.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 (642) hide show
  1. scipy/__config__.py +11 -11
  2. scipy/__init__.py +3 -6
  3. scipy/_cyutility.cpython-311-aarch64-linux-musl.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-311-aarch64-linux-musl.so +0 -0
  8. scipy/_lib/_docscrape.py +1 -1
  9. scipy/_lib/_elementwise_iterative_method.py +15 -26
  10. scipy/_lib/_fpumode.cpython-311-aarch64-linux-musl.so +0 -0
  11. scipy/_lib/_sparse.py +41 -0
  12. scipy/_lib/_test_ccallback.cpython-311-aarch64-linux-musl.so +0 -0
  13. scipy/_lib/_test_deprecation_call.cpython-311-aarch64-linux-musl.so +0 -0
  14. scipy/_lib/_test_deprecation_def.cpython-311-aarch64-linux-musl.so +0 -0
  15. scipy/_lib/_testutils.py +6 -2
  16. scipy/_lib/_uarray/_uarray.cpython-311-aarch64-linux-musl.so +0 -0
  17. scipy/_lib/_util.py +222 -125
  18. scipy/_lib/array_api_compat/__init__.py +4 -4
  19. scipy/_lib/array_api_compat/_internal.py +19 -6
  20. scipy/_lib/array_api_compat/common/__init__.py +1 -1
  21. scipy/_lib/array_api_compat/common/_aliases.py +365 -193
  22. scipy/_lib/array_api_compat/common/_fft.py +94 -64
  23. scipy/_lib/array_api_compat/common/_helpers.py +413 -180
  24. scipy/_lib/array_api_compat/common/_linalg.py +116 -40
  25. scipy/_lib/array_api_compat/common/_typing.py +179 -10
  26. scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
  27. scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
  28. scipy/_lib/array_api_compat/cupy/_info.py +16 -6
  29. scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
  30. scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
  31. scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
  32. scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
  33. scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
  34. scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
  35. scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
  36. scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
  37. scipy/_lib/array_api_compat/numpy/_info.py +36 -16
  38. scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
  39. scipy/_lib/array_api_compat/numpy/fft.py +11 -5
  40. scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
  41. scipy/_lib/array_api_compat/torch/__init__.py +3 -5
  42. scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
  43. scipy/_lib/array_api_compat/torch/_info.py +27 -16
  44. scipy/_lib/array_api_compat/torch/_typing.py +3 -0
  45. scipy/_lib/array_api_compat/torch/fft.py +17 -18
  46. scipy/_lib/array_api_compat/torch/linalg.py +16 -16
  47. scipy/_lib/array_api_extra/__init__.py +26 -3
  48. scipy/_lib/array_api_extra/_delegation.py +171 -0
  49. scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
  50. scipy/_lib/array_api_extra/_lib/_at.py +463 -0
  51. scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
  52. scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
  53. scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
  54. scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
  55. scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
  56. scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
  57. scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
  58. scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
  59. scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
  60. scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
  61. scipy/_lib/array_api_extra/testing.py +359 -0
  62. scipy/_lib/decorator.py +2 -2
  63. scipy/_lib/doccer.py +1 -7
  64. scipy/_lib/messagestream.cpython-311-aarch64-linux-musl.so +0 -0
  65. scipy/_lib/pyprima/__init__.py +212 -0
  66. scipy/_lib/pyprima/cobyla/__init__.py +0 -0
  67. scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
  68. scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
  69. scipy/_lib/pyprima/cobyla/geometry.py +226 -0
  70. scipy/_lib/pyprima/cobyla/initialize.py +215 -0
  71. scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
  72. scipy/_lib/pyprima/cobyla/update.py +289 -0
  73. scipy/_lib/pyprima/common/__init__.py +0 -0
  74. scipy/_lib/pyprima/common/_bounds.py +34 -0
  75. scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
  76. scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
  77. scipy/_lib/pyprima/common/_project.py +173 -0
  78. scipy/_lib/pyprima/common/checkbreak.py +93 -0
  79. scipy/_lib/pyprima/common/consts.py +47 -0
  80. scipy/_lib/pyprima/common/evaluate.py +99 -0
  81. scipy/_lib/pyprima/common/history.py +38 -0
  82. scipy/_lib/pyprima/common/infos.py +30 -0
  83. scipy/_lib/pyprima/common/linalg.py +435 -0
  84. scipy/_lib/pyprima/common/message.py +290 -0
  85. scipy/_lib/pyprima/common/powalg.py +131 -0
  86. scipy/_lib/pyprima/common/preproc.py +277 -0
  87. scipy/_lib/pyprima/common/present.py +5 -0
  88. scipy/_lib/pyprima/common/ratio.py +54 -0
  89. scipy/_lib/pyprima/common/redrho.py +47 -0
  90. scipy/_lib/pyprima/common/selectx.py +296 -0
  91. scipy/_lib/tests/test__util.py +105 -121
  92. scipy/_lib/tests/test_array_api.py +166 -35
  93. scipy/_lib/tests/test_bunch.py +7 -0
  94. scipy/_lib/tests/test_ccallback.py +2 -10
  95. scipy/_lib/tests/test_public_api.py +13 -0
  96. scipy/cluster/_hierarchy.cpython-311-aarch64-linux-musl.so +0 -0
  97. scipy/cluster/_optimal_leaf_ordering.cpython-311-aarch64-linux-musl.so +0 -0
  98. scipy/cluster/_vq.cpython-311-aarch64-linux-musl.so +0 -0
  99. scipy/cluster/hierarchy.py +393 -223
  100. scipy/cluster/tests/test_hierarchy.py +273 -335
  101. scipy/cluster/tests/test_vq.py +45 -61
  102. scipy/cluster/vq.py +39 -35
  103. scipy/conftest.py +282 -151
  104. scipy/constants/_constants.py +4 -1
  105. scipy/constants/tests/test_codata.py +2 -2
  106. scipy/constants/tests/test_constants.py +11 -18
  107. scipy/datasets/_download_all.py +15 -1
  108. scipy/datasets/_fetchers.py +7 -1
  109. scipy/datasets/_utils.py +1 -1
  110. scipy/differentiate/_differentiate.py +25 -25
  111. scipy/differentiate/tests/test_differentiate.py +24 -25
  112. scipy/fft/_basic.py +20 -0
  113. scipy/fft/_helper.py +3 -34
  114. scipy/fft/_pocketfft/helper.py +29 -1
  115. scipy/fft/_pocketfft/pypocketfft.cpython-311-aarch64-linux-musl.so +0 -0
  116. scipy/fft/_pocketfft/tests/test_basic.py +2 -4
  117. scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
  118. scipy/fft/_realtransforms.py +13 -0
  119. scipy/fft/tests/test_basic.py +27 -25
  120. scipy/fft/tests/test_fftlog.py +16 -7
  121. scipy/fft/tests/test_helper.py +18 -34
  122. scipy/fft/tests/test_real_transforms.py +8 -10
  123. scipy/fftpack/convolve.cpython-311-aarch64-linux-musl.so +0 -0
  124. scipy/fftpack/tests/test_basic.py +2 -4
  125. scipy/fftpack/tests/test_real_transforms.py +8 -9
  126. scipy/integrate/_bvp.py +9 -3
  127. scipy/integrate/_cubature.py +3 -2
  128. scipy/integrate/_dop.cpython-311-aarch64-linux-musl.so +0 -0
  129. scipy/integrate/_lsoda.cpython-311-aarch64-linux-musl.so +0 -0
  130. scipy/integrate/_ode.py +9 -2
  131. scipy/integrate/_odepack.cpython-311-aarch64-linux-musl.so +0 -0
  132. scipy/integrate/_quad_vec.py +21 -29
  133. scipy/integrate/_quadpack.cpython-311-aarch64-linux-musl.so +0 -0
  134. scipy/integrate/_quadpack_py.py +11 -7
  135. scipy/integrate/_quadrature.py +3 -3
  136. scipy/integrate/_rules/_base.py +2 -2
  137. scipy/integrate/_tanhsinh.py +48 -47
  138. scipy/integrate/_test_multivariate.cpython-311-aarch64-linux-musl.so +0 -0
  139. scipy/integrate/_test_odeint_banded.cpython-311-aarch64-linux-musl.so +0 -0
  140. scipy/integrate/_vode.cpython-311-aarch64-linux-musl.so +0 -0
  141. scipy/integrate/tests/test__quad_vec.py +0 -6
  142. scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
  143. scipy/integrate/tests/test_cubature.py +21 -35
  144. scipy/integrate/tests/test_quadrature.py +6 -8
  145. scipy/integrate/tests/test_tanhsinh.py +56 -48
  146. scipy/interpolate/__init__.py +70 -58
  147. scipy/interpolate/_bary_rational.py +22 -22
  148. scipy/interpolate/_bsplines.py +119 -66
  149. scipy/interpolate/_cubic.py +65 -50
  150. scipy/interpolate/_dfitpack.cpython-311-aarch64-linux-musl.so +0 -0
  151. scipy/interpolate/_dierckx.cpython-311-aarch64-linux-musl.so +0 -0
  152. scipy/interpolate/_fitpack.cpython-311-aarch64-linux-musl.so +0 -0
  153. scipy/interpolate/_fitpack2.py +9 -6
  154. scipy/interpolate/_fitpack_impl.py +32 -26
  155. scipy/interpolate/_fitpack_repro.py +23 -19
  156. scipy/interpolate/_interpnd.cpython-311-aarch64-linux-musl.so +0 -0
  157. scipy/interpolate/_interpolate.py +30 -12
  158. scipy/interpolate/_ndbspline.py +13 -18
  159. scipy/interpolate/_ndgriddata.py +5 -8
  160. scipy/interpolate/_polyint.py +95 -31
  161. scipy/interpolate/_ppoly.cpython-311-aarch64-linux-musl.so +0 -0
  162. scipy/interpolate/_rbf.py +2 -2
  163. scipy/interpolate/_rbfinterp.py +1 -1
  164. scipy/interpolate/_rbfinterp_pythran.cpython-311-aarch64-linux-musl.so +0 -0
  165. scipy/interpolate/_rgi.py +31 -26
  166. scipy/interpolate/_rgi_cython.cpython-311-aarch64-linux-musl.so +0 -0
  167. scipy/interpolate/dfitpack.py +0 -20
  168. scipy/interpolate/interpnd.py +1 -2
  169. scipy/interpolate/tests/test_bary_rational.py +2 -2
  170. scipy/interpolate/tests/test_bsplines.py +97 -1
  171. scipy/interpolate/tests/test_fitpack2.py +39 -1
  172. scipy/interpolate/tests/test_interpnd.py +32 -20
  173. scipy/interpolate/tests/test_interpolate.py +48 -4
  174. scipy/interpolate/tests/test_rgi.py +2 -1
  175. scipy/io/_fast_matrix_market/__init__.py +2 -0
  176. scipy/io/_fast_matrix_market/_fmm_core.cpython-311-aarch64-linux-musl.so +0 -0
  177. scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
  178. scipy/io/_harwell_boeing/hb.py +7 -11
  179. scipy/io/_idl.py +5 -7
  180. scipy/io/_netcdf.py +15 -5
  181. scipy/io/_test_fortran.cpython-311-aarch64-linux-musl.so +0 -0
  182. scipy/io/arff/tests/test_arffread.py +3 -3
  183. scipy/io/matlab/__init__.py +5 -3
  184. scipy/io/matlab/_mio.py +4 -1
  185. scipy/io/matlab/_mio5.py +19 -13
  186. scipy/io/matlab/_mio5_utils.cpython-311-aarch64-linux-musl.so +0 -0
  187. scipy/io/matlab/_mio_utils.cpython-311-aarch64-linux-musl.so +0 -0
  188. scipy/io/matlab/_miobase.py +4 -1
  189. scipy/io/matlab/_streams.cpython-311-aarch64-linux-musl.so +0 -0
  190. scipy/io/matlab/tests/test_mio.py +46 -18
  191. scipy/io/matlab/tests/test_mio_funcs.py +1 -1
  192. scipy/io/tests/test_mmio.py +7 -1
  193. scipy/io/tests/test_wavfile.py +41 -0
  194. scipy/io/wavfile.py +57 -10
  195. scipy/linalg/_basic.py +113 -86
  196. scipy/linalg/_cythonized_array_utils.cpython-311-aarch64-linux-musl.so +0 -0
  197. scipy/linalg/_decomp.py +22 -9
  198. scipy/linalg/_decomp_cholesky.py +28 -13
  199. scipy/linalg/_decomp_cossin.py +45 -30
  200. scipy/linalg/_decomp_interpolative.cpython-311-aarch64-linux-musl.so +0 -0
  201. scipy/linalg/_decomp_ldl.py +4 -1
  202. scipy/linalg/_decomp_lu.py +18 -6
  203. scipy/linalg/_decomp_lu_cython.cpython-311-aarch64-linux-musl.so +0 -0
  204. scipy/linalg/_decomp_polar.py +2 -0
  205. scipy/linalg/_decomp_qr.py +6 -2
  206. scipy/linalg/_decomp_qz.py +3 -0
  207. scipy/linalg/_decomp_schur.py +3 -1
  208. scipy/linalg/_decomp_svd.py +13 -2
  209. scipy/linalg/_decomp_update.cpython-311-aarch64-linux-musl.so +0 -0
  210. scipy/linalg/_expm_frechet.py +4 -0
  211. scipy/linalg/_fblas.cpython-311-aarch64-linux-musl.so +0 -0
  212. scipy/linalg/_flapack.cpython-311-aarch64-linux-musl.so +0 -0
  213. scipy/linalg/_linalg_pythran.cpython-311-aarch64-linux-musl.so +0 -0
  214. scipy/linalg/_matfuncs.py +187 -4
  215. scipy/linalg/_matfuncs_expm.cpython-311-aarch64-linux-musl.so +0 -0
  216. scipy/linalg/_matfuncs_schur_sqrtm.cpython-311-aarch64-linux-musl.so +0 -0
  217. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  218. scipy/linalg/_matfuncs_sqrtm_triu.cpython-311-aarch64-linux-musl.so +0 -0
  219. scipy/linalg/_procrustes.py +2 -0
  220. scipy/linalg/_sketches.py +17 -6
  221. scipy/linalg/_solve_toeplitz.cpython-311-aarch64-linux-musl.so +0 -0
  222. scipy/linalg/_solvers.py +7 -2
  223. scipy/linalg/_special_matrices.py +26 -36
  224. scipy/linalg/blas.py +35 -24
  225. scipy/linalg/cython_blas.cpython-311-aarch64-linux-musl.so +0 -0
  226. scipy/linalg/cython_lapack.cpython-311-aarch64-linux-musl.so +0 -0
  227. scipy/linalg/lapack.py +22 -2
  228. scipy/linalg/tests/_cython_examples/meson.build +7 -0
  229. scipy/linalg/tests/test_basic.py +31 -16
  230. scipy/linalg/tests/test_batch.py +588 -0
  231. scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
  232. scipy/linalg/tests/test_decomp.py +40 -3
  233. scipy/linalg/tests/test_decomp_cossin.py +14 -0
  234. scipy/linalg/tests/test_decomp_ldl.py +1 -1
  235. scipy/linalg/tests/test_lapack.py +115 -7
  236. scipy/linalg/tests/test_matfuncs.py +157 -102
  237. scipy/linalg/tests/test_procrustes.py +0 -7
  238. scipy/linalg/tests/test_solve_toeplitz.py +1 -1
  239. scipy/linalg/tests/test_special_matrices.py +1 -5
  240. scipy/ndimage/__init__.py +1 -0
  241. scipy/ndimage/_ctest.cpython-311-aarch64-linux-musl.so +0 -0
  242. scipy/ndimage/_cytest.cpython-311-aarch64-linux-musl.so +0 -0
  243. scipy/ndimage/_delegators.py +8 -2
  244. scipy/ndimage/_filters.py +453 -5
  245. scipy/ndimage/_interpolation.py +36 -6
  246. scipy/ndimage/_measurements.py +4 -2
  247. scipy/ndimage/_morphology.py +5 -0
  248. scipy/ndimage/_nd_image.cpython-311-aarch64-linux-musl.so +0 -0
  249. scipy/ndimage/_ni_docstrings.py +5 -1
  250. scipy/ndimage/_ni_label.cpython-311-aarch64-linux-musl.so +0 -0
  251. scipy/ndimage/_ni_support.py +1 -5
  252. scipy/ndimage/_rank_filter_1d.cpython-311-aarch64-linux-musl.so +0 -0
  253. scipy/ndimage/_support_alternative_backends.py +18 -6
  254. scipy/ndimage/tests/test_filters.py +370 -259
  255. scipy/ndimage/tests/test_fourier.py +7 -9
  256. scipy/ndimage/tests/test_interpolation.py +68 -61
  257. scipy/ndimage/tests/test_measurements.py +18 -35
  258. scipy/ndimage/tests/test_morphology.py +143 -131
  259. scipy/ndimage/tests/test_splines.py +1 -3
  260. scipy/odr/__odrpack.cpython-311-aarch64-linux-musl.so +0 -0
  261. scipy/optimize/_basinhopping.py +13 -7
  262. scipy/optimize/_bglu_dense.cpython-311-aarch64-linux-musl.so +0 -0
  263. scipy/optimize/_bracket.py +17 -24
  264. scipy/optimize/_chandrupatla.py +9 -10
  265. scipy/optimize/_cobyla_py.py +104 -123
  266. scipy/optimize/_constraints.py +14 -10
  267. scipy/optimize/_differentiable_functions.py +371 -230
  268. scipy/optimize/_differentialevolution.py +4 -3
  269. scipy/optimize/_direct.cpython-311-aarch64-linux-musl.so +0 -0
  270. scipy/optimize/_dual_annealing.py +1 -1
  271. scipy/optimize/_elementwise.py +1 -4
  272. scipy/optimize/_group_columns.cpython-311-aarch64-linux-musl.so +0 -0
  273. scipy/optimize/_highspy/_core.cpython-311-aarch64-linux-musl.so +0 -0
  274. scipy/optimize/_highspy/_highs_options.cpython-311-aarch64-linux-musl.so +0 -0
  275. scipy/optimize/_lbfgsb.cpython-311-aarch64-linux-musl.so +0 -0
  276. scipy/optimize/_lbfgsb_py.py +80 -24
  277. scipy/optimize/_linprog_doc.py +2 -2
  278. scipy/optimize/_linprog_highs.py +2 -2
  279. scipy/optimize/_linprog_ip.py +25 -10
  280. scipy/optimize/_linprog_util.py +14 -16
  281. scipy/optimize/_lsap.cpython-311-aarch64-linux-musl.so +0 -0
  282. scipy/optimize/_lsq/common.py +3 -3
  283. scipy/optimize/_lsq/dogbox.py +16 -2
  284. scipy/optimize/_lsq/givens_elimination.cpython-311-aarch64-linux-musl.so +0 -0
  285. scipy/optimize/_lsq/least_squares.py +198 -126
  286. scipy/optimize/_lsq/lsq_linear.py +6 -6
  287. scipy/optimize/_lsq/trf.py +35 -8
  288. scipy/optimize/_milp.py +3 -1
  289. scipy/optimize/_minimize.py +105 -36
  290. scipy/optimize/_minpack.cpython-311-aarch64-linux-musl.so +0 -0
  291. scipy/optimize/_minpack_py.py +21 -14
  292. scipy/optimize/_moduleTNC.cpython-311-aarch64-linux-musl.so +0 -0
  293. scipy/optimize/_nnls.py +20 -21
  294. scipy/optimize/_nonlin.py +34 -3
  295. scipy/optimize/_numdiff.py +288 -110
  296. scipy/optimize/_optimize.py +86 -48
  297. scipy/optimize/_pava_pybind.cpython-311-aarch64-linux-musl.so +0 -0
  298. scipy/optimize/_remove_redundancy.py +5 -5
  299. scipy/optimize/_root_scalar.py +1 -1
  300. scipy/optimize/_shgo.py +6 -0
  301. scipy/optimize/_shgo_lib/_complex.py +1 -1
  302. scipy/optimize/_slsqp_py.py +216 -124
  303. scipy/optimize/_slsqplib.cpython-311-aarch64-linux-musl.so +0 -0
  304. scipy/optimize/_spectral.py +1 -1
  305. scipy/optimize/_tnc.py +8 -1
  306. scipy/optimize/_trlib/_trlib.cpython-311-aarch64-linux-musl.so +0 -0
  307. scipy/optimize/_trustregion.py +20 -6
  308. scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
  309. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
  310. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
  311. scipy/optimize/_trustregion_constr/projections.py +12 -8
  312. scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
  313. scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
  314. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
  315. scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
  316. scipy/optimize/_trustregion_exact.py +0 -1
  317. scipy/optimize/_zeros.cpython-311-aarch64-linux-musl.so +0 -0
  318. scipy/optimize/_zeros_py.py +97 -17
  319. scipy/optimize/cython_optimize/_zeros.cpython-311-aarch64-linux-musl.so +0 -0
  320. scipy/optimize/slsqp.py +0 -1
  321. scipy/optimize/tests/test__basinhopping.py +1 -1
  322. scipy/optimize/tests/test__differential_evolution.py +4 -4
  323. scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
  324. scipy/optimize/tests/test__numdiff.py +66 -22
  325. scipy/optimize/tests/test__remove_redundancy.py +2 -2
  326. scipy/optimize/tests/test__shgo.py +9 -1
  327. scipy/optimize/tests/test_bracket.py +36 -46
  328. scipy/optimize/tests/test_chandrupatla.py +133 -135
  329. scipy/optimize/tests/test_cobyla.py +74 -45
  330. scipy/optimize/tests/test_constraints.py +1 -1
  331. scipy/optimize/tests/test_differentiable_functions.py +226 -6
  332. scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
  333. scipy/optimize/tests/test_least_squares.py +125 -13
  334. scipy/optimize/tests/test_linear_assignment.py +3 -3
  335. scipy/optimize/tests/test_linprog.py +3 -3
  336. scipy/optimize/tests/test_lsq_linear.py +6 -6
  337. scipy/optimize/tests/test_minimize_constrained.py +2 -2
  338. scipy/optimize/tests/test_minpack.py +4 -4
  339. scipy/optimize/tests/test_nnls.py +43 -3
  340. scipy/optimize/tests/test_nonlin.py +36 -0
  341. scipy/optimize/tests/test_optimize.py +98 -20
  342. scipy/optimize/tests/test_slsqp.py +36 -4
  343. scipy/optimize/tests/test_zeros.py +34 -1
  344. scipy/signal/__init__.py +12 -23
  345. scipy/signal/_delegators.py +568 -0
  346. scipy/signal/_filter_design.py +459 -241
  347. scipy/signal/_fir_filter_design.py +262 -90
  348. scipy/signal/_lti_conversion.py +3 -2
  349. scipy/signal/_ltisys.py +118 -91
  350. scipy/signal/_max_len_seq_inner.cpython-311-aarch64-linux-musl.so +0 -0
  351. scipy/signal/_peak_finding_utils.cpython-311-aarch64-linux-musl.so +0 -0
  352. scipy/signal/_polyutils.py +172 -0
  353. scipy/signal/_short_time_fft.py +519 -70
  354. scipy/signal/_signal_api.py +30 -0
  355. scipy/signal/_signaltools.py +719 -399
  356. scipy/signal/_sigtools.cpython-311-aarch64-linux-musl.so +0 -0
  357. scipy/signal/_sosfilt.cpython-311-aarch64-linux-musl.so +0 -0
  358. scipy/signal/_spectral_py.py +230 -50
  359. scipy/signal/_spline.cpython-311-aarch64-linux-musl.so +0 -0
  360. scipy/signal/_spline_filters.py +108 -68
  361. scipy/signal/_support_alternative_backends.py +73 -0
  362. scipy/signal/_upfirdn.py +4 -1
  363. scipy/signal/_upfirdn_apply.cpython-311-aarch64-linux-musl.so +0 -0
  364. scipy/signal/_waveforms.py +2 -11
  365. scipy/signal/_wavelets.py +1 -1
  366. scipy/signal/fir_filter_design.py +1 -0
  367. scipy/signal/spline.py +4 -11
  368. scipy/signal/tests/_scipy_spectral_test_shim.py +2 -171
  369. scipy/signal/tests/test_bsplines.py +114 -79
  370. scipy/signal/tests/test_cont2discrete.py +9 -2
  371. scipy/signal/tests/test_filter_design.py +721 -481
  372. scipy/signal/tests/test_fir_filter_design.py +332 -140
  373. scipy/signal/tests/test_savitzky_golay.py +4 -3
  374. scipy/signal/tests/test_short_time_fft.py +221 -3
  375. scipy/signal/tests/test_signaltools.py +2145 -1349
  376. scipy/signal/tests/test_spectral.py +50 -6
  377. scipy/signal/tests/test_splines.py +161 -96
  378. scipy/signal/tests/test_upfirdn.py +84 -50
  379. scipy/signal/tests/test_waveforms.py +20 -0
  380. scipy/signal/tests/test_windows.py +607 -466
  381. scipy/signal/windows/_windows.py +287 -148
  382. scipy/sparse/__init__.py +23 -4
  383. scipy/sparse/_base.py +270 -108
  384. scipy/sparse/_bsr.py +7 -4
  385. scipy/sparse/_compressed.py +59 -231
  386. scipy/sparse/_construct.py +90 -38
  387. scipy/sparse/_coo.py +115 -181
  388. scipy/sparse/_csc.py +4 -4
  389. scipy/sparse/_csparsetools.cpython-311-aarch64-linux-musl.so +0 -0
  390. scipy/sparse/_csr.py +2 -2
  391. scipy/sparse/_data.py +48 -48
  392. scipy/sparse/_dia.py +105 -18
  393. scipy/sparse/_dok.py +0 -23
  394. scipy/sparse/_index.py +4 -4
  395. scipy/sparse/_matrix.py +23 -0
  396. scipy/sparse/_sparsetools.cpython-311-aarch64-linux-musl.so +0 -0
  397. scipy/sparse/_sputils.py +37 -22
  398. scipy/sparse/base.py +0 -9
  399. scipy/sparse/bsr.py +0 -14
  400. scipy/sparse/compressed.py +0 -23
  401. scipy/sparse/construct.py +0 -6
  402. scipy/sparse/coo.py +0 -14
  403. scipy/sparse/csc.py +0 -3
  404. scipy/sparse/csgraph/_flow.cpython-311-aarch64-linux-musl.so +0 -0
  405. scipy/sparse/csgraph/_matching.cpython-311-aarch64-linux-musl.so +0 -0
  406. scipy/sparse/csgraph/_min_spanning_tree.cpython-311-aarch64-linux-musl.so +0 -0
  407. scipy/sparse/csgraph/_reordering.cpython-311-aarch64-linux-musl.so +0 -0
  408. scipy/sparse/csgraph/_shortest_path.cpython-311-aarch64-linux-musl.so +0 -0
  409. scipy/sparse/csgraph/_tools.cpython-311-aarch64-linux-musl.so +0 -0
  410. scipy/sparse/csgraph/_traversal.cpython-311-aarch64-linux-musl.so +0 -0
  411. scipy/sparse/csgraph/tests/test_matching.py +14 -2
  412. scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
  413. scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
  414. scipy/sparse/csr.py +0 -5
  415. scipy/sparse/data.py +1 -6
  416. scipy/sparse/dia.py +0 -7
  417. scipy/sparse/dok.py +0 -10
  418. scipy/sparse/linalg/_dsolve/_superlu.cpython-311-aarch64-linux-musl.so +0 -0
  419. scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
  420. scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
  421. scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-311-aarch64-linux-musl.so +0 -0
  422. scipy/sparse/linalg/_eigen/arpack/arpack.py +23 -17
  423. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
  424. scipy/sparse/linalg/_interface.py +17 -18
  425. scipy/sparse/linalg/_isolve/_gcrotmk.py +4 -4
  426. scipy/sparse/linalg/_isolve/iterative.py +51 -45
  427. scipy/sparse/linalg/_isolve/lgmres.py +6 -6
  428. scipy/sparse/linalg/_isolve/minres.py +5 -5
  429. scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
  430. scipy/sparse/linalg/_isolve/utils.py +2 -8
  431. scipy/sparse/linalg/_matfuncs.py +1 -1
  432. scipy/sparse/linalg/_norm.py +1 -1
  433. scipy/sparse/linalg/_propack/_cpropack.cpython-311-aarch64-linux-musl.so +0 -0
  434. scipy/sparse/linalg/_propack/_dpropack.cpython-311-aarch64-linux-musl.so +0 -0
  435. scipy/sparse/linalg/_propack/_spropack.cpython-311-aarch64-linux-musl.so +0 -0
  436. scipy/sparse/linalg/_propack/_zpropack.cpython-311-aarch64-linux-musl.so +0 -0
  437. scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
  438. scipy/sparse/linalg/tests/test_pydata_sparse.py +14 -0
  439. scipy/sparse/tests/test_arithmetic1d.py +5 -2
  440. scipy/sparse/tests/test_base.py +214 -42
  441. scipy/sparse/tests/test_common1d.py +7 -7
  442. scipy/sparse/tests/test_construct.py +1 -1
  443. scipy/sparse/tests/test_coo.py +272 -4
  444. scipy/sparse/tests/test_sparsetools.py +5 -0
  445. scipy/sparse/tests/test_sputils.py +36 -7
  446. scipy/spatial/_ckdtree.cpython-311-aarch64-linux-musl.so +0 -0
  447. scipy/spatial/_distance_pybind.cpython-311-aarch64-linux-musl.so +0 -0
  448. scipy/spatial/_distance_wrap.cpython-311-aarch64-linux-musl.so +0 -0
  449. scipy/spatial/_hausdorff.cpython-311-aarch64-linux-musl.so +0 -0
  450. scipy/spatial/_qhull.cpython-311-aarch64-linux-musl.so +0 -0
  451. scipy/spatial/_voronoi.cpython-311-aarch64-linux-musl.so +0 -0
  452. scipy/spatial/distance.py +49 -42
  453. scipy/spatial/tests/test_distance.py +15 -1
  454. scipy/spatial/tests/test_kdtree.py +1 -0
  455. scipy/spatial/tests/test_qhull.py +7 -2
  456. scipy/spatial/transform/__init__.py +5 -3
  457. scipy/spatial/transform/_rigid_transform.cpython-311-aarch64-linux-musl.so +0 -0
  458. scipy/spatial/transform/_rotation.cpython-311-aarch64-linux-musl.so +0 -0
  459. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  460. scipy/spatial/transform/tests/test_rotation.py +1213 -832
  461. scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
  462. scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
  463. scipy/special/__init__.py +1 -47
  464. scipy/special/_add_newdocs.py +34 -772
  465. scipy/special/_basic.py +22 -25
  466. scipy/special/_comb.cpython-311-aarch64-linux-musl.so +0 -0
  467. scipy/special/_ellip_harm_2.cpython-311-aarch64-linux-musl.so +0 -0
  468. scipy/special/_gufuncs.cpython-311-aarch64-linux-musl.so +0 -0
  469. scipy/special/_logsumexp.py +67 -58
  470. scipy/special/_orthogonal.pyi +1 -1
  471. scipy/special/_specfun.cpython-311-aarch64-linux-musl.so +0 -0
  472. scipy/special/_special_ufuncs.cpython-311-aarch64-linux-musl.so +0 -0
  473. scipy/special/_spherical_bessel.py +4 -4
  474. scipy/special/_support_alternative_backends.py +212 -119
  475. scipy/special/_test_internal.cpython-311-aarch64-linux-musl.so +0 -0
  476. scipy/special/_testutils.py +4 -4
  477. scipy/special/_ufuncs.cpython-311-aarch64-linux-musl.so +0 -0
  478. scipy/special/_ufuncs.pyi +1 -0
  479. scipy/special/_ufuncs.pyx +215 -1400
  480. scipy/special/_ufuncs_cxx.cpython-311-aarch64-linux-musl.so +0 -0
  481. scipy/special/_ufuncs_cxx.pxd +2 -15
  482. scipy/special/_ufuncs_cxx.pyx +5 -44
  483. scipy/special/_ufuncs_cxx_defs.h +2 -16
  484. scipy/special/_ufuncs_defs.h +0 -8
  485. scipy/special/cython_special.cpython-311-aarch64-linux-musl.so +0 -0
  486. scipy/special/cython_special.pxd +1 -1
  487. scipy/special/tests/_cython_examples/meson.build +10 -1
  488. scipy/special/tests/test_basic.py +153 -20
  489. scipy/special/tests/test_boost_ufuncs.py +3 -0
  490. scipy/special/tests/test_cdflib.py +35 -11
  491. scipy/special/tests/test_gammainc.py +16 -0
  492. scipy/special/tests/test_hyp2f1.py +2 -2
  493. scipy/special/tests/test_log1mexp.py +85 -0
  494. scipy/special/tests/test_logsumexp.py +206 -64
  495. scipy/special/tests/test_mpmath.py +1 -0
  496. scipy/special/tests/test_nan_inputs.py +1 -1
  497. scipy/special/tests/test_orthogonal.py +17 -18
  498. scipy/special/tests/test_sf_error.py +3 -2
  499. scipy/special/tests/test_sph_harm.py +6 -7
  500. scipy/special/tests/test_support_alternative_backends.py +211 -76
  501. scipy/stats/__init__.py +4 -1
  502. scipy/stats/_ansari_swilk_statistics.cpython-311-aarch64-linux-musl.so +0 -0
  503. scipy/stats/_axis_nan_policy.py +5 -12
  504. scipy/stats/_biasedurn.cpython-311-aarch64-linux-musl.so +0 -0
  505. scipy/stats/_continued_fraction.py +387 -0
  506. scipy/stats/_continuous_distns.py +277 -310
  507. scipy/stats/_correlation.py +1 -1
  508. scipy/stats/_covariance.py +6 -3
  509. scipy/stats/_discrete_distns.py +39 -32
  510. scipy/stats/_distn_infrastructure.py +39 -12
  511. scipy/stats/_distribution_infrastructure.py +920 -238
  512. scipy/stats/_entropy.py +9 -10
  513. scipy/{_lib → stats}/_finite_differences.py +1 -1
  514. scipy/stats/_hypotests.py +83 -50
  515. scipy/stats/_kde.py +53 -49
  516. scipy/stats/_ksstats.py +1 -1
  517. scipy/stats/_levy_stable/__init__.py +7 -15
  518. scipy/stats/_levy_stable/levyst.cpython-311-aarch64-linux-musl.so +0 -0
  519. scipy/stats/_morestats.py +118 -73
  520. scipy/stats/_mstats_basic.py +13 -17
  521. scipy/stats/_mstats_extras.py +8 -8
  522. scipy/stats/_multivariate.py +89 -113
  523. scipy/stats/_new_distributions.py +97 -20
  524. scipy/stats/_page_trend_test.py +12 -5
  525. scipy/stats/_probability_distribution.py +265 -43
  526. scipy/stats/_qmc.py +14 -9
  527. scipy/stats/_qmc_cy.cpython-311-aarch64-linux-musl.so +0 -0
  528. scipy/stats/_qmvnt.py +16 -95
  529. scipy/stats/_qmvnt_cy.cpython-311-aarch64-linux-musl.so +0 -0
  530. scipy/stats/_quantile.py +335 -0
  531. scipy/stats/_rcont/rcont.cpython-311-aarch64-linux-musl.so +0 -0
  532. scipy/stats/_resampling.py +5 -30
  533. scipy/stats/_sampling.py +1 -1
  534. scipy/stats/_sobol.cpython-311-aarch64-linux-musl.so +0 -0
  535. scipy/stats/_stats.cpython-311-aarch64-linux-musl.so +0 -0
  536. scipy/stats/_stats_mstats_common.py +21 -2
  537. scipy/stats/_stats_py.py +551 -477
  538. scipy/stats/_stats_pythran.cpython-311-aarch64-linux-musl.so +0 -0
  539. scipy/stats/_unuran/unuran_wrapper.cpython-311-aarch64-linux-musl.so +0 -0
  540. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  541. scipy/stats/_variation.py +6 -8
  542. scipy/stats/_wilcoxon.py +13 -7
  543. scipy/stats/tests/common_tests.py +6 -4
  544. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  545. scipy/stats/tests/test_continued_fraction.py +173 -0
  546. scipy/stats/tests/test_continuous.py +379 -60
  547. scipy/stats/tests/test_continuous_basic.py +18 -12
  548. scipy/stats/tests/test_discrete_basic.py +14 -8
  549. scipy/stats/tests/test_discrete_distns.py +16 -16
  550. scipy/stats/tests/test_distributions.py +95 -75
  551. scipy/stats/tests/test_entropy.py +40 -48
  552. scipy/stats/tests/test_fit.py +4 -3
  553. scipy/stats/tests/test_hypotests.py +153 -24
  554. scipy/stats/tests/test_kdeoth.py +109 -41
  555. scipy/stats/tests/test_marray.py +289 -0
  556. scipy/stats/tests/test_morestats.py +81 -49
  557. scipy/stats/tests/test_mstats_basic.py +3 -3
  558. scipy/stats/tests/test_multivariate.py +434 -83
  559. scipy/stats/tests/test_qmc.py +13 -10
  560. scipy/stats/tests/test_quantile.py +199 -0
  561. scipy/stats/tests/test_rank.py +119 -112
  562. scipy/stats/tests/test_resampling.py +47 -56
  563. scipy/stats/tests/test_sampling.py +9 -4
  564. scipy/stats/tests/test_stats.py +799 -939
  565. scipy/stats/tests/test_variation.py +8 -6
  566. scipy/version.py +2 -2
  567. {scipy-1.15.3.dist-info → scipy-1.16.0.dist-info}/LICENSE.txt +4 -4
  568. {scipy-1.15.3.dist-info → scipy-1.16.0.dist-info}/METADATA +11 -11
  569. {scipy-1.15.3.dist-info → scipy-1.16.0.dist-info}/RECORD +1284 -1291
  570. scipy.libs/libgcc_s-2d945d6c.so.1 +0 -0
  571. scipy.libs/libgfortran-67378ab2.so.5.0.0 +0 -0
  572. scipy.libs/{libstdc++-1b614e01.so.6.0.32 → libstdc++-85f2cd6d.so.6.0.33} +0 -0
  573. scipy/_lib/array_api_extra/_funcs.py +0 -484
  574. scipy/_lib/array_api_extra/_typing.py +0 -8
  575. scipy/interpolate/_bspl.cpython-311-aarch64-linux-musl.so +0 -0
  576. scipy/optimize/_cobyla.cpython-311-aarch64-linux-musl.so +0 -0
  577. scipy/optimize/_cython_nnls.cpython-311-aarch64-linux-musl.so +0 -0
  578. scipy/optimize/_slsqp.cpython-311-aarch64-linux-musl.so +0 -0
  579. scipy/spatial/qhull_src/COPYING.txt +0 -38
  580. scipy/special/libsf_error_state.so +0 -0
  581. scipy/special/tests/test_log_softmax.py +0 -109
  582. scipy/special/tests/test_xsf_cuda.py +0 -114
  583. scipy/special/xsf/binom.h +0 -89
  584. scipy/special/xsf/cdflib.h +0 -100
  585. scipy/special/xsf/cephes/airy.h +0 -307
  586. scipy/special/xsf/cephes/besselpoly.h +0 -51
  587. scipy/special/xsf/cephes/beta.h +0 -257
  588. scipy/special/xsf/cephes/cbrt.h +0 -131
  589. scipy/special/xsf/cephes/chbevl.h +0 -85
  590. scipy/special/xsf/cephes/chdtr.h +0 -193
  591. scipy/special/xsf/cephes/const.h +0 -87
  592. scipy/special/xsf/cephes/ellie.h +0 -293
  593. scipy/special/xsf/cephes/ellik.h +0 -251
  594. scipy/special/xsf/cephes/ellpe.h +0 -107
  595. scipy/special/xsf/cephes/ellpk.h +0 -117
  596. scipy/special/xsf/cephes/expn.h +0 -260
  597. scipy/special/xsf/cephes/gamma.h +0 -398
  598. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  599. scipy/special/xsf/cephes/hyperg.h +0 -361
  600. scipy/special/xsf/cephes/i0.h +0 -149
  601. scipy/special/xsf/cephes/i1.h +0 -158
  602. scipy/special/xsf/cephes/igam.h +0 -421
  603. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  604. scipy/special/xsf/cephes/igami.h +0 -313
  605. scipy/special/xsf/cephes/j0.h +0 -225
  606. scipy/special/xsf/cephes/j1.h +0 -198
  607. scipy/special/xsf/cephes/jv.h +0 -715
  608. scipy/special/xsf/cephes/k0.h +0 -164
  609. scipy/special/xsf/cephes/k1.h +0 -163
  610. scipy/special/xsf/cephes/kn.h +0 -243
  611. scipy/special/xsf/cephes/lanczos.h +0 -112
  612. scipy/special/xsf/cephes/ndtr.h +0 -275
  613. scipy/special/xsf/cephes/poch.h +0 -85
  614. scipy/special/xsf/cephes/polevl.h +0 -167
  615. scipy/special/xsf/cephes/psi.h +0 -194
  616. scipy/special/xsf/cephes/rgamma.h +0 -111
  617. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  618. scipy/special/xsf/cephes/shichi.h +0 -248
  619. scipy/special/xsf/cephes/sici.h +0 -224
  620. scipy/special/xsf/cephes/sindg.h +0 -221
  621. scipy/special/xsf/cephes/tandg.h +0 -139
  622. scipy/special/xsf/cephes/trig.h +0 -58
  623. scipy/special/xsf/cephes/unity.h +0 -186
  624. scipy/special/xsf/cephes/zeta.h +0 -172
  625. scipy/special/xsf/config.h +0 -304
  626. scipy/special/xsf/digamma.h +0 -205
  627. scipy/special/xsf/error.h +0 -57
  628. scipy/special/xsf/evalpoly.h +0 -47
  629. scipy/special/xsf/expint.h +0 -266
  630. scipy/special/xsf/hyp2f1.h +0 -694
  631. scipy/special/xsf/iv_ratio.h +0 -173
  632. scipy/special/xsf/lambertw.h +0 -150
  633. scipy/special/xsf/loggamma.h +0 -163
  634. scipy/special/xsf/sici.h +0 -200
  635. scipy/special/xsf/tools.h +0 -427
  636. scipy/special/xsf/trig.h +0 -164
  637. scipy/special/xsf/wright_bessel.h +0 -843
  638. scipy/special/xsf/zlog1.h +0 -35
  639. scipy/stats/_mvn.cpython-311-aarch64-linux-musl.so +0 -0
  640. scipy.libs/libgcc_s-7393e603.so.1 +0 -0
  641. scipy.libs/libgfortran-eb933d8e.so.5.0.0 +0 -0
  642. {scipy-1.15.3.dist-info → scipy-1.16.0.dist-info}/WHEEL +0 -0
@@ -7,9 +7,8 @@ from scipy.optimize.elementwise import bracket_root, bracket_minimum
7
7
  import scipy._lib._elementwise_iterative_method as eim
8
8
  from scipy import stats
9
9
  from scipy._lib._array_api_no_0d import (xp_assert_close, xp_assert_equal,
10
- xp_assert_less, array_namespace)
10
+ xp_assert_less)
11
11
  from scipy._lib._array_api import xp_ravel
12
- from scipy.conftest import array_api_compatible
13
12
 
14
13
 
15
14
  # These tests were originally written for the private `optimize._bracket`
@@ -42,12 +41,11 @@ def _bracket_minimum(*args, **kwargs):
42
41
 
43
42
 
44
43
  array_api_strict_skip_reason = 'Array API does not support fancy indexing assignment.'
45
- jax_skip_reason = 'JAX arrays do not support item assignment.'
44
+ boolean_index_skip_reason = 'JAX/Dask arrays do not support boolean assignment.'
46
45
 
47
46
  @pytest.mark.skip_xp_backends('array_api_strict', reason=array_api_strict_skip_reason)
48
- @pytest.mark.skip_xp_backends('jax.numpy', reason=jax_skip_reason)
49
- @array_api_compatible
50
- @pytest.mark.usefixtures("skip_xp_backends")
47
+ @pytest.mark.skip_xp_backends('jax.numpy', reason=boolean_index_skip_reason)
48
+ @pytest.mark.skip_xp_backends('dask.array', reason=boolean_index_skip_reason)
51
49
  class TestBracketRoot:
52
50
  @pytest.mark.parametrize("seed", (615655101, 3141866013, 238075752))
53
51
  @pytest.mark.parametrize("use_xmin", (False, True))
@@ -179,10 +177,9 @@ class TestBracketRoot:
179
177
  ref_attr = [xp.asarray(getattr(ref, attr)) for ref in refs]
180
178
  res_attr = getattr(res, attr)
181
179
  xp_assert_close(xp_ravel(res_attr, xp=xp), xp.stack(ref_attr))
182
- xp_assert_equal(res_attr.shape, shape)
180
+ assert res_attr.shape == shape
183
181
 
184
- xp_test = array_namespace(xp.asarray(1.))
185
- assert res.success.dtype == xp_test.bool
182
+ assert res.success.dtype == xp.bool
186
183
  if shape:
187
184
  assert xp.all(res.success[1:-1])
188
185
  assert res.status.dtype == xp.int32
@@ -229,13 +226,11 @@ class TestBracketRoot:
229
226
  def test_dtype(self, root, xmin, xmax, dtype, xp):
230
227
  # Test that dtypes are preserved
231
228
  dtype = getattr(xp, dtype)
232
- xp_test = array_namespace(xp.asarray(1.))
233
-
234
229
  xmin = xmin if xmin is None else xp.asarray(xmin, dtype=dtype)
235
230
  xmax = xmax if xmax is None else xp.asarray(xmax, dtype=dtype)
236
231
  root = xp.asarray(root, dtype=dtype)
237
232
  def f(x, root):
238
- return xp_test.astype((x - root) ** 3, dtype)
233
+ return xp.astype((x - root) ** 3, dtype)
239
234
 
240
235
  bracket = xp.asarray([-0.01, 0.01], dtype=dtype)
241
236
  res = _bracket_root(f, *bracket, xmin=xmin, xmax=xmax, args=(root,))
@@ -254,13 +249,13 @@ class TestBracketRoot:
254
249
  with pytest.raises(ValueError, match=message):
255
250
  _bracket_root(lambda x: x, -4+1j, 4)
256
251
  with pytest.raises(ValueError, match=message):
257
- _bracket_root(lambda x: x, -4, 'hello')
252
+ _bracket_root(lambda x: x, -4, 4+1j)
258
253
  with pytest.raises(ValueError, match=message):
259
- _bracket_root(lambda x: x, -4, 4, xmin=np)
254
+ _bracket_root(lambda x: x, -4, 4, xmin=4+1j)
260
255
  with pytest.raises(ValueError, match=message):
261
- _bracket_root(lambda x: x, -4, 4, xmax=object())
256
+ _bracket_root(lambda x: x, -4, 4, xmax=4+1j)
262
257
  with pytest.raises(ValueError, match=message):
263
- _bracket_root(lambda x: x, -4, 4, factor=sum)
258
+ _bracket_root(lambda x: x, -4, 4, factor=4+1j)
264
259
 
265
260
  message = "All elements of `factor` must be greater than 1."
266
261
  with pytest.raises(ValueError, match=message):
@@ -284,12 +279,10 @@ class TestBracketRoot:
284
279
 
285
280
  def test_special_cases(self, xp):
286
281
  # Test edge cases and other special cases
287
- xp_test = array_namespace(xp.asarray(1.))
288
-
289
282
  # Test that integers are not passed to `f`
290
283
  # (otherwise this would overflow)
291
284
  def f(x):
292
- assert xp_test.isdtype(x.dtype, "real floating")
285
+ assert xp.isdtype(x.dtype, "real floating")
293
286
  return x ** 99 - 1
294
287
 
295
288
  res = _bracket_root(f, xp.asarray(-7.), xp.asarray(5.))
@@ -328,7 +321,7 @@ class TestBracketRoot:
328
321
 
329
322
  # 2. bracket endpoint hits root exactly
330
323
  f.count = 0
331
- res = _bracket_root(f, xp.asarray(5.), xp.asarray(10.),
324
+ res = _bracket_root(f, xp.asarray(5.), xp.asarray(10.),
332
325
  factor=2)
333
326
 
334
327
  assert res.nfev == 4
@@ -337,12 +330,12 @@ class TestBracketRoot:
337
330
 
338
331
  # 3. bracket limit hits root exactly
339
332
  with np.errstate(over='ignore'):
340
- res = _bracket_root(f, xp.asarray(5.), xp.asarray(10.),
333
+ res = _bracket_root(f, xp.asarray(5.), xp.asarray(10.),
341
334
  xmin=0)
342
335
  xp_assert_close(res.xl, xp.asarray(0.), atol=1e-15)
343
336
 
344
337
  with np.errstate(over='ignore'):
345
- res = _bracket_root(f, xp.asarray(-10.), xp.asarray(-5.),
338
+ res = _bracket_root(f, xp.asarray(-10.), xp.asarray(-5.),
346
339
  xmax=0)
347
340
  xp_assert_close(res.xr, xp.asarray(0.), atol=1e-15)
348
341
 
@@ -388,10 +381,10 @@ class TestBracketRoot:
388
381
  assert res.success
389
382
 
390
383
 
384
+ @pytest.mark.skip_xp_backends('torch', reason='data-apis/array-api-compat#271')
391
385
  @pytest.mark.skip_xp_backends('array_api_strict', reason=array_api_strict_skip_reason)
392
- @pytest.mark.skip_xp_backends('jax.numpy', reason=jax_skip_reason)
393
- @array_api_compatible
394
- @pytest.mark.usefixtures("skip_xp_backends")
386
+ @pytest.mark.skip_xp_backends('jax.numpy', reason=boolean_index_skip_reason)
387
+ @pytest.mark.skip_xp_backends('dask.array', reason=boolean_index_skip_reason)
395
388
  class TestBracketMinimum:
396
389
  def init_f(self):
397
390
  def f(x, a, b):
@@ -506,10 +499,10 @@ class TestBracketMinimum:
506
499
  funcs = [lambda x: (x - 1.5)**2,
507
500
  lambda x: x,
508
501
  lambda x: x,
509
- lambda x: xp.nan,
502
+ lambda x: xp.asarray(xp.nan),
510
503
  lambda x: x**2]
511
504
 
512
- return [funcs[j](x) for x, j in zip(xs, js)]
505
+ return [funcs[int(j)](x) for x, j in zip(xs, js)]
513
506
 
514
507
  args = (xp.arange(5, dtype=xp.int64),)
515
508
  xl0 = xp.asarray([-1.0, -1.0, -1.0, -1.0, 6.0])
@@ -531,13 +524,12 @@ class TestBracketMinimum:
531
524
  @pytest.mark.parametrize("xmax", [5, None])
532
525
  def test_dtypes(self, minimum, xmin, xmax, dtype, xp):
533
526
  dtype = getattr(xp, dtype)
534
- xp_test = array_namespace(xp.asarray(1.))
535
527
  xmin = xmin if xmin is None else xp.asarray(xmin, dtype=dtype)
536
528
  xmax = xmax if xmax is None else xp.asarray(xmax, dtype=dtype)
537
529
  minimum = xp.asarray(minimum, dtype=dtype)
538
530
 
539
531
  def f(x, minimum):
540
- return xp_test.astype((x - minimum)**2, dtype)
532
+ return xp.astype((x - minimum)**2, dtype)
541
533
 
542
534
  xl0, xm0, xr0 = [-0.01, 0.0, 0.01]
543
535
  result = _bracket_minimum(
@@ -560,23 +552,21 @@ class TestBracketMinimum:
560
552
  with pytest.raises(ValueError, match=message):
561
553
  _bracket_minimum(lambda x: x**2, xp.asarray(4+1j))
562
554
  with pytest.raises(ValueError, match=message):
563
- _bracket_minimum(lambda x: x**2, xp.asarray(-4), xl0='hello')
555
+ _bracket_minimum(lambda x: x**2, xp.asarray(-4), xl0=4+1j)
564
556
  with pytest.raises(ValueError, match=message):
565
- _bracket_minimum(lambda x: x**2, xp.asarray(-4),
566
- xr0='farcical aquatic ceremony')
557
+ _bracket_minimum(lambda x: x**2, xp.asarray(-4), xr0=4+1j)
567
558
  with pytest.raises(ValueError, match=message):
568
- _bracket_minimum(lambda x: x**2, xp.asarray(-4), xmin=np)
559
+ _bracket_minimum(lambda x: x**2, xp.asarray(-4), xmin=4+1j)
569
560
  with pytest.raises(ValueError, match=message):
570
- _bracket_minimum(lambda x: x**2, xp.asarray(-4), xmax=object())
561
+ _bracket_minimum(lambda x: x**2, xp.asarray(-4), xmax=4+1j)
571
562
  with pytest.raises(ValueError, match=message):
572
- _bracket_minimum(lambda x: x**2, xp.asarray(-4), factor=sum)
563
+ _bracket_minimum(lambda x: x**2, xp.asarray(-4), factor=4+1j)
573
564
 
574
565
  message = "All elements of `factor` must be greater than 1."
575
566
  with pytest.raises(ValueError, match=message):
576
567
  _bracket_minimum(lambda x: x, xp.asarray(-4), factor=0.5)
577
568
 
578
- message = "shape mismatch: objects cannot be broadcast"
579
- # raised by `xp.broadcast, but the traceback is readable IMO
569
+ message = "Array shapes are incompatible for broadcasting."
580
570
  with pytest.raises(ValueError, match=message):
581
571
  _bracket_minimum(lambda x: x**2, xp.asarray([-2, -3]), xl0=[-3, -4, -5])
582
572
 
@@ -811,18 +801,19 @@ class TestBracketMinimum:
811
801
  factor = rng.random(size=shape) + 1.5
812
802
  refs = bracket_minimum_single(xm0, xl0, xr0, xmin, xmax, factor, a).ravel()
813
803
  args = tuple(xp.asarray(arg, dtype=xp.float64) for arg in args)
814
- res = _bracket_minimum(f, xp.asarray(xm0), xl0=xl0, xr0=xr0, xmin=xmin,
815
- xmax=xmax, factor=factor, args=args, maxiter=maxiter)
804
+ res = _bracket_minimum(f, xp.asarray(xm0), xl0=xp.asarray(xl0),
805
+ xr0=xp.asarray(xr0), xmin=xp.asarray(xmin),
806
+ xmax=xp.asarray(xmax), factor=xp.asarray(factor),
807
+ args=args, maxiter=maxiter)
816
808
 
817
809
  attrs = ['xl', 'xm', 'xr', 'fl', 'fm', 'fr', 'success', 'nfev', 'nit']
818
810
  for attr in attrs:
819
811
  ref_attr = [xp.asarray(getattr(ref, attr)) for ref in refs]
820
812
  res_attr = getattr(res, attr)
821
813
  xp_assert_close(xp_ravel(res_attr, xp=xp), xp.stack(ref_attr))
822
- xp_assert_equal(res_attr.shape, shape)
814
+ assert res_attr.shape == shape
823
815
 
824
- xp_test = array_namespace(xp.asarray(1.))
825
- assert res.success.dtype == xp_test.bool
816
+ assert res.success.dtype == xp.bool
826
817
  if shape:
827
818
  assert xp.all(res.success[1:-1])
828
819
  assert res.status.dtype == xp.int32
@@ -836,12 +827,11 @@ class TestBracketMinimum:
836
827
 
837
828
  def test_special_cases(self, xp):
838
829
  # Test edge cases and other special cases.
839
- xp_test = array_namespace(xp.asarray(1.))
840
830
 
841
831
  # Test that integers are not passed to `f`
842
832
  # (otherwise this would overflow)
843
833
  def f(x):
844
- assert xp_test.isdtype(x.dtype, "numeric")
834
+ assert xp.isdtype(x.dtype, "numeric")
845
835
  return x ** 98 - 1
846
836
 
847
837
  result = _bracket_minimum(f, xp.asarray(-7., dtype=xp.float64), xr0=5)
@@ -890,7 +880,7 @@ class TestBracketMinimum:
890
880
 
891
881
  result = _bracket_minimum(f, xp.asarray(0.5535723499480897), xmin=xmin,
892
882
  xmax=xmax)
893
- assert xmin == result.xl
883
+ xp_assert_close(result.xl, xmin)
894
884
 
895
885
  def test_gh_20562_right(self, xp):
896
886
  # Regression test for https://github.com/scipy/scipy/issues/20562
@@ -903,4 +893,4 @@ class TestBracketMinimum:
903
893
 
904
894
  result = _bracket_minimum(f, xp.asarray(-0.5535723499480897),
905
895
  xmin=xmin, xmax=xmax)
906
- assert xmax == result.xr
896
+ xp_assert_close(result.xr, xmax)