#!/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)