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