numba-cuda 0.22.0__cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_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.

Potentially problematic release.


This version of numba-cuda might be problematic. Click here for more details.

Files changed (487) hide show
  1. _numba_cuda_redirector.pth +4 -0
  2. _numba_cuda_redirector.py +89 -0
  3. numba_cuda/VERSION +1 -0
  4. numba_cuda/__init__.py +6 -0
  5. numba_cuda/_version.py +11 -0
  6. numba_cuda/numba/cuda/__init__.py +70 -0
  7. numba_cuda/numba/cuda/_internal/cuda_bf16.py +16394 -0
  8. numba_cuda/numba/cuda/_internal/cuda_fp16.py +8112 -0
  9. numba_cuda/numba/cuda/api.py +580 -0
  10. numba_cuda/numba/cuda/api_util.py +76 -0
  11. numba_cuda/numba/cuda/args.py +72 -0
  12. numba_cuda/numba/cuda/bf16.py +397 -0
  13. numba_cuda/numba/cuda/cache_hints.py +287 -0
  14. numba_cuda/numba/cuda/cext/__init__.py +2 -0
  15. numba_cuda/numba/cuda/cext/_devicearray.cpp +159 -0
  16. numba_cuda/numba/cuda/cext/_devicearray.cpython-312-aarch64-linux-gnu.so +0 -0
  17. numba_cuda/numba/cuda/cext/_devicearray.h +29 -0
  18. numba_cuda/numba/cuda/cext/_dispatcher.cpp +1098 -0
  19. numba_cuda/numba/cuda/cext/_dispatcher.cpython-312-aarch64-linux-gnu.so +0 -0
  20. numba_cuda/numba/cuda/cext/_hashtable.cpp +532 -0
  21. numba_cuda/numba/cuda/cext/_hashtable.h +135 -0
  22. numba_cuda/numba/cuda/cext/_helperlib.c +71 -0
  23. numba_cuda/numba/cuda/cext/_helperlib.cpython-312-aarch64-linux-gnu.so +0 -0
  24. numba_cuda/numba/cuda/cext/_helpermod.c +82 -0
  25. numba_cuda/numba/cuda/cext/_pymodule.h +38 -0
  26. numba_cuda/numba/cuda/cext/_typeconv.cpp +206 -0
  27. numba_cuda/numba/cuda/cext/_typeconv.cpython-312-aarch64-linux-gnu.so +0 -0
  28. numba_cuda/numba/cuda/cext/_typeof.cpp +1159 -0
  29. numba_cuda/numba/cuda/cext/_typeof.h +19 -0
  30. numba_cuda/numba/cuda/cext/capsulethunk.h +111 -0
  31. numba_cuda/numba/cuda/cext/mviewbuf.c +385 -0
  32. numba_cuda/numba/cuda/cext/mviewbuf.cpython-312-aarch64-linux-gnu.so +0 -0
  33. numba_cuda/numba/cuda/cext/typeconv.cpp +212 -0
  34. numba_cuda/numba/cuda/cext/typeconv.hpp +101 -0
  35. numba_cuda/numba/cuda/cg.py +67 -0
  36. numba_cuda/numba/cuda/cgutils.py +1294 -0
  37. numba_cuda/numba/cuda/cloudpickle/__init__.py +21 -0
  38. numba_cuda/numba/cuda/cloudpickle/cloudpickle.py +1598 -0
  39. numba_cuda/numba/cuda/cloudpickle/cloudpickle_fast.py +17 -0
  40. numba_cuda/numba/cuda/codegen.py +541 -0
  41. numba_cuda/numba/cuda/compiler.py +1396 -0
  42. numba_cuda/numba/cuda/core/analysis.py +758 -0
  43. numba_cuda/numba/cuda/core/annotations/__init__.py +0 -0
  44. numba_cuda/numba/cuda/core/annotations/pretty_annotate.py +288 -0
  45. numba_cuda/numba/cuda/core/annotations/type_annotations.py +305 -0
  46. numba_cuda/numba/cuda/core/base.py +1332 -0
  47. numba_cuda/numba/cuda/core/boxing.py +1411 -0
  48. numba_cuda/numba/cuda/core/bytecode.py +728 -0
  49. numba_cuda/numba/cuda/core/byteflow.py +2346 -0
  50. numba_cuda/numba/cuda/core/caching.py +744 -0
  51. numba_cuda/numba/cuda/core/callconv.py +392 -0
  52. numba_cuda/numba/cuda/core/codegen.py +171 -0
  53. numba_cuda/numba/cuda/core/compiler.py +199 -0
  54. numba_cuda/numba/cuda/core/compiler_lock.py +85 -0
  55. numba_cuda/numba/cuda/core/compiler_machinery.py +497 -0
  56. numba_cuda/numba/cuda/core/config.py +650 -0
  57. numba_cuda/numba/cuda/core/consts.py +124 -0
  58. numba_cuda/numba/cuda/core/controlflow.py +989 -0
  59. numba_cuda/numba/cuda/core/entrypoints.py +57 -0
  60. numba_cuda/numba/cuda/core/environment.py +66 -0
  61. numba_cuda/numba/cuda/core/errors.py +917 -0
  62. numba_cuda/numba/cuda/core/event.py +511 -0
  63. numba_cuda/numba/cuda/core/funcdesc.py +330 -0
  64. numba_cuda/numba/cuda/core/generators.py +387 -0
  65. numba_cuda/numba/cuda/core/imputils.py +509 -0
  66. numba_cuda/numba/cuda/core/inline_closurecall.py +1787 -0
  67. numba_cuda/numba/cuda/core/interpreter.py +3617 -0
  68. numba_cuda/numba/cuda/core/ir.py +1812 -0
  69. numba_cuda/numba/cuda/core/ir_utils.py +2638 -0
  70. numba_cuda/numba/cuda/core/optional.py +129 -0
  71. numba_cuda/numba/cuda/core/options.py +262 -0
  72. numba_cuda/numba/cuda/core/postproc.py +249 -0
  73. numba_cuda/numba/cuda/core/pythonapi.py +1859 -0
  74. numba_cuda/numba/cuda/core/registry.py +46 -0
  75. numba_cuda/numba/cuda/core/removerefctpass.py +123 -0
  76. numba_cuda/numba/cuda/core/rewrites/__init__.py +26 -0
  77. numba_cuda/numba/cuda/core/rewrites/ir_print.py +91 -0
  78. numba_cuda/numba/cuda/core/rewrites/registry.py +104 -0
  79. numba_cuda/numba/cuda/core/rewrites/static_binop.py +41 -0
  80. numba_cuda/numba/cuda/core/rewrites/static_getitem.py +189 -0
  81. numba_cuda/numba/cuda/core/rewrites/static_raise.py +100 -0
  82. numba_cuda/numba/cuda/core/sigutils.py +68 -0
  83. numba_cuda/numba/cuda/core/ssa.py +498 -0
  84. numba_cuda/numba/cuda/core/targetconfig.py +330 -0
  85. numba_cuda/numba/cuda/core/tracing.py +231 -0
  86. numba_cuda/numba/cuda/core/transforms.py +956 -0
  87. numba_cuda/numba/cuda/core/typed_passes.py +867 -0
  88. numba_cuda/numba/cuda/core/typeinfer.py +1950 -0
  89. numba_cuda/numba/cuda/core/unsafe/__init__.py +0 -0
  90. numba_cuda/numba/cuda/core/unsafe/bytes.py +67 -0
  91. numba_cuda/numba/cuda/core/unsafe/eh.py +67 -0
  92. numba_cuda/numba/cuda/core/unsafe/refcount.py +98 -0
  93. numba_cuda/numba/cuda/core/untyped_passes.py +1979 -0
  94. numba_cuda/numba/cuda/cpython/builtins.py +1153 -0
  95. numba_cuda/numba/cuda/cpython/charseq.py +1218 -0
  96. numba_cuda/numba/cuda/cpython/cmathimpl.py +560 -0
  97. numba_cuda/numba/cuda/cpython/enumimpl.py +103 -0
  98. numba_cuda/numba/cuda/cpython/iterators.py +167 -0
  99. numba_cuda/numba/cuda/cpython/listobj.py +1326 -0
  100. numba_cuda/numba/cuda/cpython/mathimpl.py +499 -0
  101. numba_cuda/numba/cuda/cpython/numbers.py +1475 -0
  102. numba_cuda/numba/cuda/cpython/rangeobj.py +289 -0
  103. numba_cuda/numba/cuda/cpython/slicing.py +322 -0
  104. numba_cuda/numba/cuda/cpython/tupleobj.py +456 -0
  105. numba_cuda/numba/cuda/cpython/unicode.py +2865 -0
  106. numba_cuda/numba/cuda/cpython/unicode_support.py +1597 -0
  107. numba_cuda/numba/cuda/cpython/unsafe/__init__.py +0 -0
  108. numba_cuda/numba/cuda/cpython/unsafe/numbers.py +64 -0
  109. numba_cuda/numba/cuda/cpython/unsafe/tuple.py +92 -0
  110. numba_cuda/numba/cuda/cuda_paths.py +691 -0
  111. numba_cuda/numba/cuda/cudadecl.py +543 -0
  112. numba_cuda/numba/cuda/cudadrv/__init__.py +14 -0
  113. numba_cuda/numba/cuda/cudadrv/devicearray.py +954 -0
  114. numba_cuda/numba/cuda/cudadrv/devices.py +249 -0
  115. numba_cuda/numba/cuda/cudadrv/driver.py +3238 -0
  116. numba_cuda/numba/cuda/cudadrv/drvapi.py +435 -0
  117. numba_cuda/numba/cuda/cudadrv/dummyarray.py +562 -0
  118. numba_cuda/numba/cuda/cudadrv/enums.py +613 -0
  119. numba_cuda/numba/cuda/cudadrv/error.py +48 -0
  120. numba_cuda/numba/cuda/cudadrv/libs.py +220 -0
  121. numba_cuda/numba/cuda/cudadrv/linkable_code.py +184 -0
  122. numba_cuda/numba/cuda/cudadrv/mappings.py +14 -0
  123. numba_cuda/numba/cuda/cudadrv/ndarray.py +26 -0
  124. numba_cuda/numba/cuda/cudadrv/nvrtc.py +193 -0
  125. numba_cuda/numba/cuda/cudadrv/nvvm.py +756 -0
  126. numba_cuda/numba/cuda/cudadrv/rtapi.py +13 -0
  127. numba_cuda/numba/cuda/cudadrv/runtime.py +34 -0
  128. numba_cuda/numba/cuda/cudaimpl.py +983 -0
  129. numba_cuda/numba/cuda/cudamath.py +149 -0
  130. numba_cuda/numba/cuda/datamodel/__init__.py +7 -0
  131. numba_cuda/numba/cuda/datamodel/cuda_manager.py +66 -0
  132. numba_cuda/numba/cuda/datamodel/cuda_models.py +1446 -0
  133. numba_cuda/numba/cuda/datamodel/cuda_packer.py +224 -0
  134. numba_cuda/numba/cuda/datamodel/cuda_registry.py +22 -0
  135. numba_cuda/numba/cuda/datamodel/cuda_testing.py +153 -0
  136. numba_cuda/numba/cuda/datamodel/manager.py +11 -0
  137. numba_cuda/numba/cuda/datamodel/models.py +9 -0
  138. numba_cuda/numba/cuda/datamodel/packer.py +9 -0
  139. numba_cuda/numba/cuda/datamodel/registry.py +11 -0
  140. numba_cuda/numba/cuda/datamodel/testing.py +11 -0
  141. numba_cuda/numba/cuda/debuginfo.py +997 -0
  142. numba_cuda/numba/cuda/decorators.py +294 -0
  143. numba_cuda/numba/cuda/descriptor.py +35 -0
  144. numba_cuda/numba/cuda/device_init.py +155 -0
  145. numba_cuda/numba/cuda/deviceufunc.py +1021 -0
  146. numba_cuda/numba/cuda/dispatcher.py +2463 -0
  147. numba_cuda/numba/cuda/errors.py +72 -0
  148. numba_cuda/numba/cuda/extending.py +697 -0
  149. numba_cuda/numba/cuda/flags.py +178 -0
  150. numba_cuda/numba/cuda/fp16.py +357 -0
  151. numba_cuda/numba/cuda/include/12/cuda_bf16.h +5118 -0
  152. numba_cuda/numba/cuda/include/12/cuda_bf16.hpp +3865 -0
  153. numba_cuda/numba/cuda/include/12/cuda_fp16.h +5363 -0
  154. numba_cuda/numba/cuda/include/12/cuda_fp16.hpp +3483 -0
  155. numba_cuda/numba/cuda/include/13/cuda_bf16.h +5118 -0
  156. numba_cuda/numba/cuda/include/13/cuda_bf16.hpp +3865 -0
  157. numba_cuda/numba/cuda/include/13/cuda_fp16.h +5363 -0
  158. numba_cuda/numba/cuda/include/13/cuda_fp16.hpp +3483 -0
  159. numba_cuda/numba/cuda/initialize.py +24 -0
  160. numba_cuda/numba/cuda/intrinsics.py +531 -0
  161. numba_cuda/numba/cuda/itanium_mangler.py +214 -0
  162. numba_cuda/numba/cuda/kernels/__init__.py +2 -0
  163. numba_cuda/numba/cuda/kernels/reduction.py +265 -0
  164. numba_cuda/numba/cuda/kernels/transpose.py +65 -0
  165. numba_cuda/numba/cuda/libdevice.py +3386 -0
  166. numba_cuda/numba/cuda/libdevicedecl.py +20 -0
  167. numba_cuda/numba/cuda/libdevicefuncs.py +1060 -0
  168. numba_cuda/numba/cuda/libdeviceimpl.py +88 -0
  169. numba_cuda/numba/cuda/locks.py +19 -0
  170. numba_cuda/numba/cuda/lowering.py +1980 -0
  171. numba_cuda/numba/cuda/mathimpl.py +374 -0
  172. numba_cuda/numba/cuda/memory_management/__init__.py +4 -0
  173. numba_cuda/numba/cuda/memory_management/memsys.cu +99 -0
  174. numba_cuda/numba/cuda/memory_management/memsys.cuh +22 -0
  175. numba_cuda/numba/cuda/memory_management/nrt.cu +212 -0
  176. numba_cuda/numba/cuda/memory_management/nrt.cuh +48 -0
  177. numba_cuda/numba/cuda/memory_management/nrt.py +390 -0
  178. numba_cuda/numba/cuda/memory_management/nrt_context.py +438 -0
  179. numba_cuda/numba/cuda/misc/appdirs.py +594 -0
  180. numba_cuda/numba/cuda/misc/cffiimpl.py +24 -0
  181. numba_cuda/numba/cuda/misc/coverage_support.py +43 -0
  182. numba_cuda/numba/cuda/misc/dump_style.py +41 -0
  183. numba_cuda/numba/cuda/misc/findlib.py +75 -0
  184. numba_cuda/numba/cuda/misc/firstlinefinder.py +96 -0
  185. numba_cuda/numba/cuda/misc/gdb_hook.py +240 -0
  186. numba_cuda/numba/cuda/misc/literal.py +28 -0
  187. numba_cuda/numba/cuda/misc/llvm_pass_timings.py +412 -0
  188. numba_cuda/numba/cuda/misc/special.py +94 -0
  189. numba_cuda/numba/cuda/models.py +56 -0
  190. numba_cuda/numba/cuda/np/arraymath.py +5130 -0
  191. numba_cuda/numba/cuda/np/arrayobj.py +7635 -0
  192. numba_cuda/numba/cuda/np/extensions.py +11 -0
  193. numba_cuda/numba/cuda/np/linalg.py +3087 -0
  194. numba_cuda/numba/cuda/np/math/__init__.py +0 -0
  195. numba_cuda/numba/cuda/np/math/cmathimpl.py +558 -0
  196. numba_cuda/numba/cuda/np/math/mathimpl.py +487 -0
  197. numba_cuda/numba/cuda/np/math/numbers.py +1461 -0
  198. numba_cuda/numba/cuda/np/npdatetime.py +969 -0
  199. numba_cuda/numba/cuda/np/npdatetime_helpers.py +217 -0
  200. numba_cuda/numba/cuda/np/npyfuncs.py +1808 -0
  201. numba_cuda/numba/cuda/np/npyimpl.py +1027 -0
  202. numba_cuda/numba/cuda/np/numpy_support.py +798 -0
  203. numba_cuda/numba/cuda/np/polynomial/__init__.py +4 -0
  204. numba_cuda/numba/cuda/np/polynomial/polynomial_core.py +242 -0
  205. numba_cuda/numba/cuda/np/polynomial/polynomial_functions.py +380 -0
  206. numba_cuda/numba/cuda/np/ufunc/__init__.py +4 -0
  207. numba_cuda/numba/cuda/np/ufunc/decorators.py +203 -0
  208. numba_cuda/numba/cuda/np/ufunc/sigparse.py +68 -0
  209. numba_cuda/numba/cuda/np/ufunc/ufuncbuilder.py +65 -0
  210. numba_cuda/numba/cuda/np/ufunc_db.py +1282 -0
  211. numba_cuda/numba/cuda/np/unsafe/__init__.py +0 -0
  212. numba_cuda/numba/cuda/np/unsafe/ndarray.py +84 -0
  213. numba_cuda/numba/cuda/nvvmutils.py +254 -0
  214. numba_cuda/numba/cuda/printimpl.py +126 -0
  215. numba_cuda/numba/cuda/random.py +308 -0
  216. numba_cuda/numba/cuda/reshape_funcs.cu +156 -0
  217. numba_cuda/numba/cuda/serialize.py +267 -0
  218. numba_cuda/numba/cuda/simulator/__init__.py +63 -0
  219. numba_cuda/numba/cuda/simulator/_internal/__init__.py +4 -0
  220. numba_cuda/numba/cuda/simulator/_internal/cuda_bf16.py +2 -0
  221. numba_cuda/numba/cuda/simulator/api.py +179 -0
  222. numba_cuda/numba/cuda/simulator/bf16.py +4 -0
  223. numba_cuda/numba/cuda/simulator/compiler.py +38 -0
  224. numba_cuda/numba/cuda/simulator/cudadrv/__init__.py +11 -0
  225. numba_cuda/numba/cuda/simulator/cudadrv/devicearray.py +462 -0
  226. numba_cuda/numba/cuda/simulator/cudadrv/devices.py +122 -0
  227. numba_cuda/numba/cuda/simulator/cudadrv/driver.py +66 -0
  228. numba_cuda/numba/cuda/simulator/cudadrv/drvapi.py +7 -0
  229. numba_cuda/numba/cuda/simulator/cudadrv/dummyarray.py +7 -0
  230. numba_cuda/numba/cuda/simulator/cudadrv/error.py +10 -0
  231. numba_cuda/numba/cuda/simulator/cudadrv/libs.py +10 -0
  232. numba_cuda/numba/cuda/simulator/cudadrv/linkable_code.py +61 -0
  233. numba_cuda/numba/cuda/simulator/cudadrv/nvrtc.py +11 -0
  234. numba_cuda/numba/cuda/simulator/cudadrv/nvvm.py +32 -0
  235. numba_cuda/numba/cuda/simulator/cudadrv/runtime.py +22 -0
  236. numba_cuda/numba/cuda/simulator/dispatcher.py +11 -0
  237. numba_cuda/numba/cuda/simulator/kernel.py +320 -0
  238. numba_cuda/numba/cuda/simulator/kernelapi.py +509 -0
  239. numba_cuda/numba/cuda/simulator/memory_management/__init__.py +4 -0
  240. numba_cuda/numba/cuda/simulator/memory_management/nrt.py +21 -0
  241. numba_cuda/numba/cuda/simulator/reduction.py +19 -0
  242. numba_cuda/numba/cuda/simulator/tests/support.py +4 -0
  243. numba_cuda/numba/cuda/simulator/vector_types.py +65 -0
  244. numba_cuda/numba/cuda/simulator_init.py +18 -0
  245. numba_cuda/numba/cuda/stubs.py +624 -0
  246. numba_cuda/numba/cuda/target.py +505 -0
  247. numba_cuda/numba/cuda/testing.py +347 -0
  248. numba_cuda/numba/cuda/tests/__init__.py +62 -0
  249. numba_cuda/numba/cuda/tests/benchmarks/__init__.py +0 -0
  250. numba_cuda/numba/cuda/tests/benchmarks/test_kernel_launch.py +119 -0
  251. numba_cuda/numba/cuda/tests/cloudpickle_main_class.py +9 -0
  252. numba_cuda/numba/cuda/tests/core/serialize_usecases.py +113 -0
  253. numba_cuda/numba/cuda/tests/core/test_itanium_mangler.py +83 -0
  254. numba_cuda/numba/cuda/tests/core/test_serialize.py +371 -0
  255. numba_cuda/numba/cuda/tests/cudadrv/__init__.py +9 -0
  256. numba_cuda/numba/cuda/tests/cudadrv/test_array_attr.py +147 -0
  257. numba_cuda/numba/cuda/tests/cudadrv/test_context_stack.py +161 -0
  258. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_array_slicing.py +397 -0
  259. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_auto_context.py +24 -0
  260. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_devicerecord.py +180 -0
  261. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_driver.py +313 -0
  262. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_memory.py +191 -0
  263. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_ndarray.py +621 -0
  264. numba_cuda/numba/cuda/tests/cudadrv/test_deallocations.py +247 -0
  265. numba_cuda/numba/cuda/tests/cudadrv/test_detect.py +100 -0
  266. numba_cuda/numba/cuda/tests/cudadrv/test_emm_plugins.py +200 -0
  267. numba_cuda/numba/cuda/tests/cudadrv/test_events.py +53 -0
  268. numba_cuda/numba/cuda/tests/cudadrv/test_host_alloc.py +72 -0
  269. numba_cuda/numba/cuda/tests/cudadrv/test_init.py +138 -0
  270. numba_cuda/numba/cuda/tests/cudadrv/test_inline_ptx.py +43 -0
  271. numba_cuda/numba/cuda/tests/cudadrv/test_is_fp16.py +15 -0
  272. numba_cuda/numba/cuda/tests/cudadrv/test_linkable_code.py +58 -0
  273. numba_cuda/numba/cuda/tests/cudadrv/test_linker.py +348 -0
  274. numba_cuda/numba/cuda/tests/cudadrv/test_managed_alloc.py +128 -0
  275. numba_cuda/numba/cuda/tests/cudadrv/test_module_callbacks.py +301 -0
  276. numba_cuda/numba/cuda/tests/cudadrv/test_nvjitlink.py +174 -0
  277. numba_cuda/numba/cuda/tests/cudadrv/test_nvrtc.py +28 -0
  278. numba_cuda/numba/cuda/tests/cudadrv/test_nvvm_driver.py +185 -0
  279. numba_cuda/numba/cuda/tests/cudadrv/test_pinned.py +39 -0
  280. numba_cuda/numba/cuda/tests/cudadrv/test_profiler.py +23 -0
  281. numba_cuda/numba/cuda/tests/cudadrv/test_reset_device.py +38 -0
  282. numba_cuda/numba/cuda/tests/cudadrv/test_runtime.py +48 -0
  283. numba_cuda/numba/cuda/tests/cudadrv/test_select_device.py +44 -0
  284. numba_cuda/numba/cuda/tests/cudadrv/test_streams.py +127 -0
  285. numba_cuda/numba/cuda/tests/cudapy/__init__.py +9 -0
  286. numba_cuda/numba/cuda/tests/cudapy/cache_usecases.py +231 -0
  287. numba_cuda/numba/cuda/tests/cudapy/cache_with_cpu_usecases.py +50 -0
  288. numba_cuda/numba/cuda/tests/cudapy/cg_cache_usecases.py +36 -0
  289. numba_cuda/numba/cuda/tests/cudapy/complex_usecases.py +116 -0
  290. numba_cuda/numba/cuda/tests/cudapy/enum_usecases.py +59 -0
  291. numba_cuda/numba/cuda/tests/cudapy/extensions_usecases.py +62 -0
  292. numba_cuda/numba/cuda/tests/cudapy/jitlink.ptx +28 -0
  293. numba_cuda/numba/cuda/tests/cudapy/overload_usecases.py +33 -0
  294. numba_cuda/numba/cuda/tests/cudapy/recursion_usecases.py +104 -0
  295. numba_cuda/numba/cuda/tests/cudapy/test_alignment.py +47 -0
  296. numba_cuda/numba/cuda/tests/cudapy/test_analysis.py +1122 -0
  297. numba_cuda/numba/cuda/tests/cudapy/test_array.py +344 -0
  298. numba_cuda/numba/cuda/tests/cudapy/test_array_alignment.py +268 -0
  299. numba_cuda/numba/cuda/tests/cudapy/test_array_args.py +203 -0
  300. numba_cuda/numba/cuda/tests/cudapy/test_array_methods.py +63 -0
  301. numba_cuda/numba/cuda/tests/cudapy/test_array_reductions.py +360 -0
  302. numba_cuda/numba/cuda/tests/cudapy/test_atomics.py +1815 -0
  303. numba_cuda/numba/cuda/tests/cudapy/test_bfloat16.py +599 -0
  304. numba_cuda/numba/cuda/tests/cudapy/test_bfloat16_bindings.py +377 -0
  305. numba_cuda/numba/cuda/tests/cudapy/test_blackscholes.py +160 -0
  306. numba_cuda/numba/cuda/tests/cudapy/test_boolean.py +27 -0
  307. numba_cuda/numba/cuda/tests/cudapy/test_byteflow.py +98 -0
  308. numba_cuda/numba/cuda/tests/cudapy/test_cache_hints.py +210 -0
  309. numba_cuda/numba/cuda/tests/cudapy/test_caching.py +683 -0
  310. numba_cuda/numba/cuda/tests/cudapy/test_casting.py +265 -0
  311. numba_cuda/numba/cuda/tests/cudapy/test_cffi.py +42 -0
  312. numba_cuda/numba/cuda/tests/cudapy/test_compiler.py +718 -0
  313. numba_cuda/numba/cuda/tests/cudapy/test_complex.py +370 -0
  314. numba_cuda/numba/cuda/tests/cudapy/test_complex_kernel.py +23 -0
  315. numba_cuda/numba/cuda/tests/cudapy/test_const_string.py +142 -0
  316. numba_cuda/numba/cuda/tests/cudapy/test_constmem.py +178 -0
  317. numba_cuda/numba/cuda/tests/cudapy/test_cooperative_groups.py +193 -0
  318. numba_cuda/numba/cuda/tests/cudapy/test_copy_propagate.py +131 -0
  319. numba_cuda/numba/cuda/tests/cudapy/test_cuda_array_interface.py +438 -0
  320. numba_cuda/numba/cuda/tests/cudapy/test_cuda_jit_no_types.py +94 -0
  321. numba_cuda/numba/cuda/tests/cudapy/test_datetime.py +101 -0
  322. numba_cuda/numba/cuda/tests/cudapy/test_debug.py +105 -0
  323. numba_cuda/numba/cuda/tests/cudapy/test_debuginfo.py +978 -0
  324. numba_cuda/numba/cuda/tests/cudapy/test_debuginfo_types.py +476 -0
  325. numba_cuda/numba/cuda/tests/cudapy/test_device_func.py +500 -0
  326. numba_cuda/numba/cuda/tests/cudapy/test_dispatcher.py +820 -0
  327. numba_cuda/numba/cuda/tests/cudapy/test_enums.py +152 -0
  328. numba_cuda/numba/cuda/tests/cudapy/test_errors.py +111 -0
  329. numba_cuda/numba/cuda/tests/cudapy/test_exception.py +170 -0
  330. numba_cuda/numba/cuda/tests/cudapy/test_extending.py +1088 -0
  331. numba_cuda/numba/cuda/tests/cudapy/test_extending_types.py +71 -0
  332. numba_cuda/numba/cuda/tests/cudapy/test_fastmath.py +265 -0
  333. numba_cuda/numba/cuda/tests/cudapy/test_flow_control.py +1433 -0
  334. numba_cuda/numba/cuda/tests/cudapy/test_forall.py +57 -0
  335. numba_cuda/numba/cuda/tests/cudapy/test_freevar.py +34 -0
  336. numba_cuda/numba/cuda/tests/cudapy/test_frexp_ldexp.py +69 -0
  337. numba_cuda/numba/cuda/tests/cudapy/test_globals.py +62 -0
  338. numba_cuda/numba/cuda/tests/cudapy/test_gufunc.py +474 -0
  339. numba_cuda/numba/cuda/tests/cudapy/test_gufunc_scalar.py +167 -0
  340. numba_cuda/numba/cuda/tests/cudapy/test_gufunc_scheduling.py +92 -0
  341. numba_cuda/numba/cuda/tests/cudapy/test_idiv.py +39 -0
  342. numba_cuda/numba/cuda/tests/cudapy/test_inline.py +170 -0
  343. numba_cuda/numba/cuda/tests/cudapy/test_inspect.py +255 -0
  344. numba_cuda/numba/cuda/tests/cudapy/test_intrinsics.py +1219 -0
  345. numba_cuda/numba/cuda/tests/cudapy/test_ipc.py +263 -0
  346. numba_cuda/numba/cuda/tests/cudapy/test_ir.py +598 -0
  347. numba_cuda/numba/cuda/tests/cudapy/test_ir_utils.py +276 -0
  348. numba_cuda/numba/cuda/tests/cudapy/test_iterators.py +101 -0
  349. numba_cuda/numba/cuda/tests/cudapy/test_lang.py +68 -0
  350. numba_cuda/numba/cuda/tests/cudapy/test_laplace.py +123 -0
  351. numba_cuda/numba/cuda/tests/cudapy/test_libdevice.py +194 -0
  352. numba_cuda/numba/cuda/tests/cudapy/test_lineinfo.py +220 -0
  353. numba_cuda/numba/cuda/tests/cudapy/test_localmem.py +173 -0
  354. numba_cuda/numba/cuda/tests/cudapy/test_make_function_to_jit_function.py +364 -0
  355. numba_cuda/numba/cuda/tests/cudapy/test_mandel.py +47 -0
  356. numba_cuda/numba/cuda/tests/cudapy/test_math.py +842 -0
  357. numba_cuda/numba/cuda/tests/cudapy/test_matmul.py +76 -0
  358. numba_cuda/numba/cuda/tests/cudapy/test_minmax.py +78 -0
  359. numba_cuda/numba/cuda/tests/cudapy/test_montecarlo.py +25 -0
  360. numba_cuda/numba/cuda/tests/cudapy/test_multigpu.py +145 -0
  361. numba_cuda/numba/cuda/tests/cudapy/test_multiprocessing.py +39 -0
  362. numba_cuda/numba/cuda/tests/cudapy/test_multithreads.py +82 -0
  363. numba_cuda/numba/cuda/tests/cudapy/test_nondet.py +53 -0
  364. numba_cuda/numba/cuda/tests/cudapy/test_operator.py +504 -0
  365. numba_cuda/numba/cuda/tests/cudapy/test_optimization.py +93 -0
  366. numba_cuda/numba/cuda/tests/cudapy/test_overload.py +402 -0
  367. numba_cuda/numba/cuda/tests/cudapy/test_powi.py +128 -0
  368. numba_cuda/numba/cuda/tests/cudapy/test_print.py +193 -0
  369. numba_cuda/numba/cuda/tests/cudapy/test_py2_div_issue.py +37 -0
  370. numba_cuda/numba/cuda/tests/cudapy/test_random.py +117 -0
  371. numba_cuda/numba/cuda/tests/cudapy/test_record_dtype.py +614 -0
  372. numba_cuda/numba/cuda/tests/cudapy/test_recursion.py +130 -0
  373. numba_cuda/numba/cuda/tests/cudapy/test_reduction.py +94 -0
  374. numba_cuda/numba/cuda/tests/cudapy/test_retrieve_autoconverted_arrays.py +83 -0
  375. numba_cuda/numba/cuda/tests/cudapy/test_serialize.py +86 -0
  376. numba_cuda/numba/cuda/tests/cudapy/test_slicing.py +40 -0
  377. numba_cuda/numba/cuda/tests/cudapy/test_sm.py +457 -0
  378. numba_cuda/numba/cuda/tests/cudapy/test_sm_creation.py +233 -0
  379. numba_cuda/numba/cuda/tests/cudapy/test_ssa.py +454 -0
  380. numba_cuda/numba/cuda/tests/cudapy/test_stream_api.py +56 -0
  381. numba_cuda/numba/cuda/tests/cudapy/test_sync.py +277 -0
  382. numba_cuda/numba/cuda/tests/cudapy/test_tracing.py +200 -0
  383. numba_cuda/numba/cuda/tests/cudapy/test_transpose.py +90 -0
  384. numba_cuda/numba/cuda/tests/cudapy/test_typeconv.py +333 -0
  385. numba_cuda/numba/cuda/tests/cudapy/test_typeinfer.py +538 -0
  386. numba_cuda/numba/cuda/tests/cudapy/test_ufuncs.py +585 -0
  387. numba_cuda/numba/cuda/tests/cudapy/test_userexc.py +42 -0
  388. numba_cuda/numba/cuda/tests/cudapy/test_vector_type.py +485 -0
  389. numba_cuda/numba/cuda/tests/cudapy/test_vectorize.py +312 -0
  390. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_complex.py +23 -0
  391. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_decor.py +183 -0
  392. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_device.py +40 -0
  393. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_scalar_arg.py +40 -0
  394. numba_cuda/numba/cuda/tests/cudapy/test_warning.py +206 -0
  395. numba_cuda/numba/cuda/tests/cudapy/test_warp_ops.py +446 -0
  396. numba_cuda/numba/cuda/tests/cudasim/__init__.py +9 -0
  397. numba_cuda/numba/cuda/tests/cudasim/support.py +9 -0
  398. numba_cuda/numba/cuda/tests/cudasim/test_cudasim_issues.py +111 -0
  399. numba_cuda/numba/cuda/tests/data/__init__.py +2 -0
  400. numba_cuda/numba/cuda/tests/data/cta_barrier.cu +28 -0
  401. numba_cuda/numba/cuda/tests/data/cuda_include.cu +10 -0
  402. numba_cuda/numba/cuda/tests/data/error.cu +12 -0
  403. numba_cuda/numba/cuda/tests/data/include/add.cuh +8 -0
  404. numba_cuda/numba/cuda/tests/data/jitlink.cu +28 -0
  405. numba_cuda/numba/cuda/tests/data/jitlink.ptx +49 -0
  406. numba_cuda/numba/cuda/tests/data/warn.cu +12 -0
  407. numba_cuda/numba/cuda/tests/doc_examples/__init__.py +9 -0
  408. numba_cuda/numba/cuda/tests/doc_examples/ffi/__init__.py +2 -0
  409. numba_cuda/numba/cuda/tests/doc_examples/ffi/functions.cu +54 -0
  410. numba_cuda/numba/cuda/tests/doc_examples/ffi/include/mul.cuh +8 -0
  411. numba_cuda/numba/cuda/tests/doc_examples/ffi/saxpy.cu +14 -0
  412. numba_cuda/numba/cuda/tests/doc_examples/test_cg.py +86 -0
  413. numba_cuda/numba/cuda/tests/doc_examples/test_cpointer.py +68 -0
  414. numba_cuda/numba/cuda/tests/doc_examples/test_cpu_gpu_compat.py +81 -0
  415. numba_cuda/numba/cuda/tests/doc_examples/test_ffi.py +141 -0
  416. numba_cuda/numba/cuda/tests/doc_examples/test_laplace.py +160 -0
  417. numba_cuda/numba/cuda/tests/doc_examples/test_matmul.py +180 -0
  418. numba_cuda/numba/cuda/tests/doc_examples/test_montecarlo.py +119 -0
  419. numba_cuda/numba/cuda/tests/doc_examples/test_random.py +66 -0
  420. numba_cuda/numba/cuda/tests/doc_examples/test_reduction.py +80 -0
  421. numba_cuda/numba/cuda/tests/doc_examples/test_sessionize.py +206 -0
  422. numba_cuda/numba/cuda/tests/doc_examples/test_ufunc.py +53 -0
  423. numba_cuda/numba/cuda/tests/doc_examples/test_vecadd.py +76 -0
  424. numba_cuda/numba/cuda/tests/nocuda/__init__.py +9 -0
  425. numba_cuda/numba/cuda/tests/nocuda/test_dummyarray.py +452 -0
  426. numba_cuda/numba/cuda/tests/nocuda/test_function_resolution.py +48 -0
  427. numba_cuda/numba/cuda/tests/nocuda/test_import.py +63 -0
  428. numba_cuda/numba/cuda/tests/nocuda/test_library_lookup.py +252 -0
  429. numba_cuda/numba/cuda/tests/nocuda/test_nvvm.py +59 -0
  430. numba_cuda/numba/cuda/tests/nrt/__init__.py +9 -0
  431. numba_cuda/numba/cuda/tests/nrt/test_nrt.py +387 -0
  432. numba_cuda/numba/cuda/tests/nrt/test_nrt_refct.py +124 -0
  433. numba_cuda/numba/cuda/tests/support.py +900 -0
  434. numba_cuda/numba/cuda/typeconv/__init__.py +4 -0
  435. numba_cuda/numba/cuda/typeconv/castgraph.py +137 -0
  436. numba_cuda/numba/cuda/typeconv/rules.py +63 -0
  437. numba_cuda/numba/cuda/typeconv/typeconv.py +121 -0
  438. numba_cuda/numba/cuda/types/__init__.py +233 -0
  439. numba_cuda/numba/cuda/types/__init__.pyi +167 -0
  440. numba_cuda/numba/cuda/types/abstract.py +9 -0
  441. numba_cuda/numba/cuda/types/common.py +9 -0
  442. numba_cuda/numba/cuda/types/containers.py +9 -0
  443. numba_cuda/numba/cuda/types/cuda_abstract.py +533 -0
  444. numba_cuda/numba/cuda/types/cuda_common.py +110 -0
  445. numba_cuda/numba/cuda/types/cuda_containers.py +971 -0
  446. numba_cuda/numba/cuda/types/cuda_function_type.py +230 -0
  447. numba_cuda/numba/cuda/types/cuda_functions.py +798 -0
  448. numba_cuda/numba/cuda/types/cuda_iterators.py +120 -0
  449. numba_cuda/numba/cuda/types/cuda_misc.py +569 -0
  450. numba_cuda/numba/cuda/types/cuda_npytypes.py +690 -0
  451. numba_cuda/numba/cuda/types/cuda_scalars.py +280 -0
  452. numba_cuda/numba/cuda/types/ext_types.py +101 -0
  453. numba_cuda/numba/cuda/types/function_type.py +11 -0
  454. numba_cuda/numba/cuda/types/functions.py +9 -0
  455. numba_cuda/numba/cuda/types/iterators.py +9 -0
  456. numba_cuda/numba/cuda/types/misc.py +9 -0
  457. numba_cuda/numba/cuda/types/npytypes.py +9 -0
  458. numba_cuda/numba/cuda/types/scalars.py +9 -0
  459. numba_cuda/numba/cuda/typing/__init__.py +19 -0
  460. numba_cuda/numba/cuda/typing/arraydecl.py +939 -0
  461. numba_cuda/numba/cuda/typing/asnumbatype.py +130 -0
  462. numba_cuda/numba/cuda/typing/bufproto.py +70 -0
  463. numba_cuda/numba/cuda/typing/builtins.py +1209 -0
  464. numba_cuda/numba/cuda/typing/cffi_utils.py +219 -0
  465. numba_cuda/numba/cuda/typing/cmathdecl.py +47 -0
  466. numba_cuda/numba/cuda/typing/collections.py +138 -0
  467. numba_cuda/numba/cuda/typing/context.py +782 -0
  468. numba_cuda/numba/cuda/typing/ctypes_utils.py +125 -0
  469. numba_cuda/numba/cuda/typing/dictdecl.py +63 -0
  470. numba_cuda/numba/cuda/typing/enumdecl.py +74 -0
  471. numba_cuda/numba/cuda/typing/listdecl.py +147 -0
  472. numba_cuda/numba/cuda/typing/mathdecl.py +158 -0
  473. numba_cuda/numba/cuda/typing/npdatetime.py +322 -0
  474. numba_cuda/numba/cuda/typing/npydecl.py +749 -0
  475. numba_cuda/numba/cuda/typing/setdecl.py +115 -0
  476. numba_cuda/numba/cuda/typing/templates.py +1446 -0
  477. numba_cuda/numba/cuda/typing/typeof.py +301 -0
  478. numba_cuda/numba/cuda/ufuncs.py +746 -0
  479. numba_cuda/numba/cuda/utils.py +724 -0
  480. numba_cuda/numba/cuda/vector_types.py +214 -0
  481. numba_cuda/numba/cuda/vectorizers.py +260 -0
  482. numba_cuda-0.22.0.dist-info/METADATA +109 -0
  483. numba_cuda-0.22.0.dist-info/RECORD +487 -0
  484. numba_cuda-0.22.0.dist-info/WHEEL +6 -0
  485. numba_cuda-0.22.0.dist-info/licenses/LICENSE +26 -0
  486. numba_cuda-0.22.0.dist-info/licenses/LICENSE.numba +24 -0
  487. numba_cuda-0.22.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,585 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
4
+ import functools
5
+ import warnings
6
+ import numpy as np
7
+ import unittest
8
+ from numba.cuda import HAS_NUMBA
9
+
10
+ if HAS_NUMBA:
11
+ from numba import njit
12
+ from numba import cuda
13
+ from numba.cuda import config, types
14
+ from numba.cuda.testing import skip_on_standalone_numba_cuda
15
+ from numba.cuda.typing.typeof import typeof
16
+ from numba.cuda.np import numpy_support
17
+ from numba.cuda.tests.support import TestCase
18
+
19
+
20
+ class BaseUFuncTest:
21
+ def setUp(self):
22
+ self.inputs = [
23
+ (np.uint32(0), types.uint32),
24
+ (np.uint32(1), types.uint32),
25
+ (np.int32(-1), types.int32),
26
+ (np.int32(0), types.int32),
27
+ (np.int32(1), types.int32),
28
+ (np.uint64(0), types.uint64),
29
+ (np.uint64(1), types.uint64),
30
+ (np.int64(-1), types.int64),
31
+ (np.int64(0), types.int64),
32
+ (np.int64(1), types.int64),
33
+ (np.float32(-0.5), types.float32),
34
+ (np.float32(0.0), types.float32),
35
+ (np.float32(0.5), types.float32),
36
+ (np.float64(-0.5), types.float64),
37
+ (np.float64(0.0), types.float64),
38
+ (np.float64(0.5), types.float64),
39
+ (np.array([0, 1], dtype="u4"), types.Array(types.uint32, 1, "C")),
40
+ (np.array([0, 1], dtype="u8"), types.Array(types.uint64, 1, "C")),
41
+ (
42
+ np.array([-1, 0, 1], dtype="i4"),
43
+ types.Array(types.int32, 1, "C"),
44
+ ),
45
+ (
46
+ np.array([-1, 0, 1], dtype="i8"),
47
+ types.Array(types.int64, 1, "C"),
48
+ ),
49
+ (
50
+ np.array([-0.5, 0.0, 0.5], dtype="f4"),
51
+ types.Array(types.float32, 1, "C"),
52
+ ),
53
+ (
54
+ np.array([-0.5, 0.0, 0.5], dtype="f8"),
55
+ types.Array(types.float64, 1, "C"),
56
+ ),
57
+ (np.array([0, 1], dtype=np.int8), types.Array(types.int8, 1, "C")),
58
+ (
59
+ np.array([0, 1], dtype=np.int16),
60
+ types.Array(types.int16, 1, "C"),
61
+ ),
62
+ (
63
+ np.array([0, 1], dtype=np.uint8),
64
+ types.Array(types.uint8, 1, "C"),
65
+ ),
66
+ (
67
+ np.array([0, 1], dtype=np.uint16),
68
+ types.Array(types.uint16, 1, "C"),
69
+ ),
70
+ ]
71
+
72
+ @skip_on_standalone_numba_cuda
73
+ @functools.lru_cache(maxsize=None)
74
+ def _compile(self, pyfunc, args, nrt=False):
75
+ # NOTE: to test the implementation of Numpy ufuncs, we disable
76
+ # rewriting of array expressions.
77
+ return njit(args, _nrt=nrt, no_rewrites=True)(pyfunc)
78
+
79
+ def _determine_output_type(
80
+ self, input_type, int_output_type=None, float_output_type=None
81
+ ):
82
+ ty = input_type
83
+ if isinstance(ty, types.Array):
84
+ ndim = ty.ndim
85
+ ty = ty.dtype
86
+ else:
87
+ ndim = 1
88
+
89
+ if ty in types.signed_domain:
90
+ if int_output_type:
91
+ output_type = types.Array(int_output_type, ndim, "C")
92
+ else:
93
+ output_type = types.Array(ty, ndim, "C")
94
+ elif ty in types.unsigned_domain:
95
+ if int_output_type:
96
+ output_type = types.Array(int_output_type, ndim, "C")
97
+ else:
98
+ output_type = types.Array(ty, ndim, "C")
99
+ else:
100
+ if float_output_type:
101
+ output_type = types.Array(float_output_type, ndim, "C")
102
+ else:
103
+ output_type = types.Array(ty, ndim, "C")
104
+ return output_type
105
+
106
+
107
+ class BasicUFuncTest(BaseUFuncTest):
108
+ def _make_ufunc_usecase(self, ufunc):
109
+ return _make_ufunc_usecase(ufunc)
110
+
111
+ def basic_ufunc_test(
112
+ self,
113
+ ufunc,
114
+ skip_inputs=[],
115
+ additional_inputs=[],
116
+ int_output_type=None,
117
+ float_output_type=None,
118
+ kinds="ifc",
119
+ positive_only=False,
120
+ ):
121
+ # Necessary to avoid some Numpy warnings being silenced, despite
122
+ # the simplefilter() call below.
123
+ self.reset_module_warnings(__name__)
124
+
125
+ pyfunc = self._make_ufunc_usecase(ufunc)
126
+
127
+ inputs = list(self.inputs) + additional_inputs
128
+
129
+ for input_tuple in inputs:
130
+ input_operand = input_tuple[0]
131
+ input_type = input_tuple[1]
132
+
133
+ is_tuple = isinstance(input_operand, tuple)
134
+ if is_tuple:
135
+ args = input_operand
136
+ else:
137
+ args = (input_operand,) * ufunc.nin
138
+
139
+ if input_type in skip_inputs:
140
+ continue
141
+ if positive_only and np.any(args[0] < 0):
142
+ continue
143
+
144
+ # Some ufuncs don't allow all kinds of arguments
145
+ if args[0].dtype.kind not in kinds:
146
+ continue
147
+
148
+ output_type = self._determine_output_type(
149
+ input_type, int_output_type, float_output_type
150
+ )
151
+
152
+ input_types = (input_type,) * ufunc.nin
153
+ output_types = (output_type,) * ufunc.nout
154
+ argtys = input_types + output_types
155
+ cfunc = self._compile(pyfunc, argtys)
156
+
157
+ if isinstance(args[0], np.ndarray):
158
+ results = [
159
+ np.zeros(args[0].shape, dtype=out_ty.dtype.name)
160
+ for out_ty in output_types
161
+ ]
162
+ expected = [
163
+ np.zeros(args[0].shape, dtype=out_ty.dtype.name)
164
+ for out_ty in output_types
165
+ ]
166
+ else:
167
+ results = [
168
+ np.zeros(1, dtype=out_ty.dtype.name)
169
+ for out_ty in output_types
170
+ ]
171
+ expected = [
172
+ np.zeros(1, dtype=out_ty.dtype.name)
173
+ for out_ty in output_types
174
+ ]
175
+
176
+ invalid_flag = False
177
+ with warnings.catch_warnings(record=True) as warnlist:
178
+ warnings.simplefilter("always")
179
+ pyfunc(*args, *expected)
180
+
181
+ warnmsg = "invalid value encountered"
182
+ for thiswarn in warnlist:
183
+ if issubclass(thiswarn.category, RuntimeWarning) and str(
184
+ thiswarn.message
185
+ ).startswith(warnmsg):
186
+ invalid_flag = True
187
+
188
+ cfunc(*args, *results)
189
+
190
+ for expected_i, result_i in zip(expected, results):
191
+ msg = "\n".join(
192
+ [
193
+ "ufunc '{0}' failed",
194
+ "inputs ({1}):",
195
+ "{2}",
196
+ "got({3})",
197
+ "{4}",
198
+ "expected ({5}):",
199
+ "{6}",
200
+ ]
201
+ ).format(
202
+ ufunc.__name__,
203
+ input_type,
204
+ input_operand,
205
+ output_type,
206
+ result_i,
207
+ expected_i.dtype,
208
+ expected_i,
209
+ )
210
+ try:
211
+ np.testing.assert_array_almost_equal(
212
+ expected_i, result_i, decimal=5, err_msg=msg
213
+ )
214
+ except AssertionError:
215
+ if invalid_flag:
216
+ # Allow output to mismatch for invalid input
217
+ print(
218
+ "Output mismatch for invalid input",
219
+ input_tuple,
220
+ result_i,
221
+ expected_i,
222
+ )
223
+ else:
224
+ raise
225
+
226
+ def signed_unsigned_cmp_test(self, comparison_ufunc):
227
+ self.basic_ufunc_test(comparison_ufunc)
228
+
229
+ if numpy_support.numpy_version < (1, 25):
230
+ return
231
+
232
+ # Test additional implementations that specifically handle signed /
233
+ # unsigned comparisons added in NumPy 1.25:
234
+ # https://github.com/numpy/numpy/pull/23713
235
+ additional_inputs = (
236
+ (np.int64(-1), np.uint64(0)),
237
+ (np.int64(-1), np.uint64(1)),
238
+ (np.int64(0), np.uint64(0)),
239
+ (np.int64(0), np.uint64(1)),
240
+ (np.int64(1), np.uint64(0)),
241
+ (np.int64(1), np.uint64(1)),
242
+ (np.uint64(0), np.int64(-1)),
243
+ (np.uint64(0), np.int64(0)),
244
+ (np.uint64(0), np.int64(1)),
245
+ (np.uint64(1), np.int64(-1)),
246
+ (np.uint64(1), np.int64(0)),
247
+ (np.uint64(1), np.int64(1)),
248
+ (
249
+ np.array([-1, -1, 0, 0, 1, 1], dtype=np.int64),
250
+ np.array([0, 1, 0, 1, 0, 1], dtype=np.uint64),
251
+ ),
252
+ (
253
+ np.array([0, 1, 0, 1, 0, 1], dtype=np.uint64),
254
+ np.array([-1, -1, 0, 0, 1, 1], dtype=np.int64),
255
+ ),
256
+ )
257
+
258
+ pyfunc = self._make_ufunc_usecase(comparison_ufunc)
259
+
260
+ for a, b in additional_inputs:
261
+ input_types = (typeof(a), typeof(b))
262
+ output_type = types.Array(types.bool_, 1, "C")
263
+ argtys = input_types + (output_type,)
264
+ cfunc = self._compile(pyfunc, argtys)
265
+
266
+ if isinstance(a, np.ndarray):
267
+ result = np.zeros(a.shape, dtype=np.bool_)
268
+ else:
269
+ result = np.zeros(1, dtype=np.bool_)
270
+
271
+ expected = np.zeros_like(result)
272
+
273
+ pyfunc(a, b, expected)
274
+ cfunc(a, b, result)
275
+ np.testing.assert_equal(expected, result)
276
+
277
+
278
+ def _make_ufunc_usecase(ufunc):
279
+ ldict = {}
280
+ arg_str = ",".join(["a{0}".format(i) for i in range(ufunc.nargs)])
281
+ func_str = f"def fn({arg_str}):\n np.{ufunc.__name__}({arg_str})"
282
+ exec(func_str, globals(), ldict)
283
+ fn = ldict["fn"]
284
+ fn.__name__ = "{0}_usecase".format(ufunc.__name__)
285
+ return fn
286
+
287
+
288
+ # This class provides common functionality for UFunc tests. The UFunc tests
289
+ # are quite long-running in comparison to other tests, so we break the tests up
290
+ # into multiple test classes for distribution across workers.
291
+ #
292
+ # This class would also be a CUDATestCase, but to avoid a confusing and
293
+ # potentially dangerous inheritance diamond with setUp methods that modify
294
+ # global state, we implement the necessary part of CUDATestCase within this
295
+ # class instead. This disables CUDA performance warnings for the duration of
296
+ # tests.
297
+ class CUDAUFuncTestBase(BasicUFuncTest, TestCase):
298
+ def setUp(self):
299
+ BasicUFuncTest.setUp(self)
300
+
301
+ # The basic ufunc test does not set up complex inputs, so we'll add
302
+ # some here for testing with CUDA.
303
+ self.inputs.extend(
304
+ [
305
+ (np.complex64(-0.5 - 0.5j), types.complex64),
306
+ (np.complex64(0.0), types.complex64),
307
+ (np.complex64(0.5 + 0.5j), types.complex64),
308
+ (np.complex128(-0.5 - 0.5j), types.complex128),
309
+ (np.complex128(0.0), types.complex128),
310
+ (np.complex128(0.5 + 0.5j), types.complex128),
311
+ (
312
+ np.array([-0.5 - 0.5j, 0.0, 0.5 + 0.5j], dtype="c8"),
313
+ types.Array(types.complex64, 1, "C"),
314
+ ),
315
+ (
316
+ np.array([-0.5 - 0.5j, 0.0, 0.5 + 0.5j], dtype="c16"),
317
+ types.Array(types.complex128, 1, "C"),
318
+ ),
319
+ ]
320
+ )
321
+
322
+ # Test with multiple dimensions
323
+ self.inputs.extend(
324
+ [
325
+ # Basic 2D and 3D arrays
326
+ (
327
+ np.linspace(0, 1).reshape((5, -1)),
328
+ types.Array(types.float64, 2, "C"),
329
+ ),
330
+ (
331
+ np.linspace(0, 1).reshape((2, 5, -1)),
332
+ types.Array(types.float64, 3, "C"),
333
+ ),
334
+ # Complex data (i.e. interleaved)
335
+ (
336
+ np.linspace(0, 1 + 1j).reshape(5, -1),
337
+ types.Array(types.complex128, 2, "C"),
338
+ ),
339
+ # F-ordered
340
+ (
341
+ np.asfortranarray(np.linspace(0, 1).reshape((5, -1))),
342
+ types.Array(types.float64, 2, "F"),
343
+ ),
344
+ ]
345
+ )
346
+
347
+ # Add tests for other integer types
348
+ self.inputs.extend(
349
+ [
350
+ (np.uint8(0), types.uint8),
351
+ (np.uint8(1), types.uint8),
352
+ (np.int8(-1), types.int8),
353
+ (np.int8(0), types.int8),
354
+ (np.uint16(0), types.uint16),
355
+ (np.uint16(1), types.uint16),
356
+ (np.int16(-1), types.int16),
357
+ (np.int16(0), types.int16),
358
+ (np.ulonglong(0), types.ulonglong),
359
+ (np.ulonglong(1), types.ulonglong),
360
+ (np.longlong(-1), types.longlong),
361
+ (np.longlong(0), types.longlong),
362
+ (
363
+ np.array([0, 1], dtype=np.ulonglong),
364
+ types.Array(types.ulonglong, 1, "C"),
365
+ ),
366
+ (
367
+ np.array([0, 1], dtype=np.longlong),
368
+ types.Array(types.longlong, 1, "C"),
369
+ ),
370
+ ]
371
+ )
372
+
373
+ self._low_occupancy_warnings = config.CUDA_LOW_OCCUPANCY_WARNINGS
374
+ self._warn_on_implicit_copy = config.CUDA_WARN_ON_IMPLICIT_COPY
375
+
376
+ # Disable warnings about low gpu utilization in the test suite
377
+ config.CUDA_LOW_OCCUPANCY_WARNINGS = 0
378
+ # Disable warnings about host arrays in the test suite
379
+ config.CUDA_WARN_ON_IMPLICIT_COPY = 0
380
+
381
+ def tearDown(self):
382
+ # Restore original warning settings
383
+ config.CUDA_LOW_OCCUPANCY_WARNINGS = self._low_occupancy_warnings
384
+ config.CUDA_WARN_ON_IMPLICIT_COPY = self._warn_on_implicit_copy
385
+
386
+ def _make_ufunc_usecase(self, ufunc):
387
+ return _make_ufunc_usecase(ufunc)
388
+
389
+ @functools.lru_cache(maxsize=None)
390
+ def _compile(self, pyfunc, args):
391
+ # We return an already-configured kernel so that basic_ufunc_test can
392
+ # call it just like it does for a CPU function
393
+ return cuda.jit(args)(pyfunc)[1, 1]
394
+
395
+ def basic_int_ufunc_test(self, name=None):
396
+ skip_inputs = [
397
+ types.float32,
398
+ types.float64,
399
+ types.Array(types.float32, 1, "C"),
400
+ types.Array(types.float32, 2, "C"),
401
+ types.Array(types.float64, 1, "C"),
402
+ types.Array(types.float64, 2, "C"),
403
+ types.Array(types.float64, 3, "C"),
404
+ types.Array(types.float64, 2, "F"),
405
+ types.complex64,
406
+ types.complex128,
407
+ types.Array(types.complex64, 1, "C"),
408
+ types.Array(types.complex64, 2, "C"),
409
+ types.Array(types.complex128, 1, "C"),
410
+ types.Array(types.complex128, 2, "C"),
411
+ ]
412
+ self.basic_ufunc_test(name, skip_inputs=skip_inputs)
413
+
414
+ ############################################################################
415
+ # Trigonometric Functions
416
+
417
+
418
+ class TestBasicTrigUFuncs(CUDAUFuncTestBase):
419
+ def test_sin_ufunc(self):
420
+ self.basic_ufunc_test(np.sin, kinds="cf")
421
+
422
+ def test_cos_ufunc(self):
423
+ self.basic_ufunc_test(np.cos, kinds="cf")
424
+
425
+ def test_tan_ufunc(self):
426
+ self.basic_ufunc_test(np.tan, kinds="cf")
427
+
428
+ def test_arcsin_ufunc(self):
429
+ self.basic_ufunc_test(np.arcsin, kinds="cf")
430
+
431
+ def test_arccos_ufunc(self):
432
+ self.basic_ufunc_test(np.arccos, kinds="cf")
433
+
434
+ def test_arctan_ufunc(self):
435
+ self.basic_ufunc_test(np.arctan, kinds="cf")
436
+
437
+ def test_arctan2_ufunc(self):
438
+ self.basic_ufunc_test(np.arctan2, kinds="f")
439
+
440
+
441
+ class TestHypTrigUFuncs(CUDAUFuncTestBase):
442
+ def test_hypot_ufunc(self):
443
+ self.basic_ufunc_test(np.hypot, kinds="f")
444
+
445
+ def test_sinh_ufunc(self):
446
+ self.basic_ufunc_test(np.sinh, kinds="cf")
447
+
448
+ def test_cosh_ufunc(self):
449
+ self.basic_ufunc_test(np.cosh, kinds="cf")
450
+
451
+ def test_tanh_ufunc(self):
452
+ self.basic_ufunc_test(np.tanh, kinds="cf")
453
+
454
+ def test_arcsinh_ufunc(self):
455
+ self.basic_ufunc_test(np.arcsinh, kinds="cf")
456
+
457
+ def test_arccosh_ufunc(self):
458
+ self.basic_ufunc_test(np.arccosh, kinds="cf")
459
+
460
+ def test_arctanh_ufunc(self):
461
+ # arctanh is only valid is only finite in the range ]-1, 1[
462
+ # This means that for any of the integer types it will produce
463
+ # conversion from infinity/-infinity to integer. That's undefined
464
+ # behavior in C, so the results may vary from implementation to
465
+ # implementation. This means that the result from the compiler
466
+ # used to compile NumPy may differ from the result generated by
467
+ # llvm. Skipping the integer types in this test avoids failed
468
+ # tests because of this.
469
+ to_skip = [
470
+ types.Array(types.uint32, 1, "C"),
471
+ types.uint32,
472
+ types.Array(types.int32, 1, "C"),
473
+ types.int32,
474
+ types.Array(types.uint64, 1, "C"),
475
+ types.uint64,
476
+ types.Array(types.int64, 1, "C"),
477
+ types.int64,
478
+ ]
479
+
480
+ self.basic_ufunc_test(np.arctanh, skip_inputs=to_skip, kinds="cf")
481
+
482
+
483
+ class TestConversionUFuncs(CUDAUFuncTestBase):
484
+ def test_deg2rad_ufunc(self):
485
+ self.basic_ufunc_test(np.deg2rad, kinds="f")
486
+
487
+ def test_rad2deg_ufunc(self):
488
+ self.basic_ufunc_test(np.rad2deg, kinds="f")
489
+
490
+ def test_degrees_ufunc(self):
491
+ self.basic_ufunc_test(np.degrees, kinds="f")
492
+
493
+ def test_radians_ufunc(self):
494
+ self.basic_ufunc_test(np.radians, kinds="f")
495
+
496
+ ############################################################################
497
+ # Comparison functions
498
+
499
+
500
+ class TestComparisonUFuncs1(CUDAUFuncTestBase):
501
+ def test_greater_ufunc(self):
502
+ self.signed_unsigned_cmp_test(np.greater)
503
+
504
+ def test_greater_equal_ufunc(self):
505
+ self.signed_unsigned_cmp_test(np.greater_equal)
506
+
507
+ def test_less_ufunc(self):
508
+ self.signed_unsigned_cmp_test(np.less)
509
+
510
+ def test_less_equal_ufunc(self):
511
+ self.signed_unsigned_cmp_test(np.less_equal)
512
+
513
+ def test_not_equal_ufunc(self):
514
+ self.signed_unsigned_cmp_test(np.not_equal)
515
+
516
+ def test_equal_ufunc(self):
517
+ self.signed_unsigned_cmp_test(np.equal)
518
+
519
+
520
+ class TestLogicalUFuncs(CUDAUFuncTestBase):
521
+ def test_logical_and_ufunc(self):
522
+ self.basic_ufunc_test(np.logical_and)
523
+
524
+ def test_logical_or_ufunc(self):
525
+ self.basic_ufunc_test(np.logical_or)
526
+
527
+ def test_logical_xor_ufunc(self):
528
+ self.basic_ufunc_test(np.logical_xor)
529
+
530
+ def test_logical_not_ufunc(self):
531
+ self.basic_ufunc_test(np.logical_not)
532
+
533
+
534
+ class TestMinmaxUFuncs(CUDAUFuncTestBase):
535
+ def test_maximum_ufunc(self):
536
+ self.basic_ufunc_test(np.maximum)
537
+
538
+ def test_minimum_ufunc(self):
539
+ self.basic_ufunc_test(np.minimum)
540
+
541
+ def test_fmax_ufunc(self):
542
+ self.basic_ufunc_test(np.fmax)
543
+
544
+ def test_fmin_ufunc(self):
545
+ self.basic_ufunc_test(np.fmin)
546
+
547
+
548
+ class TestBitwiseUFuncs(CUDAUFuncTestBase):
549
+ def test_bitwise_and_ufunc(self):
550
+ self.basic_int_ufunc_test(np.bitwise_and)
551
+
552
+ def test_bitwise_or_ufunc(self):
553
+ self.basic_int_ufunc_test(np.bitwise_or)
554
+
555
+ def test_bitwise_xor_ufunc(self):
556
+ self.basic_int_ufunc_test(np.bitwise_xor)
557
+
558
+ def test_invert_ufunc(self):
559
+ self.basic_int_ufunc_test(np.invert)
560
+
561
+ def test_bitwise_not_ufunc(self):
562
+ self.basic_int_ufunc_test(np.bitwise_not)
563
+
564
+ # Note: there is no entry for np.left_shift and np.right_shift
565
+ # because their implementations in NumPy have undefined behavior
566
+ # when the second argument is a negative. See the comment in
567
+ # numba/tests/test_ufuncs.py for more details.
568
+
569
+ ############################################################################
570
+ # Mathematical Functions
571
+
572
+
573
+ class TestLogUFuncs(CUDAUFuncTestBase):
574
+ def test_log_ufunc(self):
575
+ self.basic_ufunc_test(np.log, kinds="cf")
576
+
577
+ def test_log2_ufunc(self):
578
+ self.basic_ufunc_test(np.log2, kinds="cf")
579
+
580
+ def test_log10_ufunc(self):
581
+ self.basic_ufunc_test(np.log10, kinds="cf")
582
+
583
+
584
+ if __name__ == "__main__":
585
+ unittest.main()
@@ -0,0 +1,42 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
4
+ from numba.cuda.testing import unittest, CUDATestCase
5
+ from numba import cuda
6
+ from numba.cuda.core import config
7
+
8
+
9
+ class MyError(Exception):
10
+ pass
11
+
12
+
13
+ regex_pattern = (
14
+ r'In function [\'"]test_exc[\'"], file [\:\.\/\\\-a-zA-Z_0-9]+, line \d+'
15
+ )
16
+
17
+
18
+ class TestUserExc(CUDATestCase):
19
+ def test_user_exception(self):
20
+ @cuda.jit("void(int32)", debug=True, opt=False)
21
+ def test_exc(x):
22
+ if x == 1:
23
+ raise MyError
24
+ elif x == 2:
25
+ raise MyError("foo")
26
+
27
+ test_exc[1, 1](0) # no raise
28
+ with self.assertRaises(MyError) as cm:
29
+ test_exc[1, 1](1)
30
+ if not config.ENABLE_CUDASIM:
31
+ self.assertRegex(str(cm.exception), regex_pattern)
32
+ self.assertIn("tid=[0, 0, 0] ctaid=[0, 0, 0]", str(cm.exception))
33
+ with self.assertRaises(MyError) as cm:
34
+ test_exc[1, 1](2)
35
+ if not config.ENABLE_CUDASIM:
36
+ self.assertRegex(str(cm.exception), regex_pattern)
37
+ self.assertRegex(str(cm.exception), regex_pattern)
38
+ self.assertIn("tid=[0, 0, 0] ctaid=[0, 0, 0]: foo", str(cm.exception))
39
+
40
+
41
+ if __name__ == "__main__":
42
+ unittest.main()