scipy 1.15.2__cp313-cp313t-musllinux_1_2_aarch64.whl → 1.16.0rc1__cp313-cp313t-musllinux_1_2_aarch64.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 (649) hide show
  1. scipy/__config__.py +10 -10
  2. scipy/__init__.py +3 -6
  3. scipy/_cyutility.cpython-313t-aarch64-linux-musl.so +0 -0
  4. scipy/_lib/_array_api.py +497 -161
  5. scipy/_lib/_array_api_compat_vendor.py +9 -0
  6. scipy/_lib/_bunch.py +4 -0
  7. scipy/_lib/_ccallback_c.cpython-313t-aarch64-linux-musl.so +0 -0
  8. scipy/_lib/_docscrape.py +1 -1
  9. scipy/_lib/_elementwise_iterative_method.py +15 -26
  10. scipy/_lib/_fpumode.cpython-313t-aarch64-linux-musl.so +0 -0
  11. scipy/_lib/_sparse.py +41 -0
  12. scipy/_lib/_test_ccallback.cpython-313t-aarch64-linux-musl.so +0 -0
  13. scipy/_lib/_test_deprecation_call.cpython-313t-aarch64-linux-musl.so +0 -0
  14. scipy/_lib/_test_deprecation_def.cpython-313t-aarch64-linux-musl.so +0 -0
  15. scipy/_lib/_testutils.py +6 -2
  16. scipy/_lib/_uarray/_uarray.cpython-313t-aarch64-linux-musl.so +0 -0
  17. scipy/_lib/_util.py +222 -125
  18. scipy/_lib/array_api_compat/__init__.py +4 -4
  19. scipy/_lib/array_api_compat/_internal.py +19 -6
  20. scipy/_lib/array_api_compat/common/__init__.py +1 -1
  21. scipy/_lib/array_api_compat/common/_aliases.py +365 -193
  22. scipy/_lib/array_api_compat/common/_fft.py +94 -64
  23. scipy/_lib/array_api_compat/common/_helpers.py +413 -180
  24. scipy/_lib/array_api_compat/common/_linalg.py +116 -40
  25. scipy/_lib/array_api_compat/common/_typing.py +179 -10
  26. scipy/_lib/array_api_compat/cupy/__init__.py +1 -4
  27. scipy/_lib/array_api_compat/cupy/_aliases.py +61 -41
  28. scipy/_lib/array_api_compat/cupy/_info.py +16 -6
  29. scipy/_lib/array_api_compat/cupy/_typing.py +24 -39
  30. scipy/_lib/array_api_compat/dask/array/__init__.py +6 -3
  31. scipy/_lib/array_api_compat/dask/array/_aliases.py +267 -108
  32. scipy/_lib/array_api_compat/dask/array/_info.py +105 -34
  33. scipy/_lib/array_api_compat/dask/array/fft.py +5 -8
  34. scipy/_lib/array_api_compat/dask/array/linalg.py +21 -22
  35. scipy/_lib/array_api_compat/numpy/__init__.py +13 -15
  36. scipy/_lib/array_api_compat/numpy/_aliases.py +98 -49
  37. scipy/_lib/array_api_compat/numpy/_info.py +36 -16
  38. scipy/_lib/array_api_compat/numpy/_typing.py +27 -43
  39. scipy/_lib/array_api_compat/numpy/fft.py +11 -5
  40. scipy/_lib/array_api_compat/numpy/linalg.py +75 -22
  41. scipy/_lib/array_api_compat/torch/__init__.py +3 -5
  42. scipy/_lib/array_api_compat/torch/_aliases.py +262 -159
  43. scipy/_lib/array_api_compat/torch/_info.py +27 -16
  44. scipy/_lib/array_api_compat/torch/_typing.py +3 -0
  45. scipy/_lib/array_api_compat/torch/fft.py +17 -18
  46. scipy/_lib/array_api_compat/torch/linalg.py +16 -16
  47. scipy/_lib/array_api_extra/__init__.py +26 -3
  48. scipy/_lib/array_api_extra/_delegation.py +171 -0
  49. scipy/_lib/array_api_extra/_lib/__init__.py +1 -0
  50. scipy/_lib/array_api_extra/_lib/_at.py +463 -0
  51. scipy/_lib/array_api_extra/_lib/_backends.py +46 -0
  52. scipy/_lib/array_api_extra/_lib/_funcs.py +937 -0
  53. scipy/_lib/array_api_extra/_lib/_lazy.py +357 -0
  54. scipy/_lib/array_api_extra/_lib/_testing.py +278 -0
  55. scipy/_lib/array_api_extra/_lib/_utils/__init__.py +1 -0
  56. scipy/_lib/array_api_extra/_lib/_utils/_compat.py +74 -0
  57. scipy/_lib/array_api_extra/_lib/_utils/_compat.pyi +45 -0
  58. scipy/_lib/array_api_extra/_lib/_utils/_helpers.py +559 -0
  59. scipy/_lib/array_api_extra/_lib/_utils/_typing.py +10 -0
  60. scipy/_lib/array_api_extra/_lib/_utils/_typing.pyi +105 -0
  61. scipy/_lib/array_api_extra/testing.py +359 -0
  62. scipy/_lib/decorator.py +2 -2
  63. scipy/_lib/doccer.py +1 -7
  64. scipy/_lib/messagestream.cpython-313t-aarch64-linux-musl.so +0 -0
  65. scipy/_lib/pyprima/__init__.py +212 -0
  66. scipy/_lib/pyprima/cobyla/__init__.py +0 -0
  67. scipy/_lib/pyprima/cobyla/cobyla.py +559 -0
  68. scipy/_lib/pyprima/cobyla/cobylb.py +714 -0
  69. scipy/_lib/pyprima/cobyla/geometry.py +226 -0
  70. scipy/_lib/pyprima/cobyla/initialize.py +215 -0
  71. scipy/_lib/pyprima/cobyla/trustregion.py +492 -0
  72. scipy/_lib/pyprima/cobyla/update.py +289 -0
  73. scipy/_lib/pyprima/common/__init__.py +0 -0
  74. scipy/_lib/pyprima/common/_bounds.py +34 -0
  75. scipy/_lib/pyprima/common/_linear_constraints.py +46 -0
  76. scipy/_lib/pyprima/common/_nonlinear_constraints.py +54 -0
  77. scipy/_lib/pyprima/common/_project.py +173 -0
  78. scipy/_lib/pyprima/common/checkbreak.py +93 -0
  79. scipy/_lib/pyprima/common/consts.py +47 -0
  80. scipy/_lib/pyprima/common/evaluate.py +99 -0
  81. scipy/_lib/pyprima/common/history.py +38 -0
  82. scipy/_lib/pyprima/common/infos.py +30 -0
  83. scipy/_lib/pyprima/common/linalg.py +435 -0
  84. scipy/_lib/pyprima/common/message.py +290 -0
  85. scipy/_lib/pyprima/common/powalg.py +131 -0
  86. scipy/_lib/pyprima/common/preproc.py +277 -0
  87. scipy/_lib/pyprima/common/present.py +5 -0
  88. scipy/_lib/pyprima/common/ratio.py +54 -0
  89. scipy/_lib/pyprima/common/redrho.py +47 -0
  90. scipy/_lib/pyprima/common/selectx.py +296 -0
  91. scipy/_lib/tests/test__util.py +105 -121
  92. scipy/_lib/tests/test_array_api.py +169 -34
  93. scipy/_lib/tests/test_bunch.py +7 -0
  94. scipy/_lib/tests/test_ccallback.py +2 -10
  95. scipy/_lib/tests/test_public_api.py +13 -0
  96. scipy/cluster/_hierarchy.cpython-313t-aarch64-linux-musl.so +0 -0
  97. scipy/cluster/_optimal_leaf_ordering.cpython-313t-aarch64-linux-musl.so +0 -0
  98. scipy/cluster/_vq.cpython-313t-aarch64-linux-musl.so +0 -0
  99. scipy/cluster/hierarchy.py +393 -223
  100. scipy/cluster/tests/test_hierarchy.py +273 -335
  101. scipy/cluster/tests/test_vq.py +45 -61
  102. scipy/cluster/vq.py +39 -35
  103. scipy/conftest.py +263 -157
  104. scipy/constants/_constants.py +4 -1
  105. scipy/constants/tests/test_codata.py +2 -2
  106. scipy/constants/tests/test_constants.py +11 -18
  107. scipy/datasets/_download_all.py +15 -1
  108. scipy/datasets/_fetchers.py +7 -1
  109. scipy/datasets/_utils.py +1 -1
  110. scipy/differentiate/_differentiate.py +25 -25
  111. scipy/differentiate/tests/test_differentiate.py +24 -25
  112. scipy/fft/_basic.py +20 -0
  113. scipy/fft/_helper.py +3 -34
  114. scipy/fft/_pocketfft/helper.py +29 -1
  115. scipy/fft/_pocketfft/pypocketfft.cpython-313t-aarch64-linux-musl.so +0 -0
  116. scipy/fft/_pocketfft/tests/test_basic.py +2 -4
  117. scipy/fft/_pocketfft/tests/test_real_transforms.py +4 -4
  118. scipy/fft/_realtransforms.py +13 -0
  119. scipy/fft/tests/test_basic.py +27 -25
  120. scipy/fft/tests/test_fftlog.py +16 -7
  121. scipy/fft/tests/test_helper.py +18 -34
  122. scipy/fft/tests/test_real_transforms.py +8 -10
  123. scipy/fftpack/convolve.cpython-313t-aarch64-linux-musl.so +0 -0
  124. scipy/fftpack/tests/test_basic.py +2 -4
  125. scipy/fftpack/tests/test_real_transforms.py +8 -9
  126. scipy/integrate/_bvp.py +9 -3
  127. scipy/integrate/_cubature.py +3 -2
  128. scipy/integrate/_dop.cpython-313t-aarch64-linux-musl.so +0 -0
  129. scipy/integrate/_ivp/common.py +3 -3
  130. scipy/integrate/_ivp/ivp.py +9 -2
  131. scipy/integrate/_ivp/tests/test_ivp.py +19 -0
  132. scipy/integrate/_lsoda.cpython-313t-aarch64-linux-musl.so +0 -0
  133. scipy/integrate/_ode.py +9 -2
  134. scipy/integrate/_odepack.cpython-313t-aarch64-linux-musl.so +0 -0
  135. scipy/integrate/_quad_vec.py +21 -29
  136. scipy/integrate/_quadpack.cpython-313t-aarch64-linux-musl.so +0 -0
  137. scipy/integrate/_quadpack_py.py +11 -7
  138. scipy/integrate/_quadrature.py +3 -3
  139. scipy/integrate/_rules/_base.py +2 -2
  140. scipy/integrate/_tanhsinh.py +57 -54
  141. scipy/integrate/_test_multivariate.cpython-313t-aarch64-linux-musl.so +0 -0
  142. scipy/integrate/_test_odeint_banded.cpython-313t-aarch64-linux-musl.so +0 -0
  143. scipy/integrate/_vode.cpython-313t-aarch64-linux-musl.so +0 -0
  144. scipy/integrate/tests/test__quad_vec.py +0 -6
  145. scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
  146. scipy/integrate/tests/test_cubature.py +21 -35
  147. scipy/integrate/tests/test_quadrature.py +6 -8
  148. scipy/integrate/tests/test_tanhsinh.py +61 -43
  149. scipy/interpolate/__init__.py +70 -58
  150. scipy/interpolate/_bary_rational.py +22 -22
  151. scipy/interpolate/_bsplines.py +119 -66
  152. scipy/interpolate/_cubic.py +65 -50
  153. scipy/interpolate/_dfitpack.cpython-313t-aarch64-linux-musl.so +0 -0
  154. scipy/interpolate/_dierckx.cpython-313t-aarch64-linux-musl.so +0 -0
  155. scipy/interpolate/_fitpack.cpython-313t-aarch64-linux-musl.so +0 -0
  156. scipy/interpolate/_fitpack2.py +9 -6
  157. scipy/interpolate/_fitpack_impl.py +32 -26
  158. scipy/interpolate/_fitpack_repro.py +23 -19
  159. scipy/interpolate/_interpnd.cpython-313t-aarch64-linux-musl.so +0 -0
  160. scipy/interpolate/_interpolate.py +30 -12
  161. scipy/interpolate/_ndbspline.py +13 -18
  162. scipy/interpolate/_ndgriddata.py +5 -8
  163. scipy/interpolate/_polyint.py +95 -31
  164. scipy/interpolate/_ppoly.cpython-313t-aarch64-linux-musl.so +0 -0
  165. scipy/interpolate/_rbf.py +2 -2
  166. scipy/interpolate/_rbfinterp.py +1 -1
  167. scipy/interpolate/_rbfinterp_pythran.cpython-313t-aarch64-linux-musl.so +0 -0
  168. scipy/interpolate/_rgi.py +31 -26
  169. scipy/interpolate/_rgi_cython.cpython-313t-aarch64-linux-musl.so +0 -0
  170. scipy/interpolate/dfitpack.py +0 -20
  171. scipy/interpolate/interpnd.py +1 -2
  172. scipy/interpolate/tests/test_bary_rational.py +2 -2
  173. scipy/interpolate/tests/test_bsplines.py +97 -1
  174. scipy/interpolate/tests/test_fitpack2.py +39 -1
  175. scipy/interpolate/tests/test_interpnd.py +32 -20
  176. scipy/interpolate/tests/test_interpolate.py +48 -4
  177. scipy/interpolate/tests/test_rgi.py +2 -1
  178. scipy/io/_fast_matrix_market/__init__.py +2 -0
  179. scipy/io/_fast_matrix_market/_fmm_core.cpython-313t-aarch64-linux-musl.so +0 -0
  180. scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
  181. scipy/io/_harwell_boeing/hb.py +7 -11
  182. scipy/io/_idl.py +5 -7
  183. scipy/io/_netcdf.py +15 -5
  184. scipy/io/_test_fortran.cpython-313t-aarch64-linux-musl.so +0 -0
  185. scipy/io/arff/tests/test_arffread.py +3 -3
  186. scipy/io/matlab/__init__.py +5 -3
  187. scipy/io/matlab/_mio.py +4 -1
  188. scipy/io/matlab/_mio5.py +19 -13
  189. scipy/io/matlab/_mio5_utils.cpython-313t-aarch64-linux-musl.so +0 -0
  190. scipy/io/matlab/_mio_utils.cpython-313t-aarch64-linux-musl.so +0 -0
  191. scipy/io/matlab/_miobase.py +4 -1
  192. scipy/io/matlab/_streams.cpython-313t-aarch64-linux-musl.so +0 -0
  193. scipy/io/matlab/tests/test_mio.py +46 -18
  194. scipy/io/matlab/tests/test_mio_funcs.py +1 -1
  195. scipy/io/tests/test_mmio.py +7 -1
  196. scipy/io/tests/test_wavfile.py +41 -0
  197. scipy/io/wavfile.py +57 -10
  198. scipy/linalg/_basic.py +113 -86
  199. scipy/linalg/_cythonized_array_utils.cpython-313t-aarch64-linux-musl.so +0 -0
  200. scipy/linalg/_decomp.py +22 -9
  201. scipy/linalg/_decomp_cholesky.py +28 -13
  202. scipy/linalg/_decomp_cossin.py +45 -30
  203. scipy/linalg/_decomp_interpolative.cpython-313t-aarch64-linux-musl.so +0 -0
  204. scipy/linalg/_decomp_ldl.py +4 -1
  205. scipy/linalg/_decomp_lu.py +18 -6
  206. scipy/linalg/_decomp_lu_cython.cpython-313t-aarch64-linux-musl.so +0 -0
  207. scipy/linalg/_decomp_polar.py +2 -0
  208. scipy/linalg/_decomp_qr.py +6 -2
  209. scipy/linalg/_decomp_qz.py +3 -0
  210. scipy/linalg/_decomp_schur.py +3 -1
  211. scipy/linalg/_decomp_svd.py +13 -2
  212. scipy/linalg/_decomp_update.cpython-313t-aarch64-linux-musl.so +0 -0
  213. scipy/linalg/_expm_frechet.py +4 -0
  214. scipy/linalg/_fblas.cpython-313t-aarch64-linux-musl.so +0 -0
  215. scipy/linalg/_flapack.cpython-313t-aarch64-linux-musl.so +0 -0
  216. scipy/linalg/_linalg_pythran.cpython-313t-aarch64-linux-musl.so +0 -0
  217. scipy/linalg/_matfuncs.py +187 -4
  218. scipy/linalg/_matfuncs_expm.cpython-313t-aarch64-linux-musl.so +0 -0
  219. scipy/linalg/_matfuncs_schur_sqrtm.cpython-313t-aarch64-linux-musl.so +0 -0
  220. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  221. scipy/linalg/_matfuncs_sqrtm_triu.cpython-313t-aarch64-linux-musl.so +0 -0
  222. scipy/linalg/_procrustes.py +2 -0
  223. scipy/linalg/_sketches.py +17 -6
  224. scipy/linalg/_solve_toeplitz.cpython-313t-aarch64-linux-musl.so +0 -0
  225. scipy/linalg/_solvers.py +7 -2
  226. scipy/linalg/_special_matrices.py +26 -36
  227. scipy/linalg/cython_blas.cpython-313t-aarch64-linux-musl.so +0 -0
  228. scipy/linalg/cython_lapack.cpython-313t-aarch64-linux-musl.so +0 -0
  229. scipy/linalg/lapack.py +22 -2
  230. scipy/linalg/tests/_cython_examples/meson.build +7 -0
  231. scipy/linalg/tests/test_basic.py +31 -16
  232. scipy/linalg/tests/test_batch.py +588 -0
  233. scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
  234. scipy/linalg/tests/test_decomp.py +40 -3
  235. scipy/linalg/tests/test_decomp_cossin.py +14 -0
  236. scipy/linalg/tests/test_decomp_ldl.py +1 -1
  237. scipy/linalg/tests/test_interpolative.py +17 -0
  238. scipy/linalg/tests/test_lapack.py +115 -7
  239. scipy/linalg/tests/test_matfuncs.py +157 -102
  240. scipy/linalg/tests/test_procrustes.py +0 -7
  241. scipy/linalg/tests/test_solve_toeplitz.py +1 -1
  242. scipy/linalg/tests/test_special_matrices.py +1 -5
  243. scipy/ndimage/__init__.py +1 -0
  244. scipy/ndimage/_ctest.cpython-313t-aarch64-linux-musl.so +0 -0
  245. scipy/ndimage/_cytest.cpython-313t-aarch64-linux-musl.so +0 -0
  246. scipy/ndimage/_delegators.py +8 -2
  247. scipy/ndimage/_filters.py +433 -5
  248. scipy/ndimage/_interpolation.py +36 -6
  249. scipy/ndimage/_measurements.py +4 -2
  250. scipy/ndimage/_morphology.py +5 -0
  251. scipy/ndimage/_nd_image.cpython-313t-aarch64-linux-musl.so +0 -0
  252. scipy/ndimage/_ndimage_api.py +2 -1
  253. scipy/ndimage/_ni_docstrings.py +5 -1
  254. scipy/ndimage/_ni_label.cpython-313t-aarch64-linux-musl.so +0 -0
  255. scipy/ndimage/_ni_support.py +1 -5
  256. scipy/ndimage/_rank_filter_1d.cpython-313t-aarch64-linux-musl.so +0 -0
  257. scipy/ndimage/_support_alternative_backends.py +18 -6
  258. scipy/ndimage/tests/test_filters.py +351 -259
  259. scipy/ndimage/tests/test_fourier.py +7 -9
  260. scipy/ndimage/tests/test_interpolation.py +68 -61
  261. scipy/ndimage/tests/test_measurements.py +18 -35
  262. scipy/ndimage/tests/test_morphology.py +143 -131
  263. scipy/ndimage/tests/test_splines.py +1 -3
  264. scipy/odr/__odrpack.cpython-313t-aarch64-linux-musl.so +0 -0
  265. scipy/optimize/_basinhopping.py +13 -7
  266. scipy/optimize/_bglu_dense.cpython-313t-aarch64-linux-musl.so +0 -0
  267. scipy/optimize/_bracket.py +46 -26
  268. scipy/optimize/_chandrupatla.py +9 -10
  269. scipy/optimize/_cobyla_py.py +104 -123
  270. scipy/optimize/_constraints.py +14 -10
  271. scipy/optimize/_differentiable_functions.py +371 -230
  272. scipy/optimize/_differentialevolution.py +4 -3
  273. scipy/optimize/_direct.cpython-313t-aarch64-linux-musl.so +0 -0
  274. scipy/optimize/_dual_annealing.py +1 -1
  275. scipy/optimize/_elementwise.py +1 -4
  276. scipy/optimize/_group_columns.cpython-313t-aarch64-linux-musl.so +0 -0
  277. scipy/optimize/_highspy/_core.cpython-313t-aarch64-linux-musl.so +0 -0
  278. scipy/optimize/_highspy/_highs_options.cpython-313t-aarch64-linux-musl.so +0 -0
  279. scipy/optimize/_highspy/_highs_wrapper.py +6 -4
  280. scipy/optimize/_lbfgsb.cpython-313t-aarch64-linux-musl.so +0 -0
  281. scipy/optimize/_lbfgsb_py.py +57 -16
  282. scipy/optimize/_linprog_doc.py +2 -2
  283. scipy/optimize/_linprog_highs.py +11 -11
  284. scipy/optimize/_linprog_ip.py +25 -10
  285. scipy/optimize/_linprog_util.py +18 -19
  286. scipy/optimize/_lsap.cpython-313t-aarch64-linux-musl.so +0 -0
  287. scipy/optimize/_lsq/common.py +3 -3
  288. scipy/optimize/_lsq/dogbox.py +16 -2
  289. scipy/optimize/_lsq/givens_elimination.cpython-313t-aarch64-linux-musl.so +0 -0
  290. scipy/optimize/_lsq/least_squares.py +198 -126
  291. scipy/optimize/_lsq/lsq_linear.py +6 -6
  292. scipy/optimize/_lsq/trf.py +35 -8
  293. scipy/optimize/_milp.py +3 -1
  294. scipy/optimize/_minimize.py +105 -36
  295. scipy/optimize/_minpack.cpython-313t-aarch64-linux-musl.so +0 -0
  296. scipy/optimize/_minpack_py.py +21 -14
  297. scipy/optimize/_moduleTNC.cpython-313t-aarch64-linux-musl.so +0 -0
  298. scipy/optimize/_nnls.py +20 -21
  299. scipy/optimize/_nonlin.py +34 -3
  300. scipy/optimize/_numdiff.py +288 -110
  301. scipy/optimize/_optimize.py +86 -48
  302. scipy/optimize/_pava_pybind.cpython-313t-aarch64-linux-musl.so +0 -0
  303. scipy/optimize/_remove_redundancy.py +5 -5
  304. scipy/optimize/_root_scalar.py +1 -1
  305. scipy/optimize/_shgo.py +6 -0
  306. scipy/optimize/_shgo_lib/_complex.py +1 -1
  307. scipy/optimize/_slsqp_py.py +216 -124
  308. scipy/optimize/_slsqplib.cpython-313t-aarch64-linux-musl.so +0 -0
  309. scipy/optimize/_spectral.py +1 -1
  310. scipy/optimize/_tnc.py +8 -1
  311. scipy/optimize/_trlib/_trlib.cpython-313t-aarch64-linux-musl.so +0 -0
  312. scipy/optimize/_trustregion.py +20 -6
  313. scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
  314. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
  315. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
  316. scipy/optimize/_trustregion_constr/projections.py +12 -8
  317. scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
  318. scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
  319. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
  320. scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
  321. scipy/optimize/_trustregion_exact.py +0 -1
  322. scipy/optimize/_zeros.cpython-313t-aarch64-linux-musl.so +0 -0
  323. scipy/optimize/_zeros_py.py +97 -17
  324. scipy/optimize/cython_optimize/_zeros.cpython-313t-aarch64-linux-musl.so +0 -0
  325. scipy/optimize/slsqp.py +0 -1
  326. scipy/optimize/tests/test__basinhopping.py +1 -1
  327. scipy/optimize/tests/test__differential_evolution.py +4 -4
  328. scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
  329. scipy/optimize/tests/test__numdiff.py +66 -22
  330. scipy/optimize/tests/test__remove_redundancy.py +2 -2
  331. scipy/optimize/tests/test__shgo.py +9 -1
  332. scipy/optimize/tests/test_bracket.py +71 -46
  333. scipy/optimize/tests/test_chandrupatla.py +133 -135
  334. scipy/optimize/tests/test_cobyla.py +74 -45
  335. scipy/optimize/tests/test_constraints.py +1 -1
  336. scipy/optimize/tests/test_differentiable_functions.py +226 -6
  337. scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
  338. scipy/optimize/tests/test_least_squares.py +125 -13
  339. scipy/optimize/tests/test_linear_assignment.py +3 -3
  340. scipy/optimize/tests/test_linprog.py +3 -3
  341. scipy/optimize/tests/test_lsq_linear.py +5 -5
  342. scipy/optimize/tests/test_minimize_constrained.py +2 -2
  343. scipy/optimize/tests/test_minpack.py +4 -4
  344. scipy/optimize/tests/test_nnls.py +43 -3
  345. scipy/optimize/tests/test_nonlin.py +36 -0
  346. scipy/optimize/tests/test_optimize.py +95 -17
  347. scipy/optimize/tests/test_slsqp.py +36 -4
  348. scipy/optimize/tests/test_zeros.py +34 -1
  349. scipy/signal/__init__.py +12 -23
  350. scipy/signal/_delegators.py +568 -0
  351. scipy/signal/_filter_design.py +459 -241
  352. scipy/signal/_fir_filter_design.py +262 -90
  353. scipy/signal/_lti_conversion.py +3 -2
  354. scipy/signal/_ltisys.py +118 -91
  355. scipy/signal/_max_len_seq_inner.cpython-313t-aarch64-linux-musl.so +0 -0
  356. scipy/signal/_peak_finding_utils.cpython-313t-aarch64-linux-musl.so +0 -0
  357. scipy/signal/_polyutils.py +172 -0
  358. scipy/signal/_short_time_fft.py +553 -76
  359. scipy/signal/_signal_api.py +30 -0
  360. scipy/signal/_signaltools.py +719 -396
  361. scipy/signal/_sigtools.cpython-313t-aarch64-linux-musl.so +0 -0
  362. scipy/signal/_sosfilt.cpython-313t-aarch64-linux-musl.so +0 -0
  363. scipy/signal/_spectral_py.py +221 -50
  364. scipy/signal/_spline.cpython-313t-aarch64-linux-musl.so +0 -0
  365. scipy/signal/_spline_filters.py +108 -68
  366. scipy/signal/_support_alternative_backends.py +73 -0
  367. scipy/signal/_upfirdn.py +4 -1
  368. scipy/signal/_upfirdn_apply.cpython-313t-aarch64-linux-musl.so +0 -0
  369. scipy/signal/_waveforms.py +2 -11
  370. scipy/signal/_wavelets.py +1 -1
  371. scipy/signal/fir_filter_design.py +1 -0
  372. scipy/signal/spline.py +4 -11
  373. scipy/signal/tests/_scipy_spectral_test_shim.py +5 -182
  374. scipy/signal/tests/test_bsplines.py +114 -79
  375. scipy/signal/tests/test_cont2discrete.py +9 -2
  376. scipy/signal/tests/test_filter_design.py +721 -481
  377. scipy/signal/tests/test_fir_filter_design.py +332 -140
  378. scipy/signal/tests/test_savitzky_golay.py +4 -3
  379. scipy/signal/tests/test_short_time_fft.py +231 -5
  380. scipy/signal/tests/test_signaltools.py +2149 -1348
  381. scipy/signal/tests/test_spectral.py +19 -6
  382. scipy/signal/tests/test_splines.py +161 -96
  383. scipy/signal/tests/test_upfirdn.py +84 -50
  384. scipy/signal/tests/test_waveforms.py +20 -0
  385. scipy/signal/tests/test_windows.py +607 -466
  386. scipy/signal/windows/_windows.py +287 -148
  387. scipy/sparse/__init__.py +23 -4
  388. scipy/sparse/_base.py +269 -120
  389. scipy/sparse/_bsr.py +7 -4
  390. scipy/sparse/_compressed.py +59 -234
  391. scipy/sparse/_construct.py +90 -38
  392. scipy/sparse/_coo.py +115 -181
  393. scipy/sparse/_csc.py +4 -4
  394. scipy/sparse/_csparsetools.cpython-313t-aarch64-linux-musl.so +0 -0
  395. scipy/sparse/_csr.py +2 -2
  396. scipy/sparse/_data.py +48 -48
  397. scipy/sparse/_dia.py +105 -21
  398. scipy/sparse/_dok.py +0 -23
  399. scipy/sparse/_index.py +4 -4
  400. scipy/sparse/_matrix.py +23 -0
  401. scipy/sparse/_sparsetools.cpython-313t-aarch64-linux-musl.so +0 -0
  402. scipy/sparse/_sputils.py +37 -22
  403. scipy/sparse/base.py +0 -9
  404. scipy/sparse/bsr.py +0 -14
  405. scipy/sparse/compressed.py +0 -23
  406. scipy/sparse/construct.py +0 -6
  407. scipy/sparse/coo.py +0 -14
  408. scipy/sparse/csc.py +0 -3
  409. scipy/sparse/csgraph/_flow.cpython-313t-aarch64-linux-musl.so +0 -0
  410. scipy/sparse/csgraph/_matching.cpython-313t-aarch64-linux-musl.so +0 -0
  411. scipy/sparse/csgraph/_min_spanning_tree.cpython-313t-aarch64-linux-musl.so +0 -0
  412. scipy/sparse/csgraph/_reordering.cpython-313t-aarch64-linux-musl.so +0 -0
  413. scipy/sparse/csgraph/_shortest_path.cpython-313t-aarch64-linux-musl.so +0 -0
  414. scipy/sparse/csgraph/_tools.cpython-313t-aarch64-linux-musl.so +0 -0
  415. scipy/sparse/csgraph/_traversal.cpython-313t-aarch64-linux-musl.so +0 -0
  416. scipy/sparse/csgraph/tests/test_matching.py +14 -2
  417. scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
  418. scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
  419. scipy/sparse/csr.py +0 -5
  420. scipy/sparse/data.py +1 -6
  421. scipy/sparse/dia.py +0 -7
  422. scipy/sparse/dok.py +0 -10
  423. scipy/sparse/linalg/_dsolve/_superlu.cpython-313t-aarch64-linux-musl.so +0 -0
  424. scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
  425. scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
  426. scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-313t-aarch64-linux-musl.so +0 -0
  427. scipy/sparse/linalg/_eigen/arpack/arpack.py +28 -20
  428. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
  429. scipy/sparse/linalg/_expm_multiply.py +8 -3
  430. scipy/sparse/linalg/_interface.py +29 -26
  431. scipy/sparse/linalg/_isolve/_gcrotmk.py +6 -5
  432. scipy/sparse/linalg/_isolve/iterative.py +51 -45
  433. scipy/sparse/linalg/_isolve/lgmres.py +6 -6
  434. scipy/sparse/linalg/_isolve/minres.py +5 -5
  435. scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
  436. scipy/sparse/linalg/_isolve/utils.py +2 -8
  437. scipy/sparse/linalg/_matfuncs.py +1 -1
  438. scipy/sparse/linalg/_norm.py +1 -1
  439. scipy/sparse/linalg/_propack/_cpropack.cpython-313t-aarch64-linux-musl.so +0 -0
  440. scipy/sparse/linalg/_propack/_dpropack.cpython-313t-aarch64-linux-musl.so +0 -0
  441. scipy/sparse/linalg/_propack/_spropack.cpython-313t-aarch64-linux-musl.so +0 -0
  442. scipy/sparse/linalg/_propack/_zpropack.cpython-313t-aarch64-linux-musl.so +0 -0
  443. scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
  444. scipy/sparse/linalg/tests/test_expm_multiply.py +10 -0
  445. scipy/sparse/linalg/tests/test_interface.py +35 -0
  446. scipy/sparse/linalg/tests/test_pydata_sparse.py +18 -0
  447. scipy/sparse/tests/test_arithmetic1d.py +5 -2
  448. scipy/sparse/tests/test_base.py +217 -40
  449. scipy/sparse/tests/test_common1d.py +17 -12
  450. scipy/sparse/tests/test_construct.py +1 -1
  451. scipy/sparse/tests/test_coo.py +272 -4
  452. scipy/sparse/tests/test_sparsetools.py +5 -0
  453. scipy/sparse/tests/test_sputils.py +36 -7
  454. scipy/spatial/_ckdtree.cpython-313t-aarch64-linux-musl.so +0 -0
  455. scipy/spatial/_distance_pybind.cpython-313t-aarch64-linux-musl.so +0 -0
  456. scipy/spatial/_distance_wrap.cpython-313t-aarch64-linux-musl.so +0 -0
  457. scipy/spatial/_hausdorff.cpython-313t-aarch64-linux-musl.so +0 -0
  458. scipy/spatial/_qhull.cpython-313t-aarch64-linux-musl.so +0 -0
  459. scipy/spatial/_voronoi.cpython-313t-aarch64-linux-musl.so +0 -0
  460. scipy/spatial/distance.py +49 -42
  461. scipy/spatial/tests/test_distance.py +3 -1
  462. scipy/spatial/tests/test_kdtree.py +1 -0
  463. scipy/spatial/tests/test_qhull.py +106 -2
  464. scipy/spatial/transform/__init__.py +5 -3
  465. scipy/spatial/transform/_rigid_transform.cpython-313t-aarch64-linux-musl.so +0 -0
  466. scipy/spatial/transform/_rotation.cpython-313t-aarch64-linux-musl.so +0 -0
  467. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  468. scipy/spatial/transform/tests/test_rotation.py +1342 -790
  469. scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
  470. scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
  471. scipy/special/__init__.py +1 -47
  472. scipy/special/_add_newdocs.py +34 -772
  473. scipy/special/_basic.py +22 -25
  474. scipy/special/_comb.cpython-313t-aarch64-linux-musl.so +0 -0
  475. scipy/special/_ellip_harm_2.cpython-313t-aarch64-linux-musl.so +0 -0
  476. scipy/special/_gufuncs.cpython-313t-aarch64-linux-musl.so +0 -0
  477. scipy/special/_logsumexp.py +83 -69
  478. scipy/special/_orthogonal.pyi +1 -1
  479. scipy/special/_specfun.cpython-313t-aarch64-linux-musl.so +0 -0
  480. scipy/special/_special_ufuncs.cpython-313t-aarch64-linux-musl.so +0 -0
  481. scipy/special/_spherical_bessel.py +4 -4
  482. scipy/special/_support_alternative_backends.py +212 -119
  483. scipy/special/_test_internal.cpython-313t-aarch64-linux-musl.so +0 -0
  484. scipy/special/_testutils.py +4 -4
  485. scipy/special/_ufuncs.cpython-313t-aarch64-linux-musl.so +0 -0
  486. scipy/special/_ufuncs.pyi +1 -0
  487. scipy/special/_ufuncs.pyx +215 -1400
  488. scipy/special/_ufuncs_cxx.cpython-313t-aarch64-linux-musl.so +0 -0
  489. scipy/special/_ufuncs_cxx.pxd +2 -15
  490. scipy/special/_ufuncs_cxx.pyx +5 -44
  491. scipy/special/_ufuncs_cxx_defs.h +2 -16
  492. scipy/special/_ufuncs_defs.h +0 -8
  493. scipy/special/cython_special.cpython-313t-aarch64-linux-musl.so +0 -0
  494. scipy/special/cython_special.pxd +1 -1
  495. scipy/special/tests/_cython_examples/meson.build +10 -1
  496. scipy/special/tests/test_basic.py +153 -20
  497. scipy/special/tests/test_boost_ufuncs.py +3 -0
  498. scipy/special/tests/test_cdflib.py +35 -11
  499. scipy/special/tests/test_gammainc.py +16 -0
  500. scipy/special/tests/test_hyp2f1.py +23 -2
  501. scipy/special/tests/test_log1mexp.py +85 -0
  502. scipy/special/tests/test_logsumexp.py +220 -64
  503. scipy/special/tests/test_mpmath.py +1 -0
  504. scipy/special/tests/test_nan_inputs.py +1 -1
  505. scipy/special/tests/test_orthogonal.py +17 -18
  506. scipy/special/tests/test_sf_error.py +3 -2
  507. scipy/special/tests/test_sph_harm.py +6 -7
  508. scipy/special/tests/test_support_alternative_backends.py +211 -76
  509. scipy/stats/__init__.py +4 -1
  510. scipy/stats/_ansari_swilk_statistics.cpython-313t-aarch64-linux-musl.so +0 -0
  511. scipy/stats/_axis_nan_policy.py +4 -3
  512. scipy/stats/_biasedurn.cpython-313t-aarch64-linux-musl.so +0 -0
  513. scipy/stats/_continued_fraction.py +387 -0
  514. scipy/stats/_continuous_distns.py +296 -319
  515. scipy/stats/_covariance.py +6 -3
  516. scipy/stats/_discrete_distns.py +39 -32
  517. scipy/stats/_distn_infrastructure.py +39 -12
  518. scipy/stats/_distribution_infrastructure.py +900 -238
  519. scipy/stats/_entropy.py +7 -8
  520. scipy/{_lib → stats}/_finite_differences.py +1 -1
  521. scipy/stats/_hypotests.py +82 -49
  522. scipy/stats/_kde.py +53 -49
  523. scipy/stats/_ksstats.py +1 -1
  524. scipy/stats/_levy_stable/__init__.py +7 -15
  525. scipy/stats/_levy_stable/levyst.cpython-313t-aarch64-linux-musl.so +0 -0
  526. scipy/stats/_morestats.py +112 -67
  527. scipy/stats/_mstats_basic.py +13 -17
  528. scipy/stats/_mstats_extras.py +8 -8
  529. scipy/stats/_multivariate.py +89 -113
  530. scipy/stats/_new_distributions.py +97 -20
  531. scipy/stats/_page_trend_test.py +12 -5
  532. scipy/stats/_probability_distribution.py +265 -43
  533. scipy/stats/_qmc.py +14 -9
  534. scipy/stats/_qmc_cy.cpython-313t-aarch64-linux-musl.so +0 -0
  535. scipy/stats/_qmvnt.py +16 -95
  536. scipy/stats/_qmvnt_cy.cpython-313t-aarch64-linux-musl.so +0 -0
  537. scipy/stats/_quantile.py +335 -0
  538. scipy/stats/_rcont/rcont.cpython-313t-aarch64-linux-musl.so +0 -0
  539. scipy/stats/_resampling.py +4 -29
  540. scipy/stats/_sampling.py +1 -1
  541. scipy/stats/_sobol.cpython-313t-aarch64-linux-musl.so +0 -0
  542. scipy/stats/_stats.cpython-313t-aarch64-linux-musl.so +0 -0
  543. scipy/stats/_stats_mstats_common.py +19 -2
  544. scipy/stats/_stats_py.py +534 -460
  545. scipy/stats/_stats_pythran.cpython-313t-aarch64-linux-musl.so +0 -0
  546. scipy/stats/_unuran/unuran_wrapper.cpython-313t-aarch64-linux-musl.so +0 -0
  547. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  548. scipy/stats/_variation.py +5 -7
  549. scipy/stats/_wilcoxon.py +13 -7
  550. scipy/stats/tests/common_tests.py +6 -4
  551. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  552. scipy/stats/tests/test_continued_fraction.py +173 -0
  553. scipy/stats/tests/test_continuous.py +379 -60
  554. scipy/stats/tests/test_continuous_basic.py +18 -12
  555. scipy/stats/tests/test_discrete_basic.py +14 -8
  556. scipy/stats/tests/test_discrete_distns.py +16 -16
  557. scipy/stats/tests/test_distributions.py +117 -75
  558. scipy/stats/tests/test_entropy.py +40 -48
  559. scipy/stats/tests/test_fit.py +4 -3
  560. scipy/stats/tests/test_hypotests.py +153 -24
  561. scipy/stats/tests/test_kdeoth.py +109 -41
  562. scipy/stats/tests/test_marray.py +289 -0
  563. scipy/stats/tests/test_morestats.py +79 -47
  564. scipy/stats/tests/test_mstats_basic.py +3 -3
  565. scipy/stats/tests/test_multivariate.py +434 -83
  566. scipy/stats/tests/test_qmc.py +13 -10
  567. scipy/stats/tests/test_quantile.py +199 -0
  568. scipy/stats/tests/test_rank.py +119 -112
  569. scipy/stats/tests/test_resampling.py +47 -56
  570. scipy/stats/tests/test_sampling.py +9 -4
  571. scipy/stats/tests/test_stats.py +799 -939
  572. scipy/stats/tests/test_variation.py +8 -6
  573. scipy/version.py +2 -2
  574. {scipy-1.15.2.dist-info → scipy-1.16.0rc1.dist-info}/LICENSE.txt +1 -1
  575. {scipy-1.15.2.dist-info → scipy-1.16.0rc1.dist-info}/METADATA +9 -9
  576. {scipy-1.15.2.dist-info → scipy-1.16.0rc1.dist-info}/RECORD +1316 -1323
  577. scipy.libs/libgcc_s-69c45f16.so.1 +0 -0
  578. scipy.libs/libgfortran-db0b6589.so.5.0.0 +0 -0
  579. scipy.libs/{libstdc++-1b614e01.so.6.0.32 → libstdc++-1f1a71be.so.6.0.33} +0 -0
  580. scipy/_lib/array_api_extra/_funcs.py +0 -484
  581. scipy/_lib/array_api_extra/_typing.py +0 -8
  582. scipy/interpolate/_bspl.cpython-313t-aarch64-linux-musl.so +0 -0
  583. scipy/optimize/_cobyla.cpython-313t-aarch64-linux-musl.so +0 -0
  584. scipy/optimize/_cython_nnls.cpython-313t-aarch64-linux-musl.so +0 -0
  585. scipy/optimize/_slsqp.cpython-313t-aarch64-linux-musl.so +0 -0
  586. scipy/spatial/qhull_src/COPYING.txt +0 -38
  587. scipy/special/libsf_error_state.so +0 -0
  588. scipy/special/tests/test_log_softmax.py +0 -109
  589. scipy/special/tests/test_xsf_cuda.py +0 -114
  590. scipy/special/xsf/binom.h +0 -89
  591. scipy/special/xsf/cdflib.h +0 -100
  592. scipy/special/xsf/cephes/airy.h +0 -307
  593. scipy/special/xsf/cephes/besselpoly.h +0 -51
  594. scipy/special/xsf/cephes/beta.h +0 -257
  595. scipy/special/xsf/cephes/cbrt.h +0 -131
  596. scipy/special/xsf/cephes/chbevl.h +0 -85
  597. scipy/special/xsf/cephes/chdtr.h +0 -193
  598. scipy/special/xsf/cephes/const.h +0 -87
  599. scipy/special/xsf/cephes/ellie.h +0 -293
  600. scipy/special/xsf/cephes/ellik.h +0 -251
  601. scipy/special/xsf/cephes/ellpe.h +0 -107
  602. scipy/special/xsf/cephes/ellpk.h +0 -117
  603. scipy/special/xsf/cephes/expn.h +0 -260
  604. scipy/special/xsf/cephes/gamma.h +0 -398
  605. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  606. scipy/special/xsf/cephes/hyperg.h +0 -361
  607. scipy/special/xsf/cephes/i0.h +0 -149
  608. scipy/special/xsf/cephes/i1.h +0 -158
  609. scipy/special/xsf/cephes/igam.h +0 -421
  610. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  611. scipy/special/xsf/cephes/igami.h +0 -313
  612. scipy/special/xsf/cephes/j0.h +0 -225
  613. scipy/special/xsf/cephes/j1.h +0 -198
  614. scipy/special/xsf/cephes/jv.h +0 -715
  615. scipy/special/xsf/cephes/k0.h +0 -164
  616. scipy/special/xsf/cephes/k1.h +0 -163
  617. scipy/special/xsf/cephes/kn.h +0 -243
  618. scipy/special/xsf/cephes/lanczos.h +0 -112
  619. scipy/special/xsf/cephes/ndtr.h +0 -275
  620. scipy/special/xsf/cephes/poch.h +0 -85
  621. scipy/special/xsf/cephes/polevl.h +0 -167
  622. scipy/special/xsf/cephes/psi.h +0 -194
  623. scipy/special/xsf/cephes/rgamma.h +0 -111
  624. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  625. scipy/special/xsf/cephes/shichi.h +0 -248
  626. scipy/special/xsf/cephes/sici.h +0 -224
  627. scipy/special/xsf/cephes/sindg.h +0 -221
  628. scipy/special/xsf/cephes/tandg.h +0 -139
  629. scipy/special/xsf/cephes/trig.h +0 -58
  630. scipy/special/xsf/cephes/unity.h +0 -186
  631. scipy/special/xsf/cephes/zeta.h +0 -172
  632. scipy/special/xsf/config.h +0 -304
  633. scipy/special/xsf/digamma.h +0 -205
  634. scipy/special/xsf/error.h +0 -57
  635. scipy/special/xsf/evalpoly.h +0 -47
  636. scipy/special/xsf/expint.h +0 -266
  637. scipy/special/xsf/hyp2f1.h +0 -694
  638. scipy/special/xsf/iv_ratio.h +0 -173
  639. scipy/special/xsf/lambertw.h +0 -150
  640. scipy/special/xsf/loggamma.h +0 -163
  641. scipy/special/xsf/sici.h +0 -200
  642. scipy/special/xsf/tools.h +0 -427
  643. scipy/special/xsf/trig.h +0 -164
  644. scipy/special/xsf/wright_bessel.h +0 -843
  645. scipy/special/xsf/zlog1.h +0 -35
  646. scipy/stats/_mvn.cpython-313t-aarch64-linux-musl.so +0 -0
  647. scipy.libs/libgcc_s-7393e603.so.1 +0 -0
  648. scipy.libs/libgfortran-eb933d8e.so.5.0.0 +0 -0
  649. {scipy-1.15.2.dist-info → scipy-1.16.0rc1.dist-info}/WHEEL +0 -0
@@ -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