Skip to content

Commit cd18c3f

Browse files
committed
Fixed error with SciPy sparse arrays with zeros
1 parent d3c5d4b commit cd18c3f

2 files changed

Lines changed: 9 additions & 9 deletions

File tree

‎pgvector/sparsevec.py‎

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -119,14 +119,14 @@ def _from_sparse(self, arr: sparray | spmatrix, /) -> None:
119119
else:
120120
indices = value.col.tolist()
121121

122-
# spipy 1.12+
123-
if hasattr(value, 'has_canonical_format') and value.has_canonical_format:
124-
self._indices = indices
125-
self._values = [float(v) for v in value.data]
126-
else:
127-
elements = sorted(zip(indices, value.data))
128-
self._indices = [v[0] for v in elements]
129-
self._values = [float(v[1]) for v in elements]
122+
elements = [v for v in zip(indices, value.data) if v[1] != 0]
123+
124+
# has_canonical_format added in spipy 1.12+
125+
if not hasattr(value, 'has_canonical_format') or not value.has_canonical_format:
126+
elements.sort()
127+
128+
self._indices = [v[0] for v in elements]
129+
self._values = [float(v[1]) for v in elements]
130130

131131
def _from_dense(self, value: list[float] | ndarray, /) -> None:
132132
self._dim = len(value)

‎tests/test_sparse_vector.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def test_coo_array(self) -> None:
5454
if np is None or sparse is None:
5555
pytest.skip('NumPy and SciPy required')
5656

57-
arr = sparse.coo_array(([3, 1, 2], ([4, 0, 2],)), shape=(6,))
57+
arr = sparse.coo_array(([2, 3, 1, 0], ([2, 4, 0, 3],)), shape=(6,))
5858
vec = SparseVector(arr)
5959
assert vec.to_list() == [1, 0, 2, 0, 3, 0]
6060
assert vec.indices() == [0, 2, 4]

0 commit comments

Comments
 (0)