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,83 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
4
+ # -*- coding: utf-8 -*-
5
+ from numba.cuda import int32, int64, uint32, uint64, float32, float64
6
+ from numba.cuda.types import range_iter32_type
7
+ from numba.cuda import itanium_mangler
8
+ import unittest
9
+
10
+
11
+ class TestItaniumManager(unittest.TestCase):
12
+ def test_ident(self):
13
+ got = itanium_mangler.mangle_identifier("apple")
14
+ expect = "5apple"
15
+ self.assertEqual(expect, got)
16
+
17
+ got = itanium_mangler.mangle_identifier("ap_ple")
18
+ expect = "6ap_ple"
19
+ self.assertEqual(expect, got)
20
+
21
+ got = itanium_mangler.mangle_identifier("apple213")
22
+ expect = "8apple213"
23
+ self.assertEqual(expect, got)
24
+
25
+ def test_types(self):
26
+ got = itanium_mangler.mangle_type(int32)
27
+ expect = "i"
28
+ self.assertEqual(expect, got)
29
+
30
+ got = itanium_mangler.mangle_type(int64)
31
+ expect = "x"
32
+ self.assertEqual(expect, got)
33
+
34
+ got = itanium_mangler.mangle_type(uint32)
35
+ expect = "j"
36
+ self.assertEqual(expect, got)
37
+
38
+ got = itanium_mangler.mangle_type(uint64)
39
+ expect = "y"
40
+ self.assertEqual(expect, got)
41
+
42
+ got = itanium_mangler.mangle_type(float32)
43
+ expect = "f"
44
+ self.assertEqual(expect, got)
45
+
46
+ got = itanium_mangler.mangle_type(float64)
47
+ expect = "d"
48
+ self.assertEqual(expect, got)
49
+
50
+ def test_function(self):
51
+ got = itanium_mangler.mangle("what", [int32, float32])
52
+ expect = "_Z4whatif"
53
+ self.assertEqual(expect, got)
54
+
55
+ got = itanium_mangler.mangle(
56
+ "a_little_brown_fox", [uint64, uint32, float64]
57
+ )
58
+ expect = "_Z18a_little_brown_foxyjd"
59
+ self.assertEqual(expect, got)
60
+
61
+ def test_custom_type(self):
62
+ got = itanium_mangler.mangle_type(range_iter32_type)
63
+ name = str(range_iter32_type)
64
+ expect = "{n}{name}".format(n=len(name), name=name)
65
+ self.assertEqual(expect, got)
66
+
67
+ def test_mangle_literal(self):
68
+ # check int
69
+ got = itanium_mangler.mangle_value(123)
70
+ expect = "Li123E"
71
+ self.assertEqual(expect, got)
72
+ # check float (not handled using standard)
73
+ got = itanium_mangler.mangle_value(12.3)
74
+ self.assertRegex(got, r"^\d+_12_[0-9a-z][0-9a-z]3$")
75
+
76
+ def test_mangle_unicode(self):
77
+ name = "f∂ƒ©z"
78
+ got = itanium_mangler.mangle_identifier(name)
79
+ self.assertRegex(got, r"^\d+f(_[a-z0-9][a-z0-9])+z$")
80
+
81
+
82
+ if __name__ == "__main__":
83
+ unittest.main()
@@ -0,0 +1,371 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
4
+ import contextlib
5
+ import gc
6
+ import pickle
7
+ import runpy
8
+ import subprocess
9
+ import sys
10
+ import unittest
11
+ from multiprocessing import get_context
12
+
13
+ from numba.cuda import HAS_NUMBA
14
+ import numba
15
+
16
+ if HAS_NUMBA:
17
+ from numba.core.errors import TypingError
18
+ from numba.core.target_extension import resolve_dispatcher_from_str
19
+ else:
20
+ from numba.cuda.core.errors import TypingError
21
+ from numba.cuda.tests.support import TestCase
22
+ from numba.cuda.cloudpickle import dumps, loads
23
+ from numba.cuda.testing import skip_on_standalone_numba_cuda
24
+
25
+
26
+ @skip_on_standalone_numba_cuda
27
+ class TestDispatcherPickling(TestCase):
28
+ def run_with_protocols(self, meth, *args, **kwargs):
29
+ for proto in range(pickle.HIGHEST_PROTOCOL + 1):
30
+ meth(proto, *args, **kwargs)
31
+
32
+ @contextlib.contextmanager
33
+ def simulate_fresh_target(self):
34
+ hwstr = "cpu"
35
+ dispatcher_cls = resolve_dispatcher_from_str(hwstr)
36
+ old_descr = dispatcher_cls.targetdescr
37
+ # Simulate fresh targetdescr
38
+ dispatcher_cls.targetdescr = type(dispatcher_cls.targetdescr)(hwstr)
39
+ try:
40
+ yield
41
+ finally:
42
+ # Be sure to reinstantiate old descriptor, otherwise other
43
+ # objects may be out of sync.
44
+ dispatcher_cls.targetdescr = old_descr
45
+
46
+ def check_call(self, proto, func, expected_result, args):
47
+ def check_result(func):
48
+ if isinstance(expected_result, type) and issubclass(
49
+ expected_result, Exception
50
+ ):
51
+ self.assertRaises(expected_result, func, *args)
52
+ else:
53
+ self.assertPreciseEqual(func(*args), expected_result)
54
+
55
+ # Control
56
+ check_result(func)
57
+ pickled = pickle.dumps(func, proto)
58
+ with self.simulate_fresh_target():
59
+ new_func = pickle.loads(pickled)
60
+ check_result(new_func)
61
+
62
+ def test_call_with_sig(self):
63
+ from .serialize_usecases import add_with_sig
64
+
65
+ self.run_with_protocols(self.check_call, add_with_sig, 5, (1, 4))
66
+ # Compilation has been disabled => float inputs will be coerced to int
67
+ self.run_with_protocols(self.check_call, add_with_sig, 5, (1.2, 4.2))
68
+
69
+ def test_call_without_sig(self):
70
+ from .serialize_usecases import add_without_sig
71
+
72
+ self.run_with_protocols(self.check_call, add_without_sig, 5, (1, 4))
73
+ self.run_with_protocols(
74
+ self.check_call, add_without_sig, 5.5, (1.2, 4.3)
75
+ )
76
+ # Object mode is enabled
77
+ self.run_with_protocols(
78
+ self.check_call, add_without_sig, "abc", ("a", "bc")
79
+ )
80
+
81
+ def test_call_nopython(self):
82
+ from .serialize_usecases import add_nopython
83
+
84
+ self.run_with_protocols(self.check_call, add_nopython, 5.5, (1.2, 4.3))
85
+ # Object mode is disabled
86
+ self.run_with_protocols(
87
+ self.check_call, add_nopython, TypingError, (object(), object())
88
+ )
89
+
90
+ def test_call_nopython_fail(self):
91
+ from .serialize_usecases import add_nopython_fail
92
+
93
+ # Compilation fails
94
+ self.run_with_protocols(
95
+ self.check_call, add_nopython_fail, TypingError, (1, 2)
96
+ )
97
+
98
+ def test_call_objmode_with_global(self):
99
+ from .serialize_usecases import get_global_objmode
100
+
101
+ self.run_with_protocols(
102
+ self.check_call, get_global_objmode, 7.5, (2.5,)
103
+ )
104
+
105
+ def test_call_closure(self):
106
+ from .serialize_usecases import closure
107
+
108
+ inner = closure(1)
109
+ self.run_with_protocols(self.check_call, inner, 6, (2, 3))
110
+
111
+ def check_call_closure_with_globals(self, **jit_args):
112
+ from .serialize_usecases import closure_with_globals
113
+
114
+ inner = closure_with_globals(3.0, **jit_args)
115
+ self.run_with_protocols(self.check_call, inner, 7.0, (4.0,))
116
+
117
+ def test_call_closure_with_globals_nopython(self):
118
+ self.check_call_closure_with_globals(nopython=True)
119
+
120
+ def test_call_closure_with_globals_objmode(self):
121
+ self.check_call_closure_with_globals(forceobj=True)
122
+
123
+ def test_call_closure_calling_other_function(self):
124
+ from .serialize_usecases import closure_calling_other_function
125
+
126
+ inner = closure_calling_other_function(3.0)
127
+ self.run_with_protocols(self.check_call, inner, 11.0, (4.0, 6.0))
128
+
129
+ def test_call_closure_calling_other_closure(self):
130
+ from .serialize_usecases import closure_calling_other_closure
131
+
132
+ inner = closure_calling_other_closure(3.0)
133
+ self.run_with_protocols(self.check_call, inner, 8.0, (4.0,))
134
+
135
+ def test_call_dyn_func(self):
136
+ from .serialize_usecases import dyn_func
137
+
138
+ # Check serializing a dynamically-created function
139
+ self.run_with_protocols(self.check_call, dyn_func, 36, (6,))
140
+
141
+ def test_call_dyn_func_objmode(self):
142
+ from .serialize_usecases import dyn_func_objmode
143
+
144
+ # Same with an object mode function
145
+ self.run_with_protocols(self.check_call, dyn_func_objmode, 36, (6,))
146
+
147
+ def test_renamed_module(self):
148
+ from .serialize_usecases import get_renamed_module
149
+
150
+ # Issue #1559: using a renamed module (e.g. `import numpy as np`)
151
+ # should not fail serializing
152
+ expected = get_renamed_module(0.0)
153
+ self.run_with_protocols(
154
+ self.check_call, get_renamed_module, expected, (0.0,)
155
+ )
156
+
157
+ def test_other_process(self):
158
+ """
159
+ Check that reconstructing doesn't depend on resources already
160
+ instantiated in the original process.
161
+ """
162
+ from .serialize_usecases import closure_calling_other_closure
163
+
164
+ func = closure_calling_other_closure(3.0)
165
+ pickled = pickle.dumps(func)
166
+ code = """if 1:
167
+ import pickle
168
+
169
+ data = {pickled!r}
170
+ func = pickle.loads(data)
171
+ res = func(4.0)
172
+ assert res == 8.0, res
173
+ """.format(**locals())
174
+ subprocess.check_call([sys.executable, "-c", code])
175
+
176
+ def test_reuse(self):
177
+ """
178
+ Check that deserializing the same function multiple times re-uses
179
+ the same dispatcher object.
180
+
181
+ Note that "same function" is intentionally under-specified.
182
+ """
183
+ from .serialize_usecases import closure
184
+
185
+ func = closure(5)
186
+ pickled = pickle.dumps(func)
187
+ func2 = closure(6)
188
+ pickled2 = pickle.dumps(func2)
189
+
190
+ f = pickle.loads(pickled)
191
+ g = pickle.loads(pickled)
192
+ h = pickle.loads(pickled2)
193
+ self.assertIs(f, g)
194
+ self.assertEqual(f(2, 3), 10)
195
+ g.disable_compile()
196
+ self.assertEqual(g(2, 4), 11)
197
+
198
+ self.assertIsNot(f, h)
199
+ self.assertEqual(h(2, 3), 11)
200
+
201
+ # Now make sure the original object doesn't exist when deserializing
202
+ func = closure(7)
203
+ func(42, 43)
204
+ pickled = pickle.dumps(func)
205
+ del func
206
+ gc.collect()
207
+
208
+ f = pickle.loads(pickled)
209
+ g = pickle.loads(pickled)
210
+ self.assertIs(f, g)
211
+ self.assertEqual(f(2, 3), 12)
212
+ g.disable_compile()
213
+ self.assertEqual(g(2, 4), 13)
214
+
215
+ def test_imp_deprecation(self):
216
+ """
217
+ The imp module was deprecated in v3.4 in favour of importlib
218
+ """
219
+ code = """if 1:
220
+ import pickle
221
+ import warnings
222
+ with warnings.catch_warnings(record=True) as w:
223
+ warnings.simplefilter('always', DeprecationWarning)
224
+ from numba import njit
225
+ @njit
226
+ def foo(x):
227
+ return x + 1
228
+ foo(1)
229
+ serialized_foo = pickle.dumps(foo)
230
+ for x in w:
231
+ if 'serialize.py' in x.filename:
232
+ assert "the imp module is deprecated" not in x.msg
233
+ """
234
+ subprocess.check_call([sys.executable, "-c", code])
235
+
236
+
237
+ class TestSerializationMisc(TestCase):
238
+ def test_numba_unpickle(self):
239
+ # Test that _numba_unpickle is memorizing its output
240
+ from numba.cuda.serialize import _numba_unpickle
241
+
242
+ random_obj = object()
243
+ bytebuf = pickle.dumps(random_obj)
244
+ hashed = hash(random_obj)
245
+
246
+ got1 = _numba_unpickle(id(random_obj), bytebuf, hashed)
247
+ # not the original object
248
+ self.assertIsNot(got1, random_obj)
249
+ got2 = _numba_unpickle(id(random_obj), bytebuf, hashed)
250
+ # unpickled results are the same objects
251
+ self.assertIs(got1, got2)
252
+
253
+
254
+ class TestCloudPickleIssues(TestCase):
255
+ """This test case includes issues specific to the cloudpickle implementation."""
256
+
257
+ _numba_parallel_test_ = False
258
+
259
+ def test_dynamic_class_reset_on_unpickle(self):
260
+ # a dynamic class
261
+ class Klass:
262
+ classvar = None
263
+
264
+ def mutator():
265
+ Klass.classvar = 100
266
+
267
+ def check():
268
+ self.assertEqual(Klass.classvar, 100)
269
+
270
+ saved = dumps(Klass)
271
+ mutator()
272
+ check()
273
+ loads(saved)
274
+ # Without the patch, each `loads(saved)` will reset `Klass.classvar`
275
+ check()
276
+ loads(saved)
277
+ check()
278
+
279
+ @unittest.skipIf(
280
+ __name__ == "__main__", "Test cannot run as when module is __main__"
281
+ )
282
+ def test_main_class_reset_on_unpickle(self):
283
+ mp = get_context("spawn")
284
+ proc = mp.Process(target=check_main_class_reset_on_unpickle)
285
+ proc.start()
286
+ proc.join(timeout=60)
287
+ self.assertEqual(proc.exitcode, 0)
288
+
289
+ def test_dynamic_class_reset_on_unpickle_new_proc(self):
290
+ # a dynamic class
291
+ class Klass:
292
+ classvar = None
293
+
294
+ # serialize Klass in this process
295
+ saved = dumps(Klass)
296
+
297
+ # Check the reset problem in a new process
298
+ mp = get_context("spawn")
299
+ proc = mp.Process(
300
+ target=check_unpickle_dyn_class_new_proc, args=(saved,)
301
+ )
302
+ proc.start()
303
+ proc.join(timeout=60)
304
+ self.assertEqual(proc.exitcode, 0)
305
+
306
+ def test_dynamic_class_issue_7356(self):
307
+ import numba
308
+
309
+ cfunc = numba.njit(issue_7356)
310
+ self.assertEqual(cfunc(), (100, 100))
311
+
312
+
313
+ class DynClass(object):
314
+ # For testing issue #7356
315
+ a = None
316
+
317
+
318
+ def issue_7356():
319
+ with numba.objmode(before="intp"):
320
+ DynClass.a = 100
321
+ before = DynClass.a
322
+ with numba.objmode(after="intp"):
323
+ after = DynClass.a
324
+ return before, after
325
+
326
+
327
+ def check_main_class_reset_on_unpickle():
328
+ # Load module and get its global dictionary
329
+ glbs = runpy.run_module(
330
+ "numba.cuda.tests.cloudpickle_main_class",
331
+ run_name="__main__",
332
+ )
333
+ # Get the Klass and check it is from __main__
334
+ Klass = glbs["Klass"]
335
+ assert Klass.__module__ == "__main__"
336
+ assert Klass.classvar != 100
337
+ saved = dumps(Klass)
338
+ # mutate
339
+ Klass.classvar = 100
340
+ # check
341
+ _check_dyn_class(Klass, saved)
342
+
343
+
344
+ def check_unpickle_dyn_class_new_proc(saved):
345
+ Klass = loads(saved)
346
+ assert Klass.classvar != 100
347
+ # mutate
348
+ Klass.classvar = 100
349
+ # check
350
+ _check_dyn_class(Klass, saved)
351
+
352
+
353
+ def _check_dyn_class(Klass, saved):
354
+ def check():
355
+ if Klass.classvar != 100:
356
+ raise AssertionError("Check failed. Klass reset.")
357
+
358
+ check()
359
+ loaded = loads(saved)
360
+ if loaded is not Klass:
361
+ raise AssertionError("Expected reuse")
362
+ # Without the patch, each `loads(saved)` will reset `Klass.classvar`
363
+ check()
364
+ loaded = loads(saved)
365
+ if loaded is not Klass:
366
+ raise AssertionError("Expected reuse")
367
+ check()
368
+
369
+
370
+ if __name__ == "__main__":
371
+ unittest.main()
@@ -0,0 +1,9 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
4
+ from numba.cuda.tests import load_testsuite
5
+ import os
6
+
7
+
8
+ def load_tests(loader, tests, pattern):
9
+ return load_testsuite(loader, os.path.dirname(__file__))
@@ -0,0 +1,147 @@
1
+ # SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2
+ # SPDX-License-Identifier: BSD-2-Clause
3
+
4
+ import numpy as np
5
+ from numba import cuda
6
+ from numba.cuda.testing import unittest, CUDATestCase, skip_on_cudasim
7
+
8
+
9
+ class TestArrayAttr(CUDATestCase):
10
+ def test_contigous_2d(self):
11
+ ary = np.arange(10)
12
+ cary = ary.reshape(2, 5)
13
+ fary = np.asfortranarray(cary)
14
+
15
+ dcary = cuda.to_device(cary)
16
+ dfary = cuda.to_device(fary)
17
+ self.assertTrue(dcary.is_c_contiguous())
18
+ self.assertTrue(not dfary.is_c_contiguous())
19
+ self.assertTrue(not dcary.is_f_contiguous())
20
+ self.assertTrue(dfary.is_f_contiguous())
21
+
22
+ def test_contigous_3d(self):
23
+ ary = np.arange(20)
24
+ cary = ary.reshape(2, 5, 2)
25
+ fary = np.asfortranarray(cary)
26
+
27
+ dcary = cuda.to_device(cary)
28
+ dfary = cuda.to_device(fary)
29
+ self.assertTrue(dcary.is_c_contiguous())
30
+ self.assertTrue(not dfary.is_c_contiguous())
31
+ self.assertTrue(not dcary.is_f_contiguous())
32
+ self.assertTrue(dfary.is_f_contiguous())
33
+
34
+ def test_contigous_4d(self):
35
+ ary = np.arange(60)
36
+ cary = ary.reshape(2, 5, 2, 3)
37
+ fary = np.asfortranarray(cary)
38
+
39
+ dcary = cuda.to_device(cary)
40
+ dfary = cuda.to_device(fary)
41
+ self.assertTrue(dcary.is_c_contiguous())
42
+ self.assertTrue(not dfary.is_c_contiguous())
43
+ self.assertTrue(not dcary.is_f_contiguous())
44
+ self.assertTrue(dfary.is_f_contiguous())
45
+
46
+ def test_ravel_1d(self):
47
+ ary = np.arange(60)
48
+ dary = cuda.to_device(ary)
49
+ for order in "CFA":
50
+ expect = ary.ravel(order=order)
51
+ dflat = dary.ravel(order=order)
52
+ flat = dflat.copy_to_host()
53
+ self.assertTrue(dary is not dflat) # ravel returns new array
54
+ self.assertEqual(flat.ndim, 1)
55
+ self.assertPreciseEqual(expect, flat)
56
+
57
+ @skip_on_cudasim("CUDA Array Interface is not supported in the simulator")
58
+ def test_ravel_stride_1d(self):
59
+ ary = np.arange(60)
60
+ dary = cuda.to_device(ary)
61
+ # No-copy stride device array
62
+ darystride = dary[::2]
63
+ dary_data = dary.__cuda_array_interface__["data"][0]
64
+ ddarystride_data = darystride.__cuda_array_interface__["data"][0]
65
+ self.assertEqual(dary_data, ddarystride_data)
66
+ # Fail on ravel on non-contiguous array
67
+ with self.assertRaises(NotImplementedError):
68
+ darystride.ravel()
69
+
70
+ def test_ravel_c(self):
71
+ ary = np.arange(60)
72
+ reshaped = ary.reshape(2, 5, 2, 3)
73
+
74
+ expect = reshaped.ravel(order="C")
75
+ dary = cuda.to_device(reshaped)
76
+ dflat = dary.ravel()
77
+ flat = dflat.copy_to_host()
78
+ self.assertTrue(dary is not dflat)
79
+ self.assertEqual(flat.ndim, 1)
80
+ self.assertPreciseEqual(expect, flat)
81
+
82
+ # explicit order kwarg
83
+ for order in "CA":
84
+ expect = reshaped.ravel(order=order)
85
+ dary = cuda.to_device(reshaped)
86
+ dflat = dary.ravel(order=order)
87
+ flat = dflat.copy_to_host()
88
+ self.assertTrue(dary is not dflat)
89
+ self.assertEqual(flat.ndim, 1)
90
+ self.assertPreciseEqual(expect, flat)
91
+
92
+ @skip_on_cudasim("CUDA Array Interface is not supported in the simulator")
93
+ def test_ravel_stride_c(self):
94
+ ary = np.arange(60)
95
+ reshaped = ary.reshape(2, 5, 2, 3)
96
+
97
+ dary = cuda.to_device(reshaped)
98
+ darystride = dary[::2, ::2, ::2, ::2]
99
+ dary_data = dary.__cuda_array_interface__["data"][0]
100
+ ddarystride_data = darystride.__cuda_array_interface__["data"][0]
101
+ self.assertEqual(dary_data, ddarystride_data)
102
+ with self.assertRaises(NotImplementedError):
103
+ darystride.ravel()
104
+
105
+ def test_ravel_f(self):
106
+ ary = np.arange(60)
107
+ reshaped = np.asfortranarray(ary.reshape(2, 5, 2, 3))
108
+ for order in "FA":
109
+ expect = reshaped.ravel(order=order)
110
+ dary = cuda.to_device(reshaped)
111
+ dflat = dary.ravel(order=order)
112
+ flat = dflat.copy_to_host()
113
+ self.assertTrue(dary is not dflat)
114
+ self.assertEqual(flat.ndim, 1)
115
+ self.assertPreciseEqual(expect, flat)
116
+
117
+ @skip_on_cudasim("CUDA Array Interface is not supported in the simulator")
118
+ def test_ravel_stride_f(self):
119
+ ary = np.arange(60)
120
+ reshaped = np.asfortranarray(ary.reshape(2, 5, 2, 3))
121
+ dary = cuda.to_device(reshaped)
122
+ darystride = dary[::2, ::2, ::2, ::2]
123
+ dary_data = dary.__cuda_array_interface__["data"][0]
124
+ ddarystride_data = darystride.__cuda_array_interface__["data"][0]
125
+ self.assertEqual(dary_data, ddarystride_data)
126
+ with self.assertRaises(NotImplementedError):
127
+ darystride.ravel()
128
+
129
+ def test_reshape_c(self):
130
+ ary = np.arange(10)
131
+ expect = ary.reshape(2, 5)
132
+ dary = cuda.to_device(ary)
133
+ dary_reshaped = dary.reshape(2, 5)
134
+ got = dary_reshaped.copy_to_host()
135
+ self.assertPreciseEqual(expect, got)
136
+
137
+ def test_reshape_f(self):
138
+ ary = np.arange(10)
139
+ expect = ary.reshape(2, 5, order="F")
140
+ dary = cuda.to_device(ary)
141
+ dary_reshaped = dary.reshape(2, 5, order="F")
142
+ got = dary_reshaped.copy_to_host()
143
+ self.assertPreciseEqual(expect, got)
144
+
145
+
146
+ if __name__ == "__main__":
147
+ unittest.main()