scipy 1.15.3__cp313-cp313-musllinux_1_2_aarch64.whl → 1.16.0rc2__cp313-cp313-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 (641) hide show
  1. scipy/__config__.py +10 -10
  2. scipy/__init__.py +3 -6
  3. scipy/_cyutility.cpython-313-aarch64-linux-musl.so +0 -0
  4. scipy/_lib/_array_api.py +486 -161
  5. scipy/_lib/_array_api_compat_vendor.py +9 -0
  6. scipy/_lib/_bunch.py +4 -0
  7. scipy/_lib/_ccallback_c.cpython-313-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-313-aarch64-linux-musl.so +0 -0
  11. scipy/_lib/_sparse.py +41 -0
  12. scipy/_lib/_test_ccallback.cpython-313-aarch64-linux-musl.so +0 -0
  13. scipy/_lib/_test_deprecation_call.cpython-313-aarch64-linux-musl.so +0 -0
  14. scipy/_lib/_test_deprecation_def.cpython-313-aarch64-linux-musl.so +0 -0
  15. scipy/_lib/_testutils.py +6 -2
  16. scipy/_lib/_uarray/_uarray.cpython-313-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-313-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 +166 -35
  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-313-aarch64-linux-musl.so +0 -0
  97. scipy/cluster/_optimal_leaf_ordering.cpython-313-aarch64-linux-musl.so +0 -0
  98. scipy/cluster/_vq.cpython-313-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-313-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-313-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-313-aarch64-linux-musl.so +0 -0
  129. scipy/integrate/_lsoda.cpython-313-aarch64-linux-musl.so +0 -0
  130. scipy/integrate/_ode.py +9 -2
  131. scipy/integrate/_odepack.cpython-313-aarch64-linux-musl.so +0 -0
  132. scipy/integrate/_quad_vec.py +21 -29
  133. scipy/integrate/_quadpack.cpython-313-aarch64-linux-musl.so +0 -0
  134. scipy/integrate/_quadpack_py.py +11 -7
  135. scipy/integrate/_quadrature.py +3 -3
  136. scipy/integrate/_rules/_base.py +2 -2
  137. scipy/integrate/_tanhsinh.py +48 -47
  138. scipy/integrate/_test_multivariate.cpython-313-aarch64-linux-musl.so +0 -0
  139. scipy/integrate/_test_odeint_banded.cpython-313-aarch64-linux-musl.so +0 -0
  140. scipy/integrate/_vode.cpython-313-aarch64-linux-musl.so +0 -0
  141. scipy/integrate/tests/test__quad_vec.py +0 -6
  142. scipy/integrate/tests/test_banded_ode_solvers.py +85 -0
  143. scipy/integrate/tests/test_cubature.py +21 -35
  144. scipy/integrate/tests/test_quadrature.py +6 -8
  145. scipy/integrate/tests/test_tanhsinh.py +56 -48
  146. scipy/interpolate/__init__.py +70 -58
  147. scipy/interpolate/_bary_rational.py +22 -22
  148. scipy/interpolate/_bsplines.py +119 -66
  149. scipy/interpolate/_cubic.py +65 -50
  150. scipy/interpolate/_dfitpack.cpython-313-aarch64-linux-musl.so +0 -0
  151. scipy/interpolate/_dierckx.cpython-313-aarch64-linux-musl.so +0 -0
  152. scipy/interpolate/_fitpack.cpython-313-aarch64-linux-musl.so +0 -0
  153. scipy/interpolate/_fitpack2.py +9 -6
  154. scipy/interpolate/_fitpack_impl.py +32 -26
  155. scipy/interpolate/_fitpack_repro.py +23 -19
  156. scipy/interpolate/_interpnd.cpython-313-aarch64-linux-musl.so +0 -0
  157. scipy/interpolate/_interpolate.py +30 -12
  158. scipy/interpolate/_ndbspline.py +13 -18
  159. scipy/interpolate/_ndgriddata.py +5 -8
  160. scipy/interpolate/_polyint.py +95 -31
  161. scipy/interpolate/_ppoly.cpython-313-aarch64-linux-musl.so +0 -0
  162. scipy/interpolate/_rbf.py +2 -2
  163. scipy/interpolate/_rbfinterp.py +1 -1
  164. scipy/interpolate/_rbfinterp_pythran.cpython-313-aarch64-linux-musl.so +0 -0
  165. scipy/interpolate/_rgi.py +31 -26
  166. scipy/interpolate/_rgi_cython.cpython-313-aarch64-linux-musl.so +0 -0
  167. scipy/interpolate/dfitpack.py +0 -20
  168. scipy/interpolate/interpnd.py +1 -2
  169. scipy/interpolate/tests/test_bary_rational.py +2 -2
  170. scipy/interpolate/tests/test_bsplines.py +97 -1
  171. scipy/interpolate/tests/test_fitpack2.py +39 -1
  172. scipy/interpolate/tests/test_interpnd.py +32 -20
  173. scipy/interpolate/tests/test_interpolate.py +48 -4
  174. scipy/interpolate/tests/test_rgi.py +2 -1
  175. scipy/io/_fast_matrix_market/__init__.py +2 -0
  176. scipy/io/_fast_matrix_market/_fmm_core.cpython-313-aarch64-linux-musl.so +0 -0
  177. scipy/io/_harwell_boeing/_fortran_format_parser.py +19 -16
  178. scipy/io/_harwell_boeing/hb.py +7 -11
  179. scipy/io/_idl.py +5 -7
  180. scipy/io/_netcdf.py +15 -5
  181. scipy/io/_test_fortran.cpython-313-aarch64-linux-musl.so +0 -0
  182. scipy/io/arff/tests/test_arffread.py +3 -3
  183. scipy/io/matlab/__init__.py +5 -3
  184. scipy/io/matlab/_mio.py +4 -1
  185. scipy/io/matlab/_mio5.py +19 -13
  186. scipy/io/matlab/_mio5_utils.cpython-313-aarch64-linux-musl.so +0 -0
  187. scipy/io/matlab/_mio_utils.cpython-313-aarch64-linux-musl.so +0 -0
  188. scipy/io/matlab/_miobase.py +4 -1
  189. scipy/io/matlab/_streams.cpython-313-aarch64-linux-musl.so +0 -0
  190. scipy/io/matlab/tests/test_mio.py +46 -18
  191. scipy/io/matlab/tests/test_mio_funcs.py +1 -1
  192. scipy/io/tests/test_mmio.py +7 -1
  193. scipy/io/tests/test_wavfile.py +41 -0
  194. scipy/io/wavfile.py +57 -10
  195. scipy/linalg/_basic.py +113 -86
  196. scipy/linalg/_cythonized_array_utils.cpython-313-aarch64-linux-musl.so +0 -0
  197. scipy/linalg/_decomp.py +22 -9
  198. scipy/linalg/_decomp_cholesky.py +28 -13
  199. scipy/linalg/_decomp_cossin.py +45 -30
  200. scipy/linalg/_decomp_interpolative.cpython-313-aarch64-linux-musl.so +0 -0
  201. scipy/linalg/_decomp_ldl.py +4 -1
  202. scipy/linalg/_decomp_lu.py +18 -6
  203. scipy/linalg/_decomp_lu_cython.cpython-313-aarch64-linux-musl.so +0 -0
  204. scipy/linalg/_decomp_polar.py +2 -0
  205. scipy/linalg/_decomp_qr.py +6 -2
  206. scipy/linalg/_decomp_qz.py +3 -0
  207. scipy/linalg/_decomp_schur.py +3 -1
  208. scipy/linalg/_decomp_svd.py +13 -2
  209. scipy/linalg/_decomp_update.cpython-313-aarch64-linux-musl.so +0 -0
  210. scipy/linalg/_expm_frechet.py +4 -0
  211. scipy/linalg/_fblas.cpython-313-aarch64-linux-musl.so +0 -0
  212. scipy/linalg/_flapack.cpython-313-aarch64-linux-musl.so +0 -0
  213. scipy/linalg/_linalg_pythran.cpython-313-aarch64-linux-musl.so +0 -0
  214. scipy/linalg/_matfuncs.py +187 -4
  215. scipy/linalg/_matfuncs_expm.cpython-313-aarch64-linux-musl.so +0 -0
  216. scipy/linalg/_matfuncs_schur_sqrtm.cpython-313-aarch64-linux-musl.so +0 -0
  217. scipy/linalg/_matfuncs_sqrtm.py +1 -99
  218. scipy/linalg/_matfuncs_sqrtm_triu.cpython-313-aarch64-linux-musl.so +0 -0
  219. scipy/linalg/_procrustes.py +2 -0
  220. scipy/linalg/_sketches.py +17 -6
  221. scipy/linalg/_solve_toeplitz.cpython-313-aarch64-linux-musl.so +0 -0
  222. scipy/linalg/_solvers.py +7 -2
  223. scipy/linalg/_special_matrices.py +26 -36
  224. scipy/linalg/cython_blas.cpython-313-aarch64-linux-musl.so +0 -0
  225. scipy/linalg/cython_lapack.cpython-313-aarch64-linux-musl.so +0 -0
  226. scipy/linalg/lapack.py +22 -2
  227. scipy/linalg/tests/_cython_examples/meson.build +7 -0
  228. scipy/linalg/tests/test_basic.py +31 -16
  229. scipy/linalg/tests/test_batch.py +588 -0
  230. scipy/linalg/tests/test_cythonized_array_utils.py +0 -2
  231. scipy/linalg/tests/test_decomp.py +40 -3
  232. scipy/linalg/tests/test_decomp_cossin.py +14 -0
  233. scipy/linalg/tests/test_decomp_ldl.py +1 -1
  234. scipy/linalg/tests/test_lapack.py +115 -7
  235. scipy/linalg/tests/test_matfuncs.py +157 -102
  236. scipy/linalg/tests/test_procrustes.py +0 -7
  237. scipy/linalg/tests/test_solve_toeplitz.py +1 -1
  238. scipy/linalg/tests/test_special_matrices.py +1 -5
  239. scipy/ndimage/__init__.py +1 -0
  240. scipy/ndimage/_ctest.cpython-313-aarch64-linux-musl.so +0 -0
  241. scipy/ndimage/_cytest.cpython-313-aarch64-linux-musl.so +0 -0
  242. scipy/ndimage/_delegators.py +8 -2
  243. scipy/ndimage/_filters.py +453 -5
  244. scipy/ndimage/_interpolation.py +36 -6
  245. scipy/ndimage/_measurements.py +4 -2
  246. scipy/ndimage/_morphology.py +5 -0
  247. scipy/ndimage/_nd_image.cpython-313-aarch64-linux-musl.so +0 -0
  248. scipy/ndimage/_ni_docstrings.py +5 -1
  249. scipy/ndimage/_ni_label.cpython-313-aarch64-linux-musl.so +0 -0
  250. scipy/ndimage/_ni_support.py +1 -5
  251. scipy/ndimage/_rank_filter_1d.cpython-313-aarch64-linux-musl.so +0 -0
  252. scipy/ndimage/_support_alternative_backends.py +18 -6
  253. scipy/ndimage/tests/test_filters.py +370 -259
  254. scipy/ndimage/tests/test_fourier.py +7 -9
  255. scipy/ndimage/tests/test_interpolation.py +68 -61
  256. scipy/ndimage/tests/test_measurements.py +18 -35
  257. scipy/ndimage/tests/test_morphology.py +143 -131
  258. scipy/ndimage/tests/test_splines.py +1 -3
  259. scipy/odr/__odrpack.cpython-313-aarch64-linux-musl.so +0 -0
  260. scipy/optimize/_basinhopping.py +13 -7
  261. scipy/optimize/_bglu_dense.cpython-313-aarch64-linux-musl.so +0 -0
  262. scipy/optimize/_bracket.py +17 -24
  263. scipy/optimize/_chandrupatla.py +9 -10
  264. scipy/optimize/_cobyla_py.py +104 -123
  265. scipy/optimize/_constraints.py +14 -10
  266. scipy/optimize/_differentiable_functions.py +371 -230
  267. scipy/optimize/_differentialevolution.py +4 -3
  268. scipy/optimize/_direct.cpython-313-aarch64-linux-musl.so +0 -0
  269. scipy/optimize/_dual_annealing.py +1 -1
  270. scipy/optimize/_elementwise.py +1 -4
  271. scipy/optimize/_group_columns.cpython-313-aarch64-linux-musl.so +0 -0
  272. scipy/optimize/_highspy/_core.cpython-313-aarch64-linux-musl.so +0 -0
  273. scipy/optimize/_highspy/_highs_options.cpython-313-aarch64-linux-musl.so +0 -0
  274. scipy/optimize/_lbfgsb.cpython-313-aarch64-linux-musl.so +0 -0
  275. scipy/optimize/_lbfgsb_py.py +57 -16
  276. scipy/optimize/_linprog_doc.py +2 -2
  277. scipy/optimize/_linprog_highs.py +2 -2
  278. scipy/optimize/_linprog_ip.py +25 -10
  279. scipy/optimize/_linprog_util.py +14 -16
  280. scipy/optimize/_lsap.cpython-313-aarch64-linux-musl.so +0 -0
  281. scipy/optimize/_lsq/common.py +3 -3
  282. scipy/optimize/_lsq/dogbox.py +16 -2
  283. scipy/optimize/_lsq/givens_elimination.cpython-313-aarch64-linux-musl.so +0 -0
  284. scipy/optimize/_lsq/least_squares.py +198 -126
  285. scipy/optimize/_lsq/lsq_linear.py +6 -6
  286. scipy/optimize/_lsq/trf.py +35 -8
  287. scipy/optimize/_milp.py +3 -1
  288. scipy/optimize/_minimize.py +105 -36
  289. scipy/optimize/_minpack.cpython-313-aarch64-linux-musl.so +0 -0
  290. scipy/optimize/_minpack_py.py +21 -14
  291. scipy/optimize/_moduleTNC.cpython-313-aarch64-linux-musl.so +0 -0
  292. scipy/optimize/_nnls.py +20 -21
  293. scipy/optimize/_nonlin.py +34 -3
  294. scipy/optimize/_numdiff.py +288 -110
  295. scipy/optimize/_optimize.py +86 -48
  296. scipy/optimize/_pava_pybind.cpython-313-aarch64-linux-musl.so +0 -0
  297. scipy/optimize/_remove_redundancy.py +5 -5
  298. scipy/optimize/_root_scalar.py +1 -1
  299. scipy/optimize/_shgo.py +6 -0
  300. scipy/optimize/_shgo_lib/_complex.py +1 -1
  301. scipy/optimize/_slsqp_py.py +216 -124
  302. scipy/optimize/_slsqplib.cpython-313-aarch64-linux-musl.so +0 -0
  303. scipy/optimize/_spectral.py +1 -1
  304. scipy/optimize/_tnc.py +8 -1
  305. scipy/optimize/_trlib/_trlib.cpython-313-aarch64-linux-musl.so +0 -0
  306. scipy/optimize/_trustregion.py +20 -6
  307. scipy/optimize/_trustregion_constr/canonical_constraint.py +7 -7
  308. scipy/optimize/_trustregion_constr/equality_constrained_sqp.py +1 -1
  309. scipy/optimize/_trustregion_constr/minimize_trustregion_constr.py +11 -3
  310. scipy/optimize/_trustregion_constr/projections.py +12 -8
  311. scipy/optimize/_trustregion_constr/qp_subproblem.py +9 -9
  312. scipy/optimize/_trustregion_constr/tests/test_projections.py +7 -7
  313. scipy/optimize/_trustregion_constr/tests/test_qp_subproblem.py +77 -77
  314. scipy/optimize/_trustregion_constr/tr_interior_point.py +5 -5
  315. scipy/optimize/_trustregion_exact.py +0 -1
  316. scipy/optimize/_zeros.cpython-313-aarch64-linux-musl.so +0 -0
  317. scipy/optimize/_zeros_py.py +97 -17
  318. scipy/optimize/cython_optimize/_zeros.cpython-313-aarch64-linux-musl.so +0 -0
  319. scipy/optimize/slsqp.py +0 -1
  320. scipy/optimize/tests/test__basinhopping.py +1 -1
  321. scipy/optimize/tests/test__differential_evolution.py +4 -4
  322. scipy/optimize/tests/test__linprog_clean_inputs.py +5 -3
  323. scipy/optimize/tests/test__numdiff.py +66 -22
  324. scipy/optimize/tests/test__remove_redundancy.py +2 -2
  325. scipy/optimize/tests/test__shgo.py +9 -1
  326. scipy/optimize/tests/test_bracket.py +36 -46
  327. scipy/optimize/tests/test_chandrupatla.py +133 -135
  328. scipy/optimize/tests/test_cobyla.py +74 -45
  329. scipy/optimize/tests/test_constraints.py +1 -1
  330. scipy/optimize/tests/test_differentiable_functions.py +226 -6
  331. scipy/optimize/tests/test_lbfgsb_hessinv.py +22 -0
  332. scipy/optimize/tests/test_least_squares.py +125 -13
  333. scipy/optimize/tests/test_linear_assignment.py +3 -3
  334. scipy/optimize/tests/test_linprog.py +3 -3
  335. scipy/optimize/tests/test_lsq_linear.py +6 -6
  336. scipy/optimize/tests/test_minimize_constrained.py +2 -2
  337. scipy/optimize/tests/test_minpack.py +4 -4
  338. scipy/optimize/tests/test_nnls.py +43 -3
  339. scipy/optimize/tests/test_nonlin.py +36 -0
  340. scipy/optimize/tests/test_optimize.py +95 -17
  341. scipy/optimize/tests/test_slsqp.py +36 -4
  342. scipy/optimize/tests/test_zeros.py +34 -1
  343. scipy/signal/__init__.py +12 -23
  344. scipy/signal/_delegators.py +568 -0
  345. scipy/signal/_filter_design.py +459 -241
  346. scipy/signal/_fir_filter_design.py +262 -90
  347. scipy/signal/_lti_conversion.py +3 -2
  348. scipy/signal/_ltisys.py +118 -91
  349. scipy/signal/_max_len_seq_inner.cpython-313-aarch64-linux-musl.so +0 -0
  350. scipy/signal/_peak_finding_utils.cpython-313-aarch64-linux-musl.so +0 -0
  351. scipy/signal/_polyutils.py +172 -0
  352. scipy/signal/_short_time_fft.py +519 -70
  353. scipy/signal/_signal_api.py +30 -0
  354. scipy/signal/_signaltools.py +719 -399
  355. scipy/signal/_sigtools.cpython-313-aarch64-linux-musl.so +0 -0
  356. scipy/signal/_sosfilt.cpython-313-aarch64-linux-musl.so +0 -0
  357. scipy/signal/_spectral_py.py +230 -50
  358. scipy/signal/_spline.cpython-313-aarch64-linux-musl.so +0 -0
  359. scipy/signal/_spline_filters.py +108 -68
  360. scipy/signal/_support_alternative_backends.py +73 -0
  361. scipy/signal/_upfirdn.py +4 -1
  362. scipy/signal/_upfirdn_apply.cpython-313-aarch64-linux-musl.so +0 -0
  363. scipy/signal/_waveforms.py +2 -11
  364. scipy/signal/_wavelets.py +1 -1
  365. scipy/signal/fir_filter_design.py +1 -0
  366. scipy/signal/spline.py +4 -11
  367. scipy/signal/tests/_scipy_spectral_test_shim.py +2 -171
  368. scipy/signal/tests/test_bsplines.py +114 -79
  369. scipy/signal/tests/test_cont2discrete.py +9 -2
  370. scipy/signal/tests/test_filter_design.py +721 -481
  371. scipy/signal/tests/test_fir_filter_design.py +332 -140
  372. scipy/signal/tests/test_savitzky_golay.py +4 -3
  373. scipy/signal/tests/test_short_time_fft.py +221 -3
  374. scipy/signal/tests/test_signaltools.py +2144 -1348
  375. scipy/signal/tests/test_spectral.py +50 -6
  376. scipy/signal/tests/test_splines.py +161 -96
  377. scipy/signal/tests/test_upfirdn.py +84 -50
  378. scipy/signal/tests/test_waveforms.py +20 -0
  379. scipy/signal/tests/test_windows.py +607 -466
  380. scipy/signal/windows/_windows.py +287 -148
  381. scipy/sparse/__init__.py +23 -4
  382. scipy/sparse/_base.py +270 -108
  383. scipy/sparse/_bsr.py +7 -4
  384. scipy/sparse/_compressed.py +59 -231
  385. scipy/sparse/_construct.py +90 -38
  386. scipy/sparse/_coo.py +115 -181
  387. scipy/sparse/_csc.py +4 -4
  388. scipy/sparse/_csparsetools.cpython-313-aarch64-linux-musl.so +0 -0
  389. scipy/sparse/_csr.py +2 -2
  390. scipy/sparse/_data.py +48 -48
  391. scipy/sparse/_dia.py +105 -18
  392. scipy/sparse/_dok.py +0 -23
  393. scipy/sparse/_index.py +4 -4
  394. scipy/sparse/_matrix.py +23 -0
  395. scipy/sparse/_sparsetools.cpython-313-aarch64-linux-musl.so +0 -0
  396. scipy/sparse/_sputils.py +37 -22
  397. scipy/sparse/base.py +0 -9
  398. scipy/sparse/bsr.py +0 -14
  399. scipy/sparse/compressed.py +0 -23
  400. scipy/sparse/construct.py +0 -6
  401. scipy/sparse/coo.py +0 -14
  402. scipy/sparse/csc.py +0 -3
  403. scipy/sparse/csgraph/_flow.cpython-313-aarch64-linux-musl.so +0 -0
  404. scipy/sparse/csgraph/_matching.cpython-313-aarch64-linux-musl.so +0 -0
  405. scipy/sparse/csgraph/_min_spanning_tree.cpython-313-aarch64-linux-musl.so +0 -0
  406. scipy/sparse/csgraph/_reordering.cpython-313-aarch64-linux-musl.so +0 -0
  407. scipy/sparse/csgraph/_shortest_path.cpython-313-aarch64-linux-musl.so +0 -0
  408. scipy/sparse/csgraph/_tools.cpython-313-aarch64-linux-musl.so +0 -0
  409. scipy/sparse/csgraph/_traversal.cpython-313-aarch64-linux-musl.so +0 -0
  410. scipy/sparse/csgraph/tests/test_matching.py +14 -2
  411. scipy/sparse/csgraph/tests/test_pydata_sparse.py +4 -1
  412. scipy/sparse/csgraph/tests/test_shortest_path.py +83 -27
  413. scipy/sparse/csr.py +0 -5
  414. scipy/sparse/data.py +1 -6
  415. scipy/sparse/dia.py +0 -7
  416. scipy/sparse/dok.py +0 -10
  417. scipy/sparse/linalg/_dsolve/_superlu.cpython-313-aarch64-linux-musl.so +0 -0
  418. scipy/sparse/linalg/_dsolve/linsolve.py +9 -0
  419. scipy/sparse/linalg/_dsolve/tests/test_linsolve.py +35 -28
  420. scipy/sparse/linalg/_eigen/arpack/_arpack.cpython-313-aarch64-linux-musl.so +0 -0
  421. scipy/sparse/linalg/_eigen/arpack/arpack.py +23 -17
  422. scipy/sparse/linalg/_eigen/lobpcg/lobpcg.py +6 -6
  423. scipy/sparse/linalg/_interface.py +17 -18
  424. scipy/sparse/linalg/_isolve/_gcrotmk.py +4 -4
  425. scipy/sparse/linalg/_isolve/iterative.py +51 -45
  426. scipy/sparse/linalg/_isolve/lgmres.py +6 -6
  427. scipy/sparse/linalg/_isolve/minres.py +5 -5
  428. scipy/sparse/linalg/_isolve/tfqmr.py +7 -7
  429. scipy/sparse/linalg/_isolve/utils.py +2 -8
  430. scipy/sparse/linalg/_matfuncs.py +1 -1
  431. scipy/sparse/linalg/_norm.py +1 -1
  432. scipy/sparse/linalg/_propack/_cpropack.cpython-313-aarch64-linux-musl.so +0 -0
  433. scipy/sparse/linalg/_propack/_dpropack.cpython-313-aarch64-linux-musl.so +0 -0
  434. scipy/sparse/linalg/_propack/_spropack.cpython-313-aarch64-linux-musl.so +0 -0
  435. scipy/sparse/linalg/_propack/_zpropack.cpython-313-aarch64-linux-musl.so +0 -0
  436. scipy/sparse/linalg/_special_sparse_arrays.py +39 -38
  437. scipy/sparse/linalg/tests/test_pydata_sparse.py +14 -0
  438. scipy/sparse/tests/test_arithmetic1d.py +5 -2
  439. scipy/sparse/tests/test_base.py +214 -42
  440. scipy/sparse/tests/test_common1d.py +7 -7
  441. scipy/sparse/tests/test_construct.py +1 -1
  442. scipy/sparse/tests/test_coo.py +272 -4
  443. scipy/sparse/tests/test_sparsetools.py +5 -0
  444. scipy/sparse/tests/test_sputils.py +36 -7
  445. scipy/spatial/_ckdtree.cpython-313-aarch64-linux-musl.so +0 -0
  446. scipy/spatial/_distance_pybind.cpython-313-aarch64-linux-musl.so +0 -0
  447. scipy/spatial/_distance_wrap.cpython-313-aarch64-linux-musl.so +0 -0
  448. scipy/spatial/_hausdorff.cpython-313-aarch64-linux-musl.so +0 -0
  449. scipy/spatial/_qhull.cpython-313-aarch64-linux-musl.so +0 -0
  450. scipy/spatial/_voronoi.cpython-313-aarch64-linux-musl.so +0 -0
  451. scipy/spatial/distance.py +49 -42
  452. scipy/spatial/tests/test_distance.py +15 -1
  453. scipy/spatial/tests/test_kdtree.py +1 -0
  454. scipy/spatial/tests/test_qhull.py +7 -2
  455. scipy/spatial/transform/__init__.py +5 -3
  456. scipy/spatial/transform/_rigid_transform.cpython-313-aarch64-linux-musl.so +0 -0
  457. scipy/spatial/transform/_rotation.cpython-313-aarch64-linux-musl.so +0 -0
  458. scipy/spatial/transform/tests/test_rigid_transform.py +1221 -0
  459. scipy/spatial/transform/tests/test_rotation.py +1213 -832
  460. scipy/spatial/transform/tests/test_rotation_groups.py +3 -3
  461. scipy/spatial/transform/tests/test_rotation_spline.py +29 -8
  462. scipy/special/__init__.py +1 -47
  463. scipy/special/_add_newdocs.py +34 -772
  464. scipy/special/_basic.py +22 -25
  465. scipy/special/_comb.cpython-313-aarch64-linux-musl.so +0 -0
  466. scipy/special/_ellip_harm_2.cpython-313-aarch64-linux-musl.so +0 -0
  467. scipy/special/_gufuncs.cpython-313-aarch64-linux-musl.so +0 -0
  468. scipy/special/_logsumexp.py +67 -58
  469. scipy/special/_orthogonal.pyi +1 -1
  470. scipy/special/_specfun.cpython-313-aarch64-linux-musl.so +0 -0
  471. scipy/special/_special_ufuncs.cpython-313-aarch64-linux-musl.so +0 -0
  472. scipy/special/_spherical_bessel.py +4 -4
  473. scipy/special/_support_alternative_backends.py +212 -119
  474. scipy/special/_test_internal.cpython-313-aarch64-linux-musl.so +0 -0
  475. scipy/special/_testutils.py +4 -4
  476. scipy/special/_ufuncs.cpython-313-aarch64-linux-musl.so +0 -0
  477. scipy/special/_ufuncs.pyi +1 -0
  478. scipy/special/_ufuncs.pyx +215 -1400
  479. scipy/special/_ufuncs_cxx.cpython-313-aarch64-linux-musl.so +0 -0
  480. scipy/special/_ufuncs_cxx.pxd +2 -15
  481. scipy/special/_ufuncs_cxx.pyx +5 -44
  482. scipy/special/_ufuncs_cxx_defs.h +2 -16
  483. scipy/special/_ufuncs_defs.h +0 -8
  484. scipy/special/cython_special.cpython-313-aarch64-linux-musl.so +0 -0
  485. scipy/special/cython_special.pxd +1 -1
  486. scipy/special/tests/_cython_examples/meson.build +10 -1
  487. scipy/special/tests/test_basic.py +153 -20
  488. scipy/special/tests/test_boost_ufuncs.py +3 -0
  489. scipy/special/tests/test_cdflib.py +35 -11
  490. scipy/special/tests/test_gammainc.py +16 -0
  491. scipy/special/tests/test_hyp2f1.py +2 -2
  492. scipy/special/tests/test_log1mexp.py +85 -0
  493. scipy/special/tests/test_logsumexp.py +206 -64
  494. scipy/special/tests/test_mpmath.py +1 -0
  495. scipy/special/tests/test_nan_inputs.py +1 -1
  496. scipy/special/tests/test_orthogonal.py +17 -18
  497. scipy/special/tests/test_sf_error.py +3 -2
  498. scipy/special/tests/test_sph_harm.py +6 -7
  499. scipy/special/tests/test_support_alternative_backends.py +211 -76
  500. scipy/stats/__init__.py +4 -1
  501. scipy/stats/_ansari_swilk_statistics.cpython-313-aarch64-linux-musl.so +0 -0
  502. scipy/stats/_axis_nan_policy.py +5 -12
  503. scipy/stats/_biasedurn.cpython-313-aarch64-linux-musl.so +0 -0
  504. scipy/stats/_continued_fraction.py +387 -0
  505. scipy/stats/_continuous_distns.py +277 -310
  506. scipy/stats/_correlation.py +1 -1
  507. scipy/stats/_covariance.py +6 -3
  508. scipy/stats/_discrete_distns.py +39 -32
  509. scipy/stats/_distn_infrastructure.py +39 -12
  510. scipy/stats/_distribution_infrastructure.py +900 -238
  511. scipy/stats/_entropy.py +9 -10
  512. scipy/{_lib → stats}/_finite_differences.py +1 -1
  513. scipy/stats/_hypotests.py +83 -50
  514. scipy/stats/_kde.py +53 -49
  515. scipy/stats/_ksstats.py +1 -1
  516. scipy/stats/_levy_stable/__init__.py +7 -15
  517. scipy/stats/_levy_stable/levyst.cpython-313-aarch64-linux-musl.so +0 -0
  518. scipy/stats/_morestats.py +118 -73
  519. scipy/stats/_mstats_basic.py +13 -17
  520. scipy/stats/_mstats_extras.py +8 -8
  521. scipy/stats/_multivariate.py +89 -113
  522. scipy/stats/_new_distributions.py +97 -20
  523. scipy/stats/_page_trend_test.py +12 -5
  524. scipy/stats/_probability_distribution.py +265 -43
  525. scipy/stats/_qmc.py +14 -9
  526. scipy/stats/_qmc_cy.cpython-313-aarch64-linux-musl.so +0 -0
  527. scipy/stats/_qmvnt.py +16 -95
  528. scipy/stats/_qmvnt_cy.cpython-313-aarch64-linux-musl.so +0 -0
  529. scipy/stats/_quantile.py +335 -0
  530. scipy/stats/_rcont/rcont.cpython-313-aarch64-linux-musl.so +0 -0
  531. scipy/stats/_resampling.py +4 -29
  532. scipy/stats/_sampling.py +1 -1
  533. scipy/stats/_sobol.cpython-313-aarch64-linux-musl.so +0 -0
  534. scipy/stats/_stats.cpython-313-aarch64-linux-musl.so +0 -0
  535. scipy/stats/_stats_mstats_common.py +21 -2
  536. scipy/stats/_stats_py.py +550 -476
  537. scipy/stats/_stats_pythran.cpython-313-aarch64-linux-musl.so +0 -0
  538. scipy/stats/_unuran/unuran_wrapper.cpython-313-aarch64-linux-musl.so +0 -0
  539. scipy/stats/_unuran/unuran_wrapper.pyi +2 -1
  540. scipy/stats/_variation.py +6 -8
  541. scipy/stats/_wilcoxon.py +13 -7
  542. scipy/stats/tests/common_tests.py +6 -4
  543. scipy/stats/tests/test_axis_nan_policy.py +62 -24
  544. scipy/stats/tests/test_continued_fraction.py +173 -0
  545. scipy/stats/tests/test_continuous.py +379 -60
  546. scipy/stats/tests/test_continuous_basic.py +18 -12
  547. scipy/stats/tests/test_discrete_basic.py +14 -8
  548. scipy/stats/tests/test_discrete_distns.py +16 -16
  549. scipy/stats/tests/test_distributions.py +95 -75
  550. scipy/stats/tests/test_entropy.py +40 -48
  551. scipy/stats/tests/test_fit.py +4 -3
  552. scipy/stats/tests/test_hypotests.py +153 -24
  553. scipy/stats/tests/test_kdeoth.py +109 -41
  554. scipy/stats/tests/test_marray.py +289 -0
  555. scipy/stats/tests/test_morestats.py +79 -47
  556. scipy/stats/tests/test_mstats_basic.py +3 -3
  557. scipy/stats/tests/test_multivariate.py +434 -83
  558. scipy/stats/tests/test_qmc.py +13 -10
  559. scipy/stats/tests/test_quantile.py +199 -0
  560. scipy/stats/tests/test_rank.py +119 -112
  561. scipy/stats/tests/test_resampling.py +47 -56
  562. scipy/stats/tests/test_sampling.py +9 -4
  563. scipy/stats/tests/test_stats.py +799 -939
  564. scipy/stats/tests/test_variation.py +8 -6
  565. scipy/version.py +2 -2
  566. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/LICENSE.txt +4 -4
  567. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/METADATA +11 -11
  568. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/RECORD +1262 -1269
  569. scipy.libs/libgcc_s-69c45f16.so.1 +0 -0
  570. scipy.libs/libgfortran-db0b6589.so.5.0.0 +0 -0
  571. scipy.libs/{libstdc++-1b614e01.so.6.0.32 → libstdc++-1f1a71be.so.6.0.33} +0 -0
  572. scipy/_lib/array_api_extra/_funcs.py +0 -484
  573. scipy/_lib/array_api_extra/_typing.py +0 -8
  574. scipy/interpolate/_bspl.cpython-313-aarch64-linux-musl.so +0 -0
  575. scipy/optimize/_cobyla.cpython-313-aarch64-linux-musl.so +0 -0
  576. scipy/optimize/_cython_nnls.cpython-313-aarch64-linux-musl.so +0 -0
  577. scipy/optimize/_slsqp.cpython-313-aarch64-linux-musl.so +0 -0
  578. scipy/spatial/qhull_src/COPYING.txt +0 -38
  579. scipy/special/libsf_error_state.so +0 -0
  580. scipy/special/tests/test_log_softmax.py +0 -109
  581. scipy/special/tests/test_xsf_cuda.py +0 -114
  582. scipy/special/xsf/binom.h +0 -89
  583. scipy/special/xsf/cdflib.h +0 -100
  584. scipy/special/xsf/cephes/airy.h +0 -307
  585. scipy/special/xsf/cephes/besselpoly.h +0 -51
  586. scipy/special/xsf/cephes/beta.h +0 -257
  587. scipy/special/xsf/cephes/cbrt.h +0 -131
  588. scipy/special/xsf/cephes/chbevl.h +0 -85
  589. scipy/special/xsf/cephes/chdtr.h +0 -193
  590. scipy/special/xsf/cephes/const.h +0 -87
  591. scipy/special/xsf/cephes/ellie.h +0 -293
  592. scipy/special/xsf/cephes/ellik.h +0 -251
  593. scipy/special/xsf/cephes/ellpe.h +0 -107
  594. scipy/special/xsf/cephes/ellpk.h +0 -117
  595. scipy/special/xsf/cephes/expn.h +0 -260
  596. scipy/special/xsf/cephes/gamma.h +0 -398
  597. scipy/special/xsf/cephes/hyp2f1.h +0 -596
  598. scipy/special/xsf/cephes/hyperg.h +0 -361
  599. scipy/special/xsf/cephes/i0.h +0 -149
  600. scipy/special/xsf/cephes/i1.h +0 -158
  601. scipy/special/xsf/cephes/igam.h +0 -421
  602. scipy/special/xsf/cephes/igam_asymp_coeff.h +0 -195
  603. scipy/special/xsf/cephes/igami.h +0 -313
  604. scipy/special/xsf/cephes/j0.h +0 -225
  605. scipy/special/xsf/cephes/j1.h +0 -198
  606. scipy/special/xsf/cephes/jv.h +0 -715
  607. scipy/special/xsf/cephes/k0.h +0 -164
  608. scipy/special/xsf/cephes/k1.h +0 -163
  609. scipy/special/xsf/cephes/kn.h +0 -243
  610. scipy/special/xsf/cephes/lanczos.h +0 -112
  611. scipy/special/xsf/cephes/ndtr.h +0 -275
  612. scipy/special/xsf/cephes/poch.h +0 -85
  613. scipy/special/xsf/cephes/polevl.h +0 -167
  614. scipy/special/xsf/cephes/psi.h +0 -194
  615. scipy/special/xsf/cephes/rgamma.h +0 -111
  616. scipy/special/xsf/cephes/scipy_iv.h +0 -811
  617. scipy/special/xsf/cephes/shichi.h +0 -248
  618. scipy/special/xsf/cephes/sici.h +0 -224
  619. scipy/special/xsf/cephes/sindg.h +0 -221
  620. scipy/special/xsf/cephes/tandg.h +0 -139
  621. scipy/special/xsf/cephes/trig.h +0 -58
  622. scipy/special/xsf/cephes/unity.h +0 -186
  623. scipy/special/xsf/cephes/zeta.h +0 -172
  624. scipy/special/xsf/config.h +0 -304
  625. scipy/special/xsf/digamma.h +0 -205
  626. scipy/special/xsf/error.h +0 -57
  627. scipy/special/xsf/evalpoly.h +0 -47
  628. scipy/special/xsf/expint.h +0 -266
  629. scipy/special/xsf/hyp2f1.h +0 -694
  630. scipy/special/xsf/iv_ratio.h +0 -173
  631. scipy/special/xsf/lambertw.h +0 -150
  632. scipy/special/xsf/loggamma.h +0 -163
  633. scipy/special/xsf/sici.h +0 -200
  634. scipy/special/xsf/tools.h +0 -427
  635. scipy/special/xsf/trig.h +0 -164
  636. scipy/special/xsf/wright_bessel.h +0 -843
  637. scipy/special/xsf/zlog1.h +0 -35
  638. scipy/stats/_mvn.cpython-313-aarch64-linux-musl.so +0 -0
  639. scipy.libs/libgcc_s-7393e603.so.1 +0 -0
  640. scipy.libs/libgfortran-eb933d8e.so.5.0.0 +0 -0
  641. {scipy-1.15.3.dist-info → scipy-1.16.0rc2.dist-info}/WHEEL +0 -0
@@ -84,8 +84,6 @@ cdef void *_export_nct_mean_float
84
84
  cdef void *_export_nct_mean_double
85
85
  cdef void *_export_nct_pdf_float
86
86
  cdef void *_export_nct_pdf_double
87
- cdef void *_export_nct_ppf_float
88
- cdef void *_export_nct_ppf_double
89
87
  cdef void *_export_nct_sf_float
90
88
  cdef void *_export_nct_sf_double
91
89
  cdef void *_export_nct_skewness_float
@@ -117,8 +115,6 @@ cdef void *_export_ibetac_inv_float
117
115
  cdef void *_export_ibetac_inv_double
118
116
  cdef void *_export_ibeta_inv_float
119
117
  cdef void *_export_ibeta_inv_double
120
- cdef void *_export_faddeeva_dawsn
121
- cdef void *_export_faddeeva_dawsn_complex
122
118
  cdef void *_export_fellint_RC
123
119
  cdef void *_export_cellint_RC
124
120
  cdef void *_export_fellint_RD
@@ -129,27 +125,18 @@ cdef void *_export_fellint_RG
129
125
  cdef void *_export_cellint_RG
130
126
  cdef void *_export_fellint_RJ
131
127
  cdef void *_export_cellint_RJ
132
- cdef void *_export_faddeeva_erf
133
- cdef void *_export_faddeeva_erfc_complex
134
- cdef void *_export_faddeeva_erfcx
135
- cdef void *_export_faddeeva_erfcx_complex
136
- cdef void *_export_faddeeva_erfi
137
- cdef void *_export_faddeeva_erfi_complex
138
128
  cdef void *_export_erfinv_float
139
129
  cdef void *_export_erfinv_double
140
130
  cdef void *_export_hyp1f1_double
141
- cdef void *_export_faddeeva_log_ndtr
142
- cdef void *_export_faddeeva_log_ndtr_complex
143
131
  cdef void *_export_ncf_cdf_float
144
132
  cdef void *_export_ncf_cdf_double
145
133
  cdef void *_export_ncf_ppf_float
146
134
  cdef void *_export_ncf_ppf_double
147
135
  cdef void *_export_nct_cdf_float
148
136
  cdef void *_export_nct_cdf_double
149
- cdef void *_export_faddeeva_ndtr
137
+ cdef void *_export_nct_ppf_float
138
+ cdef void *_export_nct_ppf_double
150
139
  cdef void *_export_powm1_float
151
140
  cdef void *_export_powm1_double
152
- cdef void *_export_faddeeva_voigt_profile
153
- cdef void *_export_faddeeva_w
154
141
  cdef void *_export_wrightomega
155
142
  cdef void *_export_wrightomega_real
@@ -257,12 +257,6 @@ cdef void *_export_nct_pdf_float = <void*>_func_nct_pdf_float
257
257
  cdef extern from r"_ufuncs_cxx_defs.h":
258
258
  cdef double _func_nct_pdf_double "nct_pdf_double"(double, double, double) noexcept nogil
259
259
  cdef void *_export_nct_pdf_double = <void*>_func_nct_pdf_double
260
- cdef extern from r"_ufuncs_cxx_defs.h":
261
- cdef float _func_nct_ppf_float "nct_ppf_float"(float, float, float) noexcept nogil
262
- cdef void *_export_nct_ppf_float = <void*>_func_nct_ppf_float
263
- cdef extern from r"_ufuncs_cxx_defs.h":
264
- cdef double _func_nct_ppf_double "nct_ppf_double"(double, double, double) noexcept nogil
265
- cdef void *_export_nct_ppf_double = <void*>_func_nct_ppf_double
266
260
  cdef extern from r"_ufuncs_cxx_defs.h":
267
261
  cdef float _func_nct_sf_float "nct_sf_float"(float, float, float) noexcept nogil
268
262
  cdef void *_export_nct_sf_float = <void*>_func_nct_sf_float
@@ -356,12 +350,6 @@ cdef void *_export_ibeta_inv_float = <void*>_func_ibeta_inv_float
356
350
  cdef extern from r"_ufuncs_cxx_defs.h":
357
351
  cdef double _func_ibeta_inv_double "ibeta_inv_double"(double, double, double) noexcept nogil
358
352
  cdef void *_export_ibeta_inv_double = <void*>_func_ibeta_inv_double
359
- cdef extern from r"_ufuncs_cxx_defs.h":
360
- cdef double _func_faddeeva_dawsn "faddeeva_dawsn"(double) noexcept nogil
361
- cdef void *_export_faddeeva_dawsn = <void*>_func_faddeeva_dawsn
362
- cdef extern from r"_ufuncs_cxx_defs.h":
363
- cdef double complex _func_faddeeva_dawsn_complex "faddeeva_dawsn_complex"(double complex) noexcept nogil
364
- cdef void *_export_faddeeva_dawsn_complex = <void*>_func_faddeeva_dawsn_complex
365
353
  cdef extern from r"_ufuncs_cxx_defs.h":
366
354
  cdef double _func_fellint_RC "fellint_RC"(double, double) noexcept nogil
367
355
  cdef void *_export_fellint_RC = <void*>_func_fellint_RC
@@ -392,24 +380,6 @@ cdef void *_export_fellint_RJ = <void*>_func_fellint_RJ
392
380
  cdef extern from r"_ufuncs_cxx_defs.h":
393
381
  cdef double complex _func_cellint_RJ "cellint_RJ"(double complex, double complex, double complex, double complex) noexcept nogil
394
382
  cdef void *_export_cellint_RJ = <void*>_func_cellint_RJ
395
- cdef extern from r"_ufuncs_cxx_defs.h":
396
- cdef double complex _func_faddeeva_erf "faddeeva_erf"(double complex) noexcept nogil
397
- cdef void *_export_faddeeva_erf = <void*>_func_faddeeva_erf
398
- cdef extern from r"_ufuncs_cxx_defs.h":
399
- cdef double complex _func_faddeeva_erfc_complex "faddeeva_erfc_complex"(double complex) noexcept nogil
400
- cdef void *_export_faddeeva_erfc_complex = <void*>_func_faddeeva_erfc_complex
401
- cdef extern from r"_ufuncs_cxx_defs.h":
402
- cdef double _func_faddeeva_erfcx "faddeeva_erfcx"(double) noexcept nogil
403
- cdef void *_export_faddeeva_erfcx = <void*>_func_faddeeva_erfcx
404
- cdef extern from r"_ufuncs_cxx_defs.h":
405
- cdef double complex _func_faddeeva_erfcx_complex "faddeeva_erfcx_complex"(double complex) noexcept nogil
406
- cdef void *_export_faddeeva_erfcx_complex = <void*>_func_faddeeva_erfcx_complex
407
- cdef extern from r"_ufuncs_cxx_defs.h":
408
- cdef double _func_faddeeva_erfi "faddeeva_erfi"(double) noexcept nogil
409
- cdef void *_export_faddeeva_erfi = <void*>_func_faddeeva_erfi
410
- cdef extern from r"_ufuncs_cxx_defs.h":
411
- cdef double complex _func_faddeeva_erfi_complex "faddeeva_erfi_complex"(double complex) noexcept nogil
412
- cdef void *_export_faddeeva_erfi_complex = <void*>_func_faddeeva_erfi_complex
413
383
  cdef extern from r"_ufuncs_cxx_defs.h":
414
384
  cdef float _func_erfinv_float "erfinv_float"(float) noexcept nogil
415
385
  cdef void *_export_erfinv_float = <void*>_func_erfinv_float
@@ -419,12 +389,6 @@ cdef void *_export_erfinv_double = <void*>_func_erfinv_double
419
389
  cdef extern from r"_ufuncs_cxx_defs.h":
420
390
  cdef double _func_hyp1f1_double "hyp1f1_double"(double, double, double) noexcept nogil
421
391
  cdef void *_export_hyp1f1_double = <void*>_func_hyp1f1_double
422
- cdef extern from r"_ufuncs_cxx_defs.h":
423
- cdef double _func_faddeeva_log_ndtr "faddeeva_log_ndtr"(double) noexcept nogil
424
- cdef void *_export_faddeeva_log_ndtr = <void*>_func_faddeeva_log_ndtr
425
- cdef extern from r"_ufuncs_cxx_defs.h":
426
- cdef double complex _func_faddeeva_log_ndtr_complex "faddeeva_log_ndtr_complex"(double complex) noexcept nogil
427
- cdef void *_export_faddeeva_log_ndtr_complex = <void*>_func_faddeeva_log_ndtr_complex
428
392
  cdef extern from r"_ufuncs_cxx_defs.h":
429
393
  cdef float _func_ncf_cdf_float "ncf_cdf_float"(float, float, float, float) noexcept nogil
430
394
  cdef void *_export_ncf_cdf_float = <void*>_func_ncf_cdf_float
@@ -444,20 +408,17 @@ cdef extern from r"_ufuncs_cxx_defs.h":
444
408
  cdef double _func_nct_cdf_double "nct_cdf_double"(double, double, double) noexcept nogil
445
409
  cdef void *_export_nct_cdf_double = <void*>_func_nct_cdf_double
446
410
  cdef extern from r"_ufuncs_cxx_defs.h":
447
- cdef double complex _func_faddeeva_ndtr "faddeeva_ndtr"(double complex) noexcept nogil
448
- cdef void *_export_faddeeva_ndtr = <void*>_func_faddeeva_ndtr
411
+ cdef float _func_nct_ppf_float "nct_ppf_float"(float, float, float) noexcept nogil
412
+ cdef void *_export_nct_ppf_float = <void*>_func_nct_ppf_float
413
+ cdef extern from r"_ufuncs_cxx_defs.h":
414
+ cdef double _func_nct_ppf_double "nct_ppf_double"(double, double, double) noexcept nogil
415
+ cdef void *_export_nct_ppf_double = <void*>_func_nct_ppf_double
449
416
  cdef extern from r"_ufuncs_cxx_defs.h":
450
417
  cdef float _func_powm1_float "powm1_float"(float, float) noexcept nogil
451
418
  cdef void *_export_powm1_float = <void*>_func_powm1_float
452
419
  cdef extern from r"_ufuncs_cxx_defs.h":
453
420
  cdef double _func_powm1_double "powm1_double"(double, double) noexcept nogil
454
421
  cdef void *_export_powm1_double = <void*>_func_powm1_double
455
- cdef extern from r"_ufuncs_cxx_defs.h":
456
- cdef double _func_faddeeva_voigt_profile "faddeeva_voigt_profile"(double, double, double) noexcept nogil
457
- cdef void *_export_faddeeva_voigt_profile = <void*>_func_faddeeva_voigt_profile
458
- cdef extern from r"_ufuncs_cxx_defs.h":
459
- cdef double complex _func_faddeeva_w "faddeeva_w"(double complex) noexcept nogil
460
- cdef void *_export_faddeeva_w = <void*>_func_faddeeva_w
461
422
  cdef extern from r"_ufuncs_cxx_defs.h":
462
423
  cdef double complex _func_wrightomega "wrightomega"(double complex) noexcept nogil
463
424
  cdef void *_export_wrightomega = <void*>_func_wrightomega
@@ -85,8 +85,6 @@ npy_float nct_mean_float(npy_float, npy_float);
85
85
  npy_double nct_mean_double(npy_double, npy_double);
86
86
  npy_float nct_pdf_float(npy_float, npy_float, npy_float);
87
87
  npy_double nct_pdf_double(npy_double, npy_double, npy_double);
88
- npy_float nct_ppf_float(npy_float, npy_float, npy_float);
89
- npy_double nct_ppf_double(npy_double, npy_double, npy_double);
90
88
  npy_float nct_sf_float(npy_float, npy_float, npy_float);
91
89
  npy_double nct_sf_double(npy_double, npy_double, npy_double);
92
90
  npy_float nct_skewness_float(npy_float, npy_float);
@@ -119,9 +117,6 @@ npy_float ibetac_inv_float(npy_float, npy_float, npy_float);
119
117
  npy_double ibetac_inv_double(npy_double, npy_double, npy_double);
120
118
  npy_float ibeta_inv_float(npy_float, npy_float, npy_float);
121
119
  npy_double ibeta_inv_double(npy_double, npy_double, npy_double);
122
- #include "_faddeeva.h"
123
- npy_double faddeeva_dawsn(npy_double);
124
- npy_cdouble faddeeva_dawsn_complex(npy_cdouble);
125
120
  #include "ellint_carlson_wrap.hh"
126
121
  npy_double fellint_RC(npy_double, npy_double);
127
122
  npy_cdouble cellint_RC(npy_cdouble, npy_cdouble);
@@ -133,28 +128,19 @@ npy_double fellint_RG(npy_double, npy_double, npy_double);
133
128
  npy_cdouble cellint_RG(npy_cdouble, npy_cdouble, npy_cdouble);
134
129
  npy_double fellint_RJ(npy_double, npy_double, npy_double, npy_double);
135
130
  npy_cdouble cellint_RJ(npy_cdouble, npy_cdouble, npy_cdouble, npy_cdouble);
136
- npy_cdouble faddeeva_erf(npy_cdouble);
137
- npy_cdouble faddeeva_erfc_complex(npy_cdouble);
138
- npy_double faddeeva_erfcx(npy_double);
139
- npy_cdouble faddeeva_erfcx_complex(npy_cdouble);
140
- npy_double faddeeva_erfi(npy_double);
141
- npy_cdouble faddeeva_erfi_complex(npy_cdouble);
142
131
  npy_float erfinv_float(npy_float);
143
132
  npy_double erfinv_double(npy_double);
144
133
  npy_double hyp1f1_double(npy_double, npy_double, npy_double);
145
- npy_double faddeeva_log_ndtr(npy_double);
146
- npy_cdouble faddeeva_log_ndtr_complex(npy_cdouble);
147
134
  npy_float ncf_cdf_float(npy_float, npy_float, npy_float, npy_float);
148
135
  npy_double ncf_cdf_double(npy_double, npy_double, npy_double, npy_double);
149
136
  npy_float ncf_ppf_float(npy_float, npy_float, npy_float, npy_float);
150
137
  npy_double ncf_ppf_double(npy_double, npy_double, npy_double, npy_double);
151
138
  npy_float nct_cdf_float(npy_float, npy_float, npy_float);
152
139
  npy_double nct_cdf_double(npy_double, npy_double, npy_double);
153
- npy_cdouble faddeeva_ndtr(npy_cdouble);
140
+ npy_float nct_ppf_float(npy_float, npy_float, npy_float);
141
+ npy_double nct_ppf_double(npy_double, npy_double, npy_double);
154
142
  npy_float powm1_float(npy_float, npy_float);
155
143
  npy_double powm1_double(npy_double, npy_double);
156
- npy_double faddeeva_voigt_profile(npy_double, npy_double, npy_double);
157
- npy_cdouble faddeeva_w(npy_cdouble);
158
144
  #include "_wright.h"
159
145
  npy_cdouble wrightomega(npy_cdouble);
160
146
  npy_double wrightomega_real(npy_double);
@@ -10,7 +10,6 @@ npy_double xsf_kolmogci(npy_double);
10
10
  npy_double xsf_kolmogp(npy_double);
11
11
  npy_double cephes_lanczos_sum_expg_scaled(npy_double);
12
12
  npy_double cephes_lgam1p(npy_double);
13
- npy_double cephes_log1pmx(npy_double);
14
13
  npy_double cephes_smirnovc_wrap(npy_intp, npy_double);
15
14
  npy_double cephes_smirnovci_wrap(npy_intp, npy_double);
16
15
  npy_double cephes_smirnovp_wrap(npy_intp, npy_double);
@@ -23,12 +22,7 @@ npy_double cephes_bdtri_wrap(npy_double, npy_intp, npy_double);
23
22
  npy_double xsf_chdtr(npy_double, npy_double);
24
23
  npy_double xsf_chdtrc(npy_double, npy_double);
25
24
  npy_double xsf_chdtri(npy_double, npy_double);
26
- npy_double cephes_erf(npy_double);
27
- npy_double cephes_erfc(npy_double);
28
25
  npy_double cephes_erfcinv(npy_double);
29
- npy_double cephes_exp10(npy_double);
30
- npy_double cephes_exp2(npy_double);
31
- npy_double cephes_expm1(npy_double);
32
26
  npy_double cephes_expn_wrap(npy_intp, npy_double);
33
27
  npy_double xsf_fdtr(npy_double, npy_double, npy_double);
34
28
  npy_double xsf_fdtrc(npy_double, npy_double, npy_double);
@@ -40,12 +34,10 @@ npy_cdouble chyp1f1_wrap(npy_double, npy_double, npy_cdouble);
40
34
  npy_double special_cyl_bessel_k_int(npy_intp, npy_double);
41
35
  npy_double xsf_kolmogi(npy_double);
42
36
  npy_double xsf_kolmogorov(npy_double);
43
- npy_double cephes_log1p(npy_double);
44
37
  npy_double pmv_wrap(npy_double, npy_double, npy_double);
45
38
  npy_double cephes_nbdtr_wrap(npy_intp, npy_intp, npy_double);
46
39
  npy_double cephes_nbdtrc_wrap(npy_intp, npy_intp, npy_double);
47
40
  npy_double cephes_nbdtri_wrap(npy_intp, npy_intp, npy_double);
48
- npy_double xsf_ndtr(npy_double);
49
41
  npy_double xsf_ndtri(npy_double);
50
42
  npy_double xsf_owens_t(npy_double, npy_double);
51
43
  npy_double xsf_pdtr(npy_double, npy_double);
@@ -196,7 +196,7 @@ cpdef double ncfdtrinc(double x0, double x1, double x2, double x3) noexcept nogi
196
196
  cpdef df_number_t nctdtr(df_number_t x0, df_number_t x1, df_number_t x2) noexcept nogil
197
197
  cpdef double nctdtridf(double x0, double x1, double x2) noexcept nogil
198
198
  cpdef double nctdtrinc(double x0, double x1, double x2) noexcept nogil
199
- cpdef double nctdtrit(double x0, double x1, double x2) noexcept nogil
199
+ cpdef df_number_t nctdtrit(df_number_t x0, df_number_t x1, df_number_t x2) noexcept nogil
200
200
  cpdef Dd_number_t ndtr(Dd_number_t x0) noexcept nogil
201
201
  cpdef double ndtri(double x0) noexcept nogil
202
202
  cpdef double nrdtrimn(double x0, double x1, double x2) noexcept nogil
@@ -10,10 +10,17 @@ if not cy.version().version_compare('>=3.0.8')
10
10
  error('tests requires Cython >= 3.0.8')
11
11
  endif
12
12
 
13
+ cython_args = []
14
+ if cy.version().version_compare('>=3.1.0')
15
+ cython_args += ['-Xfreethreading_compatible=True']
16
+ endif
17
+
13
18
  py3.extension_module(
14
19
  'extending',
15
20
  'extending.pyx',
16
21
  install: false,
22
+ cython_args: cython_args,
23
+ c_args: ['-DCYTHON_CCOMPLEX=0'] # see gh-18975 for why we need this
17
24
  )
18
25
 
19
26
  extending_cpp = fs.copyfile('extending.pyx', 'extending_cpp.pyx')
@@ -21,5 +28,7 @@ py3.extension_module(
21
28
  'extending_cpp',
22
29
  extending_cpp,
23
30
  install: false,
24
- override_options : ['cython_language=cpp']
31
+ override_options : ['cython_language=cpp'],
32
+ cython_args: cython_args,
33
+ cpp_args: ['-DCYTHON_CCOMPLEX=0']
25
34
  )
@@ -1442,14 +1442,79 @@ class TestBetaInc:
1442
1442
 
1443
1443
  @pytest.mark.parametrize('func', [special.betainc, special.betaincinv,
1444
1444
  special.betaincc, special.betainccinv])
1445
- @pytest.mark.parametrize('args', [(-1.0, 2, 0.5), (0, 2, 0.5),
1446
- (1.5, -2.0, 0.5), (1.5, 0, 0.5),
1445
+ @pytest.mark.parametrize('args', [(-1.0, 2, 0.5), (1.5, -2.0, 0.5),
1447
1446
  (1.5, 2.0, -0.3), (1.5, 2.0, 1.1)])
1448
1447
  def test_betainc_domain_errors(self, func, args):
1449
1448
  with special.errstate(domain='raise'):
1450
1449
  with pytest.raises(special.SpecialFunctionError, match='domain'):
1451
1450
  special.betainc(*args)
1452
1451
 
1452
+ @pytest.mark.parametrize(
1453
+ "args,expected",
1454
+ [
1455
+ ((0.0, 0.0, 0.0), np.nan),
1456
+ ((0.0, 0.0, 0.5), np.nan),
1457
+ ((0.0, 0.0, 1.0), np.nan),
1458
+ ((np.inf, np.inf, 0.0), np.nan),
1459
+ ((np.inf, np.inf, 0.5), np.nan),
1460
+ ((np.inf, np.inf, 1.0), np.nan),
1461
+ ((0.0, 1.0, 0.0), 0.0),
1462
+ ((0.0, 1.0, 0.5), 1.0),
1463
+ ((0.0, 1.0, 1.0), 1.0),
1464
+ ((1.0, 0.0, 0.0), 0.0),
1465
+ ((1.0, 0.0, 0.5), 0.0),
1466
+ ((1.0, 0.0, 1.0), 1.0),
1467
+ ((0.0, np.inf, 0.0), 0.0),
1468
+ ((0.0, np.inf, 0.5), 1.0),
1469
+ ((0.0, np.inf, 1.0), 1.0),
1470
+ ((np.inf, 0.0, 0.0), 0.0),
1471
+ ((np.inf, 0.0, 0.5), 0.0),
1472
+ ((np.inf, 0.0, 1.0), 1.0),
1473
+ ((1.0, np.inf, 0.0), 0.0),
1474
+ ((1.0, np.inf, 0.5), 1.0),
1475
+ ((1.0, np.inf, 1.0), 1.0),
1476
+ ((np.inf, 1.0, 0.0), 0.0),
1477
+ ((np.inf, 1.0, 0.5), 0.0),
1478
+ ((np.inf, 1.0, 1.0), 1.0),
1479
+ ]
1480
+ )
1481
+ def test_betainc_edge_cases(self, args, expected):
1482
+ observed = special.betainc(*args)
1483
+ assert_equal(observed, expected)
1484
+
1485
+ @pytest.mark.parametrize(
1486
+ "args,expected",
1487
+ [
1488
+ ((0.0, 0.0, 0.0), np.nan),
1489
+ ((0.0, 0.0, 0.5), np.nan),
1490
+ ((0.0, 0.0, 1.0), np.nan),
1491
+ ((np.inf, np.inf, 0.0), np.nan),
1492
+ ((np.inf, np.inf, 0.5), np.nan),
1493
+ ((np.inf, np.inf, 1.0), np.nan),
1494
+ ((0.0, 1.0, 0.0), 1.0),
1495
+ ((0.0, 1.0, 0.5), 0.0),
1496
+ ((0.0, 1.0, 1.0), 0.0),
1497
+ ((1.0, 0.0, 0.0), 1.0),
1498
+ ((1.0, 0.0, 0.5), 1.0),
1499
+ ((1.0, 0.0, 1.0), 0.0),
1500
+ ((0.0, np.inf, 0.0), 1.0),
1501
+ ((0.0, np.inf, 0.5), 0.0),
1502
+ ((0.0, np.inf, 1.0), 0.0),
1503
+ ((np.inf, 0.0, 0.0), 1.0),
1504
+ ((np.inf, 0.0, 0.5), 1.0),
1505
+ ((np.inf, 0.0, 1.0), 0.0),
1506
+ ((1.0, np.inf, 0.0), 1.0),
1507
+ ((1.0, np.inf, 0.5), 0.0),
1508
+ ((1.0, np.inf, 1.0), 0.0),
1509
+ ((np.inf, 1.0, 0.0), 1.0),
1510
+ ((np.inf, 1.0, 0.5), 1.0),
1511
+ ((np.inf, 1.0, 1.0), 0.0),
1512
+ ]
1513
+ )
1514
+ def test_betaincc_edge_cases(self, args, expected):
1515
+ observed = special.betaincc(*args)
1516
+ assert_equal(observed, expected)
1517
+
1453
1518
  @pytest.mark.parametrize('dtype', [np.float32, np.float64])
1454
1519
  def test_gh21426(self, dtype):
1455
1520
  # Test for gh-21426: betaincinv must not return NaN
@@ -1492,10 +1557,13 @@ class TestCombinatorics:
1492
1557
  assert_allclose(special.comb([2, -1, 2, 10], [3, 3, -1, 3]), [0., 0., 0., 120.])
1493
1558
 
1494
1559
  @pytest.mark.thread_unsafe
1495
- def test_comb_exact_non_int_dep(self):
1560
+ def test_comb_exact_non_int_error(self):
1496
1561
  msg = "`exact=True`"
1497
- with pytest.deprecated_call(match=msg):
1562
+ with pytest.raises(ValueError, match=msg):
1498
1563
  special.comb(3.4, 4, exact=True)
1564
+ with pytest.raises(ValueError, match=msg):
1565
+ special.comb(3, 4.4, exact=True)
1566
+
1499
1567
 
1500
1568
  def test_perm(self):
1501
1569
  assert_allclose(special.perm([10, 10], [3, 4]), [720., 5040.])
@@ -1515,17 +1583,12 @@ class TestCombinatorics:
1515
1583
  with pytest.raises(ValueError, match="scalar integers"):
1516
1584
  special.perm([1, 2], [4, 5], exact=True)
1517
1585
 
1518
- # Non-integral scalars with N < k, or N,k < 0 used to return 0, this is now
1519
- # deprecated and will raise an error in SciPy 1.16.0
1520
- with pytest.deprecated_call(match="Non-integer"):
1586
+ with pytest.raises(ValueError, match="Non-integer"):
1521
1587
  special.perm(4.6, 6, exact=True)
1522
- with pytest.deprecated_call(match="Non-integer"):
1588
+ with pytest.raises(ValueError, match="Non-integer"):
1523
1589
  special.perm(-4.6, 3, exact=True)
1524
- with pytest.deprecated_call(match="Non-integer"):
1590
+ with pytest.raises(ValueError, match="Non-integer"):
1525
1591
  special.perm(4, -3.9, exact=True)
1526
-
1527
- # Non-integral scalars which aren't included in the cases above an raise an
1528
- # error directly without deprecation as this code never worked
1529
1592
  with pytest.raises(ValueError, match="Non-integer"):
1530
1593
  special.perm(6.0, 4.6, exact=True)
1531
1594
 
@@ -2353,6 +2416,7 @@ class TestFactorialFunctions:
2353
2416
  assert_func(special.factorialk(n, 3, exact=exact),
2354
2417
  np.array(exp_nucleus[3], ndmin=level))
2355
2418
 
2419
+ @pytest.mark.fail_slow(5)
2356
2420
  @pytest.mark.parametrize("dtype", [np.uint8, np.uint16, np.uint32, np.uint64])
2357
2421
  @pytest.mark.parametrize("exact,extend",
2358
2422
  [(True, "zero"), (False, "zero"), (False, "complex")])
@@ -2366,10 +2430,38 @@ class TestFactorialFunctions:
2366
2430
  assert_func(special.factorial2(n, **kw), special.factorial2(n_ref, **kw))
2367
2431
  assert_func(special.factorialk(n, k=3, **kw),
2368
2432
  special.factorialk(n_ref, k=3, **kw))
2433
+ def _check_inf(n):
2434
+ # produce inf of same type/dimension
2435
+ with suppress_warnings() as sup:
2436
+ sup.filter(RuntimeWarning)
2437
+ shaped_inf = n / 0
2438
+ assert_func(special.factorial(n, **kw), shaped_inf)
2439
+ assert_func(special.factorial2(n, **kw), shaped_inf)
2440
+ assert_func(special.factorialk(n, k=3, **kw), shaped_inf)
2441
+
2369
2442
  _check(dtype(0))
2370
2443
  _check(dtype(1))
2371
2444
  _check(np.array(0, dtype=dtype))
2372
2445
  _check(np.array([0, 1], dtype=dtype))
2446
+ # test that maximal uint values work as well
2447
+ N = dtype(np.iinfo(dtype).max)
2448
+ # TODO: cannot use N itself yet; factorial uses `gamma(N+1)` resp. `(hi+lo)//2`
2449
+ if dtype == np.uint64:
2450
+ if exact:
2451
+ # avoid attempting huge calculation
2452
+ pass
2453
+ elif np.lib.NumpyVersion(np.__version__) >= "2.0.0":
2454
+ # N does not fit into int64 --> cannot use _check
2455
+ _check_inf(dtype(N-1))
2456
+ _check_inf(np.array(N-1, dtype=dtype))
2457
+ _check_inf(np.array([N-1], dtype=dtype))
2458
+ elif dtype in [np.uint8, np.uint16] or not exact:
2459
+ # factorial(65535, exact=True) has 287189 digits and is calculated almost
2460
+ # instantaneously on modern hardware; however, dtypes bigger than uint16
2461
+ # would blow up runtime and memory consumption for exact=True
2462
+ _check(N-1)
2463
+ _check(np.array(N-1, dtype=dtype))
2464
+ _check(np.array([N-2, N-1], dtype=dtype))
2373
2465
 
2374
2466
  # note that n=170 is the last integer such that factorial(n) fits float64
2375
2467
  @pytest.mark.parametrize('n', range(30, 180, 10))
@@ -2965,10 +3057,10 @@ class TestGamma:
2965
3057
  pts = [0.25,
2966
3058
  np.nextafter(0.25, 0), 0.25 - 1e-12,
2967
3059
  np.nextafter(0.25, 1), 0.25 + 1e-12]
2968
- for xp in pts:
2969
- y = special.gammaincinv(.4, xp)
3060
+ for pt in pts:
3061
+ y = special.gammaincinv(.4, pt)
2970
3062
  x = special.gammainc(0.4, y)
2971
- assert_allclose(x, xp, rtol=1e-12)
3063
+ assert_allclose(x, pt, rtol=1e-12)
2972
3064
 
2973
3065
  def test_rgamma(self):
2974
3066
  rgam = special.rgamma(8)
@@ -3241,7 +3333,7 @@ class TestHyper:
3241
3333
  ]
3242
3334
  for i, (a, b, c, x, v) in enumerate(values):
3243
3335
  cv = special.hyp2f1(a, b, c, x)
3244
- assert_almost_equal(cv, v, 8, err_msg='test #%d' % i)
3336
+ assert_almost_equal(cv, v, 8, err_msg=f'test #{i}')
3245
3337
 
3246
3338
  def test_hyperu(self):
3247
3339
  val1 = special.hyperu(1,0.1,100)
@@ -3307,7 +3399,7 @@ class TestBessel:
3307
3399
  ]
3308
3400
  for i, (v, x, y) in enumerate(values):
3309
3401
  yc = special.jv(v, x)
3310
- assert_almost_equal(yc, y, 8, err_msg='test #%d' % i)
3402
+ assert_almost_equal(yc, y, 8, err_msg=f'test #{i}')
3311
3403
 
3312
3404
  def test_negv_jve(self):
3313
3405
  assert_almost_equal(special.jve(-3,2), -special.jve(3,2), 14)
@@ -3379,7 +3471,7 @@ class TestBessel:
3379
3471
  elif tt == 1:
3380
3472
  assert_allclose(jnp(nn, zz), 0, atol=1e-6)
3381
3473
  else:
3382
- raise AssertionError("Invalid t return for nt=%d" % nt)
3474
+ raise AssertionError(f"Invalid t return for nt={nt}")
3383
3475
 
3384
3476
  def test_jnp_zeros(self):
3385
3477
  jnp = special.jnp_zeros(1,5)
@@ -3799,7 +3891,7 @@ class TestBessel:
3799
3891
  ]
3800
3892
  for i, (x, v) in enumerate(values):
3801
3893
  cv = special.i0(x) * exp(-x)
3802
- assert_almost_equal(cv, v, 8, err_msg='test #%d' % i)
3894
+ assert_almost_equal(cv, v, 8, err_msg=f'test #{i}')
3803
3895
 
3804
3896
  def test_i0e(self):
3805
3897
  oize = special.i0e(.1)
@@ -3817,7 +3909,7 @@ class TestBessel:
3817
3909
  ]
3818
3910
  for i, (x, v) in enumerate(values):
3819
3911
  cv = special.i1(x) * exp(-x)
3820
- assert_almost_equal(cv, v, 8, err_msg='test #%d' % i)
3912
+ assert_almost_equal(cv, v, 8, err_msg=f'test #{i}')
3821
3913
 
3822
3914
  def test_i1e(self):
3823
3915
  oi1e = special.i1e(.1)
@@ -4224,6 +4316,47 @@ def test_ch2_inf():
4224
4316
  assert_equal(special.chdtr(0.7,np.inf), 1.0)
4225
4317
 
4226
4318
 
4319
+ @pytest.mark.parametrize("x", [-np.inf, -1.0, -0.0, 0.0, np.inf, np.nan])
4320
+ def test_chi2_v_nan(x):
4321
+ assert np.isnan(special.chdtr(np.nan, x))
4322
+
4323
+
4324
+ @pytest.mark.parametrize("v", [-np.inf, -1.0, -0.0, 0.0, np.inf, np.nan])
4325
+ def test_chi2_x_nan(v):
4326
+ assert np.isnan(special.chdtr(v, np.nan))
4327
+
4328
+
4329
+ @pytest.mark.parametrize("x", [-np.inf, -1.0, -0.0, 0.0, np.inf, np.nan])
4330
+ def test_chi2c_v_nan(x):
4331
+ assert np.isnan(special.chdtrc(np.nan, x))
4332
+
4333
+
4334
+ @pytest.mark.parametrize("v", [-np.inf, -1.0, -0.0, 0.0, np.inf, np.nan])
4335
+ def test_chi2c_x_nan(v):
4336
+ assert np.isnan(special.chdtrc(v, np.nan))
4337
+
4338
+
4339
+ def test_chi2_edgecases_gh20972():
4340
+ # Tests that a variety of edgecases for chi square distribution functions
4341
+ # correctly return NaN when and only when they are supposed to, when
4342
+ # computed through different related ufuncs. See gh-20972.
4343
+ v = np.asarray([-0.01, 0, 0.01, 1, np.inf])[:, np.newaxis]
4344
+ x = np.asarray([-np.inf, -0.01, 0, 0.01, np.inf])
4345
+
4346
+ # Check that `gammainc` is NaN when it should be and finite otherwise
4347
+ ref = special.gammainc(v / 2, x / 2)
4348
+ mask = (x < 0) | (v < 0) | (x == 0) & (v == 0) | np.isinf(v) & np.isinf(x)
4349
+ assert np.all(np.isnan(ref[mask]))
4350
+ assert np.all(np.isfinite(ref[~mask]))
4351
+
4352
+ # Use `gammainc` as a reference for the rest
4353
+ assert_allclose(special.chdtr(v, x), ref)
4354
+ assert_allclose(special.gdtr(1, v / 2, x / 2), ref)
4355
+ assert_allclose(1 - special.gammaincc(v / 2, x / 2), ref)
4356
+ assert_allclose(1 - special.chdtrc(v, x), ref)
4357
+ assert_allclose(1 - special.gdtrc(1, v / 2, x / 2), ref)
4358
+
4359
+
4227
4360
  def test_chi2c_smalldf():
4228
4361
  assert_almost_equal(special.chdtrc(0.6,3), 1-0.957890536704110)
4229
4362
 
@@ -59,3 +59,6 @@ def test_landau():
59
59
  assert_allclose(ppf, x)
60
60
  isf = scu._landau_isf(sf, *args)
61
61
  assert_allclose(isf, x, rtol=1e-6)
62
+
63
+ def test_gh22956():
64
+ _ = scu._ncx2_pdf(30, 1e307, 16)
@@ -3,14 +3,12 @@ Test cdflib functions versus mpmath, if available.
3
3
 
4
4
  The following functions still need tests:
5
5
 
6
- - ncfdtri
7
6
  - ncfdtridfn
8
7
  - ncfdtridfd
9
8
  - ncfdtrinc
10
9
  - nbdtrik
11
10
  - nbdtrin
12
11
  - pdtrik
13
- - nctdtrit
14
12
  - nctdtridf
15
13
  - nctdtrinc
16
14
 
@@ -492,7 +490,7 @@ def test_bdtrik_nbdtrik_inf():
492
490
 
493
491
 
494
492
  @pytest.mark.parametrize(
495
- "dfn,dfd,nc,f,expected",
493
+ "dfn,dfd,nc,f,expected_cdf",
496
494
  [[100.0, 0.1, 0.1, 100.0, 0.29787396410092676],
497
495
  [100.0, 100.0, 0.01, 0.1, 4.4344737598690424e-26],
498
496
  [100.0, 0.01, 0.1, 0.01, 0.002848616633080384],
@@ -506,7 +504,7 @@ def test_bdtrik_nbdtrik_inf():
506
504
  [100.0, 100.0, 0.1, 10.0, 1.0],
507
505
  [1.0, 0.1, 100.0, 10.0, 0.02926064279680897]]
508
506
  )
509
- def test_ncfdtr(dfn, dfd, nc, f, expected):
507
+ def test_ncfdtr_ncfdtri(dfn, dfd, nc, f, expected_cdf):
510
508
  # Reference values computed with mpmath with the following script
511
509
  #
512
510
  # import numpy as np
@@ -549,10 +547,26 @@ def test_ncfdtr(dfn, dfd, nc, f, expected):
549
547
  # rng = np.random.default_rng(1234)
550
548
  # sample_idx = rng.choice(len(re), replace=False, size=12)
551
549
  # cases = np.array(cases)[sample_idx].tolist()
552
- assert_allclose(sp.ncfdtr(dfn, dfd, nc, f), expected, rtol=1e-13, atol=0)
550
+ assert_allclose(sp.ncfdtr(dfn, dfd, nc, f), expected_cdf, rtol=1e-13, atol=0)
551
+ # testing tails where the CDF reaches 0 or 1 does not make sense for inverses
552
+ # of a CDF as they are not bijective in these regions
553
+ if 0 < expected_cdf < 1:
554
+ assert_allclose(sp.ncfdtri(dfn, dfd, nc, expected_cdf), f, rtol=5e-11)
553
555
 
556
+ @pytest.mark.parametrize(
557
+ "args",
558
+ [(-1.0, 0.1, 0.1, 0.5),
559
+ (1, -1.0, 0.1, 0.5),
560
+ (1, 1, -1.0, 0.5),
561
+ (1, 1, 1, 100),
562
+ (1, 1, 1, -1)]
563
+ )
564
+ def test_ncfdtri_domain_error(args):
565
+ with sp.errstate(domain="raise"):
566
+ with pytest.raises(sp.SpecialFunctionError, match="domain"):
567
+ sp.ncfdtri(*args)
554
568
 
555
- class TestNctdtr:
569
+ class TestNoncentralTFunctions:
556
570
 
557
571
  # Reference values computed with mpmath with the following script
558
572
  # Formula from:
@@ -592,7 +606,7 @@ class TestNctdtr:
592
606
  # result = mp.one - f(df, -nc, x)
593
607
  # return float(result)
594
608
 
595
- @pytest.mark.parametrize("df, nc, x, expected", [
609
+ @pytest.mark.parametrize("df, nc, x, expected_cdf", [
596
610
  (0.98, -3.8, 0.0015, 0.9999279987514815),
597
611
  (0.98, -3.8, 0.15, 0.9999528361700505),
598
612
  (0.98, -3.8, 1.5, 0.9999908823016942),
@@ -660,13 +674,13 @@ class TestNctdtr:
660
674
  reason="Bug in underlying Boost math implementation")),
661
675
  (980, 38, 15, 5.407535300713606e-105)
662
676
  ])
663
- def test_gh19896(self, df, nc, x, expected):
677
+ def test_gh19896(self, df, nc, x, expected_cdf):
664
678
  # test that gh-19896 is resolved.
665
679
  # Originally this was a regression test that used the old Fortran results
666
680
  # as a reference. The Fortran results were not accurate, so the reference
667
681
  # values were recomputed with mpmath.
668
- result = sp.nctdtr(df, nc, x)
669
- assert_allclose(result, expected, rtol=1e-13, atol=1e-303)
682
+ nctdtr_result = sp.nctdtr(df, nc, x)
683
+ assert_allclose(nctdtr_result, expected_cdf, rtol=1e-13, atol=1e-303)
670
684
 
671
685
  def test_nctdtr_gh8344(self):
672
686
  # test that gh-8344 is resolved.
@@ -684,5 +698,15 @@ class TestNctdtr:
684
698
  [1., 1., -np.inf, 0.0, 0.0]
685
699
  ]
686
700
  )
687
- def test_accuracy(self, df, nc, x, expected, rtol):
701
+ def test_nctdtr_accuracy(self, df, nc, x, expected, rtol):
688
702
  assert_allclose(sp.nctdtr(df, nc, x), expected, rtol=rtol)
703
+
704
+ @pytest.mark.parametrize("df, nc, x, expected_cdf", [
705
+ (0.98, 38, 1.5, 2.591995360483094e-97),
706
+ (3000, 3, 0.1, 0.0018657780826323328),
707
+ (0.98, -3.8, 15, 0.9999990264591945),
708
+ (9.8, 38, 15, 2.252076291604796e-09),
709
+
710
+ ])
711
+ def test_nctdtrit(self, df, nc, x, expected_cdf):
712
+ assert_allclose(sp.nctdtrit(df, nc, expected_cdf), x, rtol=1e-10)