numba-cuda 0.22.0__cp313-cp313-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.
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-313-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-313-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-313-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-313-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-313-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,125 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
4
+ """
5
+ Support for typing ctypes function pointers.
6
+ """
7
+
8
+ import ctypes
9
+ import sys
10
+
11
+ from numba.cuda import types
12
+ from numba.cuda.typing import templates
13
+
14
+ _FROM_CTYPES = {
15
+ ctypes.c_bool: types.boolean,
16
+ ctypes.c_int8: types.int8,
17
+ ctypes.c_int16: types.int16,
18
+ ctypes.c_int32: types.int32,
19
+ ctypes.c_int64: types.int64,
20
+ ctypes.c_uint8: types.uint8,
21
+ ctypes.c_uint16: types.uint16,
22
+ ctypes.c_uint32: types.uint32,
23
+ ctypes.c_uint64: types.uint64,
24
+ ctypes.c_float: types.float32,
25
+ ctypes.c_double: types.float64,
26
+ ctypes.c_void_p: types.voidptr,
27
+ ctypes.py_object: types.ffi_forced_object,
28
+ }
29
+
30
+
31
+ _TO_CTYPES = {v: k for (k, v) in _FROM_CTYPES.items()}
32
+
33
+
34
+ def from_ctypes(ctypeobj):
35
+ """
36
+ Convert the given ctypes type to a Numba type.
37
+ """
38
+ if ctypeobj is None:
39
+ # Special case for the restype of void-returning functions
40
+ return types.none
41
+
42
+ assert isinstance(ctypeobj, type), ctypeobj
43
+
44
+ def _convert_internal(ctypeobj):
45
+ # Recursive helper
46
+ if issubclass(ctypeobj, ctypes._Pointer):
47
+ valuety = _convert_internal(ctypeobj._type_)
48
+ if valuety is not None:
49
+ return types.CPointer(valuety)
50
+ else:
51
+ return _FROM_CTYPES.get(ctypeobj)
52
+
53
+ ty = _convert_internal(ctypeobj)
54
+ if ty is None:
55
+ raise TypeError("Unsupported ctypes type: %s" % ctypeobj)
56
+ return ty
57
+
58
+
59
+ def to_ctypes(ty):
60
+ """
61
+ Convert the given Numba type to a ctypes type.
62
+ """
63
+ assert isinstance(ty, types.Type), ty
64
+
65
+ if ty is types.none:
66
+ # Special case for the restype of void-returning functions
67
+ return None
68
+
69
+ def _convert_internal(ty):
70
+ if isinstance(ty, types.CPointer):
71
+ return ctypes.POINTER(_convert_internal(ty.dtype))
72
+ else:
73
+ return _TO_CTYPES.get(ty)
74
+
75
+ ctypeobj = _convert_internal(ty)
76
+ if ctypeobj is None:
77
+ raise TypeError("Cannot convert Numba type '%s' to ctypes type" % (ty,))
78
+ return ctypeobj
79
+
80
+
81
+ def is_ctypes_funcptr(obj):
82
+ try:
83
+ # Is it something of which we can get the address
84
+ ctypes.cast(obj, ctypes.c_void_p)
85
+ except ctypes.ArgumentError:
86
+ return False
87
+ else:
88
+ # Does it define argtypes and restype
89
+ return hasattr(obj, "argtypes") and hasattr(obj, "restype")
90
+
91
+
92
+ def get_pointer(ctypes_func):
93
+ """
94
+ Get a pointer to the underlying function for a ctypes function as an
95
+ integer.
96
+ """
97
+ return ctypes.cast(ctypes_func, ctypes.c_void_p).value
98
+
99
+
100
+ def make_function_type(cfnptr):
101
+ """
102
+ Return a Numba type for the given ctypes function pointer.
103
+ """
104
+ if cfnptr.argtypes is None:
105
+ raise TypeError(
106
+ "ctypes function %r doesn't define its argument types; "
107
+ "consider setting the `argtypes` attribute" % (cfnptr.__name__,)
108
+ )
109
+ cargs = [from_ctypes(a) for a in cfnptr.argtypes]
110
+ cret = from_ctypes(cfnptr.restype)
111
+ # void* return type is a int/long on 32 bit platforms and an int on 64 bit
112
+ # platforms, explicit conversion to a int64 should match.
113
+ if cret == types.voidptr:
114
+ cret = types.uintp
115
+ if sys.platform == "win32" and not cfnptr._flags_ & ctypes._FUNCFLAG_CDECL:
116
+ # 'stdcall' calling convention under Windows
117
+ cconv = "x86_stdcallcc"
118
+ else:
119
+ # Default C calling convention
120
+ cconv = None
121
+
122
+ sig = templates.signature(cret, *cargs)
123
+ return types.ExternalFunctionPointer(
124
+ sig, cconv=cconv, get_pointer=get_pointer
125
+ )
@@ -0,0 +1,63 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
4
+ """
5
+ This implements the typing template for `dict()`.
6
+ """
7
+
8
+ from numba.cuda import types
9
+ from numba.cuda.core import errors
10
+ from .templates import (
11
+ AbstractTemplate,
12
+ Registry,
13
+ signature,
14
+ )
15
+
16
+ registry = Registry()
17
+ infer = registry.register
18
+ infer_global = registry.register_global
19
+ infer_getattr = registry.register_attr
20
+
21
+
22
+ _message_dict_support = """
23
+ Unsupported use of `dict()` with positional or keyword argument(s). \
24
+ The only supported uses are `dict()` or `dict(iterable)`.
25
+ """.strip()
26
+
27
+
28
+ @infer_global(dict)
29
+ class DictBuiltin(AbstractTemplate):
30
+ def generic(self, args, kws):
31
+ if kws:
32
+ raise errors.TypingError(_message_dict_support)
33
+ if args:
34
+ (iterable,) = args
35
+ if isinstance(iterable, types.IterableType):
36
+ dtype = iterable.iterator_type.yield_type
37
+ if isinstance(dtype, types.UniTuple):
38
+ length = dtype.count
39
+ if length != 2:
40
+ msg = (
41
+ "dictionary update sequence element has length "
42
+ f"{length}; 2 is required"
43
+ )
44
+ raise errors.TypingError(msg)
45
+ k = v = dtype.key[0]
46
+ elif isinstance(dtype, types.Tuple):
47
+ k, v = dtype.key
48
+ else:
49
+ raise errors.TypingError(_message_dict_support)
50
+
51
+ # dict key must be hashable
52
+ if not isinstance(k, types.Hashable):
53
+ msg = f"Unhashable type: {k}"
54
+ raise errors.TypingError(msg)
55
+
56
+ return signature(types.DictType(k, v), iterable)
57
+ else:
58
+ msg = (
59
+ "Non-iterable args used in dict(iterable) "
60
+ f"constructor. Got 'dict({args[0]})'"
61
+ )
62
+ raise errors.TypingError(msg)
63
+ return signature(types.DictType(types.undefined, types.undefined))
@@ -0,0 +1,74 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
4
+ """
5
+ Typing for enums.
6
+ """
7
+
8
+ import operator
9
+ from numba.cuda import types
10
+ from numba.cuda.typing.templates import (
11
+ AbstractTemplate,
12
+ AttributeTemplate,
13
+ signature,
14
+ Registry,
15
+ )
16
+
17
+ registry = Registry()
18
+ infer = registry.register
19
+ infer_global = registry.register_global
20
+ infer_getattr = registry.register_attr
21
+
22
+
23
+ @infer_getattr
24
+ class EnumAttribute(AttributeTemplate):
25
+ key = types.EnumMember
26
+
27
+ def resolve_value(self, ty):
28
+ return ty.dtype
29
+
30
+
31
+ @infer_getattr
32
+ class EnumClassAttribute(AttributeTemplate):
33
+ key = types.EnumClass
34
+
35
+ def generic_resolve(self, ty, attr):
36
+ """
37
+ Resolve attributes of an enum class as enum members.
38
+ """
39
+ if attr in ty.instance_class.__members__:
40
+ return ty.member_type
41
+
42
+
43
+ @infer
44
+ class EnumClassStaticGetItem(AbstractTemplate):
45
+ key = "static_getitem"
46
+
47
+ def generic(self, args, kws):
48
+ enum, idx = args
49
+ if (
50
+ isinstance(enum, types.EnumClass)
51
+ and idx in enum.instance_class.__members__
52
+ ):
53
+ return signature(enum.member_type, *args)
54
+
55
+
56
+ class EnumCompare(AbstractTemplate):
57
+ def generic(self, args, kws):
58
+ [lhs, rhs] = args
59
+ if (
60
+ isinstance(lhs, types.EnumMember)
61
+ and isinstance(rhs, types.EnumMember)
62
+ and lhs == rhs
63
+ ):
64
+ return signature(types.boolean, lhs, rhs)
65
+
66
+
67
+ @infer_global(operator.eq)
68
+ class EnumEq(EnumCompare):
69
+ pass
70
+
71
+
72
+ @infer_global(operator.ne)
73
+ class EnumNe(EnumCompare):
74
+ pass
@@ -0,0 +1,147 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
4
+ import operator
5
+ from numba.cuda import types
6
+ from .templates import (
7
+ AbstractTemplate,
8
+ AttributeTemplate,
9
+ Registry,
10
+ signature,
11
+ bound_function,
12
+ )
13
+ # Ensure list is typed as a collection as well
14
+
15
+
16
+ registry = Registry()
17
+ infer = registry.register
18
+ infer_global = registry.register_global
19
+ infer_getattr = registry.register_attr
20
+
21
+
22
+ @infer_global(list)
23
+ class ListBuiltin(AbstractTemplate):
24
+ def generic(self, args, kws):
25
+ assert not kws
26
+ if args:
27
+ (iterable,) = args
28
+ if isinstance(iterable, types.IterableType):
29
+ dtype = iterable.iterator_type.yield_type
30
+ return signature(types.List(dtype), iterable)
31
+ else:
32
+ return signature(types.List(types.undefined))
33
+
34
+
35
+ @infer_getattr
36
+ class ListAttribute(AttributeTemplate):
37
+ key = types.List
38
+
39
+ # NOTE: some of these should be Sequence / MutableSequence methods
40
+
41
+ @bound_function("list.append")
42
+ def resolve_append(self, list, args, kws):
43
+ (item,) = args
44
+ assert not kws
45
+ unified = self.context.unify_pairs(list.dtype, item)
46
+ if unified is not None:
47
+ sig = signature(types.none, unified)
48
+ sig = sig.replace(recvr=list.copy(dtype=unified))
49
+ return sig
50
+
51
+ @bound_function("list.clear")
52
+ def resolve_clear(self, list, args, kws):
53
+ assert not args
54
+ assert not kws
55
+ return signature(types.none)
56
+
57
+ @bound_function("list.extend")
58
+ def resolve_extend(self, list, args, kws):
59
+ (iterable,) = args
60
+ assert not kws
61
+ if not isinstance(iterable, types.IterableType):
62
+ return
63
+
64
+ dtype = iterable.iterator_type.yield_type
65
+ unified = self.context.unify_pairs(list.dtype, dtype)
66
+ if unified is not None:
67
+ sig = signature(types.none, iterable)
68
+ sig = sig.replace(recvr=list.copy(dtype=unified))
69
+ return sig
70
+
71
+ @bound_function("list.insert")
72
+ def resolve_insert(self, list, args, kws):
73
+ idx, item = args
74
+ assert not kws
75
+ if isinstance(idx, types.Integer):
76
+ unified = self.context.unify_pairs(list.dtype, item)
77
+ if unified is not None:
78
+ sig = signature(types.none, types.intp, unified)
79
+ sig = sig.replace(recvr=list.copy(dtype=unified))
80
+ return sig
81
+
82
+ @bound_function("list.pop")
83
+ def resolve_pop(self, list, args, kws):
84
+ assert not kws
85
+ if not args:
86
+ return signature(list.dtype)
87
+ else:
88
+ (idx,) = args
89
+ if isinstance(idx, types.Integer):
90
+ return signature(list.dtype, types.intp)
91
+
92
+
93
+ @infer_global(operator.add)
94
+ class AddList(AbstractTemplate):
95
+ def generic(self, args, kws):
96
+ if len(args) == 2:
97
+ a, b = args
98
+ if isinstance(a, types.List) and isinstance(b, types.List):
99
+ unified = self.context.unify_pairs(a, b)
100
+ if unified is not None:
101
+ return signature(unified, a, b)
102
+
103
+
104
+ @infer_global(operator.iadd)
105
+ class InplaceAddList(AbstractTemplate):
106
+ def generic(self, args, kws):
107
+ if len(args) == 2:
108
+ a, b = args
109
+ if isinstance(a, types.List) and isinstance(b, types.List):
110
+ if self.context.can_convert(b.dtype, a.dtype):
111
+ return signature(a, a, b)
112
+
113
+
114
+ @infer_global(operator.mul)
115
+ class MulList(AbstractTemplate):
116
+ # key = operator.mul
117
+
118
+ def generic(self, args, kws):
119
+ a, b = args
120
+ if isinstance(a, types.List) and isinstance(b, types.Integer):
121
+ return signature(a, a, types.intp)
122
+ elif isinstance(a, types.Integer) and isinstance(b, types.List):
123
+ return signature(b, types.intp, b)
124
+
125
+
126
+ @infer_global(operator.imul)
127
+ class InplaceMulList(MulList):
128
+ pass
129
+ # key = operator.imul
130
+
131
+
132
+ class ListCompare(AbstractTemplate):
133
+ def generic(self, args, kws):
134
+ [lhs, rhs] = args
135
+ if isinstance(lhs, types.List) and isinstance(rhs, types.List):
136
+ # Check element-wise comparability
137
+ res = self.context.resolve_function_type(
138
+ self.key, (lhs.dtype, rhs.dtype), {}
139
+ )
140
+ if res is not None:
141
+ return signature(types.boolean, lhs, rhs)
142
+
143
+
144
+ @infer_global(operator.eq)
145
+ class ListEq(ListCompare):
146
+ pass
147
+ # key = operator.eq
@@ -0,0 +1,158 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
4
+ import sys
5
+ import math
6
+ from numba.cuda import types
7
+ from numba.cuda.typing.templates import ConcreteTemplate, signature, Registry
8
+
9
+ registry = Registry()
10
+ infer_global = registry.register_global
11
+
12
+
13
+ @infer_global(math.exp)
14
+ @infer_global(math.expm1)
15
+ @infer_global(math.fabs)
16
+ @infer_global(math.sqrt)
17
+ @infer_global(math.log)
18
+ @infer_global(math.log1p)
19
+ @infer_global(math.log10)
20
+ @infer_global(math.log2)
21
+ @infer_global(math.sin)
22
+ @infer_global(math.cos)
23
+ @infer_global(math.tan)
24
+ @infer_global(math.sinh)
25
+ @infer_global(math.cosh)
26
+ @infer_global(math.tanh)
27
+ @infer_global(math.asin)
28
+ @infer_global(math.acos)
29
+ @infer_global(math.atan)
30
+ @infer_global(math.asinh)
31
+ @infer_global(math.acosh)
32
+ @infer_global(math.atanh)
33
+ @infer_global(math.degrees)
34
+ @infer_global(math.radians)
35
+ @infer_global(math.erf)
36
+ @infer_global(math.erfc)
37
+ @infer_global(math.gamma)
38
+ @infer_global(math.lgamma)
39
+ class Math_unary(ConcreteTemplate):
40
+ cases = [
41
+ signature(types.float64, types.int64),
42
+ signature(types.float64, types.uint64),
43
+ signature(types.float32, types.float32),
44
+ signature(types.float64, types.float64),
45
+ ]
46
+
47
+
48
+ if sys.version_info >= (3, 11):
49
+ Math_unary = infer_global(math.exp2)(Math_unary)
50
+
51
+
52
+ @infer_global(math.atan2)
53
+ class Math_atan2(ConcreteTemplate):
54
+ cases = [
55
+ signature(types.float64, types.int64, types.int64),
56
+ signature(types.float64, types.uint64, types.uint64),
57
+ signature(types.float32, types.float32, types.float32),
58
+ signature(types.float64, types.float64, types.float64),
59
+ ]
60
+
61
+
62
+ @infer_global(math.trunc)
63
+ class Math_converter(ConcreteTemplate):
64
+ cases = [
65
+ signature(types.intp, types.intp),
66
+ signature(types.int64, types.int64),
67
+ signature(types.uint64, types.uint64),
68
+ signature(types.int64, types.float32),
69
+ signature(types.int64, types.float64),
70
+ ]
71
+
72
+
73
+ @infer_global(math.floor)
74
+ @infer_global(math.ceil)
75
+ class Math_floor_ceil(Math_converter):
76
+ pass
77
+
78
+
79
+ @infer_global(math.copysign)
80
+ class Math_copysign(ConcreteTemplate):
81
+ cases = [
82
+ signature(types.float32, types.float32, types.float32),
83
+ signature(types.float64, types.float64, types.float64),
84
+ ]
85
+
86
+
87
+ @infer_global(math.hypot)
88
+ class Math_hypot(ConcreteTemplate):
89
+ cases = [
90
+ signature(types.float64, types.int64, types.int64),
91
+ signature(types.float64, types.uint64, types.uint64),
92
+ signature(types.float32, types.float32, types.float32),
93
+ signature(types.float64, types.float64, types.float64),
94
+ ]
95
+
96
+
97
+ @infer_global(math.nextafter)
98
+ class Math_nextafter(ConcreteTemplate):
99
+ cases = [
100
+ signature(types.float64, types.float64, types.float64),
101
+ signature(types.float32, types.float32, types.float32),
102
+ ]
103
+
104
+
105
+ @infer_global(math.isinf)
106
+ @infer_global(math.isnan)
107
+ class Math_predicate(ConcreteTemplate):
108
+ cases = [
109
+ signature(types.boolean, types.int64),
110
+ signature(types.boolean, types.uint64),
111
+ signature(types.boolean, types.float32),
112
+ signature(types.boolean, types.float64),
113
+ ]
114
+
115
+
116
+ @infer_global(math.isfinite)
117
+ class Math_isfinite(Math_predicate):
118
+ pass
119
+
120
+
121
+ @infer_global(math.pow)
122
+ class Math_pow(ConcreteTemplate):
123
+ cases = [
124
+ signature(types.float64, types.float64, types.int64),
125
+ signature(types.float64, types.float64, types.uint64),
126
+ signature(types.float32, types.float32, types.float32),
127
+ signature(types.float64, types.float64, types.float64),
128
+ ]
129
+
130
+
131
+ @infer_global(math.gcd)
132
+ class Math_gcd(ConcreteTemplate):
133
+ cases = [
134
+ signature(types.int64, types.int64, types.int64),
135
+ signature(types.int32, types.int32, types.int32),
136
+ signature(types.int16, types.int16, types.int16),
137
+ signature(types.int8, types.int8, types.int8),
138
+ signature(types.uint64, types.uint64, types.uint64),
139
+ signature(types.uint32, types.uint32, types.uint32),
140
+ signature(types.uint16, types.uint16, types.uint16),
141
+ signature(types.uint8, types.uint8, types.uint8),
142
+ ]
143
+
144
+
145
+ @infer_global(math.frexp)
146
+ class Math_frexp(ConcreteTemplate):
147
+ cases = [
148
+ signature(types.Tuple((types.float64, types.intc)), types.float64),
149
+ signature(types.Tuple((types.float32, types.intc)), types.float32),
150
+ ]
151
+
152
+
153
+ @infer_global(math.ldexp)
154
+ class Math_ldexp(ConcreteTemplate):
155
+ cases = [
156
+ signature(types.float64, types.float64, types.intc),
157
+ signature(types.float32, types.float32, types.intc),
158
+ ]