scipy 1.16.2__cp313-cp313-win_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1530) hide show
  1. scipy/__config__.py +161 -0
  2. scipy/__init__.py +150 -0
  3. scipy/_cyutility.cp313-win_arm64.lib +0 -0
  4. scipy/_cyutility.cp313-win_arm64.pyd +0 -0
  5. scipy/_distributor_init.py +18 -0
  6. scipy/_lib/__init__.py +14 -0
  7. scipy/_lib/_array_api.py +931 -0
  8. scipy/_lib/_array_api_compat_vendor.py +9 -0
  9. scipy/_lib/_array_api_no_0d.py +103 -0
  10. scipy/_lib/_bunch.py +229 -0
  11. scipy/_lib/_ccallback.py +251 -0
  12. scipy/_lib/_ccallback_c.cp313-win_arm64.lib +0 -0
  13. scipy/_lib/_ccallback_c.cp313-win_arm64.pyd +0 -0
  14. scipy/_lib/_disjoint_set.py +254 -0
  15. scipy/_lib/_docscrape.py +761 -0
  16. scipy/_lib/_elementwise_iterative_method.py +346 -0
  17. scipy/_lib/_fpumode.cp313-win_arm64.lib +0 -0
  18. scipy/_lib/_fpumode.cp313-win_arm64.pyd +0 -0
  19. scipy/_lib/_gcutils.py +105 -0
  20. scipy/_lib/_pep440.py +487 -0
  21. scipy/_lib/_sparse.py +41 -0
  22. scipy/_lib/_test_ccallback.cp313-win_arm64.lib +0 -0
  23. scipy/_lib/_test_ccallback.cp313-win_arm64.pyd +0 -0
  24. scipy/_lib/_test_deprecation_call.cp313-win_arm64.lib +0 -0
  25. scipy/_lib/_test_deprecation_call.cp313-win_arm64.pyd +0 -0
  26. scipy/_lib/_test_deprecation_def.cp313-win_arm64.lib +0 -0
  27. scipy/_lib/_test_deprecation_def.cp313-win_arm64.pyd +0 -0
  28. scipy/_lib/_testutils.py +373 -0
  29. scipy/_lib/_threadsafety.py +58 -0
  30. scipy/_lib/_tmpdirs.py +86 -0
  31. scipy/_lib/_uarray/LICENSE +29 -0
  32. scipy/_lib/_uarray/__init__.py +116 -0
  33. scipy/_lib/_uarray/_backend.py +707 -0
  34. scipy/_lib/_uarray/_uarray.cp313-win_arm64.lib +0 -0
  35. scipy/_lib/_uarray/_uarray.cp313-win_arm64.pyd +0 -0
  36. scipy/_lib/_util.py +1283 -0
  37. scipy/_lib/array_api_compat/__init__.py +22 -0
  38. scipy/_lib/array_api_compat/_internal.py +59 -0
  39. scipy/_lib/array_api_compat/common/__init__.py +1 -0
  40. scipy/_lib/array_api_compat/common/_aliases.py +727 -0
  41. scipy/_lib/array_api_compat/common/_fft.py +213 -0
  42. scipy/_lib/array_api_compat/common/_helpers.py +1058 -0
  43. scipy/_lib/array_api_compat/common/_linalg.py +232 -0
  44. scipy/_lib/array_api_compat/common/_typing.py +192 -0
  45. scipy/_lib/array_api_compat/cupy/__init__.py +13 -0
  46. scipy/_lib/array_api_compat/cupy/_aliases.py +156 -0
  47. scipy/_lib/array_api_compat/cupy/_info.py +336 -0
  48. scipy/_lib/array_api_compat/cupy/_typing.py +31 -0
  49. scipy/_lib/array_api_compat/cupy/fft.py +36 -0
  50. scipy/_lib/array_api_compat/cupy/linalg.py +49 -0
  51. scipy/_lib/array_api_compat/dask/__init__.py +0 -0
  52. scipy/_lib/array_api_compat/dask/array/__init__.py +12 -0
  53. scipy/_lib/array_api_compat/dask/array/_aliases.py +376 -0
  54. scipy/_lib/array_api_compat/dask/array/_info.py +416 -0
  55. scipy/_lib/array_api_compat/dask/array/fft.py +21 -0
  56. scipy/_lib/array_api_compat/dask/array/linalg.py +72 -0
  57. scipy/_lib/array_api_compat/numpy/__init__.py +28 -0
  58. scipy/_lib/array_api_compat/numpy/_aliases.py +190 -0
  59. scipy/_lib/array_api_compat/numpy/_info.py +366 -0
  60. scipy/_lib/array_api_compat/numpy/_typing.py +30 -0
  61. scipy/_lib/array_api_compat/numpy/fft.py +35 -0
  62. scipy/_lib/array_api_compat/numpy/linalg.py +143 -0
  63. scipy/_lib/array_api_compat/torch/__init__.py +22 -0
  64. scipy/_lib/array_api_compat/torch/_aliases.py +855 -0
  65. scipy/_lib/array_api_compat/torch/_info.py +369 -0
  66. scipy/_lib/array_api_compat/torch/_typing.py +3 -0
  67. scipy/_lib/array_api_compat/torch/fft.py +85 -0
  68. scipy/_lib/array_api_compat/torch/linalg.py +121 -0
  69. scipy/_lib/array_api_extra/__init__.py +38 -0
  70. scipy/_lib/array_api_extra/_delegation.py +171 -0
  71. scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
  72. scipy/_lib/array_api_extra/_lib/_at.py +463 -0
  73. scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
  74. scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
  75. scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
  76. scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
  77. scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
  78. scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
  79. scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
  80. scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
  81. scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
  82. scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
  83. scipy/_lib/array_api_extra/testing.py +359 -0
  84. scipy/_lib/cobyqa/__init__.py +20 -0
  85. scipy/_lib/cobyqa/framework.py +1240 -0
  86. scipy/_lib/cobyqa/main.py +1506 -0
  87. scipy/_lib/cobyqa/models.py +1529 -0
  88. scipy/_lib/cobyqa/problem.py +1296 -0
  89. scipy/_lib/cobyqa/settings.py +132 -0
  90. scipy/_lib/cobyqa/subsolvers/__init__.py +14 -0
  91. scipy/_lib/cobyqa/subsolvers/geometry.py +387 -0
  92. scipy/_lib/cobyqa/subsolvers/optim.py +1203 -0
  93. scipy/_lib/cobyqa/utils/__init__.py +18 -0
  94. scipy/_lib/cobyqa/utils/exceptions.py +22 -0
  95. scipy/_lib/cobyqa/utils/math.py +77 -0
  96. scipy/_lib/cobyqa/utils/versions.py +67 -0
  97. scipy/_lib/decorator.py +399 -0
  98. scipy/_lib/deprecation.py +274 -0
  99. scipy/_lib/doccer.py +366 -0
  100. scipy/_lib/messagestream.cp313-win_arm64.lib +0 -0
  101. scipy/_lib/messagestream.cp313-win_arm64.pyd +0 -0
  102. scipy/_lib/pyprima/__init__.py +212 -0
  103. scipy/_lib/pyprima/cobyla/__init__.py +0 -0
  104. scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
  105. scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
  106. scipy/_lib/pyprima/cobyla/geometry.py +226 -0
  107. scipy/_lib/pyprima/cobyla/initialize.py +215 -0
  108. scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
  109. scipy/_lib/pyprima/cobyla/update.py +289 -0
  110. scipy/_lib/pyprima/common/__init__.py +0 -0
  111. scipy/_lib/pyprima/common/_bounds.py +34 -0
  112. scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
  113. scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
  114. scipy/_lib/pyprima/common/_project.py +173 -0
  115. scipy/_lib/pyprima/common/checkbreak.py +93 -0
  116. scipy/_lib/pyprima/common/consts.py +47 -0
  117. scipy/_lib/pyprima/common/evaluate.py +99 -0
  118. scipy/_lib/pyprima/common/history.py +38 -0
  119. scipy/_lib/pyprima/common/infos.py +30 -0
  120. scipy/_lib/pyprima/common/linalg.py +435 -0
  121. scipy/_lib/pyprima/common/message.py +290 -0
  122. scipy/_lib/pyprima/common/powalg.py +131 -0
  123. scipy/_lib/pyprima/common/preproc.py +277 -0
  124. scipy/_lib/pyprima/common/present.py +5 -0
  125. scipy/_lib/pyprima/common/ratio.py +54 -0
  126. scipy/_lib/pyprima/common/redrho.py +47 -0
  127. scipy/_lib/pyprima/common/selectx.py +296 -0
  128. scipy/_lib/tests/__init__.py +0 -0
  129. scipy/_lib/tests/test__gcutils.py +110 -0
  130. scipy/_lib/tests/test__pep440.py +67 -0
  131. scipy/_lib/tests/test__testutils.py +32 -0
  132. scipy/_lib/tests/test__threadsafety.py +51 -0
  133. scipy/_lib/tests/test__util.py +641 -0
  134. scipy/_lib/tests/test_array_api.py +322 -0
  135. scipy/_lib/tests/test_bunch.py +169 -0
  136. scipy/_lib/tests/test_ccallback.py +196 -0
  137. scipy/_lib/tests/test_config.py +45 -0
  138. scipy/_lib/tests/test_deprecation.py +10 -0
  139. scipy/_lib/tests/test_doccer.py +143 -0
  140. scipy/_lib/tests/test_import_cycles.py +18 -0
  141. scipy/_lib/tests/test_public_api.py +482 -0
  142. scipy/_lib/tests/test_scipy_version.py +28 -0
  143. scipy/_lib/tests/test_tmpdirs.py +48 -0
  144. scipy/_lib/tests/test_warnings.py +137 -0
  145. scipy/_lib/uarray.py +31 -0
  146. scipy/cluster/__init__.py +31 -0
  147. scipy/cluster/_hierarchy.cp313-win_arm64.lib +0 -0
  148. scipy/cluster/_hierarchy.cp313-win_arm64.pyd +0 -0
  149. scipy/cluster/_optimal_leaf_ordering.cp313-win_arm64.lib +0 -0
  150. scipy/cluster/_optimal_leaf_ordering.cp313-win_arm64.pyd +0 -0
  151. scipy/cluster/_vq.cp313-win_arm64.lib +0 -0
  152. scipy/cluster/_vq.cp313-win_arm64.pyd +0 -0
  153. scipy/cluster/hierarchy.py +4348 -0
  154. scipy/cluster/tests/__init__.py +0 -0
  155. scipy/cluster/tests/hierarchy_test_data.py +145 -0
  156. scipy/cluster/tests/test_disjoint_set.py +202 -0
  157. scipy/cluster/tests/test_hierarchy.py +1238 -0
  158. scipy/cluster/tests/test_vq.py +434 -0
  159. scipy/cluster/vq.py +832 -0
  160. scipy/conftest.py +683 -0
  161. scipy/constants/__init__.py +358 -0
  162. scipy/constants/_codata.py +2266 -0
  163. scipy/constants/_constants.py +369 -0
  164. scipy/constants/codata.py +21 -0
  165. scipy/constants/constants.py +53 -0
  166. scipy/constants/tests/__init__.py +0 -0
  167. scipy/constants/tests/test_codata.py +78 -0
  168. scipy/constants/tests/test_constants.py +83 -0
  169. scipy/datasets/__init__.py +90 -0
  170. scipy/datasets/_download_all.py +71 -0
  171. scipy/datasets/_fetchers.py +225 -0
  172. scipy/datasets/_registry.py +26 -0
  173. scipy/datasets/_utils.py +81 -0
  174. scipy/datasets/tests/__init__.py +0 -0
  175. scipy/datasets/tests/test_data.py +128 -0
  176. scipy/differentiate/__init__.py +27 -0
  177. scipy/differentiate/_differentiate.py +1129 -0
  178. scipy/differentiate/tests/__init__.py +0 -0
  179. scipy/differentiate/tests/test_differentiate.py +694 -0
  180. scipy/fft/__init__.py +114 -0
  181. scipy/fft/_backend.py +196 -0
  182. scipy/fft/_basic.py +1650 -0
  183. scipy/fft/_basic_backend.py +197 -0
  184. scipy/fft/_debug_backends.py +22 -0
  185. scipy/fft/_fftlog.py +223 -0
  186. scipy/fft/_fftlog_backend.py +200 -0
  187. scipy/fft/_helper.py +348 -0
  188. scipy/fft/_pocketfft/LICENSE.md +25 -0
  189. scipy/fft/_pocketfft/__init__.py +9 -0
  190. scipy/fft/_pocketfft/basic.py +251 -0
  191. scipy/fft/_pocketfft/helper.py +249 -0
  192. scipy/fft/_pocketfft/pypocketfft.cp313-win_arm64.lib +0 -0
  193. scipy/fft/_pocketfft/pypocketfft.cp313-win_arm64.pyd +0 -0
  194. scipy/fft/_pocketfft/realtransforms.py +109 -0
  195. scipy/fft/_pocketfft/tests/__init__.py +0 -0
  196. scipy/fft/_pocketfft/tests/test_basic.py +1011 -0
  197. scipy/fft/_pocketfft/tests/test_real_transforms.py +505 -0
  198. scipy/fft/_realtransforms.py +706 -0
  199. scipy/fft/_realtransforms_backend.py +63 -0
  200. scipy/fft/tests/__init__.py +0 -0
  201. scipy/fft/tests/mock_backend.py +96 -0
  202. scipy/fft/tests/test_backend.py +98 -0
  203. scipy/fft/tests/test_basic.py +504 -0
  204. scipy/fft/tests/test_fftlog.py +215 -0
  205. scipy/fft/tests/test_helper.py +558 -0
  206. scipy/fft/tests/test_multithreading.py +84 -0
  207. scipy/fft/tests/test_real_transforms.py +247 -0
  208. scipy/fftpack/__init__.py +103 -0
  209. scipy/fftpack/_basic.py +428 -0
  210. scipy/fftpack/_helper.py +115 -0
  211. scipy/fftpack/_pseudo_diffs.py +554 -0
  212. scipy/fftpack/_realtransforms.py +598 -0
  213. scipy/fftpack/basic.py +20 -0
  214. scipy/fftpack/convolve.cp313-win_arm64.lib +0 -0
  215. scipy/fftpack/convolve.cp313-win_arm64.pyd +0 -0
  216. scipy/fftpack/helper.py +19 -0
  217. scipy/fftpack/pseudo_diffs.py +22 -0
  218. scipy/fftpack/realtransforms.py +19 -0
  219. scipy/fftpack/tests/__init__.py +0 -0
  220. scipy/fftpack/tests/fftw_double_ref.npz +0 -0
  221. scipy/fftpack/tests/fftw_longdouble_ref.npz +0 -0
  222. scipy/fftpack/tests/fftw_single_ref.npz +0 -0
  223. scipy/fftpack/tests/test.npz +0 -0
  224. scipy/fftpack/tests/test_basic.py +877 -0
  225. scipy/fftpack/tests/test_helper.py +54 -0
  226. scipy/fftpack/tests/test_import.py +33 -0
  227. scipy/fftpack/tests/test_pseudo_diffs.py +388 -0
  228. scipy/fftpack/tests/test_real_transforms.py +836 -0
  229. scipy/integrate/__init__.py +122 -0
  230. scipy/integrate/_bvp.py +1160 -0
  231. scipy/integrate/_cubature.py +729 -0
  232. scipy/integrate/_dop.cp313-win_arm64.lib +0 -0
  233. scipy/integrate/_dop.cp313-win_arm64.pyd +0 -0
  234. scipy/integrate/_ivp/__init__.py +8 -0
  235. scipy/integrate/_ivp/base.py +290 -0
  236. scipy/integrate/_ivp/bdf.py +478 -0
  237. scipy/integrate/_ivp/common.py +451 -0
  238. scipy/integrate/_ivp/dop853_coefficients.py +193 -0
  239. scipy/integrate/_ivp/ivp.py +755 -0
  240. scipy/integrate/_ivp/lsoda.py +224 -0
  241. scipy/integrate/_ivp/radau.py +572 -0
  242. scipy/integrate/_ivp/rk.py +601 -0
  243. scipy/integrate/_ivp/tests/__init__.py +0 -0
  244. scipy/integrate/_ivp/tests/test_ivp.py +1287 -0
  245. scipy/integrate/_ivp/tests/test_rk.py +37 -0
  246. scipy/integrate/_lebedev.py +5450 -0
  247. scipy/integrate/_lsoda.cp313-win_arm64.lib +0 -0
  248. scipy/integrate/_lsoda.cp313-win_arm64.pyd +0 -0
  249. scipy/integrate/_ode.py +1395 -0
  250. scipy/integrate/_odepack.cp313-win_arm64.lib +0 -0
  251. scipy/integrate/_odepack.cp313-win_arm64.pyd +0 -0
  252. scipy/integrate/_odepack_py.py +273 -0
  253. scipy/integrate/_quad_vec.py +674 -0
  254. scipy/integrate/_quadpack.cp313-win_arm64.lib +0 -0
  255. scipy/integrate/_quadpack.cp313-win_arm64.pyd +0 -0
  256. scipy/integrate/_quadpack_py.py +1283 -0
  257. scipy/integrate/_quadrature.py +1336 -0
  258. scipy/integrate/_rules/__init__.py +12 -0
  259. scipy/integrate/_rules/_base.py +518 -0
  260. scipy/integrate/_rules/_gauss_kronrod.py +202 -0
  261. scipy/integrate/_rules/_gauss_legendre.py +62 -0
  262. scipy/integrate/_rules/_genz_malik.py +210 -0
  263. scipy/integrate/_tanhsinh.py +1385 -0
  264. scipy/integrate/_test_multivariate.cp313-win_arm64.lib +0 -0
  265. scipy/integrate/_test_multivariate.cp313-win_arm64.pyd +0 -0
  266. scipy/integrate/_test_odeint_banded.cp313-win_arm64.lib +0 -0
  267. scipy/integrate/_test_odeint_banded.cp313-win_arm64.pyd +0 -0
  268. scipy/integrate/_vode.cp313-win_arm64.lib +0 -0
  269. scipy/integrate/_vode.cp313-win_arm64.pyd +0 -0
  270. scipy/integrate/dop.py +15 -0
  271. scipy/integrate/lsoda.py +15 -0
  272. scipy/integrate/odepack.py +17 -0
  273. scipy/integrate/quadpack.py +23 -0
  274. scipy/integrate/tests/__init__.py +0 -0
  275. scipy/integrate/tests/test__quad_vec.py +211 -0
  276. scipy/integrate/tests/test_banded_ode_solvers.py +305 -0
  277. scipy/integrate/tests/test_bvp.py +714 -0
  278. scipy/integrate/tests/test_cubature.py +1375 -0
  279. scipy/integrate/tests/test_integrate.py +840 -0
  280. scipy/integrate/tests/test_odeint_jac.py +74 -0
  281. scipy/integrate/tests/test_quadpack.py +680 -0
  282. scipy/integrate/tests/test_quadrature.py +730 -0
  283. scipy/integrate/tests/test_tanhsinh.py +1171 -0
  284. scipy/integrate/vode.py +15 -0
  285. scipy/interpolate/__init__.py +228 -0
  286. scipy/interpolate/_bary_rational.py +715 -0
  287. scipy/interpolate/_bsplines.py +2469 -0
  288. scipy/interpolate/_cubic.py +973 -0
  289. scipy/interpolate/_dfitpack.cp313-win_arm64.lib +0 -0
  290. scipy/interpolate/_dfitpack.cp313-win_arm64.pyd +0 -0
  291. scipy/interpolate/_dierckx.cp313-win_arm64.lib +0 -0
  292. scipy/interpolate/_dierckx.cp313-win_arm64.pyd +0 -0
  293. scipy/interpolate/_fitpack.cp313-win_arm64.lib +0 -0
  294. scipy/interpolate/_fitpack.cp313-win_arm64.pyd +0 -0
  295. scipy/interpolate/_fitpack2.py +2397 -0
  296. scipy/interpolate/_fitpack_impl.py +811 -0
  297. scipy/interpolate/_fitpack_py.py +898 -0
  298. scipy/interpolate/_fitpack_repro.py +996 -0
  299. scipy/interpolate/_interpnd.cp313-win_arm64.lib +0 -0
  300. scipy/interpolate/_interpnd.cp313-win_arm64.pyd +0 -0
  301. scipy/interpolate/_interpolate.py +2266 -0
  302. scipy/interpolate/_ndbspline.py +415 -0
  303. scipy/interpolate/_ndgriddata.py +329 -0
  304. scipy/interpolate/_pade.py +67 -0
  305. scipy/interpolate/_polyint.py +1025 -0
  306. scipy/interpolate/_ppoly.cp313-win_arm64.lib +0 -0
  307. scipy/interpolate/_ppoly.cp313-win_arm64.pyd +0 -0
  308. scipy/interpolate/_rbf.py +290 -0
  309. scipy/interpolate/_rbfinterp.py +550 -0
  310. scipy/interpolate/_rbfinterp_pythran.cp313-win_arm64.lib +0 -0
  311. scipy/interpolate/_rbfinterp_pythran.cp313-win_arm64.pyd +0 -0
  312. scipy/interpolate/_rgi.py +764 -0
  313. scipy/interpolate/_rgi_cython.cp313-win_arm64.lib +0 -0
  314. scipy/interpolate/_rgi_cython.cp313-win_arm64.pyd +0 -0
  315. scipy/interpolate/dfitpack.py +24 -0
  316. scipy/interpolate/fitpack.py +31 -0
  317. scipy/interpolate/fitpack2.py +29 -0
  318. scipy/interpolate/interpnd.py +24 -0
  319. scipy/interpolate/interpolate.py +30 -0
  320. scipy/interpolate/ndgriddata.py +23 -0
  321. scipy/interpolate/polyint.py +24 -0
  322. scipy/interpolate/rbf.py +18 -0
  323. scipy/interpolate/tests/__init__.py +0 -0
  324. scipy/interpolate/tests/data/bug-1310.npz +0 -0
  325. scipy/interpolate/tests/data/estimate_gradients_hang.npy +0 -0
  326. scipy/interpolate/tests/data/gcvspl.npz +0 -0
  327. scipy/interpolate/tests/test_bary_rational.py +368 -0
  328. scipy/interpolate/tests/test_bsplines.py +3754 -0
  329. scipy/interpolate/tests/test_fitpack.py +519 -0
  330. scipy/interpolate/tests/test_fitpack2.py +1431 -0
  331. scipy/interpolate/tests/test_gil.py +64 -0
  332. scipy/interpolate/tests/test_interpnd.py +452 -0
  333. scipy/interpolate/tests/test_interpolate.py +2630 -0
  334. scipy/interpolate/tests/test_ndgriddata.py +308 -0
  335. scipy/interpolate/tests/test_pade.py +107 -0
  336. scipy/interpolate/tests/test_polyint.py +972 -0
  337. scipy/interpolate/tests/test_rbf.py +246 -0
  338. scipy/interpolate/tests/test_rbfinterp.py +534 -0
  339. scipy/interpolate/tests/test_rgi.py +1151 -0
  340. scipy/io/__init__.py +116 -0
  341. scipy/io/_fast_matrix_market/__init__.py +600 -0
  342. scipy/io/_fast_matrix_market/_fmm_core.cp313-win_arm64.lib +0 -0
  343. scipy/io/_fast_matrix_market/_fmm_core.cp313-win_arm64.pyd +0 -0
  344. scipy/io/_fortran.py +354 -0
  345. scipy/io/_harwell_boeing/__init__.py +7 -0
  346. scipy/io/_harwell_boeing/_fortran_format_parser.py +316 -0
  347. scipy/io/_harwell_boeing/hb.py +571 -0
  348. scipy/io/_harwell_boeing/tests/__init__.py +0 -0
  349. scipy/io/_harwell_boeing/tests/test_fortran_format.py +74 -0
  350. scipy/io/_harwell_boeing/tests/test_hb.py +70 -0
  351. scipy/io/_idl.py +917 -0
  352. scipy/io/_mmio.py +968 -0
  353. scipy/io/_netcdf.py +1104 -0
  354. scipy/io/_test_fortran.cp313-win_arm64.lib +0 -0
  355. scipy/io/_test_fortran.cp313-win_arm64.pyd +0 -0
  356. scipy/io/arff/__init__.py +28 -0
  357. scipy/io/arff/_arffread.py +873 -0
  358. scipy/io/arff/arffread.py +19 -0
  359. scipy/io/arff/tests/__init__.py +0 -0
  360. scipy/io/arff/tests/data/iris.arff +225 -0
  361. scipy/io/arff/tests/data/missing.arff +8 -0
  362. scipy/io/arff/tests/data/nodata.arff +11 -0
  363. scipy/io/arff/tests/data/quoted_nominal.arff +13 -0
  364. scipy/io/arff/tests/data/quoted_nominal_spaces.arff +13 -0
  365. scipy/io/arff/tests/data/test1.arff +10 -0
  366. scipy/io/arff/tests/data/test10.arff +8 -0
  367. scipy/io/arff/tests/data/test11.arff +11 -0
  368. scipy/io/arff/tests/data/test2.arff +15 -0
  369. scipy/io/arff/tests/data/test3.arff +6 -0
  370. scipy/io/arff/tests/data/test4.arff +11 -0
  371. scipy/io/arff/tests/data/test5.arff +26 -0
  372. scipy/io/arff/tests/data/test6.arff +12 -0
  373. scipy/io/arff/tests/data/test7.arff +15 -0
  374. scipy/io/arff/tests/data/test8.arff +12 -0
  375. scipy/io/arff/tests/data/test9.arff +14 -0
  376. scipy/io/arff/tests/test_arffread.py +421 -0
  377. scipy/io/harwell_boeing.py +17 -0
  378. scipy/io/idl.py +17 -0
  379. scipy/io/matlab/__init__.py +66 -0
  380. scipy/io/matlab/_byteordercodes.py +75 -0
  381. scipy/io/matlab/_mio.py +375 -0
  382. scipy/io/matlab/_mio4.py +632 -0
  383. scipy/io/matlab/_mio5.py +901 -0
  384. scipy/io/matlab/_mio5_params.py +281 -0
  385. scipy/io/matlab/_mio5_utils.cp313-win_arm64.lib +0 -0
  386. scipy/io/matlab/_mio5_utils.cp313-win_arm64.pyd +0 -0
  387. scipy/io/matlab/_mio_utils.cp313-win_arm64.lib +0 -0
  388. scipy/io/matlab/_mio_utils.cp313-win_arm64.pyd +0 -0
  389. scipy/io/matlab/_miobase.py +435 -0
  390. scipy/io/matlab/_streams.cp313-win_arm64.lib +0 -0
  391. scipy/io/matlab/_streams.cp313-win_arm64.pyd +0 -0
  392. scipy/io/matlab/byteordercodes.py +17 -0
  393. scipy/io/matlab/mio.py +16 -0
  394. scipy/io/matlab/mio4.py +17 -0
  395. scipy/io/matlab/mio5.py +19 -0
  396. scipy/io/matlab/mio5_params.py +18 -0
  397. scipy/io/matlab/mio5_utils.py +17 -0
  398. scipy/io/matlab/mio_utils.py +17 -0
  399. scipy/io/matlab/miobase.py +16 -0
  400. scipy/io/matlab/streams.py +16 -0
  401. scipy/io/matlab/tests/__init__.py +0 -0
  402. scipy/io/matlab/tests/data/bad_miuint32.mat +0 -0
  403. scipy/io/matlab/tests/data/bad_miutf8_array_name.mat +0 -0
  404. scipy/io/matlab/tests/data/big_endian.mat +0 -0
  405. scipy/io/matlab/tests/data/broken_utf8.mat +0 -0
  406. scipy/io/matlab/tests/data/corrupted_zlib_checksum.mat +0 -0
  407. scipy/io/matlab/tests/data/corrupted_zlib_data.mat +0 -0
  408. scipy/io/matlab/tests/data/debigged_m4.mat +0 -0
  409. scipy/io/matlab/tests/data/japanese_utf8.txt +5 -0
  410. scipy/io/matlab/tests/data/little_endian.mat +0 -0
  411. scipy/io/matlab/tests/data/logical_sparse.mat +0 -0
  412. scipy/io/matlab/tests/data/malformed1.mat +0 -0
  413. scipy/io/matlab/tests/data/miuint32_for_miint32.mat +0 -0
  414. scipy/io/matlab/tests/data/miutf8_array_name.mat +0 -0
  415. scipy/io/matlab/tests/data/nasty_duplicate_fieldnames.mat +0 -0
  416. scipy/io/matlab/tests/data/one_by_zero_char.mat +0 -0
  417. scipy/io/matlab/tests/data/parabola.mat +0 -0
  418. scipy/io/matlab/tests/data/single_empty_string.mat +0 -0
  419. scipy/io/matlab/tests/data/some_functions.mat +0 -0
  420. scipy/io/matlab/tests/data/sqr.mat +0 -0
  421. scipy/io/matlab/tests/data/test3dmatrix_6.1_SOL2.mat +0 -0
  422. scipy/io/matlab/tests/data/test3dmatrix_6.5.1_GLNX86.mat +0 -0
  423. scipy/io/matlab/tests/data/test3dmatrix_7.1_GLNX86.mat +0 -0
  424. scipy/io/matlab/tests/data/test3dmatrix_7.4_GLNX86.mat +0 -0
  425. scipy/io/matlab/tests/data/test_empty_struct.mat +0 -0
  426. scipy/io/matlab/tests/data/test_mat4_le_floats.mat +0 -0
  427. scipy/io/matlab/tests/data/test_skip_variable.mat +0 -0
  428. scipy/io/matlab/tests/data/testbool_8_WIN64.mat +0 -0
  429. scipy/io/matlab/tests/data/testcell_6.1_SOL2.mat +0 -0
  430. scipy/io/matlab/tests/data/testcell_6.5.1_GLNX86.mat +0 -0
  431. scipy/io/matlab/tests/data/testcell_7.1_GLNX86.mat +0 -0
  432. scipy/io/matlab/tests/data/testcell_7.4_GLNX86.mat +0 -0
  433. scipy/io/matlab/tests/data/testcellnest_6.1_SOL2.mat +0 -0
  434. scipy/io/matlab/tests/data/testcellnest_6.5.1_GLNX86.mat +0 -0
  435. scipy/io/matlab/tests/data/testcellnest_7.1_GLNX86.mat +0 -0
  436. scipy/io/matlab/tests/data/testcellnest_7.4_GLNX86.mat +0 -0
  437. scipy/io/matlab/tests/data/testcomplex_4.2c_SOL2.mat +0 -0
  438. scipy/io/matlab/tests/data/testcomplex_6.1_SOL2.mat +0 -0
  439. scipy/io/matlab/tests/data/testcomplex_6.5.1_GLNX86.mat +0 -0
  440. scipy/io/matlab/tests/data/testcomplex_7.1_GLNX86.mat +0 -0
  441. scipy/io/matlab/tests/data/testcomplex_7.4_GLNX86.mat +0 -0
  442. scipy/io/matlab/tests/data/testdouble_4.2c_SOL2.mat +0 -0
  443. scipy/io/matlab/tests/data/testdouble_6.1_SOL2.mat +0 -0
  444. scipy/io/matlab/tests/data/testdouble_6.5.1_GLNX86.mat +0 -0
  445. scipy/io/matlab/tests/data/testdouble_7.1_GLNX86.mat +0 -0
  446. scipy/io/matlab/tests/data/testdouble_7.4_GLNX86.mat +0 -0
  447. scipy/io/matlab/tests/data/testemptycell_5.3_SOL2.mat +0 -0
  448. scipy/io/matlab/tests/data/testemptycell_6.5.1_GLNX86.mat +0 -0
  449. scipy/io/matlab/tests/data/testemptycell_7.1_GLNX86.mat +0 -0
  450. scipy/io/matlab/tests/data/testemptycell_7.4_GLNX86.mat +0 -0
  451. scipy/io/matlab/tests/data/testfunc_7.4_GLNX86.mat +0 -0
  452. scipy/io/matlab/tests/data/testhdf5_7.4_GLNX86.mat +0 -0
  453. scipy/io/matlab/tests/data/testmatrix_4.2c_SOL2.mat +0 -0
  454. scipy/io/matlab/tests/data/testmatrix_6.1_SOL2.mat +0 -0
  455. scipy/io/matlab/tests/data/testmatrix_6.5.1_GLNX86.mat +0 -0
  456. scipy/io/matlab/tests/data/testmatrix_7.1_GLNX86.mat +0 -0
  457. scipy/io/matlab/tests/data/testmatrix_7.4_GLNX86.mat +0 -0
  458. scipy/io/matlab/tests/data/testminus_4.2c_SOL2.mat +0 -0
  459. scipy/io/matlab/tests/data/testminus_6.1_SOL2.mat +0 -0
  460. scipy/io/matlab/tests/data/testminus_6.5.1_GLNX86.mat +0 -0
  461. scipy/io/matlab/tests/data/testminus_7.1_GLNX86.mat +0 -0
  462. scipy/io/matlab/tests/data/testminus_7.4_GLNX86.mat +0 -0
  463. scipy/io/matlab/tests/data/testmulti_4.2c_SOL2.mat +0 -0
  464. scipy/io/matlab/tests/data/testmulti_7.1_GLNX86.mat +0 -0
  465. scipy/io/matlab/tests/data/testmulti_7.4_GLNX86.mat +0 -0
  466. scipy/io/matlab/tests/data/testobject_6.1_SOL2.mat +0 -0
  467. scipy/io/matlab/tests/data/testobject_6.5.1_GLNX86.mat +0 -0
  468. scipy/io/matlab/tests/data/testobject_7.1_GLNX86.mat +0 -0
  469. scipy/io/matlab/tests/data/testobject_7.4_GLNX86.mat +0 -0
  470. scipy/io/matlab/tests/data/testonechar_4.2c_SOL2.mat +0 -0
  471. scipy/io/matlab/tests/data/testonechar_6.1_SOL2.mat +0 -0
  472. scipy/io/matlab/tests/data/testonechar_6.5.1_GLNX86.mat +0 -0
  473. scipy/io/matlab/tests/data/testonechar_7.1_GLNX86.mat +0 -0
  474. scipy/io/matlab/tests/data/testonechar_7.4_GLNX86.mat +0 -0
  475. scipy/io/matlab/tests/data/testscalarcell_7.4_GLNX86.mat +0 -0
  476. scipy/io/matlab/tests/data/testsimplecell.mat +0 -0
  477. scipy/io/matlab/tests/data/testsparse_4.2c_SOL2.mat +0 -0
  478. scipy/io/matlab/tests/data/testsparse_6.1_SOL2.mat +0 -0
  479. scipy/io/matlab/tests/data/testsparse_6.5.1_GLNX86.mat +0 -0
  480. scipy/io/matlab/tests/data/testsparse_7.1_GLNX86.mat +0 -0
  481. scipy/io/matlab/tests/data/testsparse_7.4_GLNX86.mat +0 -0
  482. scipy/io/matlab/tests/data/testsparsecomplex_4.2c_SOL2.mat +0 -0
  483. scipy/io/matlab/tests/data/testsparsecomplex_6.1_SOL2.mat +0 -0
  484. scipy/io/matlab/tests/data/testsparsecomplex_6.5.1_GLNX86.mat +0 -0
  485. scipy/io/matlab/tests/data/testsparsecomplex_7.1_GLNX86.mat +0 -0
  486. scipy/io/matlab/tests/data/testsparsecomplex_7.4_GLNX86.mat +0 -0
  487. scipy/io/matlab/tests/data/testsparsefloat_7.4_GLNX86.mat +0 -0
  488. scipy/io/matlab/tests/data/teststring_4.2c_SOL2.mat +0 -0
  489. scipy/io/matlab/tests/data/teststring_6.1_SOL2.mat +0 -0
  490. scipy/io/matlab/tests/data/teststring_6.5.1_GLNX86.mat +0 -0
  491. scipy/io/matlab/tests/data/teststring_7.1_GLNX86.mat +0 -0
  492. scipy/io/matlab/tests/data/teststring_7.4_GLNX86.mat +0 -0
  493. scipy/io/matlab/tests/data/teststringarray_4.2c_SOL2.mat +0 -0
  494. scipy/io/matlab/tests/data/teststringarray_6.1_SOL2.mat +0 -0
  495. scipy/io/matlab/tests/data/teststringarray_6.5.1_GLNX86.mat +0 -0
  496. scipy/io/matlab/tests/data/teststringarray_7.1_GLNX86.mat +0 -0
  497. scipy/io/matlab/tests/data/teststringarray_7.4_GLNX86.mat +0 -0
  498. scipy/io/matlab/tests/data/teststruct_6.1_SOL2.mat +0 -0
  499. scipy/io/matlab/tests/data/teststruct_6.5.1_GLNX86.mat +0 -0
  500. scipy/io/matlab/tests/data/teststruct_7.1_GLNX86.mat +0 -0
  501. scipy/io/matlab/tests/data/teststruct_7.4_GLNX86.mat +0 -0
  502. scipy/io/matlab/tests/data/teststructarr_6.1_SOL2.mat +0 -0
  503. scipy/io/matlab/tests/data/teststructarr_6.5.1_GLNX86.mat +0 -0
  504. scipy/io/matlab/tests/data/teststructarr_7.1_GLNX86.mat +0 -0
  505. scipy/io/matlab/tests/data/teststructarr_7.4_GLNX86.mat +0 -0
  506. scipy/io/matlab/tests/data/teststructnest_6.1_SOL2.mat +0 -0
  507. scipy/io/matlab/tests/data/teststructnest_6.5.1_GLNX86.mat +0 -0
  508. scipy/io/matlab/tests/data/teststructnest_7.1_GLNX86.mat +0 -0
  509. scipy/io/matlab/tests/data/teststructnest_7.4_GLNX86.mat +0 -0
  510. scipy/io/matlab/tests/data/testunicode_7.1_GLNX86.mat +0 -0
  511. scipy/io/matlab/tests/data/testunicode_7.4_GLNX86.mat +0 -0
  512. scipy/io/matlab/tests/data/testvec_4_GLNX86.mat +0 -0
  513. scipy/io/matlab/tests/test_byteordercodes.py +29 -0
  514. scipy/io/matlab/tests/test_mio.py +1399 -0
  515. scipy/io/matlab/tests/test_mio5_utils.py +179 -0
  516. scipy/io/matlab/tests/test_mio_funcs.py +51 -0
  517. scipy/io/matlab/tests/test_mio_utils.py +45 -0
  518. scipy/io/matlab/tests/test_miobase.py +32 -0
  519. scipy/io/matlab/tests/test_pathological.py +33 -0
  520. scipy/io/matlab/tests/test_streams.py +241 -0
  521. scipy/io/mmio.py +17 -0
  522. scipy/io/netcdf.py +17 -0
  523. scipy/io/tests/__init__.py +0 -0
  524. scipy/io/tests/data/Transparent Busy.ani +0 -0
  525. scipy/io/tests/data/array_float32_1d.sav +0 -0
  526. scipy/io/tests/data/array_float32_2d.sav +0 -0
  527. scipy/io/tests/data/array_float32_3d.sav +0 -0
  528. scipy/io/tests/data/array_float32_4d.sav +0 -0
  529. scipy/io/tests/data/array_float32_5d.sav +0 -0
  530. scipy/io/tests/data/array_float32_6d.sav +0 -0
  531. scipy/io/tests/data/array_float32_7d.sav +0 -0
  532. scipy/io/tests/data/array_float32_8d.sav +0 -0
  533. scipy/io/tests/data/array_float32_pointer_1d.sav +0 -0
  534. scipy/io/tests/data/array_float32_pointer_2d.sav +0 -0
  535. scipy/io/tests/data/array_float32_pointer_3d.sav +0 -0
  536. scipy/io/tests/data/array_float32_pointer_4d.sav +0 -0
  537. scipy/io/tests/data/array_float32_pointer_5d.sav +0 -0
  538. scipy/io/tests/data/array_float32_pointer_6d.sav +0 -0
  539. scipy/io/tests/data/array_float32_pointer_7d.sav +0 -0
  540. scipy/io/tests/data/array_float32_pointer_8d.sav +0 -0
  541. scipy/io/tests/data/example_1.nc +0 -0
  542. scipy/io/tests/data/example_2.nc +0 -0
  543. scipy/io/tests/data/example_3_maskedvals.nc +0 -0
  544. scipy/io/tests/data/fortran-3x3d-2i.dat +0 -0
  545. scipy/io/tests/data/fortran-mixed.dat +0 -0
  546. scipy/io/tests/data/fortran-sf8-11x1x10.dat +0 -0
  547. scipy/io/tests/data/fortran-sf8-15x10x22.dat +0 -0
  548. scipy/io/tests/data/fortran-sf8-1x1x1.dat +0 -0
  549. scipy/io/tests/data/fortran-sf8-1x1x5.dat +0 -0
  550. scipy/io/tests/data/fortran-sf8-1x1x7.dat +0 -0
  551. scipy/io/tests/data/fortran-sf8-1x3x5.dat +0 -0
  552. scipy/io/tests/data/fortran-si4-11x1x10.dat +0 -0
  553. scipy/io/tests/data/fortran-si4-15x10x22.dat +0 -0
  554. scipy/io/tests/data/fortran-si4-1x1x1.dat +0 -0
  555. scipy/io/tests/data/fortran-si4-1x1x5.dat +0 -0
  556. scipy/io/tests/data/fortran-si4-1x1x7.dat +0 -0
  557. scipy/io/tests/data/fortran-si4-1x3x5.dat +0 -0
  558. scipy/io/tests/data/invalid_pointer.sav +0 -0
  559. scipy/io/tests/data/null_pointer.sav +0 -0
  560. scipy/io/tests/data/scalar_byte.sav +0 -0
  561. scipy/io/tests/data/scalar_byte_descr.sav +0 -0
  562. scipy/io/tests/data/scalar_complex32.sav +0 -0
  563. scipy/io/tests/data/scalar_complex64.sav +0 -0
  564. scipy/io/tests/data/scalar_float32.sav +0 -0
  565. scipy/io/tests/data/scalar_float64.sav +0 -0
  566. scipy/io/tests/data/scalar_heap_pointer.sav +0 -0
  567. scipy/io/tests/data/scalar_int16.sav +0 -0
  568. scipy/io/tests/data/scalar_int32.sav +0 -0
  569. scipy/io/tests/data/scalar_int64.sav +0 -0
  570. scipy/io/tests/data/scalar_string.sav +0 -0
  571. scipy/io/tests/data/scalar_uint16.sav +0 -0
  572. scipy/io/tests/data/scalar_uint32.sav +0 -0
  573. scipy/io/tests/data/scalar_uint64.sav +0 -0
  574. scipy/io/tests/data/struct_arrays.sav +0 -0
  575. scipy/io/tests/data/struct_arrays_byte_idl80.sav +0 -0
  576. scipy/io/tests/data/struct_arrays_replicated.sav +0 -0
  577. scipy/io/tests/data/struct_arrays_replicated_3d.sav +0 -0
  578. scipy/io/tests/data/struct_inherit.sav +0 -0
  579. scipy/io/tests/data/struct_pointer_arrays.sav +0 -0
  580. scipy/io/tests/data/struct_pointer_arrays_replicated.sav +0 -0
  581. scipy/io/tests/data/struct_pointer_arrays_replicated_3d.sav +0 -0
  582. scipy/io/tests/data/struct_pointers.sav +0 -0
  583. scipy/io/tests/data/struct_pointers_replicated.sav +0 -0
  584. scipy/io/tests/data/struct_pointers_replicated_3d.sav +0 -0
  585. scipy/io/tests/data/struct_scalars.sav +0 -0
  586. scipy/io/tests/data/struct_scalars_replicated.sav +0 -0
  587. scipy/io/tests/data/struct_scalars_replicated_3d.sav +0 -0
  588. scipy/io/tests/data/test-1234Hz-le-1ch-10S-20bit-extra.wav +0 -0
  589. scipy/io/tests/data/test-44100Hz-2ch-32bit-float-be.wav +0 -0
  590. scipy/io/tests/data/test-44100Hz-2ch-32bit-float-le.wav +0 -0
  591. scipy/io/tests/data/test-44100Hz-be-1ch-4bytes.wav +0 -0
  592. scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-early-eof-no-data.wav +0 -0
  593. scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-early-eof.wav +0 -0
  594. scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-incomplete-chunk.wav +0 -0
  595. scipy/io/tests/data/test-44100Hz-le-1ch-4bytes-rf64.wav +0 -0
  596. scipy/io/tests/data/test-44100Hz-le-1ch-4bytes.wav +0 -0
  597. scipy/io/tests/data/test-48000Hz-2ch-64bit-float-le-wavex.wav +0 -0
  598. scipy/io/tests/data/test-8000Hz-be-3ch-5S-24bit.wav +0 -0
  599. scipy/io/tests/data/test-8000Hz-le-1ch-1byte-ulaw.wav +0 -0
  600. scipy/io/tests/data/test-8000Hz-le-2ch-1byteu.wav +0 -0
  601. scipy/io/tests/data/test-8000Hz-le-3ch-5S-24bit-inconsistent.wav +0 -0
  602. scipy/io/tests/data/test-8000Hz-le-3ch-5S-24bit-rf64.wav +0 -0
  603. scipy/io/tests/data/test-8000Hz-le-3ch-5S-24bit.wav +0 -0
  604. scipy/io/tests/data/test-8000Hz-le-3ch-5S-36bit.wav +0 -0
  605. scipy/io/tests/data/test-8000Hz-le-3ch-5S-45bit.wav +0 -0
  606. scipy/io/tests/data/test-8000Hz-le-3ch-5S-53bit.wav +0 -0
  607. scipy/io/tests/data/test-8000Hz-le-3ch-5S-64bit.wav +0 -0
  608. scipy/io/tests/data/test-8000Hz-le-4ch-9S-12bit.wav +0 -0
  609. scipy/io/tests/data/test-8000Hz-le-5ch-9S-5bit.wav +0 -0
  610. scipy/io/tests/data/various_compressed.sav +0 -0
  611. scipy/io/tests/test_fortran.py +264 -0
  612. scipy/io/tests/test_idl.py +483 -0
  613. scipy/io/tests/test_mmio.py +831 -0
  614. scipy/io/tests/test_netcdf.py +550 -0
  615. scipy/io/tests/test_paths.py +93 -0
  616. scipy/io/tests/test_wavfile.py +501 -0
  617. scipy/io/wavfile.py +938 -0
  618. scipy/linalg/__init__.pxd +1 -0
  619. scipy/linalg/__init__.py +236 -0
  620. scipy/linalg/_basic.py +2146 -0
  621. scipy/linalg/_blas_subroutines.h +164 -0
  622. scipy/linalg/_cythonized_array_utils.cp313-win_arm64.lib +0 -0
  623. scipy/linalg/_cythonized_array_utils.cp313-win_arm64.pyd +0 -0
  624. scipy/linalg/_cythonized_array_utils.pxd +40 -0
  625. scipy/linalg/_cythonized_array_utils.pyi +16 -0
  626. scipy/linalg/_decomp.py +1645 -0
  627. scipy/linalg/_decomp_cholesky.py +413 -0
  628. scipy/linalg/_decomp_cossin.py +236 -0
  629. scipy/linalg/_decomp_interpolative.cp313-win_arm64.lib +0 -0
  630. scipy/linalg/_decomp_interpolative.cp313-win_arm64.pyd +0 -0
  631. scipy/linalg/_decomp_ldl.py +356 -0
  632. scipy/linalg/_decomp_lu.py +401 -0
  633. scipy/linalg/_decomp_lu_cython.cp313-win_arm64.lib +0 -0
  634. scipy/linalg/_decomp_lu_cython.cp313-win_arm64.pyd +0 -0
  635. scipy/linalg/_decomp_lu_cython.pyi +6 -0
  636. scipy/linalg/_decomp_polar.py +113 -0
  637. scipy/linalg/_decomp_qr.py +494 -0
  638. scipy/linalg/_decomp_qz.py +452 -0
  639. scipy/linalg/_decomp_schur.py +336 -0
  640. scipy/linalg/_decomp_svd.py +545 -0
  641. scipy/linalg/_decomp_update.cp313-win_arm64.lib +0 -0
  642. scipy/linalg/_decomp_update.cp313-win_arm64.pyd +0 -0
  643. scipy/linalg/_expm_frechet.py +417 -0
  644. scipy/linalg/_fblas.cp313-win_arm64.lib +0 -0
  645. scipy/linalg/_fblas.cp313-win_arm64.pyd +0 -0
  646. scipy/linalg/_flapack.cp313-win_arm64.lib +0 -0
  647. scipy/linalg/_flapack.cp313-win_arm64.pyd +0 -0
  648. scipy/linalg/_lapack_subroutines.h +1521 -0
  649. scipy/linalg/_linalg_pythran.cp313-win_arm64.lib +0 -0
  650. scipy/linalg/_linalg_pythran.cp313-win_arm64.pyd +0 -0
  651. scipy/linalg/_matfuncs.py +1050 -0
  652. scipy/linalg/_matfuncs_expm.cp313-win_arm64.lib +0 -0
  653. scipy/linalg/_matfuncs_expm.cp313-win_arm64.pyd +0 -0
  654. scipy/linalg/_matfuncs_expm.pyi +6 -0
  655. scipy/linalg/_matfuncs_inv_ssq.py +886 -0
  656. scipy/linalg/_matfuncs_schur_sqrtm.cp313-win_arm64.lib +0 -0
  657. scipy/linalg/_matfuncs_schur_sqrtm.cp313-win_arm64.pyd +0 -0
  658. scipy/linalg/_matfuncs_sqrtm.py +107 -0
  659. scipy/linalg/_matfuncs_sqrtm_triu.cp313-win_arm64.lib +0 -0
  660. scipy/linalg/_matfuncs_sqrtm_triu.cp313-win_arm64.pyd +0 -0
  661. scipy/linalg/_misc.py +191 -0
  662. scipy/linalg/_procrustes.py +113 -0
  663. scipy/linalg/_sketches.py +189 -0
  664. scipy/linalg/_solve_toeplitz.cp313-win_arm64.lib +0 -0
  665. scipy/linalg/_solve_toeplitz.cp313-win_arm64.pyd +0 -0
  666. scipy/linalg/_solvers.py +862 -0
  667. scipy/linalg/_special_matrices.py +1322 -0
  668. scipy/linalg/_testutils.py +65 -0
  669. scipy/linalg/basic.py +23 -0
  670. scipy/linalg/blas.py +495 -0
  671. scipy/linalg/cython_blas.cp313-win_arm64.lib +0 -0
  672. scipy/linalg/cython_blas.cp313-win_arm64.pyd +0 -0
  673. scipy/linalg/cython_blas.pxd +169 -0
  674. scipy/linalg/cython_blas.pyx +1432 -0
  675. scipy/linalg/cython_lapack.cp313-win_arm64.lib +0 -0
  676. scipy/linalg/cython_lapack.cp313-win_arm64.pyd +0 -0
  677. scipy/linalg/cython_lapack.pxd +1528 -0
  678. scipy/linalg/cython_lapack.pyx +12045 -0
  679. scipy/linalg/decomp.py +23 -0
  680. scipy/linalg/decomp_cholesky.py +21 -0
  681. scipy/linalg/decomp_lu.py +21 -0
  682. scipy/linalg/decomp_qr.py +20 -0
  683. scipy/linalg/decomp_schur.py +21 -0
  684. scipy/linalg/decomp_svd.py +21 -0
  685. scipy/linalg/interpolative.py +989 -0
  686. scipy/linalg/lapack.py +1081 -0
  687. scipy/linalg/matfuncs.py +23 -0
  688. scipy/linalg/misc.py +21 -0
  689. scipy/linalg/special_matrices.py +22 -0
  690. scipy/linalg/tests/__init__.py +0 -0
  691. scipy/linalg/tests/_cython_examples/extending.pyx +23 -0
  692. scipy/linalg/tests/_cython_examples/meson.build +34 -0
  693. scipy/linalg/tests/data/carex_15_data.npz +0 -0
  694. scipy/linalg/tests/data/carex_18_data.npz +0 -0
  695. scipy/linalg/tests/data/carex_19_data.npz +0 -0
  696. scipy/linalg/tests/data/carex_20_data.npz +0 -0
  697. scipy/linalg/tests/data/carex_6_data.npz +0 -0
  698. scipy/linalg/tests/data/gendare_20170120_data.npz +0 -0
  699. scipy/linalg/tests/test_basic.py +2074 -0
  700. scipy/linalg/tests/test_batch.py +588 -0
  701. scipy/linalg/tests/test_blas.py +1127 -0
  702. scipy/linalg/tests/test_cython_blas.py +118 -0
  703. scipy/linalg/tests/test_cython_lapack.py +22 -0
  704. scipy/linalg/tests/test_cythonized_array_utils.py +130 -0
  705. scipy/linalg/tests/test_decomp.py +3189 -0
  706. scipy/linalg/tests/test_decomp_cholesky.py +268 -0
  707. scipy/linalg/tests/test_decomp_cossin.py +314 -0
  708. scipy/linalg/tests/test_decomp_ldl.py +137 -0
  709. scipy/linalg/tests/test_decomp_lu.py +308 -0
  710. scipy/linalg/tests/test_decomp_polar.py +110 -0
  711. scipy/linalg/tests/test_decomp_update.py +1701 -0
  712. scipy/linalg/tests/test_extending.py +46 -0
  713. scipy/linalg/tests/test_fblas.py +607 -0
  714. scipy/linalg/tests/test_interpolative.py +232 -0
  715. scipy/linalg/tests/test_lapack.py +3620 -0
  716. scipy/linalg/tests/test_matfuncs.py +1125 -0
  717. scipy/linalg/tests/test_matmul_toeplitz.py +136 -0
  718. scipy/linalg/tests/test_procrustes.py +214 -0
  719. scipy/linalg/tests/test_sketches.py +118 -0
  720. scipy/linalg/tests/test_solve_toeplitz.py +150 -0
  721. scipy/linalg/tests/test_solvers.py +844 -0
  722. scipy/linalg/tests/test_special_matrices.py +636 -0
  723. scipy/misc/__init__.py +6 -0
  724. scipy/misc/common.py +6 -0
  725. scipy/misc/doccer.py +6 -0
  726. scipy/ndimage/__init__.py +174 -0
  727. scipy/ndimage/_ctest.cp313-win_arm64.lib +0 -0
  728. scipy/ndimage/_ctest.cp313-win_arm64.pyd +0 -0
  729. scipy/ndimage/_cytest.cp313-win_arm64.lib +0 -0
  730. scipy/ndimage/_cytest.cp313-win_arm64.pyd +0 -0
  731. scipy/ndimage/_delegators.py +303 -0
  732. scipy/ndimage/_filters.py +2422 -0
  733. scipy/ndimage/_fourier.py +306 -0
  734. scipy/ndimage/_interpolation.py +1033 -0
  735. scipy/ndimage/_measurements.py +1689 -0
  736. scipy/ndimage/_morphology.py +2634 -0
  737. scipy/ndimage/_nd_image.cp313-win_arm64.lib +0 -0
  738. scipy/ndimage/_nd_image.cp313-win_arm64.pyd +0 -0
  739. scipy/ndimage/_ndimage_api.py +16 -0
  740. scipy/ndimage/_ni_docstrings.py +214 -0
  741. scipy/ndimage/_ni_label.cp313-win_arm64.lib +0 -0
  742. scipy/ndimage/_ni_label.cp313-win_arm64.pyd +0 -0
  743. scipy/ndimage/_ni_support.py +139 -0
  744. scipy/ndimage/_rank_filter_1d.cp313-win_arm64.lib +0 -0
  745. scipy/ndimage/_rank_filter_1d.cp313-win_arm64.pyd +0 -0
  746. scipy/ndimage/_support_alternative_backends.py +84 -0
  747. scipy/ndimage/filters.py +27 -0
  748. scipy/ndimage/fourier.py +21 -0
  749. scipy/ndimage/interpolation.py +22 -0
  750. scipy/ndimage/measurements.py +24 -0
  751. scipy/ndimage/morphology.py +27 -0
  752. scipy/ndimage/tests/__init__.py +12 -0
  753. scipy/ndimage/tests/data/label_inputs.txt +21 -0
  754. scipy/ndimage/tests/data/label_results.txt +294 -0
  755. scipy/ndimage/tests/data/label_strels.txt +42 -0
  756. scipy/ndimage/tests/dots.png +0 -0
  757. scipy/ndimage/tests/test_c_api.py +102 -0
  758. scipy/ndimage/tests/test_datatypes.py +67 -0
  759. scipy/ndimage/tests/test_filters.py +3083 -0
  760. scipy/ndimage/tests/test_fourier.py +187 -0
  761. scipy/ndimage/tests/test_interpolation.py +1491 -0
  762. scipy/ndimage/tests/test_measurements.py +1592 -0
  763. scipy/ndimage/tests/test_morphology.py +2950 -0
  764. scipy/ndimage/tests/test_ni_support.py +78 -0
  765. scipy/ndimage/tests/test_splines.py +70 -0
  766. scipy/odr/__init__.py +131 -0
  767. scipy/odr/__odrpack.cp313-win_arm64.lib +0 -0
  768. scipy/odr/__odrpack.cp313-win_arm64.pyd +0 -0
  769. scipy/odr/_add_newdocs.py +34 -0
  770. scipy/odr/_models.py +315 -0
  771. scipy/odr/_odrpack.py +1154 -0
  772. scipy/odr/models.py +20 -0
  773. scipy/odr/odrpack.py +21 -0
  774. scipy/odr/tests/__init__.py +0 -0
  775. scipy/odr/tests/test_odr.py +607 -0
  776. scipy/optimize/__init__.pxd +1 -0
  777. scipy/optimize/__init__.py +460 -0
  778. scipy/optimize/_basinhopping.py +741 -0
  779. scipy/optimize/_bglu_dense.cp313-win_arm64.lib +0 -0
  780. scipy/optimize/_bglu_dense.cp313-win_arm64.pyd +0 -0
  781. scipy/optimize/_bracket.py +706 -0
  782. scipy/optimize/_chandrupatla.py +551 -0
  783. scipy/optimize/_cobyla_py.py +297 -0
  784. scipy/optimize/_cobyqa_py.py +72 -0
  785. scipy/optimize/_constraints.py +598 -0
  786. scipy/optimize/_dcsrch.py +728 -0
  787. scipy/optimize/_differentiable_functions.py +835 -0
  788. scipy/optimize/_differentialevolution.py +1970 -0
  789. scipy/optimize/_direct.cp313-win_arm64.lib +0 -0
  790. scipy/optimize/_direct.cp313-win_arm64.pyd +0 -0
  791. scipy/optimize/_direct_py.py +280 -0
  792. scipy/optimize/_dual_annealing.py +732 -0
  793. scipy/optimize/_elementwise.py +798 -0
  794. scipy/optimize/_group_columns.cp313-win_arm64.lib +0 -0
  795. scipy/optimize/_group_columns.cp313-win_arm64.pyd +0 -0
  796. scipy/optimize/_hessian_update_strategy.py +479 -0
  797. scipy/optimize/_highspy/__init__.py +0 -0
  798. scipy/optimize/_highspy/_core.cp313-win_arm64.lib +0 -0
  799. scipy/optimize/_highspy/_core.cp313-win_arm64.pyd +0 -0
  800. scipy/optimize/_highspy/_highs_options.cp313-win_arm64.lib +0 -0
  801. scipy/optimize/_highspy/_highs_options.cp313-win_arm64.pyd +0 -0
  802. scipy/optimize/_highspy/_highs_wrapper.py +338 -0
  803. scipy/optimize/_isotonic.py +157 -0
  804. scipy/optimize/_lbfgsb.cp313-win_arm64.lib +0 -0
  805. scipy/optimize/_lbfgsb.cp313-win_arm64.pyd +0 -0
  806. scipy/optimize/_lbfgsb_py.py +634 -0
  807. scipy/optimize/_linesearch.py +896 -0
  808. scipy/optimize/_linprog.py +733 -0
  809. scipy/optimize/_linprog_doc.py +1434 -0
  810. scipy/optimize/_linprog_highs.py +422 -0
  811. scipy/optimize/_linprog_ip.py +1141 -0
  812. scipy/optimize/_linprog_rs.py +572 -0
  813. scipy/optimize/_linprog_simplex.py +663 -0
  814. scipy/optimize/_linprog_util.py +1521 -0
  815. scipy/optimize/_lsap.cp313-win_arm64.lib +0 -0
  816. scipy/optimize/_lsap.cp313-win_arm64.pyd +0 -0
  817. scipy/optimize/_lsq/__init__.py +5 -0
  818. scipy/optimize/_lsq/bvls.py +183 -0
  819. scipy/optimize/_lsq/common.py +731 -0
  820. scipy/optimize/_lsq/dogbox.py +345 -0
  821. scipy/optimize/_lsq/givens_elimination.cp313-win_arm64.lib +0 -0
  822. scipy/optimize/_lsq/givens_elimination.cp313-win_arm64.pyd +0 -0
  823. scipy/optimize/_lsq/least_squares.py +1044 -0
  824. scipy/optimize/_lsq/lsq_linear.py +361 -0
  825. scipy/optimize/_lsq/trf.py +587 -0
  826. scipy/optimize/_lsq/trf_linear.py +249 -0
  827. scipy/optimize/_milp.py +394 -0
  828. scipy/optimize/_minimize.py +1199 -0
  829. scipy/optimize/_minpack.cp313-win_arm64.lib +0 -0
  830. scipy/optimize/_minpack.cp313-win_arm64.pyd +0 -0
  831. scipy/optimize/_minpack_py.py +1178 -0
  832. scipy/optimize/_moduleTNC.cp313-win_arm64.lib +0 -0
  833. scipy/optimize/_moduleTNC.cp313-win_arm64.pyd +0 -0
  834. scipy/optimize/_nnls.py +96 -0
  835. scipy/optimize/_nonlin.py +1634 -0
  836. scipy/optimize/_numdiff.py +963 -0
  837. scipy/optimize/_optimize.py +4169 -0
  838. scipy/optimize/_pava_pybind.cp313-win_arm64.lib +0 -0
  839. scipy/optimize/_pava_pybind.cp313-win_arm64.pyd +0 -0
  840. scipy/optimize/_qap.py +760 -0
  841. scipy/optimize/_remove_redundancy.py +522 -0
  842. scipy/optimize/_root.py +732 -0
  843. scipy/optimize/_root_scalar.py +538 -0
  844. scipy/optimize/_shgo.py +1606 -0
  845. scipy/optimize/_shgo_lib/__init__.py +0 -0
  846. scipy/optimize/_shgo_lib/_complex.py +1225 -0
  847. scipy/optimize/_shgo_lib/_vertex.py +460 -0
  848. scipy/optimize/_slsqp_py.py +603 -0
  849. scipy/optimize/_slsqplib.cp313-win_arm64.lib +0 -0
  850. scipy/optimize/_slsqplib.cp313-win_arm64.pyd +0 -0
  851. scipy/optimize/_spectral.py +260 -0
  852. scipy/optimize/_tnc.py +438 -0
  853. scipy/optimize/_trlib/__init__.py +12 -0
  854. scipy/optimize/_trlib/_trlib.cp313-win_arm64.lib +0 -0
  855. scipy/optimize/_trlib/_trlib.cp313-win_arm64.pyd +0 -0
  856. scipy/optimize/_trustregion.py +318 -0
  857. scipy/optimize/_trustregion_constr/__init__.py +6 -0
  858. scipy/optimize/_trustregion_constr/canonical_constraint.py +390 -0
  859. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +231 -0
  860. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +584 -0
  861. scipy/optimize/_trustregion_constr/projections.py +411 -0
  862. scipy/optimize/_trustregion_constr/qp_subproblem.py +637 -0
  863. scipy/optimize/_trustregion_constr/report.py +49 -0
  864. scipy/optimize/_trustregion_constr/tests/__init__.py +0 -0
  865. scipy/optimize/_trustregion_constr/tests/test_canonical_constraint.py +296 -0
  866. scipy/optimize/_trustregion_constr/tests/test_nested_minimize.py +39 -0
  867. scipy/optimize/_trustregion_constr/tests/test_projections.py +214 -0
  868. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +645 -0
  869. scipy/optimize/_trustregion_constr/tests/test_report.py +34 -0
  870. scipy/optimize/_trustregion_constr/tr_interior_point.py +361 -0
  871. scipy/optimize/_trustregion_dogleg.py +122 -0
  872. scipy/optimize/_trustregion_exact.py +437 -0
  873. scipy/optimize/_trustregion_krylov.py +65 -0
  874. scipy/optimize/_trustregion_ncg.py +126 -0
  875. scipy/optimize/_tstutils.py +972 -0
  876. scipy/optimize/_zeros.cp313-win_arm64.lib +0 -0
  877. scipy/optimize/_zeros.cp313-win_arm64.pyd +0 -0
  878. scipy/optimize/_zeros_py.py +1475 -0
  879. scipy/optimize/cobyla.py +19 -0
  880. scipy/optimize/cython_optimize/__init__.py +133 -0
  881. scipy/optimize/cython_optimize/_zeros.cp313-win_arm64.lib +0 -0
  882. scipy/optimize/cython_optimize/_zeros.cp313-win_arm64.pyd +0 -0
  883. scipy/optimize/cython_optimize/_zeros.pxd +33 -0
  884. scipy/optimize/cython_optimize/c_zeros.pxd +26 -0
  885. scipy/optimize/cython_optimize.pxd +11 -0
  886. scipy/optimize/elementwise.py +38 -0
  887. scipy/optimize/lbfgsb.py +23 -0
  888. scipy/optimize/linesearch.py +18 -0
  889. scipy/optimize/minpack.py +27 -0
  890. scipy/optimize/minpack2.py +17 -0
  891. scipy/optimize/moduleTNC.py +19 -0
  892. scipy/optimize/nonlin.py +29 -0
  893. scipy/optimize/optimize.py +40 -0
  894. scipy/optimize/slsqp.py +22 -0
  895. scipy/optimize/tests/__init__.py +0 -0
  896. scipy/optimize/tests/_cython_examples/extending.pyx +43 -0
  897. scipy/optimize/tests/_cython_examples/meson.build +32 -0
  898. scipy/optimize/tests/test__basinhopping.py +535 -0
  899. scipy/optimize/tests/test__differential_evolution.py +1703 -0
  900. scipy/optimize/tests/test__dual_annealing.py +416 -0
  901. scipy/optimize/tests/test__linprog_clean_inputs.py +312 -0
  902. scipy/optimize/tests/test__numdiff.py +885 -0
  903. scipy/optimize/tests/test__remove_redundancy.py +228 -0
  904. scipy/optimize/tests/test__root.py +124 -0
  905. scipy/optimize/tests/test__shgo.py +1164 -0
  906. scipy/optimize/tests/test__spectral.py +226 -0
  907. scipy/optimize/tests/test_bracket.py +896 -0
  908. scipy/optimize/tests/test_chandrupatla.py +982 -0
  909. scipy/optimize/tests/test_cobyla.py +195 -0
  910. scipy/optimize/tests/test_cobyqa.py +252 -0
  911. scipy/optimize/tests/test_constraint_conversion.py +286 -0
  912. scipy/optimize/tests/test_constraints.py +255 -0
  913. scipy/optimize/tests/test_cython_optimize.py +92 -0
  914. scipy/optimize/tests/test_differentiable_functions.py +1025 -0
  915. scipy/optimize/tests/test_direct.py +321 -0
  916. scipy/optimize/tests/test_extending.py +28 -0
  917. scipy/optimize/tests/test_hessian_update_strategy.py +300 -0
  918. scipy/optimize/tests/test_isotonic_regression.py +167 -0
  919. scipy/optimize/tests/test_lbfgsb_hessinv.py +65 -0
  920. scipy/optimize/tests/test_lbfgsb_setulb.py +122 -0
  921. scipy/optimize/tests/test_least_squares.py +986 -0
  922. scipy/optimize/tests/test_linear_assignment.py +116 -0
  923. scipy/optimize/tests/test_linesearch.py +328 -0
  924. scipy/optimize/tests/test_linprog.py +2577 -0
  925. scipy/optimize/tests/test_lsq_common.py +297 -0
  926. scipy/optimize/tests/test_lsq_linear.py +287 -0
  927. scipy/optimize/tests/test_milp.py +459 -0
  928. scipy/optimize/tests/test_minimize_constrained.py +845 -0
  929. scipy/optimize/tests/test_minpack.py +1194 -0
  930. scipy/optimize/tests/test_nnls.py +469 -0
  931. scipy/optimize/tests/test_nonlin.py +572 -0
  932. scipy/optimize/tests/test_optimize.py +3344 -0
  933. scipy/optimize/tests/test_quadratic_assignment.py +455 -0
  934. scipy/optimize/tests/test_regression.py +40 -0
  935. scipy/optimize/tests/test_slsqp.py +645 -0
  936. scipy/optimize/tests/test_tnc.py +345 -0
  937. scipy/optimize/tests/test_trustregion.py +110 -0
  938. scipy/optimize/tests/test_trustregion_exact.py +351 -0
  939. scipy/optimize/tests/test_trustregion_krylov.py +170 -0
  940. scipy/optimize/tests/test_zeros.py +998 -0
  941. scipy/optimize/tnc.py +22 -0
  942. scipy/optimize/zeros.py +26 -0
  943. scipy/signal/__init__.py +316 -0
  944. scipy/signal/_arraytools.py +264 -0
  945. scipy/signal/_czt.py +575 -0
  946. scipy/signal/_delegators.py +568 -0
  947. scipy/signal/_filter_design.py +5893 -0
  948. scipy/signal/_fir_filter_design.py +1458 -0
  949. scipy/signal/_lti_conversion.py +534 -0
  950. scipy/signal/_ltisys.py +3546 -0
  951. scipy/signal/_max_len_seq.py +139 -0
  952. scipy/signal/_max_len_seq_inner.cp313-win_arm64.lib +0 -0
  953. scipy/signal/_max_len_seq_inner.cp313-win_arm64.pyd +0 -0
  954. scipy/signal/_peak_finding.py +1310 -0
  955. scipy/signal/_peak_finding_utils.cp313-win_arm64.lib +0 -0
  956. scipy/signal/_peak_finding_utils.cp313-win_arm64.pyd +0 -0
  957. scipy/signal/_polyutils.py +172 -0
  958. scipy/signal/_savitzky_golay.py +357 -0
  959. scipy/signal/_short_time_fft.py +2228 -0
  960. scipy/signal/_signal_api.py +30 -0
  961. scipy/signal/_signaltools.py +5309 -0
  962. scipy/signal/_sigtools.cp313-win_arm64.lib +0 -0
  963. scipy/signal/_sigtools.cp313-win_arm64.pyd +0 -0
  964. scipy/signal/_sosfilt.cp313-win_arm64.lib +0 -0
  965. scipy/signal/_sosfilt.cp313-win_arm64.pyd +0 -0
  966. scipy/signal/_spectral_py.py +2471 -0
  967. scipy/signal/_spline.cp313-win_arm64.lib +0 -0
  968. scipy/signal/_spline.cp313-win_arm64.pyd +0 -0
  969. scipy/signal/_spline.pyi +34 -0
  970. scipy/signal/_spline_filters.py +848 -0
  971. scipy/signal/_support_alternative_backends.py +73 -0
  972. scipy/signal/_upfirdn.py +219 -0
  973. scipy/signal/_upfirdn_apply.cp313-win_arm64.lib +0 -0
  974. scipy/signal/_upfirdn_apply.cp313-win_arm64.pyd +0 -0
  975. scipy/signal/_waveforms.py +687 -0
  976. scipy/signal/_wavelets.py +29 -0
  977. scipy/signal/bsplines.py +21 -0
  978. scipy/signal/filter_design.py +28 -0
  979. scipy/signal/fir_filter_design.py +21 -0
  980. scipy/signal/lti_conversion.py +20 -0
  981. scipy/signal/ltisys.py +25 -0
  982. scipy/signal/signaltools.py +27 -0
  983. scipy/signal/spectral.py +21 -0
  984. scipy/signal/spline.py +18 -0
  985. scipy/signal/tests/__init__.py +0 -0
  986. scipy/signal/tests/_scipy_spectral_test_shim.py +311 -0
  987. scipy/signal/tests/mpsig.py +122 -0
  988. scipy/signal/tests/test_array_tools.py +111 -0
  989. scipy/signal/tests/test_bsplines.py +365 -0
  990. scipy/signal/tests/test_cont2discrete.py +424 -0
  991. scipy/signal/tests/test_czt.py +221 -0
  992. scipy/signal/tests/test_dltisys.py +599 -0
  993. scipy/signal/tests/test_filter_design.py +4744 -0
  994. scipy/signal/tests/test_fir_filter_design.py +851 -0
  995. scipy/signal/tests/test_ltisys.py +1225 -0
  996. scipy/signal/tests/test_max_len_seq.py +71 -0
  997. scipy/signal/tests/test_peak_finding.py +915 -0
  998. scipy/signal/tests/test_result_type.py +51 -0
  999. scipy/signal/tests/test_savitzky_golay.py +363 -0
  1000. scipy/signal/tests/test_short_time_fft.py +1107 -0
  1001. scipy/signal/tests/test_signaltools.py +4735 -0
  1002. scipy/signal/tests/test_spectral.py +2141 -0
  1003. scipy/signal/tests/test_splines.py +427 -0
  1004. scipy/signal/tests/test_upfirdn.py +322 -0
  1005. scipy/signal/tests/test_waveforms.py +400 -0
  1006. scipy/signal/tests/test_wavelets.py +59 -0
  1007. scipy/signal/tests/test_windows.py +987 -0
  1008. scipy/signal/waveforms.py +20 -0
  1009. scipy/signal/wavelets.py +17 -0
  1010. scipy/signal/windows/__init__.py +52 -0
  1011. scipy/signal/windows/_windows.py +2513 -0
  1012. scipy/signal/windows/windows.py +23 -0
  1013. scipy/sparse/__init__.py +350 -0
  1014. scipy/sparse/_base.py +1613 -0
  1015. scipy/sparse/_bsr.py +880 -0
  1016. scipy/sparse/_compressed.py +1328 -0
  1017. scipy/sparse/_construct.py +1454 -0
  1018. scipy/sparse/_coo.py +1581 -0
  1019. scipy/sparse/_csc.py +367 -0
  1020. scipy/sparse/_csparsetools.cp313-win_arm64.lib +0 -0
  1021. scipy/sparse/_csparsetools.cp313-win_arm64.pyd +0 -0
  1022. scipy/sparse/_csr.py +558 -0
  1023. scipy/sparse/_data.py +569 -0
  1024. scipy/sparse/_dia.py +677 -0
  1025. scipy/sparse/_dok.py +669 -0
  1026. scipy/sparse/_extract.py +178 -0
  1027. scipy/sparse/_index.py +444 -0
  1028. scipy/sparse/_lil.py +632 -0
  1029. scipy/sparse/_matrix.py +169 -0
  1030. scipy/sparse/_matrix_io.py +167 -0
  1031. scipy/sparse/_sparsetools.cp313-win_arm64.lib +0 -0
  1032. scipy/sparse/_sparsetools.cp313-win_arm64.pyd +0 -0
  1033. scipy/sparse/_spfuncs.py +76 -0
  1034. scipy/sparse/_sputils.py +632 -0
  1035. scipy/sparse/base.py +24 -0
  1036. scipy/sparse/bsr.py +22 -0
  1037. scipy/sparse/compressed.py +20 -0
  1038. scipy/sparse/construct.py +38 -0
  1039. scipy/sparse/coo.py +23 -0
  1040. scipy/sparse/csc.py +22 -0
  1041. scipy/sparse/csgraph/__init__.py +210 -0
  1042. scipy/sparse/csgraph/_flow.cp313-win_arm64.lib +0 -0
  1043. scipy/sparse/csgraph/_flow.cp313-win_arm64.pyd +0 -0
  1044. scipy/sparse/csgraph/_laplacian.py +563 -0
  1045. scipy/sparse/csgraph/_matching.cp313-win_arm64.lib +0 -0
  1046. scipy/sparse/csgraph/_matching.cp313-win_arm64.pyd +0 -0
  1047. scipy/sparse/csgraph/_min_spanning_tree.cp313-win_arm64.lib +0 -0
  1048. scipy/sparse/csgraph/_min_spanning_tree.cp313-win_arm64.pyd +0 -0
  1049. scipy/sparse/csgraph/_reordering.cp313-win_arm64.lib +0 -0
  1050. scipy/sparse/csgraph/_reordering.cp313-win_arm64.pyd +0 -0
  1051. scipy/sparse/csgraph/_shortest_path.cp313-win_arm64.lib +0 -0
  1052. scipy/sparse/csgraph/_shortest_path.cp313-win_arm64.pyd +0 -0
  1053. scipy/sparse/csgraph/_tools.cp313-win_arm64.lib +0 -0
  1054. scipy/sparse/csgraph/_tools.cp313-win_arm64.pyd +0 -0
  1055. scipy/sparse/csgraph/_traversal.cp313-win_arm64.lib +0 -0
  1056. scipy/sparse/csgraph/_traversal.cp313-win_arm64.pyd +0 -0
  1057. scipy/sparse/csgraph/_validation.py +66 -0
  1058. scipy/sparse/csgraph/tests/__init__.py +0 -0
  1059. scipy/sparse/csgraph/tests/test_connected_components.py +119 -0
  1060. scipy/sparse/csgraph/tests/test_conversions.py +61 -0
  1061. scipy/sparse/csgraph/tests/test_flow.py +209 -0
  1062. scipy/sparse/csgraph/tests/test_graph_laplacian.py +368 -0
  1063. scipy/sparse/csgraph/tests/test_matching.py +307 -0
  1064. scipy/sparse/csgraph/tests/test_pydata_sparse.py +197 -0
  1065. scipy/sparse/csgraph/tests/test_reordering.py +70 -0
  1066. scipy/sparse/csgraph/tests/test_shortest_path.py +540 -0
  1067. scipy/sparse/csgraph/tests/test_spanning_tree.py +66 -0
  1068. scipy/sparse/csgraph/tests/test_traversal.py +148 -0
  1069. scipy/sparse/csr.py +22 -0
  1070. scipy/sparse/data.py +18 -0
  1071. scipy/sparse/dia.py +22 -0
  1072. scipy/sparse/dok.py +22 -0
  1073. scipy/sparse/extract.py +23 -0
  1074. scipy/sparse/lil.py +22 -0
  1075. scipy/sparse/linalg/__init__.py +148 -0
  1076. scipy/sparse/linalg/_dsolve/__init__.py +71 -0
  1077. scipy/sparse/linalg/_dsolve/_add_newdocs.py +147 -0
  1078. scipy/sparse/linalg/_dsolve/_superlu.cp313-win_arm64.lib +0 -0
  1079. scipy/sparse/linalg/_dsolve/_superlu.cp313-win_arm64.pyd +0 -0
  1080. scipy/sparse/linalg/_dsolve/linsolve.py +882 -0
  1081. scipy/sparse/linalg/_dsolve/tests/__init__.py +0 -0
  1082. scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +928 -0
  1083. scipy/sparse/linalg/_eigen/__init__.py +22 -0
  1084. scipy/sparse/linalg/_eigen/_svds.py +540 -0
  1085. scipy/sparse/linalg/_eigen/_svds_doc.py +382 -0
  1086. scipy/sparse/linalg/_eigen/arpack/COPYING +45 -0
  1087. scipy/sparse/linalg/_eigen/arpack/__init__.py +20 -0
  1088. scipy/sparse/linalg/_eigen/arpack/_arpack.cp313-win_arm64.lib +0 -0
  1089. scipy/sparse/linalg/_eigen/arpack/_arpack.cp313-win_arm64.pyd +0 -0
  1090. scipy/sparse/linalg/_eigen/arpack/arpack.py +1706 -0
  1091. scipy/sparse/linalg/_eigen/arpack/tests/__init__.py +0 -0
  1092. scipy/sparse/linalg/_eigen/arpack/tests/test_arpack.py +717 -0
  1093. scipy/sparse/linalg/_eigen/lobpcg/__init__.py +16 -0
  1094. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +1110 -0
  1095. scipy/sparse/linalg/_eigen/lobpcg/tests/__init__.py +0 -0
  1096. scipy/sparse/linalg/_eigen/lobpcg/tests/test_lobpcg.py +725 -0
  1097. scipy/sparse/linalg/_eigen/tests/__init__.py +0 -0
  1098. scipy/sparse/linalg/_eigen/tests/test_svds.py +886 -0
  1099. scipy/sparse/linalg/_expm_multiply.py +816 -0
  1100. scipy/sparse/linalg/_interface.py +920 -0
  1101. scipy/sparse/linalg/_isolve/__init__.py +20 -0
  1102. scipy/sparse/linalg/_isolve/_gcrotmk.py +503 -0
  1103. scipy/sparse/linalg/_isolve/iterative.py +1051 -0
  1104. scipy/sparse/linalg/_isolve/lgmres.py +230 -0
  1105. scipy/sparse/linalg/_isolve/lsmr.py +486 -0
  1106. scipy/sparse/linalg/_isolve/lsqr.py +589 -0
  1107. scipy/sparse/linalg/_isolve/minres.py +372 -0
  1108. scipy/sparse/linalg/_isolve/tests/__init__.py +0 -0
  1109. scipy/sparse/linalg/_isolve/tests/test_gcrotmk.py +183 -0
  1110. scipy/sparse/linalg/_isolve/tests/test_iterative.py +809 -0
  1111. scipy/sparse/linalg/_isolve/tests/test_lgmres.py +225 -0
  1112. scipy/sparse/linalg/_isolve/tests/test_lsmr.py +185 -0
  1113. scipy/sparse/linalg/_isolve/tests/test_lsqr.py +120 -0
  1114. scipy/sparse/linalg/_isolve/tests/test_minres.py +97 -0
  1115. scipy/sparse/linalg/_isolve/tests/test_utils.py +9 -0
  1116. scipy/sparse/linalg/_isolve/tfqmr.py +179 -0
  1117. scipy/sparse/linalg/_isolve/utils.py +121 -0
  1118. scipy/sparse/linalg/_matfuncs.py +940 -0
  1119. scipy/sparse/linalg/_norm.py +195 -0
  1120. scipy/sparse/linalg/_onenormest.py +467 -0
  1121. scipy/sparse/linalg/_propack/_cpropack.cp313-win_arm64.lib +0 -0
  1122. scipy/sparse/linalg/_propack/_cpropack.cp313-win_arm64.pyd +0 -0
  1123. scipy/sparse/linalg/_propack/_dpropack.cp313-win_arm64.lib +0 -0
  1124. scipy/sparse/linalg/_propack/_dpropack.cp313-win_arm64.pyd +0 -0
  1125. scipy/sparse/linalg/_propack/_spropack.cp313-win_arm64.lib +0 -0
  1126. scipy/sparse/linalg/_propack/_spropack.cp313-win_arm64.pyd +0 -0
  1127. scipy/sparse/linalg/_propack/_zpropack.cp313-win_arm64.lib +0 -0
  1128. scipy/sparse/linalg/_propack/_zpropack.cp313-win_arm64.pyd +0 -0
  1129. scipy/sparse/linalg/_special_sparse_arrays.py +949 -0
  1130. scipy/sparse/linalg/_svdp.py +309 -0
  1131. scipy/sparse/linalg/dsolve.py +22 -0
  1132. scipy/sparse/linalg/eigen.py +21 -0
  1133. scipy/sparse/linalg/interface.py +20 -0
  1134. scipy/sparse/linalg/isolve.py +22 -0
  1135. scipy/sparse/linalg/matfuncs.py +18 -0
  1136. scipy/sparse/linalg/tests/__init__.py +0 -0
  1137. scipy/sparse/linalg/tests/propack_test_data.npz +0 -0
  1138. scipy/sparse/linalg/tests/test_expm_multiply.py +367 -0
  1139. scipy/sparse/linalg/tests/test_interface.py +561 -0
  1140. scipy/sparse/linalg/tests/test_matfuncs.py +592 -0
  1141. scipy/sparse/linalg/tests/test_norm.py +154 -0
  1142. scipy/sparse/linalg/tests/test_onenormest.py +252 -0
  1143. scipy/sparse/linalg/tests/test_propack.py +165 -0
  1144. scipy/sparse/linalg/tests/test_pydata_sparse.py +272 -0
  1145. scipy/sparse/linalg/tests/test_special_sparse_arrays.py +337 -0
  1146. scipy/sparse/sparsetools.py +17 -0
  1147. scipy/sparse/spfuncs.py +17 -0
  1148. scipy/sparse/sputils.py +17 -0
  1149. scipy/sparse/tests/__init__.py +0 -0
  1150. scipy/sparse/tests/data/csc_py2.npz +0 -0
  1151. scipy/sparse/tests/data/csc_py3.npz +0 -0
  1152. scipy/sparse/tests/test_arithmetic1d.py +341 -0
  1153. scipy/sparse/tests/test_array_api.py +561 -0
  1154. scipy/sparse/tests/test_base.py +5870 -0
  1155. scipy/sparse/tests/test_common1d.py +447 -0
  1156. scipy/sparse/tests/test_construct.py +872 -0
  1157. scipy/sparse/tests/test_coo.py +1119 -0
  1158. scipy/sparse/tests/test_csc.py +98 -0
  1159. scipy/sparse/tests/test_csr.py +214 -0
  1160. scipy/sparse/tests/test_dok.py +209 -0
  1161. scipy/sparse/tests/test_extract.py +51 -0
  1162. scipy/sparse/tests/test_indexing1d.py +603 -0
  1163. scipy/sparse/tests/test_matrix_io.py +109 -0
  1164. scipy/sparse/tests/test_minmax1d.py +128 -0
  1165. scipy/sparse/tests/test_sparsetools.py +344 -0
  1166. scipy/sparse/tests/test_spfuncs.py +97 -0
  1167. scipy/sparse/tests/test_sputils.py +424 -0
  1168. scipy/spatial/__init__.py +129 -0
  1169. scipy/spatial/_ckdtree.cp313-win_arm64.lib +0 -0
  1170. scipy/spatial/_ckdtree.cp313-win_arm64.pyd +0 -0
  1171. scipy/spatial/_distance_pybind.cp313-win_arm64.lib +0 -0
  1172. scipy/spatial/_distance_pybind.cp313-win_arm64.pyd +0 -0
  1173. scipy/spatial/_distance_wrap.cp313-win_arm64.lib +0 -0
  1174. scipy/spatial/_distance_wrap.cp313-win_arm64.pyd +0 -0
  1175. scipy/spatial/_geometric_slerp.py +238 -0
  1176. scipy/spatial/_hausdorff.cp313-win_arm64.lib +0 -0
  1177. scipy/spatial/_hausdorff.cp313-win_arm64.pyd +0 -0
  1178. scipy/spatial/_kdtree.py +920 -0
  1179. scipy/spatial/_plotutils.py +274 -0
  1180. scipy/spatial/_procrustes.py +132 -0
  1181. scipy/spatial/_qhull.cp313-win_arm64.lib +0 -0
  1182. scipy/spatial/_qhull.cp313-win_arm64.pyd +0 -0
  1183. scipy/spatial/_qhull.pyi +213 -0
  1184. scipy/spatial/_spherical_voronoi.py +341 -0
  1185. scipy/spatial/_voronoi.cp313-win_arm64.lib +0 -0
  1186. scipy/spatial/_voronoi.cp313-win_arm64.pyd +0 -0
  1187. scipy/spatial/_voronoi.pyi +4 -0
  1188. scipy/spatial/ckdtree.py +18 -0
  1189. scipy/spatial/distance.py +3147 -0
  1190. scipy/spatial/distance.pyi +210 -0
  1191. scipy/spatial/kdtree.py +25 -0
  1192. scipy/spatial/qhull.py +25 -0
  1193. scipy/spatial/qhull_src/COPYING_QHULL.txt +39 -0
  1194. scipy/spatial/tests/__init__.py +0 -0
  1195. scipy/spatial/tests/data/cdist-X1.txt +10 -0
  1196. scipy/spatial/tests/data/cdist-X2.txt +20 -0
  1197. scipy/spatial/tests/data/degenerate_pointset.npz +0 -0
  1198. scipy/spatial/tests/data/iris.txt +150 -0
  1199. scipy/spatial/tests/data/pdist-boolean-inp.txt +20 -0
  1200. scipy/spatial/tests/data/pdist-chebyshev-ml-iris.txt +1 -0
  1201. scipy/spatial/tests/data/pdist-chebyshev-ml.txt +1 -0
  1202. scipy/spatial/tests/data/pdist-cityblock-ml-iris.txt +1 -0
  1203. scipy/spatial/tests/data/pdist-cityblock-ml.txt +1 -0
  1204. scipy/spatial/tests/data/pdist-correlation-ml-iris.txt +1 -0
  1205. scipy/spatial/tests/data/pdist-correlation-ml.txt +1 -0
  1206. scipy/spatial/tests/data/pdist-cosine-ml-iris.txt +1 -0
  1207. scipy/spatial/tests/data/pdist-cosine-ml.txt +1 -0
  1208. scipy/spatial/tests/data/pdist-double-inp.txt +20 -0
  1209. scipy/spatial/tests/data/pdist-euclidean-ml-iris.txt +1 -0
  1210. scipy/spatial/tests/data/pdist-euclidean-ml.txt +1 -0
  1211. scipy/spatial/tests/data/pdist-hamming-ml.txt +1 -0
  1212. scipy/spatial/tests/data/pdist-jaccard-ml.txt +1 -0
  1213. scipy/spatial/tests/data/pdist-jensenshannon-ml-iris.txt +1 -0
  1214. scipy/spatial/tests/data/pdist-jensenshannon-ml.txt +1 -0
  1215. scipy/spatial/tests/data/pdist-minkowski-3.2-ml-iris.txt +1 -0
  1216. scipy/spatial/tests/data/pdist-minkowski-3.2-ml.txt +1 -0
  1217. scipy/spatial/tests/data/pdist-minkowski-5.8-ml-iris.txt +1 -0
  1218. scipy/spatial/tests/data/pdist-seuclidean-ml-iris.txt +1 -0
  1219. scipy/spatial/tests/data/pdist-seuclidean-ml.txt +1 -0
  1220. scipy/spatial/tests/data/pdist-spearman-ml.txt +1 -0
  1221. scipy/spatial/tests/data/random-bool-data.txt +100 -0
  1222. scipy/spatial/tests/data/random-double-data.txt +100 -0
  1223. scipy/spatial/tests/data/random-int-data.txt +100 -0
  1224. scipy/spatial/tests/data/random-uint-data.txt +100 -0
  1225. scipy/spatial/tests/data/selfdual-4d-polytope.txt +27 -0
  1226. scipy/spatial/tests/test__plotutils.py +91 -0
  1227. scipy/spatial/tests/test__procrustes.py +116 -0
  1228. scipy/spatial/tests/test_distance.py +2389 -0
  1229. scipy/spatial/tests/test_hausdorff.py +199 -0
  1230. scipy/spatial/tests/test_kdtree.py +1536 -0
  1231. scipy/spatial/tests/test_qhull.py +1313 -0
  1232. scipy/spatial/tests/test_slerp.py +417 -0
  1233. scipy/spatial/tests/test_spherical_voronoi.py +358 -0
  1234. scipy/spatial/transform/__init__.py +31 -0
  1235. scipy/spatial/transform/_rigid_transform.cp313-win_arm64.lib +0 -0
  1236. scipy/spatial/transform/_rigid_transform.cp313-win_arm64.pyd +0 -0
  1237. scipy/spatial/transform/_rotation.cp313-win_arm64.lib +0 -0
  1238. scipy/spatial/transform/_rotation.cp313-win_arm64.pyd +0 -0
  1239. scipy/spatial/transform/_rotation_groups.py +140 -0
  1240. scipy/spatial/transform/_rotation_spline.py +460 -0
  1241. scipy/spatial/transform/rotation.py +21 -0
  1242. scipy/spatial/transform/tests/__init__.py +0 -0
  1243. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  1244. scipy/spatial/transform/tests/test_rotation.py +2569 -0
  1245. scipy/spatial/transform/tests/test_rotation_groups.py +169 -0
  1246. scipy/spatial/transform/tests/test_rotation_spline.py +183 -0
  1247. scipy/special/__init__.pxd +1 -0
  1248. scipy/special/__init__.py +841 -0
  1249. scipy/special/_add_newdocs.py +9961 -0
  1250. scipy/special/_basic.py +3576 -0
  1251. scipy/special/_comb.cp313-win_arm64.lib +0 -0
  1252. scipy/special/_comb.cp313-win_arm64.pyd +0 -0
  1253. scipy/special/_ellip_harm.py +214 -0
  1254. scipy/special/_ellip_harm_2.cp313-win_arm64.lib +0 -0
  1255. scipy/special/_ellip_harm_2.cp313-win_arm64.pyd +0 -0
  1256. scipy/special/_gufuncs.cp313-win_arm64.lib +0 -0
  1257. scipy/special/_gufuncs.cp313-win_arm64.pyd +0 -0
  1258. scipy/special/_input_validation.py +17 -0
  1259. scipy/special/_lambertw.py +149 -0
  1260. scipy/special/_logsumexp.py +426 -0
  1261. scipy/special/_mptestutils.py +453 -0
  1262. scipy/special/_multiufuncs.py +610 -0
  1263. scipy/special/_orthogonal.py +2592 -0
  1264. scipy/special/_orthogonal.pyi +330 -0
  1265. scipy/special/_precompute/__init__.py +0 -0
  1266. scipy/special/_precompute/cosine_cdf.py +17 -0
  1267. scipy/special/_precompute/expn_asy.py +54 -0
  1268. scipy/special/_precompute/gammainc_asy.py +116 -0
  1269. scipy/special/_precompute/gammainc_data.py +124 -0
  1270. scipy/special/_precompute/hyp2f1_data.py +484 -0
  1271. scipy/special/_precompute/lambertw.py +68 -0
  1272. scipy/special/_precompute/loggamma.py +43 -0
  1273. scipy/special/_precompute/struve_convergence.py +131 -0
  1274. scipy/special/_precompute/utils.py +38 -0
  1275. scipy/special/_precompute/wright_bessel.py +342 -0
  1276. scipy/special/_precompute/wright_bessel_data.py +152 -0
  1277. scipy/special/_precompute/wrightomega.py +41 -0
  1278. scipy/special/_precompute/zetac.py +27 -0
  1279. scipy/special/_sf_error.py +15 -0
  1280. scipy/special/_specfun.cp313-win_arm64.lib +0 -0
  1281. scipy/special/_specfun.cp313-win_arm64.pyd +0 -0
  1282. scipy/special/_special_ufuncs.cp313-win_arm64.lib +0 -0
  1283. scipy/special/_special_ufuncs.cp313-win_arm64.pyd +0 -0
  1284. scipy/special/_spfun_stats.py +106 -0
  1285. scipy/special/_spherical_bessel.py +397 -0
  1286. scipy/special/_support_alternative_backends.py +295 -0
  1287. scipy/special/_test_internal.cp313-win_arm64.lib +0 -0
  1288. scipy/special/_test_internal.cp313-win_arm64.pyd +0 -0
  1289. scipy/special/_test_internal.pyi +9 -0
  1290. scipy/special/_testutils.py +321 -0
  1291. scipy/special/_ufuncs.cp313-win_arm64.lib +0 -0
  1292. scipy/special/_ufuncs.cp313-win_arm64.pyd +0 -0
  1293. scipy/special/_ufuncs.pyi +522 -0
  1294. scipy/special/_ufuncs.pyx +13173 -0
  1295. scipy/special/_ufuncs_cxx.cp313-win_arm64.lib +0 -0
  1296. scipy/special/_ufuncs_cxx.cp313-win_arm64.pyd +0 -0
  1297. scipy/special/_ufuncs_cxx.pxd +142 -0
  1298. scipy/special/_ufuncs_cxx.pyx +427 -0
  1299. scipy/special/_ufuncs_cxx_defs.h +147 -0
  1300. scipy/special/_ufuncs_defs.h +57 -0
  1301. scipy/special/add_newdocs.py +15 -0
  1302. scipy/special/basic.py +87 -0
  1303. scipy/special/cython_special.cp313-win_arm64.lib +0 -0
  1304. scipy/special/cython_special.cp313-win_arm64.pyd +0 -0
  1305. scipy/special/cython_special.pxd +259 -0
  1306. scipy/special/cython_special.pyi +3 -0
  1307. scipy/special/orthogonal.py +45 -0
  1308. scipy/special/sf_error.py +20 -0
  1309. scipy/special/specfun.py +24 -0
  1310. scipy/special/spfun_stats.py +17 -0
  1311. scipy/special/tests/__init__.py +0 -0
  1312. scipy/special/tests/_cython_examples/extending.pyx +12 -0
  1313. scipy/special/tests/_cython_examples/meson.build +34 -0
  1314. scipy/special/tests/data/__init__.py +0 -0
  1315. scipy/special/tests/data/boost.npz +0 -0
  1316. scipy/special/tests/data/gsl.npz +0 -0
  1317. scipy/special/tests/data/local.npz +0 -0
  1318. scipy/special/tests/test_basic.py +4815 -0
  1319. scipy/special/tests/test_bdtr.py +112 -0
  1320. scipy/special/tests/test_boost_ufuncs.py +64 -0
  1321. scipy/special/tests/test_boxcox.py +125 -0
  1322. scipy/special/tests/test_cdflib.py +712 -0
  1323. scipy/special/tests/test_cdft_asymptotic.py +49 -0
  1324. scipy/special/tests/test_cephes_intp_cast.py +29 -0
  1325. scipy/special/tests/test_cosine_distr.py +83 -0
  1326. scipy/special/tests/test_cython_special.py +363 -0
  1327. scipy/special/tests/test_data.py +719 -0
  1328. scipy/special/tests/test_dd.py +42 -0
  1329. scipy/special/tests/test_digamma.py +45 -0
  1330. scipy/special/tests/test_ellip_harm.py +278 -0
  1331. scipy/special/tests/test_erfinv.py +89 -0
  1332. scipy/special/tests/test_exponential_integrals.py +118 -0
  1333. scipy/special/tests/test_extending.py +28 -0
  1334. scipy/special/tests/test_faddeeva.py +85 -0
  1335. scipy/special/tests/test_gamma.py +12 -0
  1336. scipy/special/tests/test_gammainc.py +152 -0
  1337. scipy/special/tests/test_hyp2f1.py +2566 -0
  1338. scipy/special/tests/test_hypergeometric.py +234 -0
  1339. scipy/special/tests/test_iv_ratio.py +249 -0
  1340. scipy/special/tests/test_kolmogorov.py +491 -0
  1341. scipy/special/tests/test_lambertw.py +109 -0
  1342. scipy/special/tests/test_legendre.py +1518 -0
  1343. scipy/special/tests/test_log1mexp.py +85 -0
  1344. scipy/special/tests/test_loggamma.py +70 -0
  1345. scipy/special/tests/test_logit.py +162 -0
  1346. scipy/special/tests/test_logsumexp.py +469 -0
  1347. scipy/special/tests/test_mpmath.py +2293 -0
  1348. scipy/special/tests/test_nan_inputs.py +65 -0
  1349. scipy/special/tests/test_ndtr.py +77 -0
  1350. scipy/special/tests/test_ndtri_exp.py +94 -0
  1351. scipy/special/tests/test_orthogonal.py +821 -0
  1352. scipy/special/tests/test_orthogonal_eval.py +275 -0
  1353. scipy/special/tests/test_owens_t.py +53 -0
  1354. scipy/special/tests/test_pcf.py +24 -0
  1355. scipy/special/tests/test_pdtr.py +48 -0
  1356. scipy/special/tests/test_powm1.py +65 -0
  1357. scipy/special/tests/test_precompute_expn_asy.py +24 -0
  1358. scipy/special/tests/test_precompute_gammainc.py +108 -0
  1359. scipy/special/tests/test_precompute_utils.py +36 -0
  1360. scipy/special/tests/test_round.py +18 -0
  1361. scipy/special/tests/test_sf_error.py +146 -0
  1362. scipy/special/tests/test_sici.py +36 -0
  1363. scipy/special/tests/test_specfun.py +48 -0
  1364. scipy/special/tests/test_spence.py +32 -0
  1365. scipy/special/tests/test_spfun_stats.py +61 -0
  1366. scipy/special/tests/test_sph_harm.py +85 -0
  1367. scipy/special/tests/test_spherical_bessel.py +400 -0
  1368. scipy/special/tests/test_support_alternative_backends.py +248 -0
  1369. scipy/special/tests/test_trig.py +72 -0
  1370. scipy/special/tests/test_ufunc_signatures.py +46 -0
  1371. scipy/special/tests/test_wright_bessel.py +205 -0
  1372. scipy/special/tests/test_wrightomega.py +117 -0
  1373. scipy/special/tests/test_zeta.py +301 -0
  1374. scipy/stats/__init__.py +670 -0
  1375. scipy/stats/_ansari_swilk_statistics.cp313-win_arm64.lib +0 -0
  1376. scipy/stats/_ansari_swilk_statistics.cp313-win_arm64.pyd +0 -0
  1377. scipy/stats/_axis_nan_policy.py +692 -0
  1378. scipy/stats/_biasedurn.cp313-win_arm64.lib +0 -0
  1379. scipy/stats/_biasedurn.cp313-win_arm64.pyd +0 -0
  1380. scipy/stats/_biasedurn.pxd +27 -0
  1381. scipy/stats/_binned_statistic.py +795 -0
  1382. scipy/stats/_binomtest.py +375 -0
  1383. scipy/stats/_bws_test.py +177 -0
  1384. scipy/stats/_censored_data.py +459 -0
  1385. scipy/stats/_common.py +5 -0
  1386. scipy/stats/_constants.py +42 -0
  1387. scipy/stats/_continued_fraction.py +387 -0
  1388. scipy/stats/_continuous_distns.py +12486 -0
  1389. scipy/stats/_correlation.py +210 -0
  1390. scipy/stats/_covariance.py +636 -0
  1391. scipy/stats/_crosstab.py +204 -0
  1392. scipy/stats/_discrete_distns.py +2098 -0
  1393. scipy/stats/_distn_infrastructure.py +4201 -0
  1394. scipy/stats/_distr_params.py +299 -0
  1395. scipy/stats/_distribution_infrastructure.py +5750 -0
  1396. scipy/stats/_entropy.py +428 -0
  1397. scipy/stats/_finite_differences.py +145 -0
  1398. scipy/stats/_fit.py +1351 -0
  1399. scipy/stats/_hypotests.py +2060 -0
  1400. scipy/stats/_kde.py +732 -0
  1401. scipy/stats/_ksstats.py +600 -0
  1402. scipy/stats/_levy_stable/__init__.py +1231 -0
  1403. scipy/stats/_levy_stable/levyst.cp313-win_arm64.lib +0 -0
  1404. scipy/stats/_levy_stable/levyst.cp313-win_arm64.pyd +0 -0
  1405. scipy/stats/_mannwhitneyu.py +492 -0
  1406. scipy/stats/_mgc.py +550 -0
  1407. scipy/stats/_morestats.py +4626 -0
  1408. scipy/stats/_mstats_basic.py +3658 -0
  1409. scipy/stats/_mstats_extras.py +521 -0
  1410. scipy/stats/_multicomp.py +449 -0
  1411. scipy/stats/_multivariate.py +7281 -0
  1412. scipy/stats/_new_distributions.py +452 -0
  1413. scipy/stats/_odds_ratio.py +466 -0
  1414. scipy/stats/_page_trend_test.py +486 -0
  1415. scipy/stats/_probability_distribution.py +1964 -0
  1416. scipy/stats/_qmc.py +2956 -0
  1417. scipy/stats/_qmc_cy.cp313-win_arm64.lib +0 -0
  1418. scipy/stats/_qmc_cy.cp313-win_arm64.pyd +0 -0
  1419. scipy/stats/_qmc_cy.pyi +54 -0
  1420. scipy/stats/_qmvnt.py +454 -0
  1421. scipy/stats/_qmvnt_cy.cp313-win_arm64.lib +0 -0
  1422. scipy/stats/_qmvnt_cy.cp313-win_arm64.pyd +0 -0
  1423. scipy/stats/_quantile.py +335 -0
  1424. scipy/stats/_rcont/__init__.py +4 -0
  1425. scipy/stats/_rcont/rcont.cp313-win_arm64.lib +0 -0
  1426. scipy/stats/_rcont/rcont.cp313-win_arm64.pyd +0 -0
  1427. scipy/stats/_relative_risk.py +263 -0
  1428. scipy/stats/_resampling.py +2352 -0
  1429. scipy/stats/_result_classes.py +40 -0
  1430. scipy/stats/_sampling.py +1314 -0
  1431. scipy/stats/_sensitivity_analysis.py +713 -0
  1432. scipy/stats/_sobol.cp313-win_arm64.lib +0 -0
  1433. scipy/stats/_sobol.cp313-win_arm64.pyd +0 -0
  1434. scipy/stats/_sobol.pyi +54 -0
  1435. scipy/stats/_sobol_direction_numbers.npz +0 -0
  1436. scipy/stats/_stats.cp313-win_arm64.lib +0 -0
  1437. scipy/stats/_stats.cp313-win_arm64.pyd +0 -0
  1438. scipy/stats/_stats.pxd +10 -0
  1439. scipy/stats/_stats_mstats_common.py +322 -0
  1440. scipy/stats/_stats_py.py +11089 -0
  1441. scipy/stats/_stats_pythran.cp313-win_arm64.lib +0 -0
  1442. scipy/stats/_stats_pythran.cp313-win_arm64.pyd +0 -0
  1443. scipy/stats/_survival.py +683 -0
  1444. scipy/stats/_tukeylambda_stats.py +199 -0
  1445. scipy/stats/_unuran/__init__.py +0 -0
  1446. scipy/stats/_unuran/unuran_wrapper.cp313-win_arm64.lib +0 -0
  1447. scipy/stats/_unuran/unuran_wrapper.cp313-win_arm64.pyd +0 -0
  1448. scipy/stats/_unuran/unuran_wrapper.pyi +179 -0
  1449. scipy/stats/_variation.py +126 -0
  1450. scipy/stats/_warnings_errors.py +38 -0
  1451. scipy/stats/_wilcoxon.py +265 -0
  1452. scipy/stats/biasedurn.py +16 -0
  1453. scipy/stats/contingency.py +521 -0
  1454. scipy/stats/distributions.py +24 -0
  1455. scipy/stats/kde.py +18 -0
  1456. scipy/stats/morestats.py +27 -0
  1457. scipy/stats/mstats.py +140 -0
  1458. scipy/stats/mstats_basic.py +42 -0
  1459. scipy/stats/mstats_extras.py +25 -0
  1460. scipy/stats/mvn.py +17 -0
  1461. scipy/stats/qmc.py +236 -0
  1462. scipy/stats/sampling.py +73 -0
  1463. scipy/stats/stats.py +41 -0
  1464. scipy/stats/tests/__init__.py +0 -0
  1465. scipy/stats/tests/common_tests.py +356 -0
  1466. scipy/stats/tests/data/_mvt.py +171 -0
  1467. scipy/stats/tests/data/fisher_exact_results_from_r.py +607 -0
  1468. scipy/stats/tests/data/jf_skew_t_gamlss_pdf_data.npy +0 -0
  1469. scipy/stats/tests/data/levy_stable/stable-Z1-cdf-sample-data.npy +0 -0
  1470. scipy/stats/tests/data/levy_stable/stable-Z1-pdf-sample-data.npy +0 -0
  1471. scipy/stats/tests/data/levy_stable/stable-loc-scale-sample-data.npy +0 -0
  1472. scipy/stats/tests/data/nist_anova/AtmWtAg.dat +108 -0
  1473. scipy/stats/tests/data/nist_anova/SiRstv.dat +85 -0
  1474. scipy/stats/tests/data/nist_anova/SmLs01.dat +249 -0
  1475. scipy/stats/tests/data/nist_anova/SmLs02.dat +1869 -0
  1476. scipy/stats/tests/data/nist_anova/SmLs03.dat +18069 -0
  1477. scipy/stats/tests/data/nist_anova/SmLs04.dat +249 -0
  1478. scipy/stats/tests/data/nist_anova/SmLs05.dat +1869 -0
  1479. scipy/stats/tests/data/nist_anova/SmLs06.dat +18069 -0
  1480. scipy/stats/tests/data/nist_anova/SmLs07.dat +249 -0
  1481. scipy/stats/tests/data/nist_anova/SmLs08.dat +1869 -0
  1482. scipy/stats/tests/data/nist_anova/SmLs09.dat +18069 -0
  1483. scipy/stats/tests/data/nist_linregress/Norris.dat +97 -0
  1484. scipy/stats/tests/data/rel_breitwigner_pdf_sample_data_ROOT.npy +0 -0
  1485. scipy/stats/tests/data/studentized_range_mpmath_ref.json +1499 -0
  1486. scipy/stats/tests/test_axis_nan_policy.py +1388 -0
  1487. scipy/stats/tests/test_binned_statistic.py +568 -0
  1488. scipy/stats/tests/test_censored_data.py +152 -0
  1489. scipy/stats/tests/test_contingency.py +294 -0
  1490. scipy/stats/tests/test_continued_fraction.py +173 -0
  1491. scipy/stats/tests/test_continuous.py +2198 -0
  1492. scipy/stats/tests/test_continuous_basic.py +1053 -0
  1493. scipy/stats/tests/test_continuous_fit_censored.py +683 -0
  1494. scipy/stats/tests/test_correlation.py +80 -0
  1495. scipy/stats/tests/test_crosstab.py +115 -0
  1496. scipy/stats/tests/test_discrete_basic.py +580 -0
  1497. scipy/stats/tests/test_discrete_distns.py +700 -0
  1498. scipy/stats/tests/test_distributions.py +10413 -0
  1499. scipy/stats/tests/test_entropy.py +322 -0
  1500. scipy/stats/tests/test_fast_gen_inversion.py +435 -0
  1501. scipy/stats/tests/test_fit.py +1090 -0
  1502. scipy/stats/tests/test_hypotests.py +1991 -0
  1503. scipy/stats/tests/test_kdeoth.py +676 -0
  1504. scipy/stats/tests/test_marray.py +289 -0
  1505. scipy/stats/tests/test_mgc.py +217 -0
  1506. scipy/stats/tests/test_morestats.py +3259 -0
  1507. scipy/stats/tests/test_mstats_basic.py +2071 -0
  1508. scipy/stats/tests/test_mstats_extras.py +172 -0
  1509. scipy/stats/tests/test_multicomp.py +405 -0
  1510. scipy/stats/tests/test_multivariate.py +4381 -0
  1511. scipy/stats/tests/test_odds_ratio.py +148 -0
  1512. scipy/stats/tests/test_qmc.py +1492 -0
  1513. scipy/stats/tests/test_quantile.py +199 -0
  1514. scipy/stats/tests/test_rank.py +345 -0
  1515. scipy/stats/tests/test_relative_risk.py +95 -0
  1516. scipy/stats/tests/test_resampling.py +2000 -0
  1517. scipy/stats/tests/test_sampling.py +1450 -0
  1518. scipy/stats/tests/test_sensitivity_analysis.py +310 -0
  1519. scipy/stats/tests/test_stats.py +9707 -0
  1520. scipy/stats/tests/test_survival.py +466 -0
  1521. scipy/stats/tests/test_tukeylambda_stats.py +85 -0
  1522. scipy/stats/tests/test_variation.py +216 -0
  1523. scipy/version.py +12 -0
  1524. scipy-1.16.2.dist-info/DELVEWHEEL +2 -0
  1525. scipy-1.16.2.dist-info/LICENSE.txt +912 -0
  1526. scipy-1.16.2.dist-info/METADATA +1061 -0
  1527. scipy-1.16.2.dist-info/RECORD +1530 -0
  1528. scipy-1.16.2.dist-info/WHEEL +4 -0
  1529. scipy.libs/msvcp140-5f1c5dd31916990d94181e07bc3afb32.dll +0 -0
  1530. scipy.libs/scipy_openblas-f3ac85b1f412f7e86514c923dc4058d1.dll +0 -0
@@ -0,0 +1,1634 @@
1
+ # Copyright (C) 2009, Pauli Virtanen <pav@iki.fi>
2
+ # Distributed under the same license as SciPy.
3
+
4
+ import inspect
5
+ import sys
6
+ import warnings
7
+
8
+ import numpy as np
9
+ from numpy import asarray, dot, vdot
10
+
11
+ from scipy.linalg import norm, solve, inv, qr, svd, LinAlgError
12
+ import scipy.sparse.linalg
13
+ import scipy.sparse
14
+ from scipy.linalg import get_blas_funcs
15
+ from scipy._lib._util import copy_if_needed
16
+ from scipy._lib._util import getfullargspec_no_self as _getfullargspec
17
+ from ._linesearch import scalar_search_wolfe1, scalar_search_armijo
18
+ from inspect import signature
19
+ from difflib import get_close_matches
20
+
21
+
22
+ __all__ = [
23
+ 'broyden1', 'broyden2', 'anderson', 'linearmixing',
24
+ 'diagbroyden', 'excitingmixing', 'newton_krylov',
25
+ 'BroydenFirst', 'KrylovJacobian', 'InverseJacobian', 'NoConvergence']
26
+
27
+ #------------------------------------------------------------------------------
28
+ # Utility functions
29
+ #------------------------------------------------------------------------------
30
+
31
+
32
+ class NoConvergence(Exception):
33
+ """Exception raised when nonlinear solver fails to converge within the specified
34
+ `maxiter`."""
35
+ pass
36
+
37
+
38
+ def maxnorm(x):
39
+ return np.absolute(x).max()
40
+
41
+
42
+ def _as_inexact(x):
43
+ """Return `x` as an array, of either floats or complex floats"""
44
+ x = asarray(x)
45
+ if not np.issubdtype(x.dtype, np.inexact):
46
+ return asarray(x, dtype=np.float64)
47
+ return x
48
+
49
+
50
+ def _array_like(x, x0):
51
+ """Return ndarray `x` as same array subclass and shape as `x0`"""
52
+ x = np.reshape(x, np.shape(x0))
53
+ wrap = getattr(x0, '__array_wrap__', x.__array_wrap__)
54
+ return wrap(x)
55
+
56
+
57
+ def _safe_norm(v):
58
+ if not np.isfinite(v).all():
59
+ return np.array(np.inf)
60
+ return norm(v)
61
+
62
+ #------------------------------------------------------------------------------
63
+ # Generic nonlinear solver machinery
64
+ #------------------------------------------------------------------------------
65
+
66
+
67
+ _doc_parts = dict(
68
+ params_basic="""
69
+ F : function(x) -> f
70
+ Function whose root to find; should take and return an array-like
71
+ object.
72
+ xin : array_like
73
+ Initial guess for the solution
74
+ """.strip(),
75
+ params_extra="""
76
+ iter : int, optional
77
+ Number of iterations to make. If omitted (default), make as many
78
+ as required to meet tolerances.
79
+ verbose : bool, optional
80
+ Print status to stdout on every iteration.
81
+ maxiter : int, optional
82
+ Maximum number of iterations to make. If more are needed to
83
+ meet convergence, `NoConvergence` is raised.
84
+ f_tol : float, optional
85
+ Absolute tolerance (in max-norm) for the residual.
86
+ If omitted, default is 6e-6.
87
+ f_rtol : float, optional
88
+ Relative tolerance for the residual. If omitted, not used.
89
+ x_tol : float, optional
90
+ Absolute minimum step size, as determined from the Jacobian
91
+ approximation. If the step size is smaller than this, optimization
92
+ is terminated as successful. If omitted, not used.
93
+ x_rtol : float, optional
94
+ Relative minimum step size. If omitted, not used.
95
+ tol_norm : function(vector) -> scalar, optional
96
+ Norm to use in convergence check. Default is the maximum norm.
97
+ line_search : {None, 'armijo' (default), 'wolfe'}, optional
98
+ Which type of a line search to use to determine the step size in the
99
+ direction given by the Jacobian approximation. Defaults to 'armijo'.
100
+ callback : function, optional
101
+ Optional callback function. It is called on every iteration as
102
+ ``callback(x, f)`` where `x` is the current solution and `f`
103
+ the corresponding residual.
104
+
105
+ Returns
106
+ -------
107
+ sol : ndarray
108
+ An array (of similar array type as `x0`) containing the final solution.
109
+
110
+ Raises
111
+ ------
112
+ NoConvergence
113
+ When a solution was not found.
114
+
115
+ """.strip()
116
+ )
117
+
118
+
119
+ def _set_doc(obj):
120
+ if obj.__doc__:
121
+ obj.__doc__ = obj.__doc__ % _doc_parts
122
+
123
+
124
+ def nonlin_solve(F, x0, jacobian='krylov', iter=None, verbose=False,
125
+ maxiter=None, f_tol=None, f_rtol=None, x_tol=None, x_rtol=None,
126
+ tol_norm=None, line_search='armijo', callback=None,
127
+ full_output=False, raise_exception=True):
128
+ """
129
+ Find a root of a function, in a way suitable for large-scale problems.
130
+
131
+ Parameters
132
+ ----------
133
+ %(params_basic)s
134
+ jacobian : Jacobian
135
+ A Jacobian approximation: `Jacobian` object or something that
136
+ `asjacobian` can transform to one. Alternatively, a string specifying
137
+ which of the builtin Jacobian approximations to use:
138
+
139
+ krylov, broyden1, broyden2, anderson
140
+ diagbroyden, linearmixing, excitingmixing
141
+
142
+ %(params_extra)s
143
+ full_output : bool
144
+ If true, returns a dictionary `info` containing convergence
145
+ information.
146
+ raise_exception : bool
147
+ If True, a `NoConvergence` exception is raise if no solution is found.
148
+
149
+ See Also
150
+ --------
151
+ asjacobian, Jacobian
152
+
153
+ Notes
154
+ -----
155
+ This algorithm implements the inexact Newton method, with
156
+ backtracking or full line searches. Several Jacobian
157
+ approximations are available, including Krylov and Quasi-Newton
158
+ methods.
159
+
160
+ References
161
+ ----------
162
+ .. [KIM] C. T. Kelley, \"Iterative Methods for Linear and Nonlinear
163
+ Equations\". Society for Industrial and Applied Mathematics. (1995)
164
+ https://archive.siam.org/books/kelley/fr16/
165
+
166
+ """
167
+ # Can't use default parameters because it's being explicitly passed as None
168
+ # from the calling function, so we need to set it here.
169
+ tol_norm = maxnorm if tol_norm is None else tol_norm
170
+ condition = TerminationCondition(f_tol=f_tol, f_rtol=f_rtol,
171
+ x_tol=x_tol, x_rtol=x_rtol,
172
+ iter=iter, norm=tol_norm)
173
+
174
+ x0 = _as_inexact(x0)
175
+ def func(z):
176
+ return _as_inexact(F(_array_like(z, x0))).flatten()
177
+ x = x0.flatten()
178
+
179
+ dx = np.full_like(x, np.inf)
180
+ Fx = func(x)
181
+ Fx_norm = norm(Fx)
182
+
183
+ jacobian = asjacobian(jacobian)
184
+ jacobian.setup(x.copy(), Fx, func)
185
+
186
+ if maxiter is None:
187
+ if iter is not None:
188
+ maxiter = iter + 1
189
+ else:
190
+ maxiter = 100*(x.size+1)
191
+
192
+ if line_search is True:
193
+ line_search = 'armijo'
194
+ elif line_search is False:
195
+ line_search = None
196
+
197
+ if line_search not in (None, 'armijo', 'wolfe'):
198
+ raise ValueError("Invalid line search")
199
+
200
+ # Solver tolerance selection
201
+ gamma = 0.9
202
+ eta_max = 0.9999
203
+ eta_treshold = 0.1
204
+ eta = 1e-3
205
+
206
+ for n in range(maxiter):
207
+ status = condition.check(Fx, x, dx)
208
+ if status:
209
+ break
210
+
211
+ # The tolerance, as computed for scipy.sparse.linalg.* routines
212
+ tol = min(eta, eta*Fx_norm)
213
+ dx = -jacobian.solve(Fx, tol=tol)
214
+
215
+ if norm(dx) == 0:
216
+ raise ValueError("Jacobian inversion yielded zero vector. "
217
+ "This indicates a bug in the Jacobian "
218
+ "approximation.")
219
+
220
+ # Line search, or Newton step
221
+ if line_search:
222
+ s, x, Fx, Fx_norm_new = _nonlin_line_search(func, x, Fx, dx,
223
+ line_search)
224
+ else:
225
+ s = 1.0
226
+ x = x + dx
227
+ Fx = func(x)
228
+ Fx_norm_new = norm(Fx)
229
+
230
+ jacobian.update(x.copy(), Fx)
231
+
232
+ if callback:
233
+ callback(x, Fx)
234
+
235
+ # Adjust forcing parameters for inexact methods
236
+ eta_A = gamma * Fx_norm_new**2 / Fx_norm**2
237
+ if gamma * eta**2 < eta_treshold:
238
+ eta = min(eta_max, eta_A)
239
+ else:
240
+ eta = min(eta_max, max(eta_A, gamma*eta**2))
241
+
242
+ Fx_norm = Fx_norm_new
243
+
244
+ # Print status
245
+ if verbose:
246
+ sys.stdout.write(f"{n}: |F(x)| = {tol_norm(Fx):g}; step {s:g}\n")
247
+ sys.stdout.flush()
248
+ else:
249
+ if raise_exception:
250
+ raise NoConvergence(_array_like(x, x0))
251
+ else:
252
+ status = 2
253
+
254
+ if full_output:
255
+ info = {'nit': condition.iteration,
256
+ 'fun': Fx,
257
+ 'status': status,
258
+ 'success': status == 1,
259
+ 'message': {1: 'A solution was found at the specified '
260
+ 'tolerance.',
261
+ 2: 'The maximum number of iterations allowed '
262
+ 'has been reached.'
263
+ }[status]
264
+ }
265
+ return _array_like(x, x0), info
266
+ else:
267
+ return _array_like(x, x0)
268
+
269
+
270
+ _set_doc(nonlin_solve)
271
+
272
+
273
+ def _nonlin_line_search(func, x, Fx, dx, search_type='armijo', rdiff=1e-8,
274
+ smin=1e-2):
275
+ tmp_s = [0]
276
+ tmp_Fx = [Fx]
277
+ tmp_phi = [norm(Fx)**2]
278
+ s_norm = norm(x) / norm(dx)
279
+
280
+ def phi(s, store=True):
281
+ if s == tmp_s[0]:
282
+ return tmp_phi[0]
283
+ xt = x + s*dx
284
+ v = func(xt)
285
+ p = _safe_norm(v)**2
286
+ if store:
287
+ tmp_s[0] = s
288
+ tmp_phi[0] = p
289
+ tmp_Fx[0] = v
290
+ return p
291
+
292
+ def derphi(s):
293
+ ds = (abs(s) + s_norm + 1) * rdiff
294
+ return (phi(s+ds, store=False) - phi(s)) / ds
295
+
296
+ if search_type == 'wolfe':
297
+ s, phi1, phi0 = scalar_search_wolfe1(phi, derphi, tmp_phi[0],
298
+ xtol=1e-2, amin=smin)
299
+ elif search_type == 'armijo':
300
+ s, phi1 = scalar_search_armijo(phi, tmp_phi[0], -tmp_phi[0],
301
+ amin=smin)
302
+
303
+ if s is None:
304
+ # XXX: No suitable step length found. Take the full Newton step,
305
+ # and hope for the best.
306
+ s = 1.0
307
+
308
+ x = x + s*dx
309
+ if s == tmp_s[0]:
310
+ Fx = tmp_Fx[0]
311
+ else:
312
+ Fx = func(x)
313
+ Fx_norm = norm(Fx)
314
+
315
+ return s, x, Fx, Fx_norm
316
+
317
+
318
+ class TerminationCondition:
319
+ """
320
+ Termination condition for an iteration. It is terminated if
321
+
322
+ - |F| < f_rtol*|F_0|, AND
323
+ - |F| < f_tol
324
+
325
+ AND
326
+
327
+ - |dx| < x_rtol*|x|, AND
328
+ - |dx| < x_tol
329
+
330
+ """
331
+ def __init__(self, f_tol=None, f_rtol=None, x_tol=None, x_rtol=None,
332
+ iter=None, norm=maxnorm):
333
+
334
+ if f_tol is None:
335
+ f_tol = np.finfo(np.float64).eps ** (1./3)
336
+ if f_rtol is None:
337
+ f_rtol = np.inf
338
+ if x_tol is None:
339
+ x_tol = np.inf
340
+ if x_rtol is None:
341
+ x_rtol = np.inf
342
+
343
+ self.x_tol = x_tol
344
+ self.x_rtol = x_rtol
345
+ self.f_tol = f_tol
346
+ self.f_rtol = f_rtol
347
+
348
+ self.norm = norm
349
+
350
+ self.iter = iter
351
+
352
+ self.f0_norm = None
353
+ self.iteration = 0
354
+
355
+ def check(self, f, x, dx):
356
+ self.iteration += 1
357
+ f_norm = self.norm(f)
358
+ x_norm = self.norm(x)
359
+ dx_norm = self.norm(dx)
360
+
361
+ if self.f0_norm is None:
362
+ self.f0_norm = f_norm
363
+
364
+ if f_norm == 0:
365
+ return 1
366
+
367
+ if self.iter is not None:
368
+ # backwards compatibility with SciPy 0.6.0
369
+ return 2 * (self.iteration > self.iter)
370
+
371
+ # NB: condition must succeed for rtol=inf even if norm == 0
372
+ return int((f_norm <= self.f_tol
373
+ and f_norm/self.f_rtol <= self.f0_norm)
374
+ and (dx_norm <= self.x_tol
375
+ and dx_norm/self.x_rtol <= x_norm))
376
+
377
+
378
+ #------------------------------------------------------------------------------
379
+ # Generic Jacobian approximation
380
+ #------------------------------------------------------------------------------
381
+
382
+ class Jacobian:
383
+ """
384
+ Common interface for Jacobians or Jacobian approximations.
385
+
386
+ The optional methods come useful when implementing trust region
387
+ etc., algorithms that often require evaluating transposes of the
388
+ Jacobian.
389
+
390
+ Methods
391
+ -------
392
+ solve
393
+ Returns J^-1 * v
394
+ update
395
+ Updates Jacobian to point `x` (where the function has residual `Fx`)
396
+
397
+ matvec : optional
398
+ Returns J * v
399
+ rmatvec : optional
400
+ Returns A^H * v
401
+ rsolve : optional
402
+ Returns A^-H * v
403
+ matmat : optional
404
+ Returns A * V, where V is a dense matrix with dimensions (N,K).
405
+ todense : optional
406
+ Form the dense Jacobian matrix. Necessary for dense trust region
407
+ algorithms, and useful for testing.
408
+
409
+ Attributes
410
+ ----------
411
+ shape
412
+ Matrix dimensions (M, N)
413
+ dtype
414
+ Data type of the matrix.
415
+ func : callable, optional
416
+ Function the Jacobian corresponds to
417
+
418
+ """
419
+
420
+ def __init__(self, **kw):
421
+ names = ["solve", "update", "matvec", "rmatvec", "rsolve",
422
+ "matmat", "todense", "shape", "dtype"]
423
+ for name, value in kw.items():
424
+ if name not in names:
425
+ raise ValueError(f"Unknown keyword argument {name}")
426
+ if value is not None:
427
+ setattr(self, name, kw[name])
428
+
429
+
430
+ if hasattr(self, "todense"):
431
+ def __array__(self, dtype=None, copy=None):
432
+ if dtype is not None:
433
+ raise ValueError(f"`dtype` must be None, was {dtype}")
434
+ return self.todense()
435
+
436
+ def aspreconditioner(self):
437
+ return InverseJacobian(self)
438
+
439
+ def solve(self, v, tol=0):
440
+ raise NotImplementedError
441
+
442
+ def update(self, x, F):
443
+ pass
444
+
445
+ def setup(self, x, F, func):
446
+ self.func = func
447
+ self.shape = (F.size, x.size)
448
+ self.dtype = F.dtype
449
+ if self.__class__.setup is Jacobian.setup:
450
+ # Call on the first point unless overridden
451
+ self.update(x, F)
452
+
453
+
454
+ class InverseJacobian:
455
+ """
456
+ A simple wrapper that inverts the Jacobian using the `solve` method.
457
+
458
+ .. legacy:: class
459
+
460
+ See the newer, more consistent interfaces in :mod:`scipy.optimize`.
461
+
462
+ Parameters
463
+ ----------
464
+ jacobian : Jacobian
465
+ The Jacobian to invert.
466
+
467
+ Attributes
468
+ ----------
469
+ shape
470
+ Matrix dimensions (M, N)
471
+ dtype
472
+ Data type of the matrix.
473
+
474
+ """
475
+ def __init__(self, jacobian):
476
+ self.jacobian = jacobian
477
+ self.matvec = jacobian.solve
478
+ self.update = jacobian.update
479
+ if hasattr(jacobian, 'setup'):
480
+ self.setup = jacobian.setup
481
+ if hasattr(jacobian, 'rsolve'):
482
+ self.rmatvec = jacobian.rsolve
483
+
484
+ @property
485
+ def shape(self):
486
+ return self.jacobian.shape
487
+
488
+ @property
489
+ def dtype(self):
490
+ return self.jacobian.dtype
491
+
492
+
493
+ def asjacobian(J):
494
+ """
495
+ Convert given object to one suitable for use as a Jacobian.
496
+ """
497
+ spsolve = scipy.sparse.linalg.spsolve
498
+ if isinstance(J, Jacobian):
499
+ return J
500
+ elif inspect.isclass(J) and issubclass(J, Jacobian):
501
+ return J()
502
+ elif isinstance(J, np.ndarray):
503
+ if J.ndim > 2:
504
+ raise ValueError('array must have rank <= 2')
505
+ J = np.atleast_2d(np.asarray(J))
506
+ if J.shape[0] != J.shape[1]:
507
+ raise ValueError('array must be square')
508
+
509
+ return Jacobian(matvec=lambda v: dot(J, v),
510
+ rmatvec=lambda v: dot(J.conj().T, v),
511
+ solve=lambda v, tol=0: solve(J, v),
512
+ rsolve=lambda v, tol=0: solve(J.conj().T, v),
513
+ dtype=J.dtype, shape=J.shape)
514
+ elif scipy.sparse.issparse(J):
515
+ if J.shape[0] != J.shape[1]:
516
+ raise ValueError('matrix must be square')
517
+ return Jacobian(matvec=lambda v: J @ v,
518
+ rmatvec=lambda v: J.conj().T @ v,
519
+ solve=lambda v, tol=0: spsolve(J, v),
520
+ rsolve=lambda v, tol=0: spsolve(J.conj().T, v),
521
+ dtype=J.dtype, shape=J.shape)
522
+ elif hasattr(J, 'shape') and hasattr(J, 'dtype') and hasattr(J, 'solve'):
523
+ return Jacobian(matvec=getattr(J, 'matvec'),
524
+ rmatvec=getattr(J, 'rmatvec'),
525
+ solve=J.solve,
526
+ rsolve=getattr(J, 'rsolve'),
527
+ update=getattr(J, 'update'),
528
+ setup=getattr(J, 'setup'),
529
+ dtype=J.dtype,
530
+ shape=J.shape)
531
+ elif callable(J):
532
+ # Assume it's a function J(x) that returns the Jacobian
533
+ class Jac(Jacobian):
534
+ def update(self, x, F):
535
+ self.x = x
536
+
537
+ def solve(self, v, tol=0):
538
+ m = J(self.x)
539
+ if isinstance(m, np.ndarray):
540
+ return solve(m, v)
541
+ elif scipy.sparse.issparse(m):
542
+ return spsolve(m, v)
543
+ else:
544
+ raise ValueError("Unknown matrix type")
545
+
546
+ def matvec(self, v):
547
+ m = J(self.x)
548
+ if isinstance(m, np.ndarray):
549
+ return dot(m, v)
550
+ elif scipy.sparse.issparse(m):
551
+ return m @ v
552
+ else:
553
+ raise ValueError("Unknown matrix type")
554
+
555
+ def rsolve(self, v, tol=0):
556
+ m = J(self.x)
557
+ if isinstance(m, np.ndarray):
558
+ return solve(m.conj().T, v)
559
+ elif scipy.sparse.issparse(m):
560
+ return spsolve(m.conj().T, v)
561
+ else:
562
+ raise ValueError("Unknown matrix type")
563
+
564
+ def rmatvec(self, v):
565
+ m = J(self.x)
566
+ if isinstance(m, np.ndarray):
567
+ return dot(m.conj().T, v)
568
+ elif scipy.sparse.issparse(m):
569
+ return m.conj().T @ v
570
+ else:
571
+ raise ValueError("Unknown matrix type")
572
+ return Jac()
573
+ elif isinstance(J, str):
574
+ return dict(broyden1=BroydenFirst,
575
+ broyden2=BroydenSecond,
576
+ anderson=Anderson,
577
+ diagbroyden=DiagBroyden,
578
+ linearmixing=LinearMixing,
579
+ excitingmixing=ExcitingMixing,
580
+ krylov=KrylovJacobian)[J]()
581
+ else:
582
+ raise TypeError('Cannot convert object to a Jacobian')
583
+
584
+
585
+ #------------------------------------------------------------------------------
586
+ # Broyden
587
+ #------------------------------------------------------------------------------
588
+
589
+ class GenericBroyden(Jacobian):
590
+ def setup(self, x0, f0, func):
591
+ Jacobian.setup(self, x0, f0, func)
592
+ self.last_f = f0
593
+ self.last_x = x0
594
+
595
+ if hasattr(self, 'alpha') and self.alpha is None:
596
+ # Autoscale the initial Jacobian parameter
597
+ # unless we have already guessed the solution.
598
+ normf0 = norm(f0)
599
+ if normf0:
600
+ self.alpha = 0.5*max(norm(x0), 1) / normf0
601
+ else:
602
+ self.alpha = 1.0
603
+
604
+ def _update(self, x, f, dx, df, dx_norm, df_norm):
605
+ raise NotImplementedError
606
+
607
+ def update(self, x, f):
608
+ df = f - self.last_f
609
+ dx = x - self.last_x
610
+ self._update(x, f, dx, df, norm(dx), norm(df))
611
+ self.last_f = f
612
+ self.last_x = x
613
+
614
+
615
+ class LowRankMatrix:
616
+ r"""
617
+ A matrix represented as
618
+
619
+ .. math:: \alpha I + \sum_{n=0}^{n=M} c_n d_n^\dagger
620
+
621
+ However, if the rank of the matrix reaches the dimension of the vectors,
622
+ full matrix representation will be used thereon.
623
+
624
+ """
625
+
626
+ def __init__(self, alpha, n, dtype):
627
+ self.alpha = alpha
628
+ self.cs = []
629
+ self.ds = []
630
+ self.n = n
631
+ self.dtype = dtype
632
+ self.collapsed = None
633
+
634
+ @staticmethod
635
+ def _matvec(v, alpha, cs, ds):
636
+ axpy, scal, dotc = get_blas_funcs(['axpy', 'scal', 'dotc'],
637
+ cs[:1] + [v])
638
+ w = alpha * v
639
+ for c, d in zip(cs, ds):
640
+ a = dotc(d, v)
641
+ w = axpy(c, w, w.size, a)
642
+ return w
643
+
644
+ @staticmethod
645
+ def _solve(v, alpha, cs, ds):
646
+ """Evaluate w = M^-1 v"""
647
+ if len(cs) == 0:
648
+ return v/alpha
649
+
650
+ # (B + C D^H)^-1 = B^-1 - B^-1 C (I + D^H B^-1 C)^-1 D^H B^-1
651
+
652
+ axpy, dotc = get_blas_funcs(['axpy', 'dotc'], cs[:1] + [v])
653
+
654
+ c0 = cs[0]
655
+ A = alpha * np.identity(len(cs), dtype=c0.dtype)
656
+ for i, d in enumerate(ds):
657
+ for j, c in enumerate(cs):
658
+ A[i,j] += dotc(d, c)
659
+
660
+ q = np.zeros(len(cs), dtype=c0.dtype)
661
+ for j, d in enumerate(ds):
662
+ q[j] = dotc(d, v)
663
+ q /= alpha
664
+ q = solve(A, q)
665
+
666
+ w = v/alpha
667
+ for c, qc in zip(cs, q):
668
+ w = axpy(c, w, w.size, -qc)
669
+
670
+ return w
671
+
672
+ def matvec(self, v):
673
+ """Evaluate w = M v"""
674
+ if self.collapsed is not None:
675
+ return np.dot(self.collapsed, v)
676
+ return LowRankMatrix._matvec(v, self.alpha, self.cs, self.ds)
677
+
678
+ def rmatvec(self, v):
679
+ """Evaluate w = M^H v"""
680
+ if self.collapsed is not None:
681
+ return np.dot(self.collapsed.T.conj(), v)
682
+ return LowRankMatrix._matvec(v, np.conj(self.alpha), self.ds, self.cs)
683
+
684
+ def solve(self, v, tol=0):
685
+ """Evaluate w = M^-1 v"""
686
+ if self.collapsed is not None:
687
+ return solve(self.collapsed, v)
688
+ return LowRankMatrix._solve(v, self.alpha, self.cs, self.ds)
689
+
690
+ def rsolve(self, v, tol=0):
691
+ """Evaluate w = M^-H v"""
692
+ if self.collapsed is not None:
693
+ return solve(self.collapsed.T.conj(), v)
694
+ return LowRankMatrix._solve(v, np.conj(self.alpha), self.ds, self.cs)
695
+
696
+ def append(self, c, d):
697
+ if self.collapsed is not None:
698
+ self.collapsed += c[:,None] * d[None,:].conj()
699
+ return
700
+
701
+ self.cs.append(c)
702
+ self.ds.append(d)
703
+
704
+ if len(self.cs) > c.size:
705
+ self.collapse()
706
+
707
+ def __array__(self, dtype=None, copy=None):
708
+ if dtype is not None:
709
+ warnings.warn("LowRankMatrix is scipy-internal code, `dtype` "
710
+ f"should only be None but was {dtype} (not handled)",
711
+ stacklevel=3)
712
+ if copy is not None:
713
+ warnings.warn("LowRankMatrix is scipy-internal code, `copy` "
714
+ f"should only be None but was {copy} (not handled)",
715
+ stacklevel=3)
716
+ if self.collapsed is not None:
717
+ return self.collapsed
718
+
719
+ Gm = self.alpha*np.identity(self.n, dtype=self.dtype)
720
+ for c, d in zip(self.cs, self.ds):
721
+ Gm += c[:,None]*d[None,:].conj()
722
+ return Gm
723
+
724
+ def collapse(self):
725
+ """Collapse the low-rank matrix to a full-rank one."""
726
+ self.collapsed = np.array(self, copy=copy_if_needed)
727
+ self.cs = None
728
+ self.ds = None
729
+ self.alpha = None
730
+
731
+ def restart_reduce(self, rank):
732
+ """
733
+ Reduce the rank of the matrix by dropping all vectors.
734
+ """
735
+ if self.collapsed is not None:
736
+ return
737
+ assert rank > 0
738
+ if len(self.cs) > rank:
739
+ del self.cs[:]
740
+ del self.ds[:]
741
+
742
+ def simple_reduce(self, rank):
743
+ """
744
+ Reduce the rank of the matrix by dropping oldest vectors.
745
+ """
746
+ if self.collapsed is not None:
747
+ return
748
+ assert rank > 0
749
+ while len(self.cs) > rank:
750
+ del self.cs[0]
751
+ del self.ds[0]
752
+
753
+ def svd_reduce(self, max_rank, to_retain=None):
754
+ """
755
+ Reduce the rank of the matrix by retaining some SVD components.
756
+
757
+ This corresponds to the \"Broyden Rank Reduction Inverse\"
758
+ algorithm described in [1]_.
759
+
760
+ Note that the SVD decomposition can be done by solving only a
761
+ problem whose size is the effective rank of this matrix, which
762
+ is viable even for large problems.
763
+
764
+ Parameters
765
+ ----------
766
+ max_rank : int
767
+ Maximum rank of this matrix after reduction.
768
+ to_retain : int, optional
769
+ Number of SVD components to retain when reduction is done
770
+ (ie. rank > max_rank). Default is ``max_rank - 2``.
771
+
772
+ References
773
+ ----------
774
+ .. [1] B.A. van der Rotten, PhD thesis,
775
+ \"A limited memory Broyden method to solve high-dimensional
776
+ systems of nonlinear equations\". Mathematisch Instituut,
777
+ Universiteit Leiden, The Netherlands (2003).
778
+
779
+ https://web.archive.org/web/20161022015821/http://www.math.leidenuniv.nl/scripties/Rotten.pdf
780
+
781
+ """
782
+ if self.collapsed is not None:
783
+ return
784
+
785
+ p = max_rank
786
+ if to_retain is not None:
787
+ q = to_retain
788
+ else:
789
+ q = p - 2
790
+
791
+ if self.cs:
792
+ p = min(p, len(self.cs[0]))
793
+ q = max(0, min(q, p-1))
794
+
795
+ m = len(self.cs)
796
+ if m < p:
797
+ # nothing to do
798
+ return
799
+
800
+ C = np.array(self.cs).T
801
+ D = np.array(self.ds).T
802
+
803
+ D, R = qr(D, mode='economic')
804
+ C = dot(C, R.T.conj())
805
+
806
+ U, S, WH = svd(C, full_matrices=False)
807
+
808
+ C = dot(C, inv(WH))
809
+ D = dot(D, WH.T.conj())
810
+
811
+ for k in range(q):
812
+ self.cs[k] = C[:,k].copy()
813
+ self.ds[k] = D[:,k].copy()
814
+
815
+ del self.cs[q:]
816
+ del self.ds[q:]
817
+
818
+
819
+ _doc_parts['broyden_params'] = """
820
+ alpha : float, optional
821
+ Initial guess for the Jacobian is ``(-1/alpha)``.
822
+ reduction_method : str or tuple, optional
823
+ Method used in ensuring that the rank of the Broyden matrix
824
+ stays low. Can either be a string giving the name of the method,
825
+ or a tuple of the form ``(method, param1, param2, ...)``
826
+ that gives the name of the method and values for additional parameters.
827
+
828
+ Methods available:
829
+
830
+ - ``restart``: drop all matrix columns. Has no extra parameters.
831
+ - ``simple``: drop oldest matrix column. Has no extra parameters.
832
+ - ``svd``: keep only the most significant SVD components.
833
+ Takes an extra parameter, ``to_retain``, which determines the
834
+ number of SVD components to retain when rank reduction is done.
835
+ Default is ``max_rank - 2``.
836
+
837
+ max_rank : int, optional
838
+ Maximum rank for the Broyden matrix.
839
+ Default is infinity (i.e., no rank reduction).
840
+ """.strip()
841
+
842
+
843
+ class BroydenFirst(GenericBroyden):
844
+ """
845
+ Find a root of a function, using Broyden's first Jacobian approximation.
846
+
847
+ This method is also known as "Broyden's good method".
848
+
849
+ Parameters
850
+ ----------
851
+ %(params_basic)s
852
+ %(broyden_params)s
853
+ %(params_extra)s
854
+
855
+ See Also
856
+ --------
857
+ root : Interface to root finding algorithms for multivariate
858
+ functions. See ``method='broyden1'`` in particular.
859
+
860
+ Notes
861
+ -----
862
+ This algorithm implements the inverse Jacobian Quasi-Newton update
863
+
864
+ .. math:: H_+ = H + (dx - H df) dx^\\dagger H / ( dx^\\dagger H df)
865
+
866
+ which corresponds to Broyden's first Jacobian update
867
+
868
+ .. math:: J_+ = J + (df - J dx) dx^\\dagger / dx^\\dagger dx
869
+
870
+
871
+ References
872
+ ----------
873
+ .. [1] B.A. van der Rotten, PhD thesis,
874
+ "A limited memory Broyden method to solve high-dimensional
875
+ systems of nonlinear equations". Mathematisch Instituut,
876
+ Universiteit Leiden, The Netherlands (2003).
877
+ https://math.leidenuniv.nl/scripties/Rotten.pdf
878
+
879
+ Examples
880
+ --------
881
+ The following functions define a system of nonlinear equations
882
+
883
+ >>> def fun(x):
884
+ ... return [x[0] + 0.5 * (x[0] - x[1])**3 - 1.0,
885
+ ... 0.5 * (x[1] - x[0])**3 + x[1]]
886
+
887
+ A solution can be obtained as follows.
888
+
889
+ >>> from scipy import optimize
890
+ >>> sol = optimize.broyden1(fun, [0, 0])
891
+ >>> sol
892
+ array([0.84116396, 0.15883641])
893
+
894
+ """
895
+
896
+ def __init__(self, alpha=None, reduction_method='restart', max_rank=None):
897
+ GenericBroyden.__init__(self)
898
+ self.alpha = alpha
899
+ self.Gm = None
900
+
901
+ if max_rank is None:
902
+ max_rank = np.inf
903
+ self.max_rank = max_rank
904
+
905
+ if isinstance(reduction_method, str):
906
+ reduce_params = ()
907
+ else:
908
+ reduce_params = reduction_method[1:]
909
+ reduction_method = reduction_method[0]
910
+ reduce_params = (max_rank - 1,) + reduce_params
911
+
912
+ if reduction_method == 'svd':
913
+ self._reduce = lambda: self.Gm.svd_reduce(*reduce_params)
914
+ elif reduction_method == 'simple':
915
+ self._reduce = lambda: self.Gm.simple_reduce(*reduce_params)
916
+ elif reduction_method == 'restart':
917
+ self._reduce = lambda: self.Gm.restart_reduce(*reduce_params)
918
+ else:
919
+ raise ValueError(f"Unknown rank reduction method '{reduction_method}'")
920
+
921
+ def setup(self, x, F, func):
922
+ GenericBroyden.setup(self, x, F, func)
923
+ self.Gm = LowRankMatrix(-self.alpha, self.shape[0], self.dtype)
924
+
925
+ def todense(self):
926
+ return inv(self.Gm)
927
+
928
+ def solve(self, f, tol=0):
929
+ r = self.Gm.matvec(f)
930
+ if not np.isfinite(r).all():
931
+ # singular; reset the Jacobian approximation
932
+ self.setup(self.last_x, self.last_f, self.func)
933
+ return self.Gm.matvec(f)
934
+ return r
935
+
936
+ def matvec(self, f):
937
+ return self.Gm.solve(f)
938
+
939
+ def rsolve(self, f, tol=0):
940
+ return self.Gm.rmatvec(f)
941
+
942
+ def rmatvec(self, f):
943
+ return self.Gm.rsolve(f)
944
+
945
+ def _update(self, x, f, dx, df, dx_norm, df_norm):
946
+ self._reduce() # reduce first to preserve secant condition
947
+
948
+ v = self.Gm.rmatvec(dx)
949
+ c = dx - self.Gm.matvec(df)
950
+ d = v / vdot(df, v)
951
+
952
+ self.Gm.append(c, d)
953
+
954
+
955
+ class BroydenSecond(BroydenFirst):
956
+ """
957
+ Find a root of a function, using Broyden\'s second Jacobian approximation.
958
+
959
+ This method is also known as \"Broyden's bad method\".
960
+
961
+ Parameters
962
+ ----------
963
+ %(params_basic)s
964
+ %(broyden_params)s
965
+ %(params_extra)s
966
+
967
+ See Also
968
+ --------
969
+ root : Interface to root finding algorithms for multivariate
970
+ functions. See ``method='broyden2'`` in particular.
971
+
972
+ Notes
973
+ -----
974
+ This algorithm implements the inverse Jacobian Quasi-Newton update
975
+
976
+ .. math:: H_+ = H + (dx - H df) df^\\dagger / ( df^\\dagger df)
977
+
978
+ corresponding to Broyden's second method.
979
+
980
+ References
981
+ ----------
982
+ .. [1] B.A. van der Rotten, PhD thesis,
983
+ \"A limited memory Broyden method to solve high-dimensional
984
+ systems of nonlinear equations\". Mathematisch Instituut,
985
+ Universiteit Leiden, The Netherlands (2003).
986
+
987
+ https://web.archive.org/web/20161022015821/http://www.math.leidenuniv.nl/scripties/Rotten.pdf
988
+
989
+ Examples
990
+ --------
991
+ The following functions define a system of nonlinear equations
992
+
993
+ >>> def fun(x):
994
+ ... return [x[0] + 0.5 * (x[0] - x[1])**3 - 1.0,
995
+ ... 0.5 * (x[1] - x[0])**3 + x[1]]
996
+
997
+ A solution can be obtained as follows.
998
+
999
+ >>> from scipy import optimize
1000
+ >>> sol = optimize.broyden2(fun, [0, 0])
1001
+ >>> sol
1002
+ array([0.84116365, 0.15883529])
1003
+
1004
+ """
1005
+
1006
+ def _update(self, x, f, dx, df, dx_norm, df_norm):
1007
+ self._reduce() # reduce first to preserve secant condition
1008
+
1009
+ v = df
1010
+ c = dx - self.Gm.matvec(df)
1011
+ d = v / df_norm**2
1012
+ self.Gm.append(c, d)
1013
+
1014
+
1015
+ #------------------------------------------------------------------------------
1016
+ # Broyden-like (restricted memory)
1017
+ #------------------------------------------------------------------------------
1018
+
1019
+ class Anderson(GenericBroyden):
1020
+ """
1021
+ Find a root of a function, using (extended) Anderson mixing.
1022
+
1023
+ The Jacobian is formed by for a 'best' solution in the space
1024
+ spanned by last `M` vectors. As a result, only a MxM matrix
1025
+ inversions and MxN multiplications are required. [Ey]_
1026
+
1027
+ Parameters
1028
+ ----------
1029
+ %(params_basic)s
1030
+ alpha : float, optional
1031
+ Initial guess for the Jacobian is (-1/alpha).
1032
+ M : float, optional
1033
+ Number of previous vectors to retain. Defaults to 5.
1034
+ w0 : float, optional
1035
+ Regularization parameter for numerical stability.
1036
+ Compared to unity, good values of the order of 0.01.
1037
+ %(params_extra)s
1038
+
1039
+ See Also
1040
+ --------
1041
+ root : Interface to root finding algorithms for multivariate
1042
+ functions. See ``method='anderson'`` in particular.
1043
+
1044
+ References
1045
+ ----------
1046
+ .. [Ey] V. Eyert, J. Comp. Phys., 124, 271 (1996).
1047
+
1048
+ Examples
1049
+ --------
1050
+ The following functions define a system of nonlinear equations
1051
+
1052
+ >>> def fun(x):
1053
+ ... return [x[0] + 0.5 * (x[0] - x[1])**3 - 1.0,
1054
+ ... 0.5 * (x[1] - x[0])**3 + x[1]]
1055
+
1056
+ A solution can be obtained as follows.
1057
+
1058
+ >>> from scipy import optimize
1059
+ >>> sol = optimize.anderson(fun, [0, 0])
1060
+ >>> sol
1061
+ array([0.84116588, 0.15883789])
1062
+
1063
+ """
1064
+
1065
+ # Note:
1066
+ #
1067
+ # Anderson method maintains a rank M approximation of the inverse Jacobian,
1068
+ #
1069
+ # J^-1 v ~ -v*alpha + (dX + alpha dF) A^-1 dF^H v
1070
+ # A = W + dF^H dF
1071
+ # W = w0^2 diag(dF^H dF)
1072
+ #
1073
+ # so that for w0 = 0 the secant condition applies for last M iterates, i.e.,
1074
+ #
1075
+ # J^-1 df_j = dx_j
1076
+ #
1077
+ # for all j = 0 ... M-1.
1078
+ #
1079
+ # Moreover, (from Sherman-Morrison-Woodbury formula)
1080
+ #
1081
+ # J v ~ [ b I - b^2 C (I + b dF^H A^-1 C)^-1 dF^H ] v
1082
+ # C = (dX + alpha dF) A^-1
1083
+ # b = -1/alpha
1084
+ #
1085
+ # and after simplification
1086
+ #
1087
+ # J v ~ -v/alpha + (dX/alpha + dF) (dF^H dX - alpha W)^-1 dF^H v
1088
+ #
1089
+
1090
+ def __init__(self, alpha=None, w0=0.01, M=5):
1091
+ GenericBroyden.__init__(self)
1092
+ self.alpha = alpha
1093
+ self.M = M
1094
+ self.dx = []
1095
+ self.df = []
1096
+ self.gamma = None
1097
+ self.w0 = w0
1098
+
1099
+ def solve(self, f, tol=0):
1100
+ dx = -self.alpha*f
1101
+
1102
+ n = len(self.dx)
1103
+ if n == 0:
1104
+ return dx
1105
+
1106
+ df_f = np.empty(n, dtype=f.dtype)
1107
+ for k in range(n):
1108
+ df_f[k] = vdot(self.df[k], f)
1109
+
1110
+ try:
1111
+ gamma = solve(self.a, df_f)
1112
+ except LinAlgError:
1113
+ # singular; reset the Jacobian approximation
1114
+ del self.dx[:]
1115
+ del self.df[:]
1116
+ return dx
1117
+
1118
+ for m in range(n):
1119
+ dx += gamma[m]*(self.dx[m] + self.alpha*self.df[m])
1120
+ return dx
1121
+
1122
+ def matvec(self, f):
1123
+ dx = -f/self.alpha
1124
+
1125
+ n = len(self.dx)
1126
+ if n == 0:
1127
+ return dx
1128
+
1129
+ df_f = np.empty(n, dtype=f.dtype)
1130
+ for k in range(n):
1131
+ df_f[k] = vdot(self.df[k], f)
1132
+
1133
+ b = np.empty((n, n), dtype=f.dtype)
1134
+ for i in range(n):
1135
+ for j in range(n):
1136
+ b[i,j] = vdot(self.df[i], self.dx[j])
1137
+ if i == j and self.w0 != 0:
1138
+ b[i,j] -= vdot(self.df[i], self.df[i])*self.w0**2*self.alpha
1139
+ gamma = solve(b, df_f)
1140
+
1141
+ for m in range(n):
1142
+ dx += gamma[m]*(self.df[m] + self.dx[m]/self.alpha)
1143
+ return dx
1144
+
1145
+ def _update(self, x, f, dx, df, dx_norm, df_norm):
1146
+ if self.M == 0:
1147
+ return
1148
+
1149
+ self.dx.append(dx)
1150
+ self.df.append(df)
1151
+
1152
+ while len(self.dx) > self.M:
1153
+ self.dx.pop(0)
1154
+ self.df.pop(0)
1155
+
1156
+ n = len(self.dx)
1157
+ a = np.zeros((n, n), dtype=f.dtype)
1158
+
1159
+ for i in range(n):
1160
+ for j in range(i, n):
1161
+ if i == j:
1162
+ wd = self.w0**2
1163
+ else:
1164
+ wd = 0
1165
+ a[i,j] = (1+wd)*vdot(self.df[i], self.df[j])
1166
+
1167
+ a += np.triu(a, 1).T.conj()
1168
+ self.a = a
1169
+
1170
+ #------------------------------------------------------------------------------
1171
+ # Simple iterations
1172
+ #------------------------------------------------------------------------------
1173
+
1174
+
1175
+ class DiagBroyden(GenericBroyden):
1176
+ """
1177
+ Find a root of a function, using diagonal Broyden Jacobian approximation.
1178
+
1179
+ The Jacobian approximation is derived from previous iterations, by
1180
+ retaining only the diagonal of Broyden matrices.
1181
+
1182
+ .. warning::
1183
+
1184
+ This algorithm may be useful for specific problems, but whether
1185
+ it will work may depend strongly on the problem.
1186
+
1187
+ Parameters
1188
+ ----------
1189
+ %(params_basic)s
1190
+ alpha : float, optional
1191
+ Initial guess for the Jacobian is (-1/alpha).
1192
+ %(params_extra)s
1193
+
1194
+ See Also
1195
+ --------
1196
+ root : Interface to root finding algorithms for multivariate
1197
+ functions. See ``method='diagbroyden'`` in particular.
1198
+
1199
+ Examples
1200
+ --------
1201
+ The following functions define a system of nonlinear equations
1202
+
1203
+ >>> def fun(x):
1204
+ ... return [x[0] + 0.5 * (x[0] - x[1])**3 - 1.0,
1205
+ ... 0.5 * (x[1] - x[0])**3 + x[1]]
1206
+
1207
+ A solution can be obtained as follows.
1208
+
1209
+ >>> from scipy import optimize
1210
+ >>> sol = optimize.diagbroyden(fun, [0, 0])
1211
+ >>> sol
1212
+ array([0.84116403, 0.15883384])
1213
+
1214
+ """
1215
+
1216
+ def __init__(self, alpha=None):
1217
+ GenericBroyden.__init__(self)
1218
+ self.alpha = alpha
1219
+
1220
+ def setup(self, x, F, func):
1221
+ GenericBroyden.setup(self, x, F, func)
1222
+ self.d = np.full((self.shape[0],), 1 / self.alpha, dtype=self.dtype)
1223
+
1224
+ def solve(self, f, tol=0):
1225
+ return -f / self.d
1226
+
1227
+ def matvec(self, f):
1228
+ return -f * self.d
1229
+
1230
+ def rsolve(self, f, tol=0):
1231
+ return -f / self.d.conj()
1232
+
1233
+ def rmatvec(self, f):
1234
+ return -f * self.d.conj()
1235
+
1236
+ def todense(self):
1237
+ return np.diag(-self.d)
1238
+
1239
+ def _update(self, x, f, dx, df, dx_norm, df_norm):
1240
+ self.d -= (df + self.d*dx)*dx/dx_norm**2
1241
+
1242
+
1243
+ class LinearMixing(GenericBroyden):
1244
+ """
1245
+ Find a root of a function, using a scalar Jacobian approximation.
1246
+
1247
+ .. warning::
1248
+
1249
+ This algorithm may be useful for specific problems, but whether
1250
+ it will work may depend strongly on the problem.
1251
+
1252
+ Parameters
1253
+ ----------
1254
+ %(params_basic)s
1255
+ alpha : float, optional
1256
+ The Jacobian approximation is (-1/alpha).
1257
+ %(params_extra)s
1258
+
1259
+ See Also
1260
+ --------
1261
+ root : Interface to root finding algorithms for multivariate
1262
+ functions. See ``method='linearmixing'`` in particular.
1263
+
1264
+ """
1265
+
1266
+ def __init__(self, alpha=None):
1267
+ GenericBroyden.__init__(self)
1268
+ self.alpha = alpha
1269
+
1270
+ def solve(self, f, tol=0):
1271
+ return -f*self.alpha
1272
+
1273
+ def matvec(self, f):
1274
+ return -f/self.alpha
1275
+
1276
+ def rsolve(self, f, tol=0):
1277
+ return -f*np.conj(self.alpha)
1278
+
1279
+ def rmatvec(self, f):
1280
+ return -f/np.conj(self.alpha)
1281
+
1282
+ def todense(self):
1283
+ return np.diag(np.full(self.shape[0], -1/self.alpha))
1284
+
1285
+ def _update(self, x, f, dx, df, dx_norm, df_norm):
1286
+ pass
1287
+
1288
+
1289
+ class ExcitingMixing(GenericBroyden):
1290
+ """
1291
+ Find a root of a function, using a tuned diagonal Jacobian approximation.
1292
+
1293
+ The Jacobian matrix is diagonal and is tuned on each iteration.
1294
+
1295
+ .. warning::
1296
+
1297
+ This algorithm may be useful for specific problems, but whether
1298
+ it will work may depend strongly on the problem.
1299
+
1300
+ See Also
1301
+ --------
1302
+ root : Interface to root finding algorithms for multivariate
1303
+ functions. See ``method='excitingmixing'`` in particular.
1304
+
1305
+ Parameters
1306
+ ----------
1307
+ %(params_basic)s
1308
+ alpha : float, optional
1309
+ Initial Jacobian approximation is (-1/alpha).
1310
+ alphamax : float, optional
1311
+ The entries of the diagonal Jacobian are kept in the range
1312
+ ``[alpha, alphamax]``.
1313
+ %(params_extra)s
1314
+ """
1315
+
1316
+ def __init__(self, alpha=None, alphamax=1.0):
1317
+ GenericBroyden.__init__(self)
1318
+ self.alpha = alpha
1319
+ self.alphamax = alphamax
1320
+ self.beta = None
1321
+
1322
+ def setup(self, x, F, func):
1323
+ GenericBroyden.setup(self, x, F, func)
1324
+ self.beta = np.full((self.shape[0],), self.alpha, dtype=self.dtype)
1325
+
1326
+ def solve(self, f, tol=0):
1327
+ return -f*self.beta
1328
+
1329
+ def matvec(self, f):
1330
+ return -f/self.beta
1331
+
1332
+ def rsolve(self, f, tol=0):
1333
+ return -f*self.beta.conj()
1334
+
1335
+ def rmatvec(self, f):
1336
+ return -f/self.beta.conj()
1337
+
1338
+ def todense(self):
1339
+ return np.diag(-1/self.beta)
1340
+
1341
+ def _update(self, x, f, dx, df, dx_norm, df_norm):
1342
+ incr = f*self.last_f > 0
1343
+ self.beta[incr] += self.alpha
1344
+ self.beta[~incr] = self.alpha
1345
+ np.clip(self.beta, 0, self.alphamax, out=self.beta)
1346
+
1347
+
1348
+ #------------------------------------------------------------------------------
1349
+ # Iterative/Krylov approximated Jacobians
1350
+ #------------------------------------------------------------------------------
1351
+
1352
+ class KrylovJacobian(Jacobian):
1353
+ """
1354
+ Find a root of a function, using Krylov approximation for inverse Jacobian.
1355
+
1356
+ This method is suitable for solving large-scale problems.
1357
+
1358
+ Parameters
1359
+ ----------
1360
+ %(params_basic)s
1361
+ rdiff : float, optional
1362
+ Relative step size to use in numerical differentiation.
1363
+ method : str or callable, optional
1364
+ Krylov method to use to approximate the Jacobian. Can be a string,
1365
+ or a function implementing the same interface as the iterative
1366
+ solvers in `scipy.sparse.linalg`. If a string, needs to be one of:
1367
+ ``'lgmres'``, ``'gmres'``, ``'bicgstab'``, ``'cgs'``, ``'minres'``,
1368
+ ``'tfqmr'``.
1369
+
1370
+ The default is `scipy.sparse.linalg.lgmres`.
1371
+ inner_maxiter : int, optional
1372
+ Parameter to pass to the "inner" Krylov solver: maximum number of
1373
+ iterations. Iteration will stop after maxiter steps even if the
1374
+ specified tolerance has not been achieved.
1375
+ inner_M : LinearOperator or InverseJacobian
1376
+ Preconditioner for the inner Krylov iteration.
1377
+ Note that you can use also inverse Jacobians as (adaptive)
1378
+ preconditioners. For example,
1379
+
1380
+ >>> from scipy.optimize import BroydenFirst, KrylovJacobian
1381
+ >>> from scipy.optimize import InverseJacobian
1382
+ >>> jac = BroydenFirst()
1383
+ >>> kjac = KrylovJacobian(inner_M=InverseJacobian(jac))
1384
+
1385
+ If the preconditioner has a method named 'update', it will be called
1386
+ as ``update(x, f)`` after each nonlinear step, with ``x`` giving
1387
+ the current point, and ``f`` the current function value.
1388
+ outer_k : int, optional
1389
+ Size of the subspace kept across LGMRES nonlinear iterations.
1390
+ See `scipy.sparse.linalg.lgmres` for details.
1391
+ inner_kwargs : kwargs
1392
+ Keyword parameters for the "inner" Krylov solver
1393
+ (defined with `method`). Parameter names must start with
1394
+ the `inner_` prefix which will be stripped before passing on
1395
+ the inner method. See, e.g., `scipy.sparse.linalg.gmres` for details.
1396
+ %(params_extra)s
1397
+
1398
+ See Also
1399
+ --------
1400
+ root : Interface to root finding algorithms for multivariate
1401
+ functions. See ``method='krylov'`` in particular.
1402
+ scipy.sparse.linalg.gmres
1403
+ scipy.sparse.linalg.lgmres
1404
+
1405
+ Notes
1406
+ -----
1407
+ This function implements a Newton-Krylov solver. The basic idea is
1408
+ to compute the inverse of the Jacobian with an iterative Krylov
1409
+ method. These methods require only evaluating the Jacobian-vector
1410
+ products, which are conveniently approximated by a finite difference:
1411
+
1412
+ .. math:: J v \\approx (f(x + \\omega*v/|v|) - f(x)) / \\omega
1413
+
1414
+ Due to the use of iterative matrix inverses, these methods can
1415
+ deal with large nonlinear problems.
1416
+
1417
+ SciPy's `scipy.sparse.linalg` module offers a selection of Krylov
1418
+ solvers to choose from. The default here is `lgmres`, which is a
1419
+ variant of restarted GMRES iteration that reuses some of the
1420
+ information obtained in the previous Newton steps to invert
1421
+ Jacobians in subsequent steps.
1422
+
1423
+ For a review on Newton-Krylov methods, see for example [1]_,
1424
+ and for the LGMRES sparse inverse method, see [2]_.
1425
+
1426
+ References
1427
+ ----------
1428
+ .. [1] C. T. Kelley, Solving Nonlinear Equations with Newton's Method,
1429
+ SIAM, pp.57-83, 2003.
1430
+ :doi:`10.1137/1.9780898718898.ch3`
1431
+ .. [2] D.A. Knoll and D.E. Keyes, J. Comp. Phys. 193, 357 (2004).
1432
+ :doi:`10.1016/j.jcp.2003.08.010`
1433
+ .. [3] A.H. Baker and E.R. Jessup and T. Manteuffel,
1434
+ SIAM J. Matrix Anal. Appl. 26, 962 (2005).
1435
+ :doi:`10.1137/S0895479803422014`
1436
+
1437
+ Examples
1438
+ --------
1439
+ The following functions define a system of nonlinear equations
1440
+
1441
+ >>> def fun(x):
1442
+ ... return [x[0] + 0.5 * x[1] - 1.0,
1443
+ ... 0.5 * (x[1] - x[0]) ** 2]
1444
+
1445
+ A solution can be obtained as follows.
1446
+
1447
+ >>> from scipy import optimize
1448
+ >>> sol = optimize.newton_krylov(fun, [0, 0])
1449
+ >>> sol
1450
+ array([0.66731771, 0.66536458])
1451
+
1452
+ """
1453
+
1454
+ def __init__(self, rdiff=None, method='lgmres', inner_maxiter=20,
1455
+ inner_M=None, outer_k=10, **kw):
1456
+ self.preconditioner = inner_M
1457
+ self.rdiff = rdiff
1458
+ # Note that this retrieves one of the named functions, or otherwise
1459
+ # uses `method` as is (i.e., for a user-provided callable).
1460
+ self.method = dict(
1461
+ bicgstab=scipy.sparse.linalg.bicgstab,
1462
+ gmres=scipy.sparse.linalg.gmres,
1463
+ lgmres=scipy.sparse.linalg.lgmres,
1464
+ cgs=scipy.sparse.linalg.cgs,
1465
+ minres=scipy.sparse.linalg.minres,
1466
+ tfqmr=scipy.sparse.linalg.tfqmr,
1467
+ ).get(method, method)
1468
+
1469
+ self.method_kw = dict(maxiter=inner_maxiter, M=self.preconditioner)
1470
+
1471
+ if self.method is scipy.sparse.linalg.gmres:
1472
+ # Replace GMRES's outer iteration with Newton steps
1473
+ self.method_kw['restart'] = inner_maxiter
1474
+ self.method_kw['maxiter'] = 1
1475
+ self.method_kw.setdefault('atol', 0)
1476
+ elif self.method in (scipy.sparse.linalg.gcrotmk,
1477
+ scipy.sparse.linalg.bicgstab,
1478
+ scipy.sparse.linalg.cgs):
1479
+ self.method_kw.setdefault('atol', 0)
1480
+ elif self.method is scipy.sparse.linalg.lgmres:
1481
+ self.method_kw['outer_k'] = outer_k
1482
+ # Replace LGMRES's outer iteration with Newton steps
1483
+ self.method_kw['maxiter'] = 1
1484
+ # Carry LGMRES's `outer_v` vectors across nonlinear iterations
1485
+ self.method_kw.setdefault('outer_v', [])
1486
+ self.method_kw.setdefault('prepend_outer_v', True)
1487
+ # But don't carry the corresponding Jacobian*v products, in case
1488
+ # the Jacobian changes a lot in the nonlinear step
1489
+ #
1490
+ # XXX: some trust-region inspired ideas might be more efficient...
1491
+ # See e.g., Brown & Saad. But needs to be implemented separately
1492
+ # since it's not an inexact Newton method.
1493
+ self.method_kw.setdefault('store_outer_Av', False)
1494
+ self.method_kw.setdefault('atol', 0)
1495
+
1496
+ # Retrieve the signature of the method to find the valid parameters
1497
+ valid_inner_params = [
1498
+ k for k in signature(self.method).parameters
1499
+ if k not in ('self', 'args', 'kwargs')
1500
+ ]
1501
+
1502
+ for key, value in kw.items():
1503
+ if not key.startswith("inner_"):
1504
+ raise ValueError(f"Unknown parameter {key}")
1505
+ if key[6:] not in valid_inner_params:
1506
+ # Use difflib to find close matches to the invalid key
1507
+ inner_param_suggestions = get_close_matches(key[6:],
1508
+ valid_inner_params,
1509
+ n=1)
1510
+ if inner_param_suggestions:
1511
+ suggestion_msg = (f" Did you mean '"
1512
+ f"{inner_param_suggestions[0]}'?")
1513
+ else:
1514
+ suggestion_msg = ""
1515
+
1516
+ # warn user that the parameter is not valid for the inner method
1517
+ warnings.warn(
1518
+ f"Option '{key}' is invalid for the inner method: {method}."
1519
+ " It will be ignored."
1520
+ "Please check inner method documentation for valid options."
1521
+ + suggestion_msg,
1522
+ stacklevel=3,
1523
+ category=UserWarning,
1524
+ # using `skip_file_prefixes` would be a good idea
1525
+ # and should be added once we drop support for Python 3.11
1526
+ )
1527
+ # ignore this parameter and continue
1528
+ continue
1529
+ self.method_kw[key[6:]] = value
1530
+
1531
+ def _update_diff_step(self):
1532
+ mx = abs(self.x0).max()
1533
+ mf = abs(self.f0).max()
1534
+ self.omega = self.rdiff * max(1, mx) / max(1, mf)
1535
+
1536
+ def matvec(self, v):
1537
+ nv = norm(v)
1538
+ if nv == 0:
1539
+ return 0*v
1540
+ sc = self.omega / nv
1541
+ r = (self.func(self.x0 + sc*v) - self.f0) / sc
1542
+ if not np.all(np.isfinite(r)) and np.all(np.isfinite(v)):
1543
+ raise ValueError('Function returned non-finite results')
1544
+ return r
1545
+
1546
+ def solve(self, rhs, tol=0):
1547
+ if 'rtol' in self.method_kw:
1548
+ sol, info = self.method(self.op, rhs, **self.method_kw)
1549
+ else:
1550
+ sol, info = self.method(self.op, rhs, rtol=tol, **self.method_kw)
1551
+ return sol
1552
+
1553
+ def update(self, x, f):
1554
+ self.x0 = x
1555
+ self.f0 = f
1556
+ self._update_diff_step()
1557
+
1558
+ # Update also the preconditioner, if possible
1559
+ if self.preconditioner is not None:
1560
+ if hasattr(self.preconditioner, 'update'):
1561
+ self.preconditioner.update(x, f)
1562
+
1563
+ def setup(self, x, f, func):
1564
+ Jacobian.setup(self, x, f, func)
1565
+ self.x0 = x
1566
+ self.f0 = f
1567
+ self.op = scipy.sparse.linalg.aslinearoperator(self)
1568
+
1569
+ if self.rdiff is None:
1570
+ self.rdiff = np.finfo(x.dtype).eps ** (1./2)
1571
+
1572
+ self._update_diff_step()
1573
+
1574
+ # Setup also the preconditioner, if possible
1575
+ if self.preconditioner is not None:
1576
+ if hasattr(self.preconditioner, 'setup'):
1577
+ self.preconditioner.setup(x, f, func)
1578
+
1579
+
1580
+ #------------------------------------------------------------------------------
1581
+ # Wrapper functions
1582
+ #------------------------------------------------------------------------------
1583
+
1584
+ def _nonlin_wrapper(name, jac):
1585
+ """
1586
+ Construct a solver wrapper with given name and Jacobian approx.
1587
+
1588
+ It inspects the keyword arguments of ``jac.__init__``, and allows to
1589
+ use the same arguments in the wrapper function, in addition to the
1590
+ keyword arguments of `nonlin_solve`
1591
+
1592
+ """
1593
+ signature = _getfullargspec(jac.__init__)
1594
+ args, varargs, varkw, defaults, kwonlyargs, kwdefaults, _ = signature
1595
+ kwargs = list(zip(args[-len(defaults):], defaults))
1596
+ kw_str = ", ".join([f"{k}={v!r}" for k, v in kwargs])
1597
+ if kw_str:
1598
+ kw_str = ", " + kw_str
1599
+ kwkw_str = ", ".join([f"{k}={k}" for k, v in kwargs])
1600
+ if kwkw_str:
1601
+ kwkw_str = kwkw_str + ", "
1602
+ if kwonlyargs:
1603
+ raise ValueError(f'Unexpected signature {signature}')
1604
+
1605
+ # Construct the wrapper function so that its keyword arguments
1606
+ # are visible in pydoc.help etc.
1607
+ wrapper = """
1608
+ def %(name)s(F, xin, iter=None %(kw)s, verbose=False, maxiter=None,
1609
+ f_tol=None, f_rtol=None, x_tol=None, x_rtol=None,
1610
+ tol_norm=None, line_search='armijo', callback=None, **kw):
1611
+ jac = %(jac)s(%(kwkw)s **kw)
1612
+ return nonlin_solve(F, xin, jac, iter, verbose, maxiter,
1613
+ f_tol, f_rtol, x_tol, x_rtol, tol_norm, line_search,
1614
+ callback)
1615
+ """
1616
+
1617
+ wrapper = wrapper % dict(name=name, kw=kw_str, jac=jac.__name__,
1618
+ kwkw=kwkw_str)
1619
+ ns = {}
1620
+ ns.update(globals())
1621
+ exec(wrapper, ns)
1622
+ func = ns[name]
1623
+ func.__doc__ = jac.__doc__
1624
+ _set_doc(func)
1625
+ return func
1626
+
1627
+
1628
+ broyden1 = _nonlin_wrapper('broyden1', BroydenFirst)
1629
+ broyden2 = _nonlin_wrapper('broyden2', BroydenSecond)
1630
+ anderson = _nonlin_wrapper('anderson', Anderson)
1631
+ linearmixing = _nonlin_wrapper('linearmixing', LinearMixing)
1632
+ diagbroyden = _nonlin_wrapper('diagbroyden', DiagBroyden)
1633
+ excitingmixing = _nonlin_wrapper('excitingmixing', ExcitingMixing)
1634
+ newton_krylov = _nonlin_wrapper('newton_krylov', KrylovJacobian)