scipy 1.15.3__cp313-cp313t-macosx_14_0_arm64.whl → 1.16.0rc2__cp313-cp313t-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 (627) hide show
  1. scipy/__config__.py +3 -3
  2. scipy/__init__.py +3 -6
  3. scipy/_cyutility.cpython-313t-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-313t-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-313t-darwin.so +0 -0
  12. scipy/_lib/_testutils.py +6 -2
  13. scipy/_lib/_util.py +222 -125
  14. scipy/_lib/array_api_compat/__init__.py +4 -4
  15. scipy/_lib/array_api_compat/_internal.py +19 -6
  16. scipy/_lib/array_api_compat/common/__init__.py +1 -1
  17. scipy/_lib/array_api_compat/common/_aliases.py +365 -193
  18. scipy/_lib/array_api_compat/common/_fft.py +94 -64
  19. scipy/_lib/array_api_compat/common/_helpers.py +413 -180
  20. scipy/_lib/array_api_compat/common/_linalg.py +116 -40
  21. scipy/_lib/array_api_compat/common/_typing.py +179 -10
  22. scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
  23. scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
  24. scipy/_lib/array_api_compat/cupy/_info.py +16 -6
  25. scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
  26. scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
  27. scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
  28. scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
  29. scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
  30. scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
  31. scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
  32. scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
  33. scipy/_lib/array_api_compat/numpy/_info.py +36 -16
  34. scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
  35. scipy/_lib/array_api_compat/numpy/fft.py +11 -5
  36. scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
  37. scipy/_lib/array_api_compat/torch/__init__.py +3 -5
  38. scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
  39. scipy/_lib/array_api_compat/torch/_info.py +27 -16
  40. scipy/_lib/array_api_compat/torch/_typing.py +3 -0
  41. scipy/_lib/array_api_compat/torch/fft.py +17 -18
  42. scipy/_lib/array_api_compat/torch/linalg.py +16 -16
  43. scipy/_lib/array_api_extra/__init__.py +26 -3
  44. scipy/_lib/array_api_extra/_delegation.py +171 -0
  45. scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
  46. scipy/_lib/array_api_extra/_lib/_at.py +463 -0
  47. scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
  48. scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
  49. scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
  50. scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
  51. scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
  52. scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
  53. scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
  54. scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
  55. scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
  56. scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
  57. scipy/_lib/array_api_extra/testing.py +359 -0
  58. scipy/_lib/decorator.py +2 -2
  59. scipy/_lib/doccer.py +1 -7
  60. scipy/_lib/messagestream.cpython-313t-darwin.so +0 -0
  61. scipy/_lib/pyprima/__init__.py +212 -0
  62. scipy/_lib/pyprima/cobyla/__init__.py +0 -0
  63. scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
  64. scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
  65. scipy/_lib/pyprima/cobyla/geometry.py +226 -0
  66. scipy/_lib/pyprima/cobyla/initialize.py +215 -0
  67. scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
  68. scipy/_lib/pyprima/cobyla/update.py +289 -0
  69. scipy/_lib/pyprima/common/__init__.py +0 -0
  70. scipy/_lib/pyprima/common/_bounds.py +34 -0
  71. scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
  72. scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
  73. scipy/_lib/pyprima/common/_project.py +173 -0
  74. scipy/_lib/pyprima/common/checkbreak.py +93 -0
  75. scipy/_lib/pyprima/common/consts.py +47 -0
  76. scipy/_lib/pyprima/common/evaluate.py +99 -0
  77. scipy/_lib/pyprima/common/history.py +38 -0
  78. scipy/_lib/pyprima/common/infos.py +30 -0
  79. scipy/_lib/pyprima/common/linalg.py +435 -0
  80. scipy/_lib/pyprima/common/message.py +290 -0
  81. scipy/_lib/pyprima/common/powalg.py +131 -0
  82. scipy/_lib/pyprima/common/preproc.py +277 -0
  83. scipy/_lib/pyprima/common/present.py +5 -0
  84. scipy/_lib/pyprima/common/ratio.py +54 -0
  85. scipy/_lib/pyprima/common/redrho.py +47 -0
  86. scipy/_lib/pyprima/common/selectx.py +296 -0
  87. scipy/_lib/tests/test__util.py +105 -121
  88. scipy/_lib/tests/test_array_api.py +166 -35
  89. scipy/_lib/tests/test_bunch.py +7 -0
  90. scipy/_lib/tests/test_ccallback.py +2 -10
  91. scipy/_lib/tests/test_public_api.py +13 -0
  92. scipy/cluster/_hierarchy.cpython-313t-darwin.so +0 -0
  93. scipy/cluster/_optimal_leaf_ordering.cpython-313t-darwin.so +0 -0
  94. scipy/cluster/_vq.cpython-313t-darwin.so +0 -0
  95. scipy/cluster/hierarchy.py +393 -223
  96. scipy/cluster/tests/test_hierarchy.py +273 -335
  97. scipy/cluster/tests/test_vq.py +45 -61
  98. scipy/cluster/vq.py +39 -35
  99. scipy/conftest.py +263 -157
  100. scipy/constants/_constants.py +4 -1
  101. scipy/constants/tests/test_codata.py +2 -2
  102. scipy/constants/tests/test_constants.py +11 -18
  103. scipy/datasets/_download_all.py +15 -1
  104. scipy/datasets/_fetchers.py +7 -1
  105. scipy/datasets/_utils.py +1 -1
  106. scipy/differentiate/_differentiate.py +25 -25
  107. scipy/differentiate/tests/test_differentiate.py +24 -25
  108. scipy/fft/_basic.py +20 -0
  109. scipy/fft/_helper.py +3 -34
  110. scipy/fft/_pocketfft/helper.py +29 -1
  111. scipy/fft/_pocketfft/tests/test_basic.py +2 -4
  112. scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
  113. scipy/fft/_realtransforms.py +13 -0
  114. scipy/fft/tests/test_basic.py +27 -25
  115. scipy/fft/tests/test_fftlog.py +16 -7
  116. scipy/fft/tests/test_helper.py +18 -34
  117. scipy/fft/tests/test_real_transforms.py +8 -10
  118. scipy/fftpack/convolve.cpython-313t-darwin.so +0 -0
  119. scipy/fftpack/tests/test_basic.py +2 -4
  120. scipy/fftpack/tests/test_real_transforms.py +8 -9
  121. scipy/integrate/_bvp.py +9 -3
  122. scipy/integrate/_cubature.py +3 -2
  123. scipy/integrate/_dop.cpython-313t-darwin.so +0 -0
  124. scipy/integrate/_lsoda.cpython-313t-darwin.so +0 -0
  125. scipy/integrate/_ode.py +9 -2
  126. scipy/integrate/_odepack.cpython-313t-darwin.so +0 -0
  127. scipy/integrate/_quad_vec.py +21 -29
  128. scipy/integrate/_quadpack.cpython-313t-darwin.so +0 -0
  129. scipy/integrate/_quadpack_py.py +11 -7
  130. scipy/integrate/_quadrature.py +3 -3
  131. scipy/integrate/_rules/_base.py +2 -2
  132. scipy/integrate/_tanhsinh.py +48 -47
  133. scipy/integrate/_test_odeint_banded.cpython-313t-darwin.so +0 -0
  134. scipy/integrate/_vode.cpython-313t-darwin.so +0 -0
  135. scipy/integrate/tests/test__quad_vec.py +0 -6
  136. scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
  137. scipy/integrate/tests/test_cubature.py +21 -35
  138. scipy/integrate/tests/test_quadrature.py +6 -8
  139. scipy/integrate/tests/test_tanhsinh.py +56 -48
  140. scipy/interpolate/__init__.py +70 -58
  141. scipy/interpolate/_bary_rational.py +22 -22
  142. scipy/interpolate/_bsplines.py +119 -66
  143. scipy/interpolate/_cubic.py +65 -50
  144. scipy/interpolate/_dfitpack.cpython-313t-darwin.so +0 -0
  145. scipy/interpolate/_dierckx.cpython-313t-darwin.so +0 -0
  146. scipy/interpolate/_fitpack.cpython-313t-darwin.so +0 -0
  147. scipy/interpolate/_fitpack2.py +9 -6
  148. scipy/interpolate/_fitpack_impl.py +32 -26
  149. scipy/interpolate/_fitpack_repro.py +23 -19
  150. scipy/interpolate/_interpnd.cpython-313t-darwin.so +0 -0
  151. scipy/interpolate/_interpolate.py +30 -12
  152. scipy/interpolate/_ndbspline.py +13 -18
  153. scipy/interpolate/_ndgriddata.py +5 -8
  154. scipy/interpolate/_polyint.py +95 -31
  155. scipy/interpolate/_ppoly.cpython-313t-darwin.so +0 -0
  156. scipy/interpolate/_rbf.py +2 -2
  157. scipy/interpolate/_rbfinterp.py +1 -1
  158. scipy/interpolate/_rbfinterp_pythran.cpython-313t-darwin.so +0 -0
  159. scipy/interpolate/_rgi.py +31 -26
  160. scipy/interpolate/_rgi_cython.cpython-313t-darwin.so +0 -0
  161. scipy/interpolate/dfitpack.py +0 -20
  162. scipy/interpolate/interpnd.py +1 -2
  163. scipy/interpolate/tests/test_bary_rational.py +2 -2
  164. scipy/interpolate/tests/test_bsplines.py +97 -1
  165. scipy/interpolate/tests/test_fitpack2.py +39 -1
  166. scipy/interpolate/tests/test_interpnd.py +32 -20
  167. scipy/interpolate/tests/test_interpolate.py +48 -4
  168. scipy/interpolate/tests/test_rgi.py +2 -1
  169. scipy/io/_fast_matrix_market/__init__.py +2 -0
  170. scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
  171. scipy/io/_harwell_boeing/hb.py +7 -11
  172. scipy/io/_idl.py +5 -7
  173. scipy/io/_netcdf.py +15 -5
  174. scipy/io/_test_fortran.cpython-313t-darwin.so +0 -0
  175. scipy/io/arff/tests/test_arffread.py +3 -3
  176. scipy/io/matlab/__init__.py +5 -3
  177. scipy/io/matlab/_mio.py +4 -1
  178. scipy/io/matlab/_mio5.py +19 -13
  179. scipy/io/matlab/_mio5_utils.cpython-313t-darwin.so +0 -0
  180. scipy/io/matlab/_mio_utils.cpython-313t-darwin.so +0 -0
  181. scipy/io/matlab/_miobase.py +4 -1
  182. scipy/io/matlab/_streams.cpython-313t-darwin.so +0 -0
  183. scipy/io/matlab/tests/test_mio.py +46 -18
  184. scipy/io/matlab/tests/test_mio_funcs.py +1 -1
  185. scipy/io/tests/test_mmio.py +7 -1
  186. scipy/io/tests/test_wavfile.py +41 -0
  187. scipy/io/wavfile.py +57 -10
  188. scipy/linalg/_basic.py +113 -86
  189. scipy/linalg/_cythonized_array_utils.cpython-313t-darwin.so +0 -0
  190. scipy/linalg/_decomp.py +22 -9
  191. scipy/linalg/_decomp_cholesky.py +28 -13
  192. scipy/linalg/_decomp_cossin.py +45 -30
  193. scipy/linalg/_decomp_interpolative.cpython-313t-darwin.so +0 -0
  194. scipy/linalg/_decomp_ldl.py +4 -1
  195. scipy/linalg/_decomp_lu.py +18 -6
  196. scipy/linalg/_decomp_lu_cython.cpython-313t-darwin.so +0 -0
  197. scipy/linalg/_decomp_polar.py +2 -0
  198. scipy/linalg/_decomp_qr.py +6 -2
  199. scipy/linalg/_decomp_qz.py +3 -0
  200. scipy/linalg/_decomp_schur.py +3 -1
  201. scipy/linalg/_decomp_svd.py +13 -2
  202. scipy/linalg/_decomp_update.cpython-313t-darwin.so +0 -0
  203. scipy/linalg/_expm_frechet.py +4 -0
  204. scipy/linalg/_fblas.cpython-313t-darwin.so +0 -0
  205. scipy/linalg/_flapack.cpython-313t-darwin.so +0 -0
  206. scipy/linalg/_linalg_pythran.cpython-313t-darwin.so +0 -0
  207. scipy/linalg/_matfuncs.py +187 -4
  208. scipy/linalg/_matfuncs_expm.cpython-313t-darwin.so +0 -0
  209. scipy/linalg/_matfuncs_schur_sqrtm.cpython-313t-darwin.so +0 -0
  210. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  211. scipy/linalg/_matfuncs_sqrtm_triu.cpython-313t-darwin.so +0 -0
  212. scipy/linalg/_procrustes.py +2 -0
  213. scipy/linalg/_sketches.py +17 -6
  214. scipy/linalg/_solve_toeplitz.cpython-313t-darwin.so +0 -0
  215. scipy/linalg/_solvers.py +7 -2
  216. scipy/linalg/_special_matrices.py +26 -36
  217. scipy/linalg/cython_blas.cpython-313t-darwin.so +0 -0
  218. scipy/linalg/cython_lapack.cpython-313t-darwin.so +0 -0
  219. scipy/linalg/lapack.py +22 -2
  220. scipy/linalg/tests/_cython_examples/meson.build +7 -0
  221. scipy/linalg/tests/test_basic.py +31 -16
  222. scipy/linalg/tests/test_batch.py +588 -0
  223. scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
  224. scipy/linalg/tests/test_decomp.py +40 -3
  225. scipy/linalg/tests/test_decomp_cossin.py +14 -0
  226. scipy/linalg/tests/test_decomp_ldl.py +1 -1
  227. scipy/linalg/tests/test_lapack.py +115 -7
  228. scipy/linalg/tests/test_matfuncs.py +157 -102
  229. scipy/linalg/tests/test_procrustes.py +0 -7
  230. scipy/linalg/tests/test_solve_toeplitz.py +1 -1
  231. scipy/linalg/tests/test_special_matrices.py +1 -5
  232. scipy/ndimage/__init__.py +1 -0
  233. scipy/ndimage/_cytest.cpython-313t-darwin.so +0 -0
  234. scipy/ndimage/_delegators.py +8 -2
  235. scipy/ndimage/_filters.py +453 -5
  236. scipy/ndimage/_interpolation.py +36 -6
  237. scipy/ndimage/_measurements.py +4 -2
  238. scipy/ndimage/_morphology.py +5 -0
  239. scipy/ndimage/_nd_image.cpython-313t-darwin.so +0 -0
  240. scipy/ndimage/_ni_docstrings.py +5 -1
  241. scipy/ndimage/_ni_label.cpython-313t-darwin.so +0 -0
  242. scipy/ndimage/_ni_support.py +1 -5
  243. scipy/ndimage/_rank_filter_1d.cpython-313t-darwin.so +0 -0
  244. scipy/ndimage/_support_alternative_backends.py +18 -6
  245. scipy/ndimage/tests/test_filters.py +370 -259
  246. scipy/ndimage/tests/test_fourier.py +7 -9
  247. scipy/ndimage/tests/test_interpolation.py +68 -61
  248. scipy/ndimage/tests/test_measurements.py +18 -35
  249. scipy/ndimage/tests/test_morphology.py +143 -131
  250. scipy/ndimage/tests/test_splines.py +1 -3
  251. scipy/odr/__odrpack.cpython-313t-darwin.so +0 -0
  252. scipy/optimize/_basinhopping.py +13 -7
  253. scipy/optimize/_bglu_dense.cpython-313t-darwin.so +0 -0
  254. scipy/optimize/_bracket.py +17 -24
  255. scipy/optimize/_chandrupatla.py +9 -10
  256. scipy/optimize/_cobyla_py.py +104 -123
  257. scipy/optimize/_constraints.py +14 -10
  258. scipy/optimize/_differentiable_functions.py +371 -230
  259. scipy/optimize/_differentialevolution.py +4 -3
  260. scipy/optimize/_direct.cpython-313t-darwin.so +0 -0
  261. scipy/optimize/_dual_annealing.py +1 -1
  262. scipy/optimize/_elementwise.py +1 -4
  263. scipy/optimize/_group_columns.cpython-313t-darwin.so +0 -0
  264. scipy/optimize/_lbfgsb.cpython-313t-darwin.so +0 -0
  265. scipy/optimize/_lbfgsb_py.py +57 -16
  266. scipy/optimize/_linprog_doc.py +2 -2
  267. scipy/optimize/_linprog_highs.py +2 -2
  268. scipy/optimize/_linprog_ip.py +25 -10
  269. scipy/optimize/_linprog_util.py +14 -16
  270. scipy/optimize/_lsap.cpython-313t-darwin.so +0 -0
  271. scipy/optimize/_lsq/common.py +3 -3
  272. scipy/optimize/_lsq/dogbox.py +16 -2
  273. scipy/optimize/_lsq/givens_elimination.cpython-313t-darwin.so +0 -0
  274. scipy/optimize/_lsq/least_squares.py +198 -126
  275. scipy/optimize/_lsq/lsq_linear.py +6 -6
  276. scipy/optimize/_lsq/trf.py +35 -8
  277. scipy/optimize/_milp.py +3 -1
  278. scipy/optimize/_minimize.py +105 -36
  279. scipy/optimize/_minpack.cpython-313t-darwin.so +0 -0
  280. scipy/optimize/_minpack_py.py +21 -14
  281. scipy/optimize/_moduleTNC.cpython-313t-darwin.so +0 -0
  282. scipy/optimize/_nnls.py +20 -21
  283. scipy/optimize/_nonlin.py +34 -3
  284. scipy/optimize/_numdiff.py +288 -110
  285. scipy/optimize/_optimize.py +86 -48
  286. scipy/optimize/_pava_pybind.cpython-313t-darwin.so +0 -0
  287. scipy/optimize/_remove_redundancy.py +5 -5
  288. scipy/optimize/_root_scalar.py +1 -1
  289. scipy/optimize/_shgo.py +6 -0
  290. scipy/optimize/_shgo_lib/_complex.py +1 -1
  291. scipy/optimize/_slsqp_py.py +216 -124
  292. scipy/optimize/_slsqplib.cpython-313t-darwin.so +0 -0
  293. scipy/optimize/_spectral.py +1 -1
  294. scipy/optimize/_tnc.py +8 -1
  295. scipy/optimize/_trlib/_trlib.cpython-313t-darwin.so +0 -0
  296. scipy/optimize/_trustregion.py +20 -6
  297. scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
  298. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
  299. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
  300. scipy/optimize/_trustregion_constr/projections.py +12 -8
  301. scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
  302. scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
  303. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
  304. scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
  305. scipy/optimize/_trustregion_exact.py +0 -1
  306. scipy/optimize/_zeros.cpython-313t-darwin.so +0 -0
  307. scipy/optimize/_zeros_py.py +97 -17
  308. scipy/optimize/cython_optimize/_zeros.cpython-313t-darwin.so +0 -0
  309. scipy/optimize/slsqp.py +0 -1
  310. scipy/optimize/tests/test__basinhopping.py +1 -1
  311. scipy/optimize/tests/test__differential_evolution.py +4 -4
  312. scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
  313. scipy/optimize/tests/test__numdiff.py +66 -22
  314. scipy/optimize/tests/test__remove_redundancy.py +2 -2
  315. scipy/optimize/tests/test__shgo.py +9 -1
  316. scipy/optimize/tests/test_bracket.py +36 -46
  317. scipy/optimize/tests/test_chandrupatla.py +133 -135
  318. scipy/optimize/tests/test_cobyla.py +74 -45
  319. scipy/optimize/tests/test_constraints.py +1 -1
  320. scipy/optimize/tests/test_differentiable_functions.py +226 -6
  321. scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
  322. scipy/optimize/tests/test_least_squares.py +125 -13
  323. scipy/optimize/tests/test_linear_assignment.py +3 -3
  324. scipy/optimize/tests/test_linprog.py +3 -3
  325. scipy/optimize/tests/test_lsq_linear.py +6 -6
  326. scipy/optimize/tests/test_minimize_constrained.py +2 -2
  327. scipy/optimize/tests/test_minpack.py +4 -4
  328. scipy/optimize/tests/test_nnls.py +43 -3
  329. scipy/optimize/tests/test_nonlin.py +36 -0
  330. scipy/optimize/tests/test_optimize.py +95 -17
  331. scipy/optimize/tests/test_slsqp.py +36 -4
  332. scipy/optimize/tests/test_zeros.py +34 -1
  333. scipy/signal/__init__.py +12 -23
  334. scipy/signal/_delegators.py +568 -0
  335. scipy/signal/_filter_design.py +459 -241
  336. scipy/signal/_fir_filter_design.py +262 -90
  337. scipy/signal/_lti_conversion.py +3 -2
  338. scipy/signal/_ltisys.py +118 -91
  339. scipy/signal/_max_len_seq_inner.cpython-313t-darwin.so +0 -0
  340. scipy/signal/_peak_finding_utils.cpython-313t-darwin.so +0 -0
  341. scipy/signal/_polyutils.py +172 -0
  342. scipy/signal/_short_time_fft.py +519 -70
  343. scipy/signal/_signal_api.py +30 -0
  344. scipy/signal/_signaltools.py +719 -399
  345. scipy/signal/_sigtools.cpython-313t-darwin.so +0 -0
  346. scipy/signal/_sosfilt.cpython-313t-darwin.so +0 -0
  347. scipy/signal/_spectral_py.py +230 -50
  348. scipy/signal/_spline.cpython-313t-darwin.so +0 -0
  349. scipy/signal/_spline_filters.py +108 -68
  350. scipy/signal/_support_alternative_backends.py +73 -0
  351. scipy/signal/_upfirdn.py +4 -1
  352. scipy/signal/_upfirdn_apply.cpython-313t-darwin.so +0 -0
  353. scipy/signal/_waveforms.py +2 -11
  354. scipy/signal/_wavelets.py +1 -1
  355. scipy/signal/fir_filter_design.py +1 -0
  356. scipy/signal/spline.py +4 -11
  357. scipy/signal/tests/_scipy_spectral_test_shim.py +2 -171
  358. scipy/signal/tests/test_bsplines.py +114 -79
  359. scipy/signal/tests/test_cont2discrete.py +9 -2
  360. scipy/signal/tests/test_filter_design.py +721 -481
  361. scipy/signal/tests/test_fir_filter_design.py +332 -140
  362. scipy/signal/tests/test_savitzky_golay.py +4 -3
  363. scipy/signal/tests/test_short_time_fft.py +221 -3
  364. scipy/signal/tests/test_signaltools.py +2144 -1348
  365. scipy/signal/tests/test_spectral.py +50 -6
  366. scipy/signal/tests/test_splines.py +161 -96
  367. scipy/signal/tests/test_upfirdn.py +84 -50
  368. scipy/signal/tests/test_waveforms.py +20 -0
  369. scipy/signal/tests/test_windows.py +607 -466
  370. scipy/signal/windows/_windows.py +287 -148
  371. scipy/sparse/__init__.py +23 -4
  372. scipy/sparse/_base.py +270 -108
  373. scipy/sparse/_bsr.py +7 -4
  374. scipy/sparse/_compressed.py +59 -231
  375. scipy/sparse/_construct.py +90 -38
  376. scipy/sparse/_coo.py +115 -181
  377. scipy/sparse/_csc.py +4 -4
  378. scipy/sparse/_csparsetools.cpython-313t-darwin.so +0 -0
  379. scipy/sparse/_csr.py +2 -2
  380. scipy/sparse/_data.py +48 -48
  381. scipy/sparse/_dia.py +105 -18
  382. scipy/sparse/_dok.py +0 -23
  383. scipy/sparse/_index.py +4 -4
  384. scipy/sparse/_matrix.py +23 -0
  385. scipy/sparse/_sparsetools.cpython-313t-darwin.so +0 -0
  386. scipy/sparse/_sputils.py +37 -22
  387. scipy/sparse/base.py +0 -9
  388. scipy/sparse/bsr.py +0 -14
  389. scipy/sparse/compressed.py +0 -23
  390. scipy/sparse/construct.py +0 -6
  391. scipy/sparse/coo.py +0 -14
  392. scipy/sparse/csc.py +0 -3
  393. scipy/sparse/csgraph/_flow.cpython-313t-darwin.so +0 -0
  394. scipy/sparse/csgraph/_matching.cpython-313t-darwin.so +0 -0
  395. scipy/sparse/csgraph/_min_spanning_tree.cpython-313t-darwin.so +0 -0
  396. scipy/sparse/csgraph/_reordering.cpython-313t-darwin.so +0 -0
  397. scipy/sparse/csgraph/_shortest_path.cpython-313t-darwin.so +0 -0
  398. scipy/sparse/csgraph/_tools.cpython-313t-darwin.so +0 -0
  399. scipy/sparse/csgraph/_traversal.cpython-313t-darwin.so +0 -0
  400. scipy/sparse/csgraph/tests/test_matching.py +14 -2
  401. scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
  402. scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
  403. scipy/sparse/csr.py +0 -5
  404. scipy/sparse/data.py +1 -6
  405. scipy/sparse/dia.py +0 -7
  406. scipy/sparse/dok.py +0 -10
  407. scipy/sparse/linalg/_dsolve/_superlu.cpython-313t-darwin.so +0 -0
  408. scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
  409. scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
  410. scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-313t-darwin.so +0 -0
  411. scipy/sparse/linalg/_eigen/arpack/arpack.py +23 -17
  412. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
  413. scipy/sparse/linalg/_interface.py +17 -18
  414. scipy/sparse/linalg/_isolve/_gcrotmk.py +4 -4
  415. scipy/sparse/linalg/_isolve/iterative.py +51 -45
  416. scipy/sparse/linalg/_isolve/lgmres.py +6 -6
  417. scipy/sparse/linalg/_isolve/minres.py +5 -5
  418. scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
  419. scipy/sparse/linalg/_isolve/utils.py +2 -8
  420. scipy/sparse/linalg/_matfuncs.py +1 -1
  421. scipy/sparse/linalg/_norm.py +1 -1
  422. scipy/sparse/linalg/_propack/_cpropack.cpython-313t-darwin.so +0 -0
  423. scipy/sparse/linalg/_propack/_dpropack.cpython-313t-darwin.so +0 -0
  424. scipy/sparse/linalg/_propack/_spropack.cpython-313t-darwin.so +0 -0
  425. scipy/sparse/linalg/_propack/_zpropack.cpython-313t-darwin.so +0 -0
  426. scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
  427. scipy/sparse/linalg/tests/test_pydata_sparse.py +14 -0
  428. scipy/sparse/tests/test_arithmetic1d.py +5 -2
  429. scipy/sparse/tests/test_base.py +214 -42
  430. scipy/sparse/tests/test_common1d.py +7 -7
  431. scipy/sparse/tests/test_construct.py +1 -1
  432. scipy/sparse/tests/test_coo.py +272 -4
  433. scipy/sparse/tests/test_sparsetools.py +5 -0
  434. scipy/sparse/tests/test_sputils.py +36 -7
  435. scipy/spatial/_ckdtree.cpython-313t-darwin.so +0 -0
  436. scipy/spatial/_distance_pybind.cpython-313t-darwin.so +0 -0
  437. scipy/spatial/_distance_wrap.cpython-313t-darwin.so +0 -0
  438. scipy/spatial/_hausdorff.cpython-313t-darwin.so +0 -0
  439. scipy/spatial/_qhull.cpython-313t-darwin.so +0 -0
  440. scipy/spatial/_voronoi.cpython-313t-darwin.so +0 -0
  441. scipy/spatial/distance.py +49 -42
  442. scipy/spatial/tests/test_distance.py +15 -1
  443. scipy/spatial/tests/test_kdtree.py +1 -0
  444. scipy/spatial/tests/test_qhull.py +7 -2
  445. scipy/spatial/transform/__init__.py +5 -3
  446. scipy/spatial/transform/_rigid_transform.cpython-313t-darwin.so +0 -0
  447. scipy/spatial/transform/_rotation.cpython-313t-darwin.so +0 -0
  448. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  449. scipy/spatial/transform/tests/test_rotation.py +1213 -832
  450. scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
  451. scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
  452. scipy/special/__init__.py +1 -47
  453. scipy/special/_add_newdocs.py +34 -772
  454. scipy/special/_basic.py +22 -25
  455. scipy/special/_comb.cpython-313t-darwin.so +0 -0
  456. scipy/special/_ellip_harm_2.cpython-313t-darwin.so +0 -0
  457. scipy/special/_gufuncs.cpython-313t-darwin.so +0 -0
  458. scipy/special/_logsumexp.py +67 -58
  459. scipy/special/_orthogonal.pyi +1 -1
  460. scipy/special/_specfun.cpython-313t-darwin.so +0 -0
  461. scipy/special/_special_ufuncs.cpython-313t-darwin.so +0 -0
  462. scipy/special/_spherical_bessel.py +4 -4
  463. scipy/special/_support_alternative_backends.py +212 -119
  464. scipy/special/_test_internal.cpython-313t-darwin.so +0 -0
  465. scipy/special/_testutils.py +4 -4
  466. scipy/special/_ufuncs.cpython-313t-darwin.so +0 -0
  467. scipy/special/_ufuncs.pyi +1 -0
  468. scipy/special/_ufuncs.pyx +215 -1400
  469. scipy/special/_ufuncs_cxx.cpython-313t-darwin.so +0 -0
  470. scipy/special/_ufuncs_cxx.pxd +2 -15
  471. scipy/special/_ufuncs_cxx.pyx +5 -44
  472. scipy/special/_ufuncs_cxx_defs.h +2 -16
  473. scipy/special/_ufuncs_defs.h +0 -8
  474. scipy/special/cython_special.cpython-313t-darwin.so +0 -0
  475. scipy/special/cython_special.pxd +1 -1
  476. scipy/special/tests/_cython_examples/meson.build +10 -1
  477. scipy/special/tests/test_basic.py +153 -20
  478. scipy/special/tests/test_boost_ufuncs.py +3 -0
  479. scipy/special/tests/test_cdflib.py +35 -11
  480. scipy/special/tests/test_gammainc.py +16 -0
  481. scipy/special/tests/test_hyp2f1.py +2 -2
  482. scipy/special/tests/test_log1mexp.py +85 -0
  483. scipy/special/tests/test_logsumexp.py +206 -64
  484. scipy/special/tests/test_mpmath.py +1 -0
  485. scipy/special/tests/test_nan_inputs.py +1 -1
  486. scipy/special/tests/test_orthogonal.py +17 -18
  487. scipy/special/tests/test_sf_error.py +3 -2
  488. scipy/special/tests/test_sph_harm.py +6 -7
  489. scipy/special/tests/test_support_alternative_backends.py +211 -76
  490. scipy/stats/__init__.py +4 -1
  491. scipy/stats/_ansari_swilk_statistics.cpython-313t-darwin.so +0 -0
  492. scipy/stats/_axis_nan_policy.py +5 -12
  493. scipy/stats/_biasedurn.cpython-313t-darwin.so +0 -0
  494. scipy/stats/_continued_fraction.py +387 -0
  495. scipy/stats/_continuous_distns.py +277 -310
  496. scipy/stats/_correlation.py +1 -1
  497. scipy/stats/_covariance.py +6 -3
  498. scipy/stats/_discrete_distns.py +39 -32
  499. scipy/stats/_distn_infrastructure.py +39 -12
  500. scipy/stats/_distribution_infrastructure.py +900 -238
  501. scipy/stats/_entropy.py +9 -10
  502. scipy/{_lib → stats}/_finite_differences.py +1 -1
  503. scipy/stats/_hypotests.py +83 -50
  504. scipy/stats/_kde.py +53 -49
  505. scipy/stats/_ksstats.py +1 -1
  506. scipy/stats/_levy_stable/__init__.py +7 -15
  507. scipy/stats/_levy_stable/levyst.cpython-313t-darwin.so +0 -0
  508. scipy/stats/_morestats.py +118 -73
  509. scipy/stats/_mstats_basic.py +13 -17
  510. scipy/stats/_mstats_extras.py +8 -8
  511. scipy/stats/_multivariate.py +89 -113
  512. scipy/stats/_new_distributions.py +97 -20
  513. scipy/stats/_page_trend_test.py +12 -5
  514. scipy/stats/_probability_distribution.py +265 -43
  515. scipy/stats/_qmc.py +14 -9
  516. scipy/stats/_qmc_cy.cpython-313t-darwin.so +0 -0
  517. scipy/stats/_qmvnt.py +16 -95
  518. scipy/stats/_qmvnt_cy.cpython-313t-darwin.so +0 -0
  519. scipy/stats/_quantile.py +335 -0
  520. scipy/stats/_rcont/rcont.cpython-313t-darwin.so +0 -0
  521. scipy/stats/_resampling.py +4 -29
  522. scipy/stats/_sampling.py +1 -1
  523. scipy/stats/_sobol.cpython-313t-darwin.so +0 -0
  524. scipy/stats/_stats.cpython-313t-darwin.so +0 -0
  525. scipy/stats/_stats_mstats_common.py +21 -2
  526. scipy/stats/_stats_py.py +550 -476
  527. scipy/stats/_stats_pythran.cpython-313t-darwin.so +0 -0
  528. scipy/stats/_unuran/unuran_wrapper.cpython-313t-darwin.so +0 -0
  529. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  530. scipy/stats/_variation.py +6 -8
  531. scipy/stats/_wilcoxon.py +13 -7
  532. scipy/stats/tests/common_tests.py +6 -4
  533. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  534. scipy/stats/tests/test_continued_fraction.py +173 -0
  535. scipy/stats/tests/test_continuous.py +379 -60
  536. scipy/stats/tests/test_continuous_basic.py +18 -12
  537. scipy/stats/tests/test_discrete_basic.py +14 -8
  538. scipy/stats/tests/test_discrete_distns.py +16 -16
  539. scipy/stats/tests/test_distributions.py +95 -75
  540. scipy/stats/tests/test_entropy.py +40 -48
  541. scipy/stats/tests/test_fit.py +4 -3
  542. scipy/stats/tests/test_hypotests.py +153 -24
  543. scipy/stats/tests/test_kdeoth.py +109 -41
  544. scipy/stats/tests/test_marray.py +289 -0
  545. scipy/stats/tests/test_morestats.py +79 -47
  546. scipy/stats/tests/test_mstats_basic.py +3 -3
  547. scipy/stats/tests/test_multivariate.py +434 -83
  548. scipy/stats/tests/test_qmc.py +13 -10
  549. scipy/stats/tests/test_quantile.py +199 -0
  550. scipy/stats/tests/test_rank.py +119 -112
  551. scipy/stats/tests/test_resampling.py +47 -56
  552. scipy/stats/tests/test_sampling.py +9 -4
  553. scipy/stats/tests/test_stats.py +799 -939
  554. scipy/stats/tests/test_variation.py +8 -6
  555. scipy/version.py +2 -2
  556. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/LICENSE.txt +4 -4
  557. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/METADATA +11 -11
  558. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/RECORD +559 -566
  559. scipy-1.16.0rc2.dist-info/WHEEL +6 -0
  560. scipy/_lib/array_api_extra/_funcs.py +0 -484
  561. scipy/_lib/array_api_extra/_typing.py +0 -8
  562. scipy/interpolate/_bspl.cpython-313t-darwin.so +0 -0
  563. scipy/optimize/_cobyla.cpython-313t-darwin.so +0 -0
  564. scipy/optimize/_cython_nnls.cpython-313t-darwin.so +0 -0
  565. scipy/optimize/_slsqp.cpython-313t-darwin.so +0 -0
  566. scipy/spatial/qhull_src/COPYING.txt +0 -38
  567. scipy/special/libsf_error_state.dylib +0 -0
  568. scipy/special/tests/test_log_softmax.py +0 -109
  569. scipy/special/tests/test_xsf_cuda.py +0 -114
  570. scipy/special/xsf/binom.h +0 -89
  571. scipy/special/xsf/cdflib.h +0 -100
  572. scipy/special/xsf/cephes/airy.h +0 -307
  573. scipy/special/xsf/cephes/besselpoly.h +0 -51
  574. scipy/special/xsf/cephes/beta.h +0 -257
  575. scipy/special/xsf/cephes/cbrt.h +0 -131
  576. scipy/special/xsf/cephes/chbevl.h +0 -85
  577. scipy/special/xsf/cephes/chdtr.h +0 -193
  578. scipy/special/xsf/cephes/const.h +0 -87
  579. scipy/special/xsf/cephes/ellie.h +0 -293
  580. scipy/special/xsf/cephes/ellik.h +0 -251
  581. scipy/special/xsf/cephes/ellpe.h +0 -107
  582. scipy/special/xsf/cephes/ellpk.h +0 -117
  583. scipy/special/xsf/cephes/expn.h +0 -260
  584. scipy/special/xsf/cephes/gamma.h +0 -398
  585. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  586. scipy/special/xsf/cephes/hyperg.h +0 -361
  587. scipy/special/xsf/cephes/i0.h +0 -149
  588. scipy/special/xsf/cephes/i1.h +0 -158
  589. scipy/special/xsf/cephes/igam.h +0 -421
  590. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  591. scipy/special/xsf/cephes/igami.h +0 -313
  592. scipy/special/xsf/cephes/j0.h +0 -225
  593. scipy/special/xsf/cephes/j1.h +0 -198
  594. scipy/special/xsf/cephes/jv.h +0 -715
  595. scipy/special/xsf/cephes/k0.h +0 -164
  596. scipy/special/xsf/cephes/k1.h +0 -163
  597. scipy/special/xsf/cephes/kn.h +0 -243
  598. scipy/special/xsf/cephes/lanczos.h +0 -112
  599. scipy/special/xsf/cephes/ndtr.h +0 -275
  600. scipy/special/xsf/cephes/poch.h +0 -85
  601. scipy/special/xsf/cephes/polevl.h +0 -167
  602. scipy/special/xsf/cephes/psi.h +0 -194
  603. scipy/special/xsf/cephes/rgamma.h +0 -111
  604. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  605. scipy/special/xsf/cephes/shichi.h +0 -248
  606. scipy/special/xsf/cephes/sici.h +0 -224
  607. scipy/special/xsf/cephes/sindg.h +0 -221
  608. scipy/special/xsf/cephes/tandg.h +0 -139
  609. scipy/special/xsf/cephes/trig.h +0 -58
  610. scipy/special/xsf/cephes/unity.h +0 -186
  611. scipy/special/xsf/cephes/zeta.h +0 -172
  612. scipy/special/xsf/config.h +0 -304
  613. scipy/special/xsf/digamma.h +0 -205
  614. scipy/special/xsf/error.h +0 -57
  615. scipy/special/xsf/evalpoly.h +0 -47
  616. scipy/special/xsf/expint.h +0 -266
  617. scipy/special/xsf/hyp2f1.h +0 -694
  618. scipy/special/xsf/iv_ratio.h +0 -173
  619. scipy/special/xsf/lambertw.h +0 -150
  620. scipy/special/xsf/loggamma.h +0 -163
  621. scipy/special/xsf/sici.h +0 -200
  622. scipy/special/xsf/tools.h +0 -427
  623. scipy/special/xsf/trig.h +0 -164
  624. scipy/special/xsf/wright_bessel.h +0 -843
  625. scipy/special/xsf/zlog1.h +0 -35
  626. scipy/stats/_mvn.cpython-313t-darwin.so +0 -0
  627. scipy-1.15.3.dist-info/WHEEL +0 -4
@@ -317,8 +317,9 @@ def newton(func, x0, fprime=None, args=(), tol=1.48e-8, maxiter=50,
317
317
  msg = "Derivative was zero."
318
318
  if disp:
319
319
  msg += (
320
- " Failed to converge after %d iterations, value is %s."
321
- % (itr + 1, p0))
320
+ f" Failed to converge after {itr + 1} iterations,"
321
+ f" value is {p0}."
322
+ )
322
323
  raise RuntimeError(msg)
323
324
  warnings.warn(msg, RuntimeWarning, stacklevel=2)
324
325
  return _results_select(
@@ -365,8 +366,9 @@ def newton(func, x0, fprime=None, args=(), tol=1.48e-8, maxiter=50,
365
366
  msg = f"Tolerance of {p1 - p0} reached."
366
367
  if disp:
367
368
  msg += (
368
- " Failed to converge after %d iterations, value is %s."
369
- % (itr + 1, p1))
369
+ f" Failed to converge after {itr + 1} iterations,"
370
+ f" value is {p1}."
371
+ )
370
372
  raise RuntimeError(msg)
371
373
  warnings.warn(msg, RuntimeWarning, stacklevel=2)
372
374
  p = (p1 + p0) / 2.0
@@ -386,8 +388,7 @@ def newton(func, x0, fprime=None, args=(), tol=1.48e-8, maxiter=50,
386
388
  funcalls += 1
387
389
 
388
390
  if disp:
389
- msg = ("Failed to converge after %d iterations, value is %s."
390
- % (itr + 1, p))
391
+ msg = f"Failed to converge after {itr + 1} iterations, value is {p}."
391
392
  raise RuntimeError(msg)
392
393
 
393
394
  return _results_select(full_output, (p, funcalls, itr + 1, _ECONVERR), method)
@@ -512,11 +513,11 @@ def bisect(f, a, b, args=(),
512
513
  b : scalar
513
514
  The other end of the bracketing interval [a,b].
514
515
  xtol : number, optional
515
- The computed root ``x0`` will satisfy ``np.allclose(x, x0,
516
+ The computed root ``x0`` will satisfy ``np.isclose(x, x0,
516
517
  atol=xtol, rtol=rtol)``, where ``x`` is the exact root. The
517
518
  parameter must be positive.
518
519
  rtol : number, optional
519
- The computed root ``x0`` will satisfy ``np.allclose(x, x0,
520
+ The computed root ``x0`` will satisfy ``np.isclose(x, x0,
520
521
  atol=xtol, rtol=rtol)``, where ``x`` is the exact root. The
521
522
  parameter cannot be smaller than its default value of
522
523
  ``4*np.finfo(float).eps``.
@@ -543,6 +544,22 @@ def bisect(f, a, b, args=(),
543
544
  Object containing information about the convergence. In particular,
544
545
  ``r.converged`` is True if the routine converged.
545
546
 
547
+ Notes
548
+ -----
549
+ As mentioned in the parameter documentation, the computed root ``x0`` will
550
+ satisfy ``np.isclose(x, x0, atol=xtol, rtol=rtol)``, where ``x`` is the
551
+ exact root. In equation form, this terminating condition is ``abs(x - x0)
552
+ <= xtol + rtol * abs(x0)``.
553
+
554
+ The default value ``xtol=2e-12`` may lead to surprising behavior if one
555
+ expects `bisect` to always compute roots with relative error near machine
556
+ precision. Care should be taken to select `xtol` for the use case at hand.
557
+ Setting ``xtol=5e-324``, the smallest subnormal number, will ensure the
558
+ highest level of accuracy. Larger values of `xtol` may be useful for saving
559
+ function evaluations when a root is at or near zero in applications where
560
+ the tiny absolute differences available between floating point numbers near
561
+ zero are not meaningful.
562
+
546
563
  Examples
547
564
  --------
548
565
 
@@ -564,6 +581,7 @@ def bisect(f, a, b, args=(),
564
581
  brentq, brenth, bisect, newton
565
582
  fixed_point : scalar fixed-point finder
566
583
  fsolve : n-dimensional root-finding
584
+ elementwise.find_root : efficient elementwise 1-D root-finder
567
585
 
568
586
  """
569
587
  if not isinstance(args, tuple):
@@ -594,11 +612,11 @@ def ridder(f, a, b, args=(),
594
612
  b : scalar
595
613
  The other end of the bracketing interval [a,b].
596
614
  xtol : number, optional
597
- The computed root ``x0`` will satisfy ``np.allclose(x, x0,
615
+ The computed root ``x0`` will satisfy ``np.isclose(x, x0,
598
616
  atol=xtol, rtol=rtol)``, where ``x`` is the exact root. The
599
617
  parameter must be positive.
600
618
  rtol : number, optional
601
- The computed root ``x0`` will satisfy ``np.allclose(x, x0,
619
+ The computed root ``x0`` will satisfy ``np.isclose(x, x0,
602
620
  atol=xtol, rtol=rtol)``, where ``x`` is the exact root. The
603
621
  parameter cannot be smaller than its default value of
604
622
  ``4*np.finfo(float).eps``.
@@ -629,6 +647,7 @@ def ridder(f, a, b, args=(),
629
647
  --------
630
648
  brentq, brenth, bisect, newton : 1-D root-finding
631
649
  fixed_point : scalar fixed-point finder
650
+ elementwise.find_root : efficient elementwise 1-D root-finder
632
651
 
633
652
  Notes
634
653
  -----
@@ -641,6 +660,20 @@ def ridder(f, a, b, args=(),
641
660
  The routine used here diverges slightly from standard presentations in
642
661
  order to be a bit more careful of tolerance.
643
662
 
663
+ As mentioned in the parameter documentation, the computed root ``x0`` will
664
+ satisfy ``np.isclose(x, x0, atol=xtol, rtol=rtol)``, where ``x`` is the
665
+ exact root. In equation form, this terminating condition is ``abs(x - x0)
666
+ <= xtol + rtol * abs(x0)``.
667
+
668
+ The default value ``xtol=2e-12`` may lead to surprising behavior if one
669
+ expects `ridder` to always compute roots with relative error near machine
670
+ precision. Care should be taken to select `xtol` for the use case at hand.
671
+ Setting ``xtol=5e-324``, the smallest subnormal number, will ensure the
672
+ highest level of accuracy. Larger values of `xtol` may be useful for saving
673
+ function evaluations when a root is at or near zero in applications where
674
+ the tiny absolute differences available between floating point numbers near
675
+ zero are not meaningful.
676
+
644
677
  References
645
678
  ----------
646
679
  .. [Ridders1979]
@@ -709,13 +742,13 @@ def brentq(f, a, b, args=(),
709
742
  b : scalar
710
743
  The other end of the bracketing interval :math:`[a, b]`.
711
744
  xtol : number, optional
712
- The computed root ``x0`` will satisfy ``np.allclose(x, x0,
745
+ The computed root ``x0`` will satisfy ``np.isclose(x, x0,
713
746
  atol=xtol, rtol=rtol)``, where ``x`` is the exact root. The
714
747
  parameter must be positive. For nice functions, Brent's
715
748
  method will often satisfy the above condition with ``xtol/2``
716
749
  and ``rtol/2``. [Brent1973]_
717
750
  rtol : number, optional
718
- The computed root ``x0`` will satisfy ``np.allclose(x, x0,
751
+ The computed root ``x0`` will satisfy ``np.isclose(x, x0,
719
752
  atol=xtol, rtol=rtol)``, where ``x`` is the exact root. The
720
753
  parameter cannot be smaller than its default value of
721
754
  ``4*np.finfo(float).eps``. For nice functions, Brent's
@@ -754,11 +787,26 @@ def brentq(f, a, b, args=(),
754
787
  fsolve : N-D root-finding
755
788
  brenth, ridder, bisect, newton : 1-D root-finding
756
789
  fixed_point : scalar fixed-point finder
790
+ elementwise.find_root : efficient elementwise 1-D root-finder
757
791
 
758
792
  Notes
759
793
  -----
760
794
  `f` must be continuous. f(a) and f(b) must have opposite signs.
761
795
 
796
+ As mentioned in the parameter documentation, the computed root ``x0`` will
797
+ satisfy ``np.isclose(x, x0, atol=xtol, rtol=rtol)``, where ``x`` is the
798
+ exact root. In equation form, this terminating condition is ``abs(x - x0)
799
+ <= xtol + rtol * abs(x0)``.
800
+
801
+ The default value ``xtol=2e-12`` may lead to surprising behavior if one
802
+ expects `brentq` to always compute roots with relative error near machine
803
+ precision. Care should be taken to select `xtol` for the use case at hand.
804
+ Setting ``xtol=5e-324``, the smallest subnormal number, will ensure the
805
+ highest level of accuracy. Larger values of `xtol` may be useful for saving
806
+ function evaluations when a root is at or near zero in applications where
807
+ the tiny absolute differences available between floating point numbers near
808
+ zero are not meaningful.
809
+
762
810
  References
763
811
  ----------
764
812
  .. [Brent1973]
@@ -827,13 +875,13 @@ def brenth(f, a, b, args=(),
827
875
  b : scalar
828
876
  The other end of the bracketing interval [a,b].
829
877
  xtol : number, optional
830
- The computed root ``x0`` will satisfy ``np.allclose(x, x0,
878
+ The computed root ``x0`` will satisfy ``np.isclose(x, x0,
831
879
  atol=xtol, rtol=rtol)``, where ``x`` is the exact root. The
832
880
  parameter must be positive. As with `brentq`, for nice
833
881
  functions the method will often satisfy the above condition
834
882
  with ``xtol/2`` and ``rtol/2``.
835
883
  rtol : number, optional
836
- The computed root ``x0`` will satisfy ``np.allclose(x, x0,
884
+ The computed root ``x0`` will satisfy ``np.isclose(x, x0,
837
885
  atol=xtol, rtol=rtol)``, where ``x`` is the exact root. The
838
886
  parameter cannot be smaller than its default value of
839
887
  ``4*np.finfo(float).eps``. As with `brentq`, for nice functions
@@ -872,6 +920,23 @@ def brenth(f, a, b, args=(),
872
920
  fsolve : N-D root-finding
873
921
  brentq, ridder, bisect, newton : 1-D root-finding
874
922
  fixed_point : scalar fixed-point finder
923
+ elementwise.find_root : efficient elementwise 1-D root-finder
924
+
925
+ Notes
926
+ -----
927
+ As mentioned in the parameter documentation, the computed root ``x0`` will
928
+ satisfy ``np.isclose(x, x0, atol=xtol, rtol=rtol)``, where ``x`` is the
929
+ exact root. In equation form, this terminating condition is ``abs(x - x0)
930
+ <= xtol + rtol * abs(x0)``.
931
+
932
+ The default value ``xtol=2e-12`` may lead to surprising behavior if one
933
+ expects `brenth` to always compute roots with relative error near machine
934
+ precision. Care should be taken to select `xtol` for the use case at hand.
935
+ Setting ``xtol=5e-324``, the smallest subnormal number, will ensure the
936
+ highest level of accuracy. Larger values of `xtol` may be useful for saving
937
+ function evaluations when a root is at or near zero in applications where
938
+ the tiny absolute differences available between floating point numbers near
939
+ zero are not meaningful.
875
940
 
876
941
  References
877
942
  ----------
@@ -1089,7 +1154,7 @@ class TOMS748Solver:
1089
1154
  self.k = max(k, self._K_MIN)
1090
1155
  # Noisily replace a high value of k with self._K_MAX
1091
1156
  if self.k > self._K_MAX:
1092
- msg = "toms748: Overriding k: ->%d" % self._K_MAX
1157
+ msg = f"toms748: Overriding k: ->{self._K_MAX}"
1093
1158
  warnings.warn(msg, RuntimeWarning, stacklevel=3)
1094
1159
  self.k = self._K_MAX
1095
1160
 
@@ -1291,11 +1356,11 @@ def toms748(f, a, b, args=(), k=1,
1291
1356
  The number of Newton quadratic steps to perform each
1292
1357
  iteration. ``k>=1``.
1293
1358
  xtol : scalar, optional
1294
- The computed root ``x0`` will satisfy ``np.allclose(x, x0,
1359
+ The computed root ``x0`` will satisfy ``np.isclose(x, x0,
1295
1360
  atol=xtol, rtol=rtol)``, where ``x`` is the exact root. The
1296
1361
  parameter must be positive.
1297
1362
  rtol : scalar, optional
1298
- The computed root ``x0`` will satisfy ``np.allclose(x, x0,
1363
+ The computed root ``x0`` will satisfy ``np.isclose(x, x0,
1299
1364
  atol=xtol, rtol=rtol)``, where ``x`` is the exact root.
1300
1365
  maxiter : int, optional
1301
1366
  If convergence is not achieved in `maxiter` iterations, an error is
@@ -1321,6 +1386,7 @@ def toms748(f, a, b, args=(), k=1,
1321
1386
  --------
1322
1387
  brentq, brenth, ridder, bisect, newton
1323
1388
  fsolve : find roots in N dimensions.
1389
+ elementwise.find_root : efficient elementwise 1-D root-finder
1324
1390
 
1325
1391
  Notes
1326
1392
  -----
@@ -1343,6 +1409,20 @@ def toms748(f, a, b, args=(), k=1,
1343
1409
  the kth root of ``(3k-2)``, hence ``k=1`` or ``k=2`` are
1344
1410
  usually appropriate.
1345
1411
 
1412
+ As mentioned in the parameter documentation, the computed root ``x0`` will
1413
+ satisfy ``np.isclose(x, x0, atol=xtol, rtol=rtol)``, where ``x`` is the
1414
+ exact root. In equation form, this terminating condition is ``abs(x - x0)
1415
+ <= xtol + rtol * abs(x0)``.
1416
+
1417
+ The default value ``xtol=2e-12`` may lead to surprising behavior if one
1418
+ expects `toms748` to always compute roots with relative error near machine
1419
+ precision. Care should be taken to select `xtol` for the use case at hand.
1420
+ Setting ``xtol=5e-324``, the smallest subnormal number, will ensure the
1421
+ highest level of accuracy. Larger values of `xtol` may be useful for saving
1422
+ function evaluations when a root is at or near zero in applications where
1423
+ the tiny absolute differences available between floating point numbers near
1424
+ zero are not meaningful.
1425
+
1346
1426
  References
1347
1427
  ----------
1348
1428
  .. [APS1995]
scipy/optimize/slsqp.py CHANGED
@@ -9,7 +9,6 @@ __all__ = [ # noqa: F822
9
9
  'OptimizeResult',
10
10
  'fmin_slsqp',
11
11
  'slsqp',
12
- 'zeros',
13
12
  ]
14
13
 
15
14
 
@@ -210,7 +210,7 @@ class TestBasinHopping:
210
210
  niter=self.niter, disp=self.disp)
211
211
  assert_almost_equal(res.x, self.sol[i], self.tol)
212
212
 
213
- @pytest.mark.fail_slow(20)
213
+ @pytest.mark.fail_slow(40)
214
214
  def test_all_nograd_minimizers(self):
215
215
  # Test 2-D minimizations without gradient. Newton-CG requires jac=True,
216
216
  # so not included here.
@@ -11,7 +11,7 @@ from scipy.optimize import differential_evolution, OptimizeResult
11
11
  from scipy.optimize._constraints import (Bounds, NonlinearConstraint,
12
12
  LinearConstraint)
13
13
  from scipy.optimize import rosen, minimize
14
- from scipy.sparse import csr_matrix
14
+ from scipy.sparse import csr_array
15
15
  from scipy import stats
16
16
 
17
17
  import numpy as np
@@ -965,7 +965,7 @@ class TestDifferentialEvolutionSolver:
965
965
  violations.append(pc.violation(x))
966
966
  np.testing.assert_allclose(pc.violation(xs.T), np.array(violations).T)
967
967
 
968
- pc = _ConstraintWrapper(LinearConstraint(csr_matrix(A), -np.inf, 0),
968
+ pc = _ConstraintWrapper(LinearConstraint(csr_array(A), -np.inf, 0),
969
969
  x0)
970
970
  assert (pc.violation(x0) > 0).any()
971
971
  assert (pc.violation([-10, 2, -10, 4]) == 0).all()
@@ -1070,10 +1070,10 @@ class TestDifferentialEvolutionSolver:
1070
1070
  assert_(np.all(res.x <= np.array(bounds)[:, 1]))
1071
1071
 
1072
1072
  # now repeat the same solve, using the same overall constraints,
1073
- # but using a sparse matrix for the LinearConstraint instead of an
1073
+ # but using a sparse array for the LinearConstraint instead of an
1074
1074
  # array
1075
1075
 
1076
- L = LinearConstraint(csr_matrix(A), -np.inf, b)
1076
+ L = LinearConstraint(csr_array(A), -np.inf, b)
1077
1077
 
1078
1078
  # using a lower popsize to speed the test up
1079
1079
  res = differential_evolution(
@@ -1,13 +1,15 @@
1
1
  """
2
2
  Unit test for Linear Programming via Simplex Algorithm.
3
3
  """
4
+ from copy import deepcopy
5
+ from datetime import date
6
+
4
7
  import numpy as np
5
8
  from numpy.testing import assert_, assert_allclose, assert_equal
9
+ from numpy.exceptions import VisibleDeprecationWarning
6
10
  from pytest import raises as assert_raises
11
+
7
12
  from scipy.optimize._linprog_util import _clean_inputs, _LPProblem
8
- from scipy._lib._util import VisibleDeprecationWarning
9
- from copy import deepcopy
10
- from datetime import date
11
13
 
12
14
 
13
15
  def test_aliasing():
@@ -3,13 +3,16 @@ from itertools import product
3
3
 
4
4
  import numpy as np
5
5
  from numpy.testing import assert_allclose, assert_equal, assert_
6
+ import pytest
6
7
  from pytest import raises as assert_raises
7
8
 
8
- from scipy.sparse import csr_matrix, csc_matrix, lil_matrix
9
+ from scipy._lib._util import MapWrapper, _ScalarFunctionWrapper
10
+ from scipy.sparse import csr_array, csc_array, lil_array
9
11
 
10
12
  from scipy.optimize._numdiff import (
11
13
  _adjust_scheme_to_bounds, approx_derivative, check_derivative,
12
14
  group_columns, _eps_for_method, _compute_absolute_step)
15
+ from scipy.optimize import rosen
13
16
 
14
17
 
15
18
  def test_group_columns():
@@ -22,7 +25,7 @@ def test_group_columns():
22
25
  [0, 0, 0, 0, 1, 1],
23
26
  [0, 0, 0, 0, 0, 0]
24
27
  ]
25
- for transform in [np.asarray, csr_matrix, csc_matrix, lil_matrix]:
28
+ for transform in [np.asarray, csr_array, csc_array, lil_array]:
26
29
  A = transform(structure)
27
30
  order = np.arange(6)
28
31
  groups_true = np.array([0, 1, 2, 0, 1, 2])
@@ -267,16 +270,52 @@ class TestApproxDerivativesDense:
267
270
 
268
271
  def test_scalar_vector(self):
269
272
  x0 = 0.5
270
- jac_diff_2 = approx_derivative(self.fun_scalar_vector, x0,
271
- method='2-point')
272
- jac_diff_3 = approx_derivative(self.fun_scalar_vector, x0)
273
+ with MapWrapper(2) as mapper:
274
+ jac_diff_2 = approx_derivative(self.fun_scalar_vector, x0,
275
+ method='2-point', workers=mapper)
276
+ jac_diff_3 = approx_derivative(self.fun_scalar_vector, x0, workers=map)
273
277
  jac_diff_4 = approx_derivative(self.fun_scalar_vector, x0,
274
- method='cs')
278
+ method='cs', workers=None)
275
279
  jac_true = self.jac_scalar_vector(np.atleast_1d(x0))
276
280
  assert_allclose(jac_diff_2, jac_true, rtol=1e-6)
277
281
  assert_allclose(jac_diff_3, jac_true, rtol=1e-9)
278
282
  assert_allclose(jac_diff_4, jac_true, rtol=1e-12)
279
283
 
284
+ @pytest.mark.fail_slow(5.0)
285
+ def test_workers_evaluations_and_nfev(self):
286
+ # check that nfev consumed by approx_derivative is tracked properly
287
+ # and that parallel evaluation is same as series
288
+ x0 = [0.5, 1.5, 2.0]
289
+ with MapWrapper(2) as mapper:
290
+ md2, mdct2 = approx_derivative(rosen, x0,
291
+ method='2-point', workers=mapper,
292
+ full_output=True)
293
+ md3, mdct3 = approx_derivative(rosen, x0,
294
+ workers=mapper, full_output=True)
295
+ # supply a number for workers. This is not normally recommended
296
+ # for upstream workers as setting up processes incurs a large overhead
297
+ md4, mdct4 = approx_derivative(rosen, x0,
298
+ method='cs', workers=2,
299
+ full_output=True)
300
+
301
+ sfr = _ScalarFunctionWrapper(rosen)
302
+ d2, dct2 = approx_derivative(sfr, x0, method='2-point', full_output=True)
303
+ assert_equal(dct2['nfev'], sfr.nfev)
304
+ sfr.nfev = 0
305
+ d3, dct3 = approx_derivative(sfr, x0, full_output=True)
306
+ assert_equal(dct3['nfev'], sfr.nfev)
307
+ sfr.nfev = 0
308
+ d4, dct4 = approx_derivative(sfr, x0, method='cs', full_output=True)
309
+ assert_equal(dct4['nfev'], sfr.nfev)
310
+
311
+ assert_equal(mdct2['nfev'], dct2['nfev'])
312
+ assert_equal(mdct3['nfev'], dct3['nfev'])
313
+ assert_equal(mdct4['nfev'], dct4['nfev'])
314
+ # also check that gradients are equivalent
315
+ assert_equal(md2, d2)
316
+ assert_equal(md3, d3)
317
+ assert_equal(md4, d4)
318
+
280
319
  def test_vector_scalar(self):
281
320
  x0 = np.array([100.0, -0.5])
282
321
  jac_diff_2 = approx_derivative(self.fun_vector_scalar, x0,
@@ -308,8 +347,9 @@ class TestApproxDerivativesDense:
308
347
  jac_diff_2 = approx_derivative(self.fun_vector_vector, x0,
309
348
  method='2-point')
310
349
  jac_diff_3 = approx_derivative(self.fun_vector_vector, x0)
311
- jac_diff_4 = approx_derivative(self.fun_vector_vector, x0,
312
- method='cs')
350
+ with MapWrapper(2) as mapper:
351
+ jac_diff_4 = approx_derivative(self.fun_vector_vector, x0,
352
+ method='cs', workers=mapper)
313
353
  jac_true = self.jac_vector_vector(x0)
314
354
  assert_allclose(jac_diff_2, jac_true, rtol=1e-5)
315
355
  assert_allclose(jac_diff_3, jac_true, rtol=1e-6)
@@ -569,6 +609,7 @@ class TestApproxDerivativeSparse:
569
609
 
570
610
  return A
571
611
 
612
+ @pytest.mark.fail_slow(5)
572
613
  def test_all(self):
573
614
  A = self.structure(self.n)
574
615
  order = np.arange(self.n)
@@ -576,19 +617,22 @@ class TestApproxDerivativeSparse:
576
617
  np.random.shuffle(order)
577
618
  groups_2 = group_columns(A, order)
578
619
 
579
- for method, groups, l, u in product(
580
- ['2-point', '3-point', 'cs'], [groups_1, groups_2],
581
- [-np.inf, self.lb], [np.inf, self.ub]):
582
- J = approx_derivative(self.fun, self.x0, method=method,
583
- bounds=(l, u), sparsity=(A, groups))
584
- assert_(isinstance(J, csr_matrix))
585
- assert_allclose(J.toarray(), self.J_true, rtol=1e-6)
586
-
587
- rel_step = np.full_like(self.x0, 1e-8)
588
- rel_step[::2] *= -1
589
- J = approx_derivative(self.fun, self.x0, method=method,
590
- rel_step=rel_step, sparsity=(A, groups))
591
- assert_allclose(J.toarray(), self.J_true, rtol=1e-5)
620
+ with MapWrapper(2) as mapper:
621
+ for method, groups, l, u, mf in product(
622
+ ['2-point', '3-point', 'cs'], [groups_1, groups_2],
623
+ [-np.inf, self.lb], [np.inf, self.ub], [map, mapper]):
624
+ J = approx_derivative(self.fun, self.x0, method=method,
625
+ bounds=(l, u), sparsity=(A, groups),
626
+ workers=mf)
627
+ assert_(isinstance(J, csr_array))
628
+ assert_allclose(J.toarray(), self.J_true, rtol=1e-6)
629
+
630
+ rel_step = np.full_like(self.x0, 1e-8)
631
+ rel_step[::2] *= -1
632
+ J = approx_derivative(self.fun, self.x0, method=method,
633
+ rel_step=rel_step, sparsity=(A, groups),
634
+ workers=mf)
635
+ assert_allclose(J.toarray(), self.J_true, rtol=1e-5)
592
636
 
593
637
  def test_no_precomputed_groups(self):
594
638
  A = self.structure(self.n)
@@ -607,7 +651,7 @@ class TestApproxDerivativeSparse:
607
651
 
608
652
  def test_check_derivative(self):
609
653
  def jac(x):
610
- return csr_matrix(self.jac(x))
654
+ return csr_array(self.jac(x))
611
655
 
612
656
  accuracy = check_derivative(self.fun, jac, self.x0,
613
657
  bounds=(self.lb, self.ub))
@@ -18,7 +18,7 @@ from scipy.optimize._remove_redundancy import _remove_redundancy_pivot_dense
18
18
  from scipy.optimize._remove_redundancy import _remove_redundancy_pivot_sparse
19
19
  from scipy.optimize._remove_redundancy import _remove_redundancy_id
20
20
 
21
- from scipy.sparse import csc_matrix
21
+ from scipy.sparse import csc_array
22
22
 
23
23
 
24
24
  def setup_module():
@@ -223,6 +223,6 @@ class TestRRID(RRCommonTests):
223
223
 
224
224
  class TestRRPivotSparse(RRCommonTests):
225
225
  def rr(self, A, b):
226
- rr_res = _remove_redundancy_pivot_sparse(csc_matrix(A), b)
226
+ rr_res = _remove_redundancy_pivot_sparse(csc_array(A), b)
227
227
  A1, b1, status, message = rr_res
228
228
  return A1.toarray(), b1, status, message
@@ -26,7 +26,7 @@ class StructTestFunction:
26
26
  def wrap_constraints(g):
27
27
  cons = []
28
28
  if g is not None:
29
- if not isinstance(g, (tuple, list)):
29
+ if not isinstance(g, tuple | list):
30
30
  g = (g,)
31
31
  else:
32
32
  pass
@@ -856,6 +856,14 @@ class TestShgoArguments:
856
856
  assert_allclose(res.fun, ref.fun)
857
857
  assert_allclose(res.x, ref.x, atol=1e-15)
858
858
 
859
+ # Testing the passing of jac via options dict
860
+ res = shgo(func, bounds=bounds, sampling_method="sobol",
861
+ minimizer_kwargs={'method': 'SLSQP'},
862
+ options={'jac': True})
863
+ assert res.success
864
+ assert_allclose(res.fun, ref.fun)
865
+ assert_allclose(res.x, ref.x, atol=1e-15)
866
+
859
867
  @pytest.mark.parametrize('derivative', ['jac', 'hess', 'hessp'])
860
868
  def test_21_2_derivative_options(self, derivative):
861
869
  """shgo used to raise an error when passing `options` with 'jac'