scipy 1.16.2__cp314-cp314-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.cp314-win_arm64.lib +0 -0
  4. scipy/_cyutility.cp314-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.cp314-win_arm64.lib +0 -0
  13. scipy/_lib/_ccallback_c.cp314-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.cp314-win_arm64.lib +0 -0
  18. scipy/_lib/_fpumode.cp314-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.cp314-win_arm64.lib +0 -0
  23. scipy/_lib/_test_ccallback.cp314-win_arm64.pyd +0 -0
  24. scipy/_lib/_test_deprecation_call.cp314-win_arm64.lib +0 -0
  25. scipy/_lib/_test_deprecation_call.cp314-win_arm64.pyd +0 -0
  26. scipy/_lib/_test_deprecation_def.cp314-win_arm64.lib +0 -0
  27. scipy/_lib/_test_deprecation_def.cp314-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.cp314-win_arm64.lib +0 -0
  35. scipy/_lib/_uarray/_uarray.cp314-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.cp314-win_arm64.lib +0 -0
  101. scipy/_lib/messagestream.cp314-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.cp314-win_arm64.lib +0 -0
  148. scipy/cluster/_hierarchy.cp314-win_arm64.pyd +0 -0
  149. scipy/cluster/_optimal_leaf_ordering.cp314-win_arm64.lib +0 -0
  150. scipy/cluster/_optimal_leaf_ordering.cp314-win_arm64.pyd +0 -0
  151. scipy/cluster/_vq.cp314-win_arm64.lib +0 -0
  152. scipy/cluster/_vq.cp314-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.cp314-win_arm64.lib +0 -0
  193. scipy/fft/_pocketfft/pypocketfft.cp314-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.cp314-win_arm64.lib +0 -0
  215. scipy/fftpack/convolve.cp314-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.cp314-win_arm64.lib +0 -0
  233. scipy/integrate/_dop.cp314-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.cp314-win_arm64.lib +0 -0
  248. scipy/integrate/_lsoda.cp314-win_arm64.pyd +0 -0
  249. scipy/integrate/_ode.py +1395 -0
  250. scipy/integrate/_odepack.cp314-win_arm64.lib +0 -0
  251. scipy/integrate/_odepack.cp314-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.cp314-win_arm64.lib +0 -0
  255. scipy/integrate/_quadpack.cp314-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.cp314-win_arm64.lib +0 -0
  265. scipy/integrate/_test_multivariate.cp314-win_arm64.pyd +0 -0
  266. scipy/integrate/_test_odeint_banded.cp314-win_arm64.lib +0 -0
  267. scipy/integrate/_test_odeint_banded.cp314-win_arm64.pyd +0 -0
  268. scipy/integrate/_vode.cp314-win_arm64.lib +0 -0
  269. scipy/integrate/_vode.cp314-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.cp314-win_arm64.lib +0 -0
  290. scipy/interpolate/_dfitpack.cp314-win_arm64.pyd +0 -0
  291. scipy/interpolate/_dierckx.cp314-win_arm64.lib +0 -0
  292. scipy/interpolate/_dierckx.cp314-win_arm64.pyd +0 -0
  293. scipy/interpolate/_fitpack.cp314-win_arm64.lib +0 -0
  294. scipy/interpolate/_fitpack.cp314-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.cp314-win_arm64.lib +0 -0
  300. scipy/interpolate/_interpnd.cp314-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.cp314-win_arm64.lib +0 -0
  307. scipy/interpolate/_ppoly.cp314-win_arm64.pyd +0 -0
  308. scipy/interpolate/_rbf.py +290 -0
  309. scipy/interpolate/_rbfinterp.py +550 -0
  310. scipy/interpolate/_rbfinterp_pythran.cp314-win_arm64.lib +0 -0
  311. scipy/interpolate/_rbfinterp_pythran.cp314-win_arm64.pyd +0 -0
  312. scipy/interpolate/_rgi.py +764 -0
  313. scipy/interpolate/_rgi_cython.cp314-win_arm64.lib +0 -0
  314. scipy/interpolate/_rgi_cython.cp314-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.cp314-win_arm64.lib +0 -0
  343. scipy/io/_fast_matrix_market/_fmm_core.cp314-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.cp314-win_arm64.lib +0 -0
  355. scipy/io/_test_fortran.cp314-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.cp314-win_arm64.lib +0 -0
  386. scipy/io/matlab/_mio5_utils.cp314-win_arm64.pyd +0 -0
  387. scipy/io/matlab/_mio_utils.cp314-win_arm64.lib +0 -0
  388. scipy/io/matlab/_mio_utils.cp314-win_arm64.pyd +0 -0
  389. scipy/io/matlab/_miobase.py +435 -0
  390. scipy/io/matlab/_streams.cp314-win_arm64.lib +0 -0
  391. scipy/io/matlab/_streams.cp314-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.cp314-win_arm64.lib +0 -0
  623. scipy/linalg/_cythonized_array_utils.cp314-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.cp314-win_arm64.lib +0 -0
  630. scipy/linalg/_decomp_interpolative.cp314-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.cp314-win_arm64.lib +0 -0
  634. scipy/linalg/_decomp_lu_cython.cp314-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.cp314-win_arm64.lib +0 -0
  642. scipy/linalg/_decomp_update.cp314-win_arm64.pyd +0 -0
  643. scipy/linalg/_expm_frechet.py +417 -0
  644. scipy/linalg/_fblas.cp314-win_arm64.lib +0 -0
  645. scipy/linalg/_fblas.cp314-win_arm64.pyd +0 -0
  646. scipy/linalg/_flapack.cp314-win_arm64.lib +0 -0
  647. scipy/linalg/_flapack.cp314-win_arm64.pyd +0 -0
  648. scipy/linalg/_lapack_subroutines.h +1521 -0
  649. scipy/linalg/_linalg_pythran.cp314-win_arm64.lib +0 -0
  650. scipy/linalg/_linalg_pythran.cp314-win_arm64.pyd +0 -0
  651. scipy/linalg/_matfuncs.py +1050 -0
  652. scipy/linalg/_matfuncs_expm.cp314-win_arm64.lib +0 -0
  653. scipy/linalg/_matfuncs_expm.cp314-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.cp314-win_arm64.lib +0 -0
  657. scipy/linalg/_matfuncs_schur_sqrtm.cp314-win_arm64.pyd +0 -0
  658. scipy/linalg/_matfuncs_sqrtm.py +107 -0
  659. scipy/linalg/_matfuncs_sqrtm_triu.cp314-win_arm64.lib +0 -0
  660. scipy/linalg/_matfuncs_sqrtm_triu.cp314-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.cp314-win_arm64.lib +0 -0
  665. scipy/linalg/_solve_toeplitz.cp314-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.cp314-win_arm64.lib +0 -0
  672. scipy/linalg/cython_blas.cp314-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.cp314-win_arm64.lib +0 -0
  676. scipy/linalg/cython_lapack.cp314-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.cp314-win_arm64.lib +0 -0
  728. scipy/ndimage/_ctest.cp314-win_arm64.pyd +0 -0
  729. scipy/ndimage/_cytest.cp314-win_arm64.lib +0 -0
  730. scipy/ndimage/_cytest.cp314-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.cp314-win_arm64.lib +0 -0
  738. scipy/ndimage/_nd_image.cp314-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.cp314-win_arm64.lib +0 -0
  742. scipy/ndimage/_ni_label.cp314-win_arm64.pyd +0 -0
  743. scipy/ndimage/_ni_support.py +139 -0
  744. scipy/ndimage/_rank_filter_1d.cp314-win_arm64.lib +0 -0
  745. scipy/ndimage/_rank_filter_1d.cp314-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.cp314-win_arm64.lib +0 -0
  768. scipy/odr/__odrpack.cp314-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.cp314-win_arm64.lib +0 -0
  780. scipy/optimize/_bglu_dense.cp314-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.cp314-win_arm64.lib +0 -0
  790. scipy/optimize/_direct.cp314-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.cp314-win_arm64.lib +0 -0
  795. scipy/optimize/_group_columns.cp314-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.cp314-win_arm64.lib +0 -0
  799. scipy/optimize/_highspy/_core.cp314-win_arm64.pyd +0 -0
  800. scipy/optimize/_highspy/_highs_options.cp314-win_arm64.lib +0 -0
  801. scipy/optimize/_highspy/_highs_options.cp314-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.cp314-win_arm64.lib +0 -0
  805. scipy/optimize/_lbfgsb.cp314-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.cp314-win_arm64.lib +0 -0
  816. scipy/optimize/_lsap.cp314-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.cp314-win_arm64.lib +0 -0
  822. scipy/optimize/_lsq/givens_elimination.cp314-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.cp314-win_arm64.lib +0 -0
  830. scipy/optimize/_minpack.cp314-win_arm64.pyd +0 -0
  831. scipy/optimize/_minpack_py.py +1178 -0
  832. scipy/optimize/_moduleTNC.cp314-win_arm64.lib +0 -0
  833. scipy/optimize/_moduleTNC.cp314-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.cp314-win_arm64.lib +0 -0
  839. scipy/optimize/_pava_pybind.cp314-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.cp314-win_arm64.lib +0 -0
  850. scipy/optimize/_slsqplib.cp314-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.cp314-win_arm64.lib +0 -0
  855. scipy/optimize/_trlib/_trlib.cp314-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.cp314-win_arm64.lib +0 -0
  877. scipy/optimize/_zeros.cp314-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.cp314-win_arm64.lib +0 -0
  882. scipy/optimize/cython_optimize/_zeros.cp314-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.cp314-win_arm64.lib +0 -0
  953. scipy/signal/_max_len_seq_inner.cp314-win_arm64.pyd +0 -0
  954. scipy/signal/_peak_finding.py +1310 -0
  955. scipy/signal/_peak_finding_utils.cp314-win_arm64.lib +0 -0
  956. scipy/signal/_peak_finding_utils.cp314-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.cp314-win_arm64.lib +0 -0
  963. scipy/signal/_sigtools.cp314-win_arm64.pyd +0 -0
  964. scipy/signal/_sosfilt.cp314-win_arm64.lib +0 -0
  965. scipy/signal/_sosfilt.cp314-win_arm64.pyd +0 -0
  966. scipy/signal/_spectral_py.py +2471 -0
  967. scipy/signal/_spline.cp314-win_arm64.lib +0 -0
  968. scipy/signal/_spline.cp314-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.cp314-win_arm64.lib +0 -0
  974. scipy/signal/_upfirdn_apply.cp314-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.cp314-win_arm64.lib +0 -0
  1021. scipy/sparse/_csparsetools.cp314-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.cp314-win_arm64.lib +0 -0
  1032. scipy/sparse/_sparsetools.cp314-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.cp314-win_arm64.lib +0 -0
  1043. scipy/sparse/csgraph/_flow.cp314-win_arm64.pyd +0 -0
  1044. scipy/sparse/csgraph/_laplacian.py +563 -0
  1045. scipy/sparse/csgraph/_matching.cp314-win_arm64.lib +0 -0
  1046. scipy/sparse/csgraph/_matching.cp314-win_arm64.pyd +0 -0
  1047. scipy/sparse/csgraph/_min_spanning_tree.cp314-win_arm64.lib +0 -0
  1048. scipy/sparse/csgraph/_min_spanning_tree.cp314-win_arm64.pyd +0 -0
  1049. scipy/sparse/csgraph/_reordering.cp314-win_arm64.lib +0 -0
  1050. scipy/sparse/csgraph/_reordering.cp314-win_arm64.pyd +0 -0
  1051. scipy/sparse/csgraph/_shortest_path.cp314-win_arm64.lib +0 -0
  1052. scipy/sparse/csgraph/_shortest_path.cp314-win_arm64.pyd +0 -0
  1053. scipy/sparse/csgraph/_tools.cp314-win_arm64.lib +0 -0
  1054. scipy/sparse/csgraph/_tools.cp314-win_arm64.pyd +0 -0
  1055. scipy/sparse/csgraph/_traversal.cp314-win_arm64.lib +0 -0
  1056. scipy/sparse/csgraph/_traversal.cp314-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.cp314-win_arm64.lib +0 -0
  1079. scipy/sparse/linalg/_dsolve/_superlu.cp314-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.cp314-win_arm64.lib +0 -0
  1089. scipy/sparse/linalg/_eigen/arpack/_arpack.cp314-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.cp314-win_arm64.lib +0 -0
  1122. scipy/sparse/linalg/_propack/_cpropack.cp314-win_arm64.pyd +0 -0
  1123. scipy/sparse/linalg/_propack/_dpropack.cp314-win_arm64.lib +0 -0
  1124. scipy/sparse/linalg/_propack/_dpropack.cp314-win_arm64.pyd +0 -0
  1125. scipy/sparse/linalg/_propack/_spropack.cp314-win_arm64.lib +0 -0
  1126. scipy/sparse/linalg/_propack/_spropack.cp314-win_arm64.pyd +0 -0
  1127. scipy/sparse/linalg/_propack/_zpropack.cp314-win_arm64.lib +0 -0
  1128. scipy/sparse/linalg/_propack/_zpropack.cp314-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.cp314-win_arm64.lib +0 -0
  1170. scipy/spatial/_ckdtree.cp314-win_arm64.pyd +0 -0
  1171. scipy/spatial/_distance_pybind.cp314-win_arm64.lib +0 -0
  1172. scipy/spatial/_distance_pybind.cp314-win_arm64.pyd +0 -0
  1173. scipy/spatial/_distance_wrap.cp314-win_arm64.lib +0 -0
  1174. scipy/spatial/_distance_wrap.cp314-win_arm64.pyd +0 -0
  1175. scipy/spatial/_geometric_slerp.py +238 -0
  1176. scipy/spatial/_hausdorff.cp314-win_arm64.lib +0 -0
  1177. scipy/spatial/_hausdorff.cp314-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.cp314-win_arm64.lib +0 -0
  1182. scipy/spatial/_qhull.cp314-win_arm64.pyd +0 -0
  1183. scipy/spatial/_qhull.pyi +213 -0
  1184. scipy/spatial/_spherical_voronoi.py +341 -0
  1185. scipy/spatial/_voronoi.cp314-win_arm64.lib +0 -0
  1186. scipy/spatial/_voronoi.cp314-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.cp314-win_arm64.lib +0 -0
  1236. scipy/spatial/transform/_rigid_transform.cp314-win_arm64.pyd +0 -0
  1237. scipy/spatial/transform/_rotation.cp314-win_arm64.lib +0 -0
  1238. scipy/spatial/transform/_rotation.cp314-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.cp314-win_arm64.lib +0 -0
  1252. scipy/special/_comb.cp314-win_arm64.pyd +0 -0
  1253. scipy/special/_ellip_harm.py +214 -0
  1254. scipy/special/_ellip_harm_2.cp314-win_arm64.lib +0 -0
  1255. scipy/special/_ellip_harm_2.cp314-win_arm64.pyd +0 -0
  1256. scipy/special/_gufuncs.cp314-win_arm64.lib +0 -0
  1257. scipy/special/_gufuncs.cp314-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.cp314-win_arm64.lib +0 -0
  1281. scipy/special/_specfun.cp314-win_arm64.pyd +0 -0
  1282. scipy/special/_special_ufuncs.cp314-win_arm64.lib +0 -0
  1283. scipy/special/_special_ufuncs.cp314-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.cp314-win_arm64.lib +0 -0
  1288. scipy/special/_test_internal.cp314-win_arm64.pyd +0 -0
  1289. scipy/special/_test_internal.pyi +9 -0
  1290. scipy/special/_testutils.py +321 -0
  1291. scipy/special/_ufuncs.cp314-win_arm64.lib +0 -0
  1292. scipy/special/_ufuncs.cp314-win_arm64.pyd +0 -0
  1293. scipy/special/_ufuncs.pyi +522 -0
  1294. scipy/special/_ufuncs.pyx +13173 -0
  1295. scipy/special/_ufuncs_cxx.cp314-win_arm64.lib +0 -0
  1296. scipy/special/_ufuncs_cxx.cp314-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.cp314-win_arm64.lib +0 -0
  1304. scipy/special/cython_special.cp314-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.cp314-win_arm64.lib +0 -0
  1376. scipy/stats/_ansari_swilk_statistics.cp314-win_arm64.pyd +0 -0
  1377. scipy/stats/_axis_nan_policy.py +692 -0
  1378. scipy/stats/_biasedurn.cp314-win_arm64.lib +0 -0
  1379. scipy/stats/_biasedurn.cp314-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.cp314-win_arm64.lib +0 -0
  1404. scipy/stats/_levy_stable/levyst.cp314-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.cp314-win_arm64.lib +0 -0
  1418. scipy/stats/_qmc_cy.cp314-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.cp314-win_arm64.lib +0 -0
  1422. scipy/stats/_qmvnt_cy.cp314-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.cp314-win_arm64.lib +0 -0
  1426. scipy/stats/_rcont/rcont.cp314-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.cp314-win_arm64.lib +0 -0
  1433. scipy/stats/_sobol.cp314-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.cp314-win_arm64.lib +0 -0
  1437. scipy/stats/_stats.cp314-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.cp314-win_arm64.lib +0 -0
  1442. scipy/stats/_stats_pythran.cp314-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.cp314-win_arm64.lib +0 -0
  1447. scipy/stats/_unuran/unuran_wrapper.cp314-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,1475 @@
1
+ import warnings
2
+ from collections import namedtuple
3
+ import operator
4
+ from . import _zeros
5
+ from ._optimize import OptimizeResult
6
+ import numpy as np
7
+
8
+
9
+ _iter = 100
10
+ _xtol = 2e-12
11
+ _rtol = 4 * np.finfo(float).eps
12
+
13
+ __all__ = ['newton', 'bisect', 'ridder', 'brentq', 'brenth', 'toms748',
14
+ 'RootResults']
15
+
16
+ # Must agree with CONVERGED, SIGNERR, CONVERR, ... in zeros.h
17
+ _ECONVERGED = 0
18
+ _ESIGNERR = -1 # used in _chandrupatla
19
+ _ECONVERR = -2
20
+ _EVALUEERR = -3
21
+ _ECALLBACK = -4
22
+ _EINPROGRESS = 1
23
+
24
+ CONVERGED = 'converged'
25
+ SIGNERR = 'sign error'
26
+ CONVERR = 'convergence error'
27
+ VALUEERR = 'value error'
28
+ INPROGRESS = 'No error'
29
+
30
+
31
+ flag_map = {_ECONVERGED: CONVERGED, _ESIGNERR: SIGNERR, _ECONVERR: CONVERR,
32
+ _EVALUEERR: VALUEERR, _EINPROGRESS: INPROGRESS}
33
+
34
+
35
+ class RootResults(OptimizeResult):
36
+ """Represents the root finding result.
37
+
38
+ Attributes
39
+ ----------
40
+ root : float
41
+ Estimated root location.
42
+ iterations : int
43
+ Number of iterations needed to find the root.
44
+ function_calls : int
45
+ Number of times the function was called.
46
+ converged : bool
47
+ True if the routine converged.
48
+ flag : str
49
+ Description of the cause of termination.
50
+ method : str
51
+ Root finding method used.
52
+
53
+ """
54
+
55
+ def __init__(self, root, iterations, function_calls, flag, method):
56
+ self.root = root
57
+ self.iterations = iterations
58
+ self.function_calls = function_calls
59
+ self.converged = flag == _ECONVERGED
60
+ if flag in flag_map:
61
+ self.flag = flag_map[flag]
62
+ else:
63
+ self.flag = flag
64
+ self.method = method
65
+
66
+
67
+ def results_c(full_output, r, method):
68
+ if full_output:
69
+ x, funcalls, iterations, flag = r
70
+ results = RootResults(root=x,
71
+ iterations=iterations,
72
+ function_calls=funcalls,
73
+ flag=flag, method=method)
74
+ return x, results
75
+ else:
76
+ return r
77
+
78
+
79
+ def _results_select(full_output, r, method):
80
+ """Select from a tuple of (root, funccalls, iterations, flag)"""
81
+ x, funcalls, iterations, flag = r
82
+ if full_output:
83
+ results = RootResults(root=x,
84
+ iterations=iterations,
85
+ function_calls=funcalls,
86
+ flag=flag, method=method)
87
+ return x, results
88
+ return x
89
+
90
+
91
+ def _wrap_nan_raise(f):
92
+
93
+ def f_raise(x, *args):
94
+ fx = f(x, *args)
95
+ f_raise._function_calls += 1
96
+ if np.isnan(fx):
97
+ msg = (f'The function value at x={x} is NaN; '
98
+ 'solver cannot continue.')
99
+ err = ValueError(msg)
100
+ err._x = x
101
+ err._function_calls = f_raise._function_calls
102
+ raise err
103
+ return fx
104
+
105
+ f_raise._function_calls = 0
106
+ return f_raise
107
+
108
+
109
+ def newton(func, x0, fprime=None, args=(), tol=1.48e-8, maxiter=50,
110
+ fprime2=None, x1=None, rtol=0.0,
111
+ full_output=False, disp=True):
112
+ """
113
+ Find a root of a real or complex function using the Newton-Raphson
114
+ (or secant or Halley's) method.
115
+
116
+ Find a root of the scalar-valued function `func` given a nearby scalar
117
+ starting point `x0`.
118
+ The Newton-Raphson method is used if the derivative `fprime` of `func`
119
+ is provided, otherwise the secant method is used. If the second order
120
+ derivative `fprime2` of `func` is also provided, then Halley's method is
121
+ used.
122
+
123
+ If `x0` is a sequence with more than one item, `newton` returns an array:
124
+ the roots of the function from each (scalar) starting point in `x0`.
125
+ In this case, `func` must be vectorized to return a sequence or array of
126
+ the same shape as its first argument. If `fprime` (`fprime2`) is given,
127
+ then its return must also have the same shape: each element is the first
128
+ (second) derivative of `func` with respect to its only variable evaluated
129
+ at each element of its first argument.
130
+
131
+ `newton` is for finding roots of a scalar-valued functions of a single
132
+ variable. For problems involving several variables, see `root`.
133
+
134
+ Parameters
135
+ ----------
136
+ func : callable
137
+ The function whose root is wanted. It must be a function of a
138
+ single variable of the form ``f(x,a,b,c...)``, where ``a,b,c...``
139
+ are extra arguments that can be passed in the `args` parameter.
140
+ x0 : float, sequence, or ndarray
141
+ An initial estimate of the root that should be somewhere near the
142
+ actual root. If not scalar, then `func` must be vectorized and return
143
+ a sequence or array of the same shape as its first argument.
144
+ fprime : callable, optional
145
+ The derivative of the function when available and convenient. If it
146
+ is None (default), then the secant method is used.
147
+ args : tuple, optional
148
+ Extra arguments to be used in the function call.
149
+ tol : float, optional
150
+ The allowable error of the root's value. If `func` is complex-valued,
151
+ a larger `tol` is recommended as both the real and imaginary parts
152
+ of `x` contribute to ``|x - x0|``.
153
+ maxiter : int, optional
154
+ Maximum number of iterations.
155
+ fprime2 : callable, optional
156
+ The second order derivative of the function when available and
157
+ convenient. If it is None (default), then the normal Newton-Raphson
158
+ or the secant method is used. If it is not None, then Halley's method
159
+ is used.
160
+ x1 : float, optional
161
+ Another estimate of the root that should be somewhere near the
162
+ actual root. Used if `fprime` is not provided.
163
+ rtol : float, optional
164
+ Tolerance (relative) for termination.
165
+ full_output : bool, optional
166
+ If `full_output` is False (default), the root is returned.
167
+ If True and `x0` is scalar, the return value is ``(x, r)``, where ``x``
168
+ is the root and ``r`` is a `RootResults` object.
169
+ If True and `x0` is non-scalar, the return value is ``(x, converged,
170
+ zero_der)`` (see Returns section for details).
171
+ disp : bool, optional
172
+ If True, raise a RuntimeError if the algorithm didn't converge, with
173
+ the error message containing the number of iterations and current
174
+ function value. Otherwise, the convergence status is recorded in a
175
+ `RootResults` return object.
176
+ Ignored if `x0` is not scalar.
177
+ *Note: this has little to do with displaying, however,
178
+ the `disp` keyword cannot be renamed for backwards compatibility.*
179
+
180
+ Returns
181
+ -------
182
+ root : float, sequence, or ndarray
183
+ Estimated location where function is zero.
184
+ r : `RootResults`, optional
185
+ Present if ``full_output=True`` and `x0` is scalar.
186
+ Object containing information about the convergence. In particular,
187
+ ``r.converged`` is True if the routine converged.
188
+ converged : ndarray of bool, optional
189
+ Present if ``full_output=True`` and `x0` is non-scalar.
190
+ For vector functions, indicates which elements converged successfully.
191
+ zero_der : ndarray of bool, optional
192
+ Present if ``full_output=True`` and `x0` is non-scalar.
193
+ For vector functions, indicates which elements had a zero derivative.
194
+
195
+ See Also
196
+ --------
197
+ root_scalar : interface to root solvers for scalar functions
198
+ root : interface to root solvers for multi-input, multi-output functions
199
+
200
+ Notes
201
+ -----
202
+ The convergence rate of the Newton-Raphson method is quadratic,
203
+ the Halley method is cubic, and the secant method is
204
+ sub-quadratic. This means that if the function is well-behaved
205
+ the actual error in the estimated root after the nth iteration
206
+ is approximately the square (cube for Halley) of the error
207
+ after the (n-1)th step. However, the stopping criterion used
208
+ here is the step size and there is no guarantee that a root
209
+ has been found. Consequently, the result should be verified.
210
+ Safer algorithms are brentq, brenth, ridder, and bisect,
211
+ but they all require that the root first be bracketed in an
212
+ interval where the function changes sign. The brentq algorithm
213
+ is recommended for general use in one dimensional problems
214
+ when such an interval has been found.
215
+
216
+ When `newton` is used with arrays, it is best suited for the following
217
+ types of problems:
218
+
219
+ * The initial guesses, `x0`, are all relatively the same distance from
220
+ the roots.
221
+ * Some or all of the extra arguments, `args`, are also arrays so that a
222
+ class of similar problems can be solved together.
223
+ * The size of the initial guesses, `x0`, is larger than O(100) elements.
224
+ Otherwise, a naive loop may perform as well or better than a vector.
225
+
226
+ Examples
227
+ --------
228
+ >>> import numpy as np
229
+ >>> import matplotlib.pyplot as plt
230
+ >>> from scipy import optimize
231
+
232
+ >>> def f(x):
233
+ ... return (x**3 - 1) # only one real root at x = 1
234
+
235
+ ``fprime`` is not provided, use the secant method:
236
+
237
+ >>> root = optimize.newton(f, 1.5)
238
+ >>> root
239
+ 1.0000000000000016
240
+ >>> root = optimize.newton(f, 1.5, fprime2=lambda x: 6 * x)
241
+ >>> root
242
+ 1.0000000000000016
243
+
244
+ Only ``fprime`` is provided, use the Newton-Raphson method:
245
+
246
+ >>> root = optimize.newton(f, 1.5, fprime=lambda x: 3 * x**2)
247
+ >>> root
248
+ 1.0
249
+
250
+ Both ``fprime2`` and ``fprime`` are provided, use Halley's method:
251
+
252
+ >>> root = optimize.newton(f, 1.5, fprime=lambda x: 3 * x**2,
253
+ ... fprime2=lambda x: 6 * x)
254
+ >>> root
255
+ 1.0
256
+
257
+ When we want to find roots for a set of related starting values and/or
258
+ function parameters, we can provide both of those as an array of inputs:
259
+
260
+ >>> f = lambda x, a: x**3 - a
261
+ >>> fder = lambda x, a: 3 * x**2
262
+ >>> rng = np.random.default_rng()
263
+ >>> x = rng.standard_normal(100)
264
+ >>> a = np.arange(-50, 50)
265
+ >>> vec_res = optimize.newton(f, x, fprime=fder, args=(a, ), maxiter=200)
266
+
267
+ The above is the equivalent of solving for each value in ``(x, a)``
268
+ separately in a for-loop, just faster:
269
+
270
+ >>> loop_res = [optimize.newton(f, x0, fprime=fder, args=(a0,),
271
+ ... maxiter=200)
272
+ ... for x0, a0 in zip(x, a)]
273
+ >>> np.allclose(vec_res, loop_res)
274
+ True
275
+
276
+ Plot the results found for all values of ``a``:
277
+
278
+ >>> analytical_result = np.sign(a) * np.abs(a)**(1/3)
279
+ >>> fig, ax = plt.subplots()
280
+ >>> ax.plot(a, analytical_result, 'o')
281
+ >>> ax.plot(a, vec_res, '.')
282
+ >>> ax.set_xlabel('$a$')
283
+ >>> ax.set_ylabel('$x$ where $f(x, a)=0$')
284
+ >>> plt.show()
285
+
286
+ """
287
+ if tol <= 0:
288
+ raise ValueError(f"tol too small ({tol:g} <= 0)")
289
+ maxiter = operator.index(maxiter)
290
+ if maxiter < 1:
291
+ raise ValueError("maxiter must be greater than 0")
292
+ if np.size(x0) > 1:
293
+ return _array_newton(func, x0, fprime, args, tol, maxiter, fprime2,
294
+ full_output)
295
+
296
+ # Convert to float (don't use float(x0); this works also for complex x0)
297
+ # Use np.asarray because we want x0 to be a numpy object, not a Python
298
+ # object. e.g. np.complex(1+1j) > 0 is possible, but (1 + 1j) > 0 raises
299
+ # a TypeError
300
+ x0 = np.asarray(x0)[()] * 1.0
301
+ p0 = x0
302
+ funcalls = 0
303
+ if fprime is not None:
304
+ # Newton-Raphson method
305
+ method = "newton"
306
+ for itr in range(maxiter):
307
+ # first evaluate fval
308
+ fval = func(p0, *args)
309
+ funcalls += 1
310
+ # If fval is 0, a root has been found, then terminate
311
+ if fval == 0:
312
+ return _results_select(
313
+ full_output, (p0, funcalls, itr, _ECONVERGED), method)
314
+ fder = fprime(p0, *args)
315
+ funcalls += 1
316
+ if fder == 0:
317
+ msg = "Derivative was zero."
318
+ if disp:
319
+ msg += (
320
+ f" Failed to converge after {itr + 1} iterations,"
321
+ f" value is {p0}."
322
+ )
323
+ raise RuntimeError(msg)
324
+ warnings.warn(msg, RuntimeWarning, stacklevel=2)
325
+ return _results_select(
326
+ full_output, (p0, funcalls, itr + 1, _ECONVERR), method)
327
+ newton_step = fval / fder
328
+ if fprime2:
329
+ fder2 = fprime2(p0, *args)
330
+ funcalls += 1
331
+ method = "halley"
332
+ # Halley's method:
333
+ # newton_step /= (1.0 - 0.5 * newton_step * fder2 / fder)
334
+ # Only do it if denominator stays close enough to 1
335
+ # Rationale: If 1-adj < 0, then Halley sends x in the
336
+ # opposite direction to Newton. Doesn't happen if x is close
337
+ # enough to root.
338
+ adj = newton_step * fder2 / fder / 2
339
+ if np.abs(adj) < 1:
340
+ newton_step /= 1.0 - adj
341
+ p = p0 - newton_step
342
+ if np.isclose(p, p0, rtol=rtol, atol=tol):
343
+ return _results_select(
344
+ full_output, (p, funcalls, itr + 1, _ECONVERGED), method)
345
+ p0 = p
346
+ else:
347
+ # Secant method
348
+ method = "secant"
349
+ if x1 is not None:
350
+ if x1 == x0:
351
+ raise ValueError("x1 and x0 must be different")
352
+ p1 = x1
353
+ else:
354
+ eps = 1e-4
355
+ p1 = x0 * (1 + eps)
356
+ p1 += (eps if p1 >= 0 else -eps)
357
+ q0 = func(p0, *args)
358
+ funcalls += 1
359
+ q1 = func(p1, *args)
360
+ funcalls += 1
361
+ if abs(q1) < abs(q0):
362
+ p0, p1, q0, q1 = p1, p0, q1, q0
363
+ for itr in range(maxiter):
364
+ if q1 == q0:
365
+ if p1 != p0:
366
+ msg = f"Tolerance of {p1 - p0} reached."
367
+ if disp:
368
+ msg += (
369
+ f" Failed to converge after {itr + 1} iterations,"
370
+ f" value is {p1}."
371
+ )
372
+ raise RuntimeError(msg)
373
+ warnings.warn(msg, RuntimeWarning, stacklevel=2)
374
+ p = (p1 + p0) / 2.0
375
+ return _results_select(
376
+ full_output, (p, funcalls, itr + 1, _ECONVERR), method)
377
+ else:
378
+ if abs(q1) > abs(q0):
379
+ p = (-q0 / q1 * p1 + p0) / (1 - q0 / q1)
380
+ else:
381
+ p = (-q1 / q0 * p0 + p1) / (1 - q1 / q0)
382
+ if np.isclose(p, p1, rtol=rtol, atol=tol):
383
+ return _results_select(
384
+ full_output, (p, funcalls, itr + 1, _ECONVERGED), method)
385
+ p0, q0 = p1, q1
386
+ p1 = p
387
+ q1 = func(p1, *args)
388
+ funcalls += 1
389
+
390
+ if disp:
391
+ msg = f"Failed to converge after {itr + 1} iterations, value is {p}."
392
+ raise RuntimeError(msg)
393
+
394
+ return _results_select(full_output, (p, funcalls, itr + 1, _ECONVERR), method)
395
+
396
+
397
+ def _array_newton(func, x0, fprime, args, tol, maxiter, fprime2, full_output):
398
+ """
399
+ A vectorized version of Newton, Halley, and secant methods for arrays.
400
+
401
+ Do not use this method directly. This method is called from `newton`
402
+ when ``np.size(x0) > 1`` is ``True``. For docstring, see `newton`.
403
+ """
404
+ # Explicitly copy `x0` as `p` will be modified inplace, but the
405
+ # user's array should not be altered.
406
+ p = np.array(x0, copy=True)
407
+
408
+ failures = np.ones_like(p, dtype=bool)
409
+ nz_der = np.ones_like(failures)
410
+ if fprime is not None:
411
+ # Newton-Raphson method
412
+ for iteration in range(maxiter):
413
+ # first evaluate fval
414
+ fval = np.asarray(func(p, *args))
415
+ # If all fval are 0, all roots have been found, then terminate
416
+ if not fval.any():
417
+ failures = fval.astype(bool)
418
+ break
419
+ fder = np.asarray(fprime(p, *args))
420
+ nz_der = (fder != 0)
421
+ # stop iterating if all derivatives are zero
422
+ if not nz_der.any():
423
+ break
424
+ # Newton step
425
+ dp = fval[nz_der] / fder[nz_der]
426
+ if fprime2 is not None:
427
+ fder2 = np.asarray(fprime2(p, *args))
428
+ dp = dp / (1.0 - 0.5 * dp * fder2[nz_der] / fder[nz_der])
429
+ # only update nonzero derivatives
430
+ p = np.asarray(p, dtype=np.result_type(p, dp, np.float64))
431
+ p[nz_der] -= dp
432
+ failures[nz_der] = np.abs(dp) >= tol # items not yet converged
433
+ # stop iterating if there aren't any failures, not incl zero der
434
+ if not failures[nz_der].any():
435
+ break
436
+ else:
437
+ # Secant method
438
+ dx = np.finfo(float).eps**0.33
439
+ p1 = p * (1 + dx) + np.where(p >= 0, dx, -dx)
440
+ q0 = np.asarray(func(p, *args))
441
+ q1 = np.asarray(func(p1, *args))
442
+ active = np.ones_like(p, dtype=bool)
443
+ for iteration in range(maxiter):
444
+ nz_der = (q1 != q0)
445
+ # stop iterating if all derivatives are zero
446
+ if not nz_der.any():
447
+ p = (p1 + p) / 2.0
448
+ break
449
+ # Secant Step
450
+ dp = (q1 * (p1 - p))[nz_der] / (q1 - q0)[nz_der]
451
+ # only update nonzero derivatives
452
+ p = np.asarray(p, dtype=np.result_type(p, p1, dp, np.float64))
453
+ p[nz_der] = p1[nz_der] - dp
454
+ active_zero_der = ~nz_der & active
455
+ p[active_zero_der] = (p1 + p)[active_zero_der] / 2.0
456
+ active &= nz_der # don't assign zero derivatives again
457
+ failures[nz_der] = np.abs(dp) >= tol # not yet converged
458
+ # stop iterating if there aren't any failures, not incl zero der
459
+ if not failures[nz_der].any():
460
+ break
461
+ p1, p = p, p1
462
+ q0 = q1
463
+ q1 = np.asarray(func(p1, *args))
464
+
465
+ zero_der = ~nz_der & failures # don't include converged with zero-ders
466
+ if zero_der.any():
467
+ # Secant warnings
468
+ if fprime is None:
469
+ nonzero_dp = (p1 != p)
470
+ # non-zero dp, but infinite newton step
471
+ zero_der_nz_dp = (zero_der & nonzero_dp)
472
+ if zero_der_nz_dp.any():
473
+ rms = np.sqrt(
474
+ sum((p1[zero_der_nz_dp] - p[zero_der_nz_dp]) ** 2)
475
+ )
476
+ warnings.warn(f'RMS of {rms:g} reached', RuntimeWarning, stacklevel=3)
477
+ # Newton or Halley warnings
478
+ else:
479
+ all_or_some = 'all' if zero_der.all() else 'some'
480
+ msg = f'{all_or_some:s} derivatives were zero'
481
+ warnings.warn(msg, RuntimeWarning, stacklevel=3)
482
+ elif failures.any():
483
+ all_or_some = 'all' if failures.all() else 'some'
484
+ msg = f'{all_or_some:s} failed to converge after {maxiter:d} iterations'
485
+ if failures.all():
486
+ raise RuntimeError(msg)
487
+ warnings.warn(msg, RuntimeWarning, stacklevel=3)
488
+
489
+ if full_output:
490
+ result = namedtuple('result', ('root', 'converged', 'zero_der'))
491
+ p = result(p, ~failures, zero_der)
492
+
493
+ return p
494
+
495
+
496
+ def bisect(f, a, b, args=(),
497
+ xtol=_xtol, rtol=_rtol, maxiter=_iter,
498
+ full_output=False, disp=True):
499
+ """
500
+ Find root of a function within an interval using bisection.
501
+
502
+ Basic bisection routine to find a root of the function `f` between the
503
+ arguments `a` and `b`. `f(a)` and `f(b)` cannot have the same signs.
504
+ Slow but sure.
505
+
506
+ Parameters
507
+ ----------
508
+ f : function
509
+ Python function returning a number. `f` must be continuous, and
510
+ f(a) and f(b) must have opposite signs.
511
+ a : scalar
512
+ One end of the bracketing interval [a,b].
513
+ b : scalar
514
+ The other end of the bracketing interval [a,b].
515
+ xtol : number, optional
516
+ The computed root ``x0`` will satisfy ``np.isclose(x, x0,
517
+ atol=xtol, rtol=rtol)``, where ``x`` is the exact root. The
518
+ parameter must be positive.
519
+ rtol : number, optional
520
+ The computed root ``x0`` will satisfy ``np.isclose(x, x0,
521
+ atol=xtol, rtol=rtol)``, where ``x`` is the exact root. The
522
+ parameter cannot be smaller than its default value of
523
+ ``4*np.finfo(float).eps``.
524
+ maxiter : int, optional
525
+ If convergence is not achieved in `maxiter` iterations, an error is
526
+ raised. Must be >= 0.
527
+ args : tuple, optional
528
+ Containing extra arguments for the function `f`.
529
+ `f` is called by ``apply(f, (x)+args)``.
530
+ full_output : bool, optional
531
+ If `full_output` is False, the root is returned. If `full_output` is
532
+ True, the return value is ``(x, r)``, where x is the root, and r is
533
+ a `RootResults` object.
534
+ disp : bool, optional
535
+ If True, raise RuntimeError if the algorithm didn't converge.
536
+ Otherwise, the convergence status is recorded in a `RootResults`
537
+ return object.
538
+
539
+ Returns
540
+ -------
541
+ root : float
542
+ Root of `f` between `a` and `b`.
543
+ r : `RootResults` (present if ``full_output = True``)
544
+ Object containing information about the convergence. In particular,
545
+ ``r.converged`` is True if the routine converged.
546
+
547
+ Notes
548
+ -----
549
+ As mentioned in the parameter documentation, the computed root ``x0`` will
550
+ satisfy ``np.isclose(x, x0, atol=xtol, rtol=rtol)``, where ``x`` is the
551
+ exact root. In equation form, this terminating condition is ``abs(x - x0)
552
+ <= xtol + rtol * abs(x0)``.
553
+
554
+ The default value ``xtol=2e-12`` may lead to surprising behavior if one
555
+ expects `bisect` to always compute roots with relative error near machine
556
+ precision. Care should be taken to select `xtol` for the use case at hand.
557
+ Setting ``xtol=5e-324``, the smallest subnormal number, will ensure the
558
+ highest level of accuracy. Larger values of `xtol` may be useful for saving
559
+ function evaluations when a root is at or near zero in applications where
560
+ the tiny absolute differences available between floating point numbers near
561
+ zero are not meaningful.
562
+
563
+ Examples
564
+ --------
565
+
566
+ >>> def f(x):
567
+ ... return (x**2 - 1)
568
+
569
+ >>> from scipy import optimize
570
+
571
+ >>> root = optimize.bisect(f, 0, 2)
572
+ >>> root
573
+ 1.0
574
+
575
+ >>> root = optimize.bisect(f, -2, 0)
576
+ >>> root
577
+ -1.0
578
+
579
+ See Also
580
+ --------
581
+ brentq, brenth, bisect, newton
582
+ fixed_point : scalar fixed-point finder
583
+ fsolve : n-dimensional root-finding
584
+ elementwise.find_root : efficient elementwise 1-D root-finder
585
+
586
+ """
587
+ if not isinstance(args, tuple):
588
+ args = (args,)
589
+ maxiter = operator.index(maxiter)
590
+ if xtol <= 0:
591
+ raise ValueError(f"xtol too small ({xtol:g} <= 0)")
592
+ if rtol < _rtol:
593
+ raise ValueError(f"rtol too small ({rtol:g} < {_rtol:g})")
594
+ f = _wrap_nan_raise(f)
595
+ r = _zeros._bisect(f, a, b, xtol, rtol, maxiter, args, full_output, disp)
596
+ return results_c(full_output, r, "bisect")
597
+
598
+
599
+ def ridder(f, a, b, args=(),
600
+ xtol=_xtol, rtol=_rtol, maxiter=_iter,
601
+ full_output=False, disp=True):
602
+ """
603
+ Find a root of a function in an interval using Ridder's method.
604
+
605
+ Parameters
606
+ ----------
607
+ f : function
608
+ Python function returning a number. f must be continuous, and f(a) and
609
+ f(b) must have opposite signs.
610
+ a : scalar
611
+ One end of the bracketing interval [a,b].
612
+ b : scalar
613
+ The other end of the bracketing interval [a,b].
614
+ xtol : number, optional
615
+ The computed root ``x0`` will satisfy ``np.isclose(x, x0,
616
+ atol=xtol, rtol=rtol)``, where ``x`` is the exact root. The
617
+ parameter must be positive.
618
+ rtol : number, optional
619
+ The computed root ``x0`` will satisfy ``np.isclose(x, x0,
620
+ atol=xtol, rtol=rtol)``, where ``x`` is the exact root. The
621
+ parameter cannot be smaller than its default value of
622
+ ``4*np.finfo(float).eps``.
623
+ maxiter : int, optional
624
+ If convergence is not achieved in `maxiter` iterations, an error is
625
+ raised. Must be >= 0.
626
+ args : tuple, optional
627
+ Containing extra arguments for the function `f`.
628
+ `f` is called by ``apply(f, (x)+args)``.
629
+ full_output : bool, optional
630
+ If `full_output` is False, the root is returned. If `full_output` is
631
+ True, the return value is ``(x, r)``, where `x` is the root, and `r` is
632
+ a `RootResults` object.
633
+ disp : bool, optional
634
+ If True, raise RuntimeError if the algorithm didn't converge.
635
+ Otherwise, the convergence status is recorded in any `RootResults`
636
+ return object.
637
+
638
+ Returns
639
+ -------
640
+ root : float
641
+ Root of `f` between `a` and `b`.
642
+ r : `RootResults` (present if ``full_output = True``)
643
+ Object containing information about the convergence.
644
+ In particular, ``r.converged`` is True if the routine converged.
645
+
646
+ See Also
647
+ --------
648
+ brentq, brenth, bisect, newton : 1-D root-finding
649
+ fixed_point : scalar fixed-point finder
650
+ elementwise.find_root : efficient elementwise 1-D root-finder
651
+
652
+ Notes
653
+ -----
654
+ Uses [Ridders1979]_ method to find a root of the function `f` between the
655
+ arguments `a` and `b`. Ridders' method is faster than bisection, but not
656
+ generally as fast as the Brent routines. [Ridders1979]_ provides the
657
+ classic description and source of the algorithm. A description can also be
658
+ found in any recent edition of Numerical Recipes.
659
+
660
+ The routine used here diverges slightly from standard presentations in
661
+ order to be a bit more careful of tolerance.
662
+
663
+ As mentioned in the parameter documentation, the computed root ``x0`` will
664
+ satisfy ``np.isclose(x, x0, atol=xtol, rtol=rtol)``, where ``x`` is the
665
+ exact root. In equation form, this terminating condition is ``abs(x - x0)
666
+ <= xtol + rtol * abs(x0)``.
667
+
668
+ The default value ``xtol=2e-12`` may lead to surprising behavior if one
669
+ expects `ridder` to always compute roots with relative error near machine
670
+ precision. Care should be taken to select `xtol` for the use case at hand.
671
+ Setting ``xtol=5e-324``, the smallest subnormal number, will ensure the
672
+ highest level of accuracy. Larger values of `xtol` may be useful for saving
673
+ function evaluations when a root is at or near zero in applications where
674
+ the tiny absolute differences available between floating point numbers near
675
+ zero are not meaningful.
676
+
677
+ References
678
+ ----------
679
+ .. [Ridders1979]
680
+ Ridders, C. F. J. "A New Algorithm for Computing a
681
+ Single Root of a Real Continuous Function."
682
+ IEEE Trans. Circuits Systems 26, 979-980, 1979.
683
+
684
+ Examples
685
+ --------
686
+
687
+ >>> def f(x):
688
+ ... return (x**2 - 1)
689
+
690
+ >>> from scipy import optimize
691
+
692
+ >>> root = optimize.ridder(f, 0, 2)
693
+ >>> root
694
+ 1.0
695
+
696
+ >>> root = optimize.ridder(f, -2, 0)
697
+ >>> root
698
+ -1.0
699
+ """
700
+ if not isinstance(args, tuple):
701
+ args = (args,)
702
+ maxiter = operator.index(maxiter)
703
+ if xtol <= 0:
704
+ raise ValueError(f"xtol too small ({xtol:g} <= 0)")
705
+ if rtol < _rtol:
706
+ raise ValueError(f"rtol too small ({rtol:g} < {_rtol:g})")
707
+ f = _wrap_nan_raise(f)
708
+ r = _zeros._ridder(f, a, b, xtol, rtol, maxiter, args, full_output, disp)
709
+ return results_c(full_output, r, "ridder")
710
+
711
+
712
+ def brentq(f, a, b, args=(),
713
+ xtol=_xtol, rtol=_rtol, maxiter=_iter,
714
+ full_output=False, disp=True):
715
+ """
716
+ Find a root of a function in a bracketing interval using Brent's method.
717
+
718
+ Uses the classic Brent's method to find a root of the function `f` on
719
+ the sign changing interval [a , b]. Generally considered the best of the
720
+ rootfinding routines here. It is a safe version of the secant method that
721
+ uses inverse quadratic extrapolation. Brent's method combines root
722
+ bracketing, interval bisection, and inverse quadratic interpolation. It is
723
+ sometimes known as the van Wijngaarden-Dekker-Brent method. Brent (1973)
724
+ claims convergence is guaranteed for functions computable within [a,b].
725
+
726
+ [Brent1973]_ provides the classic description of the algorithm. Another
727
+ description can be found in a recent edition of Numerical Recipes, including
728
+ [PressEtal1992]_. A third description is at
729
+ http://mathworld.wolfram.com/BrentsMethod.html. It should be easy to
730
+ understand the algorithm just by reading our code. Our code diverges a bit
731
+ from standard presentations: we choose a different formula for the
732
+ extrapolation step.
733
+
734
+ Parameters
735
+ ----------
736
+ f : function
737
+ Python function returning a number. The function :math:`f`
738
+ must be continuous, and :math:`f(a)` and :math:`f(b)` must
739
+ have opposite signs.
740
+ a : scalar
741
+ One end of the bracketing interval :math:`[a, b]`.
742
+ b : scalar
743
+ The other end of the bracketing interval :math:`[a, b]`.
744
+ xtol : number, optional
745
+ The computed root ``x0`` will satisfy ``np.isclose(x, x0,
746
+ atol=xtol, rtol=rtol)``, where ``x`` is the exact root. The
747
+ parameter must be positive. For nice functions, Brent's
748
+ method will often satisfy the above condition with ``xtol/2``
749
+ and ``rtol/2``. [Brent1973]_
750
+ rtol : number, optional
751
+ The computed root ``x0`` will satisfy ``np.isclose(x, x0,
752
+ atol=xtol, rtol=rtol)``, where ``x`` is the exact root. The
753
+ parameter cannot be smaller than its default value of
754
+ ``4*np.finfo(float).eps``. For nice functions, Brent's
755
+ method will often satisfy the above condition with ``xtol/2``
756
+ and ``rtol/2``. [Brent1973]_
757
+ maxiter : int, optional
758
+ If convergence is not achieved in `maxiter` iterations, an error is
759
+ raised. Must be >= 0.
760
+ args : tuple, optional
761
+ Containing extra arguments for the function `f`.
762
+ `f` is called by ``apply(f, (x)+args)``.
763
+ full_output : bool, optional
764
+ If `full_output` is False, the root is returned. If `full_output` is
765
+ True, the return value is ``(x, r)``, where `x` is the root, and `r` is
766
+ a `RootResults` object.
767
+ disp : bool, optional
768
+ If True, raise RuntimeError if the algorithm didn't converge.
769
+ Otherwise, the convergence status is recorded in any `RootResults`
770
+ return object.
771
+
772
+ Returns
773
+ -------
774
+ root : float
775
+ Root of `f` between `a` and `b`.
776
+ r : `RootResults` (present if ``full_output = True``)
777
+ Object containing information about the convergence. In particular,
778
+ ``r.converged`` is True if the routine converged.
779
+
780
+ See Also
781
+ --------
782
+ fmin, fmin_powell, fmin_cg, fmin_bfgs, fmin_ncg : multivariate local optimizers
783
+ leastsq : nonlinear least squares minimizer
784
+ fmin_l_bfgs_b, fmin_tnc, fmin_cobyla : constrained multivariate optimizers
785
+ basinhopping, differential_evolution, brute : global optimizers
786
+ fminbound, brent, golden, bracket : local scalar minimizers
787
+ fsolve : N-D root-finding
788
+ brenth, ridder, bisect, newton : 1-D root-finding
789
+ fixed_point : scalar fixed-point finder
790
+ elementwise.find_root : efficient elementwise 1-D root-finder
791
+
792
+ Notes
793
+ -----
794
+ `f` must be continuous. f(a) and f(b) must have opposite signs.
795
+
796
+ As mentioned in the parameter documentation, the computed root ``x0`` will
797
+ satisfy ``np.isclose(x, x0, atol=xtol, rtol=rtol)``, where ``x`` is the
798
+ exact root. In equation form, this terminating condition is ``abs(x - x0)
799
+ <= xtol + rtol * abs(x0)``.
800
+
801
+ The default value ``xtol=2e-12`` may lead to surprising behavior if one
802
+ expects `brentq` to always compute roots with relative error near machine
803
+ precision. Care should be taken to select `xtol` for the use case at hand.
804
+ Setting ``xtol=5e-324``, the smallest subnormal number, will ensure the
805
+ highest level of accuracy. Larger values of `xtol` may be useful for saving
806
+ function evaluations when a root is at or near zero in applications where
807
+ the tiny absolute differences available between floating point numbers near
808
+ zero are not meaningful.
809
+
810
+ References
811
+ ----------
812
+ .. [Brent1973]
813
+ Brent, R. P.,
814
+ *Algorithms for Minimization Without Derivatives*.
815
+ Englewood Cliffs, NJ: Prentice-Hall, 1973. Ch. 3-4.
816
+
817
+ .. [PressEtal1992]
818
+ Press, W. H.; Flannery, B. P.; Teukolsky, S. A.; and Vetterling, W. T.
819
+ *Numerical Recipes in FORTRAN: The Art of Scientific Computing*, 2nd ed.
820
+ Cambridge, England: Cambridge University Press, pp. 352-355, 1992.
821
+ Section 9.3: "Van Wijngaarden-Dekker-Brent Method."
822
+
823
+ Examples
824
+ --------
825
+ >>> def f(x):
826
+ ... return (x**2 - 1)
827
+
828
+ >>> from scipy import optimize
829
+
830
+ >>> root = optimize.brentq(f, -2, 0)
831
+ >>> root
832
+ -1.0
833
+
834
+ >>> root = optimize.brentq(f, 0, 2)
835
+ >>> root
836
+ 1.0
837
+ """
838
+ if not isinstance(args, tuple):
839
+ args = (args,)
840
+ maxiter = operator.index(maxiter)
841
+ if xtol <= 0:
842
+ raise ValueError(f"xtol too small ({xtol:g} <= 0)")
843
+ if rtol < _rtol:
844
+ raise ValueError(f"rtol too small ({rtol:g} < {_rtol:g})")
845
+ f = _wrap_nan_raise(f)
846
+ r = _zeros._brentq(f, a, b, xtol, rtol, maxiter, args, full_output, disp)
847
+ return results_c(full_output, r, "brentq")
848
+
849
+
850
+ def brenth(f, a, b, args=(),
851
+ xtol=_xtol, rtol=_rtol, maxiter=_iter,
852
+ full_output=False, disp=True):
853
+ """Find a root of a function in a bracketing interval using Brent's
854
+ method with hyperbolic extrapolation.
855
+
856
+ A variation on the classic Brent routine to find a root of the function f
857
+ between the arguments a and b that uses hyperbolic extrapolation instead of
858
+ inverse quadratic extrapolation. Bus & Dekker (1975) guarantee convergence
859
+ for this method, claiming that the upper bound of function evaluations here
860
+ is 4 or 5 times that of bisection.
861
+ f(a) and f(b) cannot have the same signs. Generally, on a par with the
862
+ brent routine, but not as heavily tested. It is a safe version of the
863
+ secant method that uses hyperbolic extrapolation.
864
+ The version here is by Chuck Harris, and implements Algorithm M of
865
+ [BusAndDekker1975]_, where further details (convergence properties,
866
+ additional remarks and such) can be found
867
+
868
+ Parameters
869
+ ----------
870
+ f : function
871
+ Python function returning a number. f must be continuous, and f(a) and
872
+ f(b) must have opposite signs.
873
+ a : scalar
874
+ One end of the bracketing interval [a,b].
875
+ b : scalar
876
+ The other end of the bracketing interval [a,b].
877
+ xtol : number, optional
878
+ The computed root ``x0`` will satisfy ``np.isclose(x, x0,
879
+ atol=xtol, rtol=rtol)``, where ``x`` is the exact root. The
880
+ parameter must be positive. As with `brentq`, for nice
881
+ functions the method will often satisfy the above condition
882
+ with ``xtol/2`` and ``rtol/2``.
883
+ rtol : number, optional
884
+ The computed root ``x0`` will satisfy ``np.isclose(x, x0,
885
+ atol=xtol, rtol=rtol)``, where ``x`` is the exact root. The
886
+ parameter cannot be smaller than its default value of
887
+ ``4*np.finfo(float).eps``. As with `brentq`, for nice functions
888
+ the method will often satisfy the above condition with
889
+ ``xtol/2`` and ``rtol/2``.
890
+ maxiter : int, optional
891
+ If convergence is not achieved in `maxiter` iterations, an error is
892
+ raised. Must be >= 0.
893
+ args : tuple, optional
894
+ Containing extra arguments for the function `f`.
895
+ `f` is called by ``apply(f, (x)+args)``.
896
+ full_output : bool, optional
897
+ If `full_output` is False, the root is returned. If `full_output` is
898
+ True, the return value is ``(x, r)``, where `x` is the root, and `r` is
899
+ a `RootResults` object.
900
+ disp : bool, optional
901
+ If True, raise RuntimeError if the algorithm didn't converge.
902
+ Otherwise, the convergence status is recorded in any `RootResults`
903
+ return object.
904
+
905
+ Returns
906
+ -------
907
+ root : float
908
+ Root of `f` between `a` and `b`.
909
+ r : `RootResults` (present if ``full_output = True``)
910
+ Object containing information about the convergence. In particular,
911
+ ``r.converged`` is True if the routine converged.
912
+
913
+ See Also
914
+ --------
915
+ fmin, fmin_powell, fmin_cg, fmin_bfgs, fmin_ncg : multivariate local optimizers
916
+ leastsq : nonlinear least squares minimizer
917
+ fmin_l_bfgs_b, fmin_tnc, fmin_cobyla : constrained multivariate optimizers
918
+ basinhopping, differential_evolution, brute : global optimizers
919
+ fminbound, brent, golden, bracket : local scalar minimizers
920
+ fsolve : N-D root-finding
921
+ brentq, ridder, bisect, newton : 1-D root-finding
922
+ fixed_point : scalar fixed-point finder
923
+ elementwise.find_root : efficient elementwise 1-D root-finder
924
+
925
+ Notes
926
+ -----
927
+ As mentioned in the parameter documentation, the computed root ``x0`` will
928
+ satisfy ``np.isclose(x, x0, atol=xtol, rtol=rtol)``, where ``x`` is the
929
+ exact root. In equation form, this terminating condition is ``abs(x - x0)
930
+ <= xtol + rtol * abs(x0)``.
931
+
932
+ The default value ``xtol=2e-12`` may lead to surprising behavior if one
933
+ expects `brenth` to always compute roots with relative error near machine
934
+ precision. Care should be taken to select `xtol` for the use case at hand.
935
+ Setting ``xtol=5e-324``, the smallest subnormal number, will ensure the
936
+ highest level of accuracy. Larger values of `xtol` may be useful for saving
937
+ function evaluations when a root is at or near zero in applications where
938
+ the tiny absolute differences available between floating point numbers near
939
+ zero are not meaningful.
940
+
941
+ References
942
+ ----------
943
+ .. [BusAndDekker1975]
944
+ Bus, J. C. P., Dekker, T. J.,
945
+ "Two Efficient Algorithms with Guaranteed Convergence for Finding a Zero
946
+ of a Function", ACM Transactions on Mathematical Software, Vol. 1, Issue
947
+ 4, Dec. 1975, pp. 330-345. Section 3: "Algorithm M".
948
+ :doi:`10.1145/355656.355659`
949
+
950
+ Examples
951
+ --------
952
+ >>> def f(x):
953
+ ... return (x**2 - 1)
954
+
955
+ >>> from scipy import optimize
956
+
957
+ >>> root = optimize.brenth(f, -2, 0)
958
+ >>> root
959
+ -1.0
960
+
961
+ >>> root = optimize.brenth(f, 0, 2)
962
+ >>> root
963
+ 1.0
964
+
965
+ """
966
+ if not isinstance(args, tuple):
967
+ args = (args,)
968
+ maxiter = operator.index(maxiter)
969
+ if xtol <= 0:
970
+ raise ValueError(f"xtol too small ({xtol:g} <= 0)")
971
+ if rtol < _rtol:
972
+ raise ValueError(f"rtol too small ({rtol:g} < {_rtol:g})")
973
+ f = _wrap_nan_raise(f)
974
+ r = _zeros._brenth(f, a, b, xtol, rtol, maxiter, args, full_output, disp)
975
+ return results_c(full_output, r, "brenth")
976
+
977
+
978
+ ################################
979
+ # TOMS "Algorithm 748: Enclosing Zeros of Continuous Functions", by
980
+ # Alefeld, G. E. and Potra, F. A. and Shi, Yixun,
981
+ # See [1]
982
+
983
+
984
+ def _notclose(fs, rtol=_rtol, atol=_xtol):
985
+ # Ensure not None, not 0, all finite, and not very close to each other
986
+ notclosefvals = (
987
+ all(fs) and all(np.isfinite(fs)) and
988
+ not any(any(np.isclose(_f, fs[i + 1:], rtol=rtol, atol=atol))
989
+ for i, _f in enumerate(fs[:-1])))
990
+ return notclosefvals
991
+
992
+
993
+ def _secant(xvals, fvals):
994
+ """Perform a secant step, taking a little care"""
995
+ # Secant has many "mathematically" equivalent formulations
996
+ # x2 = x0 - (x1 - x0)/(f1 - f0) * f0
997
+ # = x1 - (x1 - x0)/(f1 - f0) * f1
998
+ # = (-x1 * f0 + x0 * f1) / (f1 - f0)
999
+ # = (-f0 / f1 * x1 + x0) / (1 - f0 / f1)
1000
+ # = (-f1 / f0 * x0 + x1) / (1 - f1 / f0)
1001
+ x0, x1 = xvals[:2]
1002
+ f0, f1 = fvals[:2]
1003
+ if f0 == f1:
1004
+ return np.nan
1005
+ if np.abs(f1) > np.abs(f0):
1006
+ x2 = (-f0 / f1 * x1 + x0) / (1 - f0 / f1)
1007
+ else:
1008
+ x2 = (-f1 / f0 * x0 + x1) / (1 - f1 / f0)
1009
+ return x2
1010
+
1011
+
1012
+ def _update_bracket(ab, fab, c, fc):
1013
+ """Update a bracket given (c, fc), return the discarded endpoints."""
1014
+ fa, fb = fab
1015
+ idx = (0 if np.sign(fa) * np.sign(fc) > 0 else 1)
1016
+ rx, rfx = ab[idx], fab[idx]
1017
+ fab[idx] = fc
1018
+ ab[idx] = c
1019
+ return rx, rfx
1020
+
1021
+
1022
+ def _compute_divided_differences(xvals, fvals, N=None, full=True,
1023
+ forward=True):
1024
+ """Return a matrix of divided differences for the xvals, fvals pairs
1025
+
1026
+ DD[i, j] = f[x_{i-j}, ..., x_i] for 0 <= j <= i
1027
+
1028
+ If full is False, just return the main diagonal(or last row):
1029
+ f[a], f[a, b] and f[a, b, c].
1030
+ If forward is False, return f[c], f[b, c], f[a, b, c]."""
1031
+ if full:
1032
+ if forward:
1033
+ xvals = np.asarray(xvals)
1034
+ else:
1035
+ xvals = np.array(xvals)[::-1]
1036
+ M = len(xvals)
1037
+ N = M if N is None else min(N, M)
1038
+ DD = np.zeros([M, N])
1039
+ DD[:, 0] = fvals[:]
1040
+ for i in range(1, N):
1041
+ DD[i:, i] = (np.diff(DD[i - 1:, i - 1]) /
1042
+ (xvals[i:] - xvals[:M - i]))
1043
+ return DD
1044
+
1045
+ xvals = np.asarray(xvals)
1046
+ dd = np.array(fvals)
1047
+ row = np.array(fvals)
1048
+ idx2Use = (0 if forward else -1)
1049
+ dd[0] = fvals[idx2Use]
1050
+ for i in range(1, len(xvals)):
1051
+ denom = xvals[i:i + len(row) - 1] - xvals[:len(row) - 1]
1052
+ row = np.diff(row)[:] / denom
1053
+ dd[i] = row[idx2Use]
1054
+ return dd
1055
+
1056
+
1057
+ def _interpolated_poly(xvals, fvals, x):
1058
+ """Compute p(x) for the polynomial passing through the specified locations.
1059
+
1060
+ Use Neville's algorithm to compute p(x) where p is the minimal degree
1061
+ polynomial passing through the points xvals, fvals"""
1062
+ xvals = np.asarray(xvals)
1063
+ N = len(xvals)
1064
+ Q = np.zeros([N, N])
1065
+ D = np.zeros([N, N])
1066
+ Q[:, 0] = fvals[:]
1067
+ D[:, 0] = fvals[:]
1068
+ for k in range(1, N):
1069
+ alpha = D[k:, k - 1] - Q[k - 1:N - 1, k - 1]
1070
+ diffik = xvals[0:N - k] - xvals[k:N]
1071
+ Q[k:, k] = (xvals[k:] - x) / diffik * alpha
1072
+ D[k:, k] = (xvals[:N - k] - x) / diffik * alpha
1073
+ # Expect Q[-1, 1:] to be small relative to Q[-1, 0] as x approaches a root
1074
+ return np.sum(Q[-1, 1:]) + Q[-1, 0]
1075
+
1076
+
1077
+ def _inverse_poly_zero(a, b, c, d, fa, fb, fc, fd):
1078
+ """Inverse cubic interpolation f-values -> x-values
1079
+
1080
+ Given four points (fa, a), (fb, b), (fc, c), (fd, d) with
1081
+ fa, fb, fc, fd all distinct, find poly IP(y) through the 4 points
1082
+ and compute x=IP(0).
1083
+ """
1084
+ return _interpolated_poly([fa, fb, fc, fd], [a, b, c, d], 0)
1085
+
1086
+
1087
+ def _newton_quadratic(ab, fab, d, fd, k):
1088
+ """Apply Newton-Raphson like steps, using divided differences to approximate f'
1089
+
1090
+ ab is a real interval [a, b] containing a root,
1091
+ fab holds the real values of f(a), f(b)
1092
+ d is a real number outside [ab, b]
1093
+ k is the number of steps to apply
1094
+ """
1095
+ a, b = ab
1096
+ fa, fb = fab
1097
+ _, B, A = _compute_divided_differences([a, b, d], [fa, fb, fd],
1098
+ forward=True, full=False)
1099
+
1100
+ # _P is the quadratic polynomial through the 3 points
1101
+ def _P(x):
1102
+ # Horner evaluation of fa + B * (x - a) + A * (x - a) * (x - b)
1103
+ return (A * (x - b) + B) * (x - a) + fa
1104
+
1105
+ if A == 0:
1106
+ r = a - fa / B
1107
+ else:
1108
+ r = (a if np.sign(A) * np.sign(fa) > 0 else b)
1109
+ # Apply k Newton-Raphson steps to _P(x), starting from x=r
1110
+ for i in range(k):
1111
+ r1 = r - _P(r) / (B + A * (2 * r - a - b))
1112
+ if not (ab[0] < r1 < ab[1]):
1113
+ if (ab[0] < r < ab[1]):
1114
+ return r
1115
+ r = sum(ab) / 2.0
1116
+ break
1117
+ r = r1
1118
+
1119
+ return r
1120
+
1121
+
1122
+ class TOMS748Solver:
1123
+ """Solve f(x, *args) == 0 using Algorithm748 of Alefeld, Potro & Shi.
1124
+ """
1125
+ _MU = 0.5
1126
+ _K_MIN = 1
1127
+ _K_MAX = 100 # A very high value for real usage. Expect 1, 2, maybe 3.
1128
+
1129
+ def __init__(self):
1130
+ self.f = None
1131
+ self.args = None
1132
+ self.function_calls = 0
1133
+ self.iterations = 0
1134
+ self.k = 2
1135
+ # ab=[a,b] is a global interval containing a root
1136
+ self.ab = [np.nan, np.nan]
1137
+ # fab is function values at a, b
1138
+ self.fab = [np.nan, np.nan]
1139
+ self.d = None
1140
+ self.fd = None
1141
+ self.e = None
1142
+ self.fe = None
1143
+ self.disp = False
1144
+ self.xtol = _xtol
1145
+ self.rtol = _rtol
1146
+ self.maxiter = _iter
1147
+
1148
+ def configure(self, xtol, rtol, maxiter, disp, k):
1149
+ self.disp = disp
1150
+ self.xtol = xtol
1151
+ self.rtol = rtol
1152
+ self.maxiter = maxiter
1153
+ # Silently replace a low value of k with 1
1154
+ self.k = max(k, self._K_MIN)
1155
+ # Noisily replace a high value of k with self._K_MAX
1156
+ if self.k > self._K_MAX:
1157
+ msg = f"toms748: Overriding k: ->{self._K_MAX}"
1158
+ warnings.warn(msg, RuntimeWarning, stacklevel=3)
1159
+ self.k = self._K_MAX
1160
+
1161
+ def _callf(self, x, error=True):
1162
+ """Call the user-supplied function, update book-keeping"""
1163
+ fx = self.f(x, *self.args)
1164
+ self.function_calls += 1
1165
+ if not np.isfinite(fx) and error:
1166
+ raise ValueError(f"Invalid function value: f({x:f}) -> {fx} ")
1167
+ return fx
1168
+
1169
+ def get_result(self, x, flag=_ECONVERGED):
1170
+ r"""Package the result and statistics into a tuple."""
1171
+ return (x, self.function_calls, self.iterations, flag)
1172
+
1173
+ def _update_bracket(self, c, fc):
1174
+ return _update_bracket(self.ab, self.fab, c, fc)
1175
+
1176
+ def start(self, f, a, b, args=()):
1177
+ r"""Prepare for the iterations."""
1178
+ self.function_calls = 0
1179
+ self.iterations = 0
1180
+
1181
+ self.f = f
1182
+ self.args = args
1183
+ self.ab[:] = [a, b]
1184
+ if not np.isfinite(a) or np.imag(a) != 0:
1185
+ raise ValueError(f"Invalid x value: {a} ")
1186
+ if not np.isfinite(b) or np.imag(b) != 0:
1187
+ raise ValueError(f"Invalid x value: {b} ")
1188
+
1189
+ fa = self._callf(a)
1190
+ if not np.isfinite(fa) or np.imag(fa) != 0:
1191
+ raise ValueError(f"Invalid function value: f({a:f}) -> {fa} ")
1192
+ if fa == 0:
1193
+ return _ECONVERGED, a
1194
+ fb = self._callf(b)
1195
+ if not np.isfinite(fb) or np.imag(fb) != 0:
1196
+ raise ValueError(f"Invalid function value: f({b:f}) -> {fb} ")
1197
+ if fb == 0:
1198
+ return _ECONVERGED, b
1199
+
1200
+ if np.sign(fb) * np.sign(fa) > 0:
1201
+ raise ValueError("f(a) and f(b) must have different signs, but "
1202
+ f"f({a:e})={fa:e}, f({b:e})={fb:e} ")
1203
+ self.fab[:] = [fa, fb]
1204
+
1205
+ return _EINPROGRESS, sum(self.ab) / 2.0
1206
+
1207
+ def get_status(self):
1208
+ """Determine the current status."""
1209
+ a, b = self.ab[:2]
1210
+ if np.isclose(a, b, rtol=self.rtol, atol=self.xtol):
1211
+ return _ECONVERGED, sum(self.ab) / 2.0
1212
+ if self.iterations >= self.maxiter:
1213
+ return _ECONVERR, sum(self.ab) / 2.0
1214
+ return _EINPROGRESS, sum(self.ab) / 2.0
1215
+
1216
+ def iterate(self):
1217
+ """Perform one step in the algorithm.
1218
+
1219
+ Implements Algorithm 4.1(k=1) or 4.2(k=2) in [APS1995]
1220
+ """
1221
+ self.iterations += 1
1222
+ eps = np.finfo(float).eps
1223
+ d, fd, e, fe = self.d, self.fd, self.e, self.fe
1224
+ ab_width = self.ab[1] - self.ab[0] # Need the start width below
1225
+ c = None
1226
+
1227
+ for nsteps in range(2, self.k+2):
1228
+ # If the f-values are sufficiently separated, perform an inverse
1229
+ # polynomial interpolation step. Otherwise, nsteps repeats of
1230
+ # an approximate Newton-Raphson step.
1231
+ if _notclose(self.fab + [fd, fe], rtol=0, atol=32*eps):
1232
+ c0 = _inverse_poly_zero(self.ab[0], self.ab[1], d, e,
1233
+ self.fab[0], self.fab[1], fd, fe)
1234
+ if self.ab[0] < c0 < self.ab[1]:
1235
+ c = c0
1236
+ if c is None:
1237
+ c = _newton_quadratic(self.ab, self.fab, d, fd, nsteps)
1238
+
1239
+ fc = self._callf(c)
1240
+ if fc == 0:
1241
+ return _ECONVERGED, c
1242
+
1243
+ # re-bracket
1244
+ e, fe = d, fd
1245
+ d, fd = self._update_bracket(c, fc)
1246
+
1247
+ # u is the endpoint with the smallest f-value
1248
+ uix = (0 if np.abs(self.fab[0]) < np.abs(self.fab[1]) else 1)
1249
+ u, fu = self.ab[uix], self.fab[uix]
1250
+
1251
+ _, A = _compute_divided_differences(self.ab, self.fab,
1252
+ forward=(uix == 0), full=False)
1253
+ c = u - 2 * fu / A
1254
+ if np.abs(c - u) > 0.5 * (self.ab[1] - self.ab[0]):
1255
+ c = sum(self.ab) / 2.0
1256
+ else:
1257
+ if np.isclose(c, u, rtol=eps, atol=0):
1258
+ # c didn't change (much).
1259
+ # Either because the f-values at the endpoints have vastly
1260
+ # differing magnitudes, or because the root is very close to
1261
+ # that endpoint
1262
+ frs = np.frexp(self.fab)[1]
1263
+ if frs[uix] < frs[1 - uix] - 50: # Differ by more than 2**50
1264
+ c = (31 * self.ab[uix] + self.ab[1 - uix]) / 32
1265
+ else:
1266
+ # Make a bigger adjustment, about the
1267
+ # size of the requested tolerance.
1268
+ mm = (1 if uix == 0 else -1)
1269
+ adj = mm * np.abs(c) * self.rtol + mm * self.xtol
1270
+ c = u + adj
1271
+ if not self.ab[0] < c < self.ab[1]:
1272
+ c = sum(self.ab) / 2.0
1273
+
1274
+ fc = self._callf(c)
1275
+ if fc == 0:
1276
+ return _ECONVERGED, c
1277
+
1278
+ e, fe = d, fd
1279
+ d, fd = self._update_bracket(c, fc)
1280
+
1281
+ # If the width of the new interval did not decrease enough, bisect
1282
+ if self.ab[1] - self.ab[0] > self._MU * ab_width:
1283
+ e, fe = d, fd
1284
+ z = sum(self.ab) / 2.0
1285
+ fz = self._callf(z)
1286
+ if fz == 0:
1287
+ return _ECONVERGED, z
1288
+ d, fd = self._update_bracket(z, fz)
1289
+
1290
+ # Record d and e for next iteration
1291
+ self.d, self.fd = d, fd
1292
+ self.e, self.fe = e, fe
1293
+
1294
+ status, xn = self.get_status()
1295
+ return status, xn
1296
+
1297
+ def solve(self, f, a, b, args=(),
1298
+ xtol=_xtol, rtol=_rtol, k=2, maxiter=_iter, disp=True):
1299
+ r"""Solve f(x) = 0 given an interval containing a root."""
1300
+ self.configure(xtol=xtol, rtol=rtol, maxiter=maxiter, disp=disp, k=k)
1301
+ status, xn = self.start(f, a, b, args)
1302
+ if status == _ECONVERGED:
1303
+ return self.get_result(xn)
1304
+
1305
+ # The first step only has two x-values.
1306
+ c = _secant(self.ab, self.fab)
1307
+ if not self.ab[0] < c < self.ab[1]:
1308
+ c = sum(self.ab) / 2.0
1309
+ fc = self._callf(c)
1310
+ if fc == 0:
1311
+ return self.get_result(c)
1312
+
1313
+ self.d, self.fd = self._update_bracket(c, fc)
1314
+ self.e, self.fe = None, None
1315
+ self.iterations += 1
1316
+
1317
+ while True:
1318
+ status, xn = self.iterate()
1319
+ if status == _ECONVERGED:
1320
+ return self.get_result(xn)
1321
+ if status == _ECONVERR:
1322
+ fmt = "Failed to converge after %d iterations, bracket is %s"
1323
+ if disp:
1324
+ msg = fmt % (self.iterations + 1, self.ab)
1325
+ raise RuntimeError(msg)
1326
+ return self.get_result(xn, _ECONVERR)
1327
+
1328
+
1329
+ def toms748(f, a, b, args=(), k=1,
1330
+ xtol=_xtol, rtol=_rtol, maxiter=_iter,
1331
+ full_output=False, disp=True):
1332
+ """
1333
+ Find a root using TOMS Algorithm 748 method.
1334
+
1335
+ Implements the Algorithm 748 method of Alefeld, Potro and Shi to find a
1336
+ root of the function `f` on the interval ``[a , b]``, where ``f(a)`` and
1337
+ `f(b)` must have opposite signs.
1338
+
1339
+ It uses a mixture of inverse cubic interpolation and
1340
+ "Newton-quadratic" steps. [APS1995].
1341
+
1342
+ Parameters
1343
+ ----------
1344
+ f : function
1345
+ Python function returning a scalar. The function :math:`f`
1346
+ must be continuous, and :math:`f(a)` and :math:`f(b)`
1347
+ have opposite signs.
1348
+ a : scalar,
1349
+ lower boundary of the search interval
1350
+ b : scalar,
1351
+ upper boundary of the search interval
1352
+ args : tuple, optional
1353
+ containing extra arguments for the function `f`.
1354
+ `f` is called by ``f(x, *args)``.
1355
+ k : int, optional
1356
+ The number of Newton quadratic steps to perform each
1357
+ iteration. ``k>=1``.
1358
+ xtol : scalar, optional
1359
+ The computed root ``x0`` will satisfy ``np.isclose(x, x0,
1360
+ atol=xtol, rtol=rtol)``, where ``x`` is the exact root. The
1361
+ parameter must be positive.
1362
+ rtol : scalar, optional
1363
+ The computed root ``x0`` will satisfy ``np.isclose(x, x0,
1364
+ atol=xtol, rtol=rtol)``, where ``x`` is the exact root.
1365
+ maxiter : int, optional
1366
+ If convergence is not achieved in `maxiter` iterations, an error is
1367
+ raised. Must be >= 0.
1368
+ full_output : bool, optional
1369
+ If `full_output` is False, the root is returned. If `full_output` is
1370
+ True, the return value is ``(x, r)``, where `x` is the root, and `r` is
1371
+ a `RootResults` object.
1372
+ disp : bool, optional
1373
+ If True, raise RuntimeError if the algorithm didn't converge.
1374
+ Otherwise, the convergence status is recorded in the `RootResults`
1375
+ return object.
1376
+
1377
+ Returns
1378
+ -------
1379
+ root : float
1380
+ Approximate root of `f`
1381
+ r : `RootResults` (present if ``full_output = True``)
1382
+ Object containing information about the convergence. In particular,
1383
+ ``r.converged`` is True if the routine converged.
1384
+
1385
+ See Also
1386
+ --------
1387
+ brentq, brenth, ridder, bisect, newton
1388
+ fsolve : find roots in N dimensions.
1389
+ elementwise.find_root : efficient elementwise 1-D root-finder
1390
+
1391
+ Notes
1392
+ -----
1393
+ `f` must be continuous.
1394
+ Algorithm 748 with ``k=2`` is asymptotically the most efficient
1395
+ algorithm known for finding roots of a four times continuously
1396
+ differentiable function.
1397
+ In contrast with Brent's algorithm, which may only decrease the length of
1398
+ the enclosing bracket on the last step, Algorithm 748 decreases it each
1399
+ iteration with the same asymptotic efficiency as it finds the root.
1400
+
1401
+ For easy statement of efficiency indices, assume that `f` has 4
1402
+ continuous deriviatives.
1403
+ For ``k=1``, the convergence order is at least 2.7, and with about
1404
+ asymptotically 2 function evaluations per iteration, the efficiency
1405
+ index is approximately 1.65.
1406
+ For ``k=2``, the order is about 4.6 with asymptotically 3 function
1407
+ evaluations per iteration, and the efficiency index 1.66.
1408
+ For higher values of `k`, the efficiency index approaches
1409
+ the kth root of ``(3k-2)``, hence ``k=1`` or ``k=2`` are
1410
+ usually appropriate.
1411
+
1412
+ As mentioned in the parameter documentation, the computed root ``x0`` will
1413
+ satisfy ``np.isclose(x, x0, atol=xtol, rtol=rtol)``, where ``x`` is the
1414
+ exact root. In equation form, this terminating condition is ``abs(x - x0)
1415
+ <= xtol + rtol * abs(x0)``.
1416
+
1417
+ The default value ``xtol=2e-12`` may lead to surprising behavior if one
1418
+ expects `toms748` to always compute roots with relative error near machine
1419
+ precision. Care should be taken to select `xtol` for the use case at hand.
1420
+ Setting ``xtol=5e-324``, the smallest subnormal number, will ensure the
1421
+ highest level of accuracy. Larger values of `xtol` may be useful for saving
1422
+ function evaluations when a root is at or near zero in applications where
1423
+ the tiny absolute differences available between floating point numbers near
1424
+ zero are not meaningful.
1425
+
1426
+ References
1427
+ ----------
1428
+ .. [APS1995]
1429
+ Alefeld, G. E. and Potra, F. A. and Shi, Yixun,
1430
+ *Algorithm 748: Enclosing Zeros of Continuous Functions*,
1431
+ ACM Trans. Math. Softw. Volume 221(1995)
1432
+ doi = {10.1145/210089.210111}
1433
+
1434
+ Examples
1435
+ --------
1436
+ >>> def f(x):
1437
+ ... return (x**3 - 1) # only one real root at x = 1
1438
+
1439
+ >>> from scipy import optimize
1440
+ >>> root, results = optimize.toms748(f, 0, 2, full_output=True)
1441
+ >>> root
1442
+ 1.0
1443
+ >>> results
1444
+ converged: True
1445
+ flag: converged
1446
+ function_calls: 11
1447
+ iterations: 5
1448
+ root: 1.0
1449
+ method: toms748
1450
+ """
1451
+ if xtol <= 0:
1452
+ raise ValueError(f"xtol too small ({xtol:g} <= 0)")
1453
+ if rtol < _rtol / 4:
1454
+ raise ValueError(f"rtol too small ({rtol:g} < {_rtol/4:g})")
1455
+ maxiter = operator.index(maxiter)
1456
+ if maxiter < 1:
1457
+ raise ValueError("maxiter must be greater than 0")
1458
+ if not np.isfinite(a):
1459
+ raise ValueError(f"a is not finite {a}")
1460
+ if not np.isfinite(b):
1461
+ raise ValueError(f"b is not finite {b}")
1462
+ if a >= b:
1463
+ raise ValueError(f"a and b are not an interval [{a}, {b}]")
1464
+ if not k >= 1:
1465
+ raise ValueError(f"k too small ({k} < 1)")
1466
+
1467
+ if not isinstance(args, tuple):
1468
+ args = (args,)
1469
+ f = _wrap_nan_raise(f)
1470
+ solver = TOMS748Solver()
1471
+ result = solver.solve(f, a, b, args=args, k=k, xtol=xtol, rtol=rtol,
1472
+ maxiter=maxiter, disp=disp)
1473
+ x, function_calls, iterations, flag = result
1474
+ return _results_select(full_output, (x, function_calls, iterations, flag),
1475
+ "toms748")