numba-cuda 0.19.0__py3-none-any.whl → 0.20.0__py3-none-any.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 +3 -0
- _numba_cuda_redirector.py +3 -0
- numba_cuda/VERSION +1 -1
- numba_cuda/__init__.py +2 -1
- numba_cuda/_version.py +2 -13
- numba_cuda/numba/cuda/__init__.py +4 -1
- numba_cuda/numba/cuda/_internal/cuda_bf16.py +12708 -1469
- numba_cuda/numba/cuda/_internal/cuda_fp16.py +2656 -8769
- numba_cuda/numba/cuda/api.py +9 -1
- numba_cuda/numba/cuda/api_util.py +3 -0
- numba_cuda/numba/cuda/args.py +3 -0
- numba_cuda/numba/cuda/bf16.py +288 -2
- numba_cuda/numba/cuda/cg.py +3 -0
- numba_cuda/numba/cuda/cgutils.py +5 -2
- 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 +4 -1
- numba_cuda/numba/cuda/compiler.py +376 -30
- numba_cuda/numba/cuda/core/analysis.py +319 -0
- numba_cuda/numba/cuda/core/annotations/__init__.py +0 -0
- numba_cuda/numba/cuda/core/annotations/type_annotations.py +304 -0
- numba_cuda/numba/cuda/core/base.py +1289 -0
- numba_cuda/numba/cuda/core/bytecode.py +727 -0
- numba_cuda/numba/cuda/core/caching.py +5 -2
- numba_cuda/numba/cuda/core/callconv.py +3 -0
- numba_cuda/numba/cuda/core/codegen.py +3 -0
- numba_cuda/numba/cuda/core/compiler.py +9 -14
- numba_cuda/numba/cuda/core/compiler_machinery.py +497 -0
- numba_cuda/numba/cuda/core/config.py +747 -0
- numba_cuda/numba/cuda/core/consts.py +124 -0
- numba_cuda/numba/cuda/core/cpu.py +370 -0
- numba_cuda/numba/cuda/core/environment.py +68 -0
- numba_cuda/numba/cuda/core/event.py +511 -0
- numba_cuda/numba/cuda/core/funcdesc.py +330 -0
- numba_cuda/numba/cuda/core/inline_closurecall.py +1889 -0
- numba_cuda/numba/cuda/core/interpreter.py +52 -27
- numba_cuda/numba/cuda/core/ir_utils.py +17 -29
- 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 +1868 -0
- numba_cuda/numba/cuda/core/rewrites/__init__.py +26 -0
- numba_cuda/numba/cuda/core/rewrites/ir_print.py +90 -0
- numba_cuda/numba/cuda/core/rewrites/registry.py +104 -0
- numba_cuda/numba/cuda/core/rewrites/static_binop.py +40 -0
- numba_cuda/numba/cuda/core/rewrites/static_getitem.py +187 -0
- numba_cuda/numba/cuda/core/rewrites/static_raise.py +98 -0
- numba_cuda/numba/cuda/core/sigutils.py +3 -0
- numba_cuda/numba/cuda/core/ssa.py +496 -0
- numba_cuda/numba/cuda/core/targetconfig.py +329 -0
- numba_cuda/numba/cuda/core/tracing.py +231 -0
- numba_cuda/numba/cuda/core/transforms.py +952 -0
- numba_cuda/numba/cuda/core/typed_passes.py +741 -7
- numba_cuda/numba/cuda/core/typeinfer.py +1948 -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 +66 -0
- numba_cuda/numba/cuda/core/unsafe/refcount.py +98 -0
- numba_cuda/numba/cuda/core/untyped_passes.py +1983 -0
- numba_cuda/numba/cuda/cpython/cmathimpl.py +560 -0
- numba_cuda/numba/cuda/cpython/mathimpl.py +499 -0
- numba_cuda/numba/cuda/cpython/numbers.py +1474 -0
- numba_cuda/numba/cuda/cuda_paths.py +425 -246
- numba_cuda/numba/cuda/cudadecl.py +4 -1
- numba_cuda/numba/cuda/cudadrv/__init__.py +4 -1
- numba_cuda/numba/cuda/cudadrv/devicearray.py +5 -1
- numba_cuda/numba/cuda/cudadrv/devices.py +3 -0
- numba_cuda/numba/cuda/cudadrv/driver.py +14 -140
- numba_cuda/numba/cuda/cudadrv/drvapi.py +3 -0
- numba_cuda/numba/cuda/cudadrv/dummyarray.py +114 -24
- numba_cuda/numba/cuda/cudadrv/enums.py +3 -0
- numba_cuda/numba/cuda/cudadrv/error.py +4 -0
- numba_cuda/numba/cuda/cudadrv/libs.py +8 -5
- numba_cuda/numba/cuda/cudadrv/linkable_code.py +3 -0
- numba_cuda/numba/cuda/cudadrv/mappings.py +4 -1
- numba_cuda/numba/cuda/cudadrv/ndarray.py +3 -0
- numba_cuda/numba/cuda/cudadrv/nvrtc.py +22 -8
- numba_cuda/numba/cuda/cudadrv/nvvm.py +4 -4
- numba_cuda/numba/cuda/cudadrv/rtapi.py +3 -0
- numba_cuda/numba/cuda/cudadrv/runtime.py +4 -1
- numba_cuda/numba/cuda/cudaimpl.py +8 -1
- numba_cuda/numba/cuda/cudamath.py +3 -0
- numba_cuda/numba/cuda/debuginfo.py +88 -2
- numba_cuda/numba/cuda/decorators.py +6 -3
- numba_cuda/numba/cuda/descriptor.py +6 -4
- numba_cuda/numba/cuda/device_init.py +3 -0
- numba_cuda/numba/cuda/deviceufunc.py +69 -2
- numba_cuda/numba/cuda/dispatcher.py +21 -39
- numba_cuda/numba/cuda/errors.py +10 -0
- numba_cuda/numba/cuda/extending.py +3 -0
- numba_cuda/numba/cuda/flags.py +143 -1
- numba_cuda/numba/cuda/fp16.py +3 -2
- 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 +4 -0
- numba_cuda/numba/cuda/intrinsic_wrapper.py +3 -0
- numba_cuda/numba/cuda/intrinsics.py +3 -0
- numba_cuda/numba/cuda/itanium_mangler.py +3 -0
- numba_cuda/numba/cuda/kernels/__init__.py +2 -0
- numba_cuda/numba/cuda/kernels/reduction.py +3 -0
- numba_cuda/numba/cuda/kernels/transpose.py +3 -0
- numba_cuda/numba/cuda/libdevice.py +4 -0
- numba_cuda/numba/cuda/libdevicedecl.py +3 -0
- numba_cuda/numba/cuda/libdevicefuncs.py +3 -0
- numba_cuda/numba/cuda/libdeviceimpl.py +3 -0
- numba_cuda/numba/cuda/locks.py +3 -0
- numba_cuda/numba/cuda/lowering.py +59 -159
- numba_cuda/numba/cuda/mathimpl.py +5 -1
- numba_cuda/numba/cuda/memory_management/__init__.py +3 -0
- numba_cuda/numba/cuda/memory_management/memsys.cu +5 -0
- numba_cuda/numba/cuda/memory_management/memsys.cuh +5 -0
- numba_cuda/numba/cuda/memory_management/nrt.cu +5 -0
- numba_cuda/numba/cuda/memory_management/nrt.cuh +5 -0
- numba_cuda/numba/cuda/memory_management/nrt.py +48 -18
- numba_cuda/numba/cuda/misc/findlib.py +75 -0
- numba_cuda/numba/cuda/models.py +12 -1
- numba_cuda/numba/cuda/np/npdatetime_helpers.py +217 -0
- numba_cuda/numba/cuda/np/npyfuncs.py +1807 -0
- numba_cuda/numba/cuda/np/numpy_support.py +553 -0
- numba_cuda/numba/cuda/np/ufunc/ufuncbuilder.py +59 -0
- numba_cuda/numba/cuda/nvvmutils.py +4 -1
- numba_cuda/numba/cuda/printimpl.py +15 -1
- numba_cuda/numba/cuda/random.py +4 -1
- numba_cuda/numba/cuda/reshape_funcs.cu +5 -0
- numba_cuda/numba/cuda/serialize.py +4 -1
- numba_cuda/numba/cuda/simulator/__init__.py +4 -1
- numba_cuda/numba/cuda/simulator/_internal/__init__.py +3 -0
- numba_cuda/numba/cuda/simulator/_internal/cuda_bf16.py +2 -0
- numba_cuda/numba/cuda/simulator/api.py +4 -1
- numba_cuda/numba/cuda/simulator/bf16.py +3 -0
- numba_cuda/numba/cuda/simulator/compiler.py +7 -0
- numba_cuda/numba/cuda/simulator/cudadrv/__init__.py +3 -0
- numba_cuda/numba/cuda/simulator/cudadrv/devicearray.py +4 -1
- numba_cuda/numba/cuda/simulator/cudadrv/devices.py +3 -0
- numba_cuda/numba/cuda/simulator/cudadrv/driver.py +3 -0
- numba_cuda/numba/cuda/simulator/cudadrv/drvapi.py +3 -0
- numba_cuda/numba/cuda/simulator/cudadrv/dummyarray.py +3 -0
- numba_cuda/numba/cuda/simulator/cudadrv/error.py +4 -0
- numba_cuda/numba/cuda/simulator/cudadrv/libs.py +4 -0
- numba_cuda/numba/cuda/simulator/cudadrv/linkable_code.py +4 -0
- numba_cuda/numba/cuda/simulator/cudadrv/nvrtc.py +3 -0
- numba_cuda/numba/cuda/simulator/cudadrv/nvvm.py +3 -0
- numba_cuda/numba/cuda/simulator/cudadrv/runtime.py +3 -0
- numba_cuda/numba/cuda/simulator/dispatcher.py +4 -0
- numba_cuda/numba/cuda/simulator/kernel.py +3 -0
- numba_cuda/numba/cuda/simulator/kernelapi.py +4 -1
- numba_cuda/numba/cuda/simulator/memory_management/__init__.py +3 -0
- numba_cuda/numba/cuda/simulator/memory_management/nrt.py +17 -2
- numba_cuda/numba/cuda/simulator/reduction.py +3 -0
- numba_cuda/numba/cuda/simulator/vector_types.py +3 -0
- numba_cuda/numba/cuda/simulator_init.py +3 -0
- numba_cuda/numba/cuda/stubs.py +3 -0
- numba_cuda/numba/cuda/target.py +38 -17
- numba_cuda/numba/cuda/testing.py +7 -19
- numba_cuda/numba/cuda/tests/__init__.py +4 -1
- numba_cuda/numba/cuda/tests/cloudpickle_main_class.py +9 -0
- numba_cuda/numba/cuda/tests/complex_usecases.py +3 -0
- numba_cuda/numba/cuda/tests/core/serialize_usecases.py +3 -0
- numba_cuda/numba/cuda/tests/core/test_itanium_mangler.py +3 -0
- numba_cuda/numba/cuda/tests/core/test_serialize.py +7 -4
- numba_cuda/numba/cuda/tests/cudadrv/__init__.py +3 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_array_attr.py +3 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_context_stack.py +3 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_cuda_array_slicing.py +3 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_cuda_auto_context.py +3 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_cuda_devicerecord.py +4 -1
- numba_cuda/numba/cuda/tests/cudadrv/test_cuda_driver.py +3 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_cuda_libraries.py +4 -1
- numba_cuda/numba/cuda/tests/cudadrv/test_cuda_memory.py +3 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_cuda_ndarray.py +3 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_deallocations.py +4 -1
- numba_cuda/numba/cuda/tests/cudadrv/test_detect.py +9 -3
- numba_cuda/numba/cuda/tests/cudadrv/test_emm_plugins.py +4 -1
- numba_cuda/numba/cuda/tests/cudadrv/test_events.py +3 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_host_alloc.py +3 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_init.py +3 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_inline_ptx.py +3 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_is_fp16.py +3 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_linker.py +21 -2
- numba_cuda/numba/cuda/tests/cudadrv/test_managed_alloc.py +3 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_module_callbacks.py +5 -1
- numba_cuda/numba/cuda/tests/cudadrv/test_nvjitlink.py +4 -1
- numba_cuda/numba/cuda/tests/cudadrv/test_nvrtc.py +3 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_nvvm_driver.py +3 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_pinned.py +3 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_profiler.py +3 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_ptds.py +4 -1
- numba_cuda/numba/cuda/tests/cudadrv/test_reset_device.py +3 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_runtime.py +3 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_select_device.py +3 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_streams.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/__init__.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/cache_usecases.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/cache_with_cpu_usecases.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/cg_cache_usecases.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/extensions_usecases.py +4 -1
- numba_cuda/numba/cuda/tests/cudapy/recursion_usecases.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_alignment.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_array.py +5 -1
- numba_cuda/numba/cuda/tests/cudapy/test_array_alignment.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_array_args.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_array_methods.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_atomics.py +4 -1
- numba_cuda/numba/cuda/tests/cudapy/test_bfloat16.py +542 -2
- numba_cuda/numba/cuda/tests/cudapy/test_bfloat16_bindings.py +84 -1
- numba_cuda/numba/cuda/tests/cudapy/test_blackscholes.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_boolean.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_caching.py +4 -3
- numba_cuda/numba/cuda/tests/cudapy/test_casting.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_cffi.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_compiler.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_complex.py +4 -1
- numba_cuda/numba/cuda/tests/cudapy/test_complex_kernel.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_const_string.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_constmem.py +4 -1
- numba_cuda/numba/cuda/tests/cudapy/test_cooperative_groups.py +5 -3
- numba_cuda/numba/cuda/tests/cudapy/test_copy_propagate.py +130 -0
- numba_cuda/numba/cuda/tests/cudapy/test_cuda_array_interface.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_cuda_jit_no_types.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_datetime.py +4 -1
- numba_cuda/numba/cuda/tests/cudapy/test_debug.py +4 -1
- numba_cuda/numba/cuda/tests/cudapy/test_debuginfo.py +314 -3
- numba_cuda/numba/cuda/tests/cudapy/test_debuginfo_types.py +4 -1
- numba_cuda/numba/cuda/tests/cudapy/test_device_func.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_dispatcher.py +4 -1
- numba_cuda/numba/cuda/tests/cudapy/test_enums.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_errors.py +4 -1
- numba_cuda/numba/cuda/tests/cudapy/test_exception.py +4 -1
- numba_cuda/numba/cuda/tests/cudapy/test_extending.py +5 -1
- numba_cuda/numba/cuda/tests/cudapy/test_fastmath.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_forall.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_freevar.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_frexp_ldexp.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_globals.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_gufunc.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_gufunc_scalar.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_gufunc_scheduling.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_idiv.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_inline.py +21 -8
- numba_cuda/numba/cuda/tests/cudapy/test_inspect.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_intrinsics.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_ipc.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_ir_utils.py +13 -37
- numba_cuda/numba/cuda/tests/cudapy/test_iterators.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_lang.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_laplace.py +4 -1
- numba_cuda/numba/cuda/tests/cudapy/test_libdevice.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_lineinfo.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_localmem.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_mandel.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_math.py +4 -1
- numba_cuda/numba/cuda/tests/cudapy/test_matmul.py +4 -1
- numba_cuda/numba/cuda/tests/cudapy/test_minmax.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_montecarlo.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_multigpu.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_multiprocessing.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_multithreads.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_nondet.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_operator.py +4 -1
- numba_cuda/numba/cuda/tests/cudapy/test_optimization.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_overload.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_powi.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_print.py +23 -0
- numba_cuda/numba/cuda/tests/cudapy/test_py2_div_issue.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_random.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_record_dtype.py +4 -1
- numba_cuda/numba/cuda/tests/cudapy/test_recursion.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_reduction.py +4 -1
- numba_cuda/numba/cuda/tests/cudapy/test_retrieve_autoconverted_arrays.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_serialize.py +4 -1
- numba_cuda/numba/cuda/tests/cudapy/test_slicing.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_sm.py +4 -1
- numba_cuda/numba/cuda/tests/cudapy/test_sm_creation.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_ssa.py +453 -0
- numba_cuda/numba/cuda/tests/cudapy/test_stream_api.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_sync.py +4 -1
- numba_cuda/numba/cuda/tests/cudapy/test_transpose.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_typeinfer.py +538 -0
- numba_cuda/numba/cuda/tests/cudapy/test_ufuncs.py +266 -2
- numba_cuda/numba/cuda/tests/cudapy/test_userexc.py +4 -1
- numba_cuda/numba/cuda/tests/cudapy/test_vector_type.py +4 -1
- numba_cuda/numba/cuda/tests/cudapy/test_vectorize.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_vectorize_complex.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_vectorize_decor.py +115 -6
- numba_cuda/numba/cuda/tests/cudapy/test_vectorize_device.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_vectorize_scalar_arg.py +3 -0
- numba_cuda/numba/cuda/tests/cudapy/test_warning.py +4 -1
- numba_cuda/numba/cuda/tests/cudapy/test_warp_ops.py +4 -1
- numba_cuda/numba/cuda/tests/cudasim/__init__.py +3 -0
- numba_cuda/numba/cuda/tests/cudasim/support.py +3 -0
- numba_cuda/numba/cuda/tests/cudasim/test_cudasim_issues.py +3 -0
- numba_cuda/numba/cuda/tests/data/__init__.py +2 -0
- numba_cuda/numba/cuda/tests/data/cta_barrier.cu +5 -0
- numba_cuda/numba/cuda/tests/data/cuda_include.cu +5 -0
- numba_cuda/numba/cuda/tests/data/error.cu +5 -0
- numba_cuda/numba/cuda/tests/data/include/add.cuh +5 -0
- numba_cuda/numba/cuda/tests/data/jitlink.cu +5 -0
- numba_cuda/numba/cuda/tests/data/warn.cu +5 -0
- numba_cuda/numba/cuda/tests/doc_examples/__init__.py +3 -0
- numba_cuda/numba/cuda/tests/doc_examples/ffi/__init__.py +2 -0
- numba_cuda/numba/cuda/tests/doc_examples/ffi/functions.cu +5 -0
- numba_cuda/numba/cuda/tests/doc_examples/ffi/include/mul.cuh +5 -0
- numba_cuda/numba/cuda/tests/doc_examples/ffi/saxpy.cu +5 -0
- numba_cuda/numba/cuda/tests/doc_examples/test_cg.py +3 -2
- numba_cuda/numba/cuda/tests/doc_examples/test_cpointer.py +3 -0
- numba_cuda/numba/cuda/tests/doc_examples/test_cpu_gpu_compat.py +3 -0
- numba_cuda/numba/cuda/tests/doc_examples/test_ffi.py +6 -2
- numba_cuda/numba/cuda/tests/doc_examples/test_laplace.py +3 -2
- numba_cuda/numba/cuda/tests/doc_examples/test_matmul.py +3 -0
- numba_cuda/numba/cuda/tests/doc_examples/test_montecarlo.py +3 -0
- numba_cuda/numba/cuda/tests/doc_examples/test_random.py +3 -0
- numba_cuda/numba/cuda/tests/doc_examples/test_reduction.py +3 -0
- numba_cuda/numba/cuda/tests/doc_examples/test_sessionize.py +3 -2
- numba_cuda/numba/cuda/tests/doc_examples/test_ufunc.py +3 -0
- numba_cuda/numba/cuda/tests/doc_examples/test_vecadd.py +3 -0
- numba_cuda/numba/cuda/tests/enum_usecases.py +3 -0
- numba_cuda/numba/cuda/tests/nocuda/__init__.py +3 -0
- numba_cuda/numba/cuda/tests/nocuda/test_dummyarray.py +3 -0
- numba_cuda/numba/cuda/tests/nocuda/test_function_resolution.py +3 -0
- numba_cuda/numba/cuda/tests/nocuda/test_import.py +6 -1
- numba_cuda/numba/cuda/tests/nocuda/test_library_lookup.py +27 -12
- numba_cuda/numba/cuda/tests/nocuda/test_nvvm.py +3 -0
- numba_cuda/numba/cuda/tests/nrt/__init__.py +3 -0
- numba_cuda/numba/cuda/tests/nrt/test_nrt.py +5 -1
- numba_cuda/numba/cuda/tests/nrt/test_nrt_refct.py +3 -0
- numba_cuda/numba/cuda/tests/support.py +58 -15
- numba_cuda/numba/cuda/tests/test_binary_generation/Makefile +3 -0
- numba_cuda/numba/cuda/tests/test_binary_generation/generate_raw_ltoir.py +2 -1
- numba_cuda/numba/cuda/tests/test_binary_generation/nrt_extern.cu +5 -0
- numba_cuda/numba/cuda/tests/test_binary_generation/test_device_functions.cu +5 -0
- numba_cuda/numba/cuda/tests/test_binary_generation/undefined_extern.cu +5 -0
- numba_cuda/numba/cuda/tests/test_tracing.py +200 -0
- numba_cuda/numba/cuda/types.py +59 -0
- numba_cuda/numba/cuda/typing/__init__.py +12 -1
- numba_cuda/numba/cuda/typing/cffi_utils.py +55 -0
- numba_cuda/numba/cuda/typing/context.py +751 -0
- numba_cuda/numba/cuda/typing/enumdecl.py +74 -0
- numba_cuda/numba/cuda/typing/npydecl.py +658 -0
- numba_cuda/numba/cuda/typing/templates.py +10 -14
- numba_cuda/numba/cuda/ufuncs.py +6 -3
- numba_cuda/numba/cuda/utils.py +9 -112
- numba_cuda/numba/cuda/vector_types.py +3 -0
- numba_cuda/numba/cuda/vectorizers.py +3 -0
- {numba_cuda-0.19.0.dist-info → numba_cuda-0.20.0.dist-info}/METADATA +6 -2
- numba_cuda-0.20.0.dist-info/RECORD +357 -0
- {numba_cuda-0.19.0.dist-info → numba_cuda-0.20.0.dist-info}/licenses/LICENSE +1 -0
- numba_cuda-0.20.0.dist-info/licenses/LICENSE.numba +24 -0
- numba_cuda/numba/cuda/tests/cudadrv/test_mvc.py +0 -57
- numba_cuda-0.19.0.dist-info/RECORD +0 -301
- {numba_cuda-0.19.0.dist-info → numba_cuda-0.20.0.dist-info}/WHEEL +0 -0
- {numba_cuda-0.19.0.dist-info → numba_cuda-0.20.0.dist-info}/top_level.txt +0 -0
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: BSD-2-Clause
|
|
3
|
+
|
|
1
4
|
# Contents in this file are referenced from the sphinx-generated docs.
|
|
2
5
|
# "magictoken" is used for markers as beginning and ending of example text.
|
|
3
6
|
|
|
@@ -87,7 +90,8 @@ class TestFFI(CUDATestCase):
|
|
|
87
90
|
|
|
88
91
|
def test_ex_extra_includes(self):
|
|
89
92
|
import numpy as np
|
|
90
|
-
from numba import cuda
|
|
93
|
+
from numba import cuda
|
|
94
|
+
from numba.cuda import config
|
|
91
95
|
import os
|
|
92
96
|
|
|
93
97
|
basedir = os.path.dirname(os.path.abspath(__file__))
|
|
@@ -100,7 +104,7 @@ class TestFFI(CUDATestCase):
|
|
|
100
104
|
includedir = ":".join([mul_dir, add_dir])
|
|
101
105
|
with override_config("CUDA_NVRTC_EXTRA_SEARCH_PATHS", includedir):
|
|
102
106
|
# magictoken.ex_extra_search_paths.begin
|
|
103
|
-
from numba import config
|
|
107
|
+
from numba.cuda import config
|
|
104
108
|
|
|
105
109
|
includedir = ":".join([mul_dir, add_dir])
|
|
106
110
|
config.CUDA_NVRTC_EXTRA_SEARCH_PATHS = includedir
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: BSD-2-Clause
|
|
3
|
+
|
|
1
4
|
import unittest
|
|
2
5
|
|
|
3
6
|
from numba.cuda.testing import (
|
|
@@ -5,14 +8,12 @@ from numba.cuda.testing import (
|
|
|
5
8
|
skip_if_cudadevrt_missing,
|
|
6
9
|
skip_on_cudasim,
|
|
7
10
|
skip_unless_cc_60,
|
|
8
|
-
skip_if_mvc_enabled,
|
|
9
11
|
)
|
|
10
12
|
from numba.cuda.tests.support import captured_stdout
|
|
11
13
|
|
|
12
14
|
|
|
13
15
|
@skip_if_cudadevrt_missing
|
|
14
16
|
@skip_unless_cc_60
|
|
15
|
-
@skip_if_mvc_enabled("CG not supported with MVC")
|
|
16
17
|
@skip_on_cudasim("cudasim doesn't support cuda import at non-top-level")
|
|
17
18
|
class TestLaplace(CUDATestCase):
|
|
18
19
|
"""
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: BSD-2-Clause
|
|
3
|
+
|
|
1
4
|
# Contents in this file are referenced from the sphinx-generated docs.
|
|
2
5
|
# "magictoken" is used for markers as beginning and ending of example text.
|
|
3
6
|
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: BSD-2-Clause
|
|
3
|
+
|
|
1
4
|
import unittest
|
|
2
5
|
|
|
3
6
|
from numba.cuda.testing import (
|
|
@@ -5,14 +8,12 @@ from numba.cuda.testing import (
|
|
|
5
8
|
skip_if_cudadevrt_missing,
|
|
6
9
|
skip_on_cudasim,
|
|
7
10
|
skip_unless_cc_60,
|
|
8
|
-
skip_if_mvc_enabled,
|
|
9
11
|
)
|
|
10
12
|
from numba.cuda.tests.support import captured_stdout
|
|
11
13
|
|
|
12
14
|
|
|
13
15
|
@skip_if_cudadevrt_missing
|
|
14
16
|
@skip_unless_cc_60
|
|
15
|
-
@skip_if_mvc_enabled("CG not supported with MVC")
|
|
16
17
|
@skip_on_cudasim("cudasim doesn't support cuda import at non-top-level")
|
|
17
18
|
class TestSessionization(CUDATestCase):
|
|
18
19
|
"""
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: BSD-2-Clause
|
|
3
|
+
|
|
1
4
|
from numba.cuda.tests.support import run_in_subprocess
|
|
2
5
|
import unittest
|
|
3
6
|
|
|
@@ -23,6 +26,9 @@ class TestImport(unittest.TestCase):
|
|
|
23
26
|
"numba.cpython.mathimpl",
|
|
24
27
|
"numba.cpython.printimpl",
|
|
25
28
|
"numba.cpython.randomimpl",
|
|
29
|
+
"numba.cuda.cpython.numbers",
|
|
30
|
+
"numba.cuda.cpython.cmathimpl",
|
|
31
|
+
"numba.cuda.cpython.mathimpl",
|
|
26
32
|
"numba.core.optional",
|
|
27
33
|
"numba.misc.gdb_hook",
|
|
28
34
|
"numba.misc.literal",
|
|
@@ -34,7 +40,6 @@ class TestImport(unittest.TestCase):
|
|
|
34
40
|
"numba.np.npyimpl",
|
|
35
41
|
"numba.typed.typeddict",
|
|
36
42
|
"numba.typed.typedlist",
|
|
37
|
-
"numba.experimental.jitclass.base",
|
|
38
43
|
)
|
|
39
44
|
|
|
40
45
|
code = "import sys; from numba import cuda; print(list(sys.modules))"
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: BSD-2-Clause
|
|
3
|
+
|
|
1
4
|
import sys
|
|
2
5
|
import os
|
|
3
6
|
import multiprocessing as mp
|
|
4
7
|
import warnings
|
|
5
8
|
|
|
6
|
-
|
|
9
|
+
|
|
10
|
+
from numba.cuda.core.config import IS_WIN32
|
|
7
11
|
from numba.core.errors import NumbaWarning
|
|
8
12
|
from numba.cuda.cudadrv import nvvm
|
|
9
13
|
from numba.cuda.testing import (
|
|
@@ -16,6 +20,7 @@ from numba.cuda.cuda_paths import (
|
|
|
16
20
|
_get_nvvm_path_decision,
|
|
17
21
|
_get_cudalib_dir_path_decision,
|
|
18
22
|
get_system_ctk,
|
|
23
|
+
get_system_ctk_libdir,
|
|
19
24
|
)
|
|
20
25
|
|
|
21
26
|
|
|
@@ -99,10 +104,12 @@ class TestLibDeviceLookUp(LibraryLookupBase):
|
|
|
99
104
|
# Check that CUDA_HOME works by removing conda-env
|
|
100
105
|
by, info, warns = self.remote_do(self.do_set_cuda_home)
|
|
101
106
|
self.assertEqual(by, "CUDA_HOME")
|
|
102
|
-
self.
|
|
107
|
+
self.assertTrue(
|
|
108
|
+
info.startswith(os.path.join("mycudahome", "nvvm", "libdevice"))
|
|
109
|
+
)
|
|
103
110
|
self.assertFalse(warns)
|
|
104
111
|
|
|
105
|
-
if get_system_ctk() is None:
|
|
112
|
+
if get_system_ctk("nvvm", "libdevice") is None:
|
|
106
113
|
# Fake remove conda environment so no cudatoolkit is available
|
|
107
114
|
by, info, warns = self.remote_do(self.do_clear_envs)
|
|
108
115
|
self.assertEqual(by, "<unknown>")
|
|
@@ -145,13 +152,16 @@ class TestNvvmLookUp(LibraryLookupBase):
|
|
|
145
152
|
self.assertEqual(by, "CUDA_HOME")
|
|
146
153
|
self.assertFalse(warns)
|
|
147
154
|
if IS_WIN32:
|
|
148
|
-
self.assertEqual(
|
|
149
|
-
|
|
150
|
-
|
|
155
|
+
self.assertEqual(
|
|
156
|
+
os.path.dirname(info), os.path.join("mycudahome", "nvvm", "bin")
|
|
157
|
+
)
|
|
151
158
|
else:
|
|
152
|
-
self.assertEqual(
|
|
159
|
+
self.assertEqual(
|
|
160
|
+
os.path.dirname(info),
|
|
161
|
+
os.path.join("mycudahome", "nvvm", "lib64"),
|
|
162
|
+
)
|
|
153
163
|
|
|
154
|
-
if get_system_ctk() is None:
|
|
164
|
+
if get_system_ctk("nvvm") is None:
|
|
155
165
|
# Fake remove conda environment so no cudatoolkit is available
|
|
156
166
|
by, info, warns = self.remote_do(self.do_clear_envs)
|
|
157
167
|
self.assertEqual(by, "<unknown>")
|
|
@@ -196,12 +206,17 @@ class TestCudaLibLookUp(LibraryLookupBase):
|
|
|
196
206
|
self.assertEqual(by, "CUDA_HOME")
|
|
197
207
|
self.assertFalse(warns)
|
|
198
208
|
if IS_WIN32:
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
209
|
+
# I think only wheels don't have the "Library" directory?
|
|
210
|
+
self.assertTrue(
|
|
211
|
+
info
|
|
212
|
+
in (
|
|
213
|
+
os.path.join("mycudahome", "bin"),
|
|
214
|
+
os.path.join("mycudahome", "Library", "bin"),
|
|
215
|
+
)
|
|
216
|
+
)
|
|
202
217
|
else:
|
|
203
218
|
self.assertEqual(info, os.path.join("mycudahome", "lib64"))
|
|
204
|
-
if
|
|
219
|
+
if get_system_ctk_libdir() is None:
|
|
205
220
|
# Fake remove conda environment so no cudatoolkit is available
|
|
206
221
|
by, info, warns = self.remote_do(self.do_clear_envs)
|
|
207
222
|
self.assertEqual(by, "<unknown>")
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: BSD-2-Clause
|
|
3
|
+
|
|
1
4
|
import re
|
|
2
5
|
import os
|
|
3
6
|
|
|
@@ -7,9 +10,10 @@ from numba.cuda.testing import CUDATestCase, skip_on_cudasim
|
|
|
7
10
|
from numba.cuda.tests.support import run_in_subprocess, override_config
|
|
8
11
|
from numba.cuda import get_current_device
|
|
9
12
|
from numba.cuda.cudadrv.nvrtc import compile
|
|
10
|
-
from numba import
|
|
13
|
+
from numba import types
|
|
11
14
|
from numba.core.typing import signature
|
|
12
15
|
from numba import cuda
|
|
16
|
+
from numba.cuda import config
|
|
13
17
|
from numba.cuda.typing.templates import AbstractTemplate
|
|
14
18
|
from numba.cuda.cudadrv.linkable_code import (
|
|
15
19
|
CUSource,
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: BSD-2-Clause
|
|
3
|
+
|
|
1
4
|
import cmath
|
|
2
5
|
import contextlib
|
|
3
6
|
import enum
|
|
@@ -18,8 +21,9 @@ from functools import cached_property
|
|
|
18
21
|
import numpy as np
|
|
19
22
|
|
|
20
23
|
from numba import types
|
|
21
|
-
from numba.core import errors
|
|
22
|
-
from numba.core
|
|
24
|
+
from numba.core import errors
|
|
25
|
+
from numba.cuda.core import config
|
|
26
|
+
from numba.cuda.typing import cffi_utils
|
|
23
27
|
from numba.cuda.memory_management.nrt import rtsys
|
|
24
28
|
from numba.core.extending import (
|
|
25
29
|
typeof_impl,
|
|
@@ -28,7 +32,7 @@ from numba.core.extending import (
|
|
|
28
32
|
NativeValue,
|
|
29
33
|
)
|
|
30
34
|
from numba.core.datamodel.models import OpaqueModel
|
|
31
|
-
from numba.np import numpy_support
|
|
35
|
+
from numba.cuda.np import numpy_support
|
|
32
36
|
|
|
33
37
|
|
|
34
38
|
class EnableNRTStatsMixin(object):
|
|
@@ -748,16 +752,55 @@ class TestCase(unittest.TestCase):
|
|
|
748
752
|
|
|
749
753
|
return Dummy, DummyType
|
|
750
754
|
|
|
751
|
-
def skip_if_no_external_compiler(self):
|
|
752
|
-
"""
|
|
753
|
-
Call this to ensure the test is skipped if no suitable external compiler
|
|
754
|
-
is found. This is a method on the TestCase opposed to a stand-alone
|
|
755
|
-
decorator so as to make it "lazy" via runtime evaluation opposed to
|
|
756
|
-
running at test-discovery time.
|
|
757
|
-
"""
|
|
758
|
-
# This is a local import to avoid deprecation warnings being generated
|
|
759
|
-
# through the use of the numba.pycc module.
|
|
760
|
-
from numba.pycc.platform import external_compiler_works
|
|
761
755
|
|
|
762
|
-
|
|
763
|
-
|
|
756
|
+
class MemoryLeak(object):
|
|
757
|
+
__enable_leak_check = True
|
|
758
|
+
|
|
759
|
+
def memory_leak_setup(self):
|
|
760
|
+
# Clean up any NRT-backed objects hanging in a dead reference cycle
|
|
761
|
+
gc.collect()
|
|
762
|
+
self.__init_stats = rtsys.get_allocation_stats()
|
|
763
|
+
|
|
764
|
+
def memory_leak_teardown(self):
|
|
765
|
+
if self.__enable_leak_check:
|
|
766
|
+
self.assert_no_memory_leak()
|
|
767
|
+
|
|
768
|
+
def assert_no_memory_leak(self):
|
|
769
|
+
old = self.__init_stats
|
|
770
|
+
new = rtsys.get_allocation_stats()
|
|
771
|
+
total_alloc = new.alloc - old.alloc
|
|
772
|
+
total_free = new.free - old.free
|
|
773
|
+
total_mi_alloc = new.mi_alloc - old.mi_alloc
|
|
774
|
+
total_mi_free = new.mi_free - old.mi_free
|
|
775
|
+
self.assertEqual(total_alloc, total_free)
|
|
776
|
+
self.assertEqual(total_mi_alloc, total_mi_free)
|
|
777
|
+
|
|
778
|
+
def disable_leak_check(self):
|
|
779
|
+
# For per-test use when MemoryLeakMixin is injected into a TestCase
|
|
780
|
+
self.__enable_leak_check = False
|
|
781
|
+
|
|
782
|
+
|
|
783
|
+
class MemoryLeakMixin(EnableNRTStatsMixin, MemoryLeak):
|
|
784
|
+
def setUp(self):
|
|
785
|
+
super(MemoryLeakMixin, self).setUp()
|
|
786
|
+
self.memory_leak_setup()
|
|
787
|
+
|
|
788
|
+
def tearDown(self):
|
|
789
|
+
gc.collect()
|
|
790
|
+
self.memory_leak_teardown()
|
|
791
|
+
super(MemoryLeakMixin, self).tearDown()
|
|
792
|
+
|
|
793
|
+
|
|
794
|
+
class CheckWarningsMixin(object):
|
|
795
|
+
@contextlib.contextmanager
|
|
796
|
+
def check_warnings(self, messages, category=RuntimeWarning):
|
|
797
|
+
with warnings.catch_warnings(record=True) as catch:
|
|
798
|
+
warnings.simplefilter("always")
|
|
799
|
+
yield
|
|
800
|
+
found = 0
|
|
801
|
+
for w in catch:
|
|
802
|
+
for m in messages:
|
|
803
|
+
if m in str(w.message):
|
|
804
|
+
self.assertEqual(w.category, category)
|
|
805
|
+
found += 1
|
|
806
|
+
self.assertEqual(found, len(messages))
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: BSD-2-Clause
|
|
3
|
+
|
|
1
4
|
# Generates the input files used by the nvjitlink tests
|
|
2
5
|
|
|
3
6
|
# Test binaries are built taking into account the CC of the GPU in the test machine
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
3
|
+
* SPDX-License-Identifier: BSD-2-Clause
|
|
4
|
+
*/
|
|
5
|
+
|
|
1
6
|
extern __device__ float undef(float a, float b);
|
|
2
7
|
|
|
3
8
|
__global__ void f(float *r, float *a, float *b) { r[0] = undef(a[0], b[0]); }
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: BSD-2-Clause
|
|
3
|
+
|
|
4
|
+
from io import StringIO
|
|
5
|
+
import logging
|
|
6
|
+
|
|
7
|
+
import unittest
|
|
8
|
+
from numba.cuda.core import tracing
|
|
9
|
+
|
|
10
|
+
logger = logging.getLogger("trace")
|
|
11
|
+
logger.setLevel(logging.INFO)
|
|
12
|
+
|
|
13
|
+
# Make sure tracing is enabled
|
|
14
|
+
orig_trace = tracing.trace
|
|
15
|
+
tracing.trace = tracing.dotrace
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class CapturedTrace:
|
|
19
|
+
"""Capture the trace temporarily for validation."""
|
|
20
|
+
|
|
21
|
+
def __init__(self):
|
|
22
|
+
self.buffer = StringIO()
|
|
23
|
+
self.handler = logging.StreamHandler(self.buffer)
|
|
24
|
+
|
|
25
|
+
def __enter__(self):
|
|
26
|
+
self._handlers = logger.handlers
|
|
27
|
+
self.buffer = StringIO()
|
|
28
|
+
logger.handlers = [logging.StreamHandler(self.buffer)]
|
|
29
|
+
|
|
30
|
+
def __exit__(self, type, value, traceback):
|
|
31
|
+
logger.handlers = self._handlers
|
|
32
|
+
|
|
33
|
+
def getvalue(self):
|
|
34
|
+
# Depending on how the tests are run, object names may be
|
|
35
|
+
# qualified by their containing module.
|
|
36
|
+
# Remove that to make the trace output independent from the testing mode.
|
|
37
|
+
log = self.buffer.getvalue()
|
|
38
|
+
log = log.replace(__name__ + ".", "")
|
|
39
|
+
return log
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class Class(object):
|
|
43
|
+
@tracing.trace
|
|
44
|
+
@classmethod
|
|
45
|
+
def class_method(cls):
|
|
46
|
+
pass
|
|
47
|
+
|
|
48
|
+
@tracing.trace
|
|
49
|
+
@staticmethod
|
|
50
|
+
def static_method():
|
|
51
|
+
pass
|
|
52
|
+
|
|
53
|
+
__test = None
|
|
54
|
+
|
|
55
|
+
def _test_get(self):
|
|
56
|
+
return self.__test
|
|
57
|
+
|
|
58
|
+
def _test_set(self, value):
|
|
59
|
+
self.__test = value
|
|
60
|
+
|
|
61
|
+
test = tracing.trace(property(_test_get, _test_set))
|
|
62
|
+
|
|
63
|
+
@tracing.trace
|
|
64
|
+
def method(self, some, other="value", *args, **kwds):
|
|
65
|
+
pass
|
|
66
|
+
|
|
67
|
+
def __repr__(self):
|
|
68
|
+
"""Generate a deterministic string for testing."""
|
|
69
|
+
return "<Class instance>"
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class Class2(object):
|
|
73
|
+
@classmethod
|
|
74
|
+
def class_method(cls):
|
|
75
|
+
pass
|
|
76
|
+
|
|
77
|
+
@staticmethod
|
|
78
|
+
def static_method():
|
|
79
|
+
pass
|
|
80
|
+
|
|
81
|
+
__test = None
|
|
82
|
+
|
|
83
|
+
@property
|
|
84
|
+
def test(self):
|
|
85
|
+
return self.__test
|
|
86
|
+
|
|
87
|
+
@test.setter
|
|
88
|
+
def test(self, value):
|
|
89
|
+
self.__test = value
|
|
90
|
+
|
|
91
|
+
def method(self):
|
|
92
|
+
pass
|
|
93
|
+
|
|
94
|
+
def __str__(self):
|
|
95
|
+
return "Test(" + str(self.test) + ")"
|
|
96
|
+
|
|
97
|
+
def __repr__(self):
|
|
98
|
+
"""Generate a deterministic string for testing."""
|
|
99
|
+
return "<Class2 instance>"
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
@tracing.trace
|
|
103
|
+
def test_traced_function():
|
|
104
|
+
# Test the tracing functionality with fixed values
|
|
105
|
+
x, y = 5, 5
|
|
106
|
+
z = True
|
|
107
|
+
|
|
108
|
+
a = x + y
|
|
109
|
+
b = x * y
|
|
110
|
+
if z:
|
|
111
|
+
result = a
|
|
112
|
+
else:
|
|
113
|
+
result = b
|
|
114
|
+
|
|
115
|
+
# The function should return 10 (5 + 5) when z is True
|
|
116
|
+
assert result == 10
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
class TestTracing(unittest.TestCase):
|
|
120
|
+
def __init__(self, *args):
|
|
121
|
+
super(TestTracing, self).__init__(*args)
|
|
122
|
+
|
|
123
|
+
def setUp(self):
|
|
124
|
+
self.capture = CapturedTrace()
|
|
125
|
+
|
|
126
|
+
def tearDown(self):
|
|
127
|
+
del self.capture
|
|
128
|
+
|
|
129
|
+
def test_method(self):
|
|
130
|
+
with self.capture:
|
|
131
|
+
Class().method("foo", bar="baz")
|
|
132
|
+
self.assertEqual(
|
|
133
|
+
self.capture.getvalue(),
|
|
134
|
+
">> Class.method(self=<Class instance>, some='foo', other='value', bar='baz')\n"
|
|
135
|
+
+ "<< Class.method\n",
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
def test_class_method(self):
|
|
139
|
+
with self.capture:
|
|
140
|
+
Class.class_method()
|
|
141
|
+
self.assertEqual(
|
|
142
|
+
self.capture.getvalue(),
|
|
143
|
+
">> Class.class_method(cls=<class 'Class'>)\n"
|
|
144
|
+
+ "<< Class.class_method\n",
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
def test_static_method(self):
|
|
148
|
+
with self.capture:
|
|
149
|
+
Class.static_method()
|
|
150
|
+
self.assertEqual(
|
|
151
|
+
self.capture.getvalue(),
|
|
152
|
+
">> static_method()\n" + "<< static_method\n",
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
def test_property(self):
|
|
156
|
+
with self.capture:
|
|
157
|
+
test = Class()
|
|
158
|
+
test.test = 1
|
|
159
|
+
assert 1 == test.test
|
|
160
|
+
self.assertEqual(
|
|
161
|
+
self.capture.getvalue(),
|
|
162
|
+
">> Class._test_set(self=<Class instance>, value=1)\n"
|
|
163
|
+
+ "<< Class._test_set\n"
|
|
164
|
+
+ ">> Class._test_get(self=<Class instance>)\n"
|
|
165
|
+
+ "<< Class._test_get -> 1\n",
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
def test_function(self):
|
|
169
|
+
with self.capture:
|
|
170
|
+
test_traced_function()
|
|
171
|
+
# The test function should be traced when called
|
|
172
|
+
trace_output = self.capture.getvalue()
|
|
173
|
+
self.assertIn(">> test_traced_function()", trace_output)
|
|
174
|
+
self.assertIn("<< test_traced_function", trace_output)
|
|
175
|
+
|
|
176
|
+
@unittest.skip("recursive decoration not yet implemented")
|
|
177
|
+
def test_injected(self):
|
|
178
|
+
with self.capture:
|
|
179
|
+
tracing.trace(Class2, recursive=True)
|
|
180
|
+
Class2.class_method()
|
|
181
|
+
Class2.static_method()
|
|
182
|
+
test = Class2()
|
|
183
|
+
test.test = 1
|
|
184
|
+
assert 1 == test.test
|
|
185
|
+
test.method()
|
|
186
|
+
|
|
187
|
+
self.assertEqual(
|
|
188
|
+
self.capture.getvalue(),
|
|
189
|
+
">> Class2.class_method(cls=<type 'Class2'>)\n"
|
|
190
|
+
+ "<< Class2.class_method\n"
|
|
191
|
+
">> static_method()\n"
|
|
192
|
+
"<< static_method\n",
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
# Reset tracing to its original value
|
|
197
|
+
tracing.trace = orig_trace
|
|
198
|
+
|
|
199
|
+
if __name__ == "__main__":
|
|
200
|
+
unittest.main()
|