Files
haystack/test/dataclasses/test_sparse_embedding.py
bogdankostic ea5e10f9e6 feat: Warn on in-place mutation of dataclass instances (#10650)
* Raise warning if dataclasses are modified in-place

* Add tests

* Add release note

* Fix release note formatting

* fix release note formatting

* Update copyright year in dataclasses.py

* Update warnings in dataclasses to use Warning instead of DeprecationWarning for in-place mutations

* Remove decorator from Protocol

* Refactor dunder access in dataclasses to comply with ruff guidelines

* Update warnings in dataclasses to consistently use Warning for in-place mutations

* Update warning messahe and release note
2026-02-24 12:20:39 +01:00

48 lines
1.6 KiB
Python

# SPDX-FileCopyrightText: 2022-present deepset GmbH <[email protected]>
#
# SPDX-License-Identifier: Apache-2.0
import warnings
import pytest
from haystack.dataclasses.sparse_embedding import SparseEmbedding
class TestSparseEmbedding:
def test_init(self):
se = SparseEmbedding(indices=[0, 2, 4], values=[0.1, 0.2, 0.3])
assert se.indices == [0, 2, 4]
assert se.values == [0.1, 0.2, 0.3]
def test_init_with_wrong_parameters(self):
with pytest.raises(ValueError):
SparseEmbedding(indices=[0, 2], values=[0.1, 0.2, 0.3, 0.4])
def test_to_dict(self):
se = SparseEmbedding(indices=[0, 2, 4], values=[0.1, 0.2, 0.3])
assert se.to_dict() == {"indices": [0, 2, 4], "values": [0.1, 0.2, 0.3]}
def test_from_dict(self):
se = SparseEmbedding.from_dict({"indices": [0, 2, 4], "values": [0.1, 0.2, 0.3]})
assert se.indices == [0, 2, 4]
assert se.values == [0.1, 0.2, 0.3]
def test_eq(self):
se1 = SparseEmbedding(indices=[0, 2, 4], values=[0.1, 0.2, 0.3])
se2 = SparseEmbedding(indices=[0, 2, 4], values=[0.1, 0.2, 0.3])
assert se1 == se2
se3 = SparseEmbedding(indices=[0, 2, 4], values=[0.1, 0.2, 0.4])
assert se1 != se3
def test_no_warning_on_init(self):
with warnings.catch_warnings():
warnings.simplefilter("error", Warning)
SparseEmbedding(indices=[0, 2, 4], values=[0.1, 0.2, 0.3])
def test_warn_on_inplace_mutation(self):
se = SparseEmbedding(indices=[0, 2, 4], values=[0.1, 0.2, 0.3])
with pytest.warns(Warning, match="dataclasses.replace"):
se.indices = [1, 3, 5]