numba-cuda 0.22.0__cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (487) hide show
  1. _numba_cuda_redirector.pth +4 -0
  2. _numba_cuda_redirector.py +89 -0
  3. numba_cuda/VERSION +1 -0
  4. numba_cuda/__init__.py +6 -0
  5. numba_cuda/_version.py +11 -0
  6. numba_cuda/numba/cuda/__init__.py +70 -0
  7. numba_cuda/numba/cuda/_internal/cuda_bf16.py +16394 -0
  8. numba_cuda/numba/cuda/_internal/cuda_fp16.py +8112 -0
  9. numba_cuda/numba/cuda/api.py +580 -0
  10. numba_cuda/numba/cuda/api_util.py +76 -0
  11. numba_cuda/numba/cuda/args.py +72 -0
  12. numba_cuda/numba/cuda/bf16.py +397 -0
  13. numba_cuda/numba/cuda/cache_hints.py +287 -0
  14. numba_cuda/numba/cuda/cext/__init__.py +2 -0
  15. numba_cuda/numba/cuda/cext/_devicearray.cpp +159 -0
  16. numba_cuda/numba/cuda/cext/_devicearray.cpython-313-aarch64-linux-gnu.so +0 -0
  17. numba_cuda/numba/cuda/cext/_devicearray.h +29 -0
  18. numba_cuda/numba/cuda/cext/_dispatcher.cpp +1098 -0
  19. numba_cuda/numba/cuda/cext/_dispatcher.cpython-313-aarch64-linux-gnu.so +0 -0
  20. numba_cuda/numba/cuda/cext/_hashtable.cpp +532 -0
  21. numba_cuda/numba/cuda/cext/_hashtable.h +135 -0
  22. numba_cuda/numba/cuda/cext/_helperlib.c +71 -0
  23. numba_cuda/numba/cuda/cext/_helperlib.cpython-313-aarch64-linux-gnu.so +0 -0
  24. numba_cuda/numba/cuda/cext/_helpermod.c +82 -0
  25. numba_cuda/numba/cuda/cext/_pymodule.h +38 -0
  26. numba_cuda/numba/cuda/cext/_typeconv.cpp +206 -0
  27. numba_cuda/numba/cuda/cext/_typeconv.cpython-313-aarch64-linux-gnu.so +0 -0
  28. numba_cuda/numba/cuda/cext/_typeof.cpp +1159 -0
  29. numba_cuda/numba/cuda/cext/_typeof.h +19 -0
  30. numba_cuda/numba/cuda/cext/capsulethunk.h +111 -0
  31. numba_cuda/numba/cuda/cext/mviewbuf.c +385 -0
  32. numba_cuda/numba/cuda/cext/mviewbuf.cpython-313-aarch64-linux-gnu.so +0 -0
  33. numba_cuda/numba/cuda/cext/typeconv.cpp +212 -0
  34. numba_cuda/numba/cuda/cext/typeconv.hpp +101 -0
  35. numba_cuda/numba/cuda/cg.py +67 -0
  36. numba_cuda/numba/cuda/cgutils.py +1294 -0
  37. numba_cuda/numba/cuda/cloudpickle/__init__.py +21 -0
  38. numba_cuda/numba/cuda/cloudpickle/cloudpickle.py +1598 -0
  39. numba_cuda/numba/cuda/cloudpickle/cloudpickle_fast.py +17 -0
  40. numba_cuda/numba/cuda/codegen.py +541 -0
  41. numba_cuda/numba/cuda/compiler.py +1396 -0
  42. numba_cuda/numba/cuda/core/analysis.py +758 -0
  43. numba_cuda/numba/cuda/core/annotations/__init__.py +0 -0
  44. numba_cuda/numba/cuda/core/annotations/pretty_annotate.py +288 -0
  45. numba_cuda/numba/cuda/core/annotations/type_annotations.py +305 -0
  46. numba_cuda/numba/cuda/core/base.py +1332 -0
  47. numba_cuda/numba/cuda/core/boxing.py +1411 -0
  48. numba_cuda/numba/cuda/core/bytecode.py +728 -0
  49. numba_cuda/numba/cuda/core/byteflow.py +2346 -0
  50. numba_cuda/numba/cuda/core/caching.py +744 -0
  51. numba_cuda/numba/cuda/core/callconv.py +392 -0
  52. numba_cuda/numba/cuda/core/codegen.py +171 -0
  53. numba_cuda/numba/cuda/core/compiler.py +199 -0
  54. numba_cuda/numba/cuda/core/compiler_lock.py +85 -0
  55. numba_cuda/numba/cuda/core/compiler_machinery.py +497 -0
  56. numba_cuda/numba/cuda/core/config.py +650 -0
  57. numba_cuda/numba/cuda/core/consts.py +124 -0
  58. numba_cuda/numba/cuda/core/controlflow.py +989 -0
  59. numba_cuda/numba/cuda/core/entrypoints.py +57 -0
  60. numba_cuda/numba/cuda/core/environment.py +66 -0
  61. numba_cuda/numba/cuda/core/errors.py +917 -0
  62. numba_cuda/numba/cuda/core/event.py +511 -0
  63. numba_cuda/numba/cuda/core/funcdesc.py +330 -0
  64. numba_cuda/numba/cuda/core/generators.py +387 -0
  65. numba_cuda/numba/cuda/core/imputils.py +509 -0
  66. numba_cuda/numba/cuda/core/inline_closurecall.py +1787 -0
  67. numba_cuda/numba/cuda/core/interpreter.py +3617 -0
  68. numba_cuda/numba/cuda/core/ir.py +1812 -0
  69. numba_cuda/numba/cuda/core/ir_utils.py +2638 -0
  70. numba_cuda/numba/cuda/core/optional.py +129 -0
  71. numba_cuda/numba/cuda/core/options.py +262 -0
  72. numba_cuda/numba/cuda/core/postproc.py +249 -0
  73. numba_cuda/numba/cuda/core/pythonapi.py +1859 -0
  74. numba_cuda/numba/cuda/core/registry.py +46 -0
  75. numba_cuda/numba/cuda/core/removerefctpass.py +123 -0
  76. numba_cuda/numba/cuda/core/rewrites/__init__.py +26 -0
  77. numba_cuda/numba/cuda/core/rewrites/ir_print.py +91 -0
  78. numba_cuda/numba/cuda/core/rewrites/registry.py +104 -0
  79. numba_cuda/numba/cuda/core/rewrites/static_binop.py +41 -0
  80. numba_cuda/numba/cuda/core/rewrites/static_getitem.py +189 -0
  81. numba_cuda/numba/cuda/core/rewrites/static_raise.py +100 -0
  82. numba_cuda/numba/cuda/core/sigutils.py +68 -0
  83. numba_cuda/numba/cuda/core/ssa.py +498 -0
  84. numba_cuda/numba/cuda/core/targetconfig.py +330 -0
  85. numba_cuda/numba/cuda/core/tracing.py +231 -0
  86. numba_cuda/numba/cuda/core/transforms.py +956 -0
  87. numba_cuda/numba/cuda/core/typed_passes.py +867 -0
  88. numba_cuda/numba/cuda/core/typeinfer.py +1950 -0
  89. numba_cuda/numba/cuda/core/unsafe/__init__.py +0 -0
  90. numba_cuda/numba/cuda/core/unsafe/bytes.py +67 -0
  91. numba_cuda/numba/cuda/core/unsafe/eh.py +67 -0
  92. numba_cuda/numba/cuda/core/unsafe/refcount.py +98 -0
  93. numba_cuda/numba/cuda/core/untyped_passes.py +1979 -0
  94. numba_cuda/numba/cuda/cpython/builtins.py +1153 -0
  95. numba_cuda/numba/cuda/cpython/charseq.py +1218 -0
  96. numba_cuda/numba/cuda/cpython/cmathimpl.py +560 -0
  97. numba_cuda/numba/cuda/cpython/enumimpl.py +103 -0
  98. numba_cuda/numba/cuda/cpython/iterators.py +167 -0
  99. numba_cuda/numba/cuda/cpython/listobj.py +1326 -0
  100. numba_cuda/numba/cuda/cpython/mathimpl.py +499 -0
  101. numba_cuda/numba/cuda/cpython/numbers.py +1475 -0
  102. numba_cuda/numba/cuda/cpython/rangeobj.py +289 -0
  103. numba_cuda/numba/cuda/cpython/slicing.py +322 -0
  104. numba_cuda/numba/cuda/cpython/tupleobj.py +456 -0
  105. numba_cuda/numba/cuda/cpython/unicode.py +2865 -0
  106. numba_cuda/numba/cuda/cpython/unicode_support.py +1597 -0
  107. numba_cuda/numba/cuda/cpython/unsafe/__init__.py +0 -0
  108. numba_cuda/numba/cuda/cpython/unsafe/numbers.py +64 -0
  109. numba_cuda/numba/cuda/cpython/unsafe/tuple.py +92 -0
  110. numba_cuda/numba/cuda/cuda_paths.py +691 -0
  111. numba_cuda/numba/cuda/cudadecl.py +543 -0
  112. numba_cuda/numba/cuda/cudadrv/__init__.py +14 -0
  113. numba_cuda/numba/cuda/cudadrv/devicearray.py +954 -0
  114. numba_cuda/numba/cuda/cudadrv/devices.py +249 -0
  115. numba_cuda/numba/cuda/cudadrv/driver.py +3238 -0
  116. numba_cuda/numba/cuda/cudadrv/drvapi.py +435 -0
  117. numba_cuda/numba/cuda/cudadrv/dummyarray.py +562 -0
  118. numba_cuda/numba/cuda/cudadrv/enums.py +613 -0
  119. numba_cuda/numba/cuda/cudadrv/error.py +48 -0
  120. numba_cuda/numba/cuda/cudadrv/libs.py +220 -0
  121. numba_cuda/numba/cuda/cudadrv/linkable_code.py +184 -0
  122. numba_cuda/numba/cuda/cudadrv/mappings.py +14 -0
  123. numba_cuda/numba/cuda/cudadrv/ndarray.py +26 -0
  124. numba_cuda/numba/cuda/cudadrv/nvrtc.py +193 -0
  125. numba_cuda/numba/cuda/cudadrv/nvvm.py +756 -0
  126. numba_cuda/numba/cuda/cudadrv/rtapi.py +13 -0
  127. numba_cuda/numba/cuda/cudadrv/runtime.py +34 -0
  128. numba_cuda/numba/cuda/cudaimpl.py +983 -0
  129. numba_cuda/numba/cuda/cudamath.py +149 -0
  130. numba_cuda/numba/cuda/datamodel/__init__.py +7 -0
  131. numba_cuda/numba/cuda/datamodel/cuda_manager.py +66 -0
  132. numba_cuda/numba/cuda/datamodel/cuda_models.py +1446 -0
  133. numba_cuda/numba/cuda/datamodel/cuda_packer.py +224 -0
  134. numba_cuda/numba/cuda/datamodel/cuda_registry.py +22 -0
  135. numba_cuda/numba/cuda/datamodel/cuda_testing.py +153 -0
  136. numba_cuda/numba/cuda/datamodel/manager.py +11 -0
  137. numba_cuda/numba/cuda/datamodel/models.py +9 -0
  138. numba_cuda/numba/cuda/datamodel/packer.py +9 -0
  139. numba_cuda/numba/cuda/datamodel/registry.py +11 -0
  140. numba_cuda/numba/cuda/datamodel/testing.py +11 -0
  141. numba_cuda/numba/cuda/debuginfo.py +997 -0
  142. numba_cuda/numba/cuda/decorators.py +294 -0
  143. numba_cuda/numba/cuda/descriptor.py +35 -0
  144. numba_cuda/numba/cuda/device_init.py +155 -0
  145. numba_cuda/numba/cuda/deviceufunc.py +1021 -0
  146. numba_cuda/numba/cuda/dispatcher.py +2463 -0
  147. numba_cuda/numba/cuda/errors.py +72 -0
  148. numba_cuda/numba/cuda/extending.py +697 -0
  149. numba_cuda/numba/cuda/flags.py +178 -0
  150. numba_cuda/numba/cuda/fp16.py +357 -0
  151. numba_cuda/numba/cuda/include/12/cuda_bf16.h +5118 -0
  152. numba_cuda/numba/cuda/include/12/cuda_bf16.hpp +3865 -0
  153. numba_cuda/numba/cuda/include/12/cuda_fp16.h +5363 -0
  154. numba_cuda/numba/cuda/include/12/cuda_fp16.hpp +3483 -0
  155. numba_cuda/numba/cuda/include/13/cuda_bf16.h +5118 -0
  156. numba_cuda/numba/cuda/include/13/cuda_bf16.hpp +3865 -0
  157. numba_cuda/numba/cuda/include/13/cuda_fp16.h +5363 -0
  158. numba_cuda/numba/cuda/include/13/cuda_fp16.hpp +3483 -0
  159. numba_cuda/numba/cuda/initialize.py +24 -0
  160. numba_cuda/numba/cuda/intrinsics.py +531 -0
  161. numba_cuda/numba/cuda/itanium_mangler.py +214 -0
  162. numba_cuda/numba/cuda/kernels/__init__.py +2 -0
  163. numba_cuda/numba/cuda/kernels/reduction.py +265 -0
  164. numba_cuda/numba/cuda/kernels/transpose.py +65 -0
  165. numba_cuda/numba/cuda/libdevice.py +3386 -0
  166. numba_cuda/numba/cuda/libdevicedecl.py +20 -0
  167. numba_cuda/numba/cuda/libdevicefuncs.py +1060 -0
  168. numba_cuda/numba/cuda/libdeviceimpl.py +88 -0
  169. numba_cuda/numba/cuda/locks.py +19 -0
  170. numba_cuda/numba/cuda/lowering.py +1980 -0
  171. numba_cuda/numba/cuda/mathimpl.py +374 -0
  172. numba_cuda/numba/cuda/memory_management/__init__.py +4 -0
  173. numba_cuda/numba/cuda/memory_management/memsys.cu +99 -0
  174. numba_cuda/numba/cuda/memory_management/memsys.cuh +22 -0
  175. numba_cuda/numba/cuda/memory_management/nrt.cu +212 -0
  176. numba_cuda/numba/cuda/memory_management/nrt.cuh +48 -0
  177. numba_cuda/numba/cuda/memory_management/nrt.py +390 -0
  178. numba_cuda/numba/cuda/memory_management/nrt_context.py +438 -0
  179. numba_cuda/numba/cuda/misc/appdirs.py +594 -0
  180. numba_cuda/numba/cuda/misc/cffiimpl.py +24 -0
  181. numba_cuda/numba/cuda/misc/coverage_support.py +43 -0
  182. numba_cuda/numba/cuda/misc/dump_style.py +41 -0
  183. numba_cuda/numba/cuda/misc/findlib.py +75 -0
  184. numba_cuda/numba/cuda/misc/firstlinefinder.py +96 -0
  185. numba_cuda/numba/cuda/misc/gdb_hook.py +240 -0
  186. numba_cuda/numba/cuda/misc/literal.py +28 -0
  187. numba_cuda/numba/cuda/misc/llvm_pass_timings.py +412 -0
  188. numba_cuda/numba/cuda/misc/special.py +94 -0
  189. numba_cuda/numba/cuda/models.py +56 -0
  190. numba_cuda/numba/cuda/np/arraymath.py +5130 -0
  191. numba_cuda/numba/cuda/np/arrayobj.py +7635 -0
  192. numba_cuda/numba/cuda/np/extensions.py +11 -0
  193. numba_cuda/numba/cuda/np/linalg.py +3087 -0
  194. numba_cuda/numba/cuda/np/math/__init__.py +0 -0
  195. numba_cuda/numba/cuda/np/math/cmathimpl.py +558 -0
  196. numba_cuda/numba/cuda/np/math/mathimpl.py +487 -0
  197. numba_cuda/numba/cuda/np/math/numbers.py +1461 -0
  198. numba_cuda/numba/cuda/np/npdatetime.py +969 -0
  199. numba_cuda/numba/cuda/np/npdatetime_helpers.py +217 -0
  200. numba_cuda/numba/cuda/np/npyfuncs.py +1808 -0
  201. numba_cuda/numba/cuda/np/npyimpl.py +1027 -0
  202. numba_cuda/numba/cuda/np/numpy_support.py +798 -0
  203. numba_cuda/numba/cuda/np/polynomial/__init__.py +4 -0
  204. numba_cuda/numba/cuda/np/polynomial/polynomial_core.py +242 -0
  205. numba_cuda/numba/cuda/np/polynomial/polynomial_functions.py +380 -0
  206. numba_cuda/numba/cuda/np/ufunc/__init__.py +4 -0
  207. numba_cuda/numba/cuda/np/ufunc/decorators.py +203 -0
  208. numba_cuda/numba/cuda/np/ufunc/sigparse.py +68 -0
  209. numba_cuda/numba/cuda/np/ufunc/ufuncbuilder.py +65 -0
  210. numba_cuda/numba/cuda/np/ufunc_db.py +1282 -0
  211. numba_cuda/numba/cuda/np/unsafe/__init__.py +0 -0
  212. numba_cuda/numba/cuda/np/unsafe/ndarray.py +84 -0
  213. numba_cuda/numba/cuda/nvvmutils.py +254 -0
  214. numba_cuda/numba/cuda/printimpl.py +126 -0
  215. numba_cuda/numba/cuda/random.py +308 -0
  216. numba_cuda/numba/cuda/reshape_funcs.cu +156 -0
  217. numba_cuda/numba/cuda/serialize.py +267 -0
  218. numba_cuda/numba/cuda/simulator/__init__.py +63 -0
  219. numba_cuda/numba/cuda/simulator/_internal/__init__.py +4 -0
  220. numba_cuda/numba/cuda/simulator/_internal/cuda_bf16.py +2 -0
  221. numba_cuda/numba/cuda/simulator/api.py +179 -0
  222. numba_cuda/numba/cuda/simulator/bf16.py +4 -0
  223. numba_cuda/numba/cuda/simulator/compiler.py +38 -0
  224. numba_cuda/numba/cuda/simulator/cudadrv/__init__.py +11 -0
  225. numba_cuda/numba/cuda/simulator/cudadrv/devicearray.py +462 -0
  226. numba_cuda/numba/cuda/simulator/cudadrv/devices.py +122 -0
  227. numba_cuda/numba/cuda/simulator/cudadrv/driver.py +66 -0
  228. numba_cuda/numba/cuda/simulator/cudadrv/drvapi.py +7 -0
  229. numba_cuda/numba/cuda/simulator/cudadrv/dummyarray.py +7 -0
  230. numba_cuda/numba/cuda/simulator/cudadrv/error.py +10 -0
  231. numba_cuda/numba/cuda/simulator/cudadrv/libs.py +10 -0
  232. numba_cuda/numba/cuda/simulator/cudadrv/linkable_code.py +61 -0
  233. numba_cuda/numba/cuda/simulator/cudadrv/nvrtc.py +11 -0
  234. numba_cuda/numba/cuda/simulator/cudadrv/nvvm.py +32 -0
  235. numba_cuda/numba/cuda/simulator/cudadrv/runtime.py +22 -0
  236. numba_cuda/numba/cuda/simulator/dispatcher.py +11 -0
  237. numba_cuda/numba/cuda/simulator/kernel.py +320 -0
  238. numba_cuda/numba/cuda/simulator/kernelapi.py +509 -0
  239. numba_cuda/numba/cuda/simulator/memory_management/__init__.py +4 -0
  240. numba_cuda/numba/cuda/simulator/memory_management/nrt.py +21 -0
  241. numba_cuda/numba/cuda/simulator/reduction.py +19 -0
  242. numba_cuda/numba/cuda/simulator/tests/support.py +4 -0
  243. numba_cuda/numba/cuda/simulator/vector_types.py +65 -0
  244. numba_cuda/numba/cuda/simulator_init.py +18 -0
  245. numba_cuda/numba/cuda/stubs.py +624 -0
  246. numba_cuda/numba/cuda/target.py +505 -0
  247. numba_cuda/numba/cuda/testing.py +347 -0
  248. numba_cuda/numba/cuda/tests/__init__.py +62 -0
  249. numba_cuda/numba/cuda/tests/benchmarks/__init__.py +0 -0
  250. numba_cuda/numba/cuda/tests/benchmarks/test_kernel_launch.py +119 -0
  251. numba_cuda/numba/cuda/tests/cloudpickle_main_class.py +9 -0
  252. numba_cuda/numba/cuda/tests/core/serialize_usecases.py +113 -0
  253. numba_cuda/numba/cuda/tests/core/test_itanium_mangler.py +83 -0
  254. numba_cuda/numba/cuda/tests/core/test_serialize.py +371 -0
  255. numba_cuda/numba/cuda/tests/cudadrv/__init__.py +9 -0
  256. numba_cuda/numba/cuda/tests/cudadrv/test_array_attr.py +147 -0
  257. numba_cuda/numba/cuda/tests/cudadrv/test_context_stack.py +161 -0
  258. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_array_slicing.py +397 -0
  259. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_auto_context.py +24 -0
  260. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_devicerecord.py +180 -0
  261. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_driver.py +313 -0
  262. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_memory.py +191 -0
  263. numba_cuda/numba/cuda/tests/cudadrv/test_cuda_ndarray.py +621 -0
  264. numba_cuda/numba/cuda/tests/cudadrv/test_deallocations.py +247 -0
  265. numba_cuda/numba/cuda/tests/cudadrv/test_detect.py +100 -0
  266. numba_cuda/numba/cuda/tests/cudadrv/test_emm_plugins.py +200 -0
  267. numba_cuda/numba/cuda/tests/cudadrv/test_events.py +53 -0
  268. numba_cuda/numba/cuda/tests/cudadrv/test_host_alloc.py +72 -0
  269. numba_cuda/numba/cuda/tests/cudadrv/test_init.py +138 -0
  270. numba_cuda/numba/cuda/tests/cudadrv/test_inline_ptx.py +43 -0
  271. numba_cuda/numba/cuda/tests/cudadrv/test_is_fp16.py +15 -0
  272. numba_cuda/numba/cuda/tests/cudadrv/test_linkable_code.py +58 -0
  273. numba_cuda/numba/cuda/tests/cudadrv/test_linker.py +348 -0
  274. numba_cuda/numba/cuda/tests/cudadrv/test_managed_alloc.py +128 -0
  275. numba_cuda/numba/cuda/tests/cudadrv/test_module_callbacks.py +301 -0
  276. numba_cuda/numba/cuda/tests/cudadrv/test_nvjitlink.py +174 -0
  277. numba_cuda/numba/cuda/tests/cudadrv/test_nvrtc.py +28 -0
  278. numba_cuda/numba/cuda/tests/cudadrv/test_nvvm_driver.py +185 -0
  279. numba_cuda/numba/cuda/tests/cudadrv/test_pinned.py +39 -0
  280. numba_cuda/numba/cuda/tests/cudadrv/test_profiler.py +23 -0
  281. numba_cuda/numba/cuda/tests/cudadrv/test_reset_device.py +38 -0
  282. numba_cuda/numba/cuda/tests/cudadrv/test_runtime.py +48 -0
  283. numba_cuda/numba/cuda/tests/cudadrv/test_select_device.py +44 -0
  284. numba_cuda/numba/cuda/tests/cudadrv/test_streams.py +127 -0
  285. numba_cuda/numba/cuda/tests/cudapy/__init__.py +9 -0
  286. numba_cuda/numba/cuda/tests/cudapy/cache_usecases.py +231 -0
  287. numba_cuda/numba/cuda/tests/cudapy/cache_with_cpu_usecases.py +50 -0
  288. numba_cuda/numba/cuda/tests/cudapy/cg_cache_usecases.py +36 -0
  289. numba_cuda/numba/cuda/tests/cudapy/complex_usecases.py +116 -0
  290. numba_cuda/numba/cuda/tests/cudapy/enum_usecases.py +59 -0
  291. numba_cuda/numba/cuda/tests/cudapy/extensions_usecases.py +62 -0
  292. numba_cuda/numba/cuda/tests/cudapy/jitlink.ptx +28 -0
  293. numba_cuda/numba/cuda/tests/cudapy/overload_usecases.py +33 -0
  294. numba_cuda/numba/cuda/tests/cudapy/recursion_usecases.py +104 -0
  295. numba_cuda/numba/cuda/tests/cudapy/test_alignment.py +47 -0
  296. numba_cuda/numba/cuda/tests/cudapy/test_analysis.py +1122 -0
  297. numba_cuda/numba/cuda/tests/cudapy/test_array.py +344 -0
  298. numba_cuda/numba/cuda/tests/cudapy/test_array_alignment.py +268 -0
  299. numba_cuda/numba/cuda/tests/cudapy/test_array_args.py +203 -0
  300. numba_cuda/numba/cuda/tests/cudapy/test_array_methods.py +63 -0
  301. numba_cuda/numba/cuda/tests/cudapy/test_array_reductions.py +360 -0
  302. numba_cuda/numba/cuda/tests/cudapy/test_atomics.py +1815 -0
  303. numba_cuda/numba/cuda/tests/cudapy/test_bfloat16.py +599 -0
  304. numba_cuda/numba/cuda/tests/cudapy/test_bfloat16_bindings.py +377 -0
  305. numba_cuda/numba/cuda/tests/cudapy/test_blackscholes.py +160 -0
  306. numba_cuda/numba/cuda/tests/cudapy/test_boolean.py +27 -0
  307. numba_cuda/numba/cuda/tests/cudapy/test_byteflow.py +98 -0
  308. numba_cuda/numba/cuda/tests/cudapy/test_cache_hints.py +210 -0
  309. numba_cuda/numba/cuda/tests/cudapy/test_caching.py +683 -0
  310. numba_cuda/numba/cuda/tests/cudapy/test_casting.py +265 -0
  311. numba_cuda/numba/cuda/tests/cudapy/test_cffi.py +42 -0
  312. numba_cuda/numba/cuda/tests/cudapy/test_compiler.py +718 -0
  313. numba_cuda/numba/cuda/tests/cudapy/test_complex.py +370 -0
  314. numba_cuda/numba/cuda/tests/cudapy/test_complex_kernel.py +23 -0
  315. numba_cuda/numba/cuda/tests/cudapy/test_const_string.py +142 -0
  316. numba_cuda/numba/cuda/tests/cudapy/test_constmem.py +178 -0
  317. numba_cuda/numba/cuda/tests/cudapy/test_cooperative_groups.py +193 -0
  318. numba_cuda/numba/cuda/tests/cudapy/test_copy_propagate.py +131 -0
  319. numba_cuda/numba/cuda/tests/cudapy/test_cuda_array_interface.py +438 -0
  320. numba_cuda/numba/cuda/tests/cudapy/test_cuda_jit_no_types.py +94 -0
  321. numba_cuda/numba/cuda/tests/cudapy/test_datetime.py +101 -0
  322. numba_cuda/numba/cuda/tests/cudapy/test_debug.py +105 -0
  323. numba_cuda/numba/cuda/tests/cudapy/test_debuginfo.py +978 -0
  324. numba_cuda/numba/cuda/tests/cudapy/test_debuginfo_types.py +476 -0
  325. numba_cuda/numba/cuda/tests/cudapy/test_device_func.py +500 -0
  326. numba_cuda/numba/cuda/tests/cudapy/test_dispatcher.py +820 -0
  327. numba_cuda/numba/cuda/tests/cudapy/test_enums.py +152 -0
  328. numba_cuda/numba/cuda/tests/cudapy/test_errors.py +111 -0
  329. numba_cuda/numba/cuda/tests/cudapy/test_exception.py +170 -0
  330. numba_cuda/numba/cuda/tests/cudapy/test_extending.py +1088 -0
  331. numba_cuda/numba/cuda/tests/cudapy/test_extending_types.py +71 -0
  332. numba_cuda/numba/cuda/tests/cudapy/test_fastmath.py +265 -0
  333. numba_cuda/numba/cuda/tests/cudapy/test_flow_control.py +1433 -0
  334. numba_cuda/numba/cuda/tests/cudapy/test_forall.py +57 -0
  335. numba_cuda/numba/cuda/tests/cudapy/test_freevar.py +34 -0
  336. numba_cuda/numba/cuda/tests/cudapy/test_frexp_ldexp.py +69 -0
  337. numba_cuda/numba/cuda/tests/cudapy/test_globals.py +62 -0
  338. numba_cuda/numba/cuda/tests/cudapy/test_gufunc.py +474 -0
  339. numba_cuda/numba/cuda/tests/cudapy/test_gufunc_scalar.py +167 -0
  340. numba_cuda/numba/cuda/tests/cudapy/test_gufunc_scheduling.py +92 -0
  341. numba_cuda/numba/cuda/tests/cudapy/test_idiv.py +39 -0
  342. numba_cuda/numba/cuda/tests/cudapy/test_inline.py +170 -0
  343. numba_cuda/numba/cuda/tests/cudapy/test_inspect.py +255 -0
  344. numba_cuda/numba/cuda/tests/cudapy/test_intrinsics.py +1219 -0
  345. numba_cuda/numba/cuda/tests/cudapy/test_ipc.py +263 -0
  346. numba_cuda/numba/cuda/tests/cudapy/test_ir.py +598 -0
  347. numba_cuda/numba/cuda/tests/cudapy/test_ir_utils.py +276 -0
  348. numba_cuda/numba/cuda/tests/cudapy/test_iterators.py +101 -0
  349. numba_cuda/numba/cuda/tests/cudapy/test_lang.py +68 -0
  350. numba_cuda/numba/cuda/tests/cudapy/test_laplace.py +123 -0
  351. numba_cuda/numba/cuda/tests/cudapy/test_libdevice.py +194 -0
  352. numba_cuda/numba/cuda/tests/cudapy/test_lineinfo.py +220 -0
  353. numba_cuda/numba/cuda/tests/cudapy/test_localmem.py +173 -0
  354. numba_cuda/numba/cuda/tests/cudapy/test_make_function_to_jit_function.py +364 -0
  355. numba_cuda/numba/cuda/tests/cudapy/test_mandel.py +47 -0
  356. numba_cuda/numba/cuda/tests/cudapy/test_math.py +842 -0
  357. numba_cuda/numba/cuda/tests/cudapy/test_matmul.py +76 -0
  358. numba_cuda/numba/cuda/tests/cudapy/test_minmax.py +78 -0
  359. numba_cuda/numba/cuda/tests/cudapy/test_montecarlo.py +25 -0
  360. numba_cuda/numba/cuda/tests/cudapy/test_multigpu.py +145 -0
  361. numba_cuda/numba/cuda/tests/cudapy/test_multiprocessing.py +39 -0
  362. numba_cuda/numba/cuda/tests/cudapy/test_multithreads.py +82 -0
  363. numba_cuda/numba/cuda/tests/cudapy/test_nondet.py +53 -0
  364. numba_cuda/numba/cuda/tests/cudapy/test_operator.py +504 -0
  365. numba_cuda/numba/cuda/tests/cudapy/test_optimization.py +93 -0
  366. numba_cuda/numba/cuda/tests/cudapy/test_overload.py +402 -0
  367. numba_cuda/numba/cuda/tests/cudapy/test_powi.py +128 -0
  368. numba_cuda/numba/cuda/tests/cudapy/test_print.py +193 -0
  369. numba_cuda/numba/cuda/tests/cudapy/test_py2_div_issue.py +37 -0
  370. numba_cuda/numba/cuda/tests/cudapy/test_random.py +117 -0
  371. numba_cuda/numba/cuda/tests/cudapy/test_record_dtype.py +614 -0
  372. numba_cuda/numba/cuda/tests/cudapy/test_recursion.py +130 -0
  373. numba_cuda/numba/cuda/tests/cudapy/test_reduction.py +94 -0
  374. numba_cuda/numba/cuda/tests/cudapy/test_retrieve_autoconverted_arrays.py +83 -0
  375. numba_cuda/numba/cuda/tests/cudapy/test_serialize.py +86 -0
  376. numba_cuda/numba/cuda/tests/cudapy/test_slicing.py +40 -0
  377. numba_cuda/numba/cuda/tests/cudapy/test_sm.py +457 -0
  378. numba_cuda/numba/cuda/tests/cudapy/test_sm_creation.py +233 -0
  379. numba_cuda/numba/cuda/tests/cudapy/test_ssa.py +454 -0
  380. numba_cuda/numba/cuda/tests/cudapy/test_stream_api.py +56 -0
  381. numba_cuda/numba/cuda/tests/cudapy/test_sync.py +277 -0
  382. numba_cuda/numba/cuda/tests/cudapy/test_tracing.py +200 -0
  383. numba_cuda/numba/cuda/tests/cudapy/test_transpose.py +90 -0
  384. numba_cuda/numba/cuda/tests/cudapy/test_typeconv.py +333 -0
  385. numba_cuda/numba/cuda/tests/cudapy/test_typeinfer.py +538 -0
  386. numba_cuda/numba/cuda/tests/cudapy/test_ufuncs.py +585 -0
  387. numba_cuda/numba/cuda/tests/cudapy/test_userexc.py +42 -0
  388. numba_cuda/numba/cuda/tests/cudapy/test_vector_type.py +485 -0
  389. numba_cuda/numba/cuda/tests/cudapy/test_vectorize.py +312 -0
  390. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_complex.py +23 -0
  391. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_decor.py +183 -0
  392. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_device.py +40 -0
  393. numba_cuda/numba/cuda/tests/cudapy/test_vectorize_scalar_arg.py +40 -0
  394. numba_cuda/numba/cuda/tests/cudapy/test_warning.py +206 -0
  395. numba_cuda/numba/cuda/tests/cudapy/test_warp_ops.py +446 -0
  396. numba_cuda/numba/cuda/tests/cudasim/__init__.py +9 -0
  397. numba_cuda/numba/cuda/tests/cudasim/support.py +9 -0
  398. numba_cuda/numba/cuda/tests/cudasim/test_cudasim_issues.py +111 -0
  399. numba_cuda/numba/cuda/tests/data/__init__.py +2 -0
  400. numba_cuda/numba/cuda/tests/data/cta_barrier.cu +28 -0
  401. numba_cuda/numba/cuda/tests/data/cuda_include.cu +10 -0
  402. numba_cuda/numba/cuda/tests/data/error.cu +12 -0
  403. numba_cuda/numba/cuda/tests/data/include/add.cuh +8 -0
  404. numba_cuda/numba/cuda/tests/data/jitlink.cu +28 -0
  405. numba_cuda/numba/cuda/tests/data/jitlink.ptx +49 -0
  406. numba_cuda/numba/cuda/tests/data/warn.cu +12 -0
  407. numba_cuda/numba/cuda/tests/doc_examples/__init__.py +9 -0
  408. numba_cuda/numba/cuda/tests/doc_examples/ffi/__init__.py +2 -0
  409. numba_cuda/numba/cuda/tests/doc_examples/ffi/functions.cu +54 -0
  410. numba_cuda/numba/cuda/tests/doc_examples/ffi/include/mul.cuh +8 -0
  411. numba_cuda/numba/cuda/tests/doc_examples/ffi/saxpy.cu +14 -0
  412. numba_cuda/numba/cuda/tests/doc_examples/test_cg.py +86 -0
  413. numba_cuda/numba/cuda/tests/doc_examples/test_cpointer.py +68 -0
  414. numba_cuda/numba/cuda/tests/doc_examples/test_cpu_gpu_compat.py +81 -0
  415. numba_cuda/numba/cuda/tests/doc_examples/test_ffi.py +141 -0
  416. numba_cuda/numba/cuda/tests/doc_examples/test_laplace.py +160 -0
  417. numba_cuda/numba/cuda/tests/doc_examples/test_matmul.py +180 -0
  418. numba_cuda/numba/cuda/tests/doc_examples/test_montecarlo.py +119 -0
  419. numba_cuda/numba/cuda/tests/doc_examples/test_random.py +66 -0
  420. numba_cuda/numba/cuda/tests/doc_examples/test_reduction.py +80 -0
  421. numba_cuda/numba/cuda/tests/doc_examples/test_sessionize.py +206 -0
  422. numba_cuda/numba/cuda/tests/doc_examples/test_ufunc.py +53 -0
  423. numba_cuda/numba/cuda/tests/doc_examples/test_vecadd.py +76 -0
  424. numba_cuda/numba/cuda/tests/nocuda/__init__.py +9 -0
  425. numba_cuda/numba/cuda/tests/nocuda/test_dummyarray.py +452 -0
  426. numba_cuda/numba/cuda/tests/nocuda/test_function_resolution.py +48 -0
  427. numba_cuda/numba/cuda/tests/nocuda/test_import.py +63 -0
  428. numba_cuda/numba/cuda/tests/nocuda/test_library_lookup.py +252 -0
  429. numba_cuda/numba/cuda/tests/nocuda/test_nvvm.py +59 -0
  430. numba_cuda/numba/cuda/tests/nrt/__init__.py +9 -0
  431. numba_cuda/numba/cuda/tests/nrt/test_nrt.py +387 -0
  432. numba_cuda/numba/cuda/tests/nrt/test_nrt_refct.py +124 -0
  433. numba_cuda/numba/cuda/tests/support.py +900 -0
  434. numba_cuda/numba/cuda/typeconv/__init__.py +4 -0
  435. numba_cuda/numba/cuda/typeconv/castgraph.py +137 -0
  436. numba_cuda/numba/cuda/typeconv/rules.py +63 -0
  437. numba_cuda/numba/cuda/typeconv/typeconv.py +121 -0
  438. numba_cuda/numba/cuda/types/__init__.py +233 -0
  439. numba_cuda/numba/cuda/types/__init__.pyi +167 -0
  440. numba_cuda/numba/cuda/types/abstract.py +9 -0
  441. numba_cuda/numba/cuda/types/common.py +9 -0
  442. numba_cuda/numba/cuda/types/containers.py +9 -0
  443. numba_cuda/numba/cuda/types/cuda_abstract.py +533 -0
  444. numba_cuda/numba/cuda/types/cuda_common.py +110 -0
  445. numba_cuda/numba/cuda/types/cuda_containers.py +971 -0
  446. numba_cuda/numba/cuda/types/cuda_function_type.py +230 -0
  447. numba_cuda/numba/cuda/types/cuda_functions.py +798 -0
  448. numba_cuda/numba/cuda/types/cuda_iterators.py +120 -0
  449. numba_cuda/numba/cuda/types/cuda_misc.py +569 -0
  450. numba_cuda/numba/cuda/types/cuda_npytypes.py +690 -0
  451. numba_cuda/numba/cuda/types/cuda_scalars.py +280 -0
  452. numba_cuda/numba/cuda/types/ext_types.py +101 -0
  453. numba_cuda/numba/cuda/types/function_type.py +11 -0
  454. numba_cuda/numba/cuda/types/functions.py +9 -0
  455. numba_cuda/numba/cuda/types/iterators.py +9 -0
  456. numba_cuda/numba/cuda/types/misc.py +9 -0
  457. numba_cuda/numba/cuda/types/npytypes.py +9 -0
  458. numba_cuda/numba/cuda/types/scalars.py +9 -0
  459. numba_cuda/numba/cuda/typing/__init__.py +19 -0
  460. numba_cuda/numba/cuda/typing/arraydecl.py +939 -0
  461. numba_cuda/numba/cuda/typing/asnumbatype.py +130 -0
  462. numba_cuda/numba/cuda/typing/bufproto.py +70 -0
  463. numba_cuda/numba/cuda/typing/builtins.py +1209 -0
  464. numba_cuda/numba/cuda/typing/cffi_utils.py +219 -0
  465. numba_cuda/numba/cuda/typing/cmathdecl.py +47 -0
  466. numba_cuda/numba/cuda/typing/collections.py +138 -0
  467. numba_cuda/numba/cuda/typing/context.py +782 -0
  468. numba_cuda/numba/cuda/typing/ctypes_utils.py +125 -0
  469. numba_cuda/numba/cuda/typing/dictdecl.py +63 -0
  470. numba_cuda/numba/cuda/typing/enumdecl.py +74 -0
  471. numba_cuda/numba/cuda/typing/listdecl.py +147 -0
  472. numba_cuda/numba/cuda/typing/mathdecl.py +158 -0
  473. numba_cuda/numba/cuda/typing/npdatetime.py +322 -0
  474. numba_cuda/numba/cuda/typing/npydecl.py +749 -0
  475. numba_cuda/numba/cuda/typing/setdecl.py +115 -0
  476. numba_cuda/numba/cuda/typing/templates.py +1446 -0
  477. numba_cuda/numba/cuda/typing/typeof.py +301 -0
  478. numba_cuda/numba/cuda/ufuncs.py +746 -0
  479. numba_cuda/numba/cuda/utils.py +724 -0
  480. numba_cuda/numba/cuda/vector_types.py +214 -0
  481. numba_cuda/numba/cuda/vectorizers.py +260 -0
  482. numba_cuda-0.22.0.dist-info/METADATA +109 -0
  483. numba_cuda-0.22.0.dist-info/RECORD +487 -0
  484. numba_cuda-0.22.0.dist-info/WHEEL +6 -0
  485. numba_cuda-0.22.0.dist-info/licenses/LICENSE +26 -0
  486. numba_cuda-0.22.0.dist-info/licenses/LICENSE.numba +24 -0
  487. numba_cuda-0.22.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,614 @@
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 import types
7
+ from numba.cuda.testing import skip_on_cudasim, CUDATestCase
8
+ import unittest
9
+ from numba.cuda.np import numpy_support
10
+
11
+
12
+ def set_a(ary, i, v):
13
+ ary[i].a = v
14
+
15
+
16
+ def set_b(ary, i, v):
17
+ ary[i].b = v
18
+
19
+
20
+ def set_c(ary, i, v):
21
+ ary[i].c = v
22
+
23
+
24
+ def set_record(ary, i, j):
25
+ ary[i] = ary[j]
26
+
27
+
28
+ def record_set_a(r, v):
29
+ r.a = v
30
+
31
+
32
+ def record_set_b(r, v):
33
+ r.b = v
34
+
35
+
36
+ def record_set_c(r, v):
37
+ r.c = v
38
+
39
+
40
+ def record_read_a(r, arr):
41
+ arr[0] = r.a
42
+
43
+
44
+ def record_read_b(r, arr):
45
+ arr[0] = r.b
46
+
47
+
48
+ def record_read_c(r, arr):
49
+ arr[0] = r.c
50
+
51
+
52
+ def record_write_array(r):
53
+ r.g = 2
54
+ r.h[0] = 3.0
55
+ r.h[1] = 4.0
56
+
57
+
58
+ def record_write_2d_array(r):
59
+ r.i = 3
60
+ r.j[0, 0] = 5.0
61
+ r.j[0, 1] = 6.0
62
+ r.j[1, 0] = 7.0
63
+ r.j[1, 1] = 8.0
64
+ r.j[2, 0] = 9.0
65
+ r.j[2, 1] = 10.0
66
+
67
+
68
+ def record_read_array(r, a):
69
+ a[0] = r.h[0]
70
+ a[1] = r.h[1]
71
+
72
+
73
+ def record_read_2d_array(r, a):
74
+ a[0, 0] = r.j[0, 0]
75
+ a[0, 1] = r.j[0, 1]
76
+ a[1, 0] = r.j[1, 0]
77
+ a[1, 1] = r.j[1, 1]
78
+ a[2, 0] = r.j[2, 0]
79
+ a[2, 1] = r.j[2, 1]
80
+
81
+
82
+ recordtype = np.dtype(
83
+ [
84
+ ("a", np.float64),
85
+ ("b", np.int32),
86
+ ("c", np.complex64),
87
+ ("d", (np.uint8, 5)),
88
+ ],
89
+ align=True,
90
+ )
91
+
92
+ recordwitharray = np.dtype([("g", np.int32), ("h", np.float32, 2)], align=True)
93
+
94
+ recordwith2darray = np.dtype([("i", np.int32), ("j", np.float32, (3, 2))])
95
+
96
+ nested_array1_dtype = np.dtype([("array1", np.int16, (3,))], align=True)
97
+
98
+ nested_array2_dtype = np.dtype([("array2", np.int16, (3, 2))], align=True)
99
+
100
+
101
+ # Functions used for "full array" tests
102
+
103
+
104
+ def record_write_full_array(rec):
105
+ rec.j[:, :] = np.ones((3, 2))
106
+
107
+
108
+ def record_write_full_array_alt(rec):
109
+ rec["j"][:, :] = np.ones((3, 2))
110
+
111
+
112
+ def recarray_set_record(ary, rec):
113
+ ary[0] = rec
114
+
115
+
116
+ def recarray_write_array_of_nestedarray_broadcast(ary):
117
+ ary.j[:, :, :] = 1
118
+ return ary
119
+
120
+
121
+ def record_setitem_array(rec_source, rec_dest):
122
+ rec_dest["j"] = rec_source["j"]
123
+
124
+
125
+ def recarray_write_array_of_nestedarray(ary):
126
+ ary.j[:, :, :] = np.ones((2, 3, 2))
127
+ return ary
128
+
129
+
130
+ def recarray_getitem_return(ary):
131
+ return ary[0]
132
+
133
+
134
+ def recarray_getitem_field_return(ary):
135
+ return ary["h"]
136
+
137
+
138
+ def recarray_getitem_field_return2(ary):
139
+ return ary.h
140
+
141
+
142
+ def recarray_getitem_field_return2_2d(ary):
143
+ return ary.j
144
+
145
+
146
+ def record_read_array0(ary):
147
+ return ary.h[0]
148
+
149
+
150
+ def record_read_array1(ary):
151
+ return ary.h[1]
152
+
153
+
154
+ def record_read_whole_array(ary):
155
+ return ary.h
156
+
157
+
158
+ def record_read_2d_array00(ary):
159
+ return ary.j[0, 0]
160
+
161
+
162
+ def record_read_2d_array10(ary):
163
+ return ary.j[1, 0]
164
+
165
+
166
+ def record_read_2d_array01(ary):
167
+ return ary.j[0, 1]
168
+
169
+
170
+ def assign_array_to_nested(dest, src):
171
+ dest["array1"] = src
172
+
173
+
174
+ def assign_array_to_nested_2d(dest, src):
175
+ dest["array2"] = src
176
+
177
+
178
+ class TestRecordDtype(CUDATestCase):
179
+ def _createSampleArrays(self):
180
+ self.sample1d = np.recarray(3, dtype=recordtype)
181
+ self.samplerec1darr = np.recarray(1, dtype=recordwitharray)[0]
182
+ self.samplerec2darr = np.recarray(1, dtype=recordwith2darray)[0]
183
+
184
+ def setUp(self):
185
+ super().setUp()
186
+ self._createSampleArrays()
187
+
188
+ ary = self.sample1d
189
+ for i in range(ary.size):
190
+ x = i + 1
191
+ ary[i]["a"] = x / 2
192
+ ary[i]["b"] = x
193
+ ary[i]["c"] = x * 1j
194
+ ary[i]["d"] = "%d" % x
195
+
196
+ def get_cfunc(self, pyfunc, argspec):
197
+ return cuda.jit()(pyfunc)
198
+
199
+ def _test_set_equal(self, pyfunc, value, valuetype):
200
+ rec = numpy_support.from_dtype(recordtype)
201
+ cfunc = self.get_cfunc(pyfunc, (rec[:], types.intp, valuetype))
202
+
203
+ for i in range(self.sample1d.size):
204
+ got = self.sample1d.copy()
205
+
206
+ # Force the argument to the pure Python function to be
207
+ # a recarray, as attribute access isn't supported on
208
+ # structured arrays.
209
+ expect = got.copy().view(np.recarray)
210
+
211
+ cfunc[1, 1](got, i, value)
212
+ pyfunc(expect, i, value)
213
+
214
+ # Match the entire array to ensure no memory corruption
215
+ self.assertTrue(np.all(expect == got))
216
+
217
+ def test_set_a(self):
218
+ self._test_set_equal(set_a, 3.1415, types.float64)
219
+ # Test again to check if coercion works
220
+ self._test_set_equal(set_a, 3.0, types.float32)
221
+
222
+ def test_set_b(self):
223
+ self._test_set_equal(set_b, 123, types.int32)
224
+ # Test again to check if coercion works
225
+ self._test_set_equal(set_b, 123, types.float64)
226
+
227
+ def test_set_c(self):
228
+ self._test_set_equal(set_c, 43j, types.complex64)
229
+ # Test again to check if coercion works
230
+ self._test_set_equal(set_c, 43j, types.complex128)
231
+
232
+ def test_set_record(self):
233
+ pyfunc = set_record
234
+ rec = numpy_support.from_dtype(recordtype)
235
+ cfunc = self.get_cfunc(pyfunc, (rec[:], types.intp, types.intp))
236
+
237
+ test_indices = [(0, 1), (1, 2), (0, 2)]
238
+ for i, j in test_indices:
239
+ expect = self.sample1d.copy()
240
+ pyfunc(expect, i, j)
241
+
242
+ got = self.sample1d.copy()
243
+ cfunc[1, 1](got, i, j)
244
+
245
+ # Match the entire array to ensure no memory corruption
246
+ self.assertEqual(expect[i], expect[j])
247
+ self.assertEqual(got[i], got[j])
248
+ self.assertTrue(np.all(expect == got))
249
+
250
+ def _test_rec_set(self, v, pyfunc, f):
251
+ rec = self.sample1d.copy()[0]
252
+ nbrecord = numpy_support.from_dtype(recordtype)
253
+ cfunc = self.get_cfunc(pyfunc, (nbrecord,))
254
+ cfunc[1, 1](rec, v)
255
+ np.testing.assert_equal(rec[f], v)
256
+
257
+ def test_rec_set_a(self):
258
+ self._test_rec_set(np.float64(1.5), record_set_a, "a")
259
+
260
+ def test_rec_set_b(self):
261
+ self._test_rec_set(np.int32(2), record_set_b, "b")
262
+
263
+ def test_rec_set_c(self):
264
+ self._test_rec_set(np.complex64(4.0 + 5.0j), record_set_c, "c")
265
+
266
+ def _test_rec_read(self, v, pyfunc, f):
267
+ rec = self.sample1d.copy()[0]
268
+ rec[f] = v
269
+ arr = np.zeros(1, v.dtype)
270
+ nbrecord = numpy_support.from_dtype(recordtype)
271
+ cfunc = self.get_cfunc(pyfunc, (nbrecord,))
272
+ cfunc[1, 1](rec, arr)
273
+ np.testing.assert_equal(arr[0], v)
274
+
275
+ def test_rec_read_a(self):
276
+ self._test_rec_read(np.float64(1.5), record_read_a, "a")
277
+
278
+ def test_rec_read_b(self):
279
+ self._test_rec_read(np.int32(2), record_read_b, "b")
280
+
281
+ def test_rec_read_c(self):
282
+ self._test_rec_read(np.complex64(4.0 + 5.0j), record_read_c, "c")
283
+
284
+ def test_record_write_1d_array(self):
285
+ """
286
+ Test writing to a 1D array within a structured type
287
+ """
288
+ rec = self.samplerec1darr.copy()
289
+ nbrecord = numpy_support.from_dtype(recordwitharray)
290
+ cfunc = self.get_cfunc(record_write_array, (nbrecord,))
291
+
292
+ cfunc[1, 1](rec)
293
+ expected = self.samplerec1darr.copy()
294
+ expected["g"] = 2
295
+ expected["h"][0] = 3.0
296
+ expected["h"][1] = 4.0
297
+
298
+ np.testing.assert_equal(expected, rec)
299
+
300
+ def test_record_write_2d_array(self):
301
+ """
302
+ Test writing to a 2D array within a structured type
303
+ """
304
+ rec = self.samplerec2darr.copy()
305
+ nbrecord = numpy_support.from_dtype(recordwith2darray)
306
+ cfunc = self.get_cfunc(record_write_2d_array, (nbrecord,))
307
+ cfunc[1, 1](rec)
308
+
309
+ expected = self.samplerec2darr.copy()
310
+ expected["i"] = 3
311
+ expected["j"][:] = np.asarray(
312
+ [5.0, 6.0, 7.0, 8.0, 9.0, 10.0], np.float32
313
+ ).reshape(3, 2)
314
+ np.testing.assert_equal(expected, rec)
315
+
316
+ def test_record_read_1d_array(self):
317
+ """
318
+ Test reading from a 1D array within a structured type
319
+ """
320
+ rec = self.samplerec1darr.copy()
321
+ rec["h"][0] = 4.0
322
+ rec["h"][1] = 5.0
323
+
324
+ nbrecord = numpy_support.from_dtype(recordwitharray)
325
+ cfunc = self.get_cfunc(record_read_array, (nbrecord,))
326
+ arr = np.zeros(2, dtype=rec["h"].dtype)
327
+ cfunc[1, 1](rec, arr)
328
+
329
+ np.testing.assert_equal(rec["h"], arr)
330
+
331
+ def test_record_read_2d_array(self):
332
+ """
333
+ Test reading from a 2D array within a structured type
334
+ """
335
+ rec = self.samplerec2darr.copy()
336
+ rec["j"][:] = np.asarray(
337
+ [5.0, 6.0, 7.0, 8.0, 9.0, 10.0], np.float32
338
+ ).reshape(3, 2)
339
+
340
+ nbrecord = numpy_support.from_dtype(recordwith2darray)
341
+ cfunc = self.get_cfunc(record_read_2d_array, (nbrecord,))
342
+ arr = np.zeros((3, 2), dtype=rec["j"].dtype)
343
+ cfunc[1, 1](rec, arr)
344
+
345
+ np.testing.assert_equal(rec["j"], arr)
346
+
347
+
348
+ @skip_on_cudasim("Structured array attr access not supported in simulator")
349
+ class TestRecordDtypeWithStructArrays(TestRecordDtype):
350
+ """
351
+ Same as TestRecordDtype, but using structured arrays instead of recarrays.
352
+ """
353
+
354
+ def _createSampleArrays(self):
355
+ self.sample1d = np.zeros(3, dtype=recordtype)
356
+ self.samplerec1darr = np.zeros(1, dtype=recordwitharray)[0]
357
+ self.samplerec2darr = np.zeros(1, dtype=recordwith2darray)[0]
358
+
359
+
360
+ class TestNestedArrays(CUDATestCase):
361
+ # These tests mirror those from
362
+ # numba.tests.test_record_dtype.TestNestedArrays added in PR
363
+ # #7359: https://github.com/numba/numba/pull/7359
364
+
365
+ # The code cannot be shared between the two classes without modification,
366
+ # as the CUDA test implementations need to be launched (and in some cases
367
+ # wrapped in an outer function to handle the return value). Otherwise, the
368
+ # code here is kept as similar to that in the equivalent CPU tests as
369
+ # possible.
370
+
371
+ # Reading records / recarrays
372
+
373
+ def get_cfunc(self, pyfunc, retty):
374
+ # Create a host-callable function for testing CUDA device functions
375
+ # that get a value from a record array
376
+ inner = cuda.jit(device=True)(pyfunc)
377
+
378
+ @cuda.jit
379
+ def outer(arg0, res):
380
+ res[0] = inner(arg0)
381
+
382
+ def host(arg0):
383
+ res = np.zeros(1, dtype=retty)
384
+ outer[1, 1](arg0, res)
385
+ return res[0]
386
+
387
+ return host
388
+
389
+ def test_record_read_array(self):
390
+ # Test reading from a 1D array within a structured type
391
+ nbval = np.recarray(1, dtype=recordwitharray)
392
+ nbval[0].h[0] = 15.0
393
+ nbval[0].h[1] = 25.0
394
+ cfunc = self.get_cfunc(record_read_array0, np.float32)
395
+ res = cfunc(nbval[0])
396
+ np.testing.assert_equal(res, nbval[0].h[0])
397
+
398
+ cfunc = self.get_cfunc(record_read_array1, np.float32)
399
+ res = cfunc(nbval[0])
400
+ np.testing.assert_equal(res, nbval[0].h[1])
401
+
402
+ def test_record_read_2d_array(self):
403
+ # Test reading from a 2D array within a structured type
404
+ nbval = np.recarray(1, dtype=recordwith2darray)
405
+ nbval[0].j = np.asarray(
406
+ [1.5, 2.5, 3.5, 4.5, 5.5, 6.5], np.float32
407
+ ).reshape(3, 2)
408
+ cfunc = self.get_cfunc(record_read_2d_array00, np.float32)
409
+ res = cfunc(nbval[0])
410
+ np.testing.assert_equal(res, nbval[0].j[0, 0])
411
+
412
+ cfunc = self.get_cfunc(record_read_2d_array01, np.float32)
413
+ res = cfunc(nbval[0])
414
+ np.testing.assert_equal(res, nbval[0].j[0, 1])
415
+
416
+ cfunc = self.get_cfunc(record_read_2d_array10, np.float32)
417
+ res = cfunc(nbval[0])
418
+ np.testing.assert_equal(res, nbval[0].j[1, 0])
419
+
420
+ def test_setitem(self):
421
+ def gen():
422
+ nbarr1 = np.recarray(1, dtype=recordwith2darray)
423
+ nbarr1[0] = np.array(
424
+ [(1, ((1, 2), (4, 5), (2, 3)))], dtype=recordwith2darray
425
+ )[0]
426
+ nbarr2 = np.recarray(1, dtype=recordwith2darray)
427
+ nbarr2[0] = np.array(
428
+ [(10, ((10, 20), (40, 50), (20, 30)))], dtype=recordwith2darray
429
+ )[0]
430
+ return nbarr1[0], nbarr2[0]
431
+
432
+ pyfunc = record_setitem_array
433
+ pyargs = gen()
434
+ pyfunc(*pyargs)
435
+
436
+ cfunc = cuda.jit(pyfunc)
437
+ cuargs = gen()
438
+ cfunc[1, 1](*cuargs)
439
+ np.testing.assert_equal(pyargs, cuargs)
440
+
441
+ def test_getitem_idx(self):
442
+ # Test __getitem__ with numerical index
443
+
444
+ # This tests returning a record when passing an array and
445
+ # returning the first item when passing a record
446
+ nbarr = np.recarray(2, dtype=recordwitharray)
447
+ nbarr[0] = np.array([(1, (2, 3))], dtype=recordwitharray)[0]
448
+ for arg, retty in [(nbarr, recordwitharray), (nbarr[0], np.int32)]:
449
+ pyfunc = recarray_getitem_return
450
+ arr_expected = pyfunc(arg)
451
+ cfunc = self.get_cfunc(pyfunc, retty)
452
+ arr_res = cfunc(arg)
453
+ np.testing.assert_equal(arr_res, arr_expected)
454
+
455
+ # Writing to records / recarrays
456
+
457
+ @skip_on_cudasim("Structured array attr access not supported in simulator")
458
+ def test_set_record(self):
459
+ # Test setting an entire record
460
+ rec = np.ones(2, dtype=recordwith2darray).view(np.recarray)[0]
461
+ nbarr = np.zeros(2, dtype=recordwith2darray).view(np.recarray)
462
+ arr = np.zeros(2, dtype=recordwith2darray).view(np.recarray)
463
+ pyfunc = recarray_set_record
464
+ pyfunc(arr, rec)
465
+ kernel = cuda.jit(pyfunc)
466
+ kernel[1, 1](nbarr, rec)
467
+ np.testing.assert_equal(nbarr, arr)
468
+
469
+ def test_assign_array_to_nested(self):
470
+ src = (np.arange(3) + 1).astype(np.int16)
471
+ got = np.zeros(2, dtype=nested_array1_dtype)
472
+ expected = np.zeros(2, dtype=nested_array1_dtype)
473
+
474
+ pyfunc = assign_array_to_nested
475
+ kernel = cuda.jit(pyfunc)
476
+
477
+ kernel[1, 1](got[0], src)
478
+ pyfunc(expected[0], src)
479
+
480
+ np.testing.assert_array_equal(expected, got)
481
+
482
+ def test_assign_array_to_nested_2d(self):
483
+ src = (np.arange(6) + 1).astype(np.int16).reshape((3, 2))
484
+ got = np.zeros(2, dtype=nested_array2_dtype)
485
+ expected = np.zeros(2, dtype=nested_array2_dtype)
486
+
487
+ pyfunc = assign_array_to_nested_2d
488
+ kernel = cuda.jit(pyfunc)
489
+
490
+ kernel[1, 1](got[0], src)
491
+ pyfunc(expected[0], src)
492
+
493
+ np.testing.assert_array_equal(expected, got)
494
+
495
+ def test_issue_7693(self):
496
+ src_dtype = np.dtype(
497
+ [("user", np.float64), ("array", np.int16, (3,))], align=True
498
+ )
499
+
500
+ dest_dtype = np.dtype(
501
+ [("user1", np.float64), ("array1", np.int16, (3,))], align=True
502
+ )
503
+
504
+ @cuda.jit
505
+ def copy(index, src, dest):
506
+ dest["user1"] = src[index]["user"]
507
+ dest["array1"] = src[index]["array"]
508
+
509
+ source = np.zeros(2, dtype=src_dtype)
510
+ got = np.zeros(2, dtype=dest_dtype)
511
+ expected = np.zeros(2, dtype=dest_dtype)
512
+
513
+ source[0] = (1.2, [1, 2, 3])
514
+ copy[1, 1](0, source, got[0])
515
+ copy.py_func(0, source, expected[0])
516
+
517
+ np.testing.assert_array_equal(expected, got)
518
+
519
+ # Reading and returning arrays from recarrays - the following functions are
520
+ # all xfailed because CUDA cannot handle returning arrays from device
521
+ # functions (or creating arrays in general).
522
+
523
+ @unittest.expectedFailure
524
+ def test_getitem_idx_2darray(self):
525
+ # Test __getitem__ with numerical index
526
+ #
527
+ # This test returning a record when passing an array and
528
+ # return the first item when passing a record
529
+ nbarr = np.recarray(2, dtype=recordwith2darray)
530
+ nbarr[0] = np.array(
531
+ [(1, ((1, 2), (4, 5), (2, 3)))], dtype=recordwith2darray
532
+ )[0]
533
+ for arg, retty in [
534
+ (nbarr, recordwith2darray),
535
+ (nbarr[0], (np.float32, (3, 2))),
536
+ ]:
537
+ pyfunc = recarray_getitem_field_return2_2d
538
+ arr_expected = pyfunc(arg)
539
+ cfunc = self.get_cfunc(pyfunc, retty)
540
+ arr_res = cfunc(arg)
541
+ np.testing.assert_equal(arr_res, arr_expected)
542
+
543
+ @unittest.expectedFailure
544
+ def test_return_getattr_getitem_fieldname(self):
545
+ # Test __getitem__ with field name and getattr .field_name
546
+ #
547
+ # This tests returning a array of nestedarrays when passing an array and
548
+ # returning a nestedarray when passing a record
549
+ nbarr = np.recarray(2, dtype=recordwitharray)
550
+ nbarr[0] = np.array([(1, (2, 3))], dtype=recordwitharray)[0]
551
+ for arg, retty in [(nbarr, recordwitharray), (nbarr[0], np.float32)]:
552
+ for pyfunc in [
553
+ recarray_getitem_field_return,
554
+ recarray_getitem_field_return2,
555
+ ]:
556
+ arr_expected = pyfunc(arg)
557
+ cfunc = self.get_cfunc(pyfunc, retty)
558
+ arr_res = cfunc(arg)
559
+ np.testing.assert_equal(arr_res, arr_expected)
560
+
561
+ @unittest.expectedFailure
562
+ def test_record_read_arrays(self):
563
+ # Test reading from a 1D array within a structured type
564
+ nbval = np.recarray(2, dtype=recordwitharray)
565
+ nbval[0].h[0] = 15.0
566
+ nbval[0].h[1] = 25.0
567
+ nbval[1].h[0] = 35.0
568
+ nbval[1].h[1] = 45.4
569
+ cfunc = self.get_cfunc(record_read_whole_array, np.float32)
570
+ res = cfunc(nbval)
571
+ np.testing.assert_equal(res, nbval.h)
572
+
573
+ @unittest.expectedFailure
574
+ def test_return_array(self):
575
+ # Test getitem record AND array within record and returning it
576
+ nbval = np.recarray(2, dtype=recordwitharray)
577
+ nbval[0] = np.array([(1, (2, 3))], dtype=recordwitharray)[0]
578
+ pyfunc = record_read_array0
579
+ arr_expected = pyfunc(nbval)
580
+ cfunc = self.get_cfunc(pyfunc, np.float32)
581
+ arr_res = cfunc(nbval)
582
+ np.testing.assert_equal(arr_expected, arr_res)
583
+
584
+ @skip_on_cudasim("Will unexpectedly pass on cudasim")
585
+ @unittest.expectedFailure
586
+ def test_set_array(self):
587
+ # Test setting an entire array within one record
588
+ arr = np.zeros(2, dtype=recordwith2darray).view(np.recarray)
589
+ rec = arr[0]
590
+ nbarr = np.zeros(2, dtype=recordwith2darray).view(np.recarray)
591
+ nbrec = nbarr[0]
592
+ for pyfunc in (record_write_full_array, record_write_full_array_alt):
593
+ pyfunc(rec)
594
+ kernel = cuda.jit(pyfunc)
595
+ kernel[1, 1](nbrec)
596
+ np.testing.assert_equal(nbarr, arr)
597
+
598
+ @unittest.expectedFailure
599
+ def test_set_arrays(self):
600
+ # Test setting an entire array of arrays (multiple records)
601
+ arr = np.zeros(2, dtype=recordwith2darray).view(np.recarray)
602
+ nbarr = np.zeros(2, dtype=recordwith2darray).view(np.recarray)
603
+ for pyfunc in (
604
+ recarray_write_array_of_nestedarray_broadcast,
605
+ recarray_write_array_of_nestedarray,
606
+ ):
607
+ arr_expected = pyfunc(arr)
608
+ cfunc = self.get_cfunc(pyfunc, nbarr.dtype)
609
+ arr_res = cfunc(nbarr)
610
+ np.testing.assert_equal(arr_res, arr_expected)
611
+
612
+
613
+ if __name__ == "__main__":
614
+ unittest.main()