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.
- _numba_cuda_redirector.pth +4 -0
- _numba_cuda_redirector.py +89 -0
- numba_cuda/VERSION +1 -0
- numba_cuda/__init__.py +6 -0
- numba_cuda/_version.py +11 -0
- numba_cuda/numba/cuda/__init__.py +70 -0
- numba_cuda/numba/cuda/_internal/cuda_bf16.py +16394 -0
- numba_cuda/numba/cuda/_internal/cuda_fp16.py +8112 -0
- numba_cuda/numba/cuda/api.py +580 -0
- numba_cuda/numba/cuda/api_util.py +76 -0
- numba_cuda/numba/cuda/args.py +72 -0
- numba_cuda/numba/cuda/bf16.py +397 -0
- numba_cuda/numba/cuda/cache_hints.py +287 -0
- numba_cuda/numba/cuda/cext/__init__.py +2 -0
- numba_cuda/numba/cuda/cext/_devicearray.cpp +159 -0
- numba_cuda/numba/cuda/cext/_devicearray.cpython-312-aarch64-linux-gnu.so +0 -0
- numba_cuda/numba/cuda/cext/_devicearray.h +29 -0
- numba_cuda/numba/cuda/cext/_dispatcher.cpp +1098 -0
- numba_cuda/numba/cuda/cext/_dispatcher.cpython-312-aarch64-linux-gnu.so +0 -0
- numba_cuda/numba/cuda/cext/_hashtable.cpp +532 -0
- numba_cuda/numba/cuda/cext/_hashtable.h +135 -0
- numba_cuda/numba/cuda/cext/_helperlib.c +71 -0
- numba_cuda/numba/cuda/cext/_helperlib.cpython-312-aarch64-linux-gnu.so +0 -0
- numba_cuda/numba/cuda/cext/_helpermod.c +82 -0
- numba_cuda/numba/cuda/cext/_pymodule.h +38 -0
- numba_cuda/numba/cuda/cext/_typeconv.cpp +206 -0
- numba_cuda/numba/cuda/cext/_typeconv.cpython-312-aarch64-linux-gnu.so +0 -0
- numba_cuda/numba/cuda/cext/_typeof.cpp +1159 -0
- numba_cuda/numba/cuda/cext/_typeof.h +19 -0
- numba_cuda/numba/cuda/cext/capsulethunk.h +111 -0
- numba_cuda/numba/cuda/cext/mviewbuf.c +385 -0
- numba_cuda/numba/cuda/cext/mviewbuf.cpython-312-aarch64-linux-gnu.so +0 -0
- numba_cuda/numba/cuda/cext/typeconv.cpp +212 -0
- numba_cuda/numba/cuda/cext/typeconv.hpp +101 -0
- numba_cuda/numba/cuda/cg.py +67 -0
- numba_cuda/numba/cuda/cgutils.py +1294 -0
- numba_cuda/numba/cuda/cloudpickle/__init__.py +21 -0
- numba_cuda/numba/cuda/cloudpickle/cloudpickle.py +1598 -0
- numba_cuda/numba/cuda/cloudpickle/cloudpickle_fast.py +17 -0
- numba_cuda/numba/cuda/codegen.py +541 -0
- numba_cuda/numba/cuda/compiler.py +1396 -0
- numba_cuda/numba/cuda/core/analysis.py +758 -0
- numba_cuda/numba/cuda/core/annotations/__init__.py +0 -0
- numba_cuda/numba/cuda/core/annotations/pretty_annotate.py +288 -0
- numba_cuda/numba/cuda/core/annotations/type_annotations.py +305 -0
- numba_cuda/numba/cuda/core/base.py +1332 -0
- numba_cuda/numba/cuda/core/boxing.py +1411 -0
- numba_cuda/numba/cuda/core/bytecode.py +728 -0
- numba_cuda/numba/cuda/core/byteflow.py +2346 -0
- numba_cuda/numba/cuda/core/caching.py +744 -0
- numba_cuda/numba/cuda/core/callconv.py +392 -0
- numba_cuda/numba/cuda/core/codegen.py +171 -0
- numba_cuda/numba/cuda/core/compiler.py +199 -0
- numba_cuda/numba/cuda/core/compiler_lock.py +85 -0
- numba_cuda/numba/cuda/core/compiler_machinery.py +497 -0
- numba_cuda/numba/cuda/core/config.py +650 -0
- numba_cuda/numba/cuda/core/consts.py +124 -0
- numba_cuda/numba/cuda/core/controlflow.py +989 -0
- numba_cuda/numba/cuda/core/entrypoints.py +57 -0
- numba_cuda/numba/cuda/core/environment.py +66 -0
- numba_cuda/numba/cuda/core/errors.py +917 -0
- numba_cuda/numba/cuda/core/event.py +511 -0
- numba_cuda/numba/cuda/core/funcdesc.py +330 -0
- numba_cuda/numba/cuda/core/generators.py +387 -0
- numba_cuda/numba/cuda/core/imputils.py +509 -0
- numba_cuda/numba/cuda/core/inline_closurecall.py +1787 -0
- numba_cuda/numba/cuda/core/interpreter.py +3617 -0
- numba_cuda/numba/cuda/core/ir.py +1812 -0
- numba_cuda/numba/cuda/core/ir_utils.py +2638 -0
- numba_cuda/numba/cuda/core/optional.py +129 -0
- numba_cuda/numba/cuda/core/options.py +262 -0
- numba_cuda/numba/cuda/core/postproc.py +249 -0
- numba_cuda/numba/cuda/core/pythonapi.py +1859 -0
- numba_cuda/numba/cuda/core/registry.py +46 -0
- numba_cuda/numba/cuda/core/removerefctpass.py +123 -0
- numba_cuda/numba/cuda/core/rewrites/__init__.py +26 -0
- numba_cuda/numba/cuda/core/rewrites/ir_print.py +91 -0
- numba_cuda/numba/cuda/core/rewrites/registry.py +104 -0
- numba_cuda/numba/cuda/core/rewrites/static_binop.py +41 -0
- numba_cuda/numba/cuda/core/rewrites/static_getitem.py +189 -0
- numba_cuda/numba/cuda/core/rewrites/static_raise.py +100 -0
- numba_cuda/numba/cuda/core/sigutils.py +68 -0
- numba_cuda/numba/cuda/core/ssa.py +498 -0
- numba_cuda/numba/cuda/core/targetconfig.py +330 -0
- numba_cuda/numba/cuda/core/tracing.py +231 -0
- numba_cuda/numba/cuda/core/transforms.py +956 -0
- numba_cuda/numba/cuda/core/typed_passes.py +867 -0
- numba_cuda/numba/cuda/core/typeinfer.py +1950 -0
- numba_cuda/numba/cuda/core/unsafe/__init__.py +0 -0
- numba_cuda/numba/cuda/core/unsafe/bytes.py +67 -0
- numba_cuda/numba/cuda/core/unsafe/eh.py +67 -0
- numba_cuda/numba/cuda/core/unsafe/refcount.py +98 -0
- numba_cuda/numba/cuda/core/untyped_passes.py +1979 -0
- numba_cuda/numba/cuda/cpython/builtins.py +1153 -0
- numba_cuda/numba/cuda/cpython/charseq.py +1218 -0
- numba_cuda/numba/cuda/cpython/cmathimpl.py +560 -0
- numba_cuda/numba/cuda/cpython/enumimpl.py +103 -0
- numba_cuda/numba/cuda/cpython/iterators.py +167 -0
- numba_cuda/numba/cuda/cpython/listobj.py +1326 -0
- numba_cuda/numba/cuda/cpython/mathimpl.py +499 -0
- numba_cuda/numba/cuda/cpython/numbers.py +1475 -0
- numba_cuda/numba/cuda/cpython/rangeobj.py +289 -0
- numba_cuda/numba/cuda/cpython/slicing.py +322 -0
- numba_cuda/numba/cuda/cpython/tupleobj.py +456 -0
- numba_cuda/numba/cuda/cpython/unicode.py +2865 -0
- numba_cuda/numba/cuda/cpython/unicode_support.py +1597 -0
- numba_cuda/numba/cuda/cpython/unsafe/__init__.py +0 -0
- numba_cuda/numba/cuda/cpython/unsafe/numbers.py +64 -0
- numba_cuda/numba/cuda/cpython/unsafe/tuple.py +92 -0
- numba_cuda/numba/cuda/cuda_paths.py +691 -0
- numba_cuda/numba/cuda/cudadecl.py +543 -0
- numba_cuda/numba/cuda/cudadrv/__init__.py +14 -0
- numba_cuda/numba/cuda/cudadrv/devicearray.py +954 -0
- numba_cuda/numba/cuda/cudadrv/devices.py +249 -0
- numba_cuda/numba/cuda/cudadrv/driver.py +3238 -0
- numba_cuda/numba/cuda/cudadrv/drvapi.py +435 -0
- numba_cuda/numba/cuda/cudadrv/dummyarray.py +562 -0
- numba_cuda/numba/cuda/cudadrv/enums.py +613 -0
- numba_cuda/numba/cuda/cudadrv/error.py +48 -0
- numba_cuda/numba/cuda/cudadrv/libs.py +220 -0
- numba_cuda/numba/cuda/cudadrv/linkable_code.py +184 -0
- numba_cuda/numba/cuda/cudadrv/mappings.py +14 -0
- numba_cuda/numba/cuda/cudadrv/ndarray.py +26 -0
- numba_cuda/numba/cuda/cudadrv/nvrtc.py +193 -0
- numba_cuda/numba/cuda/cudadrv/nvvm.py +756 -0
- numba_cuda/numba/cuda/cudadrv/rtapi.py +13 -0
- numba_cuda/numba/cuda/cudadrv/runtime.py +34 -0
- numba_cuda/numba/cuda/cudaimpl.py +983 -0
- numba_cuda/numba/cuda/cudamath.py +149 -0
- numba_cuda/numba/cuda/datamodel/__init__.py +7 -0
- numba_cuda/numba/cuda/datamodel/cuda_manager.py +66 -0
- numba_cuda/numba/cuda/datamodel/cuda_models.py +1446 -0
- numba_cuda/numba/cuda/datamodel/cuda_packer.py +224 -0
- numba_cuda/numba/cuda/datamodel/cuda_registry.py +22 -0
- numba_cuda/numba/cuda/datamodel/cuda_testing.py +153 -0
- numba_cuda/numba/cuda/datamodel/manager.py +11 -0
- numba_cuda/numba/cuda/datamodel/models.py +9 -0
- numba_cuda/numba/cuda/datamodel/packer.py +9 -0
- numba_cuda/numba/cuda/datamodel/registry.py +11 -0
- numba_cuda/numba/cuda/datamodel/testing.py +11 -0
- numba_cuda/numba/cuda/debuginfo.py +997 -0
- numba_cuda/numba/cuda/decorators.py +294 -0
- numba_cuda/numba/cuda/descriptor.py +35 -0
- numba_cuda/numba/cuda/device_init.py +155 -0
- numba_cuda/numba/cuda/deviceufunc.py +1021 -0
- numba_cuda/numba/cuda/dispatcher.py +2463 -0
- numba_cuda/numba/cuda/errors.py +72 -0
- numba_cuda/numba/cuda/extending.py +697 -0
- numba_cuda/numba/cuda/flags.py +178 -0
- numba_cuda/numba/cuda/fp16.py +357 -0
- numba_cuda/numba/cuda/include/12/cuda_bf16.h +5118 -0
- numba_cuda/numba/cuda/include/12/cuda_bf16.hpp +3865 -0
- numba_cuda/numba/cuda/include/12/cuda_fp16.h +5363 -0
- numba_cuda/numba/cuda/include/12/cuda_fp16.hpp +3483 -0
- numba_cuda/numba/cuda/include/13/cuda_bf16.h +5118 -0
- numba_cuda/numba/cuda/include/13/cuda_bf16.hpp +3865 -0
- numba_cuda/numba/cuda/include/13/cuda_fp16.h +5363 -0
- numba_cuda/numba/cuda/include/13/cuda_fp16.hpp +3483 -0
- numba_cuda/numba/cuda/initialize.py +24 -0
- numba_cuda/numba/cuda/intrinsics.py +531 -0
- numba_cuda/numba/cuda/itanium_mangler.py +214 -0
- numba_cuda/numba/cuda/kernels/__init__.py +2 -0
- numba_cuda/numba/cuda/kernels/reduction.py +265 -0
- numba_cuda/numba/cuda/kernels/transpose.py +65 -0
- numba_cuda/numba/cuda/libdevice.py +3386 -0
- numba_cuda/numba/cuda/libdevicedecl.py +20 -0
- numba_cuda/numba/cuda/libdevicefuncs.py +1060 -0
- numba_cuda/numba/cuda/libdeviceimpl.py +88 -0
- numba_cuda/numba/cuda/locks.py +19 -0
- numba_cuda/numba/cuda/lowering.py +1980 -0
- numba_cuda/numba/cuda/mathimpl.py +374 -0
- numba_cuda/numba/cuda/memory_management/__init__.py +4 -0
- numba_cuda/numba/cuda/memory_management/memsys.cu +99 -0
- numba_cuda/numba/cuda/memory_management/memsys.cuh +22 -0
- numba_cuda/numba/cuda/memory_management/nrt.cu +212 -0
- numba_cuda/numba/cuda/memory_management/nrt.cuh +48 -0
- numba_cuda/numba/cuda/memory_management/nrt.py +390 -0
- numba_cuda/numba/cuda/memory_management/nrt_context.py +438 -0
- numba_cuda/numba/cuda/misc/appdirs.py +594 -0
- numba_cuda/numba/cuda/misc/cffiimpl.py +24 -0
- numba_cuda/numba/cuda/misc/coverage_support.py +43 -0
- numba_cuda/numba/cuda/misc/dump_style.py +41 -0
- numba_cuda/numba/cuda/misc/findlib.py +75 -0
- numba_cuda/numba/cuda/misc/firstlinefinder.py +96 -0
- numba_cuda/numba/cuda/misc/gdb_hook.py +240 -0
- numba_cuda/numba/cuda/misc/literal.py +28 -0
- numba_cuda/numba/cuda/misc/llvm_pass_timings.py +412 -0
- numba_cuda/numba/cuda/misc/special.py +94 -0
- numba_cuda/numba/cuda/models.py +56 -0
- numba_cuda/numba/cuda/np/arraymath.py +5130 -0
- numba_cuda/numba/cuda/np/arrayobj.py +7635 -0
- numba_cuda/numba/cuda/np/extensions.py +11 -0
- numba_cuda/numba/cuda/np/linalg.py +3087 -0
- numba_cuda/numba/cuda/np/math/__init__.py +0 -0
- numba_cuda/numba/cuda/np/math/cmathimpl.py +558 -0
- numba_cuda/numba/cuda/np/math/mathimpl.py +487 -0
- numba_cuda/numba/cuda/np/math/numbers.py +1461 -0
- numba_cuda/numba/cuda/np/npdatetime.py +969 -0
- numba_cuda/numba/cuda/np/npdatetime_helpers.py +217 -0
- numba_cuda/numba/cuda/np/npyfuncs.py +1808 -0
- numba_cuda/numba/cuda/np/npyimpl.py +1027 -0
- numba_cuda/numba/cuda/np/numpy_support.py +798 -0
- numba_cuda/numba/cuda/np/polynomial/__init__.py +4 -0
- numba_cuda/numba/cuda/np/polynomial/polynomial_core.py +242 -0
- numba_cuda/numba/cuda/np/polynomial/polynomial_functions.py +380 -0
- numba_cuda/numba/cuda/np/ufunc/__init__.py +4 -0
- numba_cuda/numba/cuda/np/ufunc/decorators.py +203 -0
- numba_cuda/numba/cuda/np/ufunc/sigparse.py +68 -0
- numba_cuda/numba/cuda/np/ufunc/ufuncbuilder.py +65 -0
- numba_cuda/numba/cuda/np/ufunc_db.py +1282 -0
- numba_cuda/numba/cuda/np/unsafe/__init__.py +0 -0
- numba_cuda/numba/cuda/np/unsafe/ndarray.py +84 -0
- numba_cuda/numba/cuda/nvvmutils.py +254 -0
- numba_cuda/numba/cuda/printimpl.py +126 -0
- numba_cuda/numba/cuda/random.py +308 -0
- numba_cuda/numba/cuda/reshape_funcs.cu +156 -0
- numba_cuda/numba/cuda/serialize.py +267 -0
- numba_cuda/numba/cuda/simulator/__init__.py +63 -0
- numba_cuda/numba/cuda/simulator/_internal/__init__.py +4 -0
- numba_cuda/numba/cuda/simulator/_internal/cuda_bf16.py +2 -0
- numba_cuda/numba/cuda/simulator/api.py +179 -0
- numba_cuda/numba/cuda/simulator/bf16.py +4 -0
- numba_cuda/numba/cuda/simulator/compiler.py +38 -0
- numba_cuda/numba/cuda/simulator/cudadrv/__init__.py +11 -0
- numba_cuda/numba/cuda/simulator/cudadrv/devicearray.py +462 -0
- numba_cuda/numba/cuda/simulator/cudadrv/devices.py +122 -0
- numba_cuda/numba/cuda/simulator/cudadrv/driver.py +66 -0
- numba_cuda/numba/cuda/simulator/cudadrv/drvapi.py +7 -0
- numba_cuda/numba/cuda/simulator/cudadrv/dummyarray.py +7 -0
- numba_cuda/numba/cuda/simulator/cudadrv/error.py +10 -0
- numba_cuda/numba/cuda/simulator/cudadrv/libs.py +10 -0
- numba_cuda/numba/cuda/simulator/cudadrv/linkable_code.py +61 -0
- numba_cuda/numba/cuda/simulator/cudadrv/nvrtc.py +11 -0
- numba_cuda/numba/cuda/simulator/cudadrv/nvvm.py +32 -0
- numba_cuda/numba/cuda/simulator/cudadrv/runtime.py +22 -0
- numba_cuda/numba/cuda/simulator/dispatcher.py +11 -0
- numba_cuda/numba/cuda/simulator/kernel.py +320 -0
- numba_cuda/numba/cuda/simulator/kernelapi.py +509 -0
- numba_cuda/numba/cuda/simulator/memory_management/__init__.py +4 -0
- numba_cuda/numba/cuda/simulator/memory_management/nrt.py +21 -0
- numba_cuda/numba/cuda/simulator/reduction.py +19 -0
- numba_cuda/numba/cuda/simulator/tests/support.py +4 -0
- numba_cuda/numba/cuda/simulator/vector_types.py +65 -0
- numba_cuda/numba/cuda/simulator_init.py +18 -0
- numba_cuda/numba/cuda/stubs.py +624 -0
- numba_cuda/numba/cuda/target.py +505 -0
- numba_cuda/numba/cuda/testing.py +347 -0
- numba_cuda/numba/cuda/tests/__init__.py +62 -0
- numba_cuda/numba/cuda/tests/benchmarks/__init__.py +0 -0
- numba_cuda/numba/cuda/tests/benchmarks/test_kernel_launch.py +119 -0
- numba_cuda/numba/cuda/tests/cloudpickle_main_class.py +9 -0
- numba_cuda/numba/cuda/tests/core/serialize_usecases.py +113 -0
- numba_cuda/numba/cuda/tests/core/test_itanium_mangler.py +83 -0
- numba_cuda/numba/cuda/tests/core/test_serialize.py +371 -0
- numba_cuda/numba/cuda/tests/cudadrv/__init__.py +9 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_array_attr.py +147 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_context_stack.py +161 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_cuda_array_slicing.py +397 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_cuda_auto_context.py +24 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_cuda_devicerecord.py +180 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_cuda_driver.py +313 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_cuda_memory.py +191 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_cuda_ndarray.py +621 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_deallocations.py +247 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_detect.py +100 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_emm_plugins.py +200 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_events.py +53 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_host_alloc.py +72 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_init.py +138 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_inline_ptx.py +43 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_is_fp16.py +15 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_linkable_code.py +58 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_linker.py +348 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_managed_alloc.py +128 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_module_callbacks.py +301 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_nvjitlink.py +174 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_nvrtc.py +28 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_nvvm_driver.py +185 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_pinned.py +39 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_profiler.py +23 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_reset_device.py +38 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_runtime.py +48 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_select_device.py +44 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_streams.py +127 -0
- numba_cuda/numba/cuda/tests/cudapy/__init__.py +9 -0
- numba_cuda/numba/cuda/tests/cudapy/cache_usecases.py +231 -0
- numba_cuda/numba/cuda/tests/cudapy/cache_with_cpu_usecases.py +50 -0
- numba_cuda/numba/cuda/tests/cudapy/cg_cache_usecases.py +36 -0
- numba_cuda/numba/cuda/tests/cudapy/complex_usecases.py +116 -0
- numba_cuda/numba/cuda/tests/cudapy/enum_usecases.py +59 -0
- numba_cuda/numba/cuda/tests/cudapy/extensions_usecases.py +62 -0
- numba_cuda/numba/cuda/tests/cudapy/jitlink.ptx +28 -0
- numba_cuda/numba/cuda/tests/cudapy/overload_usecases.py +33 -0
- numba_cuda/numba/cuda/tests/cudapy/recursion_usecases.py +104 -0
- numba_cuda/numba/cuda/tests/cudapy/test_alignment.py +47 -0
- numba_cuda/numba/cuda/tests/cudapy/test_analysis.py +1122 -0
- numba_cuda/numba/cuda/tests/cudapy/test_array.py +344 -0
- numba_cuda/numba/cuda/tests/cudapy/test_array_alignment.py +268 -0
- numba_cuda/numba/cuda/tests/cudapy/test_array_args.py +203 -0
- numba_cuda/numba/cuda/tests/cudapy/test_array_methods.py +63 -0
- numba_cuda/numba/cuda/tests/cudapy/test_array_reductions.py +360 -0
- numba_cuda/numba/cuda/tests/cudapy/test_atomics.py +1815 -0
- numba_cuda/numba/cuda/tests/cudapy/test_bfloat16.py +599 -0
- numba_cuda/numba/cuda/tests/cudapy/test_bfloat16_bindings.py +377 -0
- numba_cuda/numba/cuda/tests/cudapy/test_blackscholes.py +160 -0
- numba_cuda/numba/cuda/tests/cudapy/test_boolean.py +27 -0
- numba_cuda/numba/cuda/tests/cudapy/test_byteflow.py +98 -0
- numba_cuda/numba/cuda/tests/cudapy/test_cache_hints.py +210 -0
- numba_cuda/numba/cuda/tests/cudapy/test_caching.py +683 -0
- numba_cuda/numba/cuda/tests/cudapy/test_casting.py +265 -0
- numba_cuda/numba/cuda/tests/cudapy/test_cffi.py +42 -0
- numba_cuda/numba/cuda/tests/cudapy/test_compiler.py +718 -0
- numba_cuda/numba/cuda/tests/cudapy/test_complex.py +370 -0
- numba_cuda/numba/cuda/tests/cudapy/test_complex_kernel.py +23 -0
- numba_cuda/numba/cuda/tests/cudapy/test_const_string.py +142 -0
- numba_cuda/numba/cuda/tests/cudapy/test_constmem.py +178 -0
- numba_cuda/numba/cuda/tests/cudapy/test_cooperative_groups.py +193 -0
- numba_cuda/numba/cuda/tests/cudapy/test_copy_propagate.py +131 -0
- numba_cuda/numba/cuda/tests/cudapy/test_cuda_array_interface.py +438 -0
- numba_cuda/numba/cuda/tests/cudapy/test_cuda_jit_no_types.py +94 -0
- numba_cuda/numba/cuda/tests/cudapy/test_datetime.py +101 -0
- numba_cuda/numba/cuda/tests/cudapy/test_debug.py +105 -0
- numba_cuda/numba/cuda/tests/cudapy/test_debuginfo.py +978 -0
- numba_cuda/numba/cuda/tests/cudapy/test_debuginfo_types.py +476 -0
- numba_cuda/numba/cuda/tests/cudapy/test_device_func.py +500 -0
- numba_cuda/numba/cuda/tests/cudapy/test_dispatcher.py +820 -0
- numba_cuda/numba/cuda/tests/cudapy/test_enums.py +152 -0
- numba_cuda/numba/cuda/tests/cudapy/test_errors.py +111 -0
- numba_cuda/numba/cuda/tests/cudapy/test_exception.py +170 -0
- numba_cuda/numba/cuda/tests/cudapy/test_extending.py +1088 -0
- numba_cuda/numba/cuda/tests/cudapy/test_extending_types.py +71 -0
- numba_cuda/numba/cuda/tests/cudapy/test_fastmath.py +265 -0
- numba_cuda/numba/cuda/tests/cudapy/test_flow_control.py +1433 -0
- numba_cuda/numba/cuda/tests/cudapy/test_forall.py +57 -0
- numba_cuda/numba/cuda/tests/cudapy/test_freevar.py +34 -0
- numba_cuda/numba/cuda/tests/cudapy/test_frexp_ldexp.py +69 -0
- numba_cuda/numba/cuda/tests/cudapy/test_globals.py +62 -0
- numba_cuda/numba/cuda/tests/cudapy/test_gufunc.py +474 -0
- numba_cuda/numba/cuda/tests/cudapy/test_gufunc_scalar.py +167 -0
- numba_cuda/numba/cuda/tests/cudapy/test_gufunc_scheduling.py +92 -0
- numba_cuda/numba/cuda/tests/cudapy/test_idiv.py +39 -0
- numba_cuda/numba/cuda/tests/cudapy/test_inline.py +170 -0
- numba_cuda/numba/cuda/tests/cudapy/test_inspect.py +255 -0
- numba_cuda/numba/cuda/tests/cudapy/test_intrinsics.py +1219 -0
- numba_cuda/numba/cuda/tests/cudapy/test_ipc.py +263 -0
- numba_cuda/numba/cuda/tests/cudapy/test_ir.py +598 -0
- numba_cuda/numba/cuda/tests/cudapy/test_ir_utils.py +276 -0
- numba_cuda/numba/cuda/tests/cudapy/test_iterators.py +101 -0
- numba_cuda/numba/cuda/tests/cudapy/test_lang.py +68 -0
- numba_cuda/numba/cuda/tests/cudapy/test_laplace.py +123 -0
- numba_cuda/numba/cuda/tests/cudapy/test_libdevice.py +194 -0
- numba_cuda/numba/cuda/tests/cudapy/test_lineinfo.py +220 -0
- numba_cuda/numba/cuda/tests/cudapy/test_localmem.py +173 -0
- numba_cuda/numba/cuda/tests/cudapy/test_make_function_to_jit_function.py +364 -0
- numba_cuda/numba/cuda/tests/cudapy/test_mandel.py +47 -0
- numba_cuda/numba/cuda/tests/cudapy/test_math.py +842 -0
- numba_cuda/numba/cuda/tests/cudapy/test_matmul.py +76 -0
- numba_cuda/numba/cuda/tests/cudapy/test_minmax.py +78 -0
- numba_cuda/numba/cuda/tests/cudapy/test_montecarlo.py +25 -0
- numba_cuda/numba/cuda/tests/cudapy/test_multigpu.py +145 -0
- numba_cuda/numba/cuda/tests/cudapy/test_multiprocessing.py +39 -0
- numba_cuda/numba/cuda/tests/cudapy/test_multithreads.py +82 -0
- numba_cuda/numba/cuda/tests/cudapy/test_nondet.py +53 -0
- numba_cuda/numba/cuda/tests/cudapy/test_operator.py +504 -0
- numba_cuda/numba/cuda/tests/cudapy/test_optimization.py +93 -0
- numba_cuda/numba/cuda/tests/cudapy/test_overload.py +402 -0
- numba_cuda/numba/cuda/tests/cudapy/test_powi.py +128 -0
- numba_cuda/numba/cuda/tests/cudapy/test_print.py +193 -0
- numba_cuda/numba/cuda/tests/cudapy/test_py2_div_issue.py +37 -0
- numba_cuda/numba/cuda/tests/cudapy/test_random.py +117 -0
- numba_cuda/numba/cuda/tests/cudapy/test_record_dtype.py +614 -0
- numba_cuda/numba/cuda/tests/cudapy/test_recursion.py +130 -0
- numba_cuda/numba/cuda/tests/cudapy/test_reduction.py +94 -0
- numba_cuda/numba/cuda/tests/cudapy/test_retrieve_autoconverted_arrays.py +83 -0
- numba_cuda/numba/cuda/tests/cudapy/test_serialize.py +86 -0
- numba_cuda/numba/cuda/tests/cudapy/test_slicing.py +40 -0
- numba_cuda/numba/cuda/tests/cudapy/test_sm.py +457 -0
- numba_cuda/numba/cuda/tests/cudapy/test_sm_creation.py +233 -0
- numba_cuda/numba/cuda/tests/cudapy/test_ssa.py +454 -0
- numba_cuda/numba/cuda/tests/cudapy/test_stream_api.py +56 -0
- numba_cuda/numba/cuda/tests/cudapy/test_sync.py +277 -0
- numba_cuda/numba/cuda/tests/cudapy/test_tracing.py +200 -0
- numba_cuda/numba/cuda/tests/cudapy/test_transpose.py +90 -0
- numba_cuda/numba/cuda/tests/cudapy/test_typeconv.py +333 -0
- numba_cuda/numba/cuda/tests/cudapy/test_typeinfer.py +538 -0
- numba_cuda/numba/cuda/tests/cudapy/test_ufuncs.py +585 -0
- numba_cuda/numba/cuda/tests/cudapy/test_userexc.py +42 -0
- numba_cuda/numba/cuda/tests/cudapy/test_vector_type.py +485 -0
- numba_cuda/numba/cuda/tests/cudapy/test_vectorize.py +312 -0
- numba_cuda/numba/cuda/tests/cudapy/test_vectorize_complex.py +23 -0
- numba_cuda/numba/cuda/tests/cudapy/test_vectorize_decor.py +183 -0
- numba_cuda/numba/cuda/tests/cudapy/test_vectorize_device.py +40 -0
- numba_cuda/numba/cuda/tests/cudapy/test_vectorize_scalar_arg.py +40 -0
- numba_cuda/numba/cuda/tests/cudapy/test_warning.py +206 -0
- numba_cuda/numba/cuda/tests/cudapy/test_warp_ops.py +446 -0
- numba_cuda/numba/cuda/tests/cudasim/__init__.py +9 -0
- numba_cuda/numba/cuda/tests/cudasim/support.py +9 -0
- numba_cuda/numba/cuda/tests/cudasim/test_cudasim_issues.py +111 -0
- numba_cuda/numba/cuda/tests/data/__init__.py +2 -0
- numba_cuda/numba/cuda/tests/data/cta_barrier.cu +28 -0
- numba_cuda/numba/cuda/tests/data/cuda_include.cu +10 -0
- numba_cuda/numba/cuda/tests/data/error.cu +12 -0
- numba_cuda/numba/cuda/tests/data/include/add.cuh +8 -0
- numba_cuda/numba/cuda/tests/data/jitlink.cu +28 -0
- numba_cuda/numba/cuda/tests/data/jitlink.ptx +49 -0
- numba_cuda/numba/cuda/tests/data/warn.cu +12 -0
- numba_cuda/numba/cuda/tests/doc_examples/__init__.py +9 -0
- numba_cuda/numba/cuda/tests/doc_examples/ffi/__init__.py +2 -0
- numba_cuda/numba/cuda/tests/doc_examples/ffi/functions.cu +54 -0
- numba_cuda/numba/cuda/tests/doc_examples/ffi/include/mul.cuh +8 -0
- numba_cuda/numba/cuda/tests/doc_examples/ffi/saxpy.cu +14 -0
- numba_cuda/numba/cuda/tests/doc_examples/test_cg.py +86 -0
- numba_cuda/numba/cuda/tests/doc_examples/test_cpointer.py +68 -0
- numba_cuda/numba/cuda/tests/doc_examples/test_cpu_gpu_compat.py +81 -0
- numba_cuda/numba/cuda/tests/doc_examples/test_ffi.py +141 -0
- numba_cuda/numba/cuda/tests/doc_examples/test_laplace.py +160 -0
- numba_cuda/numba/cuda/tests/doc_examples/test_matmul.py +180 -0
- numba_cuda/numba/cuda/tests/doc_examples/test_montecarlo.py +119 -0
- numba_cuda/numba/cuda/tests/doc_examples/test_random.py +66 -0
- numba_cuda/numba/cuda/tests/doc_examples/test_reduction.py +80 -0
- numba_cuda/numba/cuda/tests/doc_examples/test_sessionize.py +206 -0
- numba_cuda/numba/cuda/tests/doc_examples/test_ufunc.py +53 -0
- numba_cuda/numba/cuda/tests/doc_examples/test_vecadd.py +76 -0
- numba_cuda/numba/cuda/tests/nocuda/__init__.py +9 -0
- numba_cuda/numba/cuda/tests/nocuda/test_dummyarray.py +452 -0
- numba_cuda/numba/cuda/tests/nocuda/test_function_resolution.py +48 -0
- numba_cuda/numba/cuda/tests/nocuda/test_import.py +63 -0
- numba_cuda/numba/cuda/tests/nocuda/test_library_lookup.py +252 -0
- numba_cuda/numba/cuda/tests/nocuda/test_nvvm.py +59 -0
- numba_cuda/numba/cuda/tests/nrt/__init__.py +9 -0
- numba_cuda/numba/cuda/tests/nrt/test_nrt.py +387 -0
- numba_cuda/numba/cuda/tests/nrt/test_nrt_refct.py +124 -0
- numba_cuda/numba/cuda/tests/support.py +900 -0
- numba_cuda/numba/cuda/typeconv/__init__.py +4 -0
- numba_cuda/numba/cuda/typeconv/castgraph.py +137 -0
- numba_cuda/numba/cuda/typeconv/rules.py +63 -0
- numba_cuda/numba/cuda/typeconv/typeconv.py +121 -0
- numba_cuda/numba/cuda/types/__init__.py +233 -0
- numba_cuda/numba/cuda/types/__init__.pyi +167 -0
- numba_cuda/numba/cuda/types/abstract.py +9 -0
- numba_cuda/numba/cuda/types/common.py +9 -0
- numba_cuda/numba/cuda/types/containers.py +9 -0
- numba_cuda/numba/cuda/types/cuda_abstract.py +533 -0
- numba_cuda/numba/cuda/types/cuda_common.py +110 -0
- numba_cuda/numba/cuda/types/cuda_containers.py +971 -0
- numba_cuda/numba/cuda/types/cuda_function_type.py +230 -0
- numba_cuda/numba/cuda/types/cuda_functions.py +798 -0
- numba_cuda/numba/cuda/types/cuda_iterators.py +120 -0
- numba_cuda/numba/cuda/types/cuda_misc.py +569 -0
- numba_cuda/numba/cuda/types/cuda_npytypes.py +690 -0
- numba_cuda/numba/cuda/types/cuda_scalars.py +280 -0
- numba_cuda/numba/cuda/types/ext_types.py +101 -0
- numba_cuda/numba/cuda/types/function_type.py +11 -0
- numba_cuda/numba/cuda/types/functions.py +9 -0
- numba_cuda/numba/cuda/types/iterators.py +9 -0
- numba_cuda/numba/cuda/types/misc.py +9 -0
- numba_cuda/numba/cuda/types/npytypes.py +9 -0
- numba_cuda/numba/cuda/types/scalars.py +9 -0
- numba_cuda/numba/cuda/typing/__init__.py +19 -0
- numba_cuda/numba/cuda/typing/arraydecl.py +939 -0
- numba_cuda/numba/cuda/typing/asnumbatype.py +130 -0
- numba_cuda/numba/cuda/typing/bufproto.py +70 -0
- numba_cuda/numba/cuda/typing/builtins.py +1209 -0
- numba_cuda/numba/cuda/typing/cffi_utils.py +219 -0
- numba_cuda/numba/cuda/typing/cmathdecl.py +47 -0
- numba_cuda/numba/cuda/typing/collections.py +138 -0
- numba_cuda/numba/cuda/typing/context.py +782 -0
- numba_cuda/numba/cuda/typing/ctypes_utils.py +125 -0
- numba_cuda/numba/cuda/typing/dictdecl.py +63 -0
- numba_cuda/numba/cuda/typing/enumdecl.py +74 -0
- numba_cuda/numba/cuda/typing/listdecl.py +147 -0
- numba_cuda/numba/cuda/typing/mathdecl.py +158 -0
- numba_cuda/numba/cuda/typing/npdatetime.py +322 -0
- numba_cuda/numba/cuda/typing/npydecl.py +749 -0
- numba_cuda/numba/cuda/typing/setdecl.py +115 -0
- numba_cuda/numba/cuda/typing/templates.py +1446 -0
- numba_cuda/numba/cuda/typing/typeof.py +301 -0
- numba_cuda/numba/cuda/ufuncs.py +746 -0
- numba_cuda/numba/cuda/utils.py +724 -0
- numba_cuda/numba/cuda/vector_types.py +214 -0
- numba_cuda/numba/cuda/vectorizers.py +260 -0
- numba_cuda-0.22.0.dist-info/METADATA +109 -0
- numba_cuda-0.22.0.dist-info/RECORD +487 -0
- numba_cuda-0.22.0.dist-info/WHEEL +6 -0
- numba_cuda-0.22.0.dist-info/licenses/LICENSE +26 -0
- numba_cuda-0.22.0.dist-info/licenses/LICENSE.numba +24 -0
- numba_cuda-0.22.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: BSD-2-Clause
|
|
3
|
+
|
|
4
|
+
import enum
|
|
5
|
+
|
|
6
|
+
import numpy as np
|
|
7
|
+
|
|
8
|
+
from .abstract import Dummy, Hashable, Literal, Number, Type
|
|
9
|
+
from functools import total_ordering, cached_property
|
|
10
|
+
from numba.cuda.typeconv import Conversion
|
|
11
|
+
from numba.cuda.np import npdatetime_helpers
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class Boolean(Hashable):
|
|
15
|
+
def cast_python_value(self, value):
|
|
16
|
+
return bool(value)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def parse_integer_bitwidth(name):
|
|
20
|
+
for prefix in ("int", "uint"):
|
|
21
|
+
if name.startswith(prefix):
|
|
22
|
+
bitwidth = int(name[len(prefix) :])
|
|
23
|
+
return bitwidth
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def parse_integer_signed(name):
|
|
27
|
+
signed = name.startswith("int")
|
|
28
|
+
return signed
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@total_ordering
|
|
32
|
+
class Integer(Number):
|
|
33
|
+
def __init__(self, name, bitwidth=None, signed=None):
|
|
34
|
+
super(Integer, self).__init__(name)
|
|
35
|
+
if bitwidth is None:
|
|
36
|
+
bitwidth = parse_integer_bitwidth(name)
|
|
37
|
+
if signed is None:
|
|
38
|
+
signed = parse_integer_signed(name)
|
|
39
|
+
self.bitwidth = bitwidth
|
|
40
|
+
self.signed = signed
|
|
41
|
+
|
|
42
|
+
@classmethod
|
|
43
|
+
def from_bitwidth(cls, bitwidth, signed=True):
|
|
44
|
+
name = ("int%d" if signed else "uint%d") % bitwidth
|
|
45
|
+
return cls(name)
|
|
46
|
+
|
|
47
|
+
def cast_python_value(self, value):
|
|
48
|
+
return getattr(np, self.name)(value)
|
|
49
|
+
|
|
50
|
+
def __lt__(self, other):
|
|
51
|
+
if self.__class__ is not other.__class__:
|
|
52
|
+
return NotImplemented
|
|
53
|
+
if self.signed != other.signed:
|
|
54
|
+
return NotImplemented
|
|
55
|
+
return self.bitwidth < other.bitwidth
|
|
56
|
+
|
|
57
|
+
@property
|
|
58
|
+
def maxval(self):
|
|
59
|
+
"""
|
|
60
|
+
The maximum value representable by this type.
|
|
61
|
+
"""
|
|
62
|
+
if self.signed:
|
|
63
|
+
return (1 << (self.bitwidth - 1)) - 1
|
|
64
|
+
else:
|
|
65
|
+
return (1 << self.bitwidth) - 1
|
|
66
|
+
|
|
67
|
+
@property
|
|
68
|
+
def minval(self):
|
|
69
|
+
"""
|
|
70
|
+
The minimal value representable by this type.
|
|
71
|
+
"""
|
|
72
|
+
if self.signed:
|
|
73
|
+
return -(1 << (self.bitwidth - 1))
|
|
74
|
+
else:
|
|
75
|
+
return 0
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class IntegerLiteral(Literal, Integer):
|
|
79
|
+
def __init__(self, value):
|
|
80
|
+
self._literal_init(value)
|
|
81
|
+
name = "Literal[int]({})".format(value)
|
|
82
|
+
basetype = self.literal_type
|
|
83
|
+
Integer.__init__(
|
|
84
|
+
self,
|
|
85
|
+
name=name,
|
|
86
|
+
bitwidth=basetype.bitwidth,
|
|
87
|
+
signed=basetype.signed,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
def can_convert_to(self, typingctx, other):
|
|
91
|
+
conv = typingctx.can_convert(self.literal_type, other)
|
|
92
|
+
if conv is not None:
|
|
93
|
+
return max(conv, Conversion.promote)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
Literal.ctor_map[int] = IntegerLiteral
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
class BooleanLiteral(Literal, Boolean):
|
|
100
|
+
def __init__(self, value):
|
|
101
|
+
self._literal_init(value)
|
|
102
|
+
name = "Literal[bool]({})".format(value)
|
|
103
|
+
Boolean.__init__(self, name=name)
|
|
104
|
+
|
|
105
|
+
def can_convert_to(self, typingctx, other):
|
|
106
|
+
conv = typingctx.can_convert(self.literal_type, other)
|
|
107
|
+
if conv is not None:
|
|
108
|
+
return max(conv, Conversion.promote)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
Literal.ctor_map[bool] = BooleanLiteral
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
@total_ordering
|
|
115
|
+
class Float(Number):
|
|
116
|
+
def __init__(self, *args, **kws):
|
|
117
|
+
super(Float, self).__init__(*args, **kws)
|
|
118
|
+
# Determine bitwidth
|
|
119
|
+
assert self.name.startswith("float")
|
|
120
|
+
bitwidth = int(self.name[5:])
|
|
121
|
+
self.bitwidth = bitwidth
|
|
122
|
+
|
|
123
|
+
def cast_python_value(self, value):
|
|
124
|
+
return getattr(np, self.name)(value)
|
|
125
|
+
|
|
126
|
+
def __lt__(self, other):
|
|
127
|
+
if self.__class__ is not other.__class__:
|
|
128
|
+
return NotImplemented
|
|
129
|
+
return self.bitwidth < other.bitwidth
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
@total_ordering
|
|
133
|
+
class Complex(Number):
|
|
134
|
+
def __init__(self, name, underlying_float, **kwargs):
|
|
135
|
+
super(Complex, self).__init__(name, **kwargs)
|
|
136
|
+
self.underlying_float = underlying_float
|
|
137
|
+
# Determine bitwidth
|
|
138
|
+
assert self.name.startswith("complex")
|
|
139
|
+
bitwidth = int(self.name[7:])
|
|
140
|
+
self.bitwidth = bitwidth
|
|
141
|
+
|
|
142
|
+
def cast_python_value(self, value):
|
|
143
|
+
return getattr(np, self.name)(value)
|
|
144
|
+
|
|
145
|
+
def __lt__(self, other):
|
|
146
|
+
if self.__class__ is not other.__class__:
|
|
147
|
+
return NotImplemented
|
|
148
|
+
return self.bitwidth < other.bitwidth
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
class _NPDatetimeBase(Type):
|
|
152
|
+
"""
|
|
153
|
+
Common base class for np.datetime64 and np.timedelta64.
|
|
154
|
+
"""
|
|
155
|
+
|
|
156
|
+
def __init__(self, unit, *args, **kws):
|
|
157
|
+
name = "%s[%s]" % (self.type_name, unit)
|
|
158
|
+
self.unit = unit
|
|
159
|
+
self.unit_code = npdatetime_helpers.DATETIME_UNITS[self.unit]
|
|
160
|
+
super(_NPDatetimeBase, self).__init__(name, *args, **kws)
|
|
161
|
+
|
|
162
|
+
def __lt__(self, other):
|
|
163
|
+
if self.__class__ is not other.__class__:
|
|
164
|
+
return NotImplemented
|
|
165
|
+
# A coarser-grained unit is "smaller", i.e. less precise values
|
|
166
|
+
# can be represented (but the magnitude of representable values is
|
|
167
|
+
# also greater...).
|
|
168
|
+
return self.unit_code < other.unit_code
|
|
169
|
+
|
|
170
|
+
def cast_python_value(self, value):
|
|
171
|
+
cls = getattr(np, self.type_name)
|
|
172
|
+
if self.unit:
|
|
173
|
+
return cls(value, self.unit)
|
|
174
|
+
else:
|
|
175
|
+
return cls(value)
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
@total_ordering
|
|
179
|
+
class NPTimedelta(_NPDatetimeBase):
|
|
180
|
+
type_name = "timedelta64"
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
@total_ordering
|
|
184
|
+
class NPDatetime(_NPDatetimeBase):
|
|
185
|
+
type_name = "datetime64"
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
class EnumClass(Dummy):
|
|
189
|
+
"""
|
|
190
|
+
Type class for Enum classes.
|
|
191
|
+
"""
|
|
192
|
+
|
|
193
|
+
basename = "Enum class"
|
|
194
|
+
|
|
195
|
+
def __init__(self, cls, dtype):
|
|
196
|
+
assert isinstance(cls, type)
|
|
197
|
+
assert isinstance(dtype, Type)
|
|
198
|
+
self.instance_class = cls
|
|
199
|
+
self.dtype = dtype
|
|
200
|
+
name = "%s<%s>(%s)" % (
|
|
201
|
+
self.basename,
|
|
202
|
+
self.dtype,
|
|
203
|
+
self.instance_class.__name__,
|
|
204
|
+
)
|
|
205
|
+
super(EnumClass, self).__init__(name)
|
|
206
|
+
|
|
207
|
+
@property
|
|
208
|
+
def key(self):
|
|
209
|
+
return self.instance_class, self.dtype
|
|
210
|
+
|
|
211
|
+
@cached_property
|
|
212
|
+
def member_type(self):
|
|
213
|
+
"""
|
|
214
|
+
The type of this class' members.
|
|
215
|
+
"""
|
|
216
|
+
return EnumMember(self.instance_class, self.dtype)
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
class IntEnumClass(EnumClass):
|
|
220
|
+
"""
|
|
221
|
+
Type class for IntEnum classes.
|
|
222
|
+
"""
|
|
223
|
+
|
|
224
|
+
basename = "IntEnum class"
|
|
225
|
+
|
|
226
|
+
@cached_property
|
|
227
|
+
def member_type(self):
|
|
228
|
+
"""
|
|
229
|
+
The type of this class' members.
|
|
230
|
+
"""
|
|
231
|
+
return IntEnumMember(self.instance_class, self.dtype)
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
class EnumMember(Type):
|
|
235
|
+
"""
|
|
236
|
+
Type class for Enum members.
|
|
237
|
+
"""
|
|
238
|
+
|
|
239
|
+
basename = "Enum"
|
|
240
|
+
class_type_class = EnumClass
|
|
241
|
+
|
|
242
|
+
def __init__(self, cls, dtype):
|
|
243
|
+
assert isinstance(cls, type)
|
|
244
|
+
assert isinstance(dtype, Type)
|
|
245
|
+
self.instance_class = cls
|
|
246
|
+
self.dtype = dtype
|
|
247
|
+
name = "%s<%s>(%s)" % (
|
|
248
|
+
self.basename,
|
|
249
|
+
self.dtype,
|
|
250
|
+
self.instance_class.__name__,
|
|
251
|
+
)
|
|
252
|
+
super(EnumMember, self).__init__(name)
|
|
253
|
+
|
|
254
|
+
@property
|
|
255
|
+
def key(self):
|
|
256
|
+
return self.instance_class, self.dtype
|
|
257
|
+
|
|
258
|
+
@property
|
|
259
|
+
def class_type(self):
|
|
260
|
+
"""
|
|
261
|
+
The type of this member's class.
|
|
262
|
+
"""
|
|
263
|
+
return self.class_type_class(self.instance_class, self.dtype)
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
class IntEnumMember(EnumMember):
|
|
267
|
+
"""
|
|
268
|
+
Type class for IntEnum members.
|
|
269
|
+
"""
|
|
270
|
+
|
|
271
|
+
basename = "IntEnum"
|
|
272
|
+
class_type_class = IntEnumClass
|
|
273
|
+
|
|
274
|
+
def can_convert_to(self, typingctx, other):
|
|
275
|
+
"""
|
|
276
|
+
Convert IntEnum members to plain integers.
|
|
277
|
+
"""
|
|
278
|
+
if issubclass(self.instance_class, enum.IntEnum):
|
|
279
|
+
conv = typingctx.can_convert(self.dtype, other)
|
|
280
|
+
return max(conv, Conversion.safe)
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: BSD-2-Clause
|
|
3
|
+
|
|
4
|
+
from . import Dispatcher, Number, Integer, Float
|
|
5
|
+
from .abstract import Type
|
|
6
|
+
|
|
7
|
+
from numba.cuda.typeconv import Conversion
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Dim3(Type):
|
|
11
|
+
"""
|
|
12
|
+
A 3-tuple (x, y, z) representing the position of a block or thread.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
def __init__(self):
|
|
16
|
+
super().__init__(name="Dim3")
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class GridGroup(Type):
|
|
20
|
+
"""
|
|
21
|
+
The grid of all threads in a cooperative kernel launch.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
def __init__(self):
|
|
25
|
+
super().__init__(name="GridGroup")
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
dim3 = Dim3()
|
|
29
|
+
grid_group = GridGroup()
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class CUDADispatcher(Dispatcher):
|
|
33
|
+
"""The type of CUDA dispatchers"""
|
|
34
|
+
|
|
35
|
+
# This type exists (instead of using types.Dispatcher as the type of CUDA
|
|
36
|
+
# dispatchers) so that we can have an alternative lowering for them to the
|
|
37
|
+
# lowering of CPU dispatchers - the CPU target lowers all dispatchers as a
|
|
38
|
+
# constant address, but we need to lower to a dummy value because it's not
|
|
39
|
+
# generally valid to use the address of CUDA kernels and functions.
|
|
40
|
+
#
|
|
41
|
+
# Notes: it may be a bug in the CPU target that it lowers all dispatchers to
|
|
42
|
+
# a constant address - it should perhaps only lower dispatchers acting as
|
|
43
|
+
# first-class functions to a constant address. Even if that bug is fixed, it
|
|
44
|
+
# is still probably a good idea to have a separate type for CUDA
|
|
45
|
+
# dispatchers, and this type might get other differentiation from the CPU
|
|
46
|
+
# dispatcher type in future.
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class Bfloat16(Number):
|
|
50
|
+
"""
|
|
51
|
+
A bfloat16 type. Has 8 exponent bits and 7 significand bits.
|
|
52
|
+
|
|
53
|
+
Conversion rules:
|
|
54
|
+
Floats:
|
|
55
|
+
from:
|
|
56
|
+
fp32, fp64: UNSAFE
|
|
57
|
+
fp16: UNSAFE (loses precision)
|
|
58
|
+
to:
|
|
59
|
+
fp32, fp64: PROMOTE (same exponent, more mantissa)
|
|
60
|
+
fp16: UNSAFE (loses range)
|
|
61
|
+
|
|
62
|
+
Integers:
|
|
63
|
+
from:
|
|
64
|
+
int8: SAFE
|
|
65
|
+
other int: All UNSAFE (bf16 cannot represent all integers in range)
|
|
66
|
+
to: UNSAFE (loses precision, round to zeros)
|
|
67
|
+
|
|
68
|
+
All other conversions are not allowed.
|
|
69
|
+
"""
|
|
70
|
+
|
|
71
|
+
def __init__(self):
|
|
72
|
+
super().__init__(name="__nv_bfloat16")
|
|
73
|
+
|
|
74
|
+
self.alignof_ = 2
|
|
75
|
+
self.bitwidth = 16
|
|
76
|
+
|
|
77
|
+
def can_convert_from(self, typingctx, other):
|
|
78
|
+
if isinstance(other, Float):
|
|
79
|
+
return Conversion.unsafe
|
|
80
|
+
|
|
81
|
+
elif isinstance(other, Integer):
|
|
82
|
+
if other.bitwidth == 8:
|
|
83
|
+
return Conversion.safe
|
|
84
|
+
else:
|
|
85
|
+
return Conversion.unsafe
|
|
86
|
+
|
|
87
|
+
def can_convert_to(self, typingctx, other):
|
|
88
|
+
if isinstance(other, Float):
|
|
89
|
+
if other.bitwidth >= 32:
|
|
90
|
+
return Conversion.safe
|
|
91
|
+
else:
|
|
92
|
+
return Conversion.unsafe
|
|
93
|
+
elif isinstance(other, Integer):
|
|
94
|
+
return Conversion.unsafe
|
|
95
|
+
|
|
96
|
+
def unify(self, typingctx, other):
|
|
97
|
+
if isinstance(other, (Float, Integer)):
|
|
98
|
+
return typingctx.unify_pairs(self, other)
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
bfloat16 = Bfloat16()
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: BSD-2-Clause
|
|
3
|
+
|
|
4
|
+
import sys
|
|
5
|
+
from numba.cuda.utils import redirect_numba_module
|
|
6
|
+
|
|
7
|
+
sys.modules[__name__] = redirect_numba_module(
|
|
8
|
+
locals(),
|
|
9
|
+
"numba.core.types.function_type",
|
|
10
|
+
"numba.cuda.types.cuda_function_type",
|
|
11
|
+
)
|
|
@@ -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
|
+
import sys
|
|
5
|
+
from numba.cuda.utils import redirect_numba_module
|
|
6
|
+
|
|
7
|
+
sys.modules[__name__] = redirect_numba_module(
|
|
8
|
+
locals(), "numba.core.types.functions", "numba.cuda.types.cuda_functions"
|
|
9
|
+
)
|
|
@@ -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
|
+
import sys
|
|
5
|
+
from numba.cuda.utils import redirect_numba_module
|
|
6
|
+
|
|
7
|
+
sys.modules[__name__] = redirect_numba_module(
|
|
8
|
+
locals(), "numba.core.types.iterators", "numba.cuda.types.cuda_iterators"
|
|
9
|
+
)
|
|
@@ -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
|
+
import sys
|
|
5
|
+
from numba.cuda.utils import redirect_numba_module
|
|
6
|
+
|
|
7
|
+
sys.modules[__name__] = redirect_numba_module(
|
|
8
|
+
locals(), "numba.core.types.misc", "numba.cuda.types.cuda_misc"
|
|
9
|
+
)
|
|
@@ -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
|
+
import sys
|
|
5
|
+
from numba.cuda.utils import redirect_numba_module
|
|
6
|
+
|
|
7
|
+
sys.modules[__name__] = redirect_numba_module(
|
|
8
|
+
locals(), "numba.core.types.npytypes", "numba.cuda.types.cuda_npytypes"
|
|
9
|
+
)
|
|
@@ -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
|
+
import sys
|
|
5
|
+
from numba.cuda.utils import redirect_numba_module
|
|
6
|
+
|
|
7
|
+
sys.modules[__name__] = redirect_numba_module(
|
|
8
|
+
locals(), "numba.core.types.scalars", "numba.cuda.types.cuda_scalars"
|
|
9
|
+
)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: BSD-2-Clause
|
|
3
|
+
|
|
4
|
+
from .templates import (
|
|
5
|
+
signature,
|
|
6
|
+
make_concrete_template,
|
|
7
|
+
Signature,
|
|
8
|
+
fold_arguments,
|
|
9
|
+
)
|
|
10
|
+
from .context import BaseContext, Context
|
|
11
|
+
|
|
12
|
+
__all__ = [
|
|
13
|
+
"signature",
|
|
14
|
+
"make_concrete_template",
|
|
15
|
+
"Signature",
|
|
16
|
+
"fold_arguments",
|
|
17
|
+
"BaseContext",
|
|
18
|
+
"Context",
|
|
19
|
+
]
|