From babd6964abf873eec6d1d5a74d920a19f42b6c49 Mon Sep 17 00:00:00 2001 From: Srijan Upadhyay Date: Tue, 20 Jan 2026 16:15:38 +0530 Subject: [PATCH 1/2] CUDA: add numeric conversion tests\n\nAdds kernel-based tests for device-side numeric conversions: intfloat, float/intcomplex, boolnumeric. Skips under cudasim. NumPy is used as the reference. Scope is intentionally limited to safe, well-defined CUDA conversions. --- .../numba/cuda/tests/test_conversion.py | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 numba_cuda/numba/cuda/tests/test_conversion.py diff --git a/numba_cuda/numba/cuda/tests/test_conversion.py b/numba_cuda/numba/cuda/tests/test_conversion.py new file mode 100644 index 000000000..add069864 --- /dev/null +++ b/numba_cuda/numba/cuda/tests/test_conversion.py @@ -0,0 +1,75 @@ +import numpy as np + +from numba import cuda +from numba.cuda.testing import CUDATestCase, skip_on_cudasim + + +@cuda.jit +def convert_kernel(inp, out): + i = cuda.grid(1) + if i < inp.size: + out[i] = inp[i] + + +@skip_on_cudasim("Conversion semantics differ under cudasim") +class TestCudaConversion(CUDATestCase): + + def _launch_1d(self, kernel, args, size): + threadsperblock = 128 + blockspergrid = (size + threadsperblock - 1) // threadsperblock + kernel[blockspergrid, threadsperblock](*args) + cuda.synchronize() + + + def _run_conversion(self, src, dst_dtype): + out = np.zeros_like(src, dtype=dst_dtype) + + d_src = cuda.to_device(src) + d_out = cuda.to_device(out) + + self._launch_1d(convert_kernel, (d_src, d_out), src.size) + + result = d_out.copy_to_host() + expected = src.astype(dst_dtype) + + np.testing.assert_array_equal(result, expected) + + + def test_int_to_float(self): + src = np.array([1, -2, 3, 4], dtype=np.int32) + self._run_conversion(src, np.float32) + + + def test_float_to_int_truncation(self): + src = np.array([1.7, -2.2, 3.9], dtype=np.float32) + self._run_conversion(src, np.int32) + + + def test_int_to_complex(self): + src = np.array([1, -2, 3], dtype=np.int32) + self._run_conversion(src, np.complex64) + + + def test_float_to_complex(self): + src = np.array([1.5, -2.25, 3.75], dtype=np.float32) + self._run_conversion(src, np.complex64) + + + def test_bool_to_int(self): + src = np.array([True, False, True], dtype=np.bool_) + self._run_conversion(src, np.int32) + + + def test_int_to_bool(self): + src = np.array([0, 1, -3, 4], dtype=np.int32) + self._run_conversion(src, np.bool_) + + + def test_bool_to_float(self): + src = np.array([True, False, True], dtype=np.bool_) + self._run_conversion(src, np.float32) + + + def test_float_to_bool(self): + src = np.array([0.0, 1.2, -0.5], dtype=np.float32) + self._run_conversion(src, np.bool_) From afda17fdd294925984ca0be16ac41ffd742bed7f Mon Sep 17 00:00:00 2001 From: Srijan Upadhyay <104912634+CodersAcademy006@users.noreply.github.com> Date: Wed, 21 Jan 2026 11:10:15 +0530 Subject: [PATCH 2/2] Update numba_cuda/numba/cuda/tests/test_conversion.py Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- numba_cuda/numba/cuda/tests/test_conversion.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/numba_cuda/numba/cuda/tests/test_conversion.py b/numba_cuda/numba/cuda/tests/test_conversion.py index add069864..6dbadf782 100644 --- a/numba_cuda/numba/cuda/tests/test_conversion.py +++ b/numba_cuda/numba/cuda/tests/test_conversion.py @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: BSD-2-Clause + import numpy as np from numba import cuda