numba-cuda 0.21.1__cp313-cp313-win_amd64.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 (488) 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 +577 -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.cp313-win_amd64.pyd +0 -0
  16. numba_cuda/numba/cuda/cext/_devicearray.cpp +159 -0
  17. numba_cuda/numba/cuda/cext/_devicearray.h +29 -0
  18. numba_cuda/numba/cuda/cext/_dispatcher.cp313-win_amd64.pyd +0 -0
  19. numba_cuda/numba/cuda/cext/_dispatcher.cpp +1098 -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.cp313-win_amd64.pyd +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.cp313-win_amd64.pyd +0 -0
  27. numba_cuda/numba/cuda/cext/_typeconv.cpp +206 -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.cp313-win_amd64.pyd +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 +556 -0
  112. numba_cuda/numba/cuda/cudadrv/__init__.py +14 -0
  113. numba_cuda/numba/cuda/cudadrv/devicearray.py +951 -0
  114. numba_cuda/numba/cuda/cudadrv/devices.py +249 -0
  115. numba_cuda/numba/cuda/cudadrv/driver.py +3222 -0
  116. numba_cuda/numba/cuda/cudadrv/drvapi.py +435 -0
  117. numba_cuda/numba/cuda/cudadrv/dummyarray.py +558 -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 +995 -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 +903 -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 +158 -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/intrinsic_wrapper.py +41 -0
  161. numba_cuda/numba/cuda/intrinsics.py +382 -0
  162. numba_cuda/numba/cuda/itanium_mangler.py +214 -0
  163. numba_cuda/numba/cuda/kernels/__init__.py +2 -0
  164. numba_cuda/numba/cuda/kernels/reduction.py +265 -0
  165. numba_cuda/numba/cuda/kernels/transpose.py +65 -0
  166. numba_cuda/numba/cuda/libdevice.py +3386 -0
  167. numba_cuda/numba/cuda/libdevicedecl.py +20 -0
  168. numba_cuda/numba/cuda/libdevicefuncs.py +1060 -0
  169. numba_cuda/numba/cuda/libdeviceimpl.py +88 -0
  170. numba_cuda/numba/cuda/locks.py +19 -0
  171. numba_cuda/numba/cuda/lowering.py +1951 -0
  172. numba_cuda/numba/cuda/mathimpl.py +374 -0
  173. numba_cuda/numba/cuda/memory_management/__init__.py +4 -0
  174. numba_cuda/numba/cuda/memory_management/memsys.cu +99 -0
  175. numba_cuda/numba/cuda/memory_management/memsys.cuh +22 -0
  176. numba_cuda/numba/cuda/memory_management/nrt.cu +212 -0
  177. numba_cuda/numba/cuda/memory_management/nrt.cuh +48 -0
  178. numba_cuda/numba/cuda/memory_management/nrt.py +390 -0
  179. numba_cuda/numba/cuda/memory_management/nrt_context.py +438 -0
  180. numba_cuda/numba/cuda/misc/appdirs.py +594 -0
  181. numba_cuda/numba/cuda/misc/cffiimpl.py +24 -0
  182. numba_cuda/numba/cuda/misc/coverage_support.py +43 -0
  183. numba_cuda/numba/cuda/misc/dump_style.py +41 -0
  184. numba_cuda/numba/cuda/misc/findlib.py +75 -0
  185. numba_cuda/numba/cuda/misc/firstlinefinder.py +96 -0
  186. numba_cuda/numba/cuda/misc/gdb_hook.py +240 -0
  187. numba_cuda/numba/cuda/misc/literal.py +28 -0
  188. numba_cuda/numba/cuda/misc/llvm_pass_timings.py +412 -0
  189. numba_cuda/numba/cuda/misc/special.py +94 -0
  190. numba_cuda/numba/cuda/models.py +56 -0
  191. numba_cuda/numba/cuda/np/arraymath.py +5130 -0
  192. numba_cuda/numba/cuda/np/arrayobj.py +7635 -0
  193. numba_cuda/numba/cuda/np/extensions.py +11 -0
  194. numba_cuda/numba/cuda/np/linalg.py +3087 -0
  195. numba_cuda/numba/cuda/np/math/__init__.py +0 -0
  196. numba_cuda/numba/cuda/np/math/cmathimpl.py +558 -0
  197. numba_cuda/numba/cuda/np/math/mathimpl.py +487 -0
  198. numba_cuda/numba/cuda/np/math/numbers.py +1461 -0
  199. numba_cuda/numba/cuda/np/npdatetime.py +969 -0
  200. numba_cuda/numba/cuda/np/npdatetime_helpers.py +217 -0
  201. numba_cuda/numba/cuda/np/npyfuncs.py +1808 -0
  202. numba_cuda/numba/cuda/np/npyimpl.py +1027 -0
  203. numba_cuda/numba/cuda/np/numpy_support.py +798 -0
  204. numba_cuda/numba/cuda/np/polynomial/__init__.py +4 -0
  205. numba_cuda/numba/cuda/np/polynomial/polynomial_core.py +242 -0
  206. numba_cuda/numba/cuda/np/polynomial/polynomial_functions.py +380 -0
  207. numba_cuda/numba/cuda/np/ufunc/__init__.py +4 -0
  208. numba_cuda/numba/cuda/np/ufunc/decorators.py +203 -0
  209. numba_cuda/numba/cuda/np/ufunc/sigparse.py +68 -0
  210. numba_cuda/numba/cuda/np/ufunc/ufuncbuilder.py +65 -0
  211. numba_cuda/numba/cuda/np/ufunc_db.py +1282 -0
  212. numba_cuda/numba/cuda/np/unsafe/__init__.py +0 -0
  213. numba_cuda/numba/cuda/np/unsafe/ndarray.py +84 -0
  214. numba_cuda/numba/cuda/nvvmutils.py +254 -0
  215. numba_cuda/numba/cuda/printimpl.py +126 -0
  216. numba_cuda/numba/cuda/random.py +308 -0
  217. numba_cuda/numba/cuda/reshape_funcs.cu +156 -0
  218. numba_cuda/numba/cuda/serialize.py +267 -0
  219. numba_cuda/numba/cuda/simulator/__init__.py +63 -0
  220. numba_cuda/numba/cuda/simulator/_internal/__init__.py +4 -0
  221. numba_cuda/numba/cuda/simulator/_internal/cuda_bf16.py +2 -0
  222. numba_cuda/numba/cuda/simulator/api.py +179 -0
  223. numba_cuda/numba/cuda/simulator/bf16.py +4 -0
  224. numba_cuda/numba/cuda/simulator/compiler.py +38 -0
  225. numba_cuda/numba/cuda/simulator/cudadrv/__init__.py +11 -0
  226. numba_cuda/numba/cuda/simulator/cudadrv/devicearray.py +462 -0
  227. numba_cuda/numba/cuda/simulator/cudadrv/devices.py +122 -0
  228. numba_cuda/numba/cuda/simulator/cudadrv/driver.py +66 -0
  229. numba_cuda/numba/cuda/simulator/cudadrv/drvapi.py +7 -0
  230. numba_cuda/numba/cuda/simulator/cudadrv/dummyarray.py +7 -0
  231. numba_cuda/numba/cuda/simulator/cudadrv/error.py +10 -0
  232. numba_cuda/numba/cuda/simulator/cudadrv/libs.py +10 -0
  233. numba_cuda/numba/cuda/simulator/cudadrv/linkable_code.py +61 -0
  234. numba_cuda/numba/cuda/simulator/cudadrv/nvrtc.py +11 -0
  235. numba_cuda/numba/cuda/simulator/cudadrv/nvvm.py +32 -0
  236. numba_cuda/numba/cuda/simulator/cudadrv/runtime.py +22 -0
  237. numba_cuda/numba/cuda/simulator/dispatcher.py +11 -0
  238. numba_cuda/numba/cuda/simulator/kernel.py +320 -0
  239. numba_cuda/numba/cuda/simulator/kernelapi.py +509 -0
  240. numba_cuda/numba/cuda/simulator/memory_management/__init__.py +4 -0
  241. numba_cuda/numba/cuda/simulator/memory_management/nrt.py +21 -0
  242. numba_cuda/numba/cuda/simulator/reduction.py +19 -0
  243. numba_cuda/numba/cuda/simulator/tests/support.py +4 -0
  244. numba_cuda/numba/cuda/simulator/vector_types.py +65 -0
  245. numba_cuda/numba/cuda/simulator_init.py +18 -0
  246. numba_cuda/numba/cuda/stubs.py +635 -0
  247. numba_cuda/numba/cuda/target.py +505 -0
  248. numba_cuda/numba/cuda/testing.py +347 -0
  249. numba_cuda/numba/cuda/tests/__init__.py +62 -0
  250. numba_cuda/numba/cuda/tests/benchmarks/__init__.py +0 -0
  251. numba_cuda/numba/cuda/tests/benchmarks/test_kernel_launch.py +119 -0
  252. numba_cuda/numba/cuda/tests/cloudpickle_main_class.py +9 -0
  253. numba_cuda/numba/cuda/tests/core/serialize_usecases.py +113 -0
  254. numba_cuda/numba/cuda/tests/core/test_itanium_mangler.py +83 -0
  255. numba_cuda/numba/cuda/tests/core/test_serialize.py +371 -0
  256. numba_cuda/numba/cuda/tests/cudadrv/__init__.py +9 -0
  257. numba_cuda/numba/cuda/tests/cudadrv/test_array_attr.py +147 -0
  258. numba_cuda/numba/cuda/tests/cudadrv/test_context_stack.py +161 -0
  259. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_array_slicing.py +397 -0
  260. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_auto_context.py +24 -0
  261. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_devicerecord.py +180 -0
  262. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_driver.py +313 -0
  263. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_memory.py +187 -0
  264. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_ndarray.py +621 -0
  265. numba_cuda/numba/cuda/tests/cudadrv/test_deallocations.py +247 -0
  266. numba_cuda/numba/cuda/tests/cudadrv/test_detect.py +100 -0
  267. numba_cuda/numba/cuda/tests/cudadrv/test_emm_plugins.py +198 -0
  268. numba_cuda/numba/cuda/tests/cudadrv/test_events.py +53 -0
  269. numba_cuda/numba/cuda/tests/cudadrv/test_host_alloc.py +72 -0
  270. numba_cuda/numba/cuda/tests/cudadrv/test_init.py +138 -0
  271. numba_cuda/numba/cuda/tests/cudadrv/test_inline_ptx.py +43 -0
  272. numba_cuda/numba/cuda/tests/cudadrv/test_is_fp16.py +15 -0
  273. numba_cuda/numba/cuda/tests/cudadrv/test_linkable_code.py +58 -0
  274. numba_cuda/numba/cuda/tests/cudadrv/test_linker.py +348 -0
  275. numba_cuda/numba/cuda/tests/cudadrv/test_managed_alloc.py +128 -0
  276. numba_cuda/numba/cuda/tests/cudadrv/test_module_callbacks.py +301 -0
  277. numba_cuda/numba/cuda/tests/cudadrv/test_nvjitlink.py +174 -0
  278. numba_cuda/numba/cuda/tests/cudadrv/test_nvrtc.py +28 -0
  279. numba_cuda/numba/cuda/tests/cudadrv/test_nvvm_driver.py +185 -0
  280. numba_cuda/numba/cuda/tests/cudadrv/test_pinned.py +39 -0
  281. numba_cuda/numba/cuda/tests/cudadrv/test_profiler.py +23 -0
  282. numba_cuda/numba/cuda/tests/cudadrv/test_reset_device.py +38 -0
  283. numba_cuda/numba/cuda/tests/cudadrv/test_runtime.py +48 -0
  284. numba_cuda/numba/cuda/tests/cudadrv/test_select_device.py +44 -0
  285. numba_cuda/numba/cuda/tests/cudadrv/test_streams.py +127 -0
  286. numba_cuda/numba/cuda/tests/cudapy/__init__.py +9 -0
  287. numba_cuda/numba/cuda/tests/cudapy/cache_usecases.py +231 -0
  288. numba_cuda/numba/cuda/tests/cudapy/cache_with_cpu_usecases.py +50 -0
  289. numba_cuda/numba/cuda/tests/cudapy/cg_cache_usecases.py +36 -0
  290. numba_cuda/numba/cuda/tests/cudapy/complex_usecases.py +116 -0
  291. numba_cuda/numba/cuda/tests/cudapy/enum_usecases.py +59 -0
  292. numba_cuda/numba/cuda/tests/cudapy/extensions_usecases.py +62 -0
  293. numba_cuda/numba/cuda/tests/cudapy/jitlink.ptx +28 -0
  294. numba_cuda/numba/cuda/tests/cudapy/overload_usecases.py +33 -0
  295. numba_cuda/numba/cuda/tests/cudapy/recursion_usecases.py +104 -0
  296. numba_cuda/numba/cuda/tests/cudapy/test_alignment.py +47 -0
  297. numba_cuda/numba/cuda/tests/cudapy/test_analysis.py +1122 -0
  298. numba_cuda/numba/cuda/tests/cudapy/test_array.py +344 -0
  299. numba_cuda/numba/cuda/tests/cudapy/test_array_alignment.py +268 -0
  300. numba_cuda/numba/cuda/tests/cudapy/test_array_args.py +203 -0
  301. numba_cuda/numba/cuda/tests/cudapy/test_array_methods.py +63 -0
  302. numba_cuda/numba/cuda/tests/cudapy/test_array_reductions.py +360 -0
  303. numba_cuda/numba/cuda/tests/cudapy/test_atomics.py +1815 -0
  304. numba_cuda/numba/cuda/tests/cudapy/test_bfloat16.py +599 -0
  305. numba_cuda/numba/cuda/tests/cudapy/test_bfloat16_bindings.py +377 -0
  306. numba_cuda/numba/cuda/tests/cudapy/test_blackscholes.py +160 -0
  307. numba_cuda/numba/cuda/tests/cudapy/test_boolean.py +27 -0
  308. numba_cuda/numba/cuda/tests/cudapy/test_byteflow.py +98 -0
  309. numba_cuda/numba/cuda/tests/cudapy/test_cache_hints.py +210 -0
  310. numba_cuda/numba/cuda/tests/cudapy/test_caching.py +683 -0
  311. numba_cuda/numba/cuda/tests/cudapy/test_casting.py +265 -0
  312. numba_cuda/numba/cuda/tests/cudapy/test_cffi.py +42 -0
  313. numba_cuda/numba/cuda/tests/cudapy/test_compiler.py +718 -0
  314. numba_cuda/numba/cuda/tests/cudapy/test_complex.py +370 -0
  315. numba_cuda/numba/cuda/tests/cudapy/test_complex_kernel.py +23 -0
  316. numba_cuda/numba/cuda/tests/cudapy/test_const_string.py +142 -0
  317. numba_cuda/numba/cuda/tests/cudapy/test_constmem.py +178 -0
  318. numba_cuda/numba/cuda/tests/cudapy/test_cooperative_groups.py +193 -0
  319. numba_cuda/numba/cuda/tests/cudapy/test_copy_propagate.py +131 -0
  320. numba_cuda/numba/cuda/tests/cudapy/test_cuda_array_interface.py +438 -0
  321. numba_cuda/numba/cuda/tests/cudapy/test_cuda_jit_no_types.py +94 -0
  322. numba_cuda/numba/cuda/tests/cudapy/test_datetime.py +101 -0
  323. numba_cuda/numba/cuda/tests/cudapy/test_debug.py +105 -0
  324. numba_cuda/numba/cuda/tests/cudapy/test_debuginfo.py +889 -0
  325. numba_cuda/numba/cuda/tests/cudapy/test_debuginfo_types.py +476 -0
  326. numba_cuda/numba/cuda/tests/cudapy/test_device_func.py +500 -0
  327. numba_cuda/numba/cuda/tests/cudapy/test_dispatcher.py +820 -0
  328. numba_cuda/numba/cuda/tests/cudapy/test_enums.py +152 -0
  329. numba_cuda/numba/cuda/tests/cudapy/test_errors.py +111 -0
  330. numba_cuda/numba/cuda/tests/cudapy/test_exception.py +170 -0
  331. numba_cuda/numba/cuda/tests/cudapy/test_extending.py +1088 -0
  332. numba_cuda/numba/cuda/tests/cudapy/test_extending_types.py +71 -0
  333. numba_cuda/numba/cuda/tests/cudapy/test_fastmath.py +265 -0
  334. numba_cuda/numba/cuda/tests/cudapy/test_flow_control.py +1433 -0
  335. numba_cuda/numba/cuda/tests/cudapy/test_forall.py +57 -0
  336. numba_cuda/numba/cuda/tests/cudapy/test_freevar.py +34 -0
  337. numba_cuda/numba/cuda/tests/cudapy/test_frexp_ldexp.py +69 -0
  338. numba_cuda/numba/cuda/tests/cudapy/test_globals.py +62 -0
  339. numba_cuda/numba/cuda/tests/cudapy/test_gufunc.py +474 -0
  340. numba_cuda/numba/cuda/tests/cudapy/test_gufunc_scalar.py +167 -0
  341. numba_cuda/numba/cuda/tests/cudapy/test_gufunc_scheduling.py +92 -0
  342. numba_cuda/numba/cuda/tests/cudapy/test_idiv.py +39 -0
  343. numba_cuda/numba/cuda/tests/cudapy/test_inline.py +170 -0
  344. numba_cuda/numba/cuda/tests/cudapy/test_inspect.py +255 -0
  345. numba_cuda/numba/cuda/tests/cudapy/test_intrinsics.py +1219 -0
  346. numba_cuda/numba/cuda/tests/cudapy/test_ipc.py +263 -0
  347. numba_cuda/numba/cuda/tests/cudapy/test_ir.py +598 -0
  348. numba_cuda/numba/cuda/tests/cudapy/test_ir_utils.py +276 -0
  349. numba_cuda/numba/cuda/tests/cudapy/test_iterators.py +101 -0
  350. numba_cuda/numba/cuda/tests/cudapy/test_lang.py +68 -0
  351. numba_cuda/numba/cuda/tests/cudapy/test_laplace.py +123 -0
  352. numba_cuda/numba/cuda/tests/cudapy/test_libdevice.py +194 -0
  353. numba_cuda/numba/cuda/tests/cudapy/test_lineinfo.py +220 -0
  354. numba_cuda/numba/cuda/tests/cudapy/test_localmem.py +173 -0
  355. numba_cuda/numba/cuda/tests/cudapy/test_make_function_to_jit_function.py +364 -0
  356. numba_cuda/numba/cuda/tests/cudapy/test_mandel.py +47 -0
  357. numba_cuda/numba/cuda/tests/cudapy/test_math.py +842 -0
  358. numba_cuda/numba/cuda/tests/cudapy/test_matmul.py +76 -0
  359. numba_cuda/numba/cuda/tests/cudapy/test_minmax.py +78 -0
  360. numba_cuda/numba/cuda/tests/cudapy/test_montecarlo.py +25 -0
  361. numba_cuda/numba/cuda/tests/cudapy/test_multigpu.py +145 -0
  362. numba_cuda/numba/cuda/tests/cudapy/test_multiprocessing.py +39 -0
  363. numba_cuda/numba/cuda/tests/cudapy/test_multithreads.py +82 -0
  364. numba_cuda/numba/cuda/tests/cudapy/test_nondet.py +53 -0
  365. numba_cuda/numba/cuda/tests/cudapy/test_operator.py +504 -0
  366. numba_cuda/numba/cuda/tests/cudapy/test_optimization.py +93 -0
  367. numba_cuda/numba/cuda/tests/cudapy/test_overload.py +402 -0
  368. numba_cuda/numba/cuda/tests/cudapy/test_powi.py +128 -0
  369. numba_cuda/numba/cuda/tests/cudapy/test_print.py +193 -0
  370. numba_cuda/numba/cuda/tests/cudapy/test_py2_div_issue.py +37 -0
  371. numba_cuda/numba/cuda/tests/cudapy/test_random.py +117 -0
  372. numba_cuda/numba/cuda/tests/cudapy/test_record_dtype.py +614 -0
  373. numba_cuda/numba/cuda/tests/cudapy/test_recursion.py +130 -0
  374. numba_cuda/numba/cuda/tests/cudapy/test_reduction.py +94 -0
  375. numba_cuda/numba/cuda/tests/cudapy/test_retrieve_autoconverted_arrays.py +83 -0
  376. numba_cuda/numba/cuda/tests/cudapy/test_serialize.py +86 -0
  377. numba_cuda/numba/cuda/tests/cudapy/test_slicing.py +40 -0
  378. numba_cuda/numba/cuda/tests/cudapy/test_sm.py +457 -0
  379. numba_cuda/numba/cuda/tests/cudapy/test_sm_creation.py +233 -0
  380. numba_cuda/numba/cuda/tests/cudapy/test_ssa.py +454 -0
  381. numba_cuda/numba/cuda/tests/cudapy/test_stream_api.py +56 -0
  382. numba_cuda/numba/cuda/tests/cudapy/test_sync.py +277 -0
  383. numba_cuda/numba/cuda/tests/cudapy/test_tracing.py +200 -0
  384. numba_cuda/numba/cuda/tests/cudapy/test_transpose.py +90 -0
  385. numba_cuda/numba/cuda/tests/cudapy/test_typeconv.py +333 -0
  386. numba_cuda/numba/cuda/tests/cudapy/test_typeinfer.py +538 -0
  387. numba_cuda/numba/cuda/tests/cudapy/test_ufuncs.py +585 -0
  388. numba_cuda/numba/cuda/tests/cudapy/test_userexc.py +42 -0
  389. numba_cuda/numba/cuda/tests/cudapy/test_vector_type.py +485 -0
  390. numba_cuda/numba/cuda/tests/cudapy/test_vectorize.py +312 -0
  391. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_complex.py +23 -0
  392. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_decor.py +183 -0
  393. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_device.py +40 -0
  394. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_scalar_arg.py +40 -0
  395. numba_cuda/numba/cuda/tests/cudapy/test_warning.py +206 -0
  396. numba_cuda/numba/cuda/tests/cudapy/test_warp_ops.py +331 -0
  397. numba_cuda/numba/cuda/tests/cudasim/__init__.py +9 -0
  398. numba_cuda/numba/cuda/tests/cudasim/support.py +9 -0
  399. numba_cuda/numba/cuda/tests/cudasim/test_cudasim_issues.py +111 -0
  400. numba_cuda/numba/cuda/tests/data/__init__.py +2 -0
  401. numba_cuda/numba/cuda/tests/data/cta_barrier.cu +28 -0
  402. numba_cuda/numba/cuda/tests/data/cuda_include.cu +10 -0
  403. numba_cuda/numba/cuda/tests/data/error.cu +12 -0
  404. numba_cuda/numba/cuda/tests/data/include/add.cuh +8 -0
  405. numba_cuda/numba/cuda/tests/data/jitlink.cu +28 -0
  406. numba_cuda/numba/cuda/tests/data/jitlink.ptx +49 -0
  407. numba_cuda/numba/cuda/tests/data/warn.cu +12 -0
  408. numba_cuda/numba/cuda/tests/doc_examples/__init__.py +9 -0
  409. numba_cuda/numba/cuda/tests/doc_examples/ffi/__init__.py +2 -0
  410. numba_cuda/numba/cuda/tests/doc_examples/ffi/functions.cu +54 -0
  411. numba_cuda/numba/cuda/tests/doc_examples/ffi/include/mul.cuh +8 -0
  412. numba_cuda/numba/cuda/tests/doc_examples/ffi/saxpy.cu +14 -0
  413. numba_cuda/numba/cuda/tests/doc_examples/test_cg.py +86 -0
  414. numba_cuda/numba/cuda/tests/doc_examples/test_cpointer.py +68 -0
  415. numba_cuda/numba/cuda/tests/doc_examples/test_cpu_gpu_compat.py +81 -0
  416. numba_cuda/numba/cuda/tests/doc_examples/test_ffi.py +141 -0
  417. numba_cuda/numba/cuda/tests/doc_examples/test_laplace.py +160 -0
  418. numba_cuda/numba/cuda/tests/doc_examples/test_matmul.py +180 -0
  419. numba_cuda/numba/cuda/tests/doc_examples/test_montecarlo.py +119 -0
  420. numba_cuda/numba/cuda/tests/doc_examples/test_random.py +66 -0
  421. numba_cuda/numba/cuda/tests/doc_examples/test_reduction.py +80 -0
  422. numba_cuda/numba/cuda/tests/doc_examples/test_sessionize.py +206 -0
  423. numba_cuda/numba/cuda/tests/doc_examples/test_ufunc.py +53 -0
  424. numba_cuda/numba/cuda/tests/doc_examples/test_vecadd.py +76 -0
  425. numba_cuda/numba/cuda/tests/nocuda/__init__.py +9 -0
  426. numba_cuda/numba/cuda/tests/nocuda/test_dummyarray.py +391 -0
  427. numba_cuda/numba/cuda/tests/nocuda/test_function_resolution.py +48 -0
  428. numba_cuda/numba/cuda/tests/nocuda/test_import.py +63 -0
  429. numba_cuda/numba/cuda/tests/nocuda/test_library_lookup.py +252 -0
  430. numba_cuda/numba/cuda/tests/nocuda/test_nvvm.py +59 -0
  431. numba_cuda/numba/cuda/tests/nrt/__init__.py +9 -0
  432. numba_cuda/numba/cuda/tests/nrt/test_nrt.py +387 -0
  433. numba_cuda/numba/cuda/tests/nrt/test_nrt_refct.py +124 -0
  434. numba_cuda/numba/cuda/tests/support.py +900 -0
  435. numba_cuda/numba/cuda/typeconv/__init__.py +4 -0
  436. numba_cuda/numba/cuda/typeconv/castgraph.py +137 -0
  437. numba_cuda/numba/cuda/typeconv/rules.py +63 -0
  438. numba_cuda/numba/cuda/typeconv/typeconv.py +121 -0
  439. numba_cuda/numba/cuda/types/__init__.py +233 -0
  440. numba_cuda/numba/cuda/types/__init__.pyi +167 -0
  441. numba_cuda/numba/cuda/types/abstract.py +9 -0
  442. numba_cuda/numba/cuda/types/common.py +9 -0
  443. numba_cuda/numba/cuda/types/containers.py +9 -0
  444. numba_cuda/numba/cuda/types/cuda_abstract.py +533 -0
  445. numba_cuda/numba/cuda/types/cuda_common.py +110 -0
  446. numba_cuda/numba/cuda/types/cuda_containers.py +971 -0
  447. numba_cuda/numba/cuda/types/cuda_function_type.py +230 -0
  448. numba_cuda/numba/cuda/types/cuda_functions.py +798 -0
  449. numba_cuda/numba/cuda/types/cuda_iterators.py +120 -0
  450. numba_cuda/numba/cuda/types/cuda_misc.py +569 -0
  451. numba_cuda/numba/cuda/types/cuda_npytypes.py +690 -0
  452. numba_cuda/numba/cuda/types/cuda_scalars.py +280 -0
  453. numba_cuda/numba/cuda/types/ext_types.py +101 -0
  454. numba_cuda/numba/cuda/types/function_type.py +11 -0
  455. numba_cuda/numba/cuda/types/functions.py +9 -0
  456. numba_cuda/numba/cuda/types/iterators.py +9 -0
  457. numba_cuda/numba/cuda/types/misc.py +9 -0
  458. numba_cuda/numba/cuda/types/npytypes.py +9 -0
  459. numba_cuda/numba/cuda/types/scalars.py +9 -0
  460. numba_cuda/numba/cuda/typing/__init__.py +19 -0
  461. numba_cuda/numba/cuda/typing/arraydecl.py +939 -0
  462. numba_cuda/numba/cuda/typing/asnumbatype.py +130 -0
  463. numba_cuda/numba/cuda/typing/bufproto.py +70 -0
  464. numba_cuda/numba/cuda/typing/builtins.py +1209 -0
  465. numba_cuda/numba/cuda/typing/cffi_utils.py +219 -0
  466. numba_cuda/numba/cuda/typing/cmathdecl.py +47 -0
  467. numba_cuda/numba/cuda/typing/collections.py +138 -0
  468. numba_cuda/numba/cuda/typing/context.py +782 -0
  469. numba_cuda/numba/cuda/typing/ctypes_utils.py +125 -0
  470. numba_cuda/numba/cuda/typing/dictdecl.py +63 -0
  471. numba_cuda/numba/cuda/typing/enumdecl.py +74 -0
  472. numba_cuda/numba/cuda/typing/listdecl.py +147 -0
  473. numba_cuda/numba/cuda/typing/mathdecl.py +158 -0
  474. numba_cuda/numba/cuda/typing/npdatetime.py +322 -0
  475. numba_cuda/numba/cuda/typing/npydecl.py +749 -0
  476. numba_cuda/numba/cuda/typing/setdecl.py +115 -0
  477. numba_cuda/numba/cuda/typing/templates.py +1446 -0
  478. numba_cuda/numba/cuda/typing/typeof.py +301 -0
  479. numba_cuda/numba/cuda/ufuncs.py +746 -0
  480. numba_cuda/numba/cuda/utils.py +724 -0
  481. numba_cuda/numba/cuda/vector_types.py +214 -0
  482. numba_cuda/numba/cuda/vectorizers.py +260 -0
  483. numba_cuda-0.21.1.dist-info/METADATA +109 -0
  484. numba_cuda-0.21.1.dist-info/RECORD +488 -0
  485. numba_cuda-0.21.1.dist-info/WHEEL +5 -0
  486. numba_cuda-0.21.1.dist-info/licenses/LICENSE +26 -0
  487. numba_cuda-0.21.1.dist-info/licenses/LICENSE.numba +24 -0
  488. numba_cuda-0.21.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,4 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
4
+ from .castgraph import Conversion # noqa F401
@@ -0,0 +1,137 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
4
+ from collections import defaultdict
5
+ import enum
6
+
7
+
8
+ class Conversion(enum.IntEnum):
9
+ """
10
+ A conversion kind from one type to the other. The enum members
11
+ are ordered from stricter to looser.
12
+ """
13
+
14
+ # The two types are identical
15
+ exact = 1
16
+ # The two types are of the same kind, the destination type has more
17
+ # extension or precision than the source type (e.g. float32 -> float64,
18
+ # or int32 -> int64)
19
+ promote = 2
20
+ # The source type can be converted to the destination type without loss
21
+ # of information (e.g. int32 -> int64). Note that the conversion may
22
+ # still fail explicitly at runtime (e.g. Optional(int32) -> int32)
23
+ safe = 3
24
+ # The conversion may appear to succeed at runtime while losing information
25
+ # or precision (e.g. int32 -> uint32, float64 -> float32, int64 -> int32,
26
+ # etc.)
27
+ unsafe = 4
28
+
29
+ # This value is only used internally
30
+ nil = 99
31
+
32
+
33
+ class CastSet(object):
34
+ """A set of casting rules.
35
+
36
+ There is at most one rule per target type.
37
+ """
38
+
39
+ def __init__(self):
40
+ self._rels = {}
41
+
42
+ def insert(self, to, rel):
43
+ old = self.get(to)
44
+ setrel = min(rel, old)
45
+ self._rels[to] = setrel
46
+ return old != setrel
47
+
48
+ def items(self):
49
+ return self._rels.items()
50
+
51
+ def get(self, item):
52
+ return self._rels.get(item, Conversion.nil)
53
+
54
+ def __len__(self):
55
+ return len(self._rels)
56
+
57
+ def __repr__(self):
58
+ body = [
59
+ "{rel}({ty})".format(rel=rel, ty=ty)
60
+ for ty, rel in self._rels.items()
61
+ ]
62
+ return "{" + ", ".join(body) + "}"
63
+
64
+ def __contains__(self, item):
65
+ return item in self._rels
66
+
67
+ def __iter__(self):
68
+ return iter(self._rels.keys())
69
+
70
+ def __getitem__(self, item):
71
+ return self._rels[item]
72
+
73
+
74
+ class TypeGraph(object):
75
+ """A graph that maintains the casting relationship of all types.
76
+
77
+ This simplifies the definition of casting rules by automatically
78
+ propagating the rules.
79
+ """
80
+
81
+ def __init__(self, callback=None):
82
+ """
83
+ Args
84
+ ----
85
+ - callback: callable or None
86
+ It is called for each new casting rule with
87
+ (from_type, to_type, castrel).
88
+ """
89
+ assert callback is None or callable(callback)
90
+ self._forwards = defaultdict(CastSet)
91
+ self._backwards = defaultdict(set)
92
+ self._callback = callback
93
+
94
+ def get(self, ty):
95
+ return self._forwards[ty]
96
+
97
+ def propagate(self, a, b, baserel):
98
+ backset = self._backwards[a]
99
+
100
+ # Forward propagate the relationship to all nodes that b leads to
101
+ for child in self._forwards[b]:
102
+ rel = max(baserel, self._forwards[b][child])
103
+ if a != child:
104
+ if self._forwards[a].insert(child, rel):
105
+ self._callback(a, child, rel)
106
+ self._backwards[child].add(a)
107
+
108
+ # Propagate the relationship from nodes that connects to a
109
+ for backnode in backset:
110
+ if backnode != child:
111
+ backrel = max(rel, self._forwards[backnode][a])
112
+ if self._forwards[backnode].insert(child, backrel):
113
+ self._callback(backnode, child, backrel)
114
+ self._backwards[child].add(backnode)
115
+
116
+ # Every node that leads to a connects to b
117
+ for child in self._backwards[a]:
118
+ rel = max(baserel, self._forwards[child][a])
119
+ if b != child:
120
+ if self._forwards[child].insert(b, rel):
121
+ self._callback(child, b, rel)
122
+ self._backwards[b].add(child)
123
+
124
+ def insert_rule(self, a, b, rel):
125
+ self._forwards[a].insert(b, rel)
126
+ self._callback(a, b, rel)
127
+ self._backwards[b].add(a)
128
+ self.propagate(a, b, rel)
129
+
130
+ def promote(self, a, b):
131
+ self.insert_rule(a, b, Conversion.promote)
132
+
133
+ def safe(self, a, b):
134
+ self.insert_rule(a, b, Conversion.safe)
135
+
136
+ def unsafe(self, a, b):
137
+ self.insert_rule(a, b, Conversion.unsafe)
@@ -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
+ import itertools
5
+ from .typeconv import TypeManager, TypeCastingRules
6
+ from numba.cuda import types
7
+
8
+
9
+ default_type_manager = TypeManager()
10
+
11
+
12
+ def dump_number_rules():
13
+ tm = default_type_manager
14
+ for a, b in itertools.product(types.number_domain, types.number_domain):
15
+ print(a, "->", b, tm.check_compatible(a, b))
16
+
17
+
18
+ def _init_casting_rules(tm):
19
+ tcr = TypeCastingRules(tm)
20
+ tcr.safe_unsafe(types.boolean, types.int8)
21
+ tcr.safe_unsafe(types.boolean, types.uint8)
22
+
23
+ tcr.promote_unsafe(types.int8, types.int16)
24
+ tcr.promote_unsafe(types.uint8, types.uint16)
25
+
26
+ tcr.promote_unsafe(types.int16, types.int32)
27
+ tcr.promote_unsafe(types.uint16, types.uint32)
28
+
29
+ tcr.promote_unsafe(types.int32, types.int64)
30
+ tcr.promote_unsafe(types.uint32, types.uint64)
31
+
32
+ tcr.safe_unsafe(types.uint8, types.int16)
33
+ tcr.safe_unsafe(types.uint16, types.int32)
34
+ tcr.safe_unsafe(types.uint32, types.int64)
35
+
36
+ tcr.safe_unsafe(types.int8, types.float16)
37
+ tcr.safe_unsafe(types.int16, types.float32)
38
+ tcr.safe_unsafe(types.int32, types.float64)
39
+
40
+ tcr.unsafe_unsafe(types.int16, types.float16)
41
+ tcr.unsafe_unsafe(types.int32, types.float32)
42
+ # XXX this is inconsistent with the above; but we want to prefer
43
+ # float64 over int64 when typing a heterogeneous operation,
44
+ # e.g. `float64 + int64`. Perhaps we need more granularity in the
45
+ # conversion kinds.
46
+ tcr.safe_unsafe(types.int64, types.float64)
47
+ tcr.safe_unsafe(types.uint64, types.float64)
48
+
49
+ tcr.promote_unsafe(types.float16, types.float32)
50
+ tcr.promote_unsafe(types.float32, types.float64)
51
+
52
+ tcr.safe(types.float32, types.complex64)
53
+ tcr.safe(types.float64, types.complex128)
54
+
55
+ tcr.promote_unsafe(types.complex64, types.complex128)
56
+
57
+ # Allow integers to cast ot void*
58
+ tcr.unsafe_unsafe(types.uintp, types.voidptr)
59
+
60
+ return tcr
61
+
62
+
63
+ default_casting_rules = _init_casting_rules(default_type_manager)
@@ -0,0 +1,121 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
4
+ from numba.cuda.cext import _typeconv
5
+ from numba.cuda.typeconv import castgraph, Conversion
6
+ from numba.cuda import types
7
+
8
+
9
+ class TypeManager(object):
10
+ # The character codes used by the C/C++ API (_typeconv.cpp)
11
+ _conversion_codes = {
12
+ Conversion.safe: ord("s"),
13
+ Conversion.unsafe: ord("u"),
14
+ Conversion.promote: ord("p"),
15
+ }
16
+
17
+ def __init__(self):
18
+ self._ptr = _typeconv.new_type_manager()
19
+ self._types = set()
20
+
21
+ def select_overload(
22
+ self, sig, overloads, allow_unsafe, exact_match_required
23
+ ):
24
+ sig = [t._code for t in sig]
25
+ overloads = [[t._code for t in s] for s in overloads]
26
+ return _typeconv.select_overload(
27
+ self._ptr, sig, overloads, allow_unsafe, exact_match_required
28
+ )
29
+
30
+ def check_compatible(self, fromty, toty):
31
+ if not isinstance(toty, types.Type):
32
+ raise ValueError(
33
+ "Specified type '%s' (%s) is not a Numba type"
34
+ % (toty, type(toty))
35
+ )
36
+ name = _typeconv.check_compatible(self._ptr, fromty._code, toty._code)
37
+ conv = Conversion[name] if name is not None else None
38
+ assert conv is not Conversion.nil
39
+ return conv
40
+
41
+ def set_compatible(self, fromty, toty, by):
42
+ code = self._conversion_codes[by]
43
+ _typeconv.set_compatible(self._ptr, fromty._code, toty._code, code)
44
+ # Ensure the types don't die, otherwise they may be recreated with
45
+ # other type codes and pollute the hash table.
46
+ self._types.add(fromty)
47
+ self._types.add(toty)
48
+
49
+ def set_promote(self, fromty, toty):
50
+ self.set_compatible(fromty, toty, Conversion.promote)
51
+
52
+ def set_unsafe_convert(self, fromty, toty):
53
+ self.set_compatible(fromty, toty, Conversion.unsafe)
54
+
55
+ def set_safe_convert(self, fromty, toty):
56
+ self.set_compatible(fromty, toty, Conversion.safe)
57
+
58
+ def get_pointer(self):
59
+ return _typeconv.get_pointer(self._ptr)
60
+
61
+
62
+ class TypeCastingRules(object):
63
+ """
64
+ A helper for establishing type casting rules.
65
+ """
66
+
67
+ def __init__(self, tm):
68
+ self._tm = tm
69
+ self._tg = castgraph.TypeGraph(self._cb_update)
70
+
71
+ def promote(self, a, b):
72
+ """
73
+ Set `a` can promote to `b`
74
+ """
75
+ self._tg.promote(a, b)
76
+
77
+ def unsafe(self, a, b):
78
+ """
79
+ Set `a` can unsafe convert to `b`
80
+ """
81
+ self._tg.unsafe(a, b)
82
+
83
+ def safe(self, a, b):
84
+ """
85
+ Set `a` can safe convert to `b`
86
+ """
87
+ self._tg.safe(a, b)
88
+
89
+ def promote_unsafe(self, a, b):
90
+ """
91
+ Set `a` can promote to `b` and `b` can unsafe convert to `a`
92
+ """
93
+ self.promote(a, b)
94
+ self.unsafe(b, a)
95
+
96
+ def safe_unsafe(self, a, b):
97
+ """
98
+ Set `a` can safe convert to `b` and `b` can unsafe convert to `a`
99
+ """
100
+ self._tg.safe(a, b)
101
+ self._tg.unsafe(b, a)
102
+
103
+ def unsafe_unsafe(self, a, b):
104
+ """
105
+ Set `a` can unsafe convert to `b` and `b` can unsafe convert to `a`
106
+ """
107
+ self._tg.unsafe(a, b)
108
+ self._tg.unsafe(b, a)
109
+
110
+ def _cb_update(self, a, b, rel):
111
+ """
112
+ Callback for updating.
113
+ """
114
+ if rel == Conversion.promote:
115
+ self._tm.set_promote(a, b)
116
+ elif rel == Conversion.safe:
117
+ self._tm.set_safe_convert(a, b)
118
+ elif rel == Conversion.unsafe:
119
+ self._tm.set_unsafe_convert(a, b)
120
+ else:
121
+ raise AssertionError(rel)
@@ -0,0 +1,233 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
4
+ import struct
5
+
6
+ import numpy as np
7
+ from numba.cuda import utils
8
+
9
+ from .abstract import *
10
+ from .containers import *
11
+ from .functions import *
12
+ from .iterators import *
13
+ from .misc import *
14
+ from .npytypes import *
15
+ from .scalars import *
16
+ from .function_type import *
17
+ from .ext_types import bfloat16, dim3, grid_group, GridGroup, Dim3
18
+
19
+ numpy_version = tuple(map(int, np.__version__.split(".")[:2]))
20
+
21
+ # Short names
22
+
23
+ pyobject = PyObject("pyobject")
24
+ ffi_forced_object = Opaque("ffi_forced_object")
25
+ ffi = Opaque("ffi")
26
+ none = NoneType("none")
27
+ ellipsis = EllipsisType("...")
28
+ Any = Phantom("any")
29
+ undefined = Undefined("undefined")
30
+ py2_string_type = Opaque("str")
31
+ unicode_type = UnicodeType("unicode_type")
32
+ string = unicode_type
33
+ unknown = Dummy("unknown")
34
+ npy_rng = NumPyRandomGeneratorType("rng")
35
+ npy_bitgen = NumPyRandomBitGeneratorType("bitgen")
36
+
37
+ # _undef_var is used to represent undefined variables in the type system.
38
+ _undef_var = UndefVar("_undef_var")
39
+
40
+ code_type = Opaque("code")
41
+ pyfunc_type = Opaque("pyfunc")
42
+
43
+ # No operation is defined on voidptr
44
+ # Can only pass it around
45
+ voidptr = RawPointer("void*")
46
+
47
+ # optional types
48
+ optional = Optional
49
+ deferred_type = DeferredType
50
+ slice2_type = SliceType("slice<a:b>", 2)
51
+ slice3_type = SliceType("slice<a:b:c>", 3)
52
+ void = none
53
+
54
+ # Need to ignore mypy errors because mypy cannot unify types for both
55
+ # the type systems even if they're logically mutually exclusive.
56
+ # mypy: ignore-errors
57
+
58
+ boolean = bool_ = Boolean("bool")
59
+ if numpy_version >= (2, 0):
60
+ bool = bool_
61
+
62
+ byte = uint8 = Integer("uint8")
63
+ uint16 = Integer("uint16")
64
+ uint32 = Integer("uint32")
65
+ uint64 = Integer("uint64")
66
+
67
+ int8 = Integer("int8")
68
+ int16 = Integer("int16")
69
+ int32 = Integer("int32")
70
+ int64 = Integer("int64")
71
+ intp = int32 if utils.MACHINE_BITS == 32 else int64
72
+ uintp = uint32 if utils.MACHINE_BITS == 32 else uint64
73
+ intc = int32 if struct.calcsize("i") == 4 else int64
74
+ uintc = uint32 if struct.calcsize("I") == 4 else uint64
75
+ ssize_t = int32 if struct.calcsize("n") == 4 else int64
76
+ size_t = uint32 if struct.calcsize("N") == 4 else uint64
77
+
78
+ float32 = Float("float32")
79
+ float64 = Float("float64")
80
+ float16 = Float("float16")
81
+
82
+ complex64 = Complex("complex64", float32)
83
+ complex128 = Complex("complex128", float64)
84
+
85
+ range_iter32_type = RangeIteratorType(int32)
86
+ range_iter64_type = RangeIteratorType(int64)
87
+ unsigned_range_iter64_type = RangeIteratorType(uint64)
88
+ range_state32_type = RangeType(int32)
89
+ range_state64_type = RangeType(int64)
90
+ unsigned_range_state64_type = RangeType(uint64)
91
+
92
+ signed_domain = frozenset([int8, int16, int32, int64])
93
+ unsigned_domain = frozenset([uint8, uint16, uint32, uint64])
94
+ integer_domain = signed_domain | unsigned_domain
95
+ real_domain = frozenset([float32, float64])
96
+ complex_domain = frozenset([complex64, complex128])
97
+ number_domain = real_domain | integer_domain | complex_domain
98
+
99
+ # Integer Aliases
100
+ c_bool = py_bool = np_bool_ = boolean
101
+
102
+ c_uint8 = np_uint8 = uint8
103
+ c_uint16 = np_uint16 = uint16
104
+ c_uint32 = np_uint32 = uint32
105
+ c_uint64 = np_uint64 = uint64
106
+ c_uintp = np_uintp = uintp
107
+
108
+ c_int8 = np_int8 = int8
109
+ c_int16 = np_int16 = int16
110
+ c_int32 = np_int32 = int32
111
+ c_int64 = np_int64 = int64
112
+ c_intp = py_int = np_intp = intp
113
+
114
+ c_float16 = np_float16 = float16
115
+ c_float32 = np_float32 = float32
116
+ c_float64 = py_float = np_float64 = float64
117
+
118
+ np_complex64 = complex64
119
+ py_complex = np_complex128 = complex128
120
+
121
+ # Domain Aliases
122
+ py_signed_domain = np_signed_domain = signed_domain
123
+ np_unsigned_domain = unsigned_domain
124
+ py_integer_domain = np_integer_domain = integer_domain
125
+ py_real_domain = np_real_domain = real_domain
126
+ py_complex_domain = np_complex_domain = complex_domain
127
+ py_number_domain = np_number_domain = number_domain
128
+
129
+ # Aliases to NumPy type names
130
+
131
+ b1 = bool_
132
+ i1 = int8
133
+ i2 = int16
134
+ i4 = int32
135
+ i8 = int64
136
+ u1 = uint8
137
+ u2 = uint16
138
+ u4 = uint32
139
+ u8 = uint64
140
+
141
+ f2 = float16
142
+ f4 = float32
143
+ f8 = float64
144
+
145
+ c8 = complex64
146
+ c16 = complex128
147
+
148
+ np_float_ = float32
149
+ np_double = double = float64
150
+ if numpy_version < (2, 0):
151
+ float_ = float32
152
+
153
+ _make_signed = lambda x: globals()["int%d" % (np.dtype(x).itemsize * 8)]
154
+ _make_unsigned = lambda x: globals()["uint%d" % (np.dtype(x).itemsize * 8)]
155
+
156
+ char = np_char = _make_signed(np.byte)
157
+ uchar = np_uchar = byte = _make_unsigned(np.byte)
158
+ short = np_short = _make_signed(np.short)
159
+ ushort = np_ushort = _make_unsigned(np.short)
160
+ int_ = np_int_ = _make_signed(np.int_)
161
+ uint = np_uint = _make_unsigned(np.int_)
162
+ intc = np_intc = _make_signed(np.intc) # C-compat int
163
+ uintc = np_uintc = _make_unsigned(np.uintc) # C-compat uint
164
+ long_ = np_long = _make_signed(np.int_) # C-compat long
165
+ ulong = np_ulong = _make_unsigned(np.int_) # C-compat ulong
166
+ longlong = np_longlong = _make_signed(np.longlong)
167
+ ulonglong = np_ulonglong = _make_unsigned(np.longlong)
168
+
169
+ all_str = """
170
+ int8
171
+ int16
172
+ int32
173
+ int64
174
+ uint8
175
+ uint16
176
+ uint32
177
+ uint64
178
+ intp
179
+ uintp
180
+ intc
181
+ uintc
182
+ ssize_t
183
+ size_t
184
+ boolean
185
+ float32
186
+ float64
187
+ complex64
188
+ complex128
189
+ bool_
190
+ byte
191
+ char
192
+ uchar
193
+ short
194
+ ushort
195
+ int_
196
+ uint
197
+ long_
198
+ ulong
199
+ longlong
200
+ ulonglong
201
+ float_
202
+ double
203
+ void
204
+ none
205
+ b1
206
+ i1
207
+ i2
208
+ i4
209
+ i8
210
+ u1
211
+ u2
212
+ u4
213
+ u8
214
+ f4
215
+ f8
216
+ c8
217
+ c16
218
+ optional
219
+ ffi_forced_object
220
+ ffi
221
+ deferred_type
222
+ bfloat16
223
+ dim3
224
+ grid_group
225
+ Dim3
226
+ GridGroup
227
+ """
228
+
229
+
230
+ __all__ = all_str.split()
231
+ if numpy_version >= (2, 0):
232
+ __all__.remove("float_")
233
+ __all__.append("bool")