scipy 1.15.3__cp313-cp313-macosx_12_0_arm64.whl → 1.16.0rc2__cp313-cp313-macosx_12_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (629) hide show
  1. scipy/.dylibs/libscipy_openblas.dylib +0 -0
  2. scipy/__config__.py +8 -8
  3. scipy/__init__.py +3 -6
  4. scipy/_cyutility.cpython-313-darwin.so +0 -0
  5. scipy/_lib/_array_api.py +486 -161
  6. scipy/_lib/_array_api_compat_vendor.py +9 -0
  7. scipy/_lib/_bunch.py +4 -0
  8. scipy/_lib/_ccallback_c.cpython-313-darwin.so +0 -0
  9. scipy/_lib/_docscrape.py +1 -1
  10. scipy/_lib/_elementwise_iterative_method.py +15 -26
  11. scipy/_lib/_sparse.py +41 -0
  12. scipy/_lib/_test_deprecation_call.cpython-313-darwin.so +0 -0
  13. scipy/_lib/_test_deprecation_def.cpython-313-darwin.so +0 -0
  14. scipy/_lib/_testutils.py +6 -2
  15. scipy/_lib/_util.py +222 -125
  16. scipy/_lib/array_api_compat/__init__.py +4 -4
  17. scipy/_lib/array_api_compat/_internal.py +19 -6
  18. scipy/_lib/array_api_compat/common/__init__.py +1 -1
  19. scipy/_lib/array_api_compat/common/_aliases.py +365 -193
  20. scipy/_lib/array_api_compat/common/_fft.py +94 -64
  21. scipy/_lib/array_api_compat/common/_helpers.py +413 -180
  22. scipy/_lib/array_api_compat/common/_linalg.py +116 -40
  23. scipy/_lib/array_api_compat/common/_typing.py +179 -10
  24. scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
  25. scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
  26. scipy/_lib/array_api_compat/cupy/_info.py +16 -6
  27. scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
  28. scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
  29. scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
  30. scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
  31. scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
  32. scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
  33. scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
  34. scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
  35. scipy/_lib/array_api_compat/numpy/_info.py +36 -16
  36. scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
  37. scipy/_lib/array_api_compat/numpy/fft.py +11 -5
  38. scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
  39. scipy/_lib/array_api_compat/torch/__init__.py +3 -5
  40. scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
  41. scipy/_lib/array_api_compat/torch/_info.py +27 -16
  42. scipy/_lib/array_api_compat/torch/_typing.py +3 -0
  43. scipy/_lib/array_api_compat/torch/fft.py +17 -18
  44. scipy/_lib/array_api_compat/torch/linalg.py +16 -16
  45. scipy/_lib/array_api_extra/__init__.py +26 -3
  46. scipy/_lib/array_api_extra/_delegation.py +171 -0
  47. scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
  48. scipy/_lib/array_api_extra/_lib/_at.py +463 -0
  49. scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
  50. scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
  51. scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
  52. scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
  53. scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
  54. scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
  55. scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
  56. scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
  57. scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
  58. scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
  59. scipy/_lib/array_api_extra/testing.py +359 -0
  60. scipy/_lib/decorator.py +2 -2
  61. scipy/_lib/doccer.py +1 -7
  62. scipy/_lib/messagestream.cpython-313-darwin.so +0 -0
  63. scipy/_lib/pyprima/__init__.py +212 -0
  64. scipy/_lib/pyprima/cobyla/__init__.py +0 -0
  65. scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
  66. scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
  67. scipy/_lib/pyprima/cobyla/geometry.py +226 -0
  68. scipy/_lib/pyprima/cobyla/initialize.py +215 -0
  69. scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
  70. scipy/_lib/pyprima/cobyla/update.py +289 -0
  71. scipy/_lib/pyprima/common/__init__.py +0 -0
  72. scipy/_lib/pyprima/common/_bounds.py +34 -0
  73. scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
  74. scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
  75. scipy/_lib/pyprima/common/_project.py +173 -0
  76. scipy/_lib/pyprima/common/checkbreak.py +93 -0
  77. scipy/_lib/pyprima/common/consts.py +47 -0
  78. scipy/_lib/pyprima/common/evaluate.py +99 -0
  79. scipy/_lib/pyprima/common/history.py +38 -0
  80. scipy/_lib/pyprima/common/infos.py +30 -0
  81. scipy/_lib/pyprima/common/linalg.py +435 -0
  82. scipy/_lib/pyprima/common/message.py +290 -0
  83. scipy/_lib/pyprima/common/powalg.py +131 -0
  84. scipy/_lib/pyprima/common/preproc.py +277 -0
  85. scipy/_lib/pyprima/common/present.py +5 -0
  86. scipy/_lib/pyprima/common/ratio.py +54 -0
  87. scipy/_lib/pyprima/common/redrho.py +47 -0
  88. scipy/_lib/pyprima/common/selectx.py +296 -0
  89. scipy/_lib/tests/test__util.py +105 -121
  90. scipy/_lib/tests/test_array_api.py +166 -35
  91. scipy/_lib/tests/test_bunch.py +7 -0
  92. scipy/_lib/tests/test_ccallback.py +2 -10
  93. scipy/_lib/tests/test_public_api.py +13 -0
  94. scipy/cluster/_hierarchy.cpython-313-darwin.so +0 -0
  95. scipy/cluster/_optimal_leaf_ordering.cpython-313-darwin.so +0 -0
  96. scipy/cluster/_vq.cpython-313-darwin.so +0 -0
  97. scipy/cluster/hierarchy.py +393 -223
  98. scipy/cluster/tests/test_hierarchy.py +273 -335
  99. scipy/cluster/tests/test_vq.py +45 -61
  100. scipy/cluster/vq.py +39 -35
  101. scipy/conftest.py +263 -157
  102. scipy/constants/_constants.py +4 -1
  103. scipy/constants/tests/test_codata.py +2 -2
  104. scipy/constants/tests/test_constants.py +11 -18
  105. scipy/datasets/_download_all.py +15 -1
  106. scipy/datasets/_fetchers.py +7 -1
  107. scipy/datasets/_utils.py +1 -1
  108. scipy/differentiate/_differentiate.py +25 -25
  109. scipy/differentiate/tests/test_differentiate.py +24 -25
  110. scipy/fft/_basic.py +20 -0
  111. scipy/fft/_helper.py +3 -34
  112. scipy/fft/_pocketfft/helper.py +29 -1
  113. scipy/fft/_pocketfft/tests/test_basic.py +2 -4
  114. scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
  115. scipy/fft/_realtransforms.py +13 -0
  116. scipy/fft/tests/test_basic.py +27 -25
  117. scipy/fft/tests/test_fftlog.py +16 -7
  118. scipy/fft/tests/test_helper.py +18 -34
  119. scipy/fft/tests/test_real_transforms.py +8 -10
  120. scipy/fftpack/convolve.cpython-313-darwin.so +0 -0
  121. scipy/fftpack/tests/test_basic.py +2 -4
  122. scipy/fftpack/tests/test_real_transforms.py +8 -9
  123. scipy/integrate/_bvp.py +9 -3
  124. scipy/integrate/_cubature.py +3 -2
  125. scipy/integrate/_dop.cpython-313-darwin.so +0 -0
  126. scipy/integrate/_lsoda.cpython-313-darwin.so +0 -0
  127. scipy/integrate/_ode.py +9 -2
  128. scipy/integrate/_odepack.cpython-313-darwin.so +0 -0
  129. scipy/integrate/_quad_vec.py +21 -29
  130. scipy/integrate/_quadpack.cpython-313-darwin.so +0 -0
  131. scipy/integrate/_quadpack_py.py +11 -7
  132. scipy/integrate/_quadrature.py +3 -3
  133. scipy/integrate/_rules/_base.py +2 -2
  134. scipy/integrate/_tanhsinh.py +48 -47
  135. scipy/integrate/_test_odeint_banded.cpython-313-darwin.so +0 -0
  136. scipy/integrate/_vode.cpython-313-darwin.so +0 -0
  137. scipy/integrate/tests/test__quad_vec.py +0 -6
  138. scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
  139. scipy/integrate/tests/test_cubature.py +21 -35
  140. scipy/integrate/tests/test_quadrature.py +6 -8
  141. scipy/integrate/tests/test_tanhsinh.py +56 -48
  142. scipy/interpolate/__init__.py +70 -58
  143. scipy/interpolate/_bary_rational.py +22 -22
  144. scipy/interpolate/_bsplines.py +119 -66
  145. scipy/interpolate/_cubic.py +65 -50
  146. scipy/interpolate/_dfitpack.cpython-313-darwin.so +0 -0
  147. scipy/interpolate/_dierckx.cpython-313-darwin.so +0 -0
  148. scipy/interpolate/_fitpack.cpython-313-darwin.so +0 -0
  149. scipy/interpolate/_fitpack2.py +9 -6
  150. scipy/interpolate/_fitpack_impl.py +32 -26
  151. scipy/interpolate/_fitpack_repro.py +23 -19
  152. scipy/interpolate/_interpnd.cpython-313-darwin.so +0 -0
  153. scipy/interpolate/_interpolate.py +30 -12
  154. scipy/interpolate/_ndbspline.py +13 -18
  155. scipy/interpolate/_ndgriddata.py +5 -8
  156. scipy/interpolate/_polyint.py +95 -31
  157. scipy/interpolate/_ppoly.cpython-313-darwin.so +0 -0
  158. scipy/interpolate/_rbf.py +2 -2
  159. scipy/interpolate/_rbfinterp.py +1 -1
  160. scipy/interpolate/_rbfinterp_pythran.cpython-313-darwin.so +0 -0
  161. scipy/interpolate/_rgi.py +31 -26
  162. scipy/interpolate/_rgi_cython.cpython-313-darwin.so +0 -0
  163. scipy/interpolate/dfitpack.py +0 -20
  164. scipy/interpolate/interpnd.py +1 -2
  165. scipy/interpolate/tests/test_bary_rational.py +2 -2
  166. scipy/interpolate/tests/test_bsplines.py +97 -1
  167. scipy/interpolate/tests/test_fitpack2.py +39 -1
  168. scipy/interpolate/tests/test_interpnd.py +32 -20
  169. scipy/interpolate/tests/test_interpolate.py +48 -4
  170. scipy/interpolate/tests/test_rgi.py +2 -1
  171. scipy/io/_fast_matrix_market/__init__.py +2 -0
  172. scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
  173. scipy/io/_harwell_boeing/hb.py +7 -11
  174. scipy/io/_idl.py +5 -7
  175. scipy/io/_netcdf.py +15 -5
  176. scipy/io/_test_fortran.cpython-313-darwin.so +0 -0
  177. scipy/io/arff/tests/test_arffread.py +3 -3
  178. scipy/io/matlab/__init__.py +5 -3
  179. scipy/io/matlab/_mio.py +4 -1
  180. scipy/io/matlab/_mio5.py +19 -13
  181. scipy/io/matlab/_mio5_utils.cpython-313-darwin.so +0 -0
  182. scipy/io/matlab/_mio_utils.cpython-313-darwin.so +0 -0
  183. scipy/io/matlab/_miobase.py +4 -1
  184. scipy/io/matlab/_streams.cpython-313-darwin.so +0 -0
  185. scipy/io/matlab/tests/test_mio.py +46 -18
  186. scipy/io/matlab/tests/test_mio_funcs.py +1 -1
  187. scipy/io/tests/test_mmio.py +7 -1
  188. scipy/io/tests/test_wavfile.py +41 -0
  189. scipy/io/wavfile.py +57 -10
  190. scipy/linalg/_basic.py +113 -86
  191. scipy/linalg/_cythonized_array_utils.cpython-313-darwin.so +0 -0
  192. scipy/linalg/_decomp.py +22 -9
  193. scipy/linalg/_decomp_cholesky.py +28 -13
  194. scipy/linalg/_decomp_cossin.py +45 -30
  195. scipy/linalg/_decomp_interpolative.cpython-313-darwin.so +0 -0
  196. scipy/linalg/_decomp_ldl.py +4 -1
  197. scipy/linalg/_decomp_lu.py +18 -6
  198. scipy/linalg/_decomp_lu_cython.cpython-313-darwin.so +0 -0
  199. scipy/linalg/_decomp_polar.py +2 -0
  200. scipy/linalg/_decomp_qr.py +6 -2
  201. scipy/linalg/_decomp_qz.py +3 -0
  202. scipy/linalg/_decomp_schur.py +3 -1
  203. scipy/linalg/_decomp_svd.py +13 -2
  204. scipy/linalg/_decomp_update.cpython-313-darwin.so +0 -0
  205. scipy/linalg/_expm_frechet.py +4 -0
  206. scipy/linalg/_fblas.cpython-313-darwin.so +0 -0
  207. scipy/linalg/_flapack.cpython-313-darwin.so +0 -0
  208. scipy/linalg/_linalg_pythran.cpython-313-darwin.so +0 -0
  209. scipy/linalg/_matfuncs.py +187 -4
  210. scipy/linalg/_matfuncs_expm.cpython-313-darwin.so +0 -0
  211. scipy/linalg/_matfuncs_schur_sqrtm.cpython-313-darwin.so +0 -0
  212. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  213. scipy/linalg/_matfuncs_sqrtm_triu.cpython-313-darwin.so +0 -0
  214. scipy/linalg/_procrustes.py +2 -0
  215. scipy/linalg/_sketches.py +17 -6
  216. scipy/linalg/_solve_toeplitz.cpython-313-darwin.so +0 -0
  217. scipy/linalg/_solvers.py +7 -2
  218. scipy/linalg/_special_matrices.py +26 -36
  219. scipy/linalg/cython_blas.cpython-313-darwin.so +0 -0
  220. scipy/linalg/cython_lapack.cpython-313-darwin.so +0 -0
  221. scipy/linalg/lapack.py +22 -2
  222. scipy/linalg/tests/_cython_examples/meson.build +7 -0
  223. scipy/linalg/tests/test_basic.py +31 -16
  224. scipy/linalg/tests/test_batch.py +588 -0
  225. scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
  226. scipy/linalg/tests/test_decomp.py +40 -3
  227. scipy/linalg/tests/test_decomp_cossin.py +14 -0
  228. scipy/linalg/tests/test_decomp_ldl.py +1 -1
  229. scipy/linalg/tests/test_lapack.py +115 -7
  230. scipy/linalg/tests/test_matfuncs.py +157 -102
  231. scipy/linalg/tests/test_procrustes.py +0 -7
  232. scipy/linalg/tests/test_solve_toeplitz.py +1 -1
  233. scipy/linalg/tests/test_special_matrices.py +1 -5
  234. scipy/ndimage/__init__.py +1 -0
  235. scipy/ndimage/_cytest.cpython-313-darwin.so +0 -0
  236. scipy/ndimage/_delegators.py +8 -2
  237. scipy/ndimage/_filters.py +453 -5
  238. scipy/ndimage/_interpolation.py +36 -6
  239. scipy/ndimage/_measurements.py +4 -2
  240. scipy/ndimage/_morphology.py +5 -0
  241. scipy/ndimage/_nd_image.cpython-313-darwin.so +0 -0
  242. scipy/ndimage/_ni_docstrings.py +5 -1
  243. scipy/ndimage/_ni_label.cpython-313-darwin.so +0 -0
  244. scipy/ndimage/_ni_support.py +1 -5
  245. scipy/ndimage/_rank_filter_1d.cpython-313-darwin.so +0 -0
  246. scipy/ndimage/_support_alternative_backends.py +18 -6
  247. scipy/ndimage/tests/test_filters.py +370 -259
  248. scipy/ndimage/tests/test_fourier.py +7 -9
  249. scipy/ndimage/tests/test_interpolation.py +68 -61
  250. scipy/ndimage/tests/test_measurements.py +18 -35
  251. scipy/ndimage/tests/test_morphology.py +143 -131
  252. scipy/ndimage/tests/test_splines.py +1 -3
  253. scipy/odr/__odrpack.cpython-313-darwin.so +0 -0
  254. scipy/optimize/_basinhopping.py +13 -7
  255. scipy/optimize/_bglu_dense.cpython-313-darwin.so +0 -0
  256. scipy/optimize/_bracket.py +17 -24
  257. scipy/optimize/_chandrupatla.py +9 -10
  258. scipy/optimize/_cobyla_py.py +104 -123
  259. scipy/optimize/_constraints.py +14 -10
  260. scipy/optimize/_differentiable_functions.py +371 -230
  261. scipy/optimize/_differentialevolution.py +4 -3
  262. scipy/optimize/_direct.cpython-313-darwin.so +0 -0
  263. scipy/optimize/_dual_annealing.py +1 -1
  264. scipy/optimize/_elementwise.py +1 -4
  265. scipy/optimize/_group_columns.cpython-313-darwin.so +0 -0
  266. scipy/optimize/_lbfgsb.cpython-313-darwin.so +0 -0
  267. scipy/optimize/_lbfgsb_py.py +57 -16
  268. scipy/optimize/_linprog_doc.py +2 -2
  269. scipy/optimize/_linprog_highs.py +2 -2
  270. scipy/optimize/_linprog_ip.py +25 -10
  271. scipy/optimize/_linprog_util.py +14 -16
  272. scipy/optimize/_lsap.cpython-313-darwin.so +0 -0
  273. scipy/optimize/_lsq/common.py +3 -3
  274. scipy/optimize/_lsq/dogbox.py +16 -2
  275. scipy/optimize/_lsq/givens_elimination.cpython-313-darwin.so +0 -0
  276. scipy/optimize/_lsq/least_squares.py +198 -126
  277. scipy/optimize/_lsq/lsq_linear.py +6 -6
  278. scipy/optimize/_lsq/trf.py +35 -8
  279. scipy/optimize/_milp.py +3 -1
  280. scipy/optimize/_minimize.py +105 -36
  281. scipy/optimize/_minpack.cpython-313-darwin.so +0 -0
  282. scipy/optimize/_minpack_py.py +21 -14
  283. scipy/optimize/_moduleTNC.cpython-313-darwin.so +0 -0
  284. scipy/optimize/_nnls.py +20 -21
  285. scipy/optimize/_nonlin.py +34 -3
  286. scipy/optimize/_numdiff.py +288 -110
  287. scipy/optimize/_optimize.py +86 -48
  288. scipy/optimize/_pava_pybind.cpython-313-darwin.so +0 -0
  289. scipy/optimize/_remove_redundancy.py +5 -5
  290. scipy/optimize/_root_scalar.py +1 -1
  291. scipy/optimize/_shgo.py +6 -0
  292. scipy/optimize/_shgo_lib/_complex.py +1 -1
  293. scipy/optimize/_slsqp_py.py +216 -124
  294. scipy/optimize/_slsqplib.cpython-313-darwin.so +0 -0
  295. scipy/optimize/_spectral.py +1 -1
  296. scipy/optimize/_tnc.py +8 -1
  297. scipy/optimize/_trlib/_trlib.cpython-313-darwin.so +0 -0
  298. scipy/optimize/_trustregion.py +20 -6
  299. scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
  300. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
  301. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
  302. scipy/optimize/_trustregion_constr/projections.py +12 -8
  303. scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
  304. scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
  305. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
  306. scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
  307. scipy/optimize/_trustregion_exact.py +0 -1
  308. scipy/optimize/_zeros.cpython-313-darwin.so +0 -0
  309. scipy/optimize/_zeros_py.py +97 -17
  310. scipy/optimize/cython_optimize/_zeros.cpython-313-darwin.so +0 -0
  311. scipy/optimize/slsqp.py +0 -1
  312. scipy/optimize/tests/test__basinhopping.py +1 -1
  313. scipy/optimize/tests/test__differential_evolution.py +4 -4
  314. scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
  315. scipy/optimize/tests/test__numdiff.py +66 -22
  316. scipy/optimize/tests/test__remove_redundancy.py +2 -2
  317. scipy/optimize/tests/test__shgo.py +9 -1
  318. scipy/optimize/tests/test_bracket.py +36 -46
  319. scipy/optimize/tests/test_chandrupatla.py +133 -135
  320. scipy/optimize/tests/test_cobyla.py +74 -45
  321. scipy/optimize/tests/test_constraints.py +1 -1
  322. scipy/optimize/tests/test_differentiable_functions.py +226 -6
  323. scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
  324. scipy/optimize/tests/test_least_squares.py +125 -13
  325. scipy/optimize/tests/test_linear_assignment.py +3 -3
  326. scipy/optimize/tests/test_linprog.py +3 -3
  327. scipy/optimize/tests/test_lsq_linear.py +6 -6
  328. scipy/optimize/tests/test_minimize_constrained.py +2 -2
  329. scipy/optimize/tests/test_minpack.py +4 -4
  330. scipy/optimize/tests/test_nnls.py +43 -3
  331. scipy/optimize/tests/test_nonlin.py +36 -0
  332. scipy/optimize/tests/test_optimize.py +95 -17
  333. scipy/optimize/tests/test_slsqp.py +36 -4
  334. scipy/optimize/tests/test_zeros.py +34 -1
  335. scipy/signal/__init__.py +12 -23
  336. scipy/signal/_delegators.py +568 -0
  337. scipy/signal/_filter_design.py +459 -241
  338. scipy/signal/_fir_filter_design.py +262 -90
  339. scipy/signal/_lti_conversion.py +3 -2
  340. scipy/signal/_ltisys.py +118 -91
  341. scipy/signal/_max_len_seq_inner.cpython-313-darwin.so +0 -0
  342. scipy/signal/_peak_finding_utils.cpython-313-darwin.so +0 -0
  343. scipy/signal/_polyutils.py +172 -0
  344. scipy/signal/_short_time_fft.py +519 -70
  345. scipy/signal/_signal_api.py +30 -0
  346. scipy/signal/_signaltools.py +719 -399
  347. scipy/signal/_sigtools.cpython-313-darwin.so +0 -0
  348. scipy/signal/_sosfilt.cpython-313-darwin.so +0 -0
  349. scipy/signal/_spectral_py.py +230 -50
  350. scipy/signal/_spline.cpython-313-darwin.so +0 -0
  351. scipy/signal/_spline_filters.py +108 -68
  352. scipy/signal/_support_alternative_backends.py +73 -0
  353. scipy/signal/_upfirdn.py +4 -1
  354. scipy/signal/_upfirdn_apply.cpython-313-darwin.so +0 -0
  355. scipy/signal/_waveforms.py +2 -11
  356. scipy/signal/_wavelets.py +1 -1
  357. scipy/signal/fir_filter_design.py +1 -0
  358. scipy/signal/spline.py +4 -11
  359. scipy/signal/tests/_scipy_spectral_test_shim.py +2 -171
  360. scipy/signal/tests/test_bsplines.py +114 -79
  361. scipy/signal/tests/test_cont2discrete.py +9 -2
  362. scipy/signal/tests/test_filter_design.py +721 -481
  363. scipy/signal/tests/test_fir_filter_design.py +332 -140
  364. scipy/signal/tests/test_savitzky_golay.py +4 -3
  365. scipy/signal/tests/test_short_time_fft.py +221 -3
  366. scipy/signal/tests/test_signaltools.py +2144 -1348
  367. scipy/signal/tests/test_spectral.py +50 -6
  368. scipy/signal/tests/test_splines.py +161 -96
  369. scipy/signal/tests/test_upfirdn.py +84 -50
  370. scipy/signal/tests/test_waveforms.py +20 -0
  371. scipy/signal/tests/test_windows.py +607 -466
  372. scipy/signal/windows/_windows.py +287 -148
  373. scipy/sparse/__init__.py +23 -4
  374. scipy/sparse/_base.py +270 -108
  375. scipy/sparse/_bsr.py +7 -4
  376. scipy/sparse/_compressed.py +59 -231
  377. scipy/sparse/_construct.py +90 -38
  378. scipy/sparse/_coo.py +115 -181
  379. scipy/sparse/_csc.py +4 -4
  380. scipy/sparse/_csparsetools.cpython-313-darwin.so +0 -0
  381. scipy/sparse/_csr.py +2 -2
  382. scipy/sparse/_data.py +48 -48
  383. scipy/sparse/_dia.py +105 -18
  384. scipy/sparse/_dok.py +0 -23
  385. scipy/sparse/_index.py +4 -4
  386. scipy/sparse/_matrix.py +23 -0
  387. scipy/sparse/_sparsetools.cpython-313-darwin.so +0 -0
  388. scipy/sparse/_sputils.py +37 -22
  389. scipy/sparse/base.py +0 -9
  390. scipy/sparse/bsr.py +0 -14
  391. scipy/sparse/compressed.py +0 -23
  392. scipy/sparse/construct.py +0 -6
  393. scipy/sparse/coo.py +0 -14
  394. scipy/sparse/csc.py +0 -3
  395. scipy/sparse/csgraph/_flow.cpython-313-darwin.so +0 -0
  396. scipy/sparse/csgraph/_matching.cpython-313-darwin.so +0 -0
  397. scipy/sparse/csgraph/_min_spanning_tree.cpython-313-darwin.so +0 -0
  398. scipy/sparse/csgraph/_reordering.cpython-313-darwin.so +0 -0
  399. scipy/sparse/csgraph/_shortest_path.cpython-313-darwin.so +0 -0
  400. scipy/sparse/csgraph/_tools.cpython-313-darwin.so +0 -0
  401. scipy/sparse/csgraph/_traversal.cpython-313-darwin.so +0 -0
  402. scipy/sparse/csgraph/tests/test_matching.py +14 -2
  403. scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
  404. scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
  405. scipy/sparse/csr.py +0 -5
  406. scipy/sparse/data.py +1 -6
  407. scipy/sparse/dia.py +0 -7
  408. scipy/sparse/dok.py +0 -10
  409. scipy/sparse/linalg/_dsolve/_superlu.cpython-313-darwin.so +0 -0
  410. scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
  411. scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
  412. scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-313-darwin.so +0 -0
  413. scipy/sparse/linalg/_eigen/arpack/arpack.py +23 -17
  414. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
  415. scipy/sparse/linalg/_interface.py +17 -18
  416. scipy/sparse/linalg/_isolve/_gcrotmk.py +4 -4
  417. scipy/sparse/linalg/_isolve/iterative.py +51 -45
  418. scipy/sparse/linalg/_isolve/lgmres.py +6 -6
  419. scipy/sparse/linalg/_isolve/minres.py +5 -5
  420. scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
  421. scipy/sparse/linalg/_isolve/utils.py +2 -8
  422. scipy/sparse/linalg/_matfuncs.py +1 -1
  423. scipy/sparse/linalg/_norm.py +1 -1
  424. scipy/sparse/linalg/_propack/_cpropack.cpython-313-darwin.so +0 -0
  425. scipy/sparse/linalg/_propack/_dpropack.cpython-313-darwin.so +0 -0
  426. scipy/sparse/linalg/_propack/_spropack.cpython-313-darwin.so +0 -0
  427. scipy/sparse/linalg/_propack/_zpropack.cpython-313-darwin.so +0 -0
  428. scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
  429. scipy/sparse/linalg/tests/test_pydata_sparse.py +14 -0
  430. scipy/sparse/tests/test_arithmetic1d.py +5 -2
  431. scipy/sparse/tests/test_base.py +214 -42
  432. scipy/sparse/tests/test_common1d.py +7 -7
  433. scipy/sparse/tests/test_construct.py +1 -1
  434. scipy/sparse/tests/test_coo.py +272 -4
  435. scipy/sparse/tests/test_sparsetools.py +5 -0
  436. scipy/sparse/tests/test_sputils.py +36 -7
  437. scipy/spatial/_ckdtree.cpython-313-darwin.so +0 -0
  438. scipy/spatial/_distance_pybind.cpython-313-darwin.so +0 -0
  439. scipy/spatial/_distance_wrap.cpython-313-darwin.so +0 -0
  440. scipy/spatial/_hausdorff.cpython-313-darwin.so +0 -0
  441. scipy/spatial/_qhull.cpython-313-darwin.so +0 -0
  442. scipy/spatial/_voronoi.cpython-313-darwin.so +0 -0
  443. scipy/spatial/distance.py +49 -42
  444. scipy/spatial/tests/test_distance.py +15 -1
  445. scipy/spatial/tests/test_kdtree.py +1 -0
  446. scipy/spatial/tests/test_qhull.py +7 -2
  447. scipy/spatial/transform/__init__.py +5 -3
  448. scipy/spatial/transform/_rigid_transform.cpython-313-darwin.so +0 -0
  449. scipy/spatial/transform/_rotation.cpython-313-darwin.so +0 -0
  450. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  451. scipy/spatial/transform/tests/test_rotation.py +1213 -832
  452. scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
  453. scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
  454. scipy/special/__init__.py +1 -47
  455. scipy/special/_add_newdocs.py +34 -772
  456. scipy/special/_basic.py +22 -25
  457. scipy/special/_comb.cpython-313-darwin.so +0 -0
  458. scipy/special/_ellip_harm_2.cpython-313-darwin.so +0 -0
  459. scipy/special/_gufuncs.cpython-313-darwin.so +0 -0
  460. scipy/special/_logsumexp.py +67 -58
  461. scipy/special/_orthogonal.pyi +1 -1
  462. scipy/special/_specfun.cpython-313-darwin.so +0 -0
  463. scipy/special/_special_ufuncs.cpython-313-darwin.so +0 -0
  464. scipy/special/_spherical_bessel.py +4 -4
  465. scipy/special/_support_alternative_backends.py +212 -119
  466. scipy/special/_test_internal.cpython-313-darwin.so +0 -0
  467. scipy/special/_testutils.py +4 -4
  468. scipy/special/_ufuncs.cpython-313-darwin.so +0 -0
  469. scipy/special/_ufuncs.pyi +1 -0
  470. scipy/special/_ufuncs.pyx +215 -1400
  471. scipy/special/_ufuncs_cxx.cpython-313-darwin.so +0 -0
  472. scipy/special/_ufuncs_cxx.pxd +2 -15
  473. scipy/special/_ufuncs_cxx.pyx +5 -44
  474. scipy/special/_ufuncs_cxx_defs.h +2 -16
  475. scipy/special/_ufuncs_defs.h +0 -8
  476. scipy/special/cython_special.cpython-313-darwin.so +0 -0
  477. scipy/special/cython_special.pxd +1 -1
  478. scipy/special/tests/_cython_examples/meson.build +10 -1
  479. scipy/special/tests/test_basic.py +153 -20
  480. scipy/special/tests/test_boost_ufuncs.py +3 -0
  481. scipy/special/tests/test_cdflib.py +35 -11
  482. scipy/special/tests/test_gammainc.py +16 -0
  483. scipy/special/tests/test_hyp2f1.py +2 -2
  484. scipy/special/tests/test_log1mexp.py +85 -0
  485. scipy/special/tests/test_logsumexp.py +206 -64
  486. scipy/special/tests/test_mpmath.py +1 -0
  487. scipy/special/tests/test_nan_inputs.py +1 -1
  488. scipy/special/tests/test_orthogonal.py +17 -18
  489. scipy/special/tests/test_sf_error.py +3 -2
  490. scipy/special/tests/test_sph_harm.py +6 -7
  491. scipy/special/tests/test_support_alternative_backends.py +211 -76
  492. scipy/stats/__init__.py +4 -1
  493. scipy/stats/_ansari_swilk_statistics.cpython-313-darwin.so +0 -0
  494. scipy/stats/_axis_nan_policy.py +5 -12
  495. scipy/stats/_biasedurn.cpython-313-darwin.so +0 -0
  496. scipy/stats/_continued_fraction.py +387 -0
  497. scipy/stats/_continuous_distns.py +277 -310
  498. scipy/stats/_correlation.py +1 -1
  499. scipy/stats/_covariance.py +6 -3
  500. scipy/stats/_discrete_distns.py +39 -32
  501. scipy/stats/_distn_infrastructure.py +39 -12
  502. scipy/stats/_distribution_infrastructure.py +900 -238
  503. scipy/stats/_entropy.py +9 -10
  504. scipy/{_lib → stats}/_finite_differences.py +1 -1
  505. scipy/stats/_hypotests.py +83 -50
  506. scipy/stats/_kde.py +53 -49
  507. scipy/stats/_ksstats.py +1 -1
  508. scipy/stats/_levy_stable/__init__.py +7 -15
  509. scipy/stats/_levy_stable/levyst.cpython-313-darwin.so +0 -0
  510. scipy/stats/_morestats.py +118 -73
  511. scipy/stats/_mstats_basic.py +13 -17
  512. scipy/stats/_mstats_extras.py +8 -8
  513. scipy/stats/_multivariate.py +89 -113
  514. scipy/stats/_new_distributions.py +97 -20
  515. scipy/stats/_page_trend_test.py +12 -5
  516. scipy/stats/_probability_distribution.py +265 -43
  517. scipy/stats/_qmc.py +14 -9
  518. scipy/stats/_qmc_cy.cpython-313-darwin.so +0 -0
  519. scipy/stats/_qmvnt.py +16 -95
  520. scipy/stats/_qmvnt_cy.cpython-313-darwin.so +0 -0
  521. scipy/stats/_quantile.py +335 -0
  522. scipy/stats/_rcont/rcont.cpython-313-darwin.so +0 -0
  523. scipy/stats/_resampling.py +4 -29
  524. scipy/stats/_sampling.py +1 -1
  525. scipy/stats/_sobol.cpython-313-darwin.so +0 -0
  526. scipy/stats/_stats.cpython-313-darwin.so +0 -0
  527. scipy/stats/_stats_mstats_common.py +21 -2
  528. scipy/stats/_stats_py.py +550 -476
  529. scipy/stats/_stats_pythran.cpython-313-darwin.so +0 -0
  530. scipy/stats/_unuran/unuran_wrapper.cpython-313-darwin.so +0 -0
  531. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  532. scipy/stats/_variation.py +6 -8
  533. scipy/stats/_wilcoxon.py +13 -7
  534. scipy/stats/tests/common_tests.py +6 -4
  535. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  536. scipy/stats/tests/test_continued_fraction.py +173 -0
  537. scipy/stats/tests/test_continuous.py +379 -60
  538. scipy/stats/tests/test_continuous_basic.py +18 -12
  539. scipy/stats/tests/test_discrete_basic.py +14 -8
  540. scipy/stats/tests/test_discrete_distns.py +16 -16
  541. scipy/stats/tests/test_distributions.py +95 -75
  542. scipy/stats/tests/test_entropy.py +40 -48
  543. scipy/stats/tests/test_fit.py +4 -3
  544. scipy/stats/tests/test_hypotests.py +153 -24
  545. scipy/stats/tests/test_kdeoth.py +109 -41
  546. scipy/stats/tests/test_marray.py +289 -0
  547. scipy/stats/tests/test_morestats.py +79 -47
  548. scipy/stats/tests/test_mstats_basic.py +3 -3
  549. scipy/stats/tests/test_multivariate.py +434 -83
  550. scipy/stats/tests/test_qmc.py +13 -10
  551. scipy/stats/tests/test_quantile.py +199 -0
  552. scipy/stats/tests/test_rank.py +119 -112
  553. scipy/stats/tests/test_resampling.py +47 -56
  554. scipy/stats/tests/test_sampling.py +9 -4
  555. scipy/stats/tests/test_stats.py +799 -939
  556. scipy/stats/tests/test_variation.py +8 -6
  557. scipy/version.py +2 -2
  558. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/LICENSE.txt +4 -4
  559. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/METADATA +11 -11
  560. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/RECORD +561 -568
  561. scipy-1.16.0rc2.dist-info/WHEEL +6 -0
  562. scipy/_lib/array_api_extra/_funcs.py +0 -484
  563. scipy/_lib/array_api_extra/_typing.py +0 -8
  564. scipy/interpolate/_bspl.cpython-313-darwin.so +0 -0
  565. scipy/optimize/_cobyla.cpython-313-darwin.so +0 -0
  566. scipy/optimize/_cython_nnls.cpython-313-darwin.so +0 -0
  567. scipy/optimize/_slsqp.cpython-313-darwin.so +0 -0
  568. scipy/spatial/qhull_src/COPYING.txt +0 -38
  569. scipy/special/libsf_error_state.dylib +0 -0
  570. scipy/special/tests/test_log_softmax.py +0 -109
  571. scipy/special/tests/test_xsf_cuda.py +0 -114
  572. scipy/special/xsf/binom.h +0 -89
  573. scipy/special/xsf/cdflib.h +0 -100
  574. scipy/special/xsf/cephes/airy.h +0 -307
  575. scipy/special/xsf/cephes/besselpoly.h +0 -51
  576. scipy/special/xsf/cephes/beta.h +0 -257
  577. scipy/special/xsf/cephes/cbrt.h +0 -131
  578. scipy/special/xsf/cephes/chbevl.h +0 -85
  579. scipy/special/xsf/cephes/chdtr.h +0 -193
  580. scipy/special/xsf/cephes/const.h +0 -87
  581. scipy/special/xsf/cephes/ellie.h +0 -293
  582. scipy/special/xsf/cephes/ellik.h +0 -251
  583. scipy/special/xsf/cephes/ellpe.h +0 -107
  584. scipy/special/xsf/cephes/ellpk.h +0 -117
  585. scipy/special/xsf/cephes/expn.h +0 -260
  586. scipy/special/xsf/cephes/gamma.h +0 -398
  587. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  588. scipy/special/xsf/cephes/hyperg.h +0 -361
  589. scipy/special/xsf/cephes/i0.h +0 -149
  590. scipy/special/xsf/cephes/i1.h +0 -158
  591. scipy/special/xsf/cephes/igam.h +0 -421
  592. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  593. scipy/special/xsf/cephes/igami.h +0 -313
  594. scipy/special/xsf/cephes/j0.h +0 -225
  595. scipy/special/xsf/cephes/j1.h +0 -198
  596. scipy/special/xsf/cephes/jv.h +0 -715
  597. scipy/special/xsf/cephes/k0.h +0 -164
  598. scipy/special/xsf/cephes/k1.h +0 -163
  599. scipy/special/xsf/cephes/kn.h +0 -243
  600. scipy/special/xsf/cephes/lanczos.h +0 -112
  601. scipy/special/xsf/cephes/ndtr.h +0 -275
  602. scipy/special/xsf/cephes/poch.h +0 -85
  603. scipy/special/xsf/cephes/polevl.h +0 -167
  604. scipy/special/xsf/cephes/psi.h +0 -194
  605. scipy/special/xsf/cephes/rgamma.h +0 -111
  606. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  607. scipy/special/xsf/cephes/shichi.h +0 -248
  608. scipy/special/xsf/cephes/sici.h +0 -224
  609. scipy/special/xsf/cephes/sindg.h +0 -221
  610. scipy/special/xsf/cephes/tandg.h +0 -139
  611. scipy/special/xsf/cephes/trig.h +0 -58
  612. scipy/special/xsf/cephes/unity.h +0 -186
  613. scipy/special/xsf/cephes/zeta.h +0 -172
  614. scipy/special/xsf/config.h +0 -304
  615. scipy/special/xsf/digamma.h +0 -205
  616. scipy/special/xsf/error.h +0 -57
  617. scipy/special/xsf/evalpoly.h +0 -47
  618. scipy/special/xsf/expint.h +0 -266
  619. scipy/special/xsf/hyp2f1.h +0 -694
  620. scipy/special/xsf/iv_ratio.h +0 -173
  621. scipy/special/xsf/lambertw.h +0 -150
  622. scipy/special/xsf/loggamma.h +0 -163
  623. scipy/special/xsf/sici.h +0 -200
  624. scipy/special/xsf/tools.h +0 -427
  625. scipy/special/xsf/trig.h +0 -164
  626. scipy/special/xsf/wright_bessel.h +0 -843
  627. scipy/special/xsf/zlog1.h +0 -35
  628. scipy/stats/_mvn.cpython-313-darwin.so +0 -0
  629. scipy-1.15.3.dist-info/WHEEL +0 -4
@@ -1,811 +0,0 @@
1
- /* Translated into C++ by SciPy developers in 2024.
2
- * Original header with Copyright information appears below.
3
- */
4
-
5
- /* iv.c
6
- *
7
- * Modified Bessel function of noninteger order
8
- *
9
- *
10
- *
11
- * SYNOPSIS:
12
- *
13
- * double v, x, y, iv();
14
- *
15
- * y = iv( v, x );
16
- *
17
- *
18
- *
19
- * DESCRIPTION:
20
- *
21
- * Returns modified Bessel function of order v of the
22
- * argument. If x is negative, v must be integer valued.
23
- *
24
- */
25
- /* iv.c */
26
- /* Modified Bessel function of noninteger order */
27
- /* If x < 0, then v must be an integer. */
28
-
29
- /*
30
- * Parts of the code are copyright:
31
- *
32
- * Cephes Math Library Release 2.8: June, 2000
33
- * Copyright 1984, 1987, 1988, 2000 by Stephen L. Moshier
34
- *
35
- * And other parts:
36
- *
37
- * Copyright (c) 2006 Xiaogang Zhang
38
- * Use, modification and distribution are subject to the
39
- * Boost Software License, Version 1.0.
40
- *
41
- * Boost Software License - Version 1.0 - August 17th, 2003
42
- *
43
- * Permission is hereby granted, free of charge, to any person or
44
- * organization obtaining a copy of the software and accompanying
45
- * documentation covered by this license (the "Software") to use, reproduce,
46
- * display, distribute, execute, and transmit the Software, and to prepare
47
- * derivative works of the Software, and to permit third-parties to whom the
48
- * Software is furnished to do so, all subject to the following:
49
- *
50
- * The copyright notices in the Software and this entire statement,
51
- * including the above license grant, this restriction and the following
52
- * disclaimer, must be included in all copies of the Software, in whole or
53
- * in part, and all derivative works of the Software, unless such copies or
54
- * derivative works are solely in the form of machine-executable object code
55
- * generated by a source language processor.
56
- *
57
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
58
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
59
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND
60
- * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE
61
- * DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY,
62
- * WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
63
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
64
- * SOFTWARE.
65
- *
66
- * And the rest are:
67
- *
68
- * Copyright (C) 2009 Pauli Virtanen
69
- * Distributed under the same license as Scipy.
70
- *
71
- */
72
- #pragma once
73
-
74
- #include "../config.h"
75
- #include "../error.h"
76
-
77
- #include "const.h"
78
- #include "gamma.h"
79
- #include "trig.h"
80
-
81
- namespace xsf {
82
- namespace cephes {
83
-
84
- namespace detail {
85
-
86
- /*
87
- * Compute Iv from (AMS5 9.7.1), asymptotic expansion for large |z|
88
- * Iv ~ exp(x)/sqrt(2 pi x) ( 1 + (4*v*v-1)/8x + (4*v*v-1)(4*v*v-9)/8x/2! + ...)
89
- */
90
- XSF_HOST_DEVICE inline double iv_asymptotic(double v, double x) {
91
- double mu;
92
- double sum, term, prefactor, factor;
93
- int k;
94
-
95
- prefactor = std::exp(x) / std::sqrt(2 * M_PI * x);
96
-
97
- if (prefactor == std::numeric_limits<double>::infinity()) {
98
- return prefactor;
99
- }
100
-
101
- mu = 4 * v * v;
102
- sum = 1.0;
103
- term = 1.0;
104
- k = 1;
105
-
106
- do {
107
- factor = (mu - (2 * k - 1) * (2 * k - 1)) / (8 * x) / k;
108
- if (k > 100) {
109
- /* didn't converge */
110
- set_error("iv(iv_asymptotic)", SF_ERROR_NO_RESULT, NULL);
111
- break;
112
- }
113
- term *= -factor;
114
- sum += term;
115
- ++k;
116
- } while (std::abs(term) > MACHEP * std::abs(sum));
117
- return sum * prefactor;
118
- }
119
-
120
- /*
121
- * Uniform asymptotic expansion factors, (AMS5 9.3.9; AMS5 9.3.10)
122
- *
123
- * Computed with:
124
- * --------------------
125
- import numpy as np
126
- t = np.poly1d([1,0])
127
- def up1(p):
128
- return .5*t*t*(1-t*t)*p.deriv() + 1/8. * ((1-5*t*t)*p).integ()
129
- us = [np.poly1d([1])]
130
- for k in range(10):
131
- us.append(up1(us[-1]))
132
- n = us[-1].order
133
- for p in us:
134
- print "{" + ", ".join(["0"]*(n-p.order) + map(repr, p)) + "},"
135
- print "N_UFACTORS", len(us)
136
- print "N_UFACTOR_TERMS", us[-1].order + 1
137
- * --------------------
138
- */
139
- constexpr int iv_N_UFACTORS = 11;
140
- constexpr int iv_N_UFACTOR_TERMS = 31;
141
-
142
- constexpr double iv_asymptotic_ufactors[iv_N_UFACTORS][iv_N_UFACTOR_TERMS] = {
143
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
144
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
145
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.20833333333333334,
146
- 0.0, 0.125, 0.0},
147
- {0,
148
- 0,
149
- 0,
150
- 0,
151
- 0,
152
- 0,
153
- 0,
154
- 0,
155
- 0,
156
- 0,
157
- 0,
158
- 0,
159
- 0,
160
- 0,
161
- 0,
162
- 0,
163
- 0,
164
- 0,
165
- 0,
166
- 0,
167
- 0,
168
- 0,
169
- 0,
170
- 0,
171
- 0.3342013888888889,
172
- 0.0,
173
- -0.40104166666666669,
174
- 0.0,
175
- 0.0703125,
176
- 0.0,
177
- 0.0},
178
- {0, 0,
179
- 0, 0,
180
- 0, 0,
181
- 0, 0,
182
- 0, 0,
183
- 0, 0,
184
- 0, 0,
185
- 0, 0,
186
- 0, 0,
187
- 0, 0,
188
- 0, -1.0258125964506173,
189
- 0.0, 1.8464626736111112,
190
- 0.0, -0.89121093750000002,
191
- 0.0, 0.0732421875,
192
- 0.0, 0.0,
193
- 0.0},
194
- {0,
195
- 0,
196
- 0,
197
- 0,
198
- 0,
199
- 0,
200
- 0,
201
- 0,
202
- 0,
203
- 0,
204
- 0,
205
- 0,
206
- 0,
207
- 0,
208
- 0,
209
- 0,
210
- 0,
211
- 0,
212
- 4.6695844234262474,
213
- 0.0,
214
- -11.207002616222995,
215
- 0.0,
216
- 8.78912353515625,
217
- 0.0,
218
- -2.3640869140624998,
219
- 0.0,
220
- 0.112152099609375,
221
- 0.0,
222
- 0.0,
223
- 0.0,
224
- 0.0},
225
- {0, 0,
226
- 0, 0,
227
- 0, 0,
228
- 0, 0,
229
- 0, 0,
230
- 0, 0,
231
- 0, 0,
232
- 0, -28.212072558200244,
233
- 0.0, 84.636217674600744,
234
- 0.0, -91.818241543240035,
235
- 0.0, 42.534998745388457,
236
- 0.0, -7.3687943594796312,
237
- 0.0, 0.22710800170898438,
238
- 0.0, 0.0,
239
- 0.0, 0.0,
240
- 0.0},
241
- {0,
242
- 0,
243
- 0,
244
- 0,
245
- 0,
246
- 0,
247
- 0,
248
- 0,
249
- 0,
250
- 0,
251
- 0,
252
- 0,
253
- 212.5701300392171,
254
- 0.0,
255
- -765.25246814118157,
256
- 0.0,
257
- 1059.9904525279999,
258
- 0.0,
259
- -699.57962737613275,
260
- 0.0,
261
- 218.19051174421159,
262
- 0.0,
263
- -26.491430486951554,
264
- 0.0,
265
- 0.57250142097473145,
266
- 0.0,
267
- 0.0,
268
- 0.0,
269
- 0.0,
270
- 0.0,
271
- 0.0},
272
- {0, 0,
273
- 0, 0,
274
- 0, 0,
275
- 0, 0,
276
- 0, -1919.4576623184068,
277
- 0.0, 8061.7221817373083,
278
- 0.0, -13586.550006434136,
279
- 0.0, 11655.393336864536,
280
- 0.0, -5305.6469786134048,
281
- 0.0, 1200.9029132163525,
282
- 0.0, -108.09091978839464,
283
- 0.0, 1.7277275025844574,
284
- 0.0, 0.0,
285
- 0.0, 0.0,
286
- 0.0, 0.0,
287
- 0.0},
288
- {0,
289
- 0,
290
- 0,
291
- 0,
292
- 0,
293
- 0,
294
- 20204.291330966149,
295
- 0.0,
296
- -96980.598388637503,
297
- 0.0,
298
- 192547.0012325315,
299
- 0.0,
300
- -203400.17728041555,
301
- 0.0,
302
- 122200.46498301747,
303
- 0.0,
304
- -41192.654968897557,
305
- 0.0,
306
- 7109.5143024893641,
307
- 0.0,
308
- -493.915304773088,
309
- 0.0,
310
- 6.074042001273483,
311
- 0.0,
312
- 0.0,
313
- 0.0,
314
- 0.0,
315
- 0.0,
316
- 0.0,
317
- 0.0,
318
- 0.0},
319
- {0, 0,
320
- 0, -242919.18790055133,
321
- 0.0, 1311763.6146629769,
322
- 0.0, -2998015.9185381061,
323
- 0.0, 3763271.2976564039,
324
- 0.0, -2813563.2265865342,
325
- 0.0, 1268365.2733216248,
326
- 0.0, -331645.17248456361,
327
- 0.0, 45218.768981362737,
328
- 0.0, -2499.8304818112092,
329
- 0.0, 24.380529699556064,
330
- 0.0, 0.0,
331
- 0.0, 0.0,
332
- 0.0, 0.0,
333
- 0.0, 0.0,
334
- 0.0},
335
- {3284469.8530720375,
336
- 0.0,
337
- -19706819.11843222,
338
- 0.0,
339
- 50952602.492664628,
340
- 0.0,
341
- -74105148.211532637,
342
- 0.0,
343
- 66344512.274729028,
344
- 0.0,
345
- -37567176.660763353,
346
- 0.0,
347
- 13288767.166421819,
348
- 0.0,
349
- -2785618.1280864552,
350
- 0.0,
351
- 308186.40461266245,
352
- 0.0,
353
- -13886.089753717039,
354
- 0.0,
355
- 110.01714026924674,
356
- 0.0,
357
- 0.0,
358
- 0.0,
359
- 0.0,
360
- 0.0,
361
- 0.0,
362
- 0.0,
363
- 0.0,
364
- 0.0,
365
- 0.0}};
366
-
367
- /*
368
- * Compute Iv, Kv from (AMS5 9.7.7 + 9.7.8), asymptotic expansion for large v
369
- */
370
- XSF_HOST_DEVICE inline void ikv_asymptotic_uniform(double v, double x, double *i_value, double *k_value) {
371
- double i_prefactor, k_prefactor;
372
- double t, t2, eta, z;
373
- double i_sum, k_sum, term, divisor;
374
- int k, n;
375
- int sign = 1;
376
-
377
- if (v < 0) {
378
- /* Negative v; compute I_{-v} and K_{-v} and use (AMS 9.6.2) */
379
- sign = -1;
380
- v = -v;
381
- }
382
-
383
- z = x / v;
384
- t = 1 / std::sqrt(1 + z * z);
385
- t2 = t * t;
386
- eta = std::sqrt(1 + z * z) + std::log(z / (1 + 1 / t));
387
-
388
- i_prefactor = std::sqrt(t / (2 * M_PI * v)) * std::exp(v * eta);
389
- i_sum = 1.0;
390
-
391
- k_prefactor = std::sqrt(M_PI * t / (2 * v)) * std::exp(-v * eta);
392
- k_sum = 1.0;
393
-
394
- divisor = v;
395
- for (n = 1; n < iv_N_UFACTORS; ++n) {
396
- /*
397
- * Evaluate u_k(t) with Horner's scheme;
398
- * (using the knowledge about which coefficients are zero)
399
- */
400
- term = 0;
401
- for (k = iv_N_UFACTOR_TERMS - 1 - 3 * n; k < iv_N_UFACTOR_TERMS - n; k += 2) {
402
- term *= t2;
403
- term += iv_asymptotic_ufactors[n][k];
404
- }
405
- for (k = 1; k < n; k += 2) {
406
- term *= t2;
407
- }
408
- if (n % 2 == 1) {
409
- term *= t;
410
- }
411
-
412
- /* Sum terms */
413
- term /= divisor;
414
- i_sum += term;
415
- k_sum += (n % 2 == 0) ? term : -term;
416
-
417
- /* Check convergence */
418
- if (std::abs(term) < MACHEP) {
419
- break;
420
- }
421
-
422
- divisor *= v;
423
- }
424
-
425
- if (std::abs(term) > 1e-3 * std::abs(i_sum)) {
426
- /* Didn't converge */
427
- set_error("ikv_asymptotic_uniform", SF_ERROR_NO_RESULT, NULL);
428
- }
429
- if (std::abs(term) > MACHEP * std::abs(i_sum)) {
430
- /* Some precision lost */
431
- set_error("ikv_asymptotic_uniform", SF_ERROR_LOSS, NULL);
432
- }
433
-
434
- if (k_value != NULL) {
435
- /* symmetric in v */
436
- *k_value = k_prefactor * k_sum;
437
- }
438
-
439
- if (i_value != NULL) {
440
- if (sign == 1) {
441
- *i_value = i_prefactor * i_sum;
442
- } else {
443
- /* (AMS 9.6.2) */
444
- *i_value = (i_prefactor * i_sum + (2 / M_PI) * xsf::cephes::sinpi(v) * k_prefactor * k_sum);
445
- }
446
- }
447
- }
448
-
449
- /*
450
- * The following code originates from the Boost C++ library,
451
- * from file `boost/math/special_functions/detail/bessel_ik.hpp`,
452
- * converted from C++ to C.
453
- */
454
-
455
- /*
456
- * Modified Bessel functions of the first and second kind of fractional order
457
- *
458
- * Calculate K(v, x) and K(v+1, x) by method analogous to
459
- * Temme, Journal of Computational Physics, vol 21, 343 (1976)
460
- */
461
- XSF_HOST_DEVICE inline int temme_ik_series(double v, double x, double *K, double *K1) {
462
- double f, h, p, q, coef, sum, sum1, tolerance;
463
- double a, b, c, d, sigma, gamma1, gamma2;
464
- std::uint64_t k;
465
- double gp;
466
- double gm;
467
-
468
- /*
469
- * |x| <= 2, Temme series converge rapidly
470
- * |x| > 2, the larger the |x|, the slower the convergence
471
- */
472
- XSF_ASSERT(std::abs(x) <= 2);
473
- XSF_ASSERT(std::abs(v) <= 0.5f);
474
-
475
- gp = xsf::cephes::Gamma(v + 1) - 1;
476
- gm = xsf::cephes::Gamma(-v + 1) - 1;
477
-
478
- a = std::log(x / 2);
479
- b = std::exp(v * a);
480
- sigma = -a * v;
481
- c = std::abs(v) < MACHEP ? 1 : xsf::cephes::sinpi(v) / (v * M_PI);
482
- d = std::abs(sigma) < MACHEP ? 1 : std::sinh(sigma) / sigma;
483
- gamma1 = std::abs(v) < MACHEP ? -SCIPY_EULER : (0.5 / v) * (gp - gm) * c;
484
- gamma2 = (2 + gp + gm) * c / 2;
485
-
486
- /* initial values */
487
- p = (gp + 1) / (2 * b);
488
- q = (1 + gm) * b / 2;
489
- f = (std::cosh(sigma) * gamma1 + d * (-a) * gamma2) / c;
490
- h = p;
491
- coef = 1;
492
- sum = coef * f;
493
- sum1 = coef * h;
494
-
495
- /* series summation */
496
- tolerance = MACHEP;
497
- for (k = 1; k < MAXITER; k++) {
498
- f = (k * f + p + q) / (k * k - v * v);
499
- p /= k - v;
500
- q /= k + v;
501
- h = p - k * f;
502
- coef *= x * x / (4 * k);
503
- sum += coef * f;
504
- sum1 += coef * h;
505
- if (std::abs(coef * f) < std::abs(sum) * tolerance) {
506
- break;
507
- }
508
- }
509
- if (k == MAXITER) {
510
- set_error("ikv_temme(temme_ik_series)", SF_ERROR_NO_RESULT, NULL);
511
- }
512
-
513
- *K = sum;
514
- *K1 = 2 * sum1 / x;
515
-
516
- return 0;
517
- }
518
-
519
- /* Evaluate continued fraction fv = I_(v+1) / I_v, derived from
520
- * Abramowitz and Stegun, Handbook of Mathematical Functions, 1972, 9.1.73 */
521
- XSF_HOST_DEVICE inline int CF1_ik(double v, double x, double *fv) {
522
- double C, D, f, a, b, delta, tiny, tolerance;
523
- std::uint64_t k;
524
-
525
- /*
526
- * |x| <= |v|, CF1_ik converges rapidly
527
- * |x| > |v|, CF1_ik needs O(|x|) iterations to converge
528
- */
529
-
530
- /*
531
- * modified Lentz's method, see
532
- * Lentz, Applied Optics, vol 15, 668 (1976)
533
- */
534
- tolerance = 2 * MACHEP;
535
- tiny = 1 / std::sqrt(std::numeric_limits<double>::max());
536
- C = f = tiny; /* b0 = 0, replace with tiny */
537
- D = 0;
538
- for (k = 1; k < MAXITER; k++) {
539
- a = 1;
540
- b = 2 * (v + k) / x;
541
- C = b + a / C;
542
- D = b + a * D;
543
- if (C == 0) {
544
- C = tiny;
545
- }
546
- if (D == 0) {
547
- D = tiny;
548
- }
549
- D = 1 / D;
550
- delta = C * D;
551
- f *= delta;
552
- if (std::abs(delta - 1) <= tolerance) {
553
- break;
554
- }
555
- }
556
- if (k == MAXITER) {
557
- set_error("ikv_temme(CF1_ik)", SF_ERROR_NO_RESULT, NULL);
558
- }
559
-
560
- *fv = f;
561
-
562
- return 0;
563
- }
564
-
565
- /*
566
- * Calculate K(v, x) and K(v+1, x) by evaluating continued fraction
567
- * z1 / z0 = U(v+1.5, 2v+1, 2x) / U(v+0.5, 2v+1, 2x), see
568
- * Thompson and Barnett, Computer Physics Communications, vol 47, 245 (1987)
569
- */
570
- XSF_HOST_DEVICE inline int CF2_ik(double v, double x, double *Kv, double *Kv1) {
571
-
572
- double S, C, Q, D, f, a, b, q, delta, tolerance, current, prev;
573
- std::uint64_t k;
574
-
575
- /*
576
- * |x| >= |v|, CF2_ik converges rapidly
577
- * |x| -> 0, CF2_ik fails to converge
578
- */
579
-
580
- XSF_ASSERT(std::abs(x) > 1);
581
-
582
- /*
583
- * Steed's algorithm, see Thompson and Barnett,
584
- * Journal of Computational Physics, vol 64, 490 (1986)
585
- */
586
- tolerance = MACHEP;
587
- a = v * v - 0.25;
588
- b = 2 * (x + 1); /* b1 */
589
- D = 1 / b; /* D1 = 1 / b1 */
590
- f = delta = D; /* f1 = delta1 = D1, coincidence */
591
- prev = 0; /* q0 */
592
- current = 1; /* q1 */
593
- Q = C = -a; /* Q1 = C1 because q1 = 1 */
594
- S = 1 + Q * delta; /* S1 */
595
- for (k = 2; k < MAXITER; k++) { /* starting from 2 */
596
- /* continued fraction f = z1 / z0 */
597
- a -= 2 * (k - 1);
598
- b += 2;
599
- D = 1 / (b + a * D);
600
- delta *= b * D - 1;
601
- f += delta;
602
-
603
- /* series summation S = 1 + \sum_{n=1}^{\infty} C_n * z_n / z_0 */
604
- q = (prev - (b - 2) * current) / a;
605
- prev = current;
606
- current = q; /* forward recurrence for q */
607
- C *= -a / k;
608
- Q += C * q;
609
- S += Q * delta;
610
-
611
- /* S converges slower than f */
612
- if (std::abs(Q * delta) < std::abs(S) * tolerance) {
613
- break;
614
- }
615
- }
616
- if (k == MAXITER) {
617
- set_error("ikv_temme(CF2_ik)", SF_ERROR_NO_RESULT, NULL);
618
- }
619
-
620
- *Kv = std::sqrt(M_PI / (2 * x)) * std::exp(-x) / S;
621
- *Kv1 = *Kv * (0.5 + v + x + (v * v - 0.25) * f) / x;
622
-
623
- return 0;
624
- }
625
-
626
- /* Flags for what to compute */
627
- enum { ikv_temme_need_i = 0x1, ikv_temme_need_k = 0x2 };
628
-
629
- /*
630
- * Compute I(v, x) and K(v, x) simultaneously by Temme's method, see
631
- * Temme, Journal of Computational Physics, vol 19, 324 (1975)
632
- */
633
- XSF_HOST_DEVICE inline void ikv_temme(double v, double x, double *Iv_p, double *Kv_p) {
634
- /* Kv1 = K_(v+1), fv = I_(v+1) / I_v */
635
- /* Ku1 = K_(u+1), fu = I_(u+1) / I_u */
636
- double u, Iv, Kv, Kv1, Ku, Ku1, fv;
637
- double W, current, prev, next;
638
- int reflect = 0;
639
- unsigned n, k;
640
- int kind;
641
-
642
- kind = 0;
643
- if (Iv_p != NULL) {
644
- kind |= ikv_temme_need_i;
645
- }
646
- if (Kv_p != NULL) {
647
- kind |= ikv_temme_need_k;
648
- }
649
-
650
- if (v < 0) {
651
- reflect = 1;
652
- v = -v; /* v is non-negative from here */
653
- kind |= ikv_temme_need_k;
654
- }
655
- n = std::round(v);
656
- u = v - n; /* -1/2 <= u < 1/2 */
657
-
658
- if (x < 0) {
659
- if (Iv_p != NULL)
660
- *Iv_p = std::numeric_limits<double>::quiet_NaN();
661
- if (Kv_p != NULL)
662
- *Kv_p = std::numeric_limits<double>::quiet_NaN();
663
- set_error("ikv_temme", SF_ERROR_DOMAIN, NULL);
664
- return;
665
- }
666
- if (x == 0) {
667
- Iv = (v == 0) ? 1 : 0;
668
- if (kind & ikv_temme_need_k) {
669
- set_error("ikv_temme", SF_ERROR_OVERFLOW, NULL);
670
- Kv = std::numeric_limits<double>::infinity();
671
- } else {
672
- Kv = std::numeric_limits<double>::quiet_NaN(); /* any value will do */
673
- }
674
-
675
- if (reflect && (kind & ikv_temme_need_i)) {
676
- double z = (u + n % 2);
677
-
678
- Iv = xsf::cephes::sinpi(z) == 0 ? Iv : std::numeric_limits<double>::infinity();
679
- if (std::isinf(Iv)) {
680
- set_error("ikv_temme", SF_ERROR_OVERFLOW, NULL);
681
- }
682
- }
683
-
684
- if (Iv_p != NULL) {
685
- *Iv_p = Iv;
686
- }
687
- if (Kv_p != NULL) {
688
- *Kv_p = Kv;
689
- }
690
- return;
691
- }
692
- /* x is positive until reflection */
693
- W = 1 / x; /* Wronskian */
694
- if (x <= 2) { /* x in (0, 2] */
695
- temme_ik_series(u, x, &Ku, &Ku1); /* Temme series */
696
- } else { /* x in (2, \infty) */
697
- CF2_ik(u, x, &Ku, &Ku1); /* continued fraction CF2_ik */
698
- }
699
- prev = Ku;
700
- current = Ku1;
701
- for (k = 1; k <= n; k++) { /* forward recurrence for K */
702
- next = 2 * (u + k) * current / x + prev;
703
- prev = current;
704
- current = next;
705
- }
706
- Kv = prev;
707
- Kv1 = current;
708
- if (kind & ikv_temme_need_i) {
709
- double lim = (4 * v * v + 10) / (8 * x);
710
-
711
- lim *= lim;
712
- lim *= lim;
713
- lim /= 24;
714
- if ((lim < MACHEP * 10) && (x > 100)) {
715
- /*
716
- * x is huge compared to v, CF1 may be very slow
717
- * to converge so use asymptotic expansion for large
718
- * x case instead. Note that the asymptotic expansion
719
- * isn't very accurate - so it's deliberately very hard
720
- * to get here - probably we're going to overflow:
721
- */
722
- Iv = iv_asymptotic(v, x);
723
- } else {
724
- CF1_ik(v, x, &fv); /* continued fraction CF1_ik */
725
- Iv = W / (Kv * fv + Kv1); /* Wronskian relation */
726
- }
727
- } else {
728
- Iv = std::numeric_limits<double>::quiet_NaN(); /* any value will do */
729
- }
730
-
731
- if (reflect) {
732
- double z = (u + n % 2);
733
-
734
- if (Iv_p != NULL) {
735
- *Iv_p = Iv + (2 / M_PI) * xsf::cephes::sinpi(z) * Kv; /* reflection formula */
736
- }
737
- if (Kv_p != NULL) {
738
- *Kv_p = Kv;
739
- }
740
- } else {
741
- if (Iv_p != NULL) {
742
- *Iv_p = Iv;
743
- }
744
- if (Kv_p != NULL) {
745
- *Kv_p = Kv;
746
- }
747
- }
748
- return;
749
- }
750
-
751
- } // namespace detail
752
-
753
- XSF_HOST_DEVICE inline double iv(double v, double x) {
754
- int sign;
755
- double t, ax, res;
756
-
757
- if (std::isnan(v) || std::isnan(x)) {
758
- return std::numeric_limits<double>::quiet_NaN();
759
- }
760
-
761
- /* If v is a negative integer, invoke symmetry */
762
- t = std::floor(v);
763
- if (v < 0.0) {
764
- if (t == v) {
765
- v = -v; /* symmetry */
766
- t = -t;
767
- }
768
- }
769
- /* If x is negative, require v to be an integer */
770
- sign = 1;
771
- if (x < 0.0) {
772
- if (t != v) {
773
- set_error("iv", SF_ERROR_DOMAIN, NULL);
774
- return (std::numeric_limits<double>::quiet_NaN());
775
- }
776
- if (v != 2.0 * std::floor(v / 2.0)) {
777
- sign = -1;
778
- }
779
- }
780
-
781
- /* Avoid logarithm singularity */
782
- if (x == 0.0) {
783
- if (v == 0.0) {
784
- return 1.0;
785
- }
786
- if (v < 0.0) {
787
- set_error("iv", SF_ERROR_OVERFLOW, NULL);
788
- return std::numeric_limits<double>::infinity();
789
- } else
790
- return 0.0;
791
- }
792
-
793
- ax = std::abs(x);
794
- if (std::abs(v) > 50) {
795
- /*
796
- * Uniform asymptotic expansion for large orders.
797
- *
798
- * This appears to overflow slightly later than the Boost
799
- * implementation of Temme's method.
800
- */
801
- detail::ikv_asymptotic_uniform(v, ax, &res, NULL);
802
- } else {
803
- /* Otherwise: Temme's method */
804
- detail::ikv_temme(v, ax, &res, NULL);
805
- }
806
- res *= sign;
807
- return res;
808
- }
809
-
810
- } // namespace cephes
811
- } // namespace xsf