scipy 1.15.3__cp313-cp313t-win_amd64.whl → 1.16.0rc2__cp313-cp313t-win_amd64.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 (759) hide show
  1. scipy/__config__.py +7 -7
  2. scipy/__init__.py +3 -6
  3. scipy/_cyutility.cp313t-win_amd64.dll.a +0 -0
  4. scipy/_cyutility.cp313t-win_amd64.pyd +0 -0
  5. scipy/_lib/_array_api.py +486 -161
  6. scipy/_lib/_array_api_compat_vendor.py +9 -0
  7. scipy/_lib/_bunch.py +4 -0
  8. scipy/_lib/_ccallback_c.cp313t-win_amd64.dll.a +0 -0
  9. scipy/_lib/_ccallback_c.cp313t-win_amd64.pyd +0 -0
  10. scipy/_lib/_docscrape.py +1 -1
  11. scipy/_lib/_elementwise_iterative_method.py +15 -26
  12. scipy/_lib/_fpumode.cp313t-win_amd64.dll.a +0 -0
  13. scipy/_lib/_fpumode.cp313t-win_amd64.pyd +0 -0
  14. scipy/_lib/_sparse.py +41 -0
  15. scipy/_lib/_test_ccallback.cp313t-win_amd64.dll.a +0 -0
  16. scipy/_lib/_test_ccallback.cp313t-win_amd64.pyd +0 -0
  17. scipy/_lib/_test_deprecation_call.cp313t-win_amd64.dll.a +0 -0
  18. scipy/_lib/_test_deprecation_call.cp313t-win_amd64.pyd +0 -0
  19. scipy/_lib/_test_deprecation_def.cp313t-win_amd64.dll.a +0 -0
  20. scipy/_lib/_test_deprecation_def.cp313t-win_amd64.pyd +0 -0
  21. scipy/_lib/_testutils.py +6 -2
  22. scipy/_lib/_uarray/_uarray.cp313t-win_amd64.dll.a +0 -0
  23. scipy/_lib/_uarray/_uarray.cp313t-win_amd64.pyd +0 -0
  24. scipy/_lib/_util.py +222 -125
  25. scipy/_lib/array_api_compat/__init__.py +4 -4
  26. scipy/_lib/array_api_compat/_internal.py +19 -6
  27. scipy/_lib/array_api_compat/common/__init__.py +1 -1
  28. scipy/_lib/array_api_compat/common/_aliases.py +365 -193
  29. scipy/_lib/array_api_compat/common/_fft.py +94 -64
  30. scipy/_lib/array_api_compat/common/_helpers.py +413 -180
  31. scipy/_lib/array_api_compat/common/_linalg.py +116 -40
  32. scipy/_lib/array_api_compat/common/_typing.py +179 -10
  33. scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
  34. scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
  35. scipy/_lib/array_api_compat/cupy/_info.py +16 -6
  36. scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
  37. scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
  38. scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
  39. scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
  40. scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
  41. scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
  42. scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
  43. scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
  44. scipy/_lib/array_api_compat/numpy/_info.py +36 -16
  45. scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
  46. scipy/_lib/array_api_compat/numpy/fft.py +11 -5
  47. scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
  48. scipy/_lib/array_api_compat/torch/__init__.py +3 -5
  49. scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
  50. scipy/_lib/array_api_compat/torch/_info.py +27 -16
  51. scipy/_lib/array_api_compat/torch/_typing.py +3 -0
  52. scipy/_lib/array_api_compat/torch/fft.py +17 -18
  53. scipy/_lib/array_api_compat/torch/linalg.py +16 -16
  54. scipy/_lib/array_api_extra/__init__.py +26 -3
  55. scipy/_lib/array_api_extra/_delegation.py +171 -0
  56. scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
  57. scipy/_lib/array_api_extra/_lib/_at.py +463 -0
  58. scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
  59. scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
  60. scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
  61. scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
  62. scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
  63. scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
  64. scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
  65. scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
  66. scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
  67. scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
  68. scipy/_lib/array_api_extra/testing.py +359 -0
  69. scipy/_lib/decorator.py +2 -2
  70. scipy/_lib/doccer.py +1 -7
  71. scipy/_lib/messagestream.cp313t-win_amd64.dll.a +0 -0
  72. scipy/_lib/messagestream.cp313t-win_amd64.pyd +0 -0
  73. scipy/_lib/pyprima/__init__.py +212 -0
  74. scipy/_lib/pyprima/cobyla/__init__.py +0 -0
  75. scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
  76. scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
  77. scipy/_lib/pyprima/cobyla/geometry.py +226 -0
  78. scipy/_lib/pyprima/cobyla/initialize.py +215 -0
  79. scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
  80. scipy/_lib/pyprima/cobyla/update.py +289 -0
  81. scipy/_lib/pyprima/common/__init__.py +0 -0
  82. scipy/_lib/pyprima/common/_bounds.py +34 -0
  83. scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
  84. scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
  85. scipy/_lib/pyprima/common/_project.py +173 -0
  86. scipy/_lib/pyprima/common/checkbreak.py +93 -0
  87. scipy/_lib/pyprima/common/consts.py +47 -0
  88. scipy/_lib/pyprima/common/evaluate.py +99 -0
  89. scipy/_lib/pyprima/common/history.py +38 -0
  90. scipy/_lib/pyprima/common/infos.py +30 -0
  91. scipy/_lib/pyprima/common/linalg.py +435 -0
  92. scipy/_lib/pyprima/common/message.py +290 -0
  93. scipy/_lib/pyprima/common/powalg.py +131 -0
  94. scipy/_lib/pyprima/common/preproc.py +277 -0
  95. scipy/_lib/pyprima/common/present.py +5 -0
  96. scipy/_lib/pyprima/common/ratio.py +54 -0
  97. scipy/_lib/pyprima/common/redrho.py +47 -0
  98. scipy/_lib/pyprima/common/selectx.py +296 -0
  99. scipy/_lib/tests/test__util.py +105 -121
  100. scipy/_lib/tests/test_array_api.py +166 -35
  101. scipy/_lib/tests/test_bunch.py +7 -0
  102. scipy/_lib/tests/test_ccallback.py +2 -10
  103. scipy/_lib/tests/test_public_api.py +13 -0
  104. scipy/cluster/_hierarchy.cp313t-win_amd64.dll.a +0 -0
  105. scipy/cluster/_hierarchy.cp313t-win_amd64.pyd +0 -0
  106. scipy/cluster/_optimal_leaf_ordering.cp313t-win_amd64.dll.a +0 -0
  107. scipy/cluster/_optimal_leaf_ordering.cp313t-win_amd64.pyd +0 -0
  108. scipy/cluster/_vq.cp313t-win_amd64.dll.a +0 -0
  109. scipy/cluster/_vq.cp313t-win_amd64.pyd +0 -0
  110. scipy/cluster/hierarchy.py +393 -223
  111. scipy/cluster/tests/test_hierarchy.py +273 -335
  112. scipy/cluster/tests/test_vq.py +45 -61
  113. scipy/cluster/vq.py +39 -35
  114. scipy/conftest.py +263 -157
  115. scipy/constants/_constants.py +4 -1
  116. scipy/constants/tests/test_codata.py +2 -2
  117. scipy/constants/tests/test_constants.py +11 -18
  118. scipy/datasets/_download_all.py +15 -1
  119. scipy/datasets/_fetchers.py +7 -1
  120. scipy/datasets/_utils.py +1 -1
  121. scipy/differentiate/_differentiate.py +25 -25
  122. scipy/differentiate/tests/test_differentiate.py +24 -25
  123. scipy/fft/_basic.py +20 -0
  124. scipy/fft/_helper.py +3 -34
  125. scipy/fft/_pocketfft/helper.py +29 -1
  126. scipy/fft/_pocketfft/pypocketfft.cp313t-win_amd64.dll.a +0 -0
  127. scipy/fft/_pocketfft/pypocketfft.cp313t-win_amd64.pyd +0 -0
  128. scipy/fft/_pocketfft/tests/test_basic.py +2 -4
  129. scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
  130. scipy/fft/_realtransforms.py +13 -0
  131. scipy/fft/tests/test_basic.py +27 -25
  132. scipy/fft/tests/test_fftlog.py +16 -7
  133. scipy/fft/tests/test_helper.py +18 -34
  134. scipy/fft/tests/test_real_transforms.py +8 -10
  135. scipy/fftpack/convolve.cp313t-win_amd64.dll.a +0 -0
  136. scipy/fftpack/convolve.cp313t-win_amd64.pyd +0 -0
  137. scipy/fftpack/tests/test_basic.py +2 -4
  138. scipy/fftpack/tests/test_real_transforms.py +8 -9
  139. scipy/integrate/_bvp.py +9 -3
  140. scipy/integrate/_cubature.py +3 -2
  141. scipy/integrate/_dop.cp313t-win_amd64.dll.a +0 -0
  142. scipy/integrate/_dop.cp313t-win_amd64.pyd +0 -0
  143. scipy/integrate/_lsoda.cp313t-win_amd64.dll.a +0 -0
  144. scipy/integrate/_lsoda.cp313t-win_amd64.pyd +0 -0
  145. scipy/integrate/_ode.py +9 -2
  146. scipy/integrate/_odepack.cp313t-win_amd64.dll.a +0 -0
  147. scipy/integrate/_odepack.cp313t-win_amd64.pyd +0 -0
  148. scipy/integrate/_quad_vec.py +21 -29
  149. scipy/integrate/_quadpack.cp313t-win_amd64.dll.a +0 -0
  150. scipy/integrate/_quadpack.cp313t-win_amd64.pyd +0 -0
  151. scipy/integrate/_quadpack_py.py +11 -7
  152. scipy/integrate/_quadrature.py +3 -3
  153. scipy/integrate/_rules/_base.py +2 -2
  154. scipy/integrate/_tanhsinh.py +48 -47
  155. scipy/integrate/_test_multivariate.cp313t-win_amd64.dll.a +0 -0
  156. scipy/integrate/_test_multivariate.cp313t-win_amd64.pyd +0 -0
  157. scipy/integrate/_test_odeint_banded.cp313t-win_amd64.dll.a +0 -0
  158. scipy/integrate/_test_odeint_banded.cp313t-win_amd64.pyd +0 -0
  159. scipy/integrate/_vode.cp313t-win_amd64.dll.a +0 -0
  160. scipy/integrate/_vode.cp313t-win_amd64.pyd +0 -0
  161. scipy/integrate/tests/test__quad_vec.py +0 -6
  162. scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
  163. scipy/integrate/tests/test_cubature.py +21 -35
  164. scipy/integrate/tests/test_quadrature.py +6 -8
  165. scipy/integrate/tests/test_tanhsinh.py +56 -48
  166. scipy/interpolate/__init__.py +70 -58
  167. scipy/interpolate/_bary_rational.py +22 -22
  168. scipy/interpolate/_bsplines.py +119 -66
  169. scipy/interpolate/_cubic.py +65 -50
  170. scipy/interpolate/_dfitpack.cp313t-win_amd64.dll.a +0 -0
  171. scipy/interpolate/_dfitpack.cp313t-win_amd64.pyd +0 -0
  172. scipy/interpolate/_dierckx.cp313t-win_amd64.dll.a +0 -0
  173. scipy/interpolate/_dierckx.cp313t-win_amd64.pyd +0 -0
  174. scipy/interpolate/_fitpack.cp313t-win_amd64.dll.a +0 -0
  175. scipy/interpolate/_fitpack.cp313t-win_amd64.pyd +0 -0
  176. scipy/interpolate/_fitpack2.py +9 -6
  177. scipy/interpolate/_fitpack_impl.py +32 -26
  178. scipy/interpolate/_fitpack_repro.py +23 -19
  179. scipy/interpolate/_interpnd.cp313t-win_amd64.dll.a +0 -0
  180. scipy/interpolate/_interpnd.cp313t-win_amd64.pyd +0 -0
  181. scipy/interpolate/_interpolate.py +30 -12
  182. scipy/interpolate/_ndbspline.py +13 -18
  183. scipy/interpolate/_ndgriddata.py +5 -8
  184. scipy/interpolate/_polyint.py +95 -31
  185. scipy/interpolate/_ppoly.cp313t-win_amd64.dll.a +0 -0
  186. scipy/interpolate/_ppoly.cp313t-win_amd64.pyd +0 -0
  187. scipy/interpolate/_rbf.py +2 -2
  188. scipy/interpolate/_rbfinterp.py +1 -1
  189. scipy/interpolate/_rbfinterp_pythran.cp313t-win_amd64.dll.a +0 -0
  190. scipy/interpolate/_rbfinterp_pythran.cp313t-win_amd64.pyd +0 -0
  191. scipy/interpolate/_rgi.py +31 -26
  192. scipy/interpolate/_rgi_cython.cp313t-win_amd64.dll.a +0 -0
  193. scipy/interpolate/_rgi_cython.cp313t-win_amd64.pyd +0 -0
  194. scipy/interpolate/dfitpack.py +0 -20
  195. scipy/interpolate/interpnd.py +1 -2
  196. scipy/interpolate/tests/test_bary_rational.py +2 -2
  197. scipy/interpolate/tests/test_bsplines.py +97 -1
  198. scipy/interpolate/tests/test_fitpack2.py +39 -1
  199. scipy/interpolate/tests/test_interpnd.py +32 -20
  200. scipy/interpolate/tests/test_interpolate.py +48 -4
  201. scipy/interpolate/tests/test_rgi.py +2 -1
  202. scipy/io/_fast_matrix_market/__init__.py +2 -0
  203. scipy/io/_fast_matrix_market/_fmm_core.cp313t-win_amd64.dll.a +0 -0
  204. scipy/io/_fast_matrix_market/_fmm_core.cp313t-win_amd64.pyd +0 -0
  205. scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
  206. scipy/io/_harwell_boeing/hb.py +7 -11
  207. scipy/io/_idl.py +5 -7
  208. scipy/io/_netcdf.py +15 -5
  209. scipy/io/_test_fortran.cp313t-win_amd64.dll.a +0 -0
  210. scipy/io/_test_fortran.cp313t-win_amd64.pyd +0 -0
  211. scipy/io/arff/tests/test_arffread.py +3 -3
  212. scipy/io/matlab/__init__.py +5 -3
  213. scipy/io/matlab/_mio.py +4 -1
  214. scipy/io/matlab/_mio5.py +19 -13
  215. scipy/io/matlab/_mio5_utils.cp313t-win_amd64.dll.a +0 -0
  216. scipy/io/matlab/_mio5_utils.cp313t-win_amd64.pyd +0 -0
  217. scipy/io/matlab/_mio_utils.cp313t-win_amd64.dll.a +0 -0
  218. scipy/io/matlab/_mio_utils.cp313t-win_amd64.pyd +0 -0
  219. scipy/io/matlab/_miobase.py +4 -1
  220. scipy/io/matlab/_streams.cp313t-win_amd64.dll.a +0 -0
  221. scipy/io/matlab/_streams.cp313t-win_amd64.pyd +0 -0
  222. scipy/io/matlab/tests/test_mio.py +46 -18
  223. scipy/io/matlab/tests/test_mio_funcs.py +1 -1
  224. scipy/io/tests/test_mmio.py +7 -1
  225. scipy/io/tests/test_wavfile.py +41 -0
  226. scipy/io/wavfile.py +57 -10
  227. scipy/linalg/_basic.py +113 -86
  228. scipy/linalg/_cythonized_array_utils.cp313t-win_amd64.dll.a +0 -0
  229. scipy/linalg/_cythonized_array_utils.cp313t-win_amd64.pyd +0 -0
  230. scipy/linalg/_decomp.py +22 -9
  231. scipy/linalg/_decomp_cholesky.py +28 -13
  232. scipy/linalg/_decomp_cossin.py +45 -30
  233. scipy/linalg/_decomp_interpolative.cp313t-win_amd64.dll.a +0 -0
  234. scipy/linalg/_decomp_interpolative.cp313t-win_amd64.pyd +0 -0
  235. scipy/linalg/_decomp_ldl.py +4 -1
  236. scipy/linalg/_decomp_lu.py +18 -6
  237. scipy/linalg/_decomp_lu_cython.cp313t-win_amd64.dll.a +0 -0
  238. scipy/linalg/_decomp_lu_cython.cp313t-win_amd64.pyd +0 -0
  239. scipy/linalg/_decomp_polar.py +2 -0
  240. scipy/linalg/_decomp_qr.py +6 -2
  241. scipy/linalg/_decomp_qz.py +3 -0
  242. scipy/linalg/_decomp_schur.py +3 -1
  243. scipy/linalg/_decomp_svd.py +13 -2
  244. scipy/linalg/_decomp_update.cp313t-win_amd64.dll.a +0 -0
  245. scipy/linalg/_decomp_update.cp313t-win_amd64.pyd +0 -0
  246. scipy/linalg/_expm_frechet.py +4 -0
  247. scipy/linalg/_fblas.cp313t-win_amd64.dll.a +0 -0
  248. scipy/linalg/_fblas.cp313t-win_amd64.pyd +0 -0
  249. scipy/linalg/_flapack.cp313t-win_amd64.dll.a +0 -0
  250. scipy/linalg/_flapack.cp313t-win_amd64.pyd +0 -0
  251. scipy/linalg/_linalg_pythran.cp313t-win_amd64.dll.a +0 -0
  252. scipy/linalg/_linalg_pythran.cp313t-win_amd64.pyd +0 -0
  253. scipy/linalg/_matfuncs.py +187 -4
  254. scipy/linalg/_matfuncs_expm.cp313t-win_amd64.dll.a +0 -0
  255. scipy/linalg/_matfuncs_expm.cp313t-win_amd64.pyd +0 -0
  256. scipy/linalg/_matfuncs_schur_sqrtm.cp313t-win_amd64.dll.a +0 -0
  257. scipy/linalg/_matfuncs_schur_sqrtm.cp313t-win_amd64.pyd +0 -0
  258. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  259. scipy/linalg/_matfuncs_sqrtm_triu.cp313t-win_amd64.dll.a +0 -0
  260. scipy/linalg/_matfuncs_sqrtm_triu.cp313t-win_amd64.pyd +0 -0
  261. scipy/linalg/_procrustes.py +2 -0
  262. scipy/linalg/_sketches.py +17 -6
  263. scipy/linalg/_solve_toeplitz.cp313t-win_amd64.dll.a +0 -0
  264. scipy/linalg/_solve_toeplitz.cp313t-win_amd64.pyd +0 -0
  265. scipy/linalg/_solvers.py +7 -2
  266. scipy/linalg/_special_matrices.py +26 -36
  267. scipy/linalg/cython_blas.cp313t-win_amd64.dll.a +0 -0
  268. scipy/linalg/cython_blas.cp313t-win_amd64.pyd +0 -0
  269. scipy/linalg/cython_lapack.cp313t-win_amd64.dll.a +0 -0
  270. scipy/linalg/cython_lapack.cp313t-win_amd64.pyd +0 -0
  271. scipy/linalg/lapack.py +22 -2
  272. scipy/linalg/tests/_cython_examples/meson.build +7 -0
  273. scipy/linalg/tests/test_basic.py +31 -16
  274. scipy/linalg/tests/test_batch.py +588 -0
  275. scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
  276. scipy/linalg/tests/test_decomp.py +40 -3
  277. scipy/linalg/tests/test_decomp_cossin.py +14 -0
  278. scipy/linalg/tests/test_decomp_ldl.py +1 -1
  279. scipy/linalg/tests/test_lapack.py +115 -7
  280. scipy/linalg/tests/test_matfuncs.py +157 -102
  281. scipy/linalg/tests/test_procrustes.py +0 -7
  282. scipy/linalg/tests/test_solve_toeplitz.py +1 -1
  283. scipy/linalg/tests/test_special_matrices.py +1 -5
  284. scipy/ndimage/__init__.py +1 -0
  285. scipy/ndimage/_ctest.cp313t-win_amd64.dll.a +0 -0
  286. scipy/ndimage/_ctest.cp313t-win_amd64.pyd +0 -0
  287. scipy/ndimage/_cytest.cp313t-win_amd64.dll.a +0 -0
  288. scipy/ndimage/_cytest.cp313t-win_amd64.pyd +0 -0
  289. scipy/ndimage/_delegators.py +8 -2
  290. scipy/ndimage/_filters.py +453 -5
  291. scipy/ndimage/_interpolation.py +36 -6
  292. scipy/ndimage/_measurements.py +4 -2
  293. scipy/ndimage/_morphology.py +5 -0
  294. scipy/ndimage/_nd_image.cp313t-win_amd64.dll.a +0 -0
  295. scipy/ndimage/_nd_image.cp313t-win_amd64.pyd +0 -0
  296. scipy/ndimage/_ni_docstrings.py +5 -1
  297. scipy/ndimage/_ni_label.cp313t-win_amd64.dll.a +0 -0
  298. scipy/ndimage/_ni_label.cp313t-win_amd64.pyd +0 -0
  299. scipy/ndimage/_ni_support.py +1 -5
  300. scipy/ndimage/_rank_filter_1d.cp313t-win_amd64.dll.a +0 -0
  301. scipy/ndimage/_rank_filter_1d.cp313t-win_amd64.pyd +0 -0
  302. scipy/ndimage/_support_alternative_backends.py +18 -6
  303. scipy/ndimage/tests/test_filters.py +370 -259
  304. scipy/ndimage/tests/test_fourier.py +7 -9
  305. scipy/ndimage/tests/test_interpolation.py +68 -61
  306. scipy/ndimage/tests/test_measurements.py +18 -35
  307. scipy/ndimage/tests/test_morphology.py +143 -131
  308. scipy/ndimage/tests/test_splines.py +1 -3
  309. scipy/odr/__odrpack.cp313t-win_amd64.dll.a +0 -0
  310. scipy/odr/__odrpack.cp313t-win_amd64.pyd +0 -0
  311. scipy/optimize/_basinhopping.py +13 -7
  312. scipy/optimize/_bglu_dense.cp313t-win_amd64.dll.a +0 -0
  313. scipy/optimize/_bglu_dense.cp313t-win_amd64.pyd +0 -0
  314. scipy/optimize/_bracket.py +17 -24
  315. scipy/optimize/_chandrupatla.py +9 -10
  316. scipy/optimize/_cobyla_py.py +104 -123
  317. scipy/optimize/_constraints.py +14 -10
  318. scipy/optimize/_differentiable_functions.py +371 -230
  319. scipy/optimize/_differentialevolution.py +4 -3
  320. scipy/optimize/_direct.cp313t-win_amd64.dll.a +0 -0
  321. scipy/optimize/_direct.cp313t-win_amd64.pyd +0 -0
  322. scipy/optimize/_dual_annealing.py +1 -1
  323. scipy/optimize/_elementwise.py +1 -4
  324. scipy/optimize/_group_columns.cp313t-win_amd64.dll.a +0 -0
  325. scipy/optimize/_group_columns.cp313t-win_amd64.pyd +0 -0
  326. scipy/optimize/_highspy/_core.cp313t-win_amd64.dll.a +0 -0
  327. scipy/optimize/_highspy/_core.cp313t-win_amd64.pyd +0 -0
  328. scipy/optimize/_highspy/_highs_options.cp313t-win_amd64.dll.a +0 -0
  329. scipy/optimize/_highspy/_highs_options.cp313t-win_amd64.pyd +0 -0
  330. scipy/optimize/_lbfgsb.cp313t-win_amd64.dll.a +0 -0
  331. scipy/optimize/_lbfgsb.cp313t-win_amd64.pyd +0 -0
  332. scipy/optimize/_lbfgsb_py.py +57 -16
  333. scipy/optimize/_linprog_doc.py +2 -2
  334. scipy/optimize/_linprog_highs.py +2 -2
  335. scipy/optimize/_linprog_ip.py +25 -10
  336. scipy/optimize/_linprog_util.py +14 -16
  337. scipy/optimize/_lsap.cp313t-win_amd64.dll.a +0 -0
  338. scipy/optimize/_lsap.cp313t-win_amd64.pyd +0 -0
  339. scipy/optimize/_lsq/common.py +3 -3
  340. scipy/optimize/_lsq/dogbox.py +16 -2
  341. scipy/optimize/_lsq/givens_elimination.cp313t-win_amd64.dll.a +0 -0
  342. scipy/optimize/_lsq/givens_elimination.cp313t-win_amd64.pyd +0 -0
  343. scipy/optimize/_lsq/least_squares.py +198 -126
  344. scipy/optimize/_lsq/lsq_linear.py +6 -6
  345. scipy/optimize/_lsq/trf.py +35 -8
  346. scipy/optimize/_milp.py +3 -1
  347. scipy/optimize/_minimize.py +105 -36
  348. scipy/optimize/_minpack.cp313t-win_amd64.dll.a +0 -0
  349. scipy/optimize/_minpack.cp313t-win_amd64.pyd +0 -0
  350. scipy/optimize/_minpack_py.py +21 -14
  351. scipy/optimize/_moduleTNC.cp313t-win_amd64.dll.a +0 -0
  352. scipy/optimize/_moduleTNC.cp313t-win_amd64.pyd +0 -0
  353. scipy/optimize/_nnls.py +20 -21
  354. scipy/optimize/_nonlin.py +34 -3
  355. scipy/optimize/_numdiff.py +288 -110
  356. scipy/optimize/_optimize.py +86 -48
  357. scipy/optimize/_pava_pybind.cp313t-win_amd64.dll.a +0 -0
  358. scipy/optimize/_pava_pybind.cp313t-win_amd64.pyd +0 -0
  359. scipy/optimize/_remove_redundancy.py +5 -5
  360. scipy/optimize/_root_scalar.py +1 -1
  361. scipy/optimize/_shgo.py +6 -0
  362. scipy/optimize/_shgo_lib/_complex.py +1 -1
  363. scipy/optimize/_slsqp_py.py +216 -124
  364. scipy/optimize/_slsqplib.cp313t-win_amd64.dll.a +0 -0
  365. scipy/optimize/_slsqplib.cp313t-win_amd64.pyd +0 -0
  366. scipy/optimize/_spectral.py +1 -1
  367. scipy/optimize/_tnc.py +8 -1
  368. scipy/optimize/_trlib/_trlib.cp313t-win_amd64.dll.a +0 -0
  369. scipy/optimize/_trlib/_trlib.cp313t-win_amd64.pyd +0 -0
  370. scipy/optimize/_trustregion.py +20 -6
  371. scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
  372. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
  373. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
  374. scipy/optimize/_trustregion_constr/projections.py +12 -8
  375. scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
  376. scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
  377. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
  378. scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
  379. scipy/optimize/_trustregion_exact.py +0 -1
  380. scipy/optimize/_zeros.cp313t-win_amd64.dll.a +0 -0
  381. scipy/optimize/_zeros.cp313t-win_amd64.pyd +0 -0
  382. scipy/optimize/_zeros_py.py +97 -17
  383. scipy/optimize/cython_optimize/_zeros.cp313t-win_amd64.dll.a +0 -0
  384. scipy/optimize/cython_optimize/_zeros.cp313t-win_amd64.pyd +0 -0
  385. scipy/optimize/slsqp.py +0 -1
  386. scipy/optimize/tests/test__basinhopping.py +1 -1
  387. scipy/optimize/tests/test__differential_evolution.py +4 -4
  388. scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
  389. scipy/optimize/tests/test__numdiff.py +66 -22
  390. scipy/optimize/tests/test__remove_redundancy.py +2 -2
  391. scipy/optimize/tests/test__shgo.py +9 -1
  392. scipy/optimize/tests/test_bracket.py +36 -46
  393. scipy/optimize/tests/test_chandrupatla.py +133 -135
  394. scipy/optimize/tests/test_cobyla.py +74 -45
  395. scipy/optimize/tests/test_constraints.py +1 -1
  396. scipy/optimize/tests/test_differentiable_functions.py +226 -6
  397. scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
  398. scipy/optimize/tests/test_least_squares.py +125 -13
  399. scipy/optimize/tests/test_linear_assignment.py +3 -3
  400. scipy/optimize/tests/test_linprog.py +3 -3
  401. scipy/optimize/tests/test_lsq_linear.py +6 -6
  402. scipy/optimize/tests/test_minimize_constrained.py +2 -2
  403. scipy/optimize/tests/test_minpack.py +4 -4
  404. scipy/optimize/tests/test_nnls.py +43 -3
  405. scipy/optimize/tests/test_nonlin.py +36 -0
  406. scipy/optimize/tests/test_optimize.py +95 -17
  407. scipy/optimize/tests/test_slsqp.py +36 -4
  408. scipy/optimize/tests/test_zeros.py +34 -1
  409. scipy/signal/__init__.py +12 -23
  410. scipy/signal/_delegators.py +568 -0
  411. scipy/signal/_filter_design.py +459 -241
  412. scipy/signal/_fir_filter_design.py +262 -90
  413. scipy/signal/_lti_conversion.py +3 -2
  414. scipy/signal/_ltisys.py +118 -91
  415. scipy/signal/_max_len_seq_inner.cp313t-win_amd64.dll.a +0 -0
  416. scipy/signal/_max_len_seq_inner.cp313t-win_amd64.pyd +0 -0
  417. scipy/signal/_peak_finding_utils.cp313t-win_amd64.dll.a +0 -0
  418. scipy/signal/_peak_finding_utils.cp313t-win_amd64.pyd +0 -0
  419. scipy/signal/_polyutils.py +172 -0
  420. scipy/signal/_short_time_fft.py +519 -70
  421. scipy/signal/_signal_api.py +30 -0
  422. scipy/signal/_signaltools.py +719 -399
  423. scipy/signal/_sigtools.cp313t-win_amd64.dll.a +0 -0
  424. scipy/signal/_sigtools.cp313t-win_amd64.pyd +0 -0
  425. scipy/signal/_sosfilt.cp313t-win_amd64.dll.a +0 -0
  426. scipy/signal/_sosfilt.cp313t-win_amd64.pyd +0 -0
  427. scipy/signal/_spectral_py.py +230 -50
  428. scipy/signal/_spline.cp313t-win_amd64.dll.a +0 -0
  429. scipy/signal/_spline.cp313t-win_amd64.pyd +0 -0
  430. scipy/signal/_spline_filters.py +108 -68
  431. scipy/signal/_support_alternative_backends.py +73 -0
  432. scipy/signal/_upfirdn.py +4 -1
  433. scipy/signal/_upfirdn_apply.cp313t-win_amd64.dll.a +0 -0
  434. scipy/signal/_upfirdn_apply.cp313t-win_amd64.pyd +0 -0
  435. scipy/signal/_waveforms.py +2 -11
  436. scipy/signal/_wavelets.py +1 -1
  437. scipy/signal/fir_filter_design.py +1 -0
  438. scipy/signal/spline.py +4 -11
  439. scipy/signal/tests/_scipy_spectral_test_shim.py +2 -171
  440. scipy/signal/tests/test_bsplines.py +114 -79
  441. scipy/signal/tests/test_cont2discrete.py +9 -2
  442. scipy/signal/tests/test_filter_design.py +721 -481
  443. scipy/signal/tests/test_fir_filter_design.py +332 -140
  444. scipy/signal/tests/test_savitzky_golay.py +4 -3
  445. scipy/signal/tests/test_short_time_fft.py +221 -3
  446. scipy/signal/tests/test_signaltools.py +2144 -1348
  447. scipy/signal/tests/test_spectral.py +50 -6
  448. scipy/signal/tests/test_splines.py +161 -96
  449. scipy/signal/tests/test_upfirdn.py +84 -50
  450. scipy/signal/tests/test_waveforms.py +20 -0
  451. scipy/signal/tests/test_windows.py +607 -466
  452. scipy/signal/windows/_windows.py +287 -148
  453. scipy/sparse/__init__.py +23 -4
  454. scipy/sparse/_base.py +270 -108
  455. scipy/sparse/_bsr.py +7 -4
  456. scipy/sparse/_compressed.py +59 -231
  457. scipy/sparse/_construct.py +90 -38
  458. scipy/sparse/_coo.py +115 -181
  459. scipy/sparse/_csc.py +4 -4
  460. scipy/sparse/_csparsetools.cp313t-win_amd64.dll.a +0 -0
  461. scipy/sparse/_csparsetools.cp313t-win_amd64.pyd +0 -0
  462. scipy/sparse/_csr.py +2 -2
  463. scipy/sparse/_data.py +48 -48
  464. scipy/sparse/_dia.py +105 -18
  465. scipy/sparse/_dok.py +0 -23
  466. scipy/sparse/_index.py +4 -4
  467. scipy/sparse/_matrix.py +23 -0
  468. scipy/sparse/_sparsetools.cp313t-win_amd64.dll.a +0 -0
  469. scipy/sparse/_sparsetools.cp313t-win_amd64.pyd +0 -0
  470. scipy/sparse/_sputils.py +37 -22
  471. scipy/sparse/base.py +0 -9
  472. scipy/sparse/bsr.py +0 -14
  473. scipy/sparse/compressed.py +0 -23
  474. scipy/sparse/construct.py +0 -6
  475. scipy/sparse/coo.py +0 -14
  476. scipy/sparse/csc.py +0 -3
  477. scipy/sparse/csgraph/_flow.cp313t-win_amd64.dll.a +0 -0
  478. scipy/sparse/csgraph/_flow.cp313t-win_amd64.pyd +0 -0
  479. scipy/sparse/csgraph/_matching.cp313t-win_amd64.dll.a +0 -0
  480. scipy/sparse/csgraph/_matching.cp313t-win_amd64.pyd +0 -0
  481. scipy/sparse/csgraph/_min_spanning_tree.cp313t-win_amd64.dll.a +0 -0
  482. scipy/sparse/csgraph/_min_spanning_tree.cp313t-win_amd64.pyd +0 -0
  483. scipy/sparse/csgraph/_reordering.cp313t-win_amd64.dll.a +0 -0
  484. scipy/sparse/csgraph/_reordering.cp313t-win_amd64.pyd +0 -0
  485. scipy/sparse/csgraph/_shortest_path.cp313t-win_amd64.dll.a +0 -0
  486. scipy/sparse/csgraph/_shortest_path.cp313t-win_amd64.pyd +0 -0
  487. scipy/sparse/csgraph/_tools.cp313t-win_amd64.dll.a +0 -0
  488. scipy/sparse/csgraph/_tools.cp313t-win_amd64.pyd +0 -0
  489. scipy/sparse/csgraph/_traversal.cp313t-win_amd64.dll.a +0 -0
  490. scipy/sparse/csgraph/_traversal.cp313t-win_amd64.pyd +0 -0
  491. scipy/sparse/csgraph/tests/test_matching.py +14 -2
  492. scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
  493. scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
  494. scipy/sparse/csr.py +0 -5
  495. scipy/sparse/data.py +1 -6
  496. scipy/sparse/dia.py +0 -7
  497. scipy/sparse/dok.py +0 -10
  498. scipy/sparse/linalg/_dsolve/_superlu.cp313t-win_amd64.dll.a +0 -0
  499. scipy/sparse/linalg/_dsolve/_superlu.cp313t-win_amd64.pyd +0 -0
  500. scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
  501. scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
  502. scipy/sparse/linalg/_eigen/arpack/_arpack.cp313t-win_amd64.dll.a +0 -0
  503. scipy/sparse/linalg/_eigen/arpack/_arpack.cp313t-win_amd64.pyd +0 -0
  504. scipy/sparse/linalg/_eigen/arpack/arpack.py +23 -17
  505. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
  506. scipy/sparse/linalg/_interface.py +17 -18
  507. scipy/sparse/linalg/_isolve/_gcrotmk.py +4 -4
  508. scipy/sparse/linalg/_isolve/iterative.py +51 -45
  509. scipy/sparse/linalg/_isolve/lgmres.py +6 -6
  510. scipy/sparse/linalg/_isolve/minres.py +5 -5
  511. scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
  512. scipy/sparse/linalg/_isolve/utils.py +2 -8
  513. scipy/sparse/linalg/_matfuncs.py +1 -1
  514. scipy/sparse/linalg/_norm.py +1 -1
  515. scipy/sparse/linalg/_propack/_cpropack.cp313t-win_amd64.dll.a +0 -0
  516. scipy/sparse/linalg/_propack/_cpropack.cp313t-win_amd64.pyd +0 -0
  517. scipy/sparse/linalg/_propack/_dpropack.cp313t-win_amd64.dll.a +0 -0
  518. scipy/sparse/linalg/_propack/_dpropack.cp313t-win_amd64.pyd +0 -0
  519. scipy/sparse/linalg/_propack/_spropack.cp313t-win_amd64.dll.a +0 -0
  520. scipy/sparse/linalg/_propack/_spropack.cp313t-win_amd64.pyd +0 -0
  521. scipy/sparse/linalg/_propack/_zpropack.cp313t-win_amd64.dll.a +0 -0
  522. scipy/sparse/linalg/_propack/_zpropack.cp313t-win_amd64.pyd +0 -0
  523. scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
  524. scipy/sparse/linalg/tests/test_pydata_sparse.py +14 -0
  525. scipy/sparse/tests/test_arithmetic1d.py +5 -2
  526. scipy/sparse/tests/test_base.py +214 -42
  527. scipy/sparse/tests/test_common1d.py +7 -7
  528. scipy/sparse/tests/test_construct.py +1 -1
  529. scipy/sparse/tests/test_coo.py +272 -4
  530. scipy/sparse/tests/test_sparsetools.py +5 -0
  531. scipy/sparse/tests/test_sputils.py +36 -7
  532. scipy/spatial/_ckdtree.cp313t-win_amd64.dll.a +0 -0
  533. scipy/spatial/_ckdtree.cp313t-win_amd64.pyd +0 -0
  534. scipy/spatial/_distance_pybind.cp313t-win_amd64.dll.a +0 -0
  535. scipy/spatial/_distance_pybind.cp313t-win_amd64.pyd +0 -0
  536. scipy/spatial/_distance_wrap.cp313t-win_amd64.dll.a +0 -0
  537. scipy/spatial/_distance_wrap.cp313t-win_amd64.pyd +0 -0
  538. scipy/spatial/_hausdorff.cp313t-win_amd64.dll.a +0 -0
  539. scipy/spatial/_hausdorff.cp313t-win_amd64.pyd +0 -0
  540. scipy/spatial/_qhull.cp313t-win_amd64.dll.a +0 -0
  541. scipy/spatial/_qhull.cp313t-win_amd64.pyd +0 -0
  542. scipy/spatial/_voronoi.cp313t-win_amd64.dll.a +0 -0
  543. scipy/spatial/_voronoi.cp313t-win_amd64.pyd +0 -0
  544. scipy/spatial/distance.py +49 -42
  545. scipy/spatial/tests/test_distance.py +15 -1
  546. scipy/spatial/tests/test_kdtree.py +1 -0
  547. scipy/spatial/tests/test_qhull.py +7 -2
  548. scipy/spatial/transform/__init__.py +5 -3
  549. scipy/spatial/transform/_rigid_transform.cp313t-win_amd64.dll.a +0 -0
  550. scipy/spatial/transform/_rigid_transform.cp313t-win_amd64.pyd +0 -0
  551. scipy/spatial/transform/_rotation.cp313t-win_amd64.dll.a +0 -0
  552. scipy/spatial/transform/_rotation.cp313t-win_amd64.pyd +0 -0
  553. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  554. scipy/spatial/transform/tests/test_rotation.py +1213 -832
  555. scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
  556. scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
  557. scipy/special/__init__.py +1 -47
  558. scipy/special/_add_newdocs.py +34 -772
  559. scipy/special/_basic.py +22 -25
  560. scipy/special/_comb.cp313t-win_amd64.dll.a +0 -0
  561. scipy/special/_comb.cp313t-win_amd64.pyd +0 -0
  562. scipy/special/_ellip_harm_2.cp313t-win_amd64.dll.a +0 -0
  563. scipy/special/_ellip_harm_2.cp313t-win_amd64.pyd +0 -0
  564. scipy/special/_gufuncs.cp313t-win_amd64.dll.a +0 -0
  565. scipy/special/_gufuncs.cp313t-win_amd64.pyd +0 -0
  566. scipy/special/_logsumexp.py +67 -58
  567. scipy/special/_orthogonal.pyi +1 -1
  568. scipy/special/_specfun.cp313t-win_amd64.dll.a +0 -0
  569. scipy/special/_specfun.cp313t-win_amd64.pyd +0 -0
  570. scipy/special/_special_ufuncs.cp313t-win_amd64.dll.a +0 -0
  571. scipy/special/_special_ufuncs.cp313t-win_amd64.pyd +0 -0
  572. scipy/special/_spherical_bessel.py +4 -4
  573. scipy/special/_support_alternative_backends.py +212 -119
  574. scipy/special/_test_internal.cp313t-win_amd64.dll.a +0 -0
  575. scipy/special/_test_internal.cp313t-win_amd64.pyd +0 -0
  576. scipy/special/_testutils.py +4 -4
  577. scipy/special/_ufuncs.cp313t-win_amd64.dll.a +0 -0
  578. scipy/special/_ufuncs.cp313t-win_amd64.pyd +0 -0
  579. scipy/special/_ufuncs.pyi +1 -0
  580. scipy/special/_ufuncs.pyx +215 -1400
  581. scipy/special/_ufuncs_cxx.cp313t-win_amd64.dll.a +0 -0
  582. scipy/special/_ufuncs_cxx.cp313t-win_amd64.pyd +0 -0
  583. scipy/special/_ufuncs_cxx.pxd +2 -15
  584. scipy/special/_ufuncs_cxx.pyx +5 -44
  585. scipy/special/_ufuncs_cxx_defs.h +2 -16
  586. scipy/special/_ufuncs_defs.h +0 -8
  587. scipy/special/cython_special.cp313t-win_amd64.dll.a +0 -0
  588. scipy/special/cython_special.cp313t-win_amd64.pyd +0 -0
  589. scipy/special/cython_special.pxd +1 -1
  590. scipy/special/tests/_cython_examples/meson.build +10 -1
  591. scipy/special/tests/test_basic.py +153 -20
  592. scipy/special/tests/test_boost_ufuncs.py +3 -0
  593. scipy/special/tests/test_cdflib.py +35 -11
  594. scipy/special/tests/test_gammainc.py +16 -0
  595. scipy/special/tests/test_hyp2f1.py +2 -2
  596. scipy/special/tests/test_log1mexp.py +85 -0
  597. scipy/special/tests/test_logsumexp.py +206 -64
  598. scipy/special/tests/test_mpmath.py +1 -0
  599. scipy/special/tests/test_nan_inputs.py +1 -1
  600. scipy/special/tests/test_orthogonal.py +17 -18
  601. scipy/special/tests/test_sf_error.py +3 -2
  602. scipy/special/tests/test_sph_harm.py +6 -7
  603. scipy/special/tests/test_support_alternative_backends.py +211 -76
  604. scipy/stats/__init__.py +4 -1
  605. scipy/stats/_ansari_swilk_statistics.cp313t-win_amd64.dll.a +0 -0
  606. scipy/stats/_ansari_swilk_statistics.cp313t-win_amd64.pyd +0 -0
  607. scipy/stats/_axis_nan_policy.py +5 -12
  608. scipy/stats/_biasedurn.cp313t-win_amd64.dll.a +0 -0
  609. scipy/stats/_biasedurn.cp313t-win_amd64.pyd +0 -0
  610. scipy/stats/_continued_fraction.py +387 -0
  611. scipy/stats/_continuous_distns.py +277 -310
  612. scipy/stats/_correlation.py +1 -1
  613. scipy/stats/_covariance.py +6 -3
  614. scipy/stats/_discrete_distns.py +39 -32
  615. scipy/stats/_distn_infrastructure.py +39 -12
  616. scipy/stats/_distribution_infrastructure.py +900 -238
  617. scipy/stats/_entropy.py +9 -10
  618. scipy/{_lib → stats}/_finite_differences.py +1 -1
  619. scipy/stats/_hypotests.py +83 -50
  620. scipy/stats/_kde.py +53 -49
  621. scipy/stats/_ksstats.py +1 -1
  622. scipy/stats/_levy_stable/__init__.py +7 -15
  623. scipy/stats/_levy_stable/levyst.cp313t-win_amd64.dll.a +0 -0
  624. scipy/stats/_levy_stable/levyst.cp313t-win_amd64.pyd +0 -0
  625. scipy/stats/_morestats.py +118 -73
  626. scipy/stats/_mstats_basic.py +13 -17
  627. scipy/stats/_mstats_extras.py +8 -8
  628. scipy/stats/_multivariate.py +89 -113
  629. scipy/stats/_new_distributions.py +97 -20
  630. scipy/stats/_page_trend_test.py +12 -5
  631. scipy/stats/_probability_distribution.py +265 -43
  632. scipy/stats/_qmc.py +14 -9
  633. scipy/stats/_qmc_cy.cp313t-win_amd64.dll.a +0 -0
  634. scipy/stats/_qmc_cy.cp313t-win_amd64.pyd +0 -0
  635. scipy/stats/_qmvnt.py +16 -95
  636. scipy/stats/_qmvnt_cy.cp313t-win_amd64.dll.a +0 -0
  637. scipy/stats/_qmvnt_cy.cp313t-win_amd64.pyd +0 -0
  638. scipy/stats/_quantile.py +335 -0
  639. scipy/stats/_rcont/rcont.cp313t-win_amd64.dll.a +0 -0
  640. scipy/stats/_rcont/rcont.cp313t-win_amd64.pyd +0 -0
  641. scipy/stats/_resampling.py +4 -29
  642. scipy/stats/_sampling.py +1 -1
  643. scipy/stats/_sobol.cp313t-win_amd64.dll.a +0 -0
  644. scipy/stats/_sobol.cp313t-win_amd64.pyd +0 -0
  645. scipy/stats/_stats.cp313t-win_amd64.dll.a +0 -0
  646. scipy/stats/_stats.cp313t-win_amd64.pyd +0 -0
  647. scipy/stats/_stats_mstats_common.py +21 -2
  648. scipy/stats/_stats_py.py +550 -476
  649. scipy/stats/_stats_pythran.cp313t-win_amd64.dll.a +0 -0
  650. scipy/stats/_stats_pythran.cp313t-win_amd64.pyd +0 -0
  651. scipy/stats/_unuran/unuran_wrapper.cp313t-win_amd64.dll.a +0 -0
  652. scipy/stats/_unuran/unuran_wrapper.cp313t-win_amd64.pyd +0 -0
  653. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  654. scipy/stats/_variation.py +6 -8
  655. scipy/stats/_wilcoxon.py +13 -7
  656. scipy/stats/tests/common_tests.py +6 -4
  657. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  658. scipy/stats/tests/test_continued_fraction.py +173 -0
  659. scipy/stats/tests/test_continuous.py +379 -60
  660. scipy/stats/tests/test_continuous_basic.py +18 -12
  661. scipy/stats/tests/test_discrete_basic.py +14 -8
  662. scipy/stats/tests/test_discrete_distns.py +16 -16
  663. scipy/stats/tests/test_distributions.py +95 -75
  664. scipy/stats/tests/test_entropy.py +40 -48
  665. scipy/stats/tests/test_fit.py +4 -3
  666. scipy/stats/tests/test_hypotests.py +153 -24
  667. scipy/stats/tests/test_kdeoth.py +109 -41
  668. scipy/stats/tests/test_marray.py +289 -0
  669. scipy/stats/tests/test_morestats.py +79 -47
  670. scipy/stats/tests/test_mstats_basic.py +3 -3
  671. scipy/stats/tests/test_multivariate.py +434 -83
  672. scipy/stats/tests/test_qmc.py +13 -10
  673. scipy/stats/tests/test_quantile.py +199 -0
  674. scipy/stats/tests/test_rank.py +119 -112
  675. scipy/stats/tests/test_resampling.py +47 -56
  676. scipy/stats/tests/test_sampling.py +9 -4
  677. scipy/stats/tests/test_stats.py +799 -939
  678. scipy/stats/tests/test_variation.py +8 -6
  679. scipy/version.py +2 -2
  680. scipy-1.16.0rc2.dist-info/DELVEWHEEL +2 -0
  681. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/LICENSE.txt +4 -4
  682. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/METADATA +11 -11
  683. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/RECORD +685 -693
  684. scipy/_lib/array_api_extra/_funcs.py +0 -484
  685. scipy/_lib/array_api_extra/_typing.py +0 -8
  686. scipy/interpolate/_bspl.cp313t-win_amd64.dll.a +0 -0
  687. scipy/interpolate/_bspl.cp313t-win_amd64.pyd +0 -0
  688. scipy/optimize/_cobyla.cp313t-win_amd64.dll.a +0 -0
  689. scipy/optimize/_cobyla.cp313t-win_amd64.pyd +0 -0
  690. scipy/optimize/_cython_nnls.cp313t-win_amd64.dll.a +0 -0
  691. scipy/optimize/_cython_nnls.cp313t-win_amd64.pyd +0 -0
  692. scipy/optimize/_slsqp.cp313t-win_amd64.dll.a +0 -0
  693. scipy/optimize/_slsqp.cp313t-win_amd64.pyd +0 -0
  694. scipy/spatial/qhull_src/COPYING.txt +0 -38
  695. scipy/special/libsf_error_state.dll +0 -0
  696. scipy/special/libsf_error_state.dll.a +0 -0
  697. scipy/special/tests/test_log_softmax.py +0 -109
  698. scipy/special/tests/test_xsf_cuda.py +0 -114
  699. scipy/special/xsf/binom.h +0 -89
  700. scipy/special/xsf/cdflib.h +0 -100
  701. scipy/special/xsf/cephes/airy.h +0 -307
  702. scipy/special/xsf/cephes/besselpoly.h +0 -51
  703. scipy/special/xsf/cephes/beta.h +0 -257
  704. scipy/special/xsf/cephes/cbrt.h +0 -131
  705. scipy/special/xsf/cephes/chbevl.h +0 -85
  706. scipy/special/xsf/cephes/chdtr.h +0 -193
  707. scipy/special/xsf/cephes/const.h +0 -87
  708. scipy/special/xsf/cephes/ellie.h +0 -293
  709. scipy/special/xsf/cephes/ellik.h +0 -251
  710. scipy/special/xsf/cephes/ellpe.h +0 -107
  711. scipy/special/xsf/cephes/ellpk.h +0 -117
  712. scipy/special/xsf/cephes/expn.h +0 -260
  713. scipy/special/xsf/cephes/gamma.h +0 -398
  714. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  715. scipy/special/xsf/cephes/hyperg.h +0 -361
  716. scipy/special/xsf/cephes/i0.h +0 -149
  717. scipy/special/xsf/cephes/i1.h +0 -158
  718. scipy/special/xsf/cephes/igam.h +0 -421
  719. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  720. scipy/special/xsf/cephes/igami.h +0 -313
  721. scipy/special/xsf/cephes/j0.h +0 -225
  722. scipy/special/xsf/cephes/j1.h +0 -198
  723. scipy/special/xsf/cephes/jv.h +0 -715
  724. scipy/special/xsf/cephes/k0.h +0 -164
  725. scipy/special/xsf/cephes/k1.h +0 -163
  726. scipy/special/xsf/cephes/kn.h +0 -243
  727. scipy/special/xsf/cephes/lanczos.h +0 -112
  728. scipy/special/xsf/cephes/ndtr.h +0 -275
  729. scipy/special/xsf/cephes/poch.h +0 -85
  730. scipy/special/xsf/cephes/polevl.h +0 -167
  731. scipy/special/xsf/cephes/psi.h +0 -194
  732. scipy/special/xsf/cephes/rgamma.h +0 -111
  733. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  734. scipy/special/xsf/cephes/shichi.h +0 -248
  735. scipy/special/xsf/cephes/sici.h +0 -224
  736. scipy/special/xsf/cephes/sindg.h +0 -221
  737. scipy/special/xsf/cephes/tandg.h +0 -139
  738. scipy/special/xsf/cephes/trig.h +0 -58
  739. scipy/special/xsf/cephes/unity.h +0 -186
  740. scipy/special/xsf/cephes/zeta.h +0 -172
  741. scipy/special/xsf/config.h +0 -304
  742. scipy/special/xsf/digamma.h +0 -205
  743. scipy/special/xsf/error.h +0 -57
  744. scipy/special/xsf/evalpoly.h +0 -47
  745. scipy/special/xsf/expint.h +0 -266
  746. scipy/special/xsf/hyp2f1.h +0 -694
  747. scipy/special/xsf/iv_ratio.h +0 -173
  748. scipy/special/xsf/lambertw.h +0 -150
  749. scipy/special/xsf/loggamma.h +0 -163
  750. scipy/special/xsf/sici.h +0 -200
  751. scipy/special/xsf/tools.h +0 -427
  752. scipy/special/xsf/trig.h +0 -164
  753. scipy/special/xsf/wright_bessel.h +0 -843
  754. scipy/special/xsf/zlog1.h +0 -35
  755. scipy/stats/_mvn.cp313t-win_amd64.dll.a +0 -0
  756. scipy/stats/_mvn.cp313t-win_amd64.pyd +0 -0
  757. scipy-1.15.3.dist-info/DELVEWHEEL +0 -2
  758. /scipy-1.15.3-cp313-cp313t-win_amd64.whl → /scipy-1.16.0rc2-cp313-cp313t-win_amd64.whl +0 -0
  759. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/WHEEL +0 -0
@@ -237,8 +237,7 @@ class BSpline:
237
237
  if self.t.ndim != 1:
238
238
  raise ValueError("Knot vector must be one-dimensional.")
239
239
  if n < self.k + 1:
240
- raise ValueError("Need at least %d knots for degree %d" %
241
- (2*k + 2, k))
240
+ raise ValueError(f"Need at least {2*k + 2} knots for degree {k}")
242
241
  if (np.diff(self.t) < 0).any():
243
242
  raise ValueError("Knots must be in a non-decreasing order.")
244
243
  if len(np.unique(self.t[k:n+1])) < 2:
@@ -503,25 +502,33 @@ class BSpline:
503
502
  # [self.t[k], self.t[n]].
504
503
  if extrapolate == 'periodic':
505
504
  n = self.t.size - self.k - 1
506
- x = self.t[self.k] + (x - self.t[self.k]) % (self.t[n] -
507
- self.t[self.k])
505
+ x = self.t[self.k] + (x - self.t[self.k]) % (self.t[n] - self.t[self.k])
508
506
  extrapolate = False
509
507
 
510
- out = np.empty((len(x), prod(self.c.shape[1:])), dtype=self.c.dtype)
511
508
  self._ensure_c_contiguous()
512
509
 
513
- # if self.c is complex, so is `out`; cython code in _bspl.pyx expectes
514
- # floats though, so make a view---this expands the last axis, and
510
+ # if self.c is complex: the C code in _dierckxmodule.cc expects
511
+ # floats, so make a view---this expands the last axis, and
515
512
  # the view is C contiguous if the original is.
516
513
  # if c.dtype is complex of shape (n,), c.view(float).shape == (2*n,)
517
514
  # if c.dtype is complex of shape (n, m), c.view(float).shape == (n, 2*m)
518
515
 
519
- cc = self.c.view(float)
520
- if self.c.ndim == 1 and self.c.dtype.kind == 'c':
521
- cc = cc.reshape(self.c.shape[0], 2)
516
+ is_complex = self.c.dtype.kind == 'c'
517
+ if is_complex:
518
+ cc = self.c.view(float)
519
+ if self.c.ndim == 1:
520
+ cc = cc.reshape(self.c.shape[0], 2)
521
+ else:
522
+ cc = self.c
523
+
524
+ # flatten the trailing dims
525
+ cc = cc.reshape(cc.shape[0], -1)
522
526
 
523
- _dierckx.evaluate_spline(self.t, cc.reshape(cc.shape[0], -1),
524
- self.k, x, nu, extrapolate, out.view(float))
527
+ # heavy lifting: actually perform the evaluations
528
+ out = _dierckx.evaluate_spline(self.t, cc, self.k, x, nu, extrapolate)
529
+
530
+ if is_complex:
531
+ out = out.view(complex)
525
532
 
526
533
  out = out.reshape(x_shape + self.c.shape[1:])
527
534
  if self.axis != 0:
@@ -553,7 +560,7 @@ class BSpline:
553
560
 
554
561
  Returns
555
562
  -------
556
- b : BSpline object
563
+ b : `BSpline` object
557
564
  A new instance representing the derivative.
558
565
 
559
566
  See Also
@@ -580,7 +587,7 @@ class BSpline:
580
587
 
581
588
  Returns
582
589
  -------
583
- b : BSpline object
590
+ b : `BSpline` object
584
591
  A new instance representing the antiderivative.
585
592
 
586
593
  Notes
@@ -682,8 +689,6 @@ class BSpline:
682
689
  integral = _fitpack_impl.splint(a, b, self.tck)
683
690
  return np.asarray(integral * sign)
684
691
 
685
- out = np.empty((2, prod(self.c.shape[1:])), dtype=self.c.dtype)
686
-
687
692
  # Compute the antiderivative.
688
693
  c = self.c
689
694
  ct = len(self.t) - len(c)
@@ -703,8 +708,8 @@ class BSpline:
703
708
  if n_periods > 0:
704
709
  # Evaluate the difference of antiderivatives.
705
710
  x = np.asarray([ts, te], dtype=np.float64)
706
- _dierckx.evaluate_spline(ta, ca.reshape(ca.shape[0], -1),
707
- ka, x, 0, False, out)
711
+ out = _dierckx.evaluate_spline(ta, ca.reshape(ca.shape[0], -1),
712
+ ka, x, 0, False)
708
713
  integral = out[1] - out[0]
709
714
  integral *= n_periods
710
715
  else:
@@ -719,24 +724,24 @@ class BSpline:
719
724
  # over [a, te] and from xs to what is remained.
720
725
  if b <= te:
721
726
  x = np.asarray([a, b], dtype=np.float64)
722
- _dierckx.evaluate_spline(ta, ca.reshape(ca.shape[0], -1),
723
- ka, x, 0, False, out)
727
+ out = _dierckx.evaluate_spline(ta, ca.reshape(ca.shape[0], -1),
728
+ ka, x, 0, False)
724
729
  integral += out[1] - out[0]
725
730
  else:
726
731
  x = np.asarray([a, te], dtype=np.float64)
727
- _dierckx.evaluate_spline(ta, ca.reshape(ca.shape[0], -1),
728
- ka, x, 0, False, out)
732
+ out = _dierckx.evaluate_spline(ta, ca.reshape(ca.shape[0], -1),
733
+ ka, x, 0, False)
729
734
  integral += out[1] - out[0]
730
735
 
731
736
  x = np.asarray([ts, ts + b - te], dtype=np.float64)
732
- _dierckx.evaluate_spline(ta, ca.reshape(ca.shape[0], -1),
733
- ka, x, 0, False, out)
737
+ out = _dierckx.evaluate_spline(ta, ca.reshape(ca.shape[0], -1),
738
+ ka, x, 0, False)
734
739
  integral += out[1] - out[0]
735
740
  else:
736
741
  # Evaluate the difference of antiderivatives.
737
742
  x = np.asarray([a, b], dtype=np.float64)
738
- _dierckx.evaluate_spline(ta, ca.reshape(ca.shape[0], -1),
739
- ka, x, 0, extrapolate, out)
743
+ out = _dierckx.evaluate_spline(ta, ca.reshape(ca.shape[0], -1),
744
+ ka, x, 0, extrapolate)
740
745
  integral = out[1] - out[0]
741
746
 
742
747
  integral *= sign
@@ -763,7 +768,7 @@ class BSpline:
763
768
 
764
769
  Returns
765
770
  -------
766
- b : BSpline object
771
+ b : `BSpline` object
767
772
  A new instance representing the initial polynomial
768
773
  in the B-spline basis.
769
774
 
@@ -865,8 +870,8 @@ class BSpline:
865
870
 
866
871
  Returns
867
872
  -------
868
- spl : BSpline object
869
- A new BSpline object with the new knot inserted.
873
+ spl : `BSpline` object
874
+ A new `BSpline` object with the new knot inserted.
870
875
 
871
876
  Notes
872
877
  -----
@@ -1287,7 +1292,8 @@ def _make_periodic_spline(x, y, t, k, axis):
1287
1292
 
1288
1293
  Returns
1289
1294
  -------
1290
- b : a BSpline object of the degree ``k`` and with knots ``t``.
1295
+ b : `BSpline` object
1296
+ A `BSpline` object of the degree ``k`` and with knots ``t``.
1291
1297
 
1292
1298
  Notes
1293
1299
  -----
@@ -1362,7 +1368,7 @@ def _make_periodic_spline(x, y, t, k, axis):
1362
1368
 
1363
1369
  def make_interp_spline(x, y, k=3, t=None, bc_type=None, axis=0,
1364
1370
  check_finite=True):
1365
- """Compute the (coefficients of) interpolating B-spline.
1371
+ """Create an interpolating B-spline with specified degree and boundary conditions.
1366
1372
 
1367
1373
  Parameters
1368
1374
  ----------
@@ -1407,7 +1413,8 @@ def make_interp_spline(x, y, k=3, t=None, bc_type=None, axis=0,
1407
1413
 
1408
1414
  Returns
1409
1415
  -------
1410
- b : a BSpline object of the degree ``k`` and with knots ``t``.
1416
+ b : `BSpline` object
1417
+ A `BSpline` object of the degree ``k`` and with knots ``t``.
1411
1418
 
1412
1419
  See Also
1413
1420
  --------
@@ -1565,8 +1572,7 @@ def make_interp_spline(x, y, k=3, t=None, bc_type=None, axis=0,
1565
1572
  if t.ndim != 1 or np.any(t[1:] < t[:-1]):
1566
1573
  raise ValueError("Expect t to be a 1-D sorted array_like.")
1567
1574
  if t.size < x.size + k + 1:
1568
- raise ValueError('Got %d knots, need at least %d.' %
1569
- (t.size, x.size + k + 1))
1575
+ raise ValueError(f"Got {t.size} knots, need at least {x.size + k + 1}.")
1570
1576
  if (x[0] < t[k]) or (x[-1] > t[-k]):
1571
1577
  raise ValueError(f'Out of bounds w/ x = {x}.')
1572
1578
 
@@ -1632,15 +1638,13 @@ def make_interp_spline(x, y, k=3, t=None, bc_type=None, axis=0,
1632
1638
  if info > 0:
1633
1639
  raise LinAlgError("Colocation matrix is singular.")
1634
1640
  elif info < 0:
1635
- raise ValueError('illegal value in %d-th argument of internal gbsv' % -info)
1636
-
1641
+ raise ValueError(f'illegal value in {-info}-th argument of internal gbsv')
1637
1642
  c = np.ascontiguousarray(c.reshape((nt,) + y.shape[1:]))
1638
1643
  return BSpline.construct_fast(t, c, k, axis=axis)
1639
1644
 
1640
1645
 
1641
1646
  def make_lsq_spline(x, y, t, k=3, w=None, axis=0, check_finite=True, *, method="qr"):
1642
- r"""Compute the (coefficients of) an LSQ (Least SQuared) based
1643
- fitting B-spline.
1647
+ r"""Create a smoothing B-spline satisfying the Least SQuares (LSQ) criterion.
1644
1648
 
1645
1649
  The result is a linear combination
1646
1650
 
@@ -1684,7 +1688,8 @@ def make_lsq_spline(x, y, t, k=3, w=None, axis=0, check_finite=True, *, method="
1684
1688
 
1685
1689
  Returns
1686
1690
  -------
1687
- b : a BSpline object of the degree ``k`` with knots ``t``.
1691
+ b : `BSpline` object
1692
+ A `BSpline` object of the degree ``k`` with knots ``t``.
1688
1693
 
1689
1694
  See Also
1690
1695
  --------
@@ -1762,6 +1767,9 @@ def make_lsq_spline(x, y, t, k=3, w=None, axis=0, check_finite=True, *, method="
1762
1767
  axis = normalize_axis_index(axis, y.ndim)
1763
1768
 
1764
1769
  y = np.moveaxis(y, axis, 0) # now internally interp axis is zero
1770
+ if not y.flags.c_contiguous:
1771
+ # C routines in _dierckx currently require C contiguity
1772
+ y = y.copy(order='C')
1765
1773
 
1766
1774
  if x.ndim != 1:
1767
1775
  raise ValueError("Expect x to be a 1-D sequence.")
@@ -1825,8 +1833,9 @@ def make_lsq_spline(x, y, t, k=3, w=None, axis=0, check_finite=True, *, method="
1825
1833
  # have observation matrix & rhs, can solve the LSQ problem
1826
1834
  cho_decomp = cholesky_banded(ab, overwrite_ab=True, lower=lower,
1827
1835
  check_finite=check_finite)
1828
- c = cho_solve_banded((cho_decomp, lower), rhs, overwrite_b=True,
1829
- check_finite=check_finite)
1836
+ m = rhs.shape[0]
1837
+ c = cho_solve_banded((cho_decomp, lower), rhs.reshape(m, -1), overwrite_b=True,
1838
+ check_finite=check_finite).reshape(rhs.shape)
1830
1839
  elif method == "qr":
1831
1840
  _, _, c = _lsq_solve_qr(x, yy, t, k, w)
1832
1841
 
@@ -2011,7 +2020,7 @@ def _compute_optimal_gcv_parameter(X, wE, y, w):
2011
2020
  B[0] = [0.] * n
2012
2021
  return B
2013
2022
 
2014
- def _gcv(lam, X, XtWX, wE, XtE):
2023
+ def _gcv(lam, X, XtWX, wE, XtE, y):
2015
2024
  r"""
2016
2025
  Computes the generalized cross-validation criteria [1].
2017
2026
 
@@ -2096,14 +2105,29 @@ def _compute_optimal_gcv_parameter(X, wE, y, w):
2096
2105
  XtWX = compute_banded_symmetric_XT_W_Y(X, w, X)
2097
2106
  XtE = compute_banded_symmetric_XT_W_Y(X, w, wE)
2098
2107
 
2099
- def fun(lam):
2100
- return _gcv(lam, X, XtWX, wE, XtE)
2101
-
2102
- gcv_est = minimize_scalar(fun, bounds=(0, n), method='Bounded')
2103
- if gcv_est.success:
2104
- return gcv_est.x
2105
- raise ValueError(f"Unable to find minimum of the GCV "
2106
- f"function: {gcv_est.message}")
2108
+ if y.ndim == 1:
2109
+ gcv_est = minimize_scalar(
2110
+ _gcv, bounds=(0, n), method='Bounded', args=(X, XtWX, wE, XtE, y)
2111
+ )
2112
+ if gcv_est.success:
2113
+ return gcv_est.x
2114
+ raise ValueError(f"Unable to find minimum of the GCV "
2115
+ f"function: {gcv_est.message}")
2116
+ elif y.ndim == 2:
2117
+ gcv_est = np.empty(y.shape[1])
2118
+ for i in range(y.shape[1]):
2119
+ est = minimize_scalar(
2120
+ _gcv, bounds=(0, n), method='Bounded', args=(X, XtWX, wE, XtE, y[:, i])
2121
+ )
2122
+ if est.success:
2123
+ gcv_est[i] = est.x
2124
+ else:
2125
+ raise ValueError(f"Unable to find minimum of the GCV "
2126
+ f"function: {gcv_est.message}")
2127
+ return gcv_est
2128
+ else:
2129
+ # trailing dims must have been flattened already.
2130
+ raise RuntimeError("Internal error. Please report it to scipy developers.")
2107
2131
 
2108
2132
 
2109
2133
  def _coeff_of_divided_diff(x):
@@ -2139,8 +2163,10 @@ def _coeff_of_divided_diff(x):
2139
2163
  return res
2140
2164
 
2141
2165
 
2142
- def make_smoothing_spline(x, y, w=None, lam=None):
2166
+ def make_smoothing_spline(x, y, w=None, lam=None, *, axis=0):
2143
2167
  r"""
2168
+ Create a smoothing B-spline satisfying the Generalized Cross Validation (GCV) criterion.
2169
+
2144
2170
  Compute the (coefficients of) smoothing cubic spline function using
2145
2171
  ``lam`` to control the tradeoff between the amount of smoothness of the
2146
2172
  curve and its proximity to the data. In case ``lam`` is None, using the
@@ -2167,18 +2193,22 @@ def make_smoothing_spline(x, y, w=None, lam=None):
2167
2193
  ----------
2168
2194
  x : array_like, shape (n,)
2169
2195
  Abscissas. `n` must be at least 5.
2170
- y : array_like, shape (n,)
2196
+ y : array_like, shape (n, ...)
2171
2197
  Ordinates. `n` must be at least 5.
2172
2198
  w : array_like, shape (n,), optional
2173
2199
  Vector of weights. Default is ``np.ones_like(x)``.
2174
2200
  lam : float, (:math:`\lambda \geq 0`), optional
2175
2201
  Regularization parameter. If ``lam`` is None, then it is found from
2176
2202
  the GCV criteria. Default is None.
2203
+ axis : int, optional
2204
+ The data axis. Default is zero.
2205
+ The assumption is that ``y.shape[axis] == n``, and all other axes of ``y``
2206
+ are batching axes.
2177
2207
 
2178
2208
  Returns
2179
2209
  -------
2180
- func : a BSpline object.
2181
- A callable representing a spline in the B-spline basis
2210
+ func : `BSpline` object
2211
+ An object representing a spline in the B-spline basis
2182
2212
  as a solution of the problem of smoothing splines using
2183
2213
  the GCV criteria [1] in case ``lam`` is None, otherwise using the
2184
2214
  given parameter ``lam``.
@@ -2241,13 +2271,13 @@ def make_smoothing_spline(x, y, w=None, lam=None):
2241
2271
 
2242
2272
  >>> import matplotlib.pyplot as plt
2243
2273
  >>> grid = np.linspace(x[0], x[-1], 400)
2274
+ >>> plt.plot(x, y, '.')
2244
2275
  >>> plt.plot(grid, spl(grid), label='Spline')
2245
2276
  >>> plt.plot(grid, func(grid), label='Original function')
2246
- >>> plt.scatter(x, y, marker='.')
2247
2277
  >>> plt.legend(loc='best')
2248
2278
  >>> plt.show()
2249
2279
 
2250
- """
2280
+ """ # noqa:E501
2251
2281
 
2252
2282
  x = np.ascontiguousarray(x, dtype=float)
2253
2283
  y = np.ascontiguousarray(y, dtype=float)
@@ -2255,9 +2285,8 @@ def make_smoothing_spline(x, y, w=None, lam=None):
2255
2285
  if any(x[1:] - x[:-1] <= 0):
2256
2286
  raise ValueError('``x`` should be an ascending array')
2257
2287
 
2258
- if x.ndim != 1 or y.ndim != 1 or x.shape[0] != y.shape[0]:
2259
- raise ValueError('``x`` and ``y`` should be one dimensional and the'
2260
- ' same size')
2288
+ if x.ndim != 1 or x.shape[0] != y.shape[axis]:
2289
+ raise ValueError(f'``x`` should be 1D and {x.shape = } == {y.shape = }')
2261
2290
 
2262
2291
  if w is None:
2263
2292
  w = np.ones(len(x))
@@ -2272,6 +2301,15 @@ def make_smoothing_spline(x, y, w=None, lam=None):
2272
2301
  if n <= 4:
2273
2302
  raise ValueError('``x`` and ``y`` length must be at least 5')
2274
2303
 
2304
+ # Internals assume that the data axis is the zero-th axis
2305
+ axis = normalize_axis_index(axis, y.ndim)
2306
+ y = np.moveaxis(y, axis, 0)
2307
+
2308
+ # flatten the trailing axes of y to simplify further manipulations
2309
+ y_shape1 = y.shape[1:]
2310
+ if y_shape1 != ():
2311
+ y = y.reshape((n, -1))
2312
+
2275
2313
  # It is known that the solution to the stated minimization problem exists
2276
2314
  # and is a natural cubic spline with vector of knots equal to the unique
2277
2315
  # elements of ``x`` [3], so we will solve the problem in the basis of
@@ -2316,15 +2354,30 @@ def make_smoothing_spline(x, y, w=None, lam=None):
2316
2354
  raise ValueError('Regularization parameter should be non-negative')
2317
2355
 
2318
2356
  # solve the initial problem in the basis of natural splines
2319
- c = solve_banded((2, 2), X + lam * wE, y)
2357
+ if np.ndim(lam) == 0:
2358
+ c = solve_banded((2, 2), X + lam * wE, y)
2359
+ elif np.ndim(lam) == 1:
2360
+ # XXX: solve_banded does not suppport batched `ab` matrices; loop manually
2361
+ c = np.empty((n, lam.shape[0]))
2362
+ for i in range(lam.shape[0]):
2363
+ c[:, i] = solve_banded((2, 2), X + lam[i] * wE, y[:, i])
2364
+ else:
2365
+ # this should not happen, ever
2366
+ raise RuntimeError("Internal error, please report it to SciPy developers.")
2367
+ c = c.reshape((c.shape[0], *y_shape1))
2368
+
2369
+ # hack: these are c[0], c[1] etc, shape-compatible with np.r_ below
2370
+ c0, c1 = c[0:1, ...], c[1:2, ...] # c[0], c[1]
2371
+ cm0, cm1 = c[-1:-2:-1, ...], c[-2:-3:-1, ...] # c[-1], c[-2]
2372
+
2320
2373
  # move back to B-spline basis using equations (2.2.10) [4]
2321
- c_ = np.r_[c[0] * (t[5] + t[4] - 2 * t[3]) + c[1],
2322
- c[0] * (t[5] - t[3]) + c[1],
2323
- c[1: -1],
2324
- c[-1] * (t[-4] - t[-6]) + c[-2],
2325
- c[-1] * (2 * t[-4] - t[-5] - t[-6]) + c[-2]]
2374
+ c_ = np.r_[c0 * (t[5] + t[4] - 2 * t[3]) + c1,
2375
+ c0 * (t[5] - t[3]) + c1,
2376
+ c[1: -1, ...],
2377
+ cm0 * (t[-4] - t[-6]) + cm1,
2378
+ cm0 * (2 * t[-4] - t[-5] - t[-6]) + cm1]
2326
2379
 
2327
- return BSpline.construct_fast(t, c_, 3)
2380
+ return BSpline.construct_fast(t, c_, 3, axis=axis)
2328
2381
 
2329
2382
 
2330
2383
  ########################
@@ -70,7 +70,7 @@ def prepare_input(x, y, axis, dydx=None):
70
70
 
71
71
 
72
72
  class CubicHermiteSpline(PPoly):
73
- """Piecewise-cubic interpolator matching values and first derivatives.
73
+ """Piecewise cubic interpolator to fit values and first derivatives (C1 smooth).
74
74
 
75
75
  The result is represented as a `PPoly` instance.
76
76
 
@@ -115,6 +115,7 @@ class CubicHermiteSpline(PPoly):
115
115
  derivative
116
116
  antiderivative
117
117
  integrate
118
+ solve
118
119
  roots
119
120
 
120
121
  See Also
@@ -157,7 +158,7 @@ class CubicHermiteSpline(PPoly):
157
158
 
158
159
 
159
160
  class PchipInterpolator(CubicHermiteSpline):
160
- r"""PCHIP 1-D monotonic cubic interpolation.
161
+ r"""PCHIP shape-preserving interpolator (C1 smooth).
161
162
 
162
163
  ``x`` and ``y`` are arrays of values used to approximate some function f,
163
164
  with ``y = f(x)``. The interpolant uses monotonic cubic splines
@@ -185,8 +186,11 @@ class PchipInterpolator(CubicHermiteSpline):
185
186
  __call__
186
187
  derivative
187
188
  antiderivative
189
+ integrate
190
+ solve
188
191
  roots
189
192
 
193
+
190
194
  See Also
191
195
  --------
192
196
  CubicHermiteSpline : Piecewise-cubic interpolator.
@@ -327,12 +331,6 @@ def pchip_interpolate(xi, yi, x, der=0, axis=0):
327
331
  A 1-D array of real values. `yi`'s length along the interpolation
328
332
  axis must be equal to the length of `xi`. If N-D array, use axis
329
333
  parameter to select correct axis.
330
-
331
- .. deprecated:: 1.13.0
332
- Complex data is deprecated and will raise an error in
333
- SciPy 1.15.0. If you are trying to use the real components of
334
- the passed array, use ``np.real`` on `yi`.
335
-
336
334
  x : scalar or array_like
337
335
  Of length M.
338
336
  der : int or list, optional
@@ -378,8 +376,7 @@ def pchip_interpolate(xi, yi, x, der=0, axis=0):
378
376
 
379
377
 
380
378
  class Akima1DInterpolator(CubicHermiteSpline):
381
- r"""
382
- Akima interpolator
379
+ r"""Akima "visually pleasing" interpolator (C1 smooth).
383
380
 
384
381
  Fit piecewise cubic polynomials, given vectors x and y. The interpolation
385
382
  method by Akima uses a continuously differentiable sub-spline built from
@@ -404,15 +401,17 @@ class Akima1DInterpolator(CubicHermiteSpline):
404
401
  .. versionadded:: 1.13.0
405
402
 
406
403
  extrapolate : {bool, None}, optional
407
- If bool, determines whether to extrapolate to out-of-bounds points
408
- based on first and last intervals, or to return NaNs. If None,
404
+ If bool, determines whether to extrapolate to out-of-bounds points
405
+ based on first and last intervals, or to return NaNs. If None,
409
406
  ``extrapolate`` is set to False.
410
-
407
+
411
408
  Methods
412
409
  -------
413
410
  __call__
414
411
  derivative
415
412
  antiderivative
413
+ integrate
414
+ solve
416
415
  roots
417
416
 
418
417
  See Also
@@ -489,7 +488,7 @@ class Akima1DInterpolator(CubicHermiteSpline):
489
488
 
490
489
  """
491
490
 
492
- def __init__(self, x, y, axis=0, *, method: Literal["akima", "makima"]="akima",
491
+ def __init__(self, x, y, axis=0, *, method: Literal["akima", "makima"]="akima",
493
492
  extrapolate:bool | None = None):
494
493
  if method not in {"akima", "makima"}:
495
494
  raise NotImplementedError(f"`method`={method} is unsupported.")
@@ -507,37 +506,45 @@ class Akima1DInterpolator(CubicHermiteSpline):
507
506
  # Akima extrapolation historically False; parent class defaults to True.
508
507
  extrapolate = False if extrapolate is None else extrapolate
509
508
 
510
- # determine slopes between breakpoints
511
- m = np.empty((x.size + 3, ) + y.shape[1:])
512
- dx = dx[(slice(None), ) + (None, ) * (y.ndim - 1)]
513
- m[2:-2] = np.diff(y, axis=0) / dx
514
-
515
- # add two additional points on the left ...
516
- m[1] = 2. * m[2] - m[3]
517
- m[0] = 2. * m[1] - m[2]
518
- # ... and on the right
519
- m[-2] = 2. * m[-3] - m[-4]
520
- m[-1] = 2. * m[-2] - m[-3]
521
-
522
- # if m1 == m2 != m3 == m4, the slope at the breakpoint is not
523
- # defined. This is the fill value:
524
- t = .5 * (m[3:] + m[:-3])
525
- # get the denominator of the slope t
526
- dm = np.abs(np.diff(m, axis=0))
527
- if method == "makima":
528
- pm = np.abs(m[1:] + m[:-1])
529
- f1 = dm[2:] + 0.5 * pm[2:]
530
- f2 = dm[:-2] + 0.5 * pm[:-2]
509
+ if y.shape[0] == 2:
510
+ # edge case: only have two points, use linear interpolation
511
+ xp = x.reshape((x.shape[0],) + (1,)*(y.ndim-1))
512
+ hk = xp[1:] - xp[:-1]
513
+ mk = (y[1:] - y[:-1]) / hk
514
+ t = np.zeros_like(y)
515
+ t[...] = mk
531
516
  else:
532
- f1 = dm[2:]
533
- f2 = dm[:-2]
534
- f12 = f1 + f2
535
- # These are the mask of where the slope at breakpoint is defined:
536
- ind = np.nonzero(f12 > 1e-9 * np.max(f12, initial=-np.inf))
537
- x_ind, y_ind = ind[0], ind[1:]
538
- # Set the slope at breakpoint
539
- t[ind] = (f1[ind] * m[(x_ind + 1,) + y_ind] +
540
- f2[ind] * m[(x_ind + 2,) + y_ind]) / f12[ind]
517
+ # determine slopes between breakpoints
518
+ m = np.empty((x.size + 3, ) + y.shape[1:])
519
+ dx = dx[(slice(None), ) + (None, ) * (y.ndim - 1)]
520
+ m[2:-2] = np.diff(y, axis=0) / dx
521
+
522
+ # add two additional points on the left ...
523
+ m[1] = 2. * m[2] - m[3]
524
+ m[0] = 2. * m[1] - m[2]
525
+ # ... and on the right
526
+ m[-2] = 2. * m[-3] - m[-4]
527
+ m[-1] = 2. * m[-2] - m[-3]
528
+
529
+ # if m1 == m2 != m3 == m4, the slope at the breakpoint is not
530
+ # defined. This is the fill value:
531
+ t = .5 * (m[3:] + m[:-3])
532
+ # get the denominator of the slope t
533
+ dm = np.abs(np.diff(m, axis=0))
534
+ if method == "makima":
535
+ pm = np.abs(m[1:] + m[:-1])
536
+ f1 = dm[2:] + 0.5 * pm[2:]
537
+ f2 = dm[:-2] + 0.5 * pm[:-2]
538
+ else:
539
+ f1 = dm[2:]
540
+ f2 = dm[:-2]
541
+ f12 = f1 + f2
542
+ # These are the mask of where the slope at breakpoint is defined:
543
+ ind = np.nonzero(f12 > 1e-9 * np.max(f12, initial=-np.inf))
544
+ x_ind, y_ind = ind[0], ind[1:]
545
+ # Set the slope at breakpoint
546
+ t[ind] = (f1[ind] * m[(x_ind + 1,) + y_ind] +
547
+ f2[ind] * m[(x_ind + 2,) + y_ind]) / f12[ind]
541
548
 
542
549
  super().__init__(x, y, t, axis=0, extrapolate=extrapolate)
543
550
  self.axis = axis
@@ -560,7 +567,7 @@ class Akima1DInterpolator(CubicHermiteSpline):
560
567
 
561
568
 
562
569
  class CubicSpline(CubicHermiteSpline):
563
- """Cubic spline data interpolator.
570
+ """Piecewise cubic interpolator to fit values (C2 smooth).
564
571
 
565
572
  Interpolate data with a piecewise cubic polynomial which is twice
566
573
  continuously differentiable [1]_. The result is represented as a `PPoly`
@@ -636,6 +643,7 @@ class CubicSpline(CubicHermiteSpline):
636
643
  derivative
637
644
  antiderivative
638
645
  integrate
646
+ solve
639
647
  roots
640
648
 
641
649
  See Also
@@ -774,8 +782,9 @@ class CubicSpline(CubicHermiteSpline):
774
782
  b[1] = 3 * (dxr[0] * slope[1] + dxr[1] * slope[0])
775
783
  b[2] = 2 * slope[1]
776
784
 
777
- s = solve(A, b, overwrite_a=True, overwrite_b=True,
778
- check_finite=False)
785
+ m = b.shape[0]
786
+ s = solve(A, b.reshape(m, -1), overwrite_a=True, overwrite_b=True,
787
+ check_finite=False).reshape(b.shape)
779
788
  elif n == 3 and bc[0] == 'periodic':
780
789
  # In case when number of points is 3 we compute the derivatives
781
790
  # manually
@@ -835,11 +844,15 @@ class CubicSpline(CubicHermiteSpline):
835
844
  b2[-1] = -a_m2_m1
836
845
 
837
846
  # s1 and s2 are the solutions of (n-2, n-2) system
838
- s1 = solve_banded((1, 1), Ac, b1, overwrite_ab=False,
847
+ m = b1.shape[0]
848
+ s1 = solve_banded((1, 1), Ac, b1.reshape(m, -1), overwrite_ab=False,
839
849
  overwrite_b=False, check_finite=False)
850
+ s1 = s1.reshape(b1.shape)
840
851
 
841
- s2 = solve_banded((1, 1), Ac, b2, overwrite_ab=False,
852
+ m = b2.shape[0]
853
+ s2 = solve_banded((1, 1), Ac, b2.reshape(m, -1), overwrite_ab=False,
842
854
  overwrite_b=False, check_finite=False)
855
+ s2 = s2.reshape(b2.shape)
843
856
 
844
857
  # computing the s[n-2] solution:
845
858
  s_m1 = ((b[-1] - a_m1_0 * s1[0] - a_m1_m2 * s1[-1]) /
@@ -881,8 +894,10 @@ class CubicSpline(CubicHermiteSpline):
881
894
  A[-1, -2] = dx[-1]
882
895
  b[-1] = 0.5 * bc_end[1] * dx[-1]**2 + 3 * (y[-1] - y[-2])
883
896
 
884
- s = solve_banded((1, 1), A, b, overwrite_ab=True,
897
+ m = b.shape[0]
898
+ s = solve_banded((1, 1), A, b.reshape(m, -1), overwrite_ab=True,
885
899
  overwrite_b=True, check_finite=False)
900
+ s = s.reshape(b.shape)
886
901
 
887
902
  super().__init__(x, y, s, axis=0, extrapolate=extrapolate)
888
903
  self.axis = axis