scipy 1.15.3__cp311-cp311-win_amd64.whl → 1.16.0rc1__cp311-cp311-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 (758) hide show
  1. scipy/__config__.py +7 -7
  2. scipy/__init__.py +3 -6
  3. scipy/_cyutility.cp311-win_amd64.dll.a +0 -0
  4. scipy/_cyutility.cp311-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.cp311-win_amd64.dll.a +0 -0
  9. scipy/_lib/_ccallback_c.cp311-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.cp311-win_amd64.dll.a +0 -0
  13. scipy/_lib/_fpumode.cp311-win_amd64.pyd +0 -0
  14. scipy/_lib/_sparse.py +41 -0
  15. scipy/_lib/_test_ccallback.cp311-win_amd64.dll.a +0 -0
  16. scipy/_lib/_test_ccallback.cp311-win_amd64.pyd +0 -0
  17. scipy/_lib/_test_deprecation_call.cp311-win_amd64.dll.a +0 -0
  18. scipy/_lib/_test_deprecation_call.cp311-win_amd64.pyd +0 -0
  19. scipy/_lib/_test_deprecation_def.cp311-win_amd64.dll.a +0 -0
  20. scipy/_lib/_test_deprecation_def.cp311-win_amd64.pyd +0 -0
  21. scipy/_lib/_testutils.py +6 -2
  22. scipy/_lib/_uarray/_uarray.cp311-win_amd64.dll.a +0 -0
  23. scipy/_lib/_uarray/_uarray.cp311-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.cp311-win_amd64.dll.a +0 -0
  72. scipy/_lib/messagestream.cp311-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.cp311-win_amd64.dll.a +0 -0
  105. scipy/cluster/_hierarchy.cp311-win_amd64.pyd +0 -0
  106. scipy/cluster/_optimal_leaf_ordering.cp311-win_amd64.dll.a +0 -0
  107. scipy/cluster/_optimal_leaf_ordering.cp311-win_amd64.pyd +0 -0
  108. scipy/cluster/_vq.cp311-win_amd64.dll.a +0 -0
  109. scipy/cluster/_vq.cp311-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.cp311-win_amd64.dll.a +0 -0
  127. scipy/fft/_pocketfft/pypocketfft.cp311-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.cp311-win_amd64.dll.a +0 -0
  136. scipy/fftpack/convolve.cp311-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.cp311-win_amd64.dll.a +0 -0
  142. scipy/integrate/_dop.cp311-win_amd64.pyd +0 -0
  143. scipy/integrate/_lsoda.cp311-win_amd64.dll.a +0 -0
  144. scipy/integrate/_lsoda.cp311-win_amd64.pyd +0 -0
  145. scipy/integrate/_ode.py +9 -2
  146. scipy/integrate/_odepack.cp311-win_amd64.dll.a +0 -0
  147. scipy/integrate/_odepack.cp311-win_amd64.pyd +0 -0
  148. scipy/integrate/_quad_vec.py +21 -29
  149. scipy/integrate/_quadpack.cp311-win_amd64.dll.a +0 -0
  150. scipy/integrate/_quadpack.cp311-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.cp311-win_amd64.dll.a +0 -0
  156. scipy/integrate/_test_multivariate.cp311-win_amd64.pyd +0 -0
  157. scipy/integrate/_test_odeint_banded.cp311-win_amd64.dll.a +0 -0
  158. scipy/integrate/_test_odeint_banded.cp311-win_amd64.pyd +0 -0
  159. scipy/integrate/_vode.cp311-win_amd64.dll.a +0 -0
  160. scipy/integrate/_vode.cp311-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.cp311-win_amd64.dll.a +0 -0
  171. scipy/interpolate/_dfitpack.cp311-win_amd64.pyd +0 -0
  172. scipy/interpolate/_dierckx.cp311-win_amd64.dll.a +0 -0
  173. scipy/interpolate/_dierckx.cp311-win_amd64.pyd +0 -0
  174. scipy/interpolate/_fitpack.cp311-win_amd64.dll.a +0 -0
  175. scipy/interpolate/_fitpack.cp311-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.cp311-win_amd64.dll.a +0 -0
  180. scipy/interpolate/_interpnd.cp311-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.cp311-win_amd64.dll.a +0 -0
  186. scipy/interpolate/_ppoly.cp311-win_amd64.pyd +0 -0
  187. scipy/interpolate/_rbf.py +2 -2
  188. scipy/interpolate/_rbfinterp.py +1 -1
  189. scipy/interpolate/_rbfinterp_pythran.cp311-win_amd64.dll.a +0 -0
  190. scipy/interpolate/_rbfinterp_pythran.cp311-win_amd64.pyd +0 -0
  191. scipy/interpolate/_rgi.py +31 -26
  192. scipy/interpolate/_rgi_cython.cp311-win_amd64.dll.a +0 -0
  193. scipy/interpolate/_rgi_cython.cp311-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.cp311-win_amd64.dll.a +0 -0
  204. scipy/io/_fast_matrix_market/_fmm_core.cp311-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.cp311-win_amd64.dll.a +0 -0
  210. scipy/io/_test_fortran.cp311-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.cp311-win_amd64.dll.a +0 -0
  216. scipy/io/matlab/_mio5_utils.cp311-win_amd64.pyd +0 -0
  217. scipy/io/matlab/_mio_utils.cp311-win_amd64.dll.a +0 -0
  218. scipy/io/matlab/_mio_utils.cp311-win_amd64.pyd +0 -0
  219. scipy/io/matlab/_miobase.py +4 -1
  220. scipy/io/matlab/_streams.cp311-win_amd64.dll.a +0 -0
  221. scipy/io/matlab/_streams.cp311-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.cp311-win_amd64.dll.a +0 -0
  229. scipy/linalg/_cythonized_array_utils.cp311-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.cp311-win_amd64.dll.a +0 -0
  234. scipy/linalg/_decomp_interpolative.cp311-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.cp311-win_amd64.dll.a +0 -0
  238. scipy/linalg/_decomp_lu_cython.cp311-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.cp311-win_amd64.dll.a +0 -0
  245. scipy/linalg/_decomp_update.cp311-win_amd64.pyd +0 -0
  246. scipy/linalg/_expm_frechet.py +4 -0
  247. scipy/linalg/_fblas.cp311-win_amd64.dll.a +0 -0
  248. scipy/linalg/_fblas.cp311-win_amd64.pyd +0 -0
  249. scipy/linalg/_flapack.cp311-win_amd64.dll.a +0 -0
  250. scipy/linalg/_flapack.cp311-win_amd64.pyd +0 -0
  251. scipy/linalg/_linalg_pythran.cp311-win_amd64.dll.a +0 -0
  252. scipy/linalg/_linalg_pythran.cp311-win_amd64.pyd +0 -0
  253. scipy/linalg/_matfuncs.py +187 -4
  254. scipy/linalg/_matfuncs_expm.cp311-win_amd64.dll.a +0 -0
  255. scipy/linalg/_matfuncs_expm.cp311-win_amd64.pyd +0 -0
  256. scipy/linalg/_matfuncs_schur_sqrtm.cp311-win_amd64.dll.a +0 -0
  257. scipy/linalg/_matfuncs_schur_sqrtm.cp311-win_amd64.pyd +0 -0
  258. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  259. scipy/linalg/_matfuncs_sqrtm_triu.cp311-win_amd64.dll.a +0 -0
  260. scipy/linalg/_matfuncs_sqrtm_triu.cp311-win_amd64.pyd +0 -0
  261. scipy/linalg/_procrustes.py +2 -0
  262. scipy/linalg/_sketches.py +17 -6
  263. scipy/linalg/_solve_toeplitz.cp311-win_amd64.dll.a +0 -0
  264. scipy/linalg/_solve_toeplitz.cp311-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.cp311-win_amd64.dll.a +0 -0
  268. scipy/linalg/cython_blas.cp311-win_amd64.pyd +0 -0
  269. scipy/linalg/cython_lapack.cp311-win_amd64.dll.a +0 -0
  270. scipy/linalg/cython_lapack.cp311-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.cp311-win_amd64.dll.a +0 -0
  286. scipy/ndimage/_ctest.cp311-win_amd64.pyd +0 -0
  287. scipy/ndimage/_cytest.cp311-win_amd64.dll.a +0 -0
  288. scipy/ndimage/_cytest.cp311-win_amd64.pyd +0 -0
  289. scipy/ndimage/_delegators.py +8 -2
  290. scipy/ndimage/_filters.py +433 -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.cp311-win_amd64.dll.a +0 -0
  295. scipy/ndimage/_nd_image.cp311-win_amd64.pyd +0 -0
  296. scipy/ndimage/_ni_docstrings.py +5 -1
  297. scipy/ndimage/_ni_label.cp311-win_amd64.dll.a +0 -0
  298. scipy/ndimage/_ni_label.cp311-win_amd64.pyd +0 -0
  299. scipy/ndimage/_ni_support.py +1 -5
  300. scipy/ndimage/_rank_filter_1d.cp311-win_amd64.dll.a +0 -0
  301. scipy/ndimage/_rank_filter_1d.cp311-win_amd64.pyd +0 -0
  302. scipy/ndimage/_support_alternative_backends.py +18 -6
  303. scipy/ndimage/tests/test_filters.py +337 -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.cp311-win_amd64.dll.a +0 -0
  310. scipy/odr/__odrpack.cp311-win_amd64.pyd +0 -0
  311. scipy/optimize/_basinhopping.py +13 -7
  312. scipy/optimize/_bglu_dense.cp311-win_amd64.dll.a +0 -0
  313. scipy/optimize/_bglu_dense.cp311-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.cp311-win_amd64.dll.a +0 -0
  321. scipy/optimize/_direct.cp311-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.cp311-win_amd64.dll.a +0 -0
  325. scipy/optimize/_group_columns.cp311-win_amd64.pyd +0 -0
  326. scipy/optimize/_highspy/_core.cp311-win_amd64.dll.a +0 -0
  327. scipy/optimize/_highspy/_core.cp311-win_amd64.pyd +0 -0
  328. scipy/optimize/_highspy/_highs_options.cp311-win_amd64.dll.a +0 -0
  329. scipy/optimize/_highspy/_highs_options.cp311-win_amd64.pyd +0 -0
  330. scipy/optimize/_lbfgsb.cp311-win_amd64.dll.a +0 -0
  331. scipy/optimize/_lbfgsb.cp311-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.cp311-win_amd64.dll.a +0 -0
  338. scipy/optimize/_lsap.cp311-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.cp311-win_amd64.dll.a +0 -0
  342. scipy/optimize/_lsq/givens_elimination.cp311-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.cp311-win_amd64.dll.a +0 -0
  349. scipy/optimize/_minpack.cp311-win_amd64.pyd +0 -0
  350. scipy/optimize/_minpack_py.py +21 -14
  351. scipy/optimize/_moduleTNC.cp311-win_amd64.dll.a +0 -0
  352. scipy/optimize/_moduleTNC.cp311-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.cp311-win_amd64.dll.a +0 -0
  358. scipy/optimize/_pava_pybind.cp311-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.cp311-win_amd64.dll.a +0 -0
  365. scipy/optimize/_slsqplib.cp311-win_amd64.pyd +0 -0
  366. scipy/optimize/_spectral.py +1 -1
  367. scipy/optimize/_tnc.py +8 -1
  368. scipy/optimize/_trlib/_trlib.cp311-win_amd64.dll.a +0 -0
  369. scipy/optimize/_trlib/_trlib.cp311-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.cp311-win_amd64.dll.a +0 -0
  381. scipy/optimize/_zeros.cp311-win_amd64.pyd +0 -0
  382. scipy/optimize/_zeros_py.py +97 -17
  383. scipy/optimize/cython_optimize/_zeros.cp311-win_amd64.dll.a +0 -0
  384. scipy/optimize/cython_optimize/_zeros.cp311-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 +5 -5
  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.cp311-win_amd64.dll.a +0 -0
  416. scipy/signal/_max_len_seq_inner.cp311-win_amd64.pyd +0 -0
  417. scipy/signal/_peak_finding_utils.cp311-win_amd64.dll.a +0 -0
  418. scipy/signal/_peak_finding_utils.cp311-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.cp311-win_amd64.dll.a +0 -0
  424. scipy/signal/_sigtools.cp311-win_amd64.pyd +0 -0
  425. scipy/signal/_sosfilt.cp311-win_amd64.dll.a +0 -0
  426. scipy/signal/_sosfilt.cp311-win_amd64.pyd +0 -0
  427. scipy/signal/_spectral_py.py +221 -50
  428. scipy/signal/_spline.cp311-win_amd64.dll.a +0 -0
  429. scipy/signal/_spline.cp311-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.cp311-win_amd64.dll.a +0 -0
  434. scipy/signal/_upfirdn_apply.cp311-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 +19 -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.cp311-win_amd64.dll.a +0 -0
  461. scipy/sparse/_csparsetools.cp311-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.cp311-win_amd64.dll.a +0 -0
  469. scipy/sparse/_sparsetools.cp311-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.cp311-win_amd64.dll.a +0 -0
  478. scipy/sparse/csgraph/_flow.cp311-win_amd64.pyd +0 -0
  479. scipy/sparse/csgraph/_matching.cp311-win_amd64.dll.a +0 -0
  480. scipy/sparse/csgraph/_matching.cp311-win_amd64.pyd +0 -0
  481. scipy/sparse/csgraph/_min_spanning_tree.cp311-win_amd64.dll.a +0 -0
  482. scipy/sparse/csgraph/_min_spanning_tree.cp311-win_amd64.pyd +0 -0
  483. scipy/sparse/csgraph/_reordering.cp311-win_amd64.dll.a +0 -0
  484. scipy/sparse/csgraph/_reordering.cp311-win_amd64.pyd +0 -0
  485. scipy/sparse/csgraph/_shortest_path.cp311-win_amd64.dll.a +0 -0
  486. scipy/sparse/csgraph/_shortest_path.cp311-win_amd64.pyd +0 -0
  487. scipy/sparse/csgraph/_tools.cp311-win_amd64.dll.a +0 -0
  488. scipy/sparse/csgraph/_tools.cp311-win_amd64.pyd +0 -0
  489. scipy/sparse/csgraph/_traversal.cp311-win_amd64.dll.a +0 -0
  490. scipy/sparse/csgraph/_traversal.cp311-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.cp311-win_amd64.dll.a +0 -0
  499. scipy/sparse/linalg/_dsolve/_superlu.cp311-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.cp311-win_amd64.dll.a +0 -0
  503. scipy/sparse/linalg/_eigen/arpack/_arpack.cp311-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.cp311-win_amd64.dll.a +0 -0
  516. scipy/sparse/linalg/_propack/_cpropack.cp311-win_amd64.pyd +0 -0
  517. scipy/sparse/linalg/_propack/_dpropack.cp311-win_amd64.dll.a +0 -0
  518. scipy/sparse/linalg/_propack/_dpropack.cp311-win_amd64.pyd +0 -0
  519. scipy/sparse/linalg/_propack/_spropack.cp311-win_amd64.dll.a +0 -0
  520. scipy/sparse/linalg/_propack/_spropack.cp311-win_amd64.pyd +0 -0
  521. scipy/sparse/linalg/_propack/_zpropack.cp311-win_amd64.dll.a +0 -0
  522. scipy/sparse/linalg/_propack/_zpropack.cp311-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 +207 -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.cp311-win_amd64.dll.a +0 -0
  533. scipy/spatial/_ckdtree.cp311-win_amd64.pyd +0 -0
  534. scipy/spatial/_distance_pybind.cp311-win_amd64.dll.a +0 -0
  535. scipy/spatial/_distance_pybind.cp311-win_amd64.pyd +0 -0
  536. scipy/spatial/_distance_wrap.cp311-win_amd64.dll.a +0 -0
  537. scipy/spatial/_distance_wrap.cp311-win_amd64.pyd +0 -0
  538. scipy/spatial/_hausdorff.cp311-win_amd64.dll.a +0 -0
  539. scipy/spatial/_hausdorff.cp311-win_amd64.pyd +0 -0
  540. scipy/spatial/_qhull.cp311-win_amd64.dll.a +0 -0
  541. scipy/spatial/_qhull.cp311-win_amd64.pyd +0 -0
  542. scipy/spatial/_voronoi.cp311-win_amd64.dll.a +0 -0
  543. scipy/spatial/_voronoi.cp311-win_amd64.pyd +0 -0
  544. scipy/spatial/distance.py +49 -42
  545. scipy/spatial/tests/test_distance.py +3 -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.cp311-win_amd64.dll.a +0 -0
  550. scipy/spatial/transform/_rigid_transform.cp311-win_amd64.pyd +0 -0
  551. scipy/spatial/transform/_rotation.cp311-win_amd64.dll.a +0 -0
  552. scipy/spatial/transform/_rotation.cp311-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.cp311-win_amd64.dll.a +0 -0
  561. scipy/special/_comb.cp311-win_amd64.pyd +0 -0
  562. scipy/special/_ellip_harm_2.cp311-win_amd64.dll.a +0 -0
  563. scipy/special/_ellip_harm_2.cp311-win_amd64.pyd +0 -0
  564. scipy/special/_gufuncs.cp311-win_amd64.dll.a +0 -0
  565. scipy/special/_gufuncs.cp311-win_amd64.pyd +0 -0
  566. scipy/special/_logsumexp.py +67 -58
  567. scipy/special/_orthogonal.pyi +1 -1
  568. scipy/special/_specfun.cp311-win_amd64.dll.a +0 -0
  569. scipy/special/_specfun.cp311-win_amd64.pyd +0 -0
  570. scipy/special/_special_ufuncs.cp311-win_amd64.dll.a +0 -0
  571. scipy/special/_special_ufuncs.cp311-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.cp311-win_amd64.dll.a +0 -0
  575. scipy/special/_test_internal.cp311-win_amd64.pyd +0 -0
  576. scipy/special/_testutils.py +4 -4
  577. scipy/special/_ufuncs.cp311-win_amd64.dll.a +0 -0
  578. scipy/special/_ufuncs.cp311-win_amd64.pyd +0 -0
  579. scipy/special/_ufuncs.pyi +1 -0
  580. scipy/special/_ufuncs.pyx +215 -1400
  581. scipy/special/_ufuncs_cxx.cp311-win_amd64.dll.a +0 -0
  582. scipy/special/_ufuncs_cxx.cp311-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.cp311-win_amd64.dll.a +0 -0
  588. scipy/special/cython_special.cp311-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.cp311-win_amd64.dll.a +0 -0
  606. scipy/stats/_ansari_swilk_statistics.cp311-win_amd64.pyd +0 -0
  607. scipy/stats/_axis_nan_policy.py +4 -3
  608. scipy/stats/_biasedurn.cp311-win_amd64.dll.a +0 -0
  609. scipy/stats/_biasedurn.cp311-win_amd64.pyd +0 -0
  610. scipy/stats/_continued_fraction.py +387 -0
  611. scipy/stats/_continuous_distns.py +277 -310
  612. scipy/stats/_covariance.py +6 -3
  613. scipy/stats/_discrete_distns.py +39 -32
  614. scipy/stats/_distn_infrastructure.py +39 -12
  615. scipy/stats/_distribution_infrastructure.py +900 -238
  616. scipy/stats/_entropy.py +7 -8
  617. scipy/{_lib → stats}/_finite_differences.py +1 -1
  618. scipy/stats/_hypotests.py +82 -49
  619. scipy/stats/_kde.py +53 -49
  620. scipy/stats/_ksstats.py +1 -1
  621. scipy/stats/_levy_stable/__init__.py +7 -15
  622. scipy/stats/_levy_stable/levyst.cp311-win_amd64.dll.a +0 -0
  623. scipy/stats/_levy_stable/levyst.cp311-win_amd64.pyd +0 -0
  624. scipy/stats/_morestats.py +112 -67
  625. scipy/stats/_mstats_basic.py +13 -17
  626. scipy/stats/_mstats_extras.py +8 -8
  627. scipy/stats/_multivariate.py +89 -113
  628. scipy/stats/_new_distributions.py +97 -20
  629. scipy/stats/_page_trend_test.py +12 -5
  630. scipy/stats/_probability_distribution.py +265 -43
  631. scipy/stats/_qmc.py +14 -9
  632. scipy/stats/_qmc_cy.cp311-win_amd64.dll.a +0 -0
  633. scipy/stats/_qmc_cy.cp311-win_amd64.pyd +0 -0
  634. scipy/stats/_qmvnt.py +16 -95
  635. scipy/stats/_qmvnt_cy.cp311-win_amd64.dll.a +0 -0
  636. scipy/stats/_qmvnt_cy.cp311-win_amd64.pyd +0 -0
  637. scipy/stats/_quantile.py +335 -0
  638. scipy/stats/_rcont/rcont.cp311-win_amd64.dll.a +0 -0
  639. scipy/stats/_rcont/rcont.cp311-win_amd64.pyd +0 -0
  640. scipy/stats/_resampling.py +4 -29
  641. scipy/stats/_sampling.py +1 -1
  642. scipy/stats/_sobol.cp311-win_amd64.dll.a +0 -0
  643. scipy/stats/_sobol.cp311-win_amd64.pyd +0 -0
  644. scipy/stats/_stats.cp311-win_amd64.dll.a +0 -0
  645. scipy/stats/_stats.cp311-win_amd64.pyd +0 -0
  646. scipy/stats/_stats_mstats_common.py +19 -2
  647. scipy/stats/_stats_py.py +534 -460
  648. scipy/stats/_stats_pythran.cp311-win_amd64.dll.a +0 -0
  649. scipy/stats/_stats_pythran.cp311-win_amd64.pyd +0 -0
  650. scipy/stats/_unuran/unuran_wrapper.cp311-win_amd64.dll.a +0 -0
  651. scipy/stats/_unuran/unuran_wrapper.cp311-win_amd64.pyd +0 -0
  652. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  653. scipy/stats/_variation.py +5 -7
  654. scipy/stats/_wilcoxon.py +13 -7
  655. scipy/stats/tests/common_tests.py +6 -4
  656. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  657. scipy/stats/tests/test_continued_fraction.py +173 -0
  658. scipy/stats/tests/test_continuous.py +379 -60
  659. scipy/stats/tests/test_continuous_basic.py +18 -12
  660. scipy/stats/tests/test_discrete_basic.py +14 -8
  661. scipy/stats/tests/test_discrete_distns.py +16 -16
  662. scipy/stats/tests/test_distributions.py +95 -75
  663. scipy/stats/tests/test_entropy.py +40 -48
  664. scipy/stats/tests/test_fit.py +4 -3
  665. scipy/stats/tests/test_hypotests.py +153 -24
  666. scipy/stats/tests/test_kdeoth.py +109 -41
  667. scipy/stats/tests/test_marray.py +289 -0
  668. scipy/stats/tests/test_morestats.py +79 -47
  669. scipy/stats/tests/test_mstats_basic.py +3 -3
  670. scipy/stats/tests/test_multivariate.py +434 -83
  671. scipy/stats/tests/test_qmc.py +13 -10
  672. scipy/stats/tests/test_quantile.py +199 -0
  673. scipy/stats/tests/test_rank.py +119 -112
  674. scipy/stats/tests/test_resampling.py +47 -56
  675. scipy/stats/tests/test_sampling.py +9 -4
  676. scipy/stats/tests/test_stats.py +799 -939
  677. scipy/stats/tests/test_variation.py +8 -6
  678. scipy/version.py +2 -2
  679. scipy-1.16.0rc1.dist-info/DELVEWHEEL +2 -0
  680. {scipy-1.15.3.dist-info → scipy-1.16.0rc1.dist-info}/LICENSE.txt +1 -1
  681. {scipy-1.15.3.dist-info → scipy-1.16.0rc1.dist-info}/METADATA +8 -8
  682. {scipy-1.15.3.dist-info → scipy-1.16.0rc1.dist-info}/RECORD +684 -692
  683. scipy/_lib/array_api_extra/_funcs.py +0 -484
  684. scipy/_lib/array_api_extra/_typing.py +0 -8
  685. scipy/interpolate/_bspl.cp311-win_amd64.dll.a +0 -0
  686. scipy/interpolate/_bspl.cp311-win_amd64.pyd +0 -0
  687. scipy/optimize/_cobyla.cp311-win_amd64.dll.a +0 -0
  688. scipy/optimize/_cobyla.cp311-win_amd64.pyd +0 -0
  689. scipy/optimize/_cython_nnls.cp311-win_amd64.dll.a +0 -0
  690. scipy/optimize/_cython_nnls.cp311-win_amd64.pyd +0 -0
  691. scipy/optimize/_slsqp.cp311-win_amd64.dll.a +0 -0
  692. scipy/optimize/_slsqp.cp311-win_amd64.pyd +0 -0
  693. scipy/spatial/qhull_src/COPYING.txt +0 -38
  694. scipy/special/libsf_error_state.dll +0 -0
  695. scipy/special/libsf_error_state.dll.a +0 -0
  696. scipy/special/tests/test_log_softmax.py +0 -109
  697. scipy/special/tests/test_xsf_cuda.py +0 -114
  698. scipy/special/xsf/binom.h +0 -89
  699. scipy/special/xsf/cdflib.h +0 -100
  700. scipy/special/xsf/cephes/airy.h +0 -307
  701. scipy/special/xsf/cephes/besselpoly.h +0 -51
  702. scipy/special/xsf/cephes/beta.h +0 -257
  703. scipy/special/xsf/cephes/cbrt.h +0 -131
  704. scipy/special/xsf/cephes/chbevl.h +0 -85
  705. scipy/special/xsf/cephes/chdtr.h +0 -193
  706. scipy/special/xsf/cephes/const.h +0 -87
  707. scipy/special/xsf/cephes/ellie.h +0 -293
  708. scipy/special/xsf/cephes/ellik.h +0 -251
  709. scipy/special/xsf/cephes/ellpe.h +0 -107
  710. scipy/special/xsf/cephes/ellpk.h +0 -117
  711. scipy/special/xsf/cephes/expn.h +0 -260
  712. scipy/special/xsf/cephes/gamma.h +0 -398
  713. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  714. scipy/special/xsf/cephes/hyperg.h +0 -361
  715. scipy/special/xsf/cephes/i0.h +0 -149
  716. scipy/special/xsf/cephes/i1.h +0 -158
  717. scipy/special/xsf/cephes/igam.h +0 -421
  718. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  719. scipy/special/xsf/cephes/igami.h +0 -313
  720. scipy/special/xsf/cephes/j0.h +0 -225
  721. scipy/special/xsf/cephes/j1.h +0 -198
  722. scipy/special/xsf/cephes/jv.h +0 -715
  723. scipy/special/xsf/cephes/k0.h +0 -164
  724. scipy/special/xsf/cephes/k1.h +0 -163
  725. scipy/special/xsf/cephes/kn.h +0 -243
  726. scipy/special/xsf/cephes/lanczos.h +0 -112
  727. scipy/special/xsf/cephes/ndtr.h +0 -275
  728. scipy/special/xsf/cephes/poch.h +0 -85
  729. scipy/special/xsf/cephes/polevl.h +0 -167
  730. scipy/special/xsf/cephes/psi.h +0 -194
  731. scipy/special/xsf/cephes/rgamma.h +0 -111
  732. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  733. scipy/special/xsf/cephes/shichi.h +0 -248
  734. scipy/special/xsf/cephes/sici.h +0 -224
  735. scipy/special/xsf/cephes/sindg.h +0 -221
  736. scipy/special/xsf/cephes/tandg.h +0 -139
  737. scipy/special/xsf/cephes/trig.h +0 -58
  738. scipy/special/xsf/cephes/unity.h +0 -186
  739. scipy/special/xsf/cephes/zeta.h +0 -172
  740. scipy/special/xsf/config.h +0 -304
  741. scipy/special/xsf/digamma.h +0 -205
  742. scipy/special/xsf/error.h +0 -57
  743. scipy/special/xsf/evalpoly.h +0 -47
  744. scipy/special/xsf/expint.h +0 -266
  745. scipy/special/xsf/hyp2f1.h +0 -694
  746. scipy/special/xsf/iv_ratio.h +0 -173
  747. scipy/special/xsf/lambertw.h +0 -150
  748. scipy/special/xsf/loggamma.h +0 -163
  749. scipy/special/xsf/sici.h +0 -200
  750. scipy/special/xsf/tools.h +0 -427
  751. scipy/special/xsf/trig.h +0 -164
  752. scipy/special/xsf/wright_bessel.h +0 -843
  753. scipy/special/xsf/zlog1.h +0 -35
  754. scipy/stats/_mvn.cp311-win_amd64.dll.a +0 -0
  755. scipy/stats/_mvn.cp311-win_amd64.pyd +0 -0
  756. scipy-1.15.3.dist-info/DELVEWHEEL +0 -2
  757. /scipy-1.15.3-cp311-cp311-win_amd64.whl → /scipy-1.16.0rc1-cp311-cp311-win_amd64.whl +0 -0
  758. {scipy-1.15.3.dist-info → scipy-1.16.0rc1.dist-info}/WHEEL +0 -0
@@ -0,0 +1,435 @@
1
+ '''
2
+ This module provides some basic linear algebra procedures.
3
+
4
+ Translated from Zaikun Zhang's modern-Fortran reference implementation in PRIMA.
5
+
6
+ Dedicated to late Professor M. J. D. Powell FRS (1936--2015).
7
+
8
+ Python translation by Nickolai Belakovski.
9
+ '''
10
+
11
+ import numpy as np
12
+ from .consts import DEBUGGING, EPS, REALMAX, REALMIN
13
+ from .present import present
14
+
15
+
16
+ # We use naive implementations of matrix multiplication and other routines for two
17
+ # reasons:
18
+ # 1. When Fortran is compiled in debug mode, and Python is using these routines, we
19
+ # can get bit for bit identical results as compared to Fortran. This is helpful
20
+ # for comparing the two implementations. It will be particularly helpful when porting
21
+ # the other implementations like LINCOA, etc.
22
+ # 2. On some problems this algorithm is very sensitive to errors in finite precision
23
+ # arithmetic. Switching to naive implementation will slow down the algorithm, but
24
+ # may be more stable.
25
+ USE_NAIVE_MATH = False
26
+
27
+
28
+ def inprod(x, y):
29
+ if not USE_NAIVE_MATH:
30
+ return np.dot(x, y)
31
+ result = 0
32
+ for i in range(len(x)):
33
+ result += x[i] * y[i]
34
+ return result
35
+
36
+
37
+ def matprod12(x, y):
38
+ result = np.zeros(y.shape[1])
39
+ for i in range(y.shape[1]):
40
+ result[i] = inprod(x, y[:, i])
41
+ return result
42
+
43
+
44
+ def matprod21(x, y):
45
+ result = np.zeros(x.shape[0])
46
+ for i in range(x.shape[1]):
47
+ result += x[:, i] * y[i]
48
+ return result
49
+
50
+
51
+ def matprod22(x, y):
52
+ result = np.zeros((x.shape[0], y.shape[1]))
53
+ for i in range(y.shape[1]):
54
+ for j in range(x.shape[1]):
55
+ result[:, j] += x[:, i] * y[i, j]
56
+ return result
57
+
58
+
59
+ def matprod(x, y):
60
+ if not USE_NAIVE_MATH:
61
+ return x@y
62
+ if len(x.shape) == 1 and len(y.shape) == 1:
63
+ return inprod(x, y)
64
+ elif len(x.shape) == 1 and len(y.shape) == 2:
65
+ return matprod12(x, y)
66
+ elif len(x.shape) == 2 and len(y.shape) == 1:
67
+ return matprod21(x, y)
68
+ elif len(x.shape) == 2 and len(y.shape) == 2:
69
+ return matprod22(x, y)
70
+ else:
71
+ raise ValueError(f'Invalid shapes for x and y: {x.shape} and {y.shape}')
72
+
73
+
74
+ def outprod(x, y):
75
+ if not USE_NAIVE_MATH:
76
+ return np.outer(x, y)
77
+ result = np.zeros((len(x), len(y)))
78
+ for i in range(len(x)):
79
+ result[:, i] = x * y[i]
80
+ return result
81
+
82
+
83
+ def lsqr(A, b, Q, Rdiag):
84
+ if not USE_NAIVE_MATH:
85
+ return np.linalg.lstsq(A, b, rcond=None)[0]
86
+
87
+ m = A.shape[0]
88
+ n = A.shape[1]
89
+
90
+ rank = min(m, n)
91
+
92
+ x = np.zeros(n)
93
+ y = b.copy()
94
+
95
+ for i in range(rank - 1, -1, -1):
96
+ yq = inprod(y, Q[:, i])
97
+ yqa = inprod(np.abs(y), np.abs(Q[:, i]))
98
+ if isminor(yq, yqa):
99
+ x[i] = 0
100
+ else:
101
+ x[i] = yq / Rdiag[i]
102
+ y = y - x[i] * A[:, i]
103
+ return x
104
+
105
+
106
+ def hypot(x1, x2):
107
+ if not USE_NAIVE_MATH:
108
+ return np.hypot(x1, x2)
109
+ if not np.isfinite(x1):
110
+ r = abs(x1)
111
+ elif not np.isfinite(x2):
112
+ r = abs(x2)
113
+ else:
114
+ y = abs(np.array([x1, x2]))
115
+ y = np.array([min(y), max(y)])
116
+ if y[0] > np.sqrt(REALMIN) and y[1] < np.sqrt(REALMAX/2.1):
117
+ r = np.sqrt(sum(y*y))
118
+ elif y[1] > 0:
119
+ r = y[1] * np.sqrt((y[0]/y[1])*(y[0]/y[1]) + 1)
120
+ else:
121
+ r = 0
122
+ return r
123
+
124
+
125
+ def norm(x):
126
+ if not USE_NAIVE_MATH:
127
+ return np.linalg.norm(x)
128
+ # NOTE: Avoid np.pow! And exponentiation in general!
129
+ # It appears that in Fortran, x*x and x**2 are the same, but in Python they are not!
130
+ # Try it with x = 5 - 1e-15
131
+ result = np.sqrt(sum([xi*xi for xi in x]))
132
+ return result
133
+
134
+
135
+ def istril(A, tol=0):
136
+ return primasum(abs(A) - np.tril(abs(A))) <= tol
137
+
138
+ def istriu(A, tol=0):
139
+ return primasum(abs(A) - np.triu(abs(A))) <= tol
140
+
141
+
142
+ def inv(A):
143
+ if not USE_NAIVE_MATH:
144
+ return np.linalg.inv(A)
145
+ A = A.copy()
146
+ n = A.shape[0]
147
+ if istril(A):
148
+ # This case is invoked in COBYLA.
149
+ R = A.T
150
+ B = np.zeros((n, n))
151
+ for i in range(n):
152
+ B[i, i] = 1 / R[i, i]
153
+ B[:i, i] = -matprod(B[:i, :i], R[:i, i]) / R[i, i]
154
+ return B.T
155
+ elif istriu(A):
156
+ B = np.zeros((n, n))
157
+ for i in range(n):
158
+ B[i, i] = 1 / A[i, i]
159
+ B[:i, i] = -matprod(B[:i, :i], A[:i, i]) / A[i, i]
160
+ else:
161
+ # This is NOT the best algorithm for the inverse, but since the QR subroutine is available ...
162
+ Q, R, P = qr(A)
163
+ R = R.T
164
+ B = np.zeros((n, n))
165
+ for i in range(n - 1, -1, -1):
166
+ B[:, i] = (Q[:, i] - matprod(B[:, i + 1:n], R[i + 1:n, i])) / R[i, i]
167
+ InvP = np.zeros(n, dtype=int)
168
+ InvP[P] = np.linspace(0, n-1, n)
169
+ B = B[:, InvP].T
170
+ return B
171
+
172
+
173
+ def qr(A):
174
+ m = A.shape[0]
175
+ n = A.shape[1]
176
+
177
+ Q = np.eye(m)
178
+ T = A.T
179
+ P = np.linspace(0, n-1, n, dtype=int)
180
+
181
+ for j in range(n):
182
+ k = np.argmax(primasum(primapow2(T[j:n+1, j:m+1]), axis=1), axis=0)
183
+ if k > 0 and k <= n - j - 1:
184
+ k += j
185
+ P[j], P[k] = P[k], P[j]
186
+ T[[j, k], :] = T[[k, j], :]
187
+ for i in range(m-1, j, -1):
188
+ G = planerot(T[j, [j, i]]).T
189
+ T[j, [j, i]] = np.append(hypot(T[j, j], T[j, i]), 0)
190
+ T[j + 1:n + 1, [j, i]] = matprod(T[j + 1:n + 1, [j, i]], G)
191
+ Q[:, [j, i]] = matprod(Q[:, [j, i]], G)
192
+
193
+ R = T.T
194
+
195
+ return Q, R, P
196
+
197
+
198
+ def primasum(x, axis=None):
199
+ '''
200
+ According to its documentation, np.sum will sometimes do partial pairwise summation.
201
+ For our purposes, when comparing, we want don't want to do anything fancy, and we
202
+ just want to add things up one at a time.
203
+ '''
204
+ if not USE_NAIVE_MATH:
205
+ return np.sum(x, axis=axis)
206
+ if axis is None:
207
+ if x.ndim == 2:
208
+ # Sum columns first, then sum the result
209
+ return sum(primasum(x, axis=0))
210
+ else:
211
+ return sum(x)
212
+ elif axis == 0:
213
+ result = np.zeros(x.shape[1])
214
+ for i in range(x.shape[1]):
215
+ result[i] = sum(x[:, i])
216
+ return result
217
+ elif axis == 1:
218
+ result = np.zeros(x.shape[0])
219
+ for i in range(x.shape[0]):
220
+ result[i] = sum(x[i, :])
221
+ return result
222
+
223
+
224
+ def primapow2(x):
225
+ '''
226
+ Believe it or now, x**2 is not always the same as x*x in Python. In Fortran they
227
+ appear to be identical. Here's a quick one-line to find an example on your system
228
+ (well, two liner after importing numpy):
229
+ list(filter(lambda x: x[1], [(x:=np.random.random(), x**2 - x*x != 0) for _ in range(10000)]))
230
+ '''
231
+ return x*x
232
+
233
+
234
+ def planerot(x):
235
+ '''
236
+ As in MATLAB, planerot(x) returns a 2x2 Givens matrix G for x in R2 so that Y=G@x has Y[1] = 0.
237
+ Roughly speaking, G = np.array([[x[0]/R, x[1]/R], [-x[1]/R, x[0]/R]]), where R = np.linalg.norm(x).
238
+ 0. We need to take care of the possibilities of R=0, Inf, NaN, and over/underflow.
239
+ 1. The G defined above is continuous with respect to X except at 0. Following this definition,
240
+ G = np.array([[np.sign(x[0]), 0], [0, np.sign(x[0])]]) if x[1] == 0,
241
+ G = np.array([[0, np.sign(x[1])], [np.sign(x[1]), 0]]) if x[0] == 0
242
+ Yet some implementations ignore the signs, leading to discontinuity and numerical instability.
243
+ 2. Difference from MATLAB: if x contains NaN of consists of only Inf, MATLAB returns a NaN matrix,
244
+ but we return an identity matrix or a matrix of +/-np.sqrt(2). We intend to keep G always orthogonal.
245
+ '''
246
+
247
+ # Preconditions
248
+ if DEBUGGING:
249
+ assert len(x) == 2, "x must be a 2-vector"
250
+
251
+ # ==================
252
+ # Calculation starts
253
+ # ==================
254
+
255
+ # Define C = X(1) / R and S = X(2) / R with R = HYPOT(X(1), X(2)). Handle Inf/NaN, over/underflow.
256
+ if (any(np.isnan(x))):
257
+ # In this case, MATLAB sets G to NaN(2, 2). We refrain from doing so to keep G orthogonal.
258
+ c = 1
259
+ s = 0
260
+ elif (all(np.isinf(x))):
261
+ # In this case, MATLAB sets G to NaN(2, 2). We refrain from doing so to keep G orthogonal.
262
+ c = 1 / np.sqrt(2) * np.sign(x[0])
263
+ s = 1 / np.sqrt(2) * np.sign(x[1])
264
+ elif (abs(x[0]) <= 0 and abs(x[1]) <= 0): # X(1) == 0 == X(2).
265
+ c = 1
266
+ s = 0
267
+ elif (abs(x[1]) <= EPS * abs(x[0])):
268
+ # N.B.:
269
+ # 0. With <= instead of <, this case covers X(1) == 0 == X(2), which is treated above separately
270
+ # to avoid the confusing SIGN(., 0) (see 1).
271
+ # 1. SIGN(A, 0) = ABS(A) in Fortran but sign(0) = 0 in MATLAB, Python, Julia, and R#
272
+ # 2. Taking SIGN(X(1)) into account ensures the continuity of G with respect to X except at 0.
273
+ c = np.sign(x[0])
274
+ s = 0
275
+ elif (abs(x[0]) <= EPS * abs(x[1])):
276
+ # N.B.: SIGN(A, X) = ABS(A) * sign of X /= A * sign of X # Therefore, it is WRONG to define G
277
+ # as SIGN(RESHAPE([ZERO, -ONE, ONE, ZERO], [2, 2]), X(2)). This mistake was committed on
278
+ # 20211206 and took a whole day to debug! NEVER use SIGN on arrays unless you are really sure.
279
+ c = 0
280
+ s = np.sign(x[1])
281
+ else:
282
+ # Here is the normal case. It implements the Givens rotation in a stable & continuous way as in:
283
+ # Bindel, D., Demmel, J., Kahan, W., and Marques, O. (2002). On computing Givens rotations
284
+ # reliably and efficiently. ACM Transactions on Mathematical Software (TOMS), 28(2), 206-238.
285
+ # N.B.: 1. Modern compilers compute SQRT(REALMIN) and SQRT(REALMAX/2.1) at compilation time.
286
+ # 2. The direct calculation without involving T and U seems to work better; use it if possible.
287
+ if (all(np.logical_and(np.sqrt(REALMIN) < np.abs(x), np.abs(x) < np.sqrt(REALMAX / 2.1)))):
288
+ # Do NOT use HYPOTENUSE here; the best implementation for one may be suboptimal for the other
289
+ r = norm(x)
290
+ c = x[0] / r
291
+ s = x[1] / r
292
+ elif (abs(x[0]) > abs(x[1])):
293
+ t = x[1] / x[0]
294
+ u = max(1, abs(t), np.sqrt(1 + t*t)) # MAXVAL: precaution against rounding error.
295
+ u *= np.sign(x[0]) ##MATLAB: u = sign(x(1))*sqrt(1 + t**2)
296
+ c = 1 / u
297
+ s = t / u
298
+ else:
299
+ t = x[0] / x[1]
300
+ u = max([1, abs(t), np.sqrt(1 + t*t)]) # MAXVAL: precaution against rounding error.
301
+ u *= np.sign(x[1]) ##MATLAB: u = sign(x(2))*sqrt(1 + t**2)
302
+ c = t / u
303
+ s = 1 / u
304
+
305
+ G = np.array([[c, s], [-s, c]]) # MATLAB: G = [c, s; -s, c]
306
+
307
+ #====================#
308
+ # Calculation ends #
309
+ #====================#
310
+
311
+ # Postconditions
312
+ if DEBUGGING:
313
+ assert G.shape == (2,2)
314
+ assert np.all(np.isfinite(G))
315
+ assert abs(G[0, 0] - G[1, 1]) + abs(G[0, 1] + G[1, 0]) <= 0
316
+ tol = np.maximum(1.0E-10, np.minimum(1.0E-1, 1.0E6 * EPS))
317
+ assert isorth(G, tol)
318
+ if all(np.logical_and(np.isfinite(x), np.abs(x) < np.sqrt(REALMAX / 2.1))):
319
+ r = np.linalg.norm(x)
320
+ assert max(abs(G@x - [r, 0])) <= max(tol, tol * r), 'G @ X = [||X||, 0]'
321
+
322
+ return G
323
+
324
+
325
+ def isminor(x, ref):
326
+ '''
327
+ This function tests whether x is minor compared to ref. It is used by Powell, e.g., in COBYLA.
328
+ In precise arithmetic, isminor(x, ref) is true if and only if x == 0; in floating point
329
+ arithmetic, isminor(x, ref) is true if x is 0 or its nonzero value can be attributed to
330
+ computer rounding errors according to ref.
331
+ Larger sensitivity means the function is more strict/precise, the value 0.1 being due to Powell.
332
+
333
+ For example:
334
+ isminor(1e-20, 1e300) -> True, because in floating point arithmetic 1e-20 cannot be added to
335
+ 1e300 without being rounded to 1e300.
336
+ isminor(1e300, 1e-20) -> False, because in floating point arithmetic adding 1e300 to 1e-20
337
+ dominates the latter number.
338
+ isminor(3, 4) -> False, because 3 can be added to 4 without being rounded off
339
+ '''
340
+
341
+ sensitivity = 0.1
342
+ refa = abs(ref) + sensitivity * abs(x)
343
+ refb = abs(ref) + 2 * sensitivity * abs(x)
344
+ return np.logical_or(abs(ref) >= refa, refa >= refb)
345
+
346
+
347
+ def isinv(A, B, tol=None):
348
+ '''
349
+ This procedure tests whether A = B^{-1} up to the tolerance TOL.
350
+ '''
351
+
352
+ # Sizes
353
+ n = np.size(A, 0)
354
+
355
+ # Preconditions
356
+ if DEBUGGING:
357
+ assert np.size(A, 0) == np.size(A, 1)
358
+ assert np.size(B, 0) == np.size(B, 1)
359
+ assert np.size(A, 0) == np.size(B, 0)
360
+ if present(tol):
361
+ assert tol >= 0
362
+
363
+ #====================#
364
+ # Calculation starts #
365
+ #====================#
366
+
367
+ tol = tol if present(tol) else np.minimum(1e-3, 1e2 * EPS * np.maximum(np.size(A, 0), np.size(A, 1)))
368
+ tol = np.max([tol, tol * np.max(abs(A)), tol * np.max(abs(B))])
369
+ is_inv = ((abs(matprod(A, B)) - np.eye(n)) <= tol).all() or ((abs(matprod(B, A) - np.eye(n))) <= tol).all()
370
+
371
+ #===================#
372
+ # Calculation ends #
373
+ #===================#
374
+ return is_inv
375
+
376
+
377
+ def isorth(A, tol=None):
378
+ '''
379
+ This function tests whether the matrix A has orthonormal columns up to the tolerance TOL.
380
+ '''
381
+
382
+ # Preconditions
383
+ if DEBUGGING:
384
+ if present(tol):
385
+ assert tol >= 0
386
+
387
+ #====================#
388
+ # Calculation starts #
389
+ #====================#
390
+
391
+ num_vars = np.size(A, 1)
392
+
393
+ if num_vars > np.size(A, 0):
394
+ is_orth = False
395
+ elif (np.isnan(primasum(abs(A)))):
396
+ is_orth = False
397
+ else:
398
+ if present(tol):
399
+ is_orth = (abs(matprod(A.T, A) - np.eye(num_vars)) <= np.maximum(tol, tol * np.max(abs(A)))).all()
400
+ else:
401
+ is_orth = (abs(matprod(A.T, A) - np.eye(num_vars)) <= 0).all()
402
+
403
+ #====================#
404
+ # Calculation ends #
405
+ #====================#
406
+ return is_orth
407
+
408
+
409
+ def get_arrays_tol(*arrays):
410
+ """
411
+ Get a relative tolerance for a set of arrays. Borrowed from COBYQA
412
+
413
+ Parameters
414
+ ----------
415
+ *arrays: tuple
416
+ Set of `numpy.ndarray` to get the tolerance for.
417
+
418
+ Returns
419
+ -------
420
+ float
421
+ Relative tolerance for the set of arrays.
422
+
423
+ Raises
424
+ ------
425
+ ValueError
426
+ If no array is provided.
427
+ """
428
+ if len(arrays) == 0:
429
+ raise ValueError("At least one array must be provided.")
430
+ size = max(array.size for array in arrays)
431
+ weight = max(
432
+ np.max(np.abs(array[np.isfinite(array)]), initial=1.0)
433
+ for array in arrays
434
+ )
435
+ return 10.0 * EPS * max(size, 1.0) * weight