From 73221b103c61e4ac40998882a12c2c97faee0089 Mon Sep 17 00:00:00 2001 From: Ilham Syahid S Date: Wed, 3 Jun 2026 11:38:38 +0700 Subject: [PATCH] fix: COOMatrix float data copy size --- implicit/gpu/matrix.cu | 2 +- tests/gpu_test.py | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/implicit/gpu/matrix.cu b/implicit/gpu/matrix.cu index 2b0d858..ffba537 100644 --- a/implicit/gpu/matrix.cu +++ b/implicit/gpu/matrix.cu @@ -270,7 +270,7 @@ COOMatrix::COOMatrix(int rows, int cols, int nonzeros, const int *row_, CHECK_CUDA(cudaMallocManaged(&data, nonzeros * sizeof(float))); CHECK_CUDA( - cudaMemcpy(data, data_, nonzeros * sizeof(int), cudaMemcpyHostToDevice)); + cudaMemcpy(data, data_, nonzeros * sizeof(float), cudaMemcpyHostToDevice)); } COOMatrix::~COOMatrix() { diff --git a/tests/gpu_test.py b/tests/gpu_test.py index 7dab3e6..83070a6 100644 --- a/tests/gpu_test.py +++ b/tests/gpu_test.py @@ -2,6 +2,7 @@ import pytest from numpy.testing import assert_allclose, assert_array_equal from recommender_base_test import get_checker_board +from scipy.sparse import coo_matrix import implicit @@ -81,3 +82,14 @@ def test_cpu_gpu_conversion(model_class, from_gpu): rtol=1e-3, atol=1e-3, ) + + +@pytest.mark.skipif(not implicit.gpu.HAS_CUDA, reason="needs cuda build") +def test_coo_matrix_copies_float_data(): + row = np.array([0, 1, 2, 0, 1, 2], dtype=np.int32) + col = np.array([0, 1, 2, 1, 2, 0], dtype=np.int32) + data = np.array([1.5, 2.7, 3.14159, 0.1, 1000.5, -1.5], dtype=np.float32) + + matrix = implicit.gpu.COOMatrix(coo_matrix((data, (row, col)), shape=(3, 3))) + + assert matrix is not None