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
@@ -7,6 +7,7 @@ Authors:
7
7
 
8
8
  """
9
9
  import itertools
10
+ import inspect
10
11
  import platform
11
12
  import threading
12
13
  import numpy as np
@@ -33,10 +34,11 @@ from scipy.optimize import rosen, rosen_der, rosen_hess
33
34
 
34
35
  from scipy.sparse import (coo_matrix, csc_matrix, csr_matrix, coo_array,
35
36
  csr_array, csc_array)
36
- from scipy.conftest import array_api_compatible
37
- from scipy._lib._array_api_no_0d import xp_assert_equal, array_namespace
37
+ from scipy._lib._array_api_no_0d import xp_assert_equal
38
+ from scipy._lib._array_api import make_xp_test_case
39
+ from scipy._lib._util import MapWrapper
38
40
 
39
- skip_xp_backends = pytest.mark.skip_xp_backends
41
+ lazy_xp_modules = [optimize]
40
42
 
41
43
 
42
44
  def test_check_grad():
@@ -1318,6 +1320,8 @@ class TestOptimizeSimple(CheckOptimize):
1318
1320
 
1319
1321
  if method == 'tnc':
1320
1322
  kwargs['options'] = dict(maxfun=100)
1323
+ elif method == 'cobyla':
1324
+ kwargs['options'] = dict(maxiter=100)
1321
1325
  else:
1322
1326
  kwargs['options'] = dict(maxiter=5)
1323
1327
 
@@ -1552,7 +1556,7 @@ class TestOptimizeSimple(CheckOptimize):
1552
1556
 
1553
1557
  @pytest.mark.parametrize('method', ['nelder-mead', 'powell', 'cg', 'bfgs',
1554
1558
  'newton-cg', 'l-bfgs-b', 'tnc',
1555
- 'cobyla', 'cobyqa', 'slsqp',
1559
+ 'cobyqa', 'slsqp',
1556
1560
  'trust-constr', 'dogleg', 'trust-ncg',
1557
1561
  'trust-exact', 'trust-krylov'])
1558
1562
  def test_nan_values(self, method, num_parallel_threads):
@@ -1683,6 +1687,23 @@ class TestOptimizeSimple(CheckOptimize):
1683
1687
  if method == 'cobyqa':
1684
1688
  ref = optimize.minimize(**kwargs, options={'maxfev': maxiter})
1685
1689
  assert res.nfev == ref.nfev == maxiter
1690
+ elif method == 'cobyla':
1691
+ # COBYLA calls the callback once per iteration, not once per function
1692
+ # evaluation, so this test is not applicable. However we can test
1693
+ # the COBYLA status to verify that res stopped back on the callback
1694
+ # and ref stopped based on the iteration limit.
1695
+ # COBYLA requires at least n+2 function evaluations
1696
+ maxiter = max(maxiter, len(kwargs['x0'])+2)
1697
+ ref = optimize.minimize(**kwargs, options={'maxiter': maxiter})
1698
+ assert res.status == 30
1699
+ assert res.message == ("Return from COBYLA because the callback function "
1700
+ "requested termination")
1701
+ assert ref.status == 3
1702
+ assert ref.message == ("Return from COBYLA because the objective function "
1703
+ "has been evaluated MAXFUN times.")
1704
+ # Return early because res/ref will be unequal for COBYLA for the reasons
1705
+ # mentioned above.
1706
+ return
1686
1707
  else:
1687
1708
  ref = optimize.minimize(**kwargs, options={'maxiter': maxiter})
1688
1709
  assert res.nit == ref.nit == maxiter
@@ -2453,33 +2474,29 @@ def test_powell_output():
2453
2474
  assert np.isscalar(res.fun)
2454
2475
 
2455
2476
 
2456
- @array_api_compatible
2457
2477
  class TestRosen:
2478
+ @make_xp_test_case(optimize.rosen)
2458
2479
  def test_rosen(self, xp):
2459
2480
  # integer input should be promoted to the default floating type
2460
2481
  x = xp.asarray([1, 1, 1])
2461
2482
  xp_assert_equal(optimize.rosen(x),
2462
2483
  xp.asarray(0.))
2463
2484
 
2464
- @skip_xp_backends('jax.numpy',
2465
- reasons=["JAX arrays do not support item assignment"])
2466
- @pytest.mark.usefixtures("skip_xp_backends")
2485
+ @make_xp_test_case(optimize.rosen_der)
2467
2486
  def test_rosen_der(self, xp):
2468
2487
  x = xp.asarray([1, 1, 1, 1])
2469
2488
  xp_assert_equal(optimize.rosen_der(x),
2470
2489
  xp.zeros_like(x, dtype=xp.asarray(1.).dtype))
2471
2490
 
2472
- @skip_xp_backends('jax.numpy',
2473
- reasons=["JAX arrays do not support item assignment"])
2474
- @pytest.mark.usefixtures("skip_xp_backends")
2491
+ @make_xp_test_case(optimize.rosen_hess, optimize.rosen_hess_prod)
2475
2492
  def test_hess_prod(self, xp):
2476
2493
  one = xp.asarray(1.)
2477
- xp_test = array_namespace(one)
2494
+
2478
2495
  # Compare rosen_hess(x) times p with rosen_hess_prod(x,p). See gh-1775.
2479
2496
  x = xp.asarray([3, 4, 5])
2480
2497
  p = xp.asarray([2, 2, 2])
2481
2498
  hp = optimize.rosen_hess_prod(x, p)
2482
- p = xp_test.astype(p, one.dtype)
2499
+ p = xp.astype(p, one.dtype)
2483
2500
  dothp = optimize.rosen_hess(x) @ p
2484
2501
  xp_assert_equal(hp, dothp)
2485
2502
 
@@ -2907,6 +2924,10 @@ def setup_test_equal_bounds():
2907
2924
  def callback(x, *args):
2908
2925
  check_x(x)
2909
2926
 
2927
+ def callback2(intermediate_result):
2928
+ assert isinstance(intermediate_result, OptimizeResult)
2929
+ check_x(intermediate_result.x)
2930
+
2910
2931
  def constraint1(x):
2911
2932
  check_x(x, check_values=False)
2912
2933
  return x[0:1] - 1
@@ -2957,7 +2978,7 @@ def setup_test_equal_bounds():
2957
2978
  ([c1b, c2b], [c1b, c2b]))
2958
2979
 
2959
2980
  # test with and without callback function
2960
- callbacks = (None, callback)
2981
+ callbacks = (None, callback, callback2)
2961
2982
 
2962
2983
  data = {"methods": methods, "kwds": kwds, "bound_types": bound_types,
2963
2984
  "constraints": constraints, "callbacks": callbacks,
@@ -2996,6 +3017,12 @@ def test_equal_bounds(method, kwds, bound_type, constraints, callback):
2996
3017
  test_constraints, reference_constraints = constraints
2997
3018
  if test_constraints and not method == 'SLSQP':
2998
3019
  pytest.skip('Only SLSQP supports nonlinear constraints')
3020
+
3021
+ if method in ['SLSQP', 'TNC'] and callable(callback):
3022
+ sig = inspect.signature(callback)
3023
+ if 'intermediate_result' in set(sig.parameters):
3024
+ pytest.skip("SLSQP, TNC don't support intermediate_result")
3025
+
2999
3026
  # reference constraints always have analytical jacobian
3000
3027
  # if test constraints are not the same, we'll need finite differences
3001
3028
  fd_needed = (test_constraints != reference_constraints)
@@ -3012,7 +3039,7 @@ def test_equal_bounds(method, kwds, bound_type, constraints, callback):
3012
3039
 
3013
3040
  # compare the output of a solution with FD vs that of an analytic grad
3014
3041
  assert res.success
3015
- assert_allclose(res.fun, expected.fun, rtol=1.5e-6)
3042
+ assert_allclose(res.fun, expected.fun, rtol=2e-6)
3016
3043
  assert_allclose(res.x, expected.x, rtol=5e-4)
3017
3044
 
3018
3045
  if fd_needed or kwds['jac'] is False:
@@ -3236,8 +3263,8 @@ def test_gh12594():
3236
3263
  coo_array, csr_array, csc_array])
3237
3264
  def test_sparse_hessian(method, sparse_type):
3238
3265
  # gh-8792 reported an error for minimization with `newton_cg` when `hess`
3239
- # returns a sparse matrix. Check that results are the same whether `hess`
3240
- # returns a dense or sparse matrix for optimization methods that accept
3266
+ # returns a sparse array. Check that results are the same whether `hess`
3267
+ # returns a dense or sparse array for optimization methods that accept
3241
3268
  # sparse Hessian matrices.
3242
3269
 
3243
3270
  def sparse_rosen_hess(x):
@@ -3255,3 +3282,54 @@ def test_sparse_hessian(method, sparse_type):
3255
3282
  assert res_dense.nfev == res_sparse.nfev
3256
3283
  assert res_dense.njev == res_sparse.njev
3257
3284
  assert res_dense.nhev == res_sparse.nhev
3285
+
3286
+
3287
+ @pytest.mark.parametrize('workers', [None, 2])
3288
+ @pytest.mark.parametrize(
3289
+ 'method',
3290
+ ['l-bfgs-b',
3291
+ 'bfgs',
3292
+ 'slsqp',
3293
+ 'trust-constr',
3294
+ 'Newton-CG',
3295
+ 'CG',
3296
+ 'tnc',
3297
+ 'trust-ncg',
3298
+ 'trust-krylov'])
3299
+ class TestWorkers:
3300
+
3301
+ def setup_method(self):
3302
+ self.x0 = np.array([1.0, 2.0, 3.0])
3303
+
3304
+ def test_smoke(self, workers, method):
3305
+ # checks parallelised optimization output is same as serial
3306
+ workers = workers or map
3307
+
3308
+ kwds = {'jac': None, 'hess': None}
3309
+ if method in ['Newton-CG', 'trust-ncg', 'trust-krylov']:
3310
+ # methods that require a callable jac
3311
+ kwds['jac'] = rosen_der
3312
+ kwds['hess'] = '2-point'
3313
+
3314
+ with MapWrapper(workers) as mf:
3315
+ res = optimize.minimize(
3316
+ rosen, self.x0, options={"workers":mf}, method=method, **kwds
3317
+ )
3318
+ res_default = optimize.minimize(
3319
+ rosen, self.x0, method=method, **kwds
3320
+ )
3321
+ assert_equal(res.x, res_default.x)
3322
+ assert_equal(res.nfev, res_default.nfev)
3323
+
3324
+ def test_equal_bounds(self, workers, method):
3325
+ workers = workers or map
3326
+ if method not in ['l-bfgs-b', 'slsqp', 'trust-constr', 'tnc']:
3327
+ pytest.skip(f"{method} cannot use bounds")
3328
+
3329
+ bounds = Bounds([0, 2.0, 0.], [10., 2.0, 10.])
3330
+ with MapWrapper(workers) as mf:
3331
+ res = optimize.minimize(
3332
+ rosen, self.x0, bounds=bounds, options={"workers": mf}, method=method
3333
+ )
3334
+ assert res.success
3335
+ assert_allclose(res.x[1], 2.0)
@@ -592,7 +592,6 @@ class TestSLSQP:
592
592
  # The problem is infeasible, so it cannot succeed
593
593
  assert not res.success
594
594
 
595
- @pytest.mark.thread_unsafe
596
595
  def test_parameters_stay_within_bounds(self):
597
596
  # gh11403. For some problems the SLSQP Fortran code suggests a step
598
597
  # outside one of the lower/upper bounds. When this happens
@@ -607,7 +606,40 @@ class TestSLSQP:
607
606
  def f(x):
608
607
  assert (x >= bounds.lb).all()
609
608
  return np.linalg.norm(x)
609
+ # The following should not raise any warnings which was the case, with the
610
+ # old Fortran code.
611
+ res = minimize(f, x0, method='SLSQP', bounds=bounds)
612
+ assert res.success
613
+
614
+
615
+ def test_slsqp_segfault_wrong_workspace_computation():
616
+ # See gh-14915
617
+ # This problem is not well-defined, however should not cause a segfault.
618
+ # The previous F77 workspace computation did not handle only equality-
619
+ # constrained problems correctly.
620
+ rng = np.random.default_rng(1742651087222879)
621
+ x = rng.uniform(size=[22,365])
622
+ target = np.linspace(0.9, 4.0, 50)
623
+
624
+ def metric(v, weights):
625
+ return [[0, 0],[1, 1]]
626
+
627
+ def efficient_metric(v, target):
628
+ def metric_a(weights):
629
+ return metric(v, weights)[1][0]
630
+
631
+ def metric_b(weights, v):
632
+ return metric(v, weights)[0][0]
633
+
634
+ constraints = ({'type': 'eq', 'fun': lambda x: metric_a(x) - target},
635
+ {'type': 'eq', 'fun': lambda x: np.sum(x) - 1})
636
+ weights = np.array([len(v)*[1./len(v)]])[0]
637
+ result = minimize(metric_b,
638
+ weights,
639
+ args=(v,),
640
+ method='SLSQP',
641
+ constraints=constraints)
642
+ return result
643
+
644
+ efficient_metric(x, target)
610
645
 
611
- with pytest.warns(RuntimeWarning, match='x were outside bounds'):
612
- res = minimize(f, x0, method='SLSQP', bounds=bounds)
613
- assert res.success
@@ -225,6 +225,10 @@ class TestBracketMethods(TestScalarRootFinders):
225
225
  assert r.converged
226
226
  assert_allclose(root, 0)
227
227
 
228
+ def test_gh_22934(self):
229
+ with pytest.raises(ValueError, match="maxiter must be >= 0"):
230
+ zeros.brentq(lambda x: x**2 - 1, -2, 0, maxiter=-1)
231
+
228
232
 
229
233
  class TestNewton(TestScalarRootFinders):
230
234
  def test_newton_collections(self):
@@ -428,7 +432,7 @@ class TestNewton(TestScalarRootFinders):
428
432
  if derivs == 1:
429
433
  # Check that the correct Exception is raised and
430
434
  # validate the start of the message.
431
- msg = 'Failed to converge after %d iterations, value is .*' % (iters)
435
+ msg = f'Failed to converge after {iters} iterations, value is .*'
432
436
  with pytest.raises(RuntimeError, match=msg):
433
437
  x, r = zeros.newton(f1, x0, maxiter=iters, disp=True, **kwargs)
434
438
 
@@ -508,6 +512,18 @@ class TestNewton(TestScalarRootFinders):
508
512
  assert_allclose(abs(res.root), 2**-0.5)
509
513
  assert res.root.dtype == np.dtype(np.float64)
510
514
 
515
+ def test_newton_special_parameters(self):
516
+ # give zeros.newton() some strange parameters
517
+ # and check whether an exception appears
518
+ with pytest.raises(ValueError, match="tol too small"):
519
+ zeros.newton(f1, 3, tol=-1e-6)
520
+
521
+ with pytest.raises(ValueError, match="maxiter must be greater than 0"):
522
+ zeros.newton(f1, 3, tol=1e-6, maxiter=-50)
523
+
524
+ with pytest.raises(ValueError, match="x1 and x0 must be different" ):
525
+ zeros.newton(f1, 3, x1=3)
526
+
511
527
 
512
528
  def test_gh_5555():
513
529
  root = 0.1
@@ -963,3 +979,20 @@ def test_maxiter_int_check_gh10236(method):
963
979
  message = "'float' object cannot be interpreted as an integer"
964
980
  with pytest.raises(TypeError, match=message):
965
981
  method(f1, 0.0, 1.0, maxiter=72.45)
982
+
983
+ @pytest.mark.parametrize("method", [zeros.bisect, zeros.ridder,
984
+ zeros.brentq, zeros.brenth])
985
+ def test_bisect_special_parameter(method):
986
+ # give some zeros method strange parameters
987
+ # and check whether an exception appears
988
+ root = 0.1
989
+ args = (1e-09, 0.004, 10, 0.27456)
990
+ rtolbad = 4 * np.finfo(float).eps / 2
991
+
992
+ def f(x):
993
+ return x - root
994
+
995
+ with pytest.raises(ValueError, match="xtol too small"):
996
+ method(f, -1e8, 1e7, args=args, xtol=-1e-6, rtol=TOL)
997
+ with pytest.raises(ValueError, match="rtol too small"):
998
+ method(f, -1e8, 1e7, args=args, xtol=1e-6, rtol=rtolbad)
scipy/signal/__init__.py CHANGED
@@ -87,9 +87,12 @@ Filter design
87
87
  -- defined as pass and stop bands.
88
88
  firwin2 -- Windowed FIR filter design, with arbitrary frequency
89
89
  -- response.
90
+ firwin_2d -- Windowed FIR filter design, with frequency response for
91
+ -- 2D using 1D design.
90
92
  freqs -- Analog filter frequency response from TF coefficients.
91
93
  freqs_zpk -- Analog filter frequency response from ZPK coefficients.
92
94
  freqz -- Digital filter frequency response from TF coefficients.
95
+ sosfreqz -- Digital filter frequency response for SOS format filter (legacy).
93
96
  freqz_sos -- Digital filter frequency response for SOS format filter.
94
97
  freqz_zpk -- Digital filter frequency response from ZPK coefficients.
95
98
  gammatone -- FIR and IIR gammatone filter design.
@@ -266,9 +269,11 @@ Spectral analysis
266
269
  ShortTimeFFT -- Interface for calculating the \
267
270
  :ref:`Short Time Fourier Transform <tutorial_stft>` and \
268
271
  its inverse.
272
+ closest_STFT_dual_window -- Calculate the STFT dual window of a given window \
273
+ closest to a desired dual window.
269
274
  stft -- Compute the Short Time Fourier Transform (legacy).
270
275
  istft -- Compute the Inverse Short Time Fourier Transform (legacy).
271
- check_COLA -- Check the COLA constraint for iSTFT reconstruction.
276
+ check_COLA -- Check the COLA constraint for iSTFT reconstruction (legacy).
272
277
  check_NOLA -- Check the NOLA constraint for iSTFT reconstruction.
273
278
 
274
279
  Chirp Z-transform and Zoom FFT
@@ -289,28 +294,15 @@ repeatedly generate the same chirp signal with every call. In these cases,
289
294
  use the classes to create a reusable function instead.
290
295
 
291
296
  """
297
+ # bring in the public functionality from private namespaces
292
298
 
293
- from . import _sigtools, windows
294
- from ._waveforms import *
295
- from ._max_len_seq import max_len_seq
296
- from ._upfirdn import upfirdn
299
+ # mypy: ignore-errors
297
300
 
298
- from ._spline import (
299
- sepfir2d
300
- )
301
+ from ._support_alternative_backends import *
302
+ from . import _support_alternative_backends
303
+ __all__ = _support_alternative_backends.__all__
304
+ del _support_alternative_backends, _signal_api, _delegators # noqa: F821
301
305
 
302
- from ._spline_filters import *
303
- from ._filter_design import *
304
- from ._fir_filter_design import *
305
- from ._ltisys import *
306
- from ._lti_conversion import *
307
- from ._signaltools import *
308
- from ._savitzky_golay import savgol_coeffs, savgol_filter
309
- from ._spectral_py import *
310
- from ._short_time_fft import *
311
- from ._peak_finding import *
312
- from ._czt import *
313
- from .windows import get_window # keep this one in signal namespace
314
306
 
315
307
  # Deprecated namespaces, to be removed in v2.0.0
316
308
  from . import (
@@ -318,9 +310,6 @@ from . import (
318
310
  spectral, signaltools, waveforms, wavelets, spline
319
311
  )
320
312
 
321
- __all__ = [
322
- s for s in dir() if not s.startswith("_")
323
- ]
324
313
 
325
314
  from scipy._lib._testutils import PytestTester
326
315
  test = PytestTester(__name__)