numba-cuda 0.22.0__cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (487) hide show
  1. _numba_cuda_redirector.pth +4 -0
  2. _numba_cuda_redirector.py +89 -0
  3. numba_cuda/VERSION +1 -0
  4. numba_cuda/__init__.py +6 -0
  5. numba_cuda/_version.py +11 -0
  6. numba_cuda/numba/cuda/__init__.py +70 -0
  7. numba_cuda/numba/cuda/_internal/cuda_bf16.py +16394 -0
  8. numba_cuda/numba/cuda/_internal/cuda_fp16.py +8112 -0
  9. numba_cuda/numba/cuda/api.py +580 -0
  10. numba_cuda/numba/cuda/api_util.py +76 -0
  11. numba_cuda/numba/cuda/args.py +72 -0
  12. numba_cuda/numba/cuda/bf16.py +397 -0
  13. numba_cuda/numba/cuda/cache_hints.py +287 -0
  14. numba_cuda/numba/cuda/cext/__init__.py +2 -0
  15. numba_cuda/numba/cuda/cext/_devicearray.cpp +159 -0
  16. numba_cuda/numba/cuda/cext/_devicearray.cpython-312-aarch64-linux-gnu.so +0 -0
  17. numba_cuda/numba/cuda/cext/_devicearray.h +29 -0
  18. numba_cuda/numba/cuda/cext/_dispatcher.cpp +1098 -0
  19. numba_cuda/numba/cuda/cext/_dispatcher.cpython-312-aarch64-linux-gnu.so +0 -0
  20. numba_cuda/numba/cuda/cext/_hashtable.cpp +532 -0
  21. numba_cuda/numba/cuda/cext/_hashtable.h +135 -0
  22. numba_cuda/numba/cuda/cext/_helperlib.c +71 -0
  23. numba_cuda/numba/cuda/cext/_helperlib.cpython-312-aarch64-linux-gnu.so +0 -0
  24. numba_cuda/numba/cuda/cext/_helpermod.c +82 -0
  25. numba_cuda/numba/cuda/cext/_pymodule.h +38 -0
  26. numba_cuda/numba/cuda/cext/_typeconv.cpp +206 -0
  27. numba_cuda/numba/cuda/cext/_typeconv.cpython-312-aarch64-linux-gnu.so +0 -0
  28. numba_cuda/numba/cuda/cext/_typeof.cpp +1159 -0
  29. numba_cuda/numba/cuda/cext/_typeof.h +19 -0
  30. numba_cuda/numba/cuda/cext/capsulethunk.h +111 -0
  31. numba_cuda/numba/cuda/cext/mviewbuf.c +385 -0
  32. numba_cuda/numba/cuda/cext/mviewbuf.cpython-312-aarch64-linux-gnu.so +0 -0
  33. numba_cuda/numba/cuda/cext/typeconv.cpp +212 -0
  34. numba_cuda/numba/cuda/cext/typeconv.hpp +101 -0
  35. numba_cuda/numba/cuda/cg.py +67 -0
  36. numba_cuda/numba/cuda/cgutils.py +1294 -0
  37. numba_cuda/numba/cuda/cloudpickle/__init__.py +21 -0
  38. numba_cuda/numba/cuda/cloudpickle/cloudpickle.py +1598 -0
  39. numba_cuda/numba/cuda/cloudpickle/cloudpickle_fast.py +17 -0
  40. numba_cuda/numba/cuda/codegen.py +541 -0
  41. numba_cuda/numba/cuda/compiler.py +1396 -0
  42. numba_cuda/numba/cuda/core/analysis.py +758 -0
  43. numba_cuda/numba/cuda/core/annotations/__init__.py +0 -0
  44. numba_cuda/numba/cuda/core/annotations/pretty_annotate.py +288 -0
  45. numba_cuda/numba/cuda/core/annotations/type_annotations.py +305 -0
  46. numba_cuda/numba/cuda/core/base.py +1332 -0
  47. numba_cuda/numba/cuda/core/boxing.py +1411 -0
  48. numba_cuda/numba/cuda/core/bytecode.py +728 -0
  49. numba_cuda/numba/cuda/core/byteflow.py +2346 -0
  50. numba_cuda/numba/cuda/core/caching.py +744 -0
  51. numba_cuda/numba/cuda/core/callconv.py +392 -0
  52. numba_cuda/numba/cuda/core/codegen.py +171 -0
  53. numba_cuda/numba/cuda/core/compiler.py +199 -0
  54. numba_cuda/numba/cuda/core/compiler_lock.py +85 -0
  55. numba_cuda/numba/cuda/core/compiler_machinery.py +497 -0
  56. numba_cuda/numba/cuda/core/config.py +650 -0
  57. numba_cuda/numba/cuda/core/consts.py +124 -0
  58. numba_cuda/numba/cuda/core/controlflow.py +989 -0
  59. numba_cuda/numba/cuda/core/entrypoints.py +57 -0
  60. numba_cuda/numba/cuda/core/environment.py +66 -0
  61. numba_cuda/numba/cuda/core/errors.py +917 -0
  62. numba_cuda/numba/cuda/core/event.py +511 -0
  63. numba_cuda/numba/cuda/core/funcdesc.py +330 -0
  64. numba_cuda/numba/cuda/core/generators.py +387 -0
  65. numba_cuda/numba/cuda/core/imputils.py +509 -0
  66. numba_cuda/numba/cuda/core/inline_closurecall.py +1787 -0
  67. numba_cuda/numba/cuda/core/interpreter.py +3617 -0
  68. numba_cuda/numba/cuda/core/ir.py +1812 -0
  69. numba_cuda/numba/cuda/core/ir_utils.py +2638 -0
  70. numba_cuda/numba/cuda/core/optional.py +129 -0
  71. numba_cuda/numba/cuda/core/options.py +262 -0
  72. numba_cuda/numba/cuda/core/postproc.py +249 -0
  73. numba_cuda/numba/cuda/core/pythonapi.py +1859 -0
  74. numba_cuda/numba/cuda/core/registry.py +46 -0
  75. numba_cuda/numba/cuda/core/removerefctpass.py +123 -0
  76. numba_cuda/numba/cuda/core/rewrites/__init__.py +26 -0
  77. numba_cuda/numba/cuda/core/rewrites/ir_print.py +91 -0
  78. numba_cuda/numba/cuda/core/rewrites/registry.py +104 -0
  79. numba_cuda/numba/cuda/core/rewrites/static_binop.py +41 -0
  80. numba_cuda/numba/cuda/core/rewrites/static_getitem.py +189 -0
  81. numba_cuda/numba/cuda/core/rewrites/static_raise.py +100 -0
  82. numba_cuda/numba/cuda/core/sigutils.py +68 -0
  83. numba_cuda/numba/cuda/core/ssa.py +498 -0
  84. numba_cuda/numba/cuda/core/targetconfig.py +330 -0
  85. numba_cuda/numba/cuda/core/tracing.py +231 -0
  86. numba_cuda/numba/cuda/core/transforms.py +956 -0
  87. numba_cuda/numba/cuda/core/typed_passes.py +867 -0
  88. numba_cuda/numba/cuda/core/typeinfer.py +1950 -0
  89. numba_cuda/numba/cuda/core/unsafe/__init__.py +0 -0
  90. numba_cuda/numba/cuda/core/unsafe/bytes.py +67 -0
  91. numba_cuda/numba/cuda/core/unsafe/eh.py +67 -0
  92. numba_cuda/numba/cuda/core/unsafe/refcount.py +98 -0
  93. numba_cuda/numba/cuda/core/untyped_passes.py +1979 -0
  94. numba_cuda/numba/cuda/cpython/builtins.py +1153 -0
  95. numba_cuda/numba/cuda/cpython/charseq.py +1218 -0
  96. numba_cuda/numba/cuda/cpython/cmathimpl.py +560 -0
  97. numba_cuda/numba/cuda/cpython/enumimpl.py +103 -0
  98. numba_cuda/numba/cuda/cpython/iterators.py +167 -0
  99. numba_cuda/numba/cuda/cpython/listobj.py +1326 -0
  100. numba_cuda/numba/cuda/cpython/mathimpl.py +499 -0
  101. numba_cuda/numba/cuda/cpython/numbers.py +1475 -0
  102. numba_cuda/numba/cuda/cpython/rangeobj.py +289 -0
  103. numba_cuda/numba/cuda/cpython/slicing.py +322 -0
  104. numba_cuda/numba/cuda/cpython/tupleobj.py +456 -0
  105. numba_cuda/numba/cuda/cpython/unicode.py +2865 -0
  106. numba_cuda/numba/cuda/cpython/unicode_support.py +1597 -0
  107. numba_cuda/numba/cuda/cpython/unsafe/__init__.py +0 -0
  108. numba_cuda/numba/cuda/cpython/unsafe/numbers.py +64 -0
  109. numba_cuda/numba/cuda/cpython/unsafe/tuple.py +92 -0
  110. numba_cuda/numba/cuda/cuda_paths.py +691 -0
  111. numba_cuda/numba/cuda/cudadecl.py +543 -0
  112. numba_cuda/numba/cuda/cudadrv/__init__.py +14 -0
  113. numba_cuda/numba/cuda/cudadrv/devicearray.py +954 -0
  114. numba_cuda/numba/cuda/cudadrv/devices.py +249 -0
  115. numba_cuda/numba/cuda/cudadrv/driver.py +3238 -0
  116. numba_cuda/numba/cuda/cudadrv/drvapi.py +435 -0
  117. numba_cuda/numba/cuda/cudadrv/dummyarray.py +562 -0
  118. numba_cuda/numba/cuda/cudadrv/enums.py +613 -0
  119. numba_cuda/numba/cuda/cudadrv/error.py +48 -0
  120. numba_cuda/numba/cuda/cudadrv/libs.py +220 -0
  121. numba_cuda/numba/cuda/cudadrv/linkable_code.py +184 -0
  122. numba_cuda/numba/cuda/cudadrv/mappings.py +14 -0
  123. numba_cuda/numba/cuda/cudadrv/ndarray.py +26 -0
  124. numba_cuda/numba/cuda/cudadrv/nvrtc.py +193 -0
  125. numba_cuda/numba/cuda/cudadrv/nvvm.py +756 -0
  126. numba_cuda/numba/cuda/cudadrv/rtapi.py +13 -0
  127. numba_cuda/numba/cuda/cudadrv/runtime.py +34 -0
  128. numba_cuda/numba/cuda/cudaimpl.py +983 -0
  129. numba_cuda/numba/cuda/cudamath.py +149 -0
  130. numba_cuda/numba/cuda/datamodel/__init__.py +7 -0
  131. numba_cuda/numba/cuda/datamodel/cuda_manager.py +66 -0
  132. numba_cuda/numba/cuda/datamodel/cuda_models.py +1446 -0
  133. numba_cuda/numba/cuda/datamodel/cuda_packer.py +224 -0
  134. numba_cuda/numba/cuda/datamodel/cuda_registry.py +22 -0
  135. numba_cuda/numba/cuda/datamodel/cuda_testing.py +153 -0
  136. numba_cuda/numba/cuda/datamodel/manager.py +11 -0
  137. numba_cuda/numba/cuda/datamodel/models.py +9 -0
  138. numba_cuda/numba/cuda/datamodel/packer.py +9 -0
  139. numba_cuda/numba/cuda/datamodel/registry.py +11 -0
  140. numba_cuda/numba/cuda/datamodel/testing.py +11 -0
  141. numba_cuda/numba/cuda/debuginfo.py +997 -0
  142. numba_cuda/numba/cuda/decorators.py +294 -0
  143. numba_cuda/numba/cuda/descriptor.py +35 -0
  144. numba_cuda/numba/cuda/device_init.py +155 -0
  145. numba_cuda/numba/cuda/deviceufunc.py +1021 -0
  146. numba_cuda/numba/cuda/dispatcher.py +2463 -0
  147. numba_cuda/numba/cuda/errors.py +72 -0
  148. numba_cuda/numba/cuda/extending.py +697 -0
  149. numba_cuda/numba/cuda/flags.py +178 -0
  150. numba_cuda/numba/cuda/fp16.py +357 -0
  151. numba_cuda/numba/cuda/include/12/cuda_bf16.h +5118 -0
  152. numba_cuda/numba/cuda/include/12/cuda_bf16.hpp +3865 -0
  153. numba_cuda/numba/cuda/include/12/cuda_fp16.h +5363 -0
  154. numba_cuda/numba/cuda/include/12/cuda_fp16.hpp +3483 -0
  155. numba_cuda/numba/cuda/include/13/cuda_bf16.h +5118 -0
  156. numba_cuda/numba/cuda/include/13/cuda_bf16.hpp +3865 -0
  157. numba_cuda/numba/cuda/include/13/cuda_fp16.h +5363 -0
  158. numba_cuda/numba/cuda/include/13/cuda_fp16.hpp +3483 -0
  159. numba_cuda/numba/cuda/initialize.py +24 -0
  160. numba_cuda/numba/cuda/intrinsics.py +531 -0
  161. numba_cuda/numba/cuda/itanium_mangler.py +214 -0
  162. numba_cuda/numba/cuda/kernels/__init__.py +2 -0
  163. numba_cuda/numba/cuda/kernels/reduction.py +265 -0
  164. numba_cuda/numba/cuda/kernels/transpose.py +65 -0
  165. numba_cuda/numba/cuda/libdevice.py +3386 -0
  166. numba_cuda/numba/cuda/libdevicedecl.py +20 -0
  167. numba_cuda/numba/cuda/libdevicefuncs.py +1060 -0
  168. numba_cuda/numba/cuda/libdeviceimpl.py +88 -0
  169. numba_cuda/numba/cuda/locks.py +19 -0
  170. numba_cuda/numba/cuda/lowering.py +1980 -0
  171. numba_cuda/numba/cuda/mathimpl.py +374 -0
  172. numba_cuda/numba/cuda/memory_management/__init__.py +4 -0
  173. numba_cuda/numba/cuda/memory_management/memsys.cu +99 -0
  174. numba_cuda/numba/cuda/memory_management/memsys.cuh +22 -0
  175. numba_cuda/numba/cuda/memory_management/nrt.cu +212 -0
  176. numba_cuda/numba/cuda/memory_management/nrt.cuh +48 -0
  177. numba_cuda/numba/cuda/memory_management/nrt.py +390 -0
  178. numba_cuda/numba/cuda/memory_management/nrt_context.py +438 -0
  179. numba_cuda/numba/cuda/misc/appdirs.py +594 -0
  180. numba_cuda/numba/cuda/misc/cffiimpl.py +24 -0
  181. numba_cuda/numba/cuda/misc/coverage_support.py +43 -0
  182. numba_cuda/numba/cuda/misc/dump_style.py +41 -0
  183. numba_cuda/numba/cuda/misc/findlib.py +75 -0
  184. numba_cuda/numba/cuda/misc/firstlinefinder.py +96 -0
  185. numba_cuda/numba/cuda/misc/gdb_hook.py +240 -0
  186. numba_cuda/numba/cuda/misc/literal.py +28 -0
  187. numba_cuda/numba/cuda/misc/llvm_pass_timings.py +412 -0
  188. numba_cuda/numba/cuda/misc/special.py +94 -0
  189. numba_cuda/numba/cuda/models.py +56 -0
  190. numba_cuda/numba/cuda/np/arraymath.py +5130 -0
  191. numba_cuda/numba/cuda/np/arrayobj.py +7635 -0
  192. numba_cuda/numba/cuda/np/extensions.py +11 -0
  193. numba_cuda/numba/cuda/np/linalg.py +3087 -0
  194. numba_cuda/numba/cuda/np/math/__init__.py +0 -0
  195. numba_cuda/numba/cuda/np/math/cmathimpl.py +558 -0
  196. numba_cuda/numba/cuda/np/math/mathimpl.py +487 -0
  197. numba_cuda/numba/cuda/np/math/numbers.py +1461 -0
  198. numba_cuda/numba/cuda/np/npdatetime.py +969 -0
  199. numba_cuda/numba/cuda/np/npdatetime_helpers.py +217 -0
  200. numba_cuda/numba/cuda/np/npyfuncs.py +1808 -0
  201. numba_cuda/numba/cuda/np/npyimpl.py +1027 -0
  202. numba_cuda/numba/cuda/np/numpy_support.py +798 -0
  203. numba_cuda/numba/cuda/np/polynomial/__init__.py +4 -0
  204. numba_cuda/numba/cuda/np/polynomial/polynomial_core.py +242 -0
  205. numba_cuda/numba/cuda/np/polynomial/polynomial_functions.py +380 -0
  206. numba_cuda/numba/cuda/np/ufunc/__init__.py +4 -0
  207. numba_cuda/numba/cuda/np/ufunc/decorators.py +203 -0
  208. numba_cuda/numba/cuda/np/ufunc/sigparse.py +68 -0
  209. numba_cuda/numba/cuda/np/ufunc/ufuncbuilder.py +65 -0
  210. numba_cuda/numba/cuda/np/ufunc_db.py +1282 -0
  211. numba_cuda/numba/cuda/np/unsafe/__init__.py +0 -0
  212. numba_cuda/numba/cuda/np/unsafe/ndarray.py +84 -0
  213. numba_cuda/numba/cuda/nvvmutils.py +254 -0
  214. numba_cuda/numba/cuda/printimpl.py +126 -0
  215. numba_cuda/numba/cuda/random.py +308 -0
  216. numba_cuda/numba/cuda/reshape_funcs.cu +156 -0
  217. numba_cuda/numba/cuda/serialize.py +267 -0
  218. numba_cuda/numba/cuda/simulator/__init__.py +63 -0
  219. numba_cuda/numba/cuda/simulator/_internal/__init__.py +4 -0
  220. numba_cuda/numba/cuda/simulator/_internal/cuda_bf16.py +2 -0
  221. numba_cuda/numba/cuda/simulator/api.py +179 -0
  222. numba_cuda/numba/cuda/simulator/bf16.py +4 -0
  223. numba_cuda/numba/cuda/simulator/compiler.py +38 -0
  224. numba_cuda/numba/cuda/simulator/cudadrv/__init__.py +11 -0
  225. numba_cuda/numba/cuda/simulator/cudadrv/devicearray.py +462 -0
  226. numba_cuda/numba/cuda/simulator/cudadrv/devices.py +122 -0
  227. numba_cuda/numba/cuda/simulator/cudadrv/driver.py +66 -0
  228. numba_cuda/numba/cuda/simulator/cudadrv/drvapi.py +7 -0
  229. numba_cuda/numba/cuda/simulator/cudadrv/dummyarray.py +7 -0
  230. numba_cuda/numba/cuda/simulator/cudadrv/error.py +10 -0
  231. numba_cuda/numba/cuda/simulator/cudadrv/libs.py +10 -0
  232. numba_cuda/numba/cuda/simulator/cudadrv/linkable_code.py +61 -0
  233. numba_cuda/numba/cuda/simulator/cudadrv/nvrtc.py +11 -0
  234. numba_cuda/numba/cuda/simulator/cudadrv/nvvm.py +32 -0
  235. numba_cuda/numba/cuda/simulator/cudadrv/runtime.py +22 -0
  236. numba_cuda/numba/cuda/simulator/dispatcher.py +11 -0
  237. numba_cuda/numba/cuda/simulator/kernel.py +320 -0
  238. numba_cuda/numba/cuda/simulator/kernelapi.py +509 -0
  239. numba_cuda/numba/cuda/simulator/memory_management/__init__.py +4 -0
  240. numba_cuda/numba/cuda/simulator/memory_management/nrt.py +21 -0
  241. numba_cuda/numba/cuda/simulator/reduction.py +19 -0
  242. numba_cuda/numba/cuda/simulator/tests/support.py +4 -0
  243. numba_cuda/numba/cuda/simulator/vector_types.py +65 -0
  244. numba_cuda/numba/cuda/simulator_init.py +18 -0
  245. numba_cuda/numba/cuda/stubs.py +624 -0
  246. numba_cuda/numba/cuda/target.py +505 -0
  247. numba_cuda/numba/cuda/testing.py +347 -0
  248. numba_cuda/numba/cuda/tests/__init__.py +62 -0
  249. numba_cuda/numba/cuda/tests/benchmarks/__init__.py +0 -0
  250. numba_cuda/numba/cuda/tests/benchmarks/test_kernel_launch.py +119 -0
  251. numba_cuda/numba/cuda/tests/cloudpickle_main_class.py +9 -0
  252. numba_cuda/numba/cuda/tests/core/serialize_usecases.py +113 -0
  253. numba_cuda/numba/cuda/tests/core/test_itanium_mangler.py +83 -0
  254. numba_cuda/numba/cuda/tests/core/test_serialize.py +371 -0
  255. numba_cuda/numba/cuda/tests/cudadrv/__init__.py +9 -0
  256. numba_cuda/numba/cuda/tests/cudadrv/test_array_attr.py +147 -0
  257. numba_cuda/numba/cuda/tests/cudadrv/test_context_stack.py +161 -0
  258. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_array_slicing.py +397 -0
  259. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_auto_context.py +24 -0
  260. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_devicerecord.py +180 -0
  261. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_driver.py +313 -0
  262. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_memory.py +191 -0
  263. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_ndarray.py +621 -0
  264. numba_cuda/numba/cuda/tests/cudadrv/test_deallocations.py +247 -0
  265. numba_cuda/numba/cuda/tests/cudadrv/test_detect.py +100 -0
  266. numba_cuda/numba/cuda/tests/cudadrv/test_emm_plugins.py +200 -0
  267. numba_cuda/numba/cuda/tests/cudadrv/test_events.py +53 -0
  268. numba_cuda/numba/cuda/tests/cudadrv/test_host_alloc.py +72 -0
  269. numba_cuda/numba/cuda/tests/cudadrv/test_init.py +138 -0
  270. numba_cuda/numba/cuda/tests/cudadrv/test_inline_ptx.py +43 -0
  271. numba_cuda/numba/cuda/tests/cudadrv/test_is_fp16.py +15 -0
  272. numba_cuda/numba/cuda/tests/cudadrv/test_linkable_code.py +58 -0
  273. numba_cuda/numba/cuda/tests/cudadrv/test_linker.py +348 -0
  274. numba_cuda/numba/cuda/tests/cudadrv/test_managed_alloc.py +128 -0
  275. numba_cuda/numba/cuda/tests/cudadrv/test_module_callbacks.py +301 -0
  276. numba_cuda/numba/cuda/tests/cudadrv/test_nvjitlink.py +174 -0
  277. numba_cuda/numba/cuda/tests/cudadrv/test_nvrtc.py +28 -0
  278. numba_cuda/numba/cuda/tests/cudadrv/test_nvvm_driver.py +185 -0
  279. numba_cuda/numba/cuda/tests/cudadrv/test_pinned.py +39 -0
  280. numba_cuda/numba/cuda/tests/cudadrv/test_profiler.py +23 -0
  281. numba_cuda/numba/cuda/tests/cudadrv/test_reset_device.py +38 -0
  282. numba_cuda/numba/cuda/tests/cudadrv/test_runtime.py +48 -0
  283. numba_cuda/numba/cuda/tests/cudadrv/test_select_device.py +44 -0
  284. numba_cuda/numba/cuda/tests/cudadrv/test_streams.py +127 -0
  285. numba_cuda/numba/cuda/tests/cudapy/__init__.py +9 -0
  286. numba_cuda/numba/cuda/tests/cudapy/cache_usecases.py +231 -0
  287. numba_cuda/numba/cuda/tests/cudapy/cache_with_cpu_usecases.py +50 -0
  288. numba_cuda/numba/cuda/tests/cudapy/cg_cache_usecases.py +36 -0
  289. numba_cuda/numba/cuda/tests/cudapy/complex_usecases.py +116 -0
  290. numba_cuda/numba/cuda/tests/cudapy/enum_usecases.py +59 -0
  291. numba_cuda/numba/cuda/tests/cudapy/extensions_usecases.py +62 -0
  292. numba_cuda/numba/cuda/tests/cudapy/jitlink.ptx +28 -0
  293. numba_cuda/numba/cuda/tests/cudapy/overload_usecases.py +33 -0
  294. numba_cuda/numba/cuda/tests/cudapy/recursion_usecases.py +104 -0
  295. numba_cuda/numba/cuda/tests/cudapy/test_alignment.py +47 -0
  296. numba_cuda/numba/cuda/tests/cudapy/test_analysis.py +1122 -0
  297. numba_cuda/numba/cuda/tests/cudapy/test_array.py +344 -0
  298. numba_cuda/numba/cuda/tests/cudapy/test_array_alignment.py +268 -0
  299. numba_cuda/numba/cuda/tests/cudapy/test_array_args.py +203 -0
  300. numba_cuda/numba/cuda/tests/cudapy/test_array_methods.py +63 -0
  301. numba_cuda/numba/cuda/tests/cudapy/test_array_reductions.py +360 -0
  302. numba_cuda/numba/cuda/tests/cudapy/test_atomics.py +1815 -0
  303. numba_cuda/numba/cuda/tests/cudapy/test_bfloat16.py +599 -0
  304. numba_cuda/numba/cuda/tests/cudapy/test_bfloat16_bindings.py +377 -0
  305. numba_cuda/numba/cuda/tests/cudapy/test_blackscholes.py +160 -0
  306. numba_cuda/numba/cuda/tests/cudapy/test_boolean.py +27 -0
  307. numba_cuda/numba/cuda/tests/cudapy/test_byteflow.py +98 -0
  308. numba_cuda/numba/cuda/tests/cudapy/test_cache_hints.py +210 -0
  309. numba_cuda/numba/cuda/tests/cudapy/test_caching.py +683 -0
  310. numba_cuda/numba/cuda/tests/cudapy/test_casting.py +265 -0
  311. numba_cuda/numba/cuda/tests/cudapy/test_cffi.py +42 -0
  312. numba_cuda/numba/cuda/tests/cudapy/test_compiler.py +718 -0
  313. numba_cuda/numba/cuda/tests/cudapy/test_complex.py +370 -0
  314. numba_cuda/numba/cuda/tests/cudapy/test_complex_kernel.py +23 -0
  315. numba_cuda/numba/cuda/tests/cudapy/test_const_string.py +142 -0
  316. numba_cuda/numba/cuda/tests/cudapy/test_constmem.py +178 -0
  317. numba_cuda/numba/cuda/tests/cudapy/test_cooperative_groups.py +193 -0
  318. numba_cuda/numba/cuda/tests/cudapy/test_copy_propagate.py +131 -0
  319. numba_cuda/numba/cuda/tests/cudapy/test_cuda_array_interface.py +438 -0
  320. numba_cuda/numba/cuda/tests/cudapy/test_cuda_jit_no_types.py +94 -0
  321. numba_cuda/numba/cuda/tests/cudapy/test_datetime.py +101 -0
  322. numba_cuda/numba/cuda/tests/cudapy/test_debug.py +105 -0
  323. numba_cuda/numba/cuda/tests/cudapy/test_debuginfo.py +978 -0
  324. numba_cuda/numba/cuda/tests/cudapy/test_debuginfo_types.py +476 -0
  325. numba_cuda/numba/cuda/tests/cudapy/test_device_func.py +500 -0
  326. numba_cuda/numba/cuda/tests/cudapy/test_dispatcher.py +820 -0
  327. numba_cuda/numba/cuda/tests/cudapy/test_enums.py +152 -0
  328. numba_cuda/numba/cuda/tests/cudapy/test_errors.py +111 -0
  329. numba_cuda/numba/cuda/tests/cudapy/test_exception.py +170 -0
  330. numba_cuda/numba/cuda/tests/cudapy/test_extending.py +1088 -0
  331. numba_cuda/numba/cuda/tests/cudapy/test_extending_types.py +71 -0
  332. numba_cuda/numba/cuda/tests/cudapy/test_fastmath.py +265 -0
  333. numba_cuda/numba/cuda/tests/cudapy/test_flow_control.py +1433 -0
  334. numba_cuda/numba/cuda/tests/cudapy/test_forall.py +57 -0
  335. numba_cuda/numba/cuda/tests/cudapy/test_freevar.py +34 -0
  336. numba_cuda/numba/cuda/tests/cudapy/test_frexp_ldexp.py +69 -0
  337. numba_cuda/numba/cuda/tests/cudapy/test_globals.py +62 -0
  338. numba_cuda/numba/cuda/tests/cudapy/test_gufunc.py +474 -0
  339. numba_cuda/numba/cuda/tests/cudapy/test_gufunc_scalar.py +167 -0
  340. numba_cuda/numba/cuda/tests/cudapy/test_gufunc_scheduling.py +92 -0
  341. numba_cuda/numba/cuda/tests/cudapy/test_idiv.py +39 -0
  342. numba_cuda/numba/cuda/tests/cudapy/test_inline.py +170 -0
  343. numba_cuda/numba/cuda/tests/cudapy/test_inspect.py +255 -0
  344. numba_cuda/numba/cuda/tests/cudapy/test_intrinsics.py +1219 -0
  345. numba_cuda/numba/cuda/tests/cudapy/test_ipc.py +263 -0
  346. numba_cuda/numba/cuda/tests/cudapy/test_ir.py +598 -0
  347. numba_cuda/numba/cuda/tests/cudapy/test_ir_utils.py +276 -0
  348. numba_cuda/numba/cuda/tests/cudapy/test_iterators.py +101 -0
  349. numba_cuda/numba/cuda/tests/cudapy/test_lang.py +68 -0
  350. numba_cuda/numba/cuda/tests/cudapy/test_laplace.py +123 -0
  351. numba_cuda/numba/cuda/tests/cudapy/test_libdevice.py +194 -0
  352. numba_cuda/numba/cuda/tests/cudapy/test_lineinfo.py +220 -0
  353. numba_cuda/numba/cuda/tests/cudapy/test_localmem.py +173 -0
  354. numba_cuda/numba/cuda/tests/cudapy/test_make_function_to_jit_function.py +364 -0
  355. numba_cuda/numba/cuda/tests/cudapy/test_mandel.py +47 -0
  356. numba_cuda/numba/cuda/tests/cudapy/test_math.py +842 -0
  357. numba_cuda/numba/cuda/tests/cudapy/test_matmul.py +76 -0
  358. numba_cuda/numba/cuda/tests/cudapy/test_minmax.py +78 -0
  359. numba_cuda/numba/cuda/tests/cudapy/test_montecarlo.py +25 -0
  360. numba_cuda/numba/cuda/tests/cudapy/test_multigpu.py +145 -0
  361. numba_cuda/numba/cuda/tests/cudapy/test_multiprocessing.py +39 -0
  362. numba_cuda/numba/cuda/tests/cudapy/test_multithreads.py +82 -0
  363. numba_cuda/numba/cuda/tests/cudapy/test_nondet.py +53 -0
  364. numba_cuda/numba/cuda/tests/cudapy/test_operator.py +504 -0
  365. numba_cuda/numba/cuda/tests/cudapy/test_optimization.py +93 -0
  366. numba_cuda/numba/cuda/tests/cudapy/test_overload.py +402 -0
  367. numba_cuda/numba/cuda/tests/cudapy/test_powi.py +128 -0
  368. numba_cuda/numba/cuda/tests/cudapy/test_print.py +193 -0
  369. numba_cuda/numba/cuda/tests/cudapy/test_py2_div_issue.py +37 -0
  370. numba_cuda/numba/cuda/tests/cudapy/test_random.py +117 -0
  371. numba_cuda/numba/cuda/tests/cudapy/test_record_dtype.py +614 -0
  372. numba_cuda/numba/cuda/tests/cudapy/test_recursion.py +130 -0
  373. numba_cuda/numba/cuda/tests/cudapy/test_reduction.py +94 -0
  374. numba_cuda/numba/cuda/tests/cudapy/test_retrieve_autoconverted_arrays.py +83 -0
  375. numba_cuda/numba/cuda/tests/cudapy/test_serialize.py +86 -0
  376. numba_cuda/numba/cuda/tests/cudapy/test_slicing.py +40 -0
  377. numba_cuda/numba/cuda/tests/cudapy/test_sm.py +457 -0
  378. numba_cuda/numba/cuda/tests/cudapy/test_sm_creation.py +233 -0
  379. numba_cuda/numba/cuda/tests/cudapy/test_ssa.py +454 -0
  380. numba_cuda/numba/cuda/tests/cudapy/test_stream_api.py +56 -0
  381. numba_cuda/numba/cuda/tests/cudapy/test_sync.py +277 -0
  382. numba_cuda/numba/cuda/tests/cudapy/test_tracing.py +200 -0
  383. numba_cuda/numba/cuda/tests/cudapy/test_transpose.py +90 -0
  384. numba_cuda/numba/cuda/tests/cudapy/test_typeconv.py +333 -0
  385. numba_cuda/numba/cuda/tests/cudapy/test_typeinfer.py +538 -0
  386. numba_cuda/numba/cuda/tests/cudapy/test_ufuncs.py +585 -0
  387. numba_cuda/numba/cuda/tests/cudapy/test_userexc.py +42 -0
  388. numba_cuda/numba/cuda/tests/cudapy/test_vector_type.py +485 -0
  389. numba_cuda/numba/cuda/tests/cudapy/test_vectorize.py +312 -0
  390. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_complex.py +23 -0
  391. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_decor.py +183 -0
  392. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_device.py +40 -0
  393. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_scalar_arg.py +40 -0
  394. numba_cuda/numba/cuda/tests/cudapy/test_warning.py +206 -0
  395. numba_cuda/numba/cuda/tests/cudapy/test_warp_ops.py +446 -0
  396. numba_cuda/numba/cuda/tests/cudasim/__init__.py +9 -0
  397. numba_cuda/numba/cuda/tests/cudasim/support.py +9 -0
  398. numba_cuda/numba/cuda/tests/cudasim/test_cudasim_issues.py +111 -0
  399. numba_cuda/numba/cuda/tests/data/__init__.py +2 -0
  400. numba_cuda/numba/cuda/tests/data/cta_barrier.cu +28 -0
  401. numba_cuda/numba/cuda/tests/data/cuda_include.cu +10 -0
  402. numba_cuda/numba/cuda/tests/data/error.cu +12 -0
  403. numba_cuda/numba/cuda/tests/data/include/add.cuh +8 -0
  404. numba_cuda/numba/cuda/tests/data/jitlink.cu +28 -0
  405. numba_cuda/numba/cuda/tests/data/jitlink.ptx +49 -0
  406. numba_cuda/numba/cuda/tests/data/warn.cu +12 -0
  407. numba_cuda/numba/cuda/tests/doc_examples/__init__.py +9 -0
  408. numba_cuda/numba/cuda/tests/doc_examples/ffi/__init__.py +2 -0
  409. numba_cuda/numba/cuda/tests/doc_examples/ffi/functions.cu +54 -0
  410. numba_cuda/numba/cuda/tests/doc_examples/ffi/include/mul.cuh +8 -0
  411. numba_cuda/numba/cuda/tests/doc_examples/ffi/saxpy.cu +14 -0
  412. numba_cuda/numba/cuda/tests/doc_examples/test_cg.py +86 -0
  413. numba_cuda/numba/cuda/tests/doc_examples/test_cpointer.py +68 -0
  414. numba_cuda/numba/cuda/tests/doc_examples/test_cpu_gpu_compat.py +81 -0
  415. numba_cuda/numba/cuda/tests/doc_examples/test_ffi.py +141 -0
  416. numba_cuda/numba/cuda/tests/doc_examples/test_laplace.py +160 -0
  417. numba_cuda/numba/cuda/tests/doc_examples/test_matmul.py +180 -0
  418. numba_cuda/numba/cuda/tests/doc_examples/test_montecarlo.py +119 -0
  419. numba_cuda/numba/cuda/tests/doc_examples/test_random.py +66 -0
  420. numba_cuda/numba/cuda/tests/doc_examples/test_reduction.py +80 -0
  421. numba_cuda/numba/cuda/tests/doc_examples/test_sessionize.py +206 -0
  422. numba_cuda/numba/cuda/tests/doc_examples/test_ufunc.py +53 -0
  423. numba_cuda/numba/cuda/tests/doc_examples/test_vecadd.py +76 -0
  424. numba_cuda/numba/cuda/tests/nocuda/__init__.py +9 -0
  425. numba_cuda/numba/cuda/tests/nocuda/test_dummyarray.py +452 -0
  426. numba_cuda/numba/cuda/tests/nocuda/test_function_resolution.py +48 -0
  427. numba_cuda/numba/cuda/tests/nocuda/test_import.py +63 -0
  428. numba_cuda/numba/cuda/tests/nocuda/test_library_lookup.py +252 -0
  429. numba_cuda/numba/cuda/tests/nocuda/test_nvvm.py +59 -0
  430. numba_cuda/numba/cuda/tests/nrt/__init__.py +9 -0
  431. numba_cuda/numba/cuda/tests/nrt/test_nrt.py +387 -0
  432. numba_cuda/numba/cuda/tests/nrt/test_nrt_refct.py +124 -0
  433. numba_cuda/numba/cuda/tests/support.py +900 -0
  434. numba_cuda/numba/cuda/typeconv/__init__.py +4 -0
  435. numba_cuda/numba/cuda/typeconv/castgraph.py +137 -0
  436. numba_cuda/numba/cuda/typeconv/rules.py +63 -0
  437. numba_cuda/numba/cuda/typeconv/typeconv.py +121 -0
  438. numba_cuda/numba/cuda/types/__init__.py +233 -0
  439. numba_cuda/numba/cuda/types/__init__.pyi +167 -0
  440. numba_cuda/numba/cuda/types/abstract.py +9 -0
  441. numba_cuda/numba/cuda/types/common.py +9 -0
  442. numba_cuda/numba/cuda/types/containers.py +9 -0
  443. numba_cuda/numba/cuda/types/cuda_abstract.py +533 -0
  444. numba_cuda/numba/cuda/types/cuda_common.py +110 -0
  445. numba_cuda/numba/cuda/types/cuda_containers.py +971 -0
  446. numba_cuda/numba/cuda/types/cuda_function_type.py +230 -0
  447. numba_cuda/numba/cuda/types/cuda_functions.py +798 -0
  448. numba_cuda/numba/cuda/types/cuda_iterators.py +120 -0
  449. numba_cuda/numba/cuda/types/cuda_misc.py +569 -0
  450. numba_cuda/numba/cuda/types/cuda_npytypes.py +690 -0
  451. numba_cuda/numba/cuda/types/cuda_scalars.py +280 -0
  452. numba_cuda/numba/cuda/types/ext_types.py +101 -0
  453. numba_cuda/numba/cuda/types/function_type.py +11 -0
  454. numba_cuda/numba/cuda/types/functions.py +9 -0
  455. numba_cuda/numba/cuda/types/iterators.py +9 -0
  456. numba_cuda/numba/cuda/types/misc.py +9 -0
  457. numba_cuda/numba/cuda/types/npytypes.py +9 -0
  458. numba_cuda/numba/cuda/types/scalars.py +9 -0
  459. numba_cuda/numba/cuda/typing/__init__.py +19 -0
  460. numba_cuda/numba/cuda/typing/arraydecl.py +939 -0
  461. numba_cuda/numba/cuda/typing/asnumbatype.py +130 -0
  462. numba_cuda/numba/cuda/typing/bufproto.py +70 -0
  463. numba_cuda/numba/cuda/typing/builtins.py +1209 -0
  464. numba_cuda/numba/cuda/typing/cffi_utils.py +219 -0
  465. numba_cuda/numba/cuda/typing/cmathdecl.py +47 -0
  466. numba_cuda/numba/cuda/typing/collections.py +138 -0
  467. numba_cuda/numba/cuda/typing/context.py +782 -0
  468. numba_cuda/numba/cuda/typing/ctypes_utils.py +125 -0
  469. numba_cuda/numba/cuda/typing/dictdecl.py +63 -0
  470. numba_cuda/numba/cuda/typing/enumdecl.py +74 -0
  471. numba_cuda/numba/cuda/typing/listdecl.py +147 -0
  472. numba_cuda/numba/cuda/typing/mathdecl.py +158 -0
  473. numba_cuda/numba/cuda/typing/npdatetime.py +322 -0
  474. numba_cuda/numba/cuda/typing/npydecl.py +749 -0
  475. numba_cuda/numba/cuda/typing/setdecl.py +115 -0
  476. numba_cuda/numba/cuda/typing/templates.py +1446 -0
  477. numba_cuda/numba/cuda/typing/typeof.py +301 -0
  478. numba_cuda/numba/cuda/ufuncs.py +746 -0
  479. numba_cuda/numba/cuda/utils.py +724 -0
  480. numba_cuda/numba/cuda/vector_types.py +214 -0
  481. numba_cuda/numba/cuda/vectorizers.py +260 -0
  482. numba_cuda-0.22.0.dist-info/METADATA +109 -0
  483. numba_cuda-0.22.0.dist-info/RECORD +487 -0
  484. numba_cuda-0.22.0.dist-info/WHEEL +6 -0
  485. numba_cuda-0.22.0.dist-info/licenses/LICENSE +26 -0
  486. numba_cuda-0.22.0.dist-info/licenses/LICENSE.numba +24 -0
  487. numba_cuda-0.22.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,462 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
4
+ """
5
+ The Device Array API is not implemented in the simulator. This module provides
6
+ stubs to allow tests to import correctly.
7
+ """
8
+
9
+ from contextlib import contextmanager
10
+ from numba.cuda.np.numpy_support import numpy_version
11
+ from numba.cuda.np import numpy_support
12
+ from numba.cuda import types
13
+
14
+ import numpy as np
15
+
16
+
17
+ DeviceRecord = None
18
+ from_record_like = None
19
+
20
+
21
+ errmsg_contiguous_buffer = (
22
+ "Array contains non-contiguous buffer and cannot "
23
+ "be transferred as a single memory region. Please "
24
+ "ensure contiguous buffer with numpy "
25
+ ".ascontiguousarray()"
26
+ )
27
+
28
+
29
+ class FakeShape(tuple):
30
+ """
31
+ The FakeShape class is used to provide a shape which does not allow negative
32
+ indexing, similar to the shape in CUDA Python. (Numpy shape arrays allow
33
+ negative indexing)
34
+ """
35
+
36
+ def __getitem__(self, k):
37
+ if isinstance(k, int) and k < 0:
38
+ raise IndexError("tuple index out of range")
39
+ return super(FakeShape, self).__getitem__(k)
40
+
41
+
42
+ class FakeWithinKernelCUDAArray(object):
43
+ """
44
+ Created to emulate the behavior of arrays within kernels, where either
45
+ array.item or array['item'] is valid (that is, give all structured
46
+ arrays `numpy.recarray`-like semantics). This behaviour does not follow
47
+ the semantics of Python and NumPy with non-jitted code, and will be
48
+ deprecated and removed.
49
+ """
50
+
51
+ def __init__(self, item):
52
+ assert isinstance(item, FakeCUDAArray)
53
+ self.__dict__["_item"] = item
54
+
55
+ def __wrap_if_fake(self, item):
56
+ if isinstance(item, FakeCUDAArray):
57
+ return FakeWithinKernelCUDAArray(item)
58
+ else:
59
+ return item
60
+
61
+ def __getattr__(self, attrname):
62
+ if (value := getattr(self._item, attrname, None)) is not None:
63
+ return self.__wrap_if_fake(value)
64
+ else:
65
+ return self.__wrap_if_fake(self._item.__getitem__(attrname))
66
+
67
+ def __setattr__(self, nm, val):
68
+ self._item.__setitem__(nm, val)
69
+
70
+ def __getitem__(self, idx):
71
+ return self.__wrap_if_fake(self._item.__getitem__(idx))
72
+
73
+ def __setitem__(self, idx, val):
74
+ self._item.__setitem__(idx, val)
75
+
76
+ def __len__(self):
77
+ return len(self._item)
78
+
79
+ def __array_ufunc__(self, ufunc, method, *args, **kwargs):
80
+ # ufuncs can only be called directly on instances of numpy.ndarray (not
81
+ # things that implement its interfaces, like the FakeCUDAArray or
82
+ # FakeWithinKernelCUDAArray). For other objects, __array_ufunc__ is
83
+ # called when they are arguments to ufuncs, to provide an opportunity
84
+ # to somehow implement the ufunc. Since the FakeWithinKernelCUDAArray
85
+ # is just a thin wrapper over an ndarray, we can implement all ufuncs
86
+ # by passing the underlying ndarrays to a call to the intended ufunc.
87
+ call = getattr(ufunc, method)
88
+
89
+ def convert_fakes(obj):
90
+ if isinstance(obj, FakeWithinKernelCUDAArray):
91
+ obj = obj._item._ary
92
+
93
+ return obj
94
+
95
+ out = kwargs.get("out")
96
+ if out:
97
+ kwargs["out"] = tuple(convert_fakes(o) for o in out)
98
+ args = tuple(convert_fakes(a) for a in args)
99
+ return call(*args, **kwargs)
100
+
101
+
102
+ class FakeCUDAArray(object):
103
+ """
104
+ Implements the interface of a DeviceArray/DeviceRecord, but mostly just
105
+ wraps a NumPy array.
106
+ """
107
+
108
+ __cuda_ndarray__ = True # There must be gpu_data attribute
109
+
110
+ def __init__(self, ary, stream=0):
111
+ self._ary = ary
112
+ self.stream = stream
113
+
114
+ @property
115
+ def _numba_type_(self):
116
+ """
117
+ Magic attribute expected by Numba to get the numba type that
118
+ represents this object.
119
+ """
120
+ broadcast = 0 in self.strides
121
+ if self.is_c_contiguous() and not broadcast:
122
+ layout = "C"
123
+ elif self.is_f_contiguous() and not broadcast:
124
+ layout = "F"
125
+ else:
126
+ layout = "A"
127
+
128
+ dtype = numpy_support.from_dtype(self._ary.dtype)
129
+ return types.Array(dtype, self._ary.ndim, layout)
130
+
131
+ @property
132
+ def alloc_size(self):
133
+ return self._ary.nbytes
134
+
135
+ @property
136
+ def nbytes(self):
137
+ # return nbytes -- FakeCUDAArray is a wrapper around NumPy
138
+ return self._ary.nbytes
139
+
140
+ def __getattr__(self, attrname):
141
+ try:
142
+ attr = getattr(self._ary, attrname)
143
+ return attr
144
+ except AttributeError as e:
145
+ msg = "Wrapped array has no attribute '%s'" % attrname
146
+ raise AttributeError(msg) from e
147
+
148
+ def bind(self, stream=0):
149
+ return FakeCUDAArray(self._ary, stream)
150
+
151
+ @property
152
+ def T(self):
153
+ return self.transpose()
154
+
155
+ def transpose(self, axes=None):
156
+ return FakeCUDAArray(np.transpose(self._ary, axes=axes))
157
+
158
+ def __getitem__(self, idx):
159
+ ret = self._ary.__getitem__(idx)
160
+ if type(ret) not in [np.ndarray, np.void]:
161
+ return ret
162
+ else:
163
+ return FakeCUDAArray(ret, stream=self.stream)
164
+
165
+ def __setitem__(self, idx, val):
166
+ return self._ary.__setitem__(idx, val)
167
+
168
+ def copy_to_host(self, ary=None, stream=0):
169
+ if ary is None:
170
+ ary = np.empty_like(self._ary)
171
+ else:
172
+ check_array_compatibility(self, ary)
173
+ np.copyto(ary, self._ary)
174
+ return ary
175
+
176
+ def copy_to_device(self, ary, stream=0):
177
+ """
178
+ Copy from the provided array into this array.
179
+
180
+ This may be less forgiving than the CUDA Python implementation, which
181
+ will copy data up to the length of the smallest of the two arrays,
182
+ whereas this expects the size of the arrays to be equal.
183
+ """
184
+ sentry_contiguous(self)
185
+ self_core, ary_core = array_core(self), array_core(ary)
186
+ if isinstance(ary, FakeCUDAArray):
187
+ sentry_contiguous(ary)
188
+ check_array_compatibility(self_core, ary_core)
189
+ else:
190
+ ary_core = np.array(
191
+ ary_core,
192
+ order="C" if self_core.flags["C_CONTIGUOUS"] else "F",
193
+ subok=True,
194
+ copy=False if numpy_version < (2, 0) else None,
195
+ )
196
+ check_array_compatibility(self_core, ary_core)
197
+ np.copyto(self_core._ary, ary_core)
198
+
199
+ @property
200
+ def shape(self):
201
+ return FakeShape(self._ary.shape)
202
+
203
+ def ravel(self, *args, **kwargs):
204
+ return FakeCUDAArray(self._ary.ravel(*args, **kwargs))
205
+
206
+ def reshape(self, *args, **kwargs):
207
+ return FakeCUDAArray(self._ary.reshape(*args, **kwargs))
208
+
209
+ def view(self, *args, **kwargs):
210
+ return FakeCUDAArray(self._ary.view(*args, **kwargs))
211
+
212
+ def is_c_contiguous(self):
213
+ return self._ary.flags.c_contiguous
214
+
215
+ def is_f_contiguous(self):
216
+ return self._ary.flags.f_contiguous
217
+
218
+ def __str__(self):
219
+ return str(self._ary)
220
+
221
+ def __repr__(self):
222
+ return repr(self._ary)
223
+
224
+ def __len__(self):
225
+ return len(self._ary)
226
+
227
+ # TODO: Add inplace, bitwise, unary magic methods
228
+ # (or maybe inherit this class from numpy)?
229
+ def __eq__(self, other):
230
+ return FakeCUDAArray(self._ary == other)
231
+
232
+ def __ne__(self, other):
233
+ return FakeCUDAArray(self._ary != other)
234
+
235
+ def __lt__(self, other):
236
+ return FakeCUDAArray(self._ary < other)
237
+
238
+ def __le__(self, other):
239
+ return FakeCUDAArray(self._ary <= other)
240
+
241
+ def __gt__(self, other):
242
+ return FakeCUDAArray(self._ary > other)
243
+
244
+ def __ge__(self, other):
245
+ return FakeCUDAArray(self._ary >= other)
246
+
247
+ def __add__(self, other):
248
+ return FakeCUDAArray(self._ary + other)
249
+
250
+ def __sub__(self, other):
251
+ return FakeCUDAArray(self._ary - other)
252
+
253
+ def __mul__(self, other):
254
+ return FakeCUDAArray(self._ary * other)
255
+
256
+ def __floordiv__(self, other):
257
+ return FakeCUDAArray(self._ary // other)
258
+
259
+ def __truediv__(self, other):
260
+ return FakeCUDAArray(self._ary / other)
261
+
262
+ def __mod__(self, other):
263
+ return FakeCUDAArray(self._ary % other)
264
+
265
+ def __pow__(self, other):
266
+ return FakeCUDAArray(self._ary**other)
267
+
268
+ def split(self, section, stream=0):
269
+ return [
270
+ FakeCUDAArray(a)
271
+ for a in np.split(self._ary, range(section, len(self), section))
272
+ ]
273
+
274
+
275
+ def array_core(ary):
276
+ """
277
+ Extract the repeated core of a broadcast array.
278
+
279
+ Broadcast arrays are by definition non-contiguous due to repeated
280
+ dimensions, i.e., dimensions with stride 0. In order to ascertain memory
281
+ contiguity and copy the underlying data from such arrays, we must create
282
+ a view without the repeated dimensions.
283
+
284
+ """
285
+ if not ary.strides or not ary.size:
286
+ return ary
287
+ core_index = []
288
+ for stride in ary.strides:
289
+ core_index.append(0 if stride == 0 else slice(None))
290
+ return ary[tuple(core_index)]
291
+
292
+
293
+ def is_contiguous(ary):
294
+ """
295
+ Returns True iff `ary` is C-style contiguous while ignoring
296
+ broadcasted and 1-sized dimensions.
297
+ As opposed to array_core(), it does not call require_context(),
298
+ which can be quite expensive.
299
+ """
300
+ size = ary.dtype.itemsize
301
+ for shape, stride in zip(reversed(ary.shape), reversed(ary.strides)):
302
+ if shape > 1 and stride != 0:
303
+ if size != stride:
304
+ return False
305
+ size *= shape
306
+ return True
307
+
308
+
309
+ def sentry_contiguous(ary):
310
+ core = array_core(ary)
311
+ if not core.flags["C_CONTIGUOUS"] and not core.flags["F_CONTIGUOUS"]:
312
+ raise ValueError(errmsg_contiguous_buffer)
313
+
314
+
315
+ def check_array_compatibility(ary1, ary2):
316
+ ary1sq, ary2sq = ary1.squeeze(), ary2.squeeze()
317
+ if ary1.dtype != ary2.dtype:
318
+ raise TypeError(
319
+ "incompatible dtype: %s vs. %s" % (ary1.dtype, ary2.dtype)
320
+ )
321
+ if ary1sq.shape != ary2sq.shape:
322
+ raise ValueError(
323
+ "incompatible shape: %s vs. %s" % (ary1.shape, ary2.shape)
324
+ )
325
+ if ary1sq.strides != ary2sq.strides:
326
+ raise ValueError(
327
+ "incompatible strides: %s vs. %s" % (ary1.strides, ary2.strides)
328
+ )
329
+
330
+
331
+ def to_device(ary, stream=0, copy=True, to=None):
332
+ ary = np.array(
333
+ ary, copy=False if numpy_version < (2, 0) else None, subok=True
334
+ )
335
+ sentry_contiguous(ary)
336
+ if to is None:
337
+ buffer_dtype = np.int64 if ary.dtype.char in "Mm" else ary.dtype
338
+ return FakeCUDAArray(
339
+ np.ndarray(
340
+ buffer=np.copy(array_core(ary)).view(buffer_dtype),
341
+ dtype=ary.dtype,
342
+ shape=ary.shape,
343
+ strides=ary.strides,
344
+ ).view(type=type(ary)),
345
+ )
346
+ else:
347
+ to.copy_to_device(ary, stream=stream)
348
+
349
+
350
+ @contextmanager
351
+ def pinned(arg):
352
+ yield
353
+
354
+
355
+ def mapped_array(*args, **kwargs):
356
+ for unused_arg in ("portable", "wc"):
357
+ if unused_arg in kwargs:
358
+ kwargs.pop(unused_arg)
359
+ return device_array(*args, **kwargs)
360
+
361
+
362
+ def pinned_array(shape, dtype=np.float64, strides=None, order="C"):
363
+ return np.ndarray(shape=shape, strides=strides, dtype=dtype, order=order)
364
+
365
+
366
+ def managed_array(shape, dtype=np.float64, strides=None, order="C"):
367
+ return np.ndarray(shape=shape, strides=strides, dtype=dtype, order=order)
368
+
369
+
370
+ def device_array(*args, **kwargs):
371
+ stream = kwargs.pop("stream") if "stream" in kwargs else 0
372
+ return FakeCUDAArray(np.ndarray(*args, **kwargs), stream=stream)
373
+
374
+
375
+ def _contiguous_strides_like_array(ary):
376
+ """
377
+ Given an array, compute strides for a new contiguous array of the same
378
+ shape.
379
+ """
380
+ # Don't recompute strides if the default strides will be sufficient to
381
+ # create a contiguous array.
382
+ if ary.flags["C_CONTIGUOUS"] or ary.flags["F_CONTIGUOUS"] or ary.ndim <= 1:
383
+ return None
384
+
385
+ # Otherwise, we need to compute new strides using an algorithm adapted from
386
+ # NumPy v1.17.4's PyArray_NewLikeArrayWithShape in
387
+ # core/src/multiarray/ctors.c. We permute the strides in ascending order
388
+ # then compute the stride for the dimensions with the same permutation.
389
+
390
+ # Stride permutation. E.g. a stride array (4, -2, 12) becomes
391
+ # [(1, -2), (0, 4), (2, 12)]
392
+ strideperm = [x for x in enumerate(ary.strides)]
393
+ strideperm.sort(key=lambda x: x[1])
394
+
395
+ # Compute new strides using permutation
396
+ strides = [0] * len(ary.strides)
397
+ stride = ary.dtype.itemsize
398
+ for i_perm, _ in strideperm:
399
+ strides[i_perm] = stride
400
+ stride *= ary.shape[i_perm]
401
+ return tuple(strides)
402
+
403
+
404
+ def _order_like_array(ary):
405
+ if ary.flags["F_CONTIGUOUS"] and not ary.flags["C_CONTIGUOUS"]:
406
+ return "F"
407
+ else:
408
+ return "C"
409
+
410
+
411
+ def device_array_like(ary, stream=0):
412
+ strides = _contiguous_strides_like_array(ary)
413
+ order = _order_like_array(ary)
414
+ return device_array(
415
+ shape=ary.shape, dtype=ary.dtype, strides=strides, order=order
416
+ )
417
+
418
+
419
+ def pinned_array_like(ary):
420
+ strides = _contiguous_strides_like_array(ary)
421
+ order = _order_like_array(ary)
422
+ return pinned_array(
423
+ shape=ary.shape, dtype=ary.dtype, strides=strides, order=order
424
+ )
425
+
426
+
427
+ def auto_device(ary, stream=0, copy=True):
428
+ if isinstance(ary, FakeCUDAArray):
429
+ return ary, False
430
+
431
+ if not isinstance(ary, np.void):
432
+ ary = np.array(
433
+ ary, copy=False if numpy_version < (2, 0) else None, subok=True
434
+ )
435
+ return to_device(ary, stream, copy), True
436
+
437
+
438
+ def is_cuda_ndarray(obj):
439
+ "Check if an object is a CUDA ndarray"
440
+ return getattr(obj, "__cuda_ndarray__", False)
441
+
442
+
443
+ def verify_cuda_ndarray_interface(obj):
444
+ "Verify the CUDA ndarray interface for an obj"
445
+ require_cuda_ndarray(obj)
446
+
447
+ def requires_attr(attr, typ):
448
+ if not hasattr(obj, attr):
449
+ raise AttributeError(attr)
450
+ if not isinstance(getattr(obj, attr), typ):
451
+ raise AttributeError("%s must be of type %s" % (attr, typ))
452
+
453
+ requires_attr("shape", tuple)
454
+ requires_attr("strides", tuple)
455
+ requires_attr("dtype", np.dtype)
456
+ requires_attr("size", int)
457
+
458
+
459
+ def require_cuda_ndarray(obj):
460
+ "Raises ValueError is is_cuda_ndarray(obj) evaluates False"
461
+ if not is_cuda_ndarray(obj):
462
+ raise ValueError("require an cuda ndarray object")
@@ -0,0 +1,122 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
4
+ import numpy as np
5
+ from collections import namedtuple
6
+
7
+ _MemoryInfo = namedtuple("_MemoryInfo", "free,total")
8
+
9
+ _SIMULATOR_CC = (5, 2)
10
+
11
+
12
+ class FakeCUDADevice:
13
+ def __init__(self):
14
+ self.uuid = "GPU-00000000-0000-0000-0000-000000000000"
15
+
16
+ @property
17
+ def compute_capability(self):
18
+ return _SIMULATOR_CC
19
+
20
+
21
+ class FakeCUDAContext:
22
+ """
23
+ This stub implements functionality only for simulating a single GPU
24
+ at the moment.
25
+ """
26
+
27
+ def __init__(self, device_id):
28
+ self._device_id = device_id
29
+ self._device = FakeCUDADevice()
30
+
31
+ def __enter__(self):
32
+ pass
33
+
34
+ def __exit__(self, exc_type, exc_val, exc_tb):
35
+ pass
36
+
37
+ def __str__(self):
38
+ return "<Managed Device {self.id}>".format(self=self)
39
+
40
+ @property
41
+ def id(self):
42
+ return self._device_id
43
+
44
+ @property
45
+ def device(self):
46
+ return self._device
47
+
48
+ @property
49
+ def compute_capability(self):
50
+ return _SIMULATOR_CC
51
+
52
+ def reset(self):
53
+ pass
54
+
55
+ def get_memory_info(self):
56
+ """
57
+ Cross-platform free / total host memory is hard without external
58
+ dependencies, e.g. `psutil` - so return infinite memory to maintain API
59
+ type compatibility
60
+ """
61
+ return _MemoryInfo(float("inf"), float("inf"))
62
+
63
+ def memalloc(self, sz):
64
+ """
65
+ Allocates memory on the simulated device
66
+ At present, there is no division between simulated
67
+ host memory and simulated device memory.
68
+ """
69
+ return np.ndarray(sz, dtype="u1")
70
+
71
+ def memhostalloc(self, sz, mapped=False, portable=False, wc=False):
72
+ """Allocates memory on the host"""
73
+ return self.memalloc(sz)
74
+
75
+
76
+ class FakeDeviceList:
77
+ """
78
+ This stub implements a device list containing a single GPU. It also
79
+ keeps track of the GPU status, i.e. whether the context is closed or not,
80
+ which may have been set by the user calling reset()
81
+ """
82
+
83
+ def __init__(self):
84
+ self.lst = (FakeCUDAContext(0),)
85
+ self.closed = False
86
+
87
+ def __getitem__(self, devnum):
88
+ self.closed = False
89
+ return self.lst[devnum]
90
+
91
+ def __str__(self):
92
+ return ", ".join([str(d) for d in self.lst])
93
+
94
+ def __iter__(self):
95
+ return iter(self.lst)
96
+
97
+ def __len__(self):
98
+ return len(self.lst)
99
+
100
+ @property
101
+ def current(self):
102
+ if self.closed:
103
+ return None
104
+ return self.lst[0]
105
+
106
+
107
+ gpus = FakeDeviceList()
108
+
109
+
110
+ def reset():
111
+ gpus[0].closed = True
112
+
113
+
114
+ def get_context(devnum=0):
115
+ return FakeCUDAContext(devnum)
116
+
117
+
118
+ def require_context(func):
119
+ """
120
+ In the simulator, a context is always "available", so this is a no-op.
121
+ """
122
+ return func
@@ -0,0 +1,66 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
4
+ """
5
+ Most of the driver API is unsupported in the simulator, but some stubs are
6
+ provided to allow tests to import correctly.
7
+ """
8
+
9
+
10
+ def device_memset(dst, val, size, stream=0):
11
+ dst.view("u1")[:size].fill(bytes([val])[0])
12
+
13
+
14
+ def host_to_device(dst, src, size, stream=0):
15
+ dst.view("u1")[:size] = src.view("u1")[:size]
16
+
17
+
18
+ def device_to_host(dst, src, size, stream=0):
19
+ host_to_device(dst, src, size)
20
+
21
+
22
+ def device_memory_size(obj):
23
+ return obj.itemsize * obj.size
24
+
25
+
26
+ def device_to_device(dst, src, size, stream=0):
27
+ host_to_device(dst, src, size)
28
+
29
+
30
+ class FakeDriver(object):
31
+ def get_device_count(self):
32
+ return 1
33
+
34
+
35
+ driver = FakeDriver()
36
+
37
+
38
+ class _Linker:
39
+ @classmethod
40
+ def new(cls, max_registers=0, lineinfo=False, cc=None):
41
+ return _Linker()
42
+
43
+ @property
44
+ def lto(self):
45
+ return False
46
+
47
+
48
+ class LinkerError(RuntimeError):
49
+ pass
50
+
51
+
52
+ class NvrtcError(RuntimeError):
53
+ pass
54
+
55
+
56
+ class CudaAPIError(RuntimeError):
57
+ pass
58
+
59
+
60
+ def launch_kernel(*args, **kwargs):
61
+ msg = "Launching kernels directly is not supported in the simulator"
62
+ raise RuntimeError(msg)
63
+
64
+
65
+ def _have_nvjitlink():
66
+ return False
@@ -0,0 +1,7 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
4
+ """
5
+ drvapi is not implemented in the simulator, but this module exists to allow
6
+ tests to import correctly.
7
+ """
@@ -0,0 +1,7 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
4
+ # Dummy arrays are not implemented in the simulator. This file allows the dummy
5
+ # array tests to be imported, but they are skipped on the simulator.
6
+
7
+ Array = None
@@ -0,0 +1,10 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
4
+
5
+ class CudaSupportError(RuntimeError):
6
+ pass
7
+
8
+
9
+ class NvrtcError(Exception):
10
+ pass
@@ -0,0 +1,10 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
4
+
5
+ def check_static_lib(lib):
6
+ raise FileNotFoundError("Linking libraries not supported by cudasim")
7
+
8
+
9
+ def get_cuda_include_dir():
10
+ raise FileNotFoundError("CUDA includes not supported by cudasim")