numba-cuda 0.19.0__py3-none-any.whl → 0.20.0__py3-none-any.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 (353) hide show
  1. _numba_cuda_redirector.pth +3 -0
  2. _numba_cuda_redirector.py +3 -0
  3. numba_cuda/VERSION +1 -1
  4. numba_cuda/__init__.py +2 -1
  5. numba_cuda/_version.py +2 -13
  6. numba_cuda/numba/cuda/__init__.py +4 -1
  7. numba_cuda/numba/cuda/_internal/cuda_bf16.py +12708 -1469
  8. numba_cuda/numba/cuda/_internal/cuda_fp16.py +2656 -8769
  9. numba_cuda/numba/cuda/api.py +9 -1
  10. numba_cuda/numba/cuda/api_util.py +3 -0
  11. numba_cuda/numba/cuda/args.py +3 -0
  12. numba_cuda/numba/cuda/bf16.py +288 -2
  13. numba_cuda/numba/cuda/cg.py +3 -0
  14. numba_cuda/numba/cuda/cgutils.py +5 -2
  15. numba_cuda/numba/cuda/cloudpickle/__init__.py +21 -0
  16. numba_cuda/numba/cuda/cloudpickle/cloudpickle.py +1598 -0
  17. numba_cuda/numba/cuda/cloudpickle/cloudpickle_fast.py +17 -0
  18. numba_cuda/numba/cuda/codegen.py +4 -1
  19. numba_cuda/numba/cuda/compiler.py +376 -30
  20. numba_cuda/numba/cuda/core/analysis.py +319 -0
  21. numba_cuda/numba/cuda/core/annotations/__init__.py +0 -0
  22. numba_cuda/numba/cuda/core/annotations/type_annotations.py +304 -0
  23. numba_cuda/numba/cuda/core/base.py +1289 -0
  24. numba_cuda/numba/cuda/core/bytecode.py +727 -0
  25. numba_cuda/numba/cuda/core/caching.py +5 -2
  26. numba_cuda/numba/cuda/core/callconv.py +3 -0
  27. numba_cuda/numba/cuda/core/codegen.py +3 -0
  28. numba_cuda/numba/cuda/core/compiler.py +9 -14
  29. numba_cuda/numba/cuda/core/compiler_machinery.py +497 -0
  30. numba_cuda/numba/cuda/core/config.py +747 -0
  31. numba_cuda/numba/cuda/core/consts.py +124 -0
  32. numba_cuda/numba/cuda/core/cpu.py +370 -0
  33. numba_cuda/numba/cuda/core/environment.py +68 -0
  34. numba_cuda/numba/cuda/core/event.py +511 -0
  35. numba_cuda/numba/cuda/core/funcdesc.py +330 -0
  36. numba_cuda/numba/cuda/core/inline_closurecall.py +1889 -0
  37. numba_cuda/numba/cuda/core/interpreter.py +52 -27
  38. numba_cuda/numba/cuda/core/ir_utils.py +17 -29
  39. numba_cuda/numba/cuda/core/options.py +262 -0
  40. numba_cuda/numba/cuda/core/postproc.py +249 -0
  41. numba_cuda/numba/cuda/core/pythonapi.py +1868 -0
  42. numba_cuda/numba/cuda/core/rewrites/__init__.py +26 -0
  43. numba_cuda/numba/cuda/core/rewrites/ir_print.py +90 -0
  44. numba_cuda/numba/cuda/core/rewrites/registry.py +104 -0
  45. numba_cuda/numba/cuda/core/rewrites/static_binop.py +40 -0
  46. numba_cuda/numba/cuda/core/rewrites/static_getitem.py +187 -0
  47. numba_cuda/numba/cuda/core/rewrites/static_raise.py +98 -0
  48. numba_cuda/numba/cuda/core/sigutils.py +3 -0
  49. numba_cuda/numba/cuda/core/ssa.py +496 -0
  50. numba_cuda/numba/cuda/core/targetconfig.py +329 -0
  51. numba_cuda/numba/cuda/core/tracing.py +231 -0
  52. numba_cuda/numba/cuda/core/transforms.py +952 -0
  53. numba_cuda/numba/cuda/core/typed_passes.py +741 -7
  54. numba_cuda/numba/cuda/core/typeinfer.py +1948 -0
  55. numba_cuda/numba/cuda/core/unsafe/__init__.py +0 -0
  56. numba_cuda/numba/cuda/core/unsafe/bytes.py +67 -0
  57. numba_cuda/numba/cuda/core/unsafe/eh.py +66 -0
  58. numba_cuda/numba/cuda/core/unsafe/refcount.py +98 -0
  59. numba_cuda/numba/cuda/core/untyped_passes.py +1983 -0
  60. numba_cuda/numba/cuda/cpython/cmathimpl.py +560 -0
  61. numba_cuda/numba/cuda/cpython/mathimpl.py +499 -0
  62. numba_cuda/numba/cuda/cpython/numbers.py +1474 -0
  63. numba_cuda/numba/cuda/cuda_paths.py +425 -246
  64. numba_cuda/numba/cuda/cudadecl.py +4 -1
  65. numba_cuda/numba/cuda/cudadrv/__init__.py +4 -1
  66. numba_cuda/numba/cuda/cudadrv/devicearray.py +5 -1
  67. numba_cuda/numba/cuda/cudadrv/devices.py +3 -0
  68. numba_cuda/numba/cuda/cudadrv/driver.py +14 -140
  69. numba_cuda/numba/cuda/cudadrv/drvapi.py +3 -0
  70. numba_cuda/numba/cuda/cudadrv/dummyarray.py +114 -24
  71. numba_cuda/numba/cuda/cudadrv/enums.py +3 -0
  72. numba_cuda/numba/cuda/cudadrv/error.py +4 -0
  73. numba_cuda/numba/cuda/cudadrv/libs.py +8 -5
  74. numba_cuda/numba/cuda/cudadrv/linkable_code.py +3 -0
  75. numba_cuda/numba/cuda/cudadrv/mappings.py +4 -1
  76. numba_cuda/numba/cuda/cudadrv/ndarray.py +3 -0
  77. numba_cuda/numba/cuda/cudadrv/nvrtc.py +22 -8
  78. numba_cuda/numba/cuda/cudadrv/nvvm.py +4 -4
  79. numba_cuda/numba/cuda/cudadrv/rtapi.py +3 -0
  80. numba_cuda/numba/cuda/cudadrv/runtime.py +4 -1
  81. numba_cuda/numba/cuda/cudaimpl.py +8 -1
  82. numba_cuda/numba/cuda/cudamath.py +3 -0
  83. numba_cuda/numba/cuda/debuginfo.py +88 -2
  84. numba_cuda/numba/cuda/decorators.py +6 -3
  85. numba_cuda/numba/cuda/descriptor.py +6 -4
  86. numba_cuda/numba/cuda/device_init.py +3 -0
  87. numba_cuda/numba/cuda/deviceufunc.py +69 -2
  88. numba_cuda/numba/cuda/dispatcher.py +21 -39
  89. numba_cuda/numba/cuda/errors.py +10 -0
  90. numba_cuda/numba/cuda/extending.py +3 -0
  91. numba_cuda/numba/cuda/flags.py +143 -1
  92. numba_cuda/numba/cuda/fp16.py +3 -2
  93. numba_cuda/numba/cuda/include/13/cuda_bf16.h +5118 -0
  94. numba_cuda/numba/cuda/include/13/cuda_bf16.hpp +3865 -0
  95. numba_cuda/numba/cuda/include/13/cuda_fp16.h +5363 -0
  96. numba_cuda/numba/cuda/include/13/cuda_fp16.hpp +3483 -0
  97. numba_cuda/numba/cuda/initialize.py +4 -0
  98. numba_cuda/numba/cuda/intrinsic_wrapper.py +3 -0
  99. numba_cuda/numba/cuda/intrinsics.py +3 -0
  100. numba_cuda/numba/cuda/itanium_mangler.py +3 -0
  101. numba_cuda/numba/cuda/kernels/__init__.py +2 -0
  102. numba_cuda/numba/cuda/kernels/reduction.py +3 -0
  103. numba_cuda/numba/cuda/kernels/transpose.py +3 -0
  104. numba_cuda/numba/cuda/libdevice.py +4 -0
  105. numba_cuda/numba/cuda/libdevicedecl.py +3 -0
  106. numba_cuda/numba/cuda/libdevicefuncs.py +3 -0
  107. numba_cuda/numba/cuda/libdeviceimpl.py +3 -0
  108. numba_cuda/numba/cuda/locks.py +3 -0
  109. numba_cuda/numba/cuda/lowering.py +59 -159
  110. numba_cuda/numba/cuda/mathimpl.py +5 -1
  111. numba_cuda/numba/cuda/memory_management/__init__.py +3 -0
  112. numba_cuda/numba/cuda/memory_management/memsys.cu +5 -0
  113. numba_cuda/numba/cuda/memory_management/memsys.cuh +5 -0
  114. numba_cuda/numba/cuda/memory_management/nrt.cu +5 -0
  115. numba_cuda/numba/cuda/memory_management/nrt.cuh +5 -0
  116. numba_cuda/numba/cuda/memory_management/nrt.py +48 -18
  117. numba_cuda/numba/cuda/misc/findlib.py +75 -0
  118. numba_cuda/numba/cuda/models.py +12 -1
  119. numba_cuda/numba/cuda/np/npdatetime_helpers.py +217 -0
  120. numba_cuda/numba/cuda/np/npyfuncs.py +1807 -0
  121. numba_cuda/numba/cuda/np/numpy_support.py +553 -0
  122. numba_cuda/numba/cuda/np/ufunc/ufuncbuilder.py +59 -0
  123. numba_cuda/numba/cuda/nvvmutils.py +4 -1
  124. numba_cuda/numba/cuda/printimpl.py +15 -1
  125. numba_cuda/numba/cuda/random.py +4 -1
  126. numba_cuda/numba/cuda/reshape_funcs.cu +5 -0
  127. numba_cuda/numba/cuda/serialize.py +4 -1
  128. numba_cuda/numba/cuda/simulator/__init__.py +4 -1
  129. numba_cuda/numba/cuda/simulator/_internal/__init__.py +3 -0
  130. numba_cuda/numba/cuda/simulator/_internal/cuda_bf16.py +2 -0
  131. numba_cuda/numba/cuda/simulator/api.py +4 -1
  132. numba_cuda/numba/cuda/simulator/bf16.py +3 -0
  133. numba_cuda/numba/cuda/simulator/compiler.py +7 -0
  134. numba_cuda/numba/cuda/simulator/cudadrv/__init__.py +3 -0
  135. numba_cuda/numba/cuda/simulator/cudadrv/devicearray.py +4 -1
  136. numba_cuda/numba/cuda/simulator/cudadrv/devices.py +3 -0
  137. numba_cuda/numba/cuda/simulator/cudadrv/driver.py +3 -0
  138. numba_cuda/numba/cuda/simulator/cudadrv/drvapi.py +3 -0
  139. numba_cuda/numba/cuda/simulator/cudadrv/dummyarray.py +3 -0
  140. numba_cuda/numba/cuda/simulator/cudadrv/error.py +4 -0
  141. numba_cuda/numba/cuda/simulator/cudadrv/libs.py +4 -0
  142. numba_cuda/numba/cuda/simulator/cudadrv/linkable_code.py +4 -0
  143. numba_cuda/numba/cuda/simulator/cudadrv/nvrtc.py +3 -0
  144. numba_cuda/numba/cuda/simulator/cudadrv/nvvm.py +3 -0
  145. numba_cuda/numba/cuda/simulator/cudadrv/runtime.py +3 -0
  146. numba_cuda/numba/cuda/simulator/dispatcher.py +4 -0
  147. numba_cuda/numba/cuda/simulator/kernel.py +3 -0
  148. numba_cuda/numba/cuda/simulator/kernelapi.py +4 -1
  149. numba_cuda/numba/cuda/simulator/memory_management/__init__.py +3 -0
  150. numba_cuda/numba/cuda/simulator/memory_management/nrt.py +17 -2
  151. numba_cuda/numba/cuda/simulator/reduction.py +3 -0
  152. numba_cuda/numba/cuda/simulator/vector_types.py +3 -0
  153. numba_cuda/numba/cuda/simulator_init.py +3 -0
  154. numba_cuda/numba/cuda/stubs.py +3 -0
  155. numba_cuda/numba/cuda/target.py +38 -17
  156. numba_cuda/numba/cuda/testing.py +7 -19
  157. numba_cuda/numba/cuda/tests/__init__.py +4 -1
  158. numba_cuda/numba/cuda/tests/cloudpickle_main_class.py +9 -0
  159. numba_cuda/numba/cuda/tests/complex_usecases.py +3 -0
  160. numba_cuda/numba/cuda/tests/core/serialize_usecases.py +3 -0
  161. numba_cuda/numba/cuda/tests/core/test_itanium_mangler.py +3 -0
  162. numba_cuda/numba/cuda/tests/core/test_serialize.py +7 -4
  163. numba_cuda/numba/cuda/tests/cudadrv/__init__.py +3 -0
  164. numba_cuda/numba/cuda/tests/cudadrv/test_array_attr.py +3 -0
  165. numba_cuda/numba/cuda/tests/cudadrv/test_context_stack.py +3 -0
  166. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_array_slicing.py +3 -0
  167. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_auto_context.py +3 -0
  168. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_devicerecord.py +4 -1
  169. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_driver.py +3 -0
  170. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_libraries.py +4 -1
  171. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_memory.py +3 -0
  172. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_ndarray.py +3 -0
  173. numba_cuda/numba/cuda/tests/cudadrv/test_deallocations.py +4 -1
  174. numba_cuda/numba/cuda/tests/cudadrv/test_detect.py +9 -3
  175. numba_cuda/numba/cuda/tests/cudadrv/test_emm_plugins.py +4 -1
  176. numba_cuda/numba/cuda/tests/cudadrv/test_events.py +3 -0
  177. numba_cuda/numba/cuda/tests/cudadrv/test_host_alloc.py +3 -0
  178. numba_cuda/numba/cuda/tests/cudadrv/test_init.py +3 -0
  179. numba_cuda/numba/cuda/tests/cudadrv/test_inline_ptx.py +3 -0
  180. numba_cuda/numba/cuda/tests/cudadrv/test_is_fp16.py +3 -0
  181. numba_cuda/numba/cuda/tests/cudadrv/test_linker.py +21 -2
  182. numba_cuda/numba/cuda/tests/cudadrv/test_managed_alloc.py +3 -0
  183. numba_cuda/numba/cuda/tests/cudadrv/test_module_callbacks.py +5 -1
  184. numba_cuda/numba/cuda/tests/cudadrv/test_nvjitlink.py +4 -1
  185. numba_cuda/numba/cuda/tests/cudadrv/test_nvrtc.py +3 -0
  186. numba_cuda/numba/cuda/tests/cudadrv/test_nvvm_driver.py +3 -0
  187. numba_cuda/numba/cuda/tests/cudadrv/test_pinned.py +3 -0
  188. numba_cuda/numba/cuda/tests/cudadrv/test_profiler.py +3 -0
  189. numba_cuda/numba/cuda/tests/cudadrv/test_ptds.py +4 -1
  190. numba_cuda/numba/cuda/tests/cudadrv/test_reset_device.py +3 -0
  191. numba_cuda/numba/cuda/tests/cudadrv/test_runtime.py +3 -0
  192. numba_cuda/numba/cuda/tests/cudadrv/test_select_device.py +3 -0
  193. numba_cuda/numba/cuda/tests/cudadrv/test_streams.py +3 -0
  194. numba_cuda/numba/cuda/tests/cudapy/__init__.py +3 -0
  195. numba_cuda/numba/cuda/tests/cudapy/cache_usecases.py +3 -0
  196. numba_cuda/numba/cuda/tests/cudapy/cache_with_cpu_usecases.py +3 -0
  197. numba_cuda/numba/cuda/tests/cudapy/cg_cache_usecases.py +3 -0
  198. numba_cuda/numba/cuda/tests/cudapy/extensions_usecases.py +4 -1
  199. numba_cuda/numba/cuda/tests/cudapy/recursion_usecases.py +3 -0
  200. numba_cuda/numba/cuda/tests/cudapy/test_alignment.py +3 -0
  201. numba_cuda/numba/cuda/tests/cudapy/test_array.py +5 -1
  202. numba_cuda/numba/cuda/tests/cudapy/test_array_alignment.py +3 -0
  203. numba_cuda/numba/cuda/tests/cudapy/test_array_args.py +3 -0
  204. numba_cuda/numba/cuda/tests/cudapy/test_array_methods.py +3 -0
  205. numba_cuda/numba/cuda/tests/cudapy/test_atomics.py +4 -1
  206. numba_cuda/numba/cuda/tests/cudapy/test_bfloat16.py +542 -2
  207. numba_cuda/numba/cuda/tests/cudapy/test_bfloat16_bindings.py +84 -1
  208. numba_cuda/numba/cuda/tests/cudapy/test_blackscholes.py +3 -0
  209. numba_cuda/numba/cuda/tests/cudapy/test_boolean.py +3 -0
  210. numba_cuda/numba/cuda/tests/cudapy/test_caching.py +4 -3
  211. numba_cuda/numba/cuda/tests/cudapy/test_casting.py +3 -0
  212. numba_cuda/numba/cuda/tests/cudapy/test_cffi.py +3 -0
  213. numba_cuda/numba/cuda/tests/cudapy/test_compiler.py +3 -0
  214. numba_cuda/numba/cuda/tests/cudapy/test_complex.py +4 -1
  215. numba_cuda/numba/cuda/tests/cudapy/test_complex_kernel.py +3 -0
  216. numba_cuda/numba/cuda/tests/cudapy/test_const_string.py +3 -0
  217. numba_cuda/numba/cuda/tests/cudapy/test_constmem.py +4 -1
  218. numba_cuda/numba/cuda/tests/cudapy/test_cooperative_groups.py +5 -3
  219. numba_cuda/numba/cuda/tests/cudapy/test_copy_propagate.py +130 -0
  220. numba_cuda/numba/cuda/tests/cudapy/test_cuda_array_interface.py +3 -0
  221. numba_cuda/numba/cuda/tests/cudapy/test_cuda_jit_no_types.py +3 -0
  222. numba_cuda/numba/cuda/tests/cudapy/test_datetime.py +4 -1
  223. numba_cuda/numba/cuda/tests/cudapy/test_debug.py +4 -1
  224. numba_cuda/numba/cuda/tests/cudapy/test_debuginfo.py +314 -3
  225. numba_cuda/numba/cuda/tests/cudapy/test_debuginfo_types.py +4 -1
  226. numba_cuda/numba/cuda/tests/cudapy/test_device_func.py +3 -0
  227. numba_cuda/numba/cuda/tests/cudapy/test_dispatcher.py +4 -1
  228. numba_cuda/numba/cuda/tests/cudapy/test_enums.py +3 -0
  229. numba_cuda/numba/cuda/tests/cudapy/test_errors.py +4 -1
  230. numba_cuda/numba/cuda/tests/cudapy/test_exception.py +4 -1
  231. numba_cuda/numba/cuda/tests/cudapy/test_extending.py +5 -1
  232. numba_cuda/numba/cuda/tests/cudapy/test_fastmath.py +3 -0
  233. numba_cuda/numba/cuda/tests/cudapy/test_forall.py +3 -0
  234. numba_cuda/numba/cuda/tests/cudapy/test_freevar.py +3 -0
  235. numba_cuda/numba/cuda/tests/cudapy/test_frexp_ldexp.py +3 -0
  236. numba_cuda/numba/cuda/tests/cudapy/test_globals.py +3 -0
  237. numba_cuda/numba/cuda/tests/cudapy/test_gufunc.py +3 -0
  238. numba_cuda/numba/cuda/tests/cudapy/test_gufunc_scalar.py +3 -0
  239. numba_cuda/numba/cuda/tests/cudapy/test_gufunc_scheduling.py +3 -0
  240. numba_cuda/numba/cuda/tests/cudapy/test_idiv.py +3 -0
  241. numba_cuda/numba/cuda/tests/cudapy/test_inline.py +21 -8
  242. numba_cuda/numba/cuda/tests/cudapy/test_inspect.py +3 -0
  243. numba_cuda/numba/cuda/tests/cudapy/test_intrinsics.py +3 -0
  244. numba_cuda/numba/cuda/tests/cudapy/test_ipc.py +3 -0
  245. numba_cuda/numba/cuda/tests/cudapy/test_ir_utils.py +13 -37
  246. numba_cuda/numba/cuda/tests/cudapy/test_iterators.py +3 -0
  247. numba_cuda/numba/cuda/tests/cudapy/test_lang.py +3 -0
  248. numba_cuda/numba/cuda/tests/cudapy/test_laplace.py +4 -1
  249. numba_cuda/numba/cuda/tests/cudapy/test_libdevice.py +3 -0
  250. numba_cuda/numba/cuda/tests/cudapy/test_lineinfo.py +3 -0
  251. numba_cuda/numba/cuda/tests/cudapy/test_localmem.py +3 -0
  252. numba_cuda/numba/cuda/tests/cudapy/test_mandel.py +3 -0
  253. numba_cuda/numba/cuda/tests/cudapy/test_math.py +4 -1
  254. numba_cuda/numba/cuda/tests/cudapy/test_matmul.py +4 -1
  255. numba_cuda/numba/cuda/tests/cudapy/test_minmax.py +3 -0
  256. numba_cuda/numba/cuda/tests/cudapy/test_montecarlo.py +3 -0
  257. numba_cuda/numba/cuda/tests/cudapy/test_multigpu.py +3 -0
  258. numba_cuda/numba/cuda/tests/cudapy/test_multiprocessing.py +3 -0
  259. numba_cuda/numba/cuda/tests/cudapy/test_multithreads.py +3 -0
  260. numba_cuda/numba/cuda/tests/cudapy/test_nondet.py +3 -0
  261. numba_cuda/numba/cuda/tests/cudapy/test_operator.py +4 -1
  262. numba_cuda/numba/cuda/tests/cudapy/test_optimization.py +3 -0
  263. numba_cuda/numba/cuda/tests/cudapy/test_overload.py +3 -0
  264. numba_cuda/numba/cuda/tests/cudapy/test_powi.py +3 -0
  265. numba_cuda/numba/cuda/tests/cudapy/test_print.py +23 -0
  266. numba_cuda/numba/cuda/tests/cudapy/test_py2_div_issue.py +3 -0
  267. numba_cuda/numba/cuda/tests/cudapy/test_random.py +3 -0
  268. numba_cuda/numba/cuda/tests/cudapy/test_record_dtype.py +4 -1
  269. numba_cuda/numba/cuda/tests/cudapy/test_recursion.py +3 -0
  270. numba_cuda/numba/cuda/tests/cudapy/test_reduction.py +4 -1
  271. numba_cuda/numba/cuda/tests/cudapy/test_retrieve_autoconverted_arrays.py +3 -0
  272. numba_cuda/numba/cuda/tests/cudapy/test_serialize.py +4 -1
  273. numba_cuda/numba/cuda/tests/cudapy/test_slicing.py +3 -0
  274. numba_cuda/numba/cuda/tests/cudapy/test_sm.py +4 -1
  275. numba_cuda/numba/cuda/tests/cudapy/test_sm_creation.py +3 -0
  276. numba_cuda/numba/cuda/tests/cudapy/test_ssa.py +453 -0
  277. numba_cuda/numba/cuda/tests/cudapy/test_stream_api.py +3 -0
  278. numba_cuda/numba/cuda/tests/cudapy/test_sync.py +4 -1
  279. numba_cuda/numba/cuda/tests/cudapy/test_transpose.py +3 -0
  280. numba_cuda/numba/cuda/tests/cudapy/test_typeinfer.py +538 -0
  281. numba_cuda/numba/cuda/tests/cudapy/test_ufuncs.py +266 -2
  282. numba_cuda/numba/cuda/tests/cudapy/test_userexc.py +4 -1
  283. numba_cuda/numba/cuda/tests/cudapy/test_vector_type.py +4 -1
  284. numba_cuda/numba/cuda/tests/cudapy/test_vectorize.py +3 -0
  285. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_complex.py +3 -0
  286. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_decor.py +115 -6
  287. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_device.py +3 -0
  288. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_scalar_arg.py +3 -0
  289. numba_cuda/numba/cuda/tests/cudapy/test_warning.py +4 -1
  290. numba_cuda/numba/cuda/tests/cudapy/test_warp_ops.py +4 -1
  291. numba_cuda/numba/cuda/tests/cudasim/__init__.py +3 -0
  292. numba_cuda/numba/cuda/tests/cudasim/support.py +3 -0
  293. numba_cuda/numba/cuda/tests/cudasim/test_cudasim_issues.py +3 -0
  294. numba_cuda/numba/cuda/tests/data/__init__.py +2 -0
  295. numba_cuda/numba/cuda/tests/data/cta_barrier.cu +5 -0
  296. numba_cuda/numba/cuda/tests/data/cuda_include.cu +5 -0
  297. numba_cuda/numba/cuda/tests/data/error.cu +5 -0
  298. numba_cuda/numba/cuda/tests/data/include/add.cuh +5 -0
  299. numba_cuda/numba/cuda/tests/data/jitlink.cu +5 -0
  300. numba_cuda/numba/cuda/tests/data/warn.cu +5 -0
  301. numba_cuda/numba/cuda/tests/doc_examples/__init__.py +3 -0
  302. numba_cuda/numba/cuda/tests/doc_examples/ffi/__init__.py +2 -0
  303. numba_cuda/numba/cuda/tests/doc_examples/ffi/functions.cu +5 -0
  304. numba_cuda/numba/cuda/tests/doc_examples/ffi/include/mul.cuh +5 -0
  305. numba_cuda/numba/cuda/tests/doc_examples/ffi/saxpy.cu +5 -0
  306. numba_cuda/numba/cuda/tests/doc_examples/test_cg.py +3 -2
  307. numba_cuda/numba/cuda/tests/doc_examples/test_cpointer.py +3 -0
  308. numba_cuda/numba/cuda/tests/doc_examples/test_cpu_gpu_compat.py +3 -0
  309. numba_cuda/numba/cuda/tests/doc_examples/test_ffi.py +6 -2
  310. numba_cuda/numba/cuda/tests/doc_examples/test_laplace.py +3 -2
  311. numba_cuda/numba/cuda/tests/doc_examples/test_matmul.py +3 -0
  312. numba_cuda/numba/cuda/tests/doc_examples/test_montecarlo.py +3 -0
  313. numba_cuda/numba/cuda/tests/doc_examples/test_random.py +3 -0
  314. numba_cuda/numba/cuda/tests/doc_examples/test_reduction.py +3 -0
  315. numba_cuda/numba/cuda/tests/doc_examples/test_sessionize.py +3 -2
  316. numba_cuda/numba/cuda/tests/doc_examples/test_ufunc.py +3 -0
  317. numba_cuda/numba/cuda/tests/doc_examples/test_vecadd.py +3 -0
  318. numba_cuda/numba/cuda/tests/enum_usecases.py +3 -0
  319. numba_cuda/numba/cuda/tests/nocuda/__init__.py +3 -0
  320. numba_cuda/numba/cuda/tests/nocuda/test_dummyarray.py +3 -0
  321. numba_cuda/numba/cuda/tests/nocuda/test_function_resolution.py +3 -0
  322. numba_cuda/numba/cuda/tests/nocuda/test_import.py +6 -1
  323. numba_cuda/numba/cuda/tests/nocuda/test_library_lookup.py +27 -12
  324. numba_cuda/numba/cuda/tests/nocuda/test_nvvm.py +3 -0
  325. numba_cuda/numba/cuda/tests/nrt/__init__.py +3 -0
  326. numba_cuda/numba/cuda/tests/nrt/test_nrt.py +5 -1
  327. numba_cuda/numba/cuda/tests/nrt/test_nrt_refct.py +3 -0
  328. numba_cuda/numba/cuda/tests/support.py +58 -15
  329. numba_cuda/numba/cuda/tests/test_binary_generation/Makefile +3 -0
  330. numba_cuda/numba/cuda/tests/test_binary_generation/generate_raw_ltoir.py +2 -1
  331. numba_cuda/numba/cuda/tests/test_binary_generation/nrt_extern.cu +5 -0
  332. numba_cuda/numba/cuda/tests/test_binary_generation/test_device_functions.cu +5 -0
  333. numba_cuda/numba/cuda/tests/test_binary_generation/undefined_extern.cu +5 -0
  334. numba_cuda/numba/cuda/tests/test_tracing.py +200 -0
  335. numba_cuda/numba/cuda/types.py +59 -0
  336. numba_cuda/numba/cuda/typing/__init__.py +12 -1
  337. numba_cuda/numba/cuda/typing/cffi_utils.py +55 -0
  338. numba_cuda/numba/cuda/typing/context.py +751 -0
  339. numba_cuda/numba/cuda/typing/enumdecl.py +74 -0
  340. numba_cuda/numba/cuda/typing/npydecl.py +658 -0
  341. numba_cuda/numba/cuda/typing/templates.py +10 -14
  342. numba_cuda/numba/cuda/ufuncs.py +6 -3
  343. numba_cuda/numba/cuda/utils.py +9 -112
  344. numba_cuda/numba/cuda/vector_types.py +3 -0
  345. numba_cuda/numba/cuda/vectorizers.py +3 -0
  346. {numba_cuda-0.19.0.dist-info → numba_cuda-0.20.0.dist-info}/METADATA +6 -2
  347. numba_cuda-0.20.0.dist-info/RECORD +357 -0
  348. {numba_cuda-0.19.0.dist-info → numba_cuda-0.20.0.dist-info}/licenses/LICENSE +1 -0
  349. numba_cuda-0.20.0.dist-info/licenses/LICENSE.numba +24 -0
  350. numba_cuda/numba/cuda/tests/cudadrv/test_mvc.py +0 -57
  351. numba_cuda-0.19.0.dist-info/RECORD +0 -301
  352. {numba_cuda-0.19.0.dist-info → numba_cuda-0.20.0.dist-info}/WHEEL +0 -0
  353. {numba_cuda-0.19.0.dist-info → numba_cuda-0.20.0.dist-info}/top_level.txt +0 -0
@@ -1,3 +1,6 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
1
4
  # Contents in this file are referenced from the sphinx-generated docs.
2
5
  # "magictoken" is used for markers as beginning and ending of example text.
3
6
 
@@ -87,7 +90,8 @@ class TestFFI(CUDATestCase):
87
90
 
88
91
  def test_ex_extra_includes(self):
89
92
  import numpy as np
90
- from numba import cuda, config
93
+ from numba import cuda
94
+ from numba.cuda import config
91
95
  import os
92
96
 
93
97
  basedir = os.path.dirname(os.path.abspath(__file__))
@@ -100,7 +104,7 @@ class TestFFI(CUDATestCase):
100
104
  includedir = ":".join([mul_dir, add_dir])
101
105
  with override_config("CUDA_NVRTC_EXTRA_SEARCH_PATHS", includedir):
102
106
  # magictoken.ex_extra_search_paths.begin
103
- from numba import config
107
+ from numba.cuda import config
104
108
 
105
109
  includedir = ":".join([mul_dir, add_dir])
106
110
  config.CUDA_NVRTC_EXTRA_SEARCH_PATHS = includedir
@@ -1,3 +1,6 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
1
4
  import unittest
2
5
 
3
6
  from numba.cuda.testing import (
@@ -5,14 +8,12 @@ from numba.cuda.testing import (
5
8
  skip_if_cudadevrt_missing,
6
9
  skip_on_cudasim,
7
10
  skip_unless_cc_60,
8
- skip_if_mvc_enabled,
9
11
  )
10
12
  from numba.cuda.tests.support import captured_stdout
11
13
 
12
14
 
13
15
  @skip_if_cudadevrt_missing
14
16
  @skip_unless_cc_60
15
- @skip_if_mvc_enabled("CG not supported with MVC")
16
17
  @skip_on_cudasim("cudasim doesn't support cuda import at non-top-level")
17
18
  class TestLaplace(CUDATestCase):
18
19
  """
@@ -1,3 +1,6 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
1
4
  """
2
5
  Matrix multiplication example via `cuda.jit`.
3
6
 
@@ -1,3 +1,6 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
1
4
  import unittest
2
5
 
3
6
  from numba.cuda.testing import CUDATestCase, skip_on_cudasim
@@ -1,3 +1,6 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
1
4
  # Contents in this file are referenced from the sphinx-generated docs.
2
5
  # "magictoken" is used for markers as beginning and ending of example text.
3
6
 
@@ -1,3 +1,6 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
1
4
  import unittest
2
5
 
3
6
  from numba.cuda.testing import CUDATestCase, skip_on_cudasim
@@ -1,3 +1,6 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
1
4
  import unittest
2
5
 
3
6
  from numba.cuda.testing import (
@@ -5,14 +8,12 @@ from numba.cuda.testing import (
5
8
  skip_if_cudadevrt_missing,
6
9
  skip_on_cudasim,
7
10
  skip_unless_cc_60,
8
- skip_if_mvc_enabled,
9
11
  )
10
12
  from numba.cuda.tests.support import captured_stdout
11
13
 
12
14
 
13
15
  @skip_if_cudadevrt_missing
14
16
  @skip_unless_cc_60
15
- @skip_if_mvc_enabled("CG not supported with MVC")
16
17
  @skip_on_cudasim("cudasim doesn't support cuda import at non-top-level")
17
18
  class TestSessionization(CUDATestCase):
18
19
  """
@@ -1,3 +1,6 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
1
4
  import unittest
2
5
 
3
6
  from numba.cuda.testing import CUDATestCase, skip_on_cudasim
@@ -1,3 +1,6 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
1
4
  import unittest
2
5
 
3
6
  from numba.cuda.testing import CUDATestCase, skip_on_cudasim
@@ -1,3 +1,6 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
1
4
  from enum import Enum, IntEnum
2
5
 
3
6
 
@@ -1,3 +1,6 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
1
4
  from numba.cuda.tests import load_testsuite
2
5
  import os
3
6
 
@@ -1,3 +1,6 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
1
4
  import unittest
2
5
  import itertools
3
6
  import numpy as np
@@ -1,3 +1,6 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
1
4
  from numba.cuda.testing import unittest, skip_on_cudasim
2
5
  import operator
3
6
  from numba.core import types, typing
@@ -1,3 +1,6 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
1
4
  from numba.cuda.tests.support import run_in_subprocess
2
5
  import unittest
3
6
 
@@ -23,6 +26,9 @@ class TestImport(unittest.TestCase):
23
26
  "numba.cpython.mathimpl",
24
27
  "numba.cpython.printimpl",
25
28
  "numba.cpython.randomimpl",
29
+ "numba.cuda.cpython.numbers",
30
+ "numba.cuda.cpython.cmathimpl",
31
+ "numba.cuda.cpython.mathimpl",
26
32
  "numba.core.optional",
27
33
  "numba.misc.gdb_hook",
28
34
  "numba.misc.literal",
@@ -34,7 +40,6 @@ class TestImport(unittest.TestCase):
34
40
  "numba.np.npyimpl",
35
41
  "numba.typed.typeddict",
36
42
  "numba.typed.typedlist",
37
- "numba.experimental.jitclass.base",
38
43
  )
39
44
 
40
45
  code = "import sys; from numba import cuda; print(list(sys.modules))"
@@ -1,9 +1,13 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
1
4
  import sys
2
5
  import os
3
6
  import multiprocessing as mp
4
7
  import warnings
5
8
 
6
- from numba.core.config import IS_WIN32, IS_OSX
9
+
10
+ from numba.cuda.core.config import IS_WIN32
7
11
  from numba.core.errors import NumbaWarning
8
12
  from numba.cuda.cudadrv import nvvm
9
13
  from numba.cuda.testing import (
@@ -16,6 +20,7 @@ from numba.cuda.cuda_paths import (
16
20
  _get_nvvm_path_decision,
17
21
  _get_cudalib_dir_path_decision,
18
22
  get_system_ctk,
23
+ get_system_ctk_libdir,
19
24
  )
20
25
 
21
26
 
@@ -99,10 +104,12 @@ class TestLibDeviceLookUp(LibraryLookupBase):
99
104
  # Check that CUDA_HOME works by removing conda-env
100
105
  by, info, warns = self.remote_do(self.do_set_cuda_home)
101
106
  self.assertEqual(by, "CUDA_HOME")
102
- self.assertEqual(info, os.path.join("mycudahome", "nvvm", "libdevice"))
107
+ self.assertTrue(
108
+ info.startswith(os.path.join("mycudahome", "nvvm", "libdevice"))
109
+ )
103
110
  self.assertFalse(warns)
104
111
 
105
- if get_system_ctk() is None:
112
+ if get_system_ctk("nvvm", "libdevice") is None:
106
113
  # Fake remove conda environment so no cudatoolkit is available
107
114
  by, info, warns = self.remote_do(self.do_clear_envs)
108
115
  self.assertEqual(by, "<unknown>")
@@ -145,13 +152,16 @@ class TestNvvmLookUp(LibraryLookupBase):
145
152
  self.assertEqual(by, "CUDA_HOME")
146
153
  self.assertFalse(warns)
147
154
  if IS_WIN32:
148
- self.assertEqual(info, os.path.join("mycudahome", "nvvm", "bin"))
149
- elif IS_OSX:
150
- self.assertEqual(info, os.path.join("mycudahome", "nvvm", "lib"))
155
+ self.assertEqual(
156
+ os.path.dirname(info), os.path.join("mycudahome", "nvvm", "bin")
157
+ )
151
158
  else:
152
- self.assertEqual(info, os.path.join("mycudahome", "nvvm", "lib64"))
159
+ self.assertEqual(
160
+ os.path.dirname(info),
161
+ os.path.join("mycudahome", "nvvm", "lib64"),
162
+ )
153
163
 
154
- if get_system_ctk() is None:
164
+ if get_system_ctk("nvvm") is None:
155
165
  # Fake remove conda environment so no cudatoolkit is available
156
166
  by, info, warns = self.remote_do(self.do_clear_envs)
157
167
  self.assertEqual(by, "<unknown>")
@@ -196,12 +206,17 @@ class TestCudaLibLookUp(LibraryLookupBase):
196
206
  self.assertEqual(by, "CUDA_HOME")
197
207
  self.assertFalse(warns)
198
208
  if IS_WIN32:
199
- self.assertEqual(info, os.path.join("mycudahome", "bin"))
200
- elif IS_OSX:
201
- self.assertEqual(info, os.path.join("mycudahome", "lib"))
209
+ # I think only wheels don't have the "Library" directory?
210
+ self.assertTrue(
211
+ info
212
+ in (
213
+ os.path.join("mycudahome", "bin"),
214
+ os.path.join("mycudahome", "Library", "bin"),
215
+ )
216
+ )
202
217
  else:
203
218
  self.assertEqual(info, os.path.join("mycudahome", "lib64"))
204
- if get_system_ctk() is None:
219
+ if get_system_ctk_libdir() is None:
205
220
  # Fake remove conda environment so no cudatoolkit is available
206
221
  by, info, warns = self.remote_do(self.do_clear_envs)
207
222
  self.assertEqual(by, "<unknown>")
@@ -1,3 +1,6 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
1
4
  from numba.cuda.cudadrv import nvvm
2
5
  from numba.cuda.testing import skip_on_cudasim
3
6
  from numba.cuda import utils
@@ -1,3 +1,6 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
1
4
  from numba.cuda.tests import load_testsuite
2
5
  import os
3
6
 
@@ -1,3 +1,6 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
1
4
  import re
2
5
  import os
3
6
 
@@ -7,9 +10,10 @@ from numba.cuda.testing import CUDATestCase, skip_on_cudasim
7
10
  from numba.cuda.tests.support import run_in_subprocess, override_config
8
11
  from numba.cuda import get_current_device
9
12
  from numba.cuda.cudadrv.nvrtc import compile
10
- from numba import config, types
13
+ from numba import types
11
14
  from numba.core.typing import signature
12
15
  from numba import cuda
16
+ from numba.cuda import config
13
17
  from numba.cuda.typing.templates import AbstractTemplate
14
18
  from numba.cuda.cudadrv.linkable_code import (
15
19
  CUSource,
@@ -1,3 +1,6 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
1
4
  import numpy as np
2
5
  import unittest
3
6
  from numba.cuda.tests.support import override_config
@@ -1,3 +1,6 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
1
4
  import cmath
2
5
  import contextlib
3
6
  import enum
@@ -18,8 +21,9 @@ from functools import cached_property
18
21
  import numpy as np
19
22
 
20
23
  from numba import types
21
- from numba.core import errors, config
22
- from numba.core.typing import cffi_utils
24
+ from numba.core import errors
25
+ from numba.cuda.core import config
26
+ from numba.cuda.typing import cffi_utils
23
27
  from numba.cuda.memory_management.nrt import rtsys
24
28
  from numba.core.extending import (
25
29
  typeof_impl,
@@ -28,7 +32,7 @@ from numba.core.extending import (
28
32
  NativeValue,
29
33
  )
30
34
  from numba.core.datamodel.models import OpaqueModel
31
- from numba.np import numpy_support
35
+ from numba.cuda.np import numpy_support
32
36
 
33
37
 
34
38
  class EnableNRTStatsMixin(object):
@@ -748,16 +752,55 @@ class TestCase(unittest.TestCase):
748
752
 
749
753
  return Dummy, DummyType
750
754
 
751
- def skip_if_no_external_compiler(self):
752
- """
753
- Call this to ensure the test is skipped if no suitable external compiler
754
- is found. This is a method on the TestCase opposed to a stand-alone
755
- decorator so as to make it "lazy" via runtime evaluation opposed to
756
- running at test-discovery time.
757
- """
758
- # This is a local import to avoid deprecation warnings being generated
759
- # through the use of the numba.pycc module.
760
- from numba.pycc.platform import external_compiler_works
761
755
 
762
- if not external_compiler_works():
763
- self.skipTest("No suitable external compiler was found.")
756
+ class MemoryLeak(object):
757
+ __enable_leak_check = True
758
+
759
+ def memory_leak_setup(self):
760
+ # Clean up any NRT-backed objects hanging in a dead reference cycle
761
+ gc.collect()
762
+ self.__init_stats = rtsys.get_allocation_stats()
763
+
764
+ def memory_leak_teardown(self):
765
+ if self.__enable_leak_check:
766
+ self.assert_no_memory_leak()
767
+
768
+ def assert_no_memory_leak(self):
769
+ old = self.__init_stats
770
+ new = rtsys.get_allocation_stats()
771
+ total_alloc = new.alloc - old.alloc
772
+ total_free = new.free - old.free
773
+ total_mi_alloc = new.mi_alloc - old.mi_alloc
774
+ total_mi_free = new.mi_free - old.mi_free
775
+ self.assertEqual(total_alloc, total_free)
776
+ self.assertEqual(total_mi_alloc, total_mi_free)
777
+
778
+ def disable_leak_check(self):
779
+ # For per-test use when MemoryLeakMixin is injected into a TestCase
780
+ self.__enable_leak_check = False
781
+
782
+
783
+ class MemoryLeakMixin(EnableNRTStatsMixin, MemoryLeak):
784
+ def setUp(self):
785
+ super(MemoryLeakMixin, self).setUp()
786
+ self.memory_leak_setup()
787
+
788
+ def tearDown(self):
789
+ gc.collect()
790
+ self.memory_leak_teardown()
791
+ super(MemoryLeakMixin, self).tearDown()
792
+
793
+
794
+ class CheckWarningsMixin(object):
795
+ @contextlib.contextmanager
796
+ def check_warnings(self, messages, category=RuntimeWarning):
797
+ with warnings.catch_warnings(record=True) as catch:
798
+ warnings.simplefilter("always")
799
+ yield
800
+ found = 0
801
+ for w in catch:
802
+ for m in messages:
803
+ if m in str(w.message):
804
+ self.assertEqual(w.category, category)
805
+ found += 1
806
+ self.assertEqual(found, len(messages))
@@ -1,3 +1,6 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
1
4
  # Generates the input files used by the nvjitlink tests
2
5
 
3
6
  # Test binaries are built taking into account the CC of the GPU in the test machine
@@ -1,4 +1,5 @@
1
- # Copyright (c) 2024, NVIDIA CORPORATION.
1
+ # SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
2
3
 
3
4
  import argparse
4
5
  import os
@@ -1,3 +1,8 @@
1
+ /*
2
+ * SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3
+ * SPDX-License-Identifier: BSD-2-Clause
4
+ */
5
+
1
6
  #include <nrt.cuh>
2
7
 
3
8
  extern "C" __device__ int device_allocate_deallocate(int* nb_retval){
@@ -1,3 +1,8 @@
1
+ /*
2
+ * SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3
+ * SPDX-License-Identifier: BSD-2-Clause
4
+ */
5
+
1
6
  #include <cuda_fp16.h>
2
7
 
3
8
  extern __device__ bool __heq(__half arg1, __half arg2);
@@ -1,3 +1,8 @@
1
+ /*
2
+ * SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3
+ * SPDX-License-Identifier: BSD-2-Clause
4
+ */
5
+
1
6
  extern __device__ float undef(float a, float b);
2
7
 
3
8
  __global__ void f(float *r, float *a, float *b) { r[0] = undef(a[0], b[0]); }
@@ -0,0 +1,200 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
4
+ from io import StringIO
5
+ import logging
6
+
7
+ import unittest
8
+ from numba.cuda.core import tracing
9
+
10
+ logger = logging.getLogger("trace")
11
+ logger.setLevel(logging.INFO)
12
+
13
+ # Make sure tracing is enabled
14
+ orig_trace = tracing.trace
15
+ tracing.trace = tracing.dotrace
16
+
17
+
18
+ class CapturedTrace:
19
+ """Capture the trace temporarily for validation."""
20
+
21
+ def __init__(self):
22
+ self.buffer = StringIO()
23
+ self.handler = logging.StreamHandler(self.buffer)
24
+
25
+ def __enter__(self):
26
+ self._handlers = logger.handlers
27
+ self.buffer = StringIO()
28
+ logger.handlers = [logging.StreamHandler(self.buffer)]
29
+
30
+ def __exit__(self, type, value, traceback):
31
+ logger.handlers = self._handlers
32
+
33
+ def getvalue(self):
34
+ # Depending on how the tests are run, object names may be
35
+ # qualified by their containing module.
36
+ # Remove that to make the trace output independent from the testing mode.
37
+ log = self.buffer.getvalue()
38
+ log = log.replace(__name__ + ".", "")
39
+ return log
40
+
41
+
42
+ class Class(object):
43
+ @tracing.trace
44
+ @classmethod
45
+ def class_method(cls):
46
+ pass
47
+
48
+ @tracing.trace
49
+ @staticmethod
50
+ def static_method():
51
+ pass
52
+
53
+ __test = None
54
+
55
+ def _test_get(self):
56
+ return self.__test
57
+
58
+ def _test_set(self, value):
59
+ self.__test = value
60
+
61
+ test = tracing.trace(property(_test_get, _test_set))
62
+
63
+ @tracing.trace
64
+ def method(self, some, other="value", *args, **kwds):
65
+ pass
66
+
67
+ def __repr__(self):
68
+ """Generate a deterministic string for testing."""
69
+ return "<Class instance>"
70
+
71
+
72
+ class Class2(object):
73
+ @classmethod
74
+ def class_method(cls):
75
+ pass
76
+
77
+ @staticmethod
78
+ def static_method():
79
+ pass
80
+
81
+ __test = None
82
+
83
+ @property
84
+ def test(self):
85
+ return self.__test
86
+
87
+ @test.setter
88
+ def test(self, value):
89
+ self.__test = value
90
+
91
+ def method(self):
92
+ pass
93
+
94
+ def __str__(self):
95
+ return "Test(" + str(self.test) + ")"
96
+
97
+ def __repr__(self):
98
+ """Generate a deterministic string for testing."""
99
+ return "<Class2 instance>"
100
+
101
+
102
+ @tracing.trace
103
+ def test_traced_function():
104
+ # Test the tracing functionality with fixed values
105
+ x, y = 5, 5
106
+ z = True
107
+
108
+ a = x + y
109
+ b = x * y
110
+ if z:
111
+ result = a
112
+ else:
113
+ result = b
114
+
115
+ # The function should return 10 (5 + 5) when z is True
116
+ assert result == 10
117
+
118
+
119
+ class TestTracing(unittest.TestCase):
120
+ def __init__(self, *args):
121
+ super(TestTracing, self).__init__(*args)
122
+
123
+ def setUp(self):
124
+ self.capture = CapturedTrace()
125
+
126
+ def tearDown(self):
127
+ del self.capture
128
+
129
+ def test_method(self):
130
+ with self.capture:
131
+ Class().method("foo", bar="baz")
132
+ self.assertEqual(
133
+ self.capture.getvalue(),
134
+ ">> Class.method(self=<Class instance>, some='foo', other='value', bar='baz')\n"
135
+ + "<< Class.method\n",
136
+ )
137
+
138
+ def test_class_method(self):
139
+ with self.capture:
140
+ Class.class_method()
141
+ self.assertEqual(
142
+ self.capture.getvalue(),
143
+ ">> Class.class_method(cls=<class 'Class'>)\n"
144
+ + "<< Class.class_method\n",
145
+ )
146
+
147
+ def test_static_method(self):
148
+ with self.capture:
149
+ Class.static_method()
150
+ self.assertEqual(
151
+ self.capture.getvalue(),
152
+ ">> static_method()\n" + "<< static_method\n",
153
+ )
154
+
155
+ def test_property(self):
156
+ with self.capture:
157
+ test = Class()
158
+ test.test = 1
159
+ assert 1 == test.test
160
+ self.assertEqual(
161
+ self.capture.getvalue(),
162
+ ">> Class._test_set(self=<Class instance>, value=1)\n"
163
+ + "<< Class._test_set\n"
164
+ + ">> Class._test_get(self=<Class instance>)\n"
165
+ + "<< Class._test_get -> 1\n",
166
+ )
167
+
168
+ def test_function(self):
169
+ with self.capture:
170
+ test_traced_function()
171
+ # The test function should be traced when called
172
+ trace_output = self.capture.getvalue()
173
+ self.assertIn(">> test_traced_function()", trace_output)
174
+ self.assertIn("<< test_traced_function", trace_output)
175
+
176
+ @unittest.skip("recursive decoration not yet implemented")
177
+ def test_injected(self):
178
+ with self.capture:
179
+ tracing.trace(Class2, recursive=True)
180
+ Class2.class_method()
181
+ Class2.static_method()
182
+ test = Class2()
183
+ test.test = 1
184
+ assert 1 == test.test
185
+ test.method()
186
+
187
+ self.assertEqual(
188
+ self.capture.getvalue(),
189
+ ">> Class2.class_method(cls=<type 'Class2'>)\n"
190
+ + "<< Class2.class_method\n"
191
+ ">> static_method()\n"
192
+ "<< static_method\n",
193
+ )
194
+
195
+
196
+ # Reset tracing to its original value
197
+ tracing.trace = orig_trace
198
+
199
+ if __name__ == "__main__":
200
+ unittest.main()