textgraphs / tests /test_load.py
Paco Nathan
A new start
91eaff6
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
unit tests:
* serialization and deserialization
see copyright/license https://huggingface.co/spaces/DerwenAI/textgraphs/blob/main/README.md
"""
from os.path import abspath, dirname
import json
import pathlib
import sys
import deepdiff # pylint: disable=E0401
sys.path.insert(0, str(pathlib.Path(dirname(dirname(abspath(__file__))))))
import textgraphs # pylint: disable=C0413
def test_load_minimal (
*,
debug: bool = False,
) -> None:
"""
Construct a _lemma graph_ from a minimal example, then compare
serialized and deserialized data to ensure no fields get corrupted
in the conversions.
"""
text: str = """
See Spot run.
"""
tg: textgraphs.TextGraphs = textgraphs.TextGraphs() # pylint: disable=C0103
pipe: textgraphs.Pipeline = tg.create_pipeline(text.strip())
# serialize into node-link format
tg.collect_graph_elements(pipe)
tg.construct_lemma_graph()
tg.calc_phrase_ranks()
json_str: str = tg.dump_lemma_graph()
exp_graph = json.loads(json_str)
# deserialize from node-link format
tg = textgraphs.TextGraphs() # pylint: disable=C0103
tg.load_lemma_graph(json_str)
tg.construct_lemma_graph()
obs_graph: dict = json.loads(tg.dump_lemma_graph())
if debug:
print(obs_graph)
# compare
diff: deepdiff.diff.DeepDiff = deepdiff.DeepDiff(exp_graph, obs_graph)
if debug:
print(diff)
if len(diff) > 0:
print(json.dumps(json.loads(diff.to_json()), indent = 2))
assert len(diff) == 0
if __name__ == "__main__":
test_load_minimal(debug = True)