scipy 1.15.2__cp313-cp313t-macosx_12_0_arm64.whl → 1.16.0rc1__cp313-cp313t-macosx_12_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (638) hide show
  1. scipy/.dylibs/libscipy_openblas.dylib +0 -0
  2. scipy/__config__.py +7 -7
  3. scipy/__init__.py +3 -6
  4. scipy/_cyutility.cpython-313t-darwin.so +0 -0
  5. scipy/_lib/_array_api.py +497 -161
  6. scipy/_lib/_array_api_compat_vendor.py +9 -0
  7. scipy/_lib/_bunch.py +4 -0
  8. scipy/_lib/_ccallback_c.cpython-313t-darwin.so +0 -0
  9. scipy/_lib/_docscrape.py +1 -1
  10. scipy/_lib/_elementwise_iterative_method.py +15 -26
  11. scipy/_lib/_sparse.py +41 -0
  12. scipy/_lib/_test_ccallback.cpython-313t-darwin.so +0 -0
  13. scipy/_lib/_test_deprecation_call.cpython-313t-darwin.so +0 -0
  14. scipy/_lib/_test_deprecation_def.cpython-313t-darwin.so +0 -0
  15. scipy/_lib/_testutils.py +6 -2
  16. scipy/_lib/_util.py +222 -125
  17. scipy/_lib/array_api_compat/__init__.py +4 -4
  18. scipy/_lib/array_api_compat/_internal.py +19 -6
  19. scipy/_lib/array_api_compat/common/__init__.py +1 -1
  20. scipy/_lib/array_api_compat/common/_aliases.py +365 -193
  21. scipy/_lib/array_api_compat/common/_fft.py +94 -64
  22. scipy/_lib/array_api_compat/common/_helpers.py +413 -180
  23. scipy/_lib/array_api_compat/common/_linalg.py +116 -40
  24. scipy/_lib/array_api_compat/common/_typing.py +179 -10
  25. scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
  26. scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
  27. scipy/_lib/array_api_compat/cupy/_info.py +16 -6
  28. scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
  29. scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
  30. scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
  31. scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
  32. scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
  33. scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
  34. scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
  35. scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
  36. scipy/_lib/array_api_compat/numpy/_info.py +36 -16
  37. scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
  38. scipy/_lib/array_api_compat/numpy/fft.py +11 -5
  39. scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
  40. scipy/_lib/array_api_compat/torch/__init__.py +3 -5
  41. scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
  42. scipy/_lib/array_api_compat/torch/_info.py +27 -16
  43. scipy/_lib/array_api_compat/torch/_typing.py +3 -0
  44. scipy/_lib/array_api_compat/torch/fft.py +17 -18
  45. scipy/_lib/array_api_compat/torch/linalg.py +16 -16
  46. scipy/_lib/array_api_extra/__init__.py +26 -3
  47. scipy/_lib/array_api_extra/_delegation.py +171 -0
  48. scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
  49. scipy/_lib/array_api_extra/_lib/_at.py +463 -0
  50. scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
  51. scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
  52. scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
  53. scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
  54. scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
  55. scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
  56. scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
  57. scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
  58. scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
  59. scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
  60. scipy/_lib/array_api_extra/testing.py +359 -0
  61. scipy/_lib/decorator.py +2 -2
  62. scipy/_lib/doccer.py +1 -7
  63. scipy/_lib/messagestream.cpython-313t-darwin.so +0 -0
  64. scipy/_lib/pyprima/__init__.py +212 -0
  65. scipy/_lib/pyprima/cobyla/__init__.py +0 -0
  66. scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
  67. scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
  68. scipy/_lib/pyprima/cobyla/geometry.py +226 -0
  69. scipy/_lib/pyprima/cobyla/initialize.py +215 -0
  70. scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
  71. scipy/_lib/pyprima/cobyla/update.py +289 -0
  72. scipy/_lib/pyprima/common/__init__.py +0 -0
  73. scipy/_lib/pyprima/common/_bounds.py +34 -0
  74. scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
  75. scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
  76. scipy/_lib/pyprima/common/_project.py +173 -0
  77. scipy/_lib/pyprima/common/checkbreak.py +93 -0
  78. scipy/_lib/pyprima/common/consts.py +47 -0
  79. scipy/_lib/pyprima/common/evaluate.py +99 -0
  80. scipy/_lib/pyprima/common/history.py +38 -0
  81. scipy/_lib/pyprima/common/infos.py +30 -0
  82. scipy/_lib/pyprima/common/linalg.py +435 -0
  83. scipy/_lib/pyprima/common/message.py +290 -0
  84. scipy/_lib/pyprima/common/powalg.py +131 -0
  85. scipy/_lib/pyprima/common/preproc.py +277 -0
  86. scipy/_lib/pyprima/common/present.py +5 -0
  87. scipy/_lib/pyprima/common/ratio.py +54 -0
  88. scipy/_lib/pyprima/common/redrho.py +47 -0
  89. scipy/_lib/pyprima/common/selectx.py +296 -0
  90. scipy/_lib/tests/test__util.py +105 -121
  91. scipy/_lib/tests/test_array_api.py +169 -34
  92. scipy/_lib/tests/test_bunch.py +7 -0
  93. scipy/_lib/tests/test_ccallback.py +2 -10
  94. scipy/_lib/tests/test_public_api.py +13 -0
  95. scipy/cluster/_hierarchy.cpython-313t-darwin.so +0 -0
  96. scipy/cluster/_optimal_leaf_ordering.cpython-313t-darwin.so +0 -0
  97. scipy/cluster/_vq.cpython-313t-darwin.so +0 -0
  98. scipy/cluster/hierarchy.py +393 -223
  99. scipy/cluster/tests/test_hierarchy.py +273 -335
  100. scipy/cluster/tests/test_vq.py +45 -61
  101. scipy/cluster/vq.py +39 -35
  102. scipy/conftest.py +263 -157
  103. scipy/constants/_constants.py +4 -1
  104. scipy/constants/tests/test_codata.py +2 -2
  105. scipy/constants/tests/test_constants.py +11 -18
  106. scipy/datasets/_download_all.py +15 -1
  107. scipy/datasets/_fetchers.py +7 -1
  108. scipy/datasets/_utils.py +1 -1
  109. scipy/differentiate/_differentiate.py +25 -25
  110. scipy/differentiate/tests/test_differentiate.py +24 -25
  111. scipy/fft/_basic.py +20 -0
  112. scipy/fft/_helper.py +3 -34
  113. scipy/fft/_pocketfft/helper.py +29 -1
  114. scipy/fft/_pocketfft/tests/test_basic.py +2 -4
  115. scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
  116. scipy/fft/_realtransforms.py +13 -0
  117. scipy/fft/tests/test_basic.py +27 -25
  118. scipy/fft/tests/test_fftlog.py +16 -7
  119. scipy/fft/tests/test_helper.py +18 -34
  120. scipy/fft/tests/test_real_transforms.py +8 -10
  121. scipy/fftpack/convolve.cpython-313t-darwin.so +0 -0
  122. scipy/fftpack/tests/test_basic.py +2 -4
  123. scipy/fftpack/tests/test_real_transforms.py +8 -9
  124. scipy/integrate/_bvp.py +9 -3
  125. scipy/integrate/_cubature.py +3 -2
  126. scipy/integrate/_dop.cpython-313t-darwin.so +0 -0
  127. scipy/integrate/_ivp/common.py +3 -3
  128. scipy/integrate/_ivp/ivp.py +9 -2
  129. scipy/integrate/_ivp/tests/test_ivp.py +19 -0
  130. scipy/integrate/_lsoda.cpython-313t-darwin.so +0 -0
  131. scipy/integrate/_ode.py +9 -2
  132. scipy/integrate/_odepack.cpython-313t-darwin.so +0 -0
  133. scipy/integrate/_quad_vec.py +21 -29
  134. scipy/integrate/_quadpack.cpython-313t-darwin.so +0 -0
  135. scipy/integrate/_quadpack_py.py +11 -7
  136. scipy/integrate/_quadrature.py +3 -3
  137. scipy/integrate/_rules/_base.py +2 -2
  138. scipy/integrate/_tanhsinh.py +57 -54
  139. scipy/integrate/_test_odeint_banded.cpython-313t-darwin.so +0 -0
  140. scipy/integrate/_vode.cpython-313t-darwin.so +0 -0
  141. scipy/integrate/tests/test__quad_vec.py +0 -6
  142. scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
  143. scipy/integrate/tests/test_cubature.py +21 -35
  144. scipy/integrate/tests/test_quadrature.py +6 -8
  145. scipy/integrate/tests/test_tanhsinh.py +61 -43
  146. scipy/interpolate/__init__.py +70 -58
  147. scipy/interpolate/_bary_rational.py +22 -22
  148. scipy/interpolate/_bsplines.py +119 -66
  149. scipy/interpolate/_cubic.py +65 -50
  150. scipy/interpolate/_dfitpack.cpython-313t-darwin.so +0 -0
  151. scipy/interpolate/_dierckx.cpython-313t-darwin.so +0 -0
  152. scipy/interpolate/_fitpack.cpython-313t-darwin.so +0 -0
  153. scipy/interpolate/_fitpack2.py +9 -6
  154. scipy/interpolate/_fitpack_impl.py +32 -26
  155. scipy/interpolate/_fitpack_repro.py +23 -19
  156. scipy/interpolate/_interpnd.cpython-313t-darwin.so +0 -0
  157. scipy/interpolate/_interpolate.py +30 -12
  158. scipy/interpolate/_ndbspline.py +13 -18
  159. scipy/interpolate/_ndgriddata.py +5 -8
  160. scipy/interpolate/_polyint.py +95 -31
  161. scipy/interpolate/_ppoly.cpython-313t-darwin.so +0 -0
  162. scipy/interpolate/_rbf.py +2 -2
  163. scipy/interpolate/_rbfinterp.py +1 -1
  164. scipy/interpolate/_rbfinterp_pythran.cpython-313t-darwin.so +0 -0
  165. scipy/interpolate/_rgi.py +31 -26
  166. scipy/interpolate/_rgi_cython.cpython-313t-darwin.so +0 -0
  167. scipy/interpolate/dfitpack.py +0 -20
  168. scipy/interpolate/interpnd.py +1 -2
  169. scipy/interpolate/tests/test_bary_rational.py +2 -2
  170. scipy/interpolate/tests/test_bsplines.py +97 -1
  171. scipy/interpolate/tests/test_fitpack2.py +39 -1
  172. scipy/interpolate/tests/test_interpnd.py +32 -20
  173. scipy/interpolate/tests/test_interpolate.py +48 -4
  174. scipy/interpolate/tests/test_rgi.py +2 -1
  175. scipy/io/_fast_matrix_market/__init__.py +2 -0
  176. scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
  177. scipy/io/_harwell_boeing/hb.py +7 -11
  178. scipy/io/_idl.py +5 -7
  179. scipy/io/_netcdf.py +15 -5
  180. scipy/io/_test_fortran.cpython-313t-darwin.so +0 -0
  181. scipy/io/arff/tests/test_arffread.py +3 -3
  182. scipy/io/matlab/__init__.py +5 -3
  183. scipy/io/matlab/_mio.py +4 -1
  184. scipy/io/matlab/_mio5.py +19 -13
  185. scipy/io/matlab/_mio5_utils.cpython-313t-darwin.so +0 -0
  186. scipy/io/matlab/_mio_utils.cpython-313t-darwin.so +0 -0
  187. scipy/io/matlab/_miobase.py +4 -1
  188. scipy/io/matlab/_streams.cpython-313t-darwin.so +0 -0
  189. scipy/io/matlab/tests/test_mio.py +46 -18
  190. scipy/io/matlab/tests/test_mio_funcs.py +1 -1
  191. scipy/io/tests/test_mmio.py +7 -1
  192. scipy/io/tests/test_wavfile.py +41 -0
  193. scipy/io/wavfile.py +57 -10
  194. scipy/linalg/_basic.py +113 -86
  195. scipy/linalg/_cythonized_array_utils.cpython-313t-darwin.so +0 -0
  196. scipy/linalg/_decomp.py +22 -9
  197. scipy/linalg/_decomp_cholesky.py +28 -13
  198. scipy/linalg/_decomp_cossin.py +45 -30
  199. scipy/linalg/_decomp_interpolative.cpython-313t-darwin.so +0 -0
  200. scipy/linalg/_decomp_ldl.py +4 -1
  201. scipy/linalg/_decomp_lu.py +18 -6
  202. scipy/linalg/_decomp_lu_cython.cpython-313t-darwin.so +0 -0
  203. scipy/linalg/_decomp_polar.py +2 -0
  204. scipy/linalg/_decomp_qr.py +6 -2
  205. scipy/linalg/_decomp_qz.py +3 -0
  206. scipy/linalg/_decomp_schur.py +3 -1
  207. scipy/linalg/_decomp_svd.py +13 -2
  208. scipy/linalg/_decomp_update.cpython-313t-darwin.so +0 -0
  209. scipy/linalg/_expm_frechet.py +4 -0
  210. scipy/linalg/_fblas.cpython-313t-darwin.so +0 -0
  211. scipy/linalg/_flapack.cpython-313t-darwin.so +0 -0
  212. scipy/linalg/_linalg_pythran.cpython-313t-darwin.so +0 -0
  213. scipy/linalg/_matfuncs.py +187 -4
  214. scipy/linalg/_matfuncs_expm.cpython-313t-darwin.so +0 -0
  215. scipy/linalg/_matfuncs_schur_sqrtm.cpython-313t-darwin.so +0 -0
  216. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  217. scipy/linalg/_matfuncs_sqrtm_triu.cpython-313t-darwin.so +0 -0
  218. scipy/linalg/_procrustes.py +2 -0
  219. scipy/linalg/_sketches.py +17 -6
  220. scipy/linalg/_solve_toeplitz.cpython-313t-darwin.so +0 -0
  221. scipy/linalg/_solvers.py +7 -2
  222. scipy/linalg/_special_matrices.py +26 -36
  223. scipy/linalg/cython_blas.cpython-313t-darwin.so +0 -0
  224. scipy/linalg/cython_lapack.cpython-313t-darwin.so +0 -0
  225. scipy/linalg/lapack.py +22 -2
  226. scipy/linalg/tests/_cython_examples/meson.build +7 -0
  227. scipy/linalg/tests/test_basic.py +31 -16
  228. scipy/linalg/tests/test_batch.py +588 -0
  229. scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
  230. scipy/linalg/tests/test_decomp.py +40 -3
  231. scipy/linalg/tests/test_decomp_cossin.py +14 -0
  232. scipy/linalg/tests/test_decomp_ldl.py +1 -1
  233. scipy/linalg/tests/test_interpolative.py +17 -0
  234. scipy/linalg/tests/test_lapack.py +115 -7
  235. scipy/linalg/tests/test_matfuncs.py +157 -102
  236. scipy/linalg/tests/test_procrustes.py +0 -7
  237. scipy/linalg/tests/test_solve_toeplitz.py +1 -1
  238. scipy/linalg/tests/test_special_matrices.py +1 -5
  239. scipy/ndimage/__init__.py +1 -0
  240. scipy/ndimage/_cytest.cpython-313t-darwin.so +0 -0
  241. scipy/ndimage/_delegators.py +8 -2
  242. scipy/ndimage/_filters.py +433 -5
  243. scipy/ndimage/_interpolation.py +36 -6
  244. scipy/ndimage/_measurements.py +4 -2
  245. scipy/ndimage/_morphology.py +5 -0
  246. scipy/ndimage/_nd_image.cpython-313t-darwin.so +0 -0
  247. scipy/ndimage/_ndimage_api.py +2 -1
  248. scipy/ndimage/_ni_docstrings.py +5 -1
  249. scipy/ndimage/_ni_label.cpython-313t-darwin.so +0 -0
  250. scipy/ndimage/_ni_support.py +1 -5
  251. scipy/ndimage/_rank_filter_1d.cpython-313t-darwin.so +0 -0
  252. scipy/ndimage/_support_alternative_backends.py +18 -6
  253. scipy/ndimage/tests/test_filters.py +351 -259
  254. scipy/ndimage/tests/test_fourier.py +7 -9
  255. scipy/ndimage/tests/test_interpolation.py +68 -61
  256. scipy/ndimage/tests/test_measurements.py +18 -35
  257. scipy/ndimage/tests/test_morphology.py +143 -131
  258. scipy/ndimage/tests/test_splines.py +1 -3
  259. scipy/odr/__odrpack.cpython-313t-darwin.so +0 -0
  260. scipy/optimize/_basinhopping.py +13 -7
  261. scipy/optimize/_bglu_dense.cpython-313t-darwin.so +0 -0
  262. scipy/optimize/_bracket.py +46 -26
  263. scipy/optimize/_chandrupatla.py +9 -10
  264. scipy/optimize/_cobyla_py.py +104 -123
  265. scipy/optimize/_constraints.py +14 -10
  266. scipy/optimize/_differentiable_functions.py +371 -230
  267. scipy/optimize/_differentialevolution.py +4 -3
  268. scipy/optimize/_direct.cpython-313t-darwin.so +0 -0
  269. scipy/optimize/_dual_annealing.py +1 -1
  270. scipy/optimize/_elementwise.py +1 -4
  271. scipy/optimize/_group_columns.cpython-313t-darwin.so +0 -0
  272. scipy/optimize/_highspy/_highs_wrapper.py +6 -4
  273. scipy/optimize/_lbfgsb.cpython-313t-darwin.so +0 -0
  274. scipy/optimize/_lbfgsb_py.py +57 -16
  275. scipy/optimize/_linprog_doc.py +2 -2
  276. scipy/optimize/_linprog_highs.py +11 -11
  277. scipy/optimize/_linprog_ip.py +25 -10
  278. scipy/optimize/_linprog_util.py +18 -19
  279. scipy/optimize/_lsap.cpython-313t-darwin.so +0 -0
  280. scipy/optimize/_lsq/common.py +3 -3
  281. scipy/optimize/_lsq/dogbox.py +16 -2
  282. scipy/optimize/_lsq/givens_elimination.cpython-313t-darwin.so +0 -0
  283. scipy/optimize/_lsq/least_squares.py +198 -126
  284. scipy/optimize/_lsq/lsq_linear.py +6 -6
  285. scipy/optimize/_lsq/trf.py +35 -8
  286. scipy/optimize/_milp.py +3 -1
  287. scipy/optimize/_minimize.py +105 -36
  288. scipy/optimize/_minpack.cpython-313t-darwin.so +0 -0
  289. scipy/optimize/_minpack_py.py +21 -14
  290. scipy/optimize/_moduleTNC.cpython-313t-darwin.so +0 -0
  291. scipy/optimize/_nnls.py +20 -21
  292. scipy/optimize/_nonlin.py +34 -3
  293. scipy/optimize/_numdiff.py +288 -110
  294. scipy/optimize/_optimize.py +86 -48
  295. scipy/optimize/_pava_pybind.cpython-313t-darwin.so +0 -0
  296. scipy/optimize/_remove_redundancy.py +5 -5
  297. scipy/optimize/_root_scalar.py +1 -1
  298. scipy/optimize/_shgo.py +6 -0
  299. scipy/optimize/_shgo_lib/_complex.py +1 -1
  300. scipy/optimize/_slsqp_py.py +216 -124
  301. scipy/optimize/_slsqplib.cpython-313t-darwin.so +0 -0
  302. scipy/optimize/_spectral.py +1 -1
  303. scipy/optimize/_tnc.py +8 -1
  304. scipy/optimize/_trlib/_trlib.cpython-313t-darwin.so +0 -0
  305. scipy/optimize/_trustregion.py +20 -6
  306. scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
  307. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
  308. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
  309. scipy/optimize/_trustregion_constr/projections.py +12 -8
  310. scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
  311. scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
  312. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
  313. scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
  314. scipy/optimize/_trustregion_exact.py +0 -1
  315. scipy/optimize/_zeros.cpython-313t-darwin.so +0 -0
  316. scipy/optimize/_zeros_py.py +97 -17
  317. scipy/optimize/cython_optimize/_zeros.cpython-313t-darwin.so +0 -0
  318. scipy/optimize/slsqp.py +0 -1
  319. scipy/optimize/tests/test__basinhopping.py +1 -1
  320. scipy/optimize/tests/test__differential_evolution.py +4 -4
  321. scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
  322. scipy/optimize/tests/test__numdiff.py +66 -22
  323. scipy/optimize/tests/test__remove_redundancy.py +2 -2
  324. scipy/optimize/tests/test__shgo.py +9 -1
  325. scipy/optimize/tests/test_bracket.py +71 -46
  326. scipy/optimize/tests/test_chandrupatla.py +133 -135
  327. scipy/optimize/tests/test_cobyla.py +74 -45
  328. scipy/optimize/tests/test_constraints.py +1 -1
  329. scipy/optimize/tests/test_differentiable_functions.py +226 -6
  330. scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
  331. scipy/optimize/tests/test_least_squares.py +125 -13
  332. scipy/optimize/tests/test_linear_assignment.py +3 -3
  333. scipy/optimize/tests/test_linprog.py +3 -3
  334. scipy/optimize/tests/test_lsq_linear.py +5 -5
  335. scipy/optimize/tests/test_minimize_constrained.py +2 -2
  336. scipy/optimize/tests/test_minpack.py +4 -4
  337. scipy/optimize/tests/test_nnls.py +43 -3
  338. scipy/optimize/tests/test_nonlin.py +36 -0
  339. scipy/optimize/tests/test_optimize.py +95 -17
  340. scipy/optimize/tests/test_slsqp.py +36 -4
  341. scipy/optimize/tests/test_zeros.py +34 -1
  342. scipy/signal/__init__.py +12 -23
  343. scipy/signal/_delegators.py +568 -0
  344. scipy/signal/_filter_design.py +459 -241
  345. scipy/signal/_fir_filter_design.py +262 -90
  346. scipy/signal/_lti_conversion.py +3 -2
  347. scipy/signal/_ltisys.py +118 -91
  348. scipy/signal/_max_len_seq_inner.cpython-313t-darwin.so +0 -0
  349. scipy/signal/_peak_finding_utils.cpython-313t-darwin.so +0 -0
  350. scipy/signal/_polyutils.py +172 -0
  351. scipy/signal/_short_time_fft.py +553 -76
  352. scipy/signal/_signal_api.py +30 -0
  353. scipy/signal/_signaltools.py +719 -396
  354. scipy/signal/_sigtools.cpython-313t-darwin.so +0 -0
  355. scipy/signal/_sosfilt.cpython-313t-darwin.so +0 -0
  356. scipy/signal/_spectral_py.py +221 -50
  357. scipy/signal/_spline.cpython-313t-darwin.so +0 -0
  358. scipy/signal/_spline_filters.py +108 -68
  359. scipy/signal/_support_alternative_backends.py +73 -0
  360. scipy/signal/_upfirdn.py +4 -1
  361. scipy/signal/_upfirdn_apply.cpython-313t-darwin.so +0 -0
  362. scipy/signal/_waveforms.py +2 -11
  363. scipy/signal/_wavelets.py +1 -1
  364. scipy/signal/fir_filter_design.py +1 -0
  365. scipy/signal/spline.py +4 -11
  366. scipy/signal/tests/_scipy_spectral_test_shim.py +5 -182
  367. scipy/signal/tests/test_bsplines.py +114 -79
  368. scipy/signal/tests/test_cont2discrete.py +9 -2
  369. scipy/signal/tests/test_filter_design.py +721 -481
  370. scipy/signal/tests/test_fir_filter_design.py +332 -140
  371. scipy/signal/tests/test_savitzky_golay.py +4 -3
  372. scipy/signal/tests/test_short_time_fft.py +231 -5
  373. scipy/signal/tests/test_signaltools.py +2149 -1348
  374. scipy/signal/tests/test_spectral.py +19 -6
  375. scipy/signal/tests/test_splines.py +161 -96
  376. scipy/signal/tests/test_upfirdn.py +84 -50
  377. scipy/signal/tests/test_waveforms.py +20 -0
  378. scipy/signal/tests/test_windows.py +607 -466
  379. scipy/signal/windows/_windows.py +287 -148
  380. scipy/sparse/__init__.py +23 -4
  381. scipy/sparse/_base.py +269 -120
  382. scipy/sparse/_bsr.py +7 -4
  383. scipy/sparse/_compressed.py +59 -234
  384. scipy/sparse/_construct.py +90 -38
  385. scipy/sparse/_coo.py +115 -181
  386. scipy/sparse/_csc.py +4 -4
  387. scipy/sparse/_csparsetools.cpython-313t-darwin.so +0 -0
  388. scipy/sparse/_csr.py +2 -2
  389. scipy/sparse/_data.py +48 -48
  390. scipy/sparse/_dia.py +105 -21
  391. scipy/sparse/_dok.py +0 -23
  392. scipy/sparse/_index.py +4 -4
  393. scipy/sparse/_matrix.py +23 -0
  394. scipy/sparse/_sparsetools.cpython-313t-darwin.so +0 -0
  395. scipy/sparse/_sputils.py +37 -22
  396. scipy/sparse/base.py +0 -9
  397. scipy/sparse/bsr.py +0 -14
  398. scipy/sparse/compressed.py +0 -23
  399. scipy/sparse/construct.py +0 -6
  400. scipy/sparse/coo.py +0 -14
  401. scipy/sparse/csc.py +0 -3
  402. scipy/sparse/csgraph/_flow.cpython-313t-darwin.so +0 -0
  403. scipy/sparse/csgraph/_matching.cpython-313t-darwin.so +0 -0
  404. scipy/sparse/csgraph/_min_spanning_tree.cpython-313t-darwin.so +0 -0
  405. scipy/sparse/csgraph/_reordering.cpython-313t-darwin.so +0 -0
  406. scipy/sparse/csgraph/_shortest_path.cpython-313t-darwin.so +0 -0
  407. scipy/sparse/csgraph/_tools.cpython-313t-darwin.so +0 -0
  408. scipy/sparse/csgraph/_traversal.cpython-313t-darwin.so +0 -0
  409. scipy/sparse/csgraph/tests/test_matching.py +14 -2
  410. scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
  411. scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
  412. scipy/sparse/csr.py +0 -5
  413. scipy/sparse/data.py +1 -6
  414. scipy/sparse/dia.py +0 -7
  415. scipy/sparse/dok.py +0 -10
  416. scipy/sparse/linalg/_dsolve/_superlu.cpython-313t-darwin.so +0 -0
  417. scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
  418. scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
  419. scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-313t-darwin.so +0 -0
  420. scipy/sparse/linalg/_eigen/arpack/arpack.py +28 -20
  421. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
  422. scipy/sparse/linalg/_expm_multiply.py +8 -3
  423. scipy/sparse/linalg/_interface.py +29 -26
  424. scipy/sparse/linalg/_isolve/_gcrotmk.py +6 -5
  425. scipy/sparse/linalg/_isolve/iterative.py +51 -45
  426. scipy/sparse/linalg/_isolve/lgmres.py +6 -6
  427. scipy/sparse/linalg/_isolve/minres.py +5 -5
  428. scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
  429. scipy/sparse/linalg/_isolve/utils.py +2 -8
  430. scipy/sparse/linalg/_matfuncs.py +1 -1
  431. scipy/sparse/linalg/_norm.py +1 -1
  432. scipy/sparse/linalg/_propack/_cpropack.cpython-313t-darwin.so +0 -0
  433. scipy/sparse/linalg/_propack/_dpropack.cpython-313t-darwin.so +0 -0
  434. scipy/sparse/linalg/_propack/_spropack.cpython-313t-darwin.so +0 -0
  435. scipy/sparse/linalg/_propack/_zpropack.cpython-313t-darwin.so +0 -0
  436. scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
  437. scipy/sparse/linalg/tests/test_expm_multiply.py +10 -0
  438. scipy/sparse/linalg/tests/test_interface.py +35 -0
  439. scipy/sparse/linalg/tests/test_pydata_sparse.py +18 -0
  440. scipy/sparse/tests/test_arithmetic1d.py +5 -2
  441. scipy/sparse/tests/test_base.py +217 -40
  442. scipy/sparse/tests/test_common1d.py +17 -12
  443. scipy/sparse/tests/test_construct.py +1 -1
  444. scipy/sparse/tests/test_coo.py +272 -4
  445. scipy/sparse/tests/test_sparsetools.py +5 -0
  446. scipy/sparse/tests/test_sputils.py +36 -7
  447. scipy/spatial/_ckdtree.cpython-313t-darwin.so +0 -0
  448. scipy/spatial/_distance_pybind.cpython-313t-darwin.so +0 -0
  449. scipy/spatial/_distance_wrap.cpython-313t-darwin.so +0 -0
  450. scipy/spatial/_hausdorff.cpython-313t-darwin.so +0 -0
  451. scipy/spatial/_qhull.cpython-313t-darwin.so +0 -0
  452. scipy/spatial/_voronoi.cpython-313t-darwin.so +0 -0
  453. scipy/spatial/distance.py +49 -42
  454. scipy/spatial/tests/test_distance.py +3 -1
  455. scipy/spatial/tests/test_kdtree.py +1 -0
  456. scipy/spatial/tests/test_qhull.py +106 -2
  457. scipy/spatial/transform/__init__.py +5 -3
  458. scipy/spatial/transform/_rigid_transform.cpython-313t-darwin.so +0 -0
  459. scipy/spatial/transform/_rotation.cpython-313t-darwin.so +0 -0
  460. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  461. scipy/spatial/transform/tests/test_rotation.py +1342 -790
  462. scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
  463. scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
  464. scipy/special/__init__.py +1 -47
  465. scipy/special/_add_newdocs.py +34 -772
  466. scipy/special/_basic.py +22 -25
  467. scipy/special/_comb.cpython-313t-darwin.so +0 -0
  468. scipy/special/_ellip_harm_2.cpython-313t-darwin.so +0 -0
  469. scipy/special/_gufuncs.cpython-313t-darwin.so +0 -0
  470. scipy/special/_logsumexp.py +83 -69
  471. scipy/special/_orthogonal.pyi +1 -1
  472. scipy/special/_specfun.cpython-313t-darwin.so +0 -0
  473. scipy/special/_special_ufuncs.cpython-313t-darwin.so +0 -0
  474. scipy/special/_spherical_bessel.py +4 -4
  475. scipy/special/_support_alternative_backends.py +212 -119
  476. scipy/special/_test_internal.cpython-313t-darwin.so +0 -0
  477. scipy/special/_testutils.py +4 -4
  478. scipy/special/_ufuncs.cpython-313t-darwin.so +0 -0
  479. scipy/special/_ufuncs.pyi +1 -0
  480. scipy/special/_ufuncs.pyx +215 -1400
  481. scipy/special/_ufuncs_cxx.cpython-313t-darwin.so +0 -0
  482. scipy/special/_ufuncs_cxx.pxd +2 -15
  483. scipy/special/_ufuncs_cxx.pyx +5 -44
  484. scipy/special/_ufuncs_cxx_defs.h +2 -16
  485. scipy/special/_ufuncs_defs.h +0 -8
  486. scipy/special/cython_special.cpython-313t-darwin.so +0 -0
  487. scipy/special/cython_special.pxd +1 -1
  488. scipy/special/tests/_cython_examples/meson.build +10 -1
  489. scipy/special/tests/test_basic.py +153 -20
  490. scipy/special/tests/test_boost_ufuncs.py +3 -0
  491. scipy/special/tests/test_cdflib.py +35 -11
  492. scipy/special/tests/test_gammainc.py +16 -0
  493. scipy/special/tests/test_hyp2f1.py +23 -2
  494. scipy/special/tests/test_log1mexp.py +85 -0
  495. scipy/special/tests/test_logsumexp.py +220 -64
  496. scipy/special/tests/test_mpmath.py +1 -0
  497. scipy/special/tests/test_nan_inputs.py +1 -1
  498. scipy/special/tests/test_orthogonal.py +17 -18
  499. scipy/special/tests/test_sf_error.py +3 -2
  500. scipy/special/tests/test_sph_harm.py +6 -7
  501. scipy/special/tests/test_support_alternative_backends.py +211 -76
  502. scipy/stats/__init__.py +4 -1
  503. scipy/stats/_ansari_swilk_statistics.cpython-313t-darwin.so +0 -0
  504. scipy/stats/_axis_nan_policy.py +4 -3
  505. scipy/stats/_biasedurn.cpython-313t-darwin.so +0 -0
  506. scipy/stats/_continued_fraction.py +387 -0
  507. scipy/stats/_continuous_distns.py +296 -319
  508. scipy/stats/_covariance.py +6 -3
  509. scipy/stats/_discrete_distns.py +39 -32
  510. scipy/stats/_distn_infrastructure.py +39 -12
  511. scipy/stats/_distribution_infrastructure.py +900 -238
  512. scipy/stats/_entropy.py +7 -8
  513. scipy/{_lib → stats}/_finite_differences.py +1 -1
  514. scipy/stats/_hypotests.py +82 -49
  515. scipy/stats/_kde.py +53 -49
  516. scipy/stats/_ksstats.py +1 -1
  517. scipy/stats/_levy_stable/__init__.py +7 -15
  518. scipy/stats/_levy_stable/levyst.cpython-313t-darwin.so +0 -0
  519. scipy/stats/_morestats.py +112 -67
  520. scipy/stats/_mstats_basic.py +13 -17
  521. scipy/stats/_mstats_extras.py +8 -8
  522. scipy/stats/_multivariate.py +89 -113
  523. scipy/stats/_new_distributions.py +97 -20
  524. scipy/stats/_page_trend_test.py +12 -5
  525. scipy/stats/_probability_distribution.py +265 -43
  526. scipy/stats/_qmc.py +14 -9
  527. scipy/stats/_qmc_cy.cpython-313t-darwin.so +0 -0
  528. scipy/stats/_qmvnt.py +16 -95
  529. scipy/stats/_qmvnt_cy.cpython-313t-darwin.so +0 -0
  530. scipy/stats/_quantile.py +335 -0
  531. scipy/stats/_rcont/rcont.cpython-313t-darwin.so +0 -0
  532. scipy/stats/_resampling.py +4 -29
  533. scipy/stats/_sampling.py +1 -1
  534. scipy/stats/_sobol.cpython-313t-darwin.so +0 -0
  535. scipy/stats/_stats.cpython-313t-darwin.so +0 -0
  536. scipy/stats/_stats_mstats_common.py +19 -2
  537. scipy/stats/_stats_py.py +534 -460
  538. scipy/stats/_stats_pythran.cpython-313t-darwin.so +0 -0
  539. scipy/stats/_unuran/unuran_wrapper.cpython-313t-darwin.so +0 -0
  540. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  541. scipy/stats/_variation.py +5 -7
  542. scipy/stats/_wilcoxon.py +13 -7
  543. scipy/stats/tests/common_tests.py +6 -4
  544. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  545. scipy/stats/tests/test_continued_fraction.py +173 -0
  546. scipy/stats/tests/test_continuous.py +379 -60
  547. scipy/stats/tests/test_continuous_basic.py +18 -12
  548. scipy/stats/tests/test_discrete_basic.py +14 -8
  549. scipy/stats/tests/test_discrete_distns.py +16 -16
  550. scipy/stats/tests/test_distributions.py +117 -75
  551. scipy/stats/tests/test_entropy.py +40 -48
  552. scipy/stats/tests/test_fit.py +4 -3
  553. scipy/stats/tests/test_hypotests.py +153 -24
  554. scipy/stats/tests/test_kdeoth.py +109 -41
  555. scipy/stats/tests/test_marray.py +289 -0
  556. scipy/stats/tests/test_morestats.py +79 -47
  557. scipy/stats/tests/test_mstats_basic.py +3 -3
  558. scipy/stats/tests/test_multivariate.py +434 -83
  559. scipy/stats/tests/test_qmc.py +13 -10
  560. scipy/stats/tests/test_quantile.py +199 -0
  561. scipy/stats/tests/test_rank.py +119 -112
  562. scipy/stats/tests/test_resampling.py +47 -56
  563. scipy/stats/tests/test_sampling.py +9 -4
  564. scipy/stats/tests/test_stats.py +799 -939
  565. scipy/stats/tests/test_variation.py +8 -6
  566. scipy/version.py +2 -2
  567. {scipy-1.15.2.dist-info → scipy-1.16.0rc1.dist-info}/LICENSE.txt +1 -1
  568. {scipy-1.15.2.dist-info → scipy-1.16.0rc1.dist-info}/METADATA +9 -9
  569. {scipy-1.15.2.dist-info → scipy-1.16.0rc1.dist-info}/RECORD +570 -577
  570. scipy-1.16.0rc1.dist-info/WHEEL +6 -0
  571. scipy/_lib/array_api_extra/_funcs.py +0 -484
  572. scipy/_lib/array_api_extra/_typing.py +0 -8
  573. scipy/interpolate/_bspl.cpython-313t-darwin.so +0 -0
  574. scipy/optimize/_cobyla.cpython-313t-darwin.so +0 -0
  575. scipy/optimize/_cython_nnls.cpython-313t-darwin.so +0 -0
  576. scipy/optimize/_slsqp.cpython-313t-darwin.so +0 -0
  577. scipy/spatial/qhull_src/COPYING.txt +0 -38
  578. scipy/special/libsf_error_state.dylib +0 -0
  579. scipy/special/tests/test_log_softmax.py +0 -109
  580. scipy/special/tests/test_xsf_cuda.py +0 -114
  581. scipy/special/xsf/binom.h +0 -89
  582. scipy/special/xsf/cdflib.h +0 -100
  583. scipy/special/xsf/cephes/airy.h +0 -307
  584. scipy/special/xsf/cephes/besselpoly.h +0 -51
  585. scipy/special/xsf/cephes/beta.h +0 -257
  586. scipy/special/xsf/cephes/cbrt.h +0 -131
  587. scipy/special/xsf/cephes/chbevl.h +0 -85
  588. scipy/special/xsf/cephes/chdtr.h +0 -193
  589. scipy/special/xsf/cephes/const.h +0 -87
  590. scipy/special/xsf/cephes/ellie.h +0 -293
  591. scipy/special/xsf/cephes/ellik.h +0 -251
  592. scipy/special/xsf/cephes/ellpe.h +0 -107
  593. scipy/special/xsf/cephes/ellpk.h +0 -117
  594. scipy/special/xsf/cephes/expn.h +0 -260
  595. scipy/special/xsf/cephes/gamma.h +0 -398
  596. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  597. scipy/special/xsf/cephes/hyperg.h +0 -361
  598. scipy/special/xsf/cephes/i0.h +0 -149
  599. scipy/special/xsf/cephes/i1.h +0 -158
  600. scipy/special/xsf/cephes/igam.h +0 -421
  601. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  602. scipy/special/xsf/cephes/igami.h +0 -313
  603. scipy/special/xsf/cephes/j0.h +0 -225
  604. scipy/special/xsf/cephes/j1.h +0 -198
  605. scipy/special/xsf/cephes/jv.h +0 -715
  606. scipy/special/xsf/cephes/k0.h +0 -164
  607. scipy/special/xsf/cephes/k1.h +0 -163
  608. scipy/special/xsf/cephes/kn.h +0 -243
  609. scipy/special/xsf/cephes/lanczos.h +0 -112
  610. scipy/special/xsf/cephes/ndtr.h +0 -275
  611. scipy/special/xsf/cephes/poch.h +0 -85
  612. scipy/special/xsf/cephes/polevl.h +0 -167
  613. scipy/special/xsf/cephes/psi.h +0 -194
  614. scipy/special/xsf/cephes/rgamma.h +0 -111
  615. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  616. scipy/special/xsf/cephes/shichi.h +0 -248
  617. scipy/special/xsf/cephes/sici.h +0 -224
  618. scipy/special/xsf/cephes/sindg.h +0 -221
  619. scipy/special/xsf/cephes/tandg.h +0 -139
  620. scipy/special/xsf/cephes/trig.h +0 -58
  621. scipy/special/xsf/cephes/unity.h +0 -186
  622. scipy/special/xsf/cephes/zeta.h +0 -172
  623. scipy/special/xsf/config.h +0 -304
  624. scipy/special/xsf/digamma.h +0 -205
  625. scipy/special/xsf/error.h +0 -57
  626. scipy/special/xsf/evalpoly.h +0 -47
  627. scipy/special/xsf/expint.h +0 -266
  628. scipy/special/xsf/hyp2f1.h +0 -694
  629. scipy/special/xsf/iv_ratio.h +0 -173
  630. scipy/special/xsf/lambertw.h +0 -150
  631. scipy/special/xsf/loggamma.h +0 -163
  632. scipy/special/xsf/sici.h +0 -200
  633. scipy/special/xsf/tools.h +0 -427
  634. scipy/special/xsf/trig.h +0 -164
  635. scipy/special/xsf/wright_bessel.h +0 -843
  636. scipy/special/xsf/zlog1.h +0 -35
  637. scipy/stats/_mvn.cpython-313t-darwin.so +0 -0
  638. scipy-1.15.2.dist-info/WHEEL +0 -4
@@ -13,7 +13,7 @@ from scipy.integrate import (romb, newton_cotes,
13
13
  from scipy.integrate._quadrature import _cumulative_simpson_unequal_intervals
14
14
 
15
15
  from scipy import stats, special, integrate
16
- from scipy.conftest import array_api_compatible, skip_xp_invalid_arg
16
+ from scipy.conftest import skip_xp_invalid_arg
17
17
  from scipy._lib._array_api_no_0d import xp_assert_close
18
18
 
19
19
  skip_xp_backends = pytest.mark.skip_xp_backends
@@ -269,7 +269,6 @@ class TestCumulative_trapezoid:
269
269
  cumulative_trapezoid(y=[])
270
270
 
271
271
 
272
- @array_api_compatible
273
272
  class TestTrapezoid:
274
273
  def test_simple(self, xp):
275
274
  x = xp.arange(-10, 10, .1)
@@ -278,8 +277,7 @@ class TestTrapezoid:
278
277
  xp_assert_close(r, xp.asarray(1.0))
279
278
 
280
279
  @skip_xp_backends('jax.numpy',
281
- reasons=["JAX arrays do not support item assignment"])
282
- @pytest.mark.usefixtures("skip_xp_backends")
280
+ reason="JAX arrays do not support item assignment")
283
281
  def test_ndim(self, xp):
284
282
  x = xp.linspace(0, 1, 3)
285
283
  y = xp.linspace(0, 2, 8)
@@ -318,8 +316,7 @@ class TestTrapezoid:
318
316
  xp_assert_close(r, qz)
319
317
 
320
318
  @skip_xp_backends('jax.numpy',
321
- reasons=["JAX arrays do not support item assignment"])
322
- @pytest.mark.usefixtures("skip_xp_backends")
319
+ reason="JAX arrays do not support item assignment")
323
320
  def test_gh21908(self, xp):
324
321
  # extended testing for n-dim arrays
325
322
  x = xp.reshape(xp.linspace(0, 29, 30), (3, 10))
@@ -362,8 +359,7 @@ class TestTrapezoid:
362
359
  assert_allclose(trapezoid(y, xm), r)
363
360
 
364
361
  @skip_xp_backends(np_only=True,
365
- reasons=['array-likes only supported for NumPy backend'])
366
- @pytest.mark.usefixtures("skip_xp_backends")
362
+ reason='array-likes only supported for NumPy backend')
367
363
  def test_array_like(self, xp):
368
364
  x = list(range(5))
369
365
  y = [t * t for t in x]
@@ -635,6 +631,7 @@ class TestCumulativeSimpson:
635
631
  # `simpson` uses the trapezoidal rule
636
632
  return theoretical_difference
637
633
 
634
+ @pytest.mark.fail_slow(10)
638
635
  @pytest.mark.thread_unsafe
639
636
  @pytest.mark.slow
640
637
  @given(
@@ -666,6 +663,7 @@ class TestCumulativeSimpson:
666
663
  res[..., 1:], ref[..., 1:] + theoretical_difference[..., 1:], atol=1e-16
667
664
  )
668
665
 
666
+ @pytest.mark.fail_slow(10)
669
667
  @pytest.mark.thread_unsafe
670
668
  @pytest.mark.slow
671
669
  @given(
@@ -6,7 +6,6 @@ import math
6
6
  import numpy as np
7
7
  from numpy.testing import assert_allclose
8
8
 
9
- from scipy.conftest import array_api_compatible
10
9
  import scipy._lib._elementwise_iterative_method as eim
11
10
  from scipy._lib._array_api_no_0d import xp_assert_close, xp_assert_equal
12
11
  from scipy._lib._array_api import array_namespace, xp_size, xp_ravel, xp_copy, is_numpy
@@ -20,6 +19,7 @@ def norm_pdf(x, xp=None):
20
19
  xp = array_namespace(x) if xp is None else xp
21
20
  return 1/(2*xp.pi)**0.5 * xp.exp(-x**2/2)
22
21
 
22
+
23
23
  def norm_logpdf(x, xp=None):
24
24
  xp = array_namespace(x) if xp is None else xp
25
25
  return -0.5*math.log(2*xp.pi) - x**2/2
@@ -43,11 +43,12 @@ def _vectorize(xp):
43
43
  return decorator
44
44
 
45
45
 
46
- @array_api_compatible
47
- @pytest.mark.usefixtures("skip_xp_backends")
48
46
  @pytest.mark.skip_xp_backends(
49
47
  'array_api_strict', reason='Currently uses fancy indexing assignment.'
50
48
  )
49
+ @pytest.mark.skip_xp_backends(
50
+ 'dask.array', reason='boolean indexing assignment'
51
+ )
51
52
  @pytest.mark.skip_xp_backends(
52
53
  'jax.numpy', reason='JAX arrays do not support item assignment.'
53
54
  )
@@ -233,11 +234,11 @@ class TestTanhSinh:
233
234
  logres = _tanhsinh(norm_logpdf, *limits, log=True)
234
235
  xp_assert_close(xp.exp(logres.integral), ref, check_dtype=False)
235
236
  # Transformation should not make the result complex unnecessarily
236
- xp_test = array_namespace(*limits) # we need xp.isdtype
237
- assert (xp_test.isdtype(logres.integral.dtype, "real floating") if ref > 0
238
- else xp_test.isdtype(logres.integral.dtype, "complex floating"))
237
+ assert (xp.isdtype(logres.integral.dtype, "real floating") if ref > 0
238
+ else xp.isdtype(logres.integral.dtype, "complex floating"))
239
239
 
240
- xp_assert_close(xp.exp(logres.error), res.error, atol=1e-16, check_dtype=False)
240
+ atol = 2 * xp.finfo(res.error.dtype).eps
241
+ xp_assert_close(xp.exp(logres.error), res.error, atol=atol, check_dtype=False)
241
242
 
242
243
  # 15 skipped intentionally; it's very difficult numerically
243
244
  @pytest.mark.skip_xp_backends(np_only=True,
@@ -248,7 +249,7 @@ class TestTanhSinh:
248
249
  rtol = 2e-8
249
250
  res = _tanhsinh(f, 0, f.b, rtol=rtol)
250
251
  assert_allclose(res.integral, f.ref, rtol=rtol)
251
- if f_number not in {14}: # mildly underestimates error here
252
+ if f_number not in {7, 12, 14}: # mildly underestimates error here
252
253
  true_error = abs(self.error(res.integral, f.ref)/res.integral)
253
254
  assert true_error < res.error
254
255
 
@@ -299,18 +300,17 @@ class TestTanhSinh:
299
300
  res = _tanhsinh(f, a, b, args=(p,))
300
301
  refs = _tanhsinh_single(a, b, p)
301
302
 
302
- xp_test = array_namespace(a) # need xp.stack, isdtype
303
303
  attrs = ['integral', 'error', 'success', 'status', 'nfev', 'maxlevel']
304
304
  for attr in attrs:
305
- ref_attr = xp_test.stack([getattr(ref, attr) for ref in refs])
305
+ ref_attr = xp.stack([getattr(ref, attr) for ref in refs])
306
306
  res_attr = xp_ravel(getattr(res, attr))
307
307
  xp_assert_close(res_attr, ref_attr, rtol=1e-15)
308
308
  assert getattr(res, attr).shape == shape
309
309
 
310
- assert xp_test.isdtype(res.success.dtype, 'bool')
311
- assert xp_test.isdtype(res.status.dtype, 'integral')
312
- assert xp_test.isdtype(res.nfev.dtype, 'integral')
313
- assert xp_test.isdtype(res.maxlevel.dtype, 'integral')
310
+ assert xp.isdtype(res.success.dtype, 'bool')
311
+ assert xp.isdtype(res.status.dtype, 'integral')
312
+ assert xp.isdtype(res.nfev.dtype, 'integral')
313
+ assert xp.isdtype(res.maxlevel.dtype, 'integral')
314
314
  assert xp.max(res.nfev) == f.feval
315
315
  # maxlevel = 2 -> 3 function calls (2 initialization, 1 work)
316
316
  assert xp.max(res.maxlevel) >= 2
@@ -383,12 +383,10 @@ class TestTanhSinh:
383
383
  def test_options_and_result_attributes(self, xp):
384
384
  # demonstrate that options are behaving as advertised and status
385
385
  # messages are as intended
386
- xp_test = array_namespace(xp.asarray(1.)) # need xp.atan
387
-
388
386
  def f(x):
389
387
  f.calls += 1
390
388
  f.feval += xp_size(xp.asarray(x))
391
- return x**2 * xp_test.atan(x)
389
+ return x**2 * xp.atan(x)
392
390
 
393
391
  f.ref = xp.asarray((math.pi - 2 + 2 * math.log(2)) / 12, dtype=xp.float64)
394
392
 
@@ -560,21 +558,18 @@ class TestTanhSinh:
560
558
  # integrand is evaluated or the integral/error estimates, only the
561
559
  # number of function calls
562
560
 
563
- # need `xp.concat`, `xp.atan`, and `xp.sort`
564
- xp_test = array_namespace(xp.asarray(1.))
565
-
566
561
  def f(x):
567
562
  f.calls += 1
568
563
  f.feval += xp_size(xp.asarray(x))
569
- f.x = xp_test.concat((f.x, xp_ravel(x)))
570
- return x**2 * xp_test.atan(x)
564
+ f.x = xp.concat((f.x, xp_ravel(x)))
565
+ return x**2 * xp.atan(x)
571
566
 
572
567
  f.feval, f.calls, f.x = 0, 0, xp.asarray([])
573
568
 
574
569
  a = xp.asarray(0, dtype=xp.float64)
575
570
  b = xp.asarray(1, dtype=xp.float64)
576
571
  ref = _tanhsinh(f, a, b, minlevel=0, maxlevel=maxlevel)
577
- ref_x = xp_test.sort(f.x)
572
+ ref_x = xp.sort(f.x)
578
573
 
579
574
  for minlevel in range(0, maxlevel + 1):
580
575
  f.feval, f.calls, f.x = 0, 0, xp.asarray([])
@@ -587,7 +582,7 @@ class TestTanhSinh:
587
582
  assert res.nfev == f.feval == f.x.shape[0]
588
583
  assert f.calls == maxlevel - minlevel + 1 + 1 # 1 validation call
589
584
  assert res.status == ref.status
590
- xp_assert_equal(ref_x, xp_test.sort(f.x))
585
+ xp_assert_equal(ref_x, xp.sort(f.x))
591
586
 
592
587
  def test_improper_integrals(self, xp):
593
588
  # Test handling of infinite limits of integration (mixed with finite limits)
@@ -679,10 +674,9 @@ class TestTanhSinh:
679
674
  def test_special_cases(self, xp):
680
675
  # Test edge cases and other special cases
681
676
  a, b = xp.asarray(0), xp.asarray(1)
682
- xp_test = array_namespace(a, b) # need `xp.isdtype`
683
677
 
684
678
  def f(x):
685
- assert xp_test.isdtype(x.dtype, "real floating")
679
+ assert xp.isdtype(x.dtype, "real floating")
686
680
  return x
687
681
 
688
682
  res = _tanhsinh(f, a, b)
@@ -753,11 +747,30 @@ class TestTanhSinh:
753
747
  x[-1] = 1000
754
748
  _tanhsinh(np.sin, 1, x)
755
749
 
750
+ def test_gh_22681_finite_error(self, xp):
751
+ # gh-22681 noted a case in which the error was NaN on some platforms;
752
+ # check that this does in fact fail in CI.
753
+ c1 = complex(12, -10)
754
+ c2 = complex(12, 39)
755
+ def f(t):
756
+ return xp.sin(c1 * (1 - t) + c2 * t)
757
+ a, b = xp.asarray(0., dtype=xp.float64), xp.asarray(1., dtype=xp.float64)
758
+ ref = _tanhsinh(f, a, b, atol=0, rtol=0, maxlevel=10)
759
+ assert xp.isfinite(ref.error)
760
+ # Previously, tanhsinh would not detect convergence
761
+ res = _tanhsinh(f, a, b, rtol=1e-14)
762
+ assert res.success
763
+ assert res.maxlevel < 5
764
+ xp_assert_close(res.integral, ref.integral, rtol=1e-15)
765
+
756
766
 
757
- @array_api_compatible
758
- @pytest.mark.usefixtures("skip_xp_backends")
767
+ @pytest.mark.skip_xp_backends('torch', reason='data-apis/array-api-compat#271')
759
768
  @pytest.mark.skip_xp_backends('array_api_strict', reason='No fancy indexing.')
760
769
  @pytest.mark.skip_xp_backends('jax.numpy', reason='No mutation.')
770
+ @pytest.mark.skip_xp_backends(
771
+ 'dask.array',
772
+ reason='Data-dependent shapes in boolean index assignment'
773
+ )
761
774
  class TestNSum:
762
775
  rng = np.random.default_rng(5895448232066142650)
763
776
  p = rng.uniform(1, 10, size=10).tolist()
@@ -812,13 +825,21 @@ class TestNSum:
812
825
  with pytest.raises(ValueError, match=message):
813
826
  nsum(f, a, b, tolerances=dict(rtol=pytest))
814
827
 
815
- with np.errstate(all='ignore'):
828
+ with (np.errstate(all='ignore')):
816
829
  res = nsum(f, xp.asarray([np.nan, np.inf]), xp.asarray(1.))
817
- assert xp.all((res.status == -1) & xp.isnan(res.sum)
818
- & xp.isnan(res.error) & ~res.success & res.nfev == 1)
830
+ assert (res.status[0] == -1) and not res.success[0]
831
+ assert xp.isnan(res.sum[0]) and xp.isnan(res.error[0])
832
+ assert (res.status[1] == 0) and res.success[1]
833
+ assert res.sum[1] == res.error[1]
834
+ assert xp.all(res.nfev[0] == 1)
835
+
819
836
  res = nsum(f, xp.asarray(10.), xp.asarray([np.nan, 1]))
820
- assert xp.all((res.status == -1) & xp.isnan(res.sum)
821
- & xp.isnan(res.error) & ~res.success & res.nfev == 1)
837
+ assert (res.status[0] == -1) and not res.success[0]
838
+ assert xp.isnan(res.sum[0]) and xp.isnan(res.error[0])
839
+ assert (res.status[1] == 0) and res.success[1]
840
+ assert res.sum[1] == res.error[1]
841
+ assert xp.all(res.nfev[0] == 1)
842
+
822
843
  res = nsum(f, xp.asarray(1.), xp.asarray(10.),
823
844
  step=xp.asarray([xp.nan, -xp.inf, xp.inf, -1, 0]))
824
845
  assert xp.all((res.status == -1) & xp.isnan(res.sum)
@@ -852,8 +873,7 @@ class TestNSum:
852
873
  res = nsum(f, a, b, args=args)
853
874
  xp_assert_close(res.sum, ref)
854
875
  xp_assert_equal(res.status, xp.zeros(ref.shape, dtype=xp.int32))
855
- xp_test = array_namespace(a) # CuPy doesn't have `bool`
856
- xp_assert_equal(res.success, xp.ones(ref.shape, dtype=xp_test.bool))
876
+ xp_assert_equal(res.success, xp.ones(ref.shape, dtype=xp.bool))
857
877
 
858
878
  with np.errstate(divide='ignore'):
859
879
  logres = nsum(lambda *args: xp.log(f(*args)),
@@ -891,8 +911,7 @@ class TestNSum:
891
911
  ref_err = (high - low)/2 # error (assuming perfect quadrature)
892
912
 
893
913
  # correct reference values where number of terms < maxterms
894
- xp_test = array_namespace(a) # torch needs broadcast_arrays
895
- a, b, step = xp_test.broadcast_arrays(a, b, step)
914
+ a, b, step = xp.broadcast_arrays(a, b, step)
896
915
  for i in np.ndindex(a.shape):
897
916
  ai, bi, stepi = float(a[i]), float(b[i]), float(step[i])
898
917
  if (bi - ai)/stepi + 1 <= maxterms:
@@ -949,10 +968,9 @@ class TestNSum:
949
968
  xp_assert_close(xp_ravel(res_attr), xp.asarray(ref_attr), rtol=1e-15)
950
969
  assert res_attr.shape == shape
951
970
 
952
- xp_test = array_namespace(xp.asarray(1.))
953
- assert xp_test.isdtype(res.success.dtype, 'bool')
954
- assert xp_test.isdtype(res.status.dtype, 'integral')
955
- assert xp_test.isdtype(res.nfev.dtype, 'integral')
971
+ assert xp.isdtype(res.success.dtype, 'bool')
972
+ assert xp.isdtype(res.status.dtype, 'integral')
973
+ assert xp.isdtype(res.nfev.dtype, 'integral')
956
974
  if is_numpy(xp): # other libraries might have different number
957
975
  assert int(xp.max(res.nfev)) == f.feval
958
976
 
@@ -1074,8 +1092,8 @@ class TestNSum:
1074
1092
  return 1 / x
1075
1093
 
1076
1094
  res = nsum(f, xp.asarray(0), xp.asarray(10), maxterms=0)
1077
- assert xp.isnan(res.sum)
1078
- assert xp.isnan(res.error)
1095
+ assert xp.isinf(res.sum)
1096
+ assert xp.isinf(res.error)
1079
1097
  assert res.status == -2
1080
1098
 
1081
1099
  res = nsum(f, xp.asarray(0), xp.asarray(10), maxterms=1)
@@ -5,13 +5,11 @@ Interpolation (:mod:`scipy.interpolate`)
5
5
 
6
6
  .. currentmodule:: scipy.interpolate
7
7
 
8
- Sub-package for objects used in interpolation.
8
+ Sub-package for functions and objects used in interpolation.
9
+
10
+ See the :ref:`user guide <tutorial-interpolate>` for recommendations on choosing a
11
+ routine, and other usage details.
9
12
 
10
- As listed below, this sub-package contains spline functions and classes,
11
- 1-D and multidimensional (univariate and multivariate)
12
- interpolation classes, Lagrange and Taylor polynomial interpolators, and
13
- wrappers for `FITPACK <http://www.netlib.org/dierckx/>`__
14
- and DFITPACK functions.
15
13
 
16
14
  Univariate interpolation
17
15
  ========================
@@ -19,51 +17,53 @@ Univariate interpolation
19
17
  .. autosummary::
20
18
  :toctree: generated/
21
19
 
22
- interp1d
20
+ make_interp_spline
21
+ CubicSpline
22
+ PchipInterpolator
23
+ Akima1DInterpolator
24
+ FloaterHormannInterpolator
23
25
  BarycentricInterpolator
24
26
  KroghInterpolator
25
- barycentric_interpolate
26
- krogh_interpolate
27
- pchip_interpolate
28
27
  CubicHermiteSpline
29
- PchipInterpolator
30
- Akima1DInterpolator
31
- CubicSpline
28
+
29
+ **Low-level data structures for univariate interpolation:**
30
+
31
+ .. autosummary::
32
+ :toctree: generated/
33
+
32
34
  PPoly
33
35
  BPoly
34
- FloaterHormannInterpolator
36
+ BSpline
35
37
 
36
38
 
37
39
  Multivariate interpolation
38
40
  ==========================
39
41
 
40
- Unstructured data:
42
+ **Unstructured data**
41
43
 
42
44
  .. autosummary::
43
45
  :toctree: generated/
44
46
 
45
- griddata
46
47
  LinearNDInterpolator
47
48
  NearestNDInterpolator
48
49
  CloughTocher2DInterpolator
49
50
  RBFInterpolator
50
- Rbf
51
- interp2d
52
51
 
53
- For data on a grid:
52
+ **For data on a grid:**
54
53
 
55
54
  .. autosummary::
56
55
  :toctree: generated/
57
56
 
58
- interpn
59
57
  RegularGridInterpolator
60
- RectBivariateSpline
61
58
 
62
59
  .. seealso::
63
60
 
64
- `scipy.ndimage.map_coordinates`
61
+ `scipy.ndimage.map_coordinates`,
62
+ :ref:`An example wrapper for map_coordinates <tutorial-interpolate_cartesian-grids>`
63
+
64
+
65
+ **Low-level data structures for tensor product polynomials and splines:**
65
66
 
66
- Tensor product polynomials:
67
67
 
68
68
  .. autosummary::
69
69
  :toctree: generated/
@@ -71,21 +71,44 @@ Tensor product polynomials:
71
71
  NdPPoly
72
72
  NdBSpline
73
73
 
74
- 1-D Splines
75
- ===========
74
+
75
+ 1-D spline smoothing and approximation
76
+ ======================================
76
77
 
77
78
  .. autosummary::
78
79
  :toctree: generated/
79
80
 
80
- BSpline
81
- make_interp_spline
82
81
  make_lsq_spline
83
82
  make_smoothing_spline
84
- generate_knots
85
83
  make_splrep
86
84
  make_splprep
85
+ generate_knots
86
+
87
+ Rational Approximation
88
+ ======================
89
+
90
+ .. autosummary::
91
+ :toctree: generated/
92
+
93
+ AAA
94
+
95
+
96
+ Interfaces to FITPACK routines for 1D and 2D spline fitting
97
+ ===========================================================
98
+
99
+ This section lists wrappers for `FITPACK <http://www.netlib.org/dierckx/>`__
100
+ functionality for 1D and 2D smoothing splines. In most cases, users are better off
101
+ using higher-level routines listed in previous sections.
102
+
103
+
104
+ 1D FITPACK splines
105
+ ------------------
106
+
107
+ This package provides two sets of functionally equivalent wrappers: object-oriented and
108
+ functional.
109
+
110
+ **Functional FITPACK interface:**
87
111
 
88
- Functional interface to FITPACK routines:
89
112
 
90
113
  .. autosummary::
91
114
  :toctree: generated/
@@ -100,7 +123,7 @@ Functional interface to FITPACK routines:
100
123
  splantider
101
124
  insert
102
125
 
103
- Object-oriented FITPACK interface:
126
+ **Object-oriented FITPACK interface:**
104
127
 
105
128
  .. autosummary::
106
129
  :toctree: generated/
@@ -110,11 +133,10 @@ Object-oriented FITPACK interface:
110
133
  LSQUnivariateSpline
111
134
 
112
135
 
136
+ 2D FITPACK splines
137
+ ------------------
113
138
 
114
- 2-D Splines
115
- ===========
116
-
117
- For data on a grid:
139
+ **For data on a grid:**
118
140
 
119
141
  .. autosummary::
120
142
  :toctree: generated/
@@ -122,7 +144,7 @@ For data on a grid:
122
144
  RectBivariateSpline
123
145
  RectSphereBivariateSpline
124
146
 
125
- For unstructured data:
147
+ **For unstructured data (OOP interface):**
126
148
 
127
149
  .. autosummary::
128
150
  :toctree: generated/
@@ -133,7 +155,7 @@ For unstructured data:
133
155
  LSQBivariateSpline
134
156
  LSQSphereBivariateSpline
135
157
 
136
- Low-level interface to FITPACK functions:
158
+ **For unstructured data (functional interface):**
137
159
 
138
160
  .. autosummary::
139
161
  :toctree: generated/
@@ -141,14 +163,6 @@ Low-level interface to FITPACK functions:
141
163
  bisplrep
142
164
  bisplev
143
165
 
144
- Rational Approximation
145
- ======================
146
-
147
- .. autosummary::
148
- :toctree: generated/
149
-
150
- pade
151
- AAA
152
166
 
153
167
  Additional tools
154
168
  ================
@@ -158,28 +172,26 @@ Additional tools
158
172
 
159
173
  lagrange
160
174
  approximate_taylor_polynomial
175
+ pade
176
+
177
+ interpn
178
+ griddata
179
+ barycentric_interpolate
180
+ krogh_interpolate
181
+ pchip_interpolate
182
+ Rbf
183
+ interp1d
184
+ interp2d
161
185
 
162
186
  .. seealso::
163
187
 
164
188
  `scipy.ndimage.map_coordinates`,
165
189
  `scipy.ndimage.spline_filter`,
166
- `scipy.signal.resample`,
167
- `scipy.signal.bspline`,
168
- `scipy.signal.gauss_spline`,
169
- `scipy.signal.qspline1d`,
170
- `scipy.signal.cspline1d`,
171
- `scipy.signal.qspline1d_eval`,
172
- `scipy.signal.cspline1d_eval`,
173
- `scipy.signal.qspline2d`,
174
- `scipy.signal.cspline2d`.
175
-
176
- ``pchip`` is an alias of `PchipInterpolator` for backward compatibility
177
- (should not be used in new code).
178
- """
190
+
191
+ """ # noqa: E501
179
192
  from ._interpolate import *
180
193
  from ._fitpack_py import *
181
194
 
182
- # New interface to fitpack library:
183
195
  from ._fitpack2 import *
184
196
 
185
197
  from ._rbf import Rbf
@@ -34,7 +34,7 @@ __all__ = ["AAA", "FloaterHormannInterpolator"]
34
34
 
35
35
 
36
36
  class _BarycentricRational:
37
- """Base class for Barycentric representation of a rational function."""
37
+ """Base class for barycentric representation of a rational function."""
38
38
  def __init__(self, x, y, **kwargs):
39
39
  # input validation
40
40
  z = np.asarray(x)
@@ -399,7 +399,7 @@ class AAA(_BarycentricRational):
399
399
  >>> with warnings.catch_warnings():
400
400
  ... warnings.simplefilter('ignore', RuntimeWarning)
401
401
  ... r.clean_up()
402
- 4
402
+ 4 # may vary
403
403
  >>> mask = np.abs(r.residues()) < 1e-13
404
404
  >>> axs[1].plot(r.poles().real[~mask], r.poles().imag[~mask], '.')
405
405
  >>> axs[1].plot(r.poles().real[mask], r.poles().imag[mask], 'r.')
@@ -597,11 +597,10 @@ class AAA(_BarycentricRational):
597
597
 
598
598
 
599
599
  class FloaterHormannInterpolator(_BarycentricRational):
600
- r"""
601
- Floater-Hormann barycentric rational interpolation.
600
+ r"""Floater-Hormann barycentric rational interpolator (C∞ smooth on real axis).
602
601
 
603
602
  As described in [1]_, the method of Floater and Hormann computes weights for a
604
- Barycentric rational interpolant with no poles on the real axis.
603
+ barycentric rational interpolant with no poles on the real axis.
605
604
 
606
605
  Parameters
607
606
  ----------
@@ -610,11 +609,11 @@ class FloaterHormannInterpolator(_BarycentricRational):
610
609
  complex but must be finite.
611
610
  y : array_like, shape (n, ...)
612
611
  Array containing values of the dependent variable. Infinite and NaN values
613
- of `values` and corresponding values of `x` will be discarded.
614
- d : int, optional
615
- Blends ``n - d`` degree `d` polynomials together. For ``d = n - 1`` it is
616
- equivalent to polynomial interpolation. Must satisfy ``0 <= d < n``,
617
- defaults to 3.
612
+ of `y` and corresponding values of `x` will be discarded.
613
+ d : int, default: 3
614
+ Integer satisfying ``0 <= d < n``. Floater-Hormann interpolation blends
615
+ ``n - d`` polynomials of degree `d` together; for ``d = n - 1``, this is
616
+ equivalent to polynomial interpolation.
618
617
 
619
618
  Attributes
620
619
  ----------
@@ -639,8 +638,8 @@ class FloaterHormannInterpolator(_BarycentricRational):
639
638
  r(x) = \frac{\sum_{i=0}^{n-d} \lambda_i(x) p_i(x)}
640
639
  {\sum_{i=0}^{n-d} \lambda_i(x)},
641
640
 
642
- where :math:`p_i(x)` is an interpolating polynomials of at most degree `d` through
643
- the points :math:`(x_i,y_i),\dots,(x_{i+d},y_{i+d}), and :math:`\lambda_i(z)` are
641
+ where :math:`p_i(x)` is an interpolating polynomial of at most degree `d` through
642
+ the points :math:`(x_i,y_i),\dots,(x_{i+d},y_{i+d})`, and :math:`\lambda_i(z)` are
644
643
  blending functions defined by
645
644
 
646
645
  .. math::
@@ -649,8 +648,8 @@ class FloaterHormannInterpolator(_BarycentricRational):
649
648
 
650
649
  When ``d = n - 1`` this reduces to polynomial interpolation.
651
650
 
652
- Due to its stability following barycentric representation of the above equation
653
- is used instead for computation
651
+ Due to its stability, the following barycentric representation of the above equation
652
+ is used for computation
654
653
 
655
654
  .. math::
656
655
 
@@ -680,16 +679,17 @@ class FloaterHormannInterpolator(_BarycentricRational):
680
679
  >>> import numpy as np
681
680
  >>> from scipy.interpolate import (FloaterHormannInterpolator,
682
681
  ... BarycentricInterpolator)
683
- >>> def f(z):
684
- ... return 1/(1 + z**2)
685
- >>> z = np.linspace(-5, 5, num=15)
686
- >>> r = FloaterHormannInterpolator(z, f(z))
687
- >>> p = BarycentricInterpolator(z, f(z))
688
- >>> zz = np.linspace(-5, 5, num=1000)
682
+ >>> def f(x):
683
+ ... return 1/(1 + x**2)
684
+ >>> x = np.linspace(-5, 5, num=15)
685
+ >>> r = FloaterHormannInterpolator(x, f(x))
686
+ >>> p = BarycentricInterpolator(x, f(x))
687
+ >>> xx = np.linspace(-5, 5, num=1000)
689
688
  >>> import matplotlib.pyplot as plt
690
689
  >>> fig, ax = plt.subplots()
691
- >>> ax.plot(zz, r(zz), label="Floater=Hormann")
692
- >>> ax.plot(zz, p(zz), label="Polynomial")
690
+ >>> ax.plot(xx, f(xx), label="f(x)")
691
+ >>> ax.plot(xx, r(xx), "--", label="Floater-Hormann")
692
+ >>> ax.plot(xx, p(xx), "--", label="Polynomial")
693
693
  >>> ax.legend()
694
694
  >>> plt.show()
695
695
  """