--- a +++ b/tests/test_reducers.py @@ -0,0 +1,64 @@ +import copy +import pickle + +import dill +import pytest +from spacy.tokens import Doc + +import edsnlp + +if not hasattr(Doc, "custom_test_reducers"): + Doc.set_extension("custom_test_reducers", default=None) + + +@pytest.mark.parametrize("pickler_module", ["pickle", "dill"]) +def test_reducers(pickler_module): + pickler = pickle if pickler_module == "pickle" else dill + doc = edsnlp.blank("eds")("This is a test.") + doc.spans["test"] = [doc[0:1]] + span = doc.spans["test"][0] + token = doc[0] + data = [ + doc, # data[0] + token, # data[1] + token, # data[2] + span, # data[3] + span, # data[4] + ] + doc._.custom_test_reducers = data + doc_bytes = pickler.dumps(doc) + + doc_bis = pickler.loads(doc_bytes) + data_bis = doc_bis._.custom_test_reducers + assert data_bis[0] is doc_bis + assert data_bis[1] == doc_bis[0] + assert data_bis[1] is data_bis[2] + assert data_bis[3] is data_bis[4] + + doc_ter = pickler.loads(doc_bytes) + data_ter = doc_ter._.custom_test_reducers + assert data_ter[0] is not data_bis[0] + + +def test_deep_copy(): + doc = edsnlp.blank("eds")("This is a test.") + doc.spans["test"] = [doc[0:1]] + span = doc.spans["test"][0] + token = doc[0] + data = [ + doc, # data[0] + token, # data[1] + token, # data[2] + span, # data[3] + span, # data[4] + ] + + bis = copy.deepcopy(data) + ter = copy.deepcopy(data) + assert bis[1].doc is bis[0] + assert bis[3].doc is bis[0] + assert bis[1] is bis[2] + assert bis[3] is bis[4] + + assert bis[0] is not doc + assert bis[0] is not ter[0]