Skip to content
Snippets Groups Projects
mocks.py 80.5 KiB
Newer Older
  • Learn to ignore specific revisions
  • from collections import OrderedDict
    from datetime import datetime
    from typing import List, Tuple, Dict
    
    from unittest.mock import patch
    
    
    from conllu import TokenList
    
    from flask import Flask
    from flask.ctx import AppContext
    from flask.testing import FlaskClient
    
    from gensim.models import Word2Vec
    from gensim.models.keyedvectors import Vocab
    from networkx import Graph
    from numpy.core.multiarray import ndarray
    
    from sqlalchemy.exc import OperationalError
    
    from mcserver import Config, TestingConfig
    from mcserver.app import db, shutdown_session
    from mcserver.app.models import Phenomenon, PartOfSpeech, CitationLevel, SolutionElement, ExerciseData, GraphData, \
        LinkMC, NodeMC, Language, Dependency, Case, AnnisResponse, Solution, TextPart, Citation, ExerciseMC, CorpusMC
    from mcserver.app.services import AnnotationService, CustomCorpusService, TextService
    from mcserver.models_auto import Corpus, Exercise, UpdateInfo
    
    
    class MockFilterBy:
        def __init__(self, do_raise: bool = False, ui: UpdateInfo = None):
            self.do_raise: bool = do_raise
            self.ui: UpdateInfo = ui
    
        def first(self):
            if self.do_raise:
                raise OperationalError("error", [], "")
            else:
                return self.ui
    
    
    class MockQuery:
        def __init__(self, do_raise: bool = False, ui: UpdateInfo = None):
            self.do_raise: bool = do_raise
            self.ui: UpdateInfo = ui
    
        def all(self):
            return db.session.query(Corpus).all()
    
        def filter_by(self, **kwargs):
            return MockFilterBy(self.do_raise, self.ui)
    
    
    
    class MockWV:
        def __init__(self):
            self.vocab: Dict[str, Vocab] = {"ueritas": Vocab(count=50), "uera": Vocab(count=50)}
            ret_val: ndarray = ndarray((100,))
            ret_val.fill(0.5)
            self.get_vector_return_value: ndarray = ret_val
    
        def get_vector(self, word: str) -> ndarray:
            return self.get_vector_return_value
    
    
    class MockW2V:
        def __init__(self):
            self.wv = MockWV()
    
    
    class MockResponse:
        def __init__(self, text: str, ok: bool = True, content: bytes = b""):
            self.content: bytes = content
            self.encoding: str = "utf-8"
            self.ok: bool = ok
            self.text: str = text
    
        def raise_for_status(self) -> None:
            pass
    
    
    
    class TestHelper:
        def __init__(self, app: Flask):
            self.app: Flask = app
            self.app_context: AppContext = self.app.app_context()
            self.client: FlaskClient = self.app.test_client()
    
        @staticmethod
        def update_flask_app(class_name: str, app_factory: callable) -> None:
            """Sets up and tears down the testing environment for each Test Case."""
            if len(Mocks.app_dict) and list(Mocks.app_dict.keys())[0] != class_name:
                if Config.CORPUS_STORAGE_MANAGER:
                    Config.CORPUS_STORAGE_MANAGER.__exit__(None, None, None)
                list(Mocks.app_dict.values())[0].app_context.pop()
                shutdown_session()
                db.drop_all()
                Mocks.app_dict = {}
            if not len(Mocks.app_dict):
                with patch.object(TextService, "init_stop_words_latin"):
                    Mocks.app_dict[class_name] = TestHelper(app_factory(TestingConfig))
                Mocks.app_dict[class_name].app.logger.setLevel(logging.CRITICAL)
                Mocks.app_dict[class_name].app.testing = True
            db.session.commit()
    
    
    
    101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666
    class Mocks:
        """This class contains mock objects for unit testing purposes."""
        annotations: List[TokenList] = [TokenList(
            tokens=[{"id": 1, "form": "Caesar", "lemma": "Caeso", "upostag": "VERB", "xpostag": "L3|modJ|tem3|gen4|stAV",
                     "feats": {"Mood": "Ind", "Number": "Sing", "Person": "1", "Tense": "Fut", "VerbForm": "Fin",
                               "Voice": "Pass"}, "head": 0, "deprel": "root", "deps": None, "misc": {"ref": "1.1"}},
                    {"id": 2, "form": "et", "lemma": "et", "upostag": "CCONJ", "xpostag": "O4|stRL", "feats": None,
                     "head": 3, "deprel": "cc", "deps": None, "misc": None},
                    {"id": 3, "form": "Galli", "lemma": "Gallo", "upostag": "VERB", "xpostag": "L3|modQ|tem1|stAC",
                     "feats": {"Tense": "Pres", "VerbForm": "Inf", "Voice": "Pass"}, "head": 1, "deprel": "conj",
                     "deps": None, "misc": None},
                    {"id": 4, "form": "fortes", "lemma": "fors", "upostag": "NOUN", "xpostag": "C1|grn1|casJ|gen2|stRS",
                     "feats": {"Case": "Nom", "Degree": "Pos", "Gender": "Fem", "Number": "Plur"}, "head": 3,
                     "deprel": "nsubj:pass", "deps": None, "misc": None},
                    {"id": 5, "form": "sunt", "lemma": "sum", "upostag": "AUX", "xpostag": "N3|modA|tem1|gen9|stAV",
                     "feats": {"Mood": "Ind", "Number": "Plur", "Person": "3", "Tense": "Pres", "VerbForm": "Fin",
                               "Voice": "Act"}, "head": 3, "deprel": "aux:pass", "deps": None,
                     "misc": {"SpaceAfter": "No"}},
                    {"id": 6, "form": ".", "lemma": ".", "upostag": "PUNCT", "xpostag": "Punc", "feats": None, "head": 1,
                     "deprel": "punct", "deps": None, "misc": None}],
            metadata=OrderedDict([("sent_id", "1"), ("urn", "urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.1-1.1.1")]))]
        annis_response_dict: dict = {"graph_data_raw": {"directed": True, "multigraph": True, "graph": {}, "nodes": [
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok1",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "Pars", "udep::lemma": "pars",
             "udep::upostag": "NOUN", "udep::xpostag": "Nb", "udep::feats": "Case=Nom|Gender=Fem|Number=Sing",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok1"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok3",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "formator", "udep::lemma": "formator",
             "udep::upostag": "NOUN", "udep::xpostag": "Nb", "udep::feats": "Case=Nom|Gender=Masc|Number=Sing",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok3"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok7",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "praecepturus", "udep::lemma": "praecipio",
             "udep::upostag": "VERB", "udep::xpostag": "V-",
             "udep::feats": "Case=Nom|Gender=Masc|Number=Sing|Tense=Fut|VerbForm=Part|Voice=Act",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok7"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok16",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "qui", "udep::lemma": "qvi",
             "udep::upostag": "PRON", "udep::xpostag": "Pr", "udep::feats": "Case=Nom|Gender=Masc|Number=Plur|PronType=Rel",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok16"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok9",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "rhetores", "udep::lemma": "rhetor",
             "udep::upostag": "NOUN", "udep::xpostag": "Nb", "udep::feats": "Case=Acc|Gender=Masc|Number=Plur",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok9"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok2",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "est", "udep::lemma": "sum",
             "udep::upostag": "AUX", "udep::xpostag": "V-",
             "udep::feats": "Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin|Voice=Act",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok2"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok17",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "dum", "udep::lemma": "dum",
             "udep::upostag": "SCONJ", "udep::xpostag": "G-",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok17"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok4",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "agricolae", "udep::lemma": "Agricola",
             "udep::upostag": "NOUN", "udep::xpostag": "Nb", "udep::feats": "Case=Gen|Gender=Masc|Number=Sing",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok4"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok8",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "es", "udep::lemma": "sum",
             "udep::upostag": "AUX", "udep::xpostag": "V-",
             "udep::feats": "Mood=Ind|Number=Sing|Person=2|Tense=Pres|VerbForm=Fin|Voice=Act",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok8"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok12",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "a", "udep::lemma": "ab",
             "udep::upostag": "ADP", "udep::xpostag": "R-",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok12"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok10",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "aemulari", "udep::lemma": "aemulor",
             "udep::upostag": "VERB", "udep::xpostag": "V-", "udep::feats": "Tense=Pres|VerbForm=Inf|Voice=Pass",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok10"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok3",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "prima", "udep::lemma": "primus",
             "udep::upostag": "ADJ", "udep::xpostag": "Mo", "udep::feats": "Case=Nom|Gender=Fem|Number=Sing",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok3"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok13",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "plerisque", "udep::lemma": "plerusque",
             "udep::upostag": "ADJ", "udep::xpostag": "A-", "udep::feats": "Case=Abl|Degree=Pos|Gender=Masc|Number=Plur",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok13"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok18",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "diserte", "udep::lemma": "diserte",
             "udep::upostag": "ADV", "udep::xpostag": "Df", "udep::feats": "Degree=Pos",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok18"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok5",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "debet", "udep::lemma": "debeo",
             "udep::upostag": "VERB", "udep::xpostag": "V-",
             "udep::feats": "Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin|Voice=Act", "udep::deps": "root",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok5"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok9",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "aestimare", "udep::lemma": "aestimo",
             "udep::upostag": "VERB", "udep::xpostag": "V-", "udep::feats": "Tense=Pres|VerbForm=Inf|Voice=Act",
             "udep::deps": "root", "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok9"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok11",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "quod", "udep::lemma": "qui",
             "udep::upostag": "PRON", "udep::xpostag": "Pr", "udep::feats": "Case=Acc|Gender=Neut|Number=Sing|PronType=Rel",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok11"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok14",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "factum", "udep::lemma": "facio",
             "udep::upostag": "VERB", "udep::xpostag": "V-",
             "udep::feats": "Aspect=Perf|Case=Nom|Gender=Neut|Number=Sing|Tense=Past|VerbForm=Part|Voice=Pass",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok14"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok19",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "loquuntur", "udep::lemma": "loquor",
             "udep::upostag": "VERB", "udep::xpostag": "V-",
             "udep::feats": "Mood=Ind|Number=Plur|Person=3|Tense=Pres|VerbForm=Fin|Voice=Pass",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok19"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok4",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "prudentiae", "udep::lemma": "prudentia",
             "udep::upostag": "NOUN", "udep::xpostag": "Nb", "udep::feats": "Case=Gen|Gender=Fem|Number=Sing",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok4"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok10",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "personam", "udep::lemma": "persona",
             "udep::upostag": "NOUN", "udep::xpostag": "Nb", "udep::feats": "Case=Acc|Gender=Fem|Number=Sing",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok10"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok6",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "artibus", "udep::lemma": "ars",
             "udep::upostag": "NOUN", "udep::xpostag": "Nb", "udep::feats": "Case=Abl|Gender=Fem|Number=Plur",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok6"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok15",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "est", "udep::lemma": "sum",
             "udep::upostag": "AUX", "udep::xpostag": "V-",
             "udep::feats": "Mood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin|Voice=Act",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok15"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok7",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "et", "udep::lemma": "et",
             "udep::upostag": "CCONJ", "udep::xpostag": "C-",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok7"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok20",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "rusticis", "udep::lemma": "rusticus",
             "udep::upostag": "ADJ", "udep::xpostag": "A-", "udep::feats": "Case=Abl|Degree=Pos|Gender=Masc|Number=Plur",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok20"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok11",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": ".", "udep::lemma": ".",
             "udep::upostag": "PUNCT", "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok11"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok5",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "ipsam", "udep::lemma": "ipse",
             "udep::upostag": "DET", "udep::xpostag": "Pd", "udep::feats": "Case=Acc|Gender=Fem|Number=Sing",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok5"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok8",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "eloquentia", "udep::lemma": "eloquentia",
             "udep::upostag": "NOUN", "udep::xpostag": "Nb", "udep::feats": "Case=Abl|Gender=Fem|Number=Sing",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok8"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok22",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "sunt", "udep::lemma": "sum",
             "udep::upostag": "AUX", "udep::xpostag": "V-",
             "udep::feats": "Mood=Ind|Number=Plur|Person=3|Tense=Pres|VerbForm=Fin|Voice=Act",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok22"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok21",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "adsecuti", "udep::lemma": "assequor",
             "udep::upostag": "VERB", "udep::xpostag": "V-",
             "udep::feats": "Aspect=Perf|Case=Nom|Gender=Masc|Number=Plur|Tense=Past|VerbForm=Part|Voice=Pass",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok21"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok1",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "Neque", "udep::lemma": "neque",
             "udep::upostag": "ADV", "udep::xpostag": "Df",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok1"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok6",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "cui", "udep::lemma": "qui",
             "udep::upostag": "PRON", "udep::xpostag": "Pr", "udep::feats": "Case=Dat|Gender=Fem|Number=Sing|PronType=Rel",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok6"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok4",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "praefationis", "udep::lemma": "praefatio",
             "udep::upostag": "NOUN", "udep::xpostag": "Nb", "udep::feats": "Case=Gen|Gender=Fem|Number=Sing",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok4"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok23",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "ut", "udep::lemma": "ut",
             "udep::upostag": "SCONJ", "udep::xpostag": "G-",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok23"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok2",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "enim", "udep::lemma": "enim",
             "udep::upostag": "ADV", "udep::xpostag": "Df",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok2"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok1",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "Sed", "udep::lemma": "sed",
             "udep::upostag": "CCONJ", "udep::xpostag": "C-",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok1"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok25",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "doctrina", "udep::lemma": "doctrina",
             "udep::upostag": "NOUN", "udep::xpostag": "Nb", "udep::feats": "Case=Nom|Gender=Fem|Number=Sing",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok25"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok24",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "eorum", "udep::lemma": "is",
             "udep::upostag": "PRON", "udep::xpostag": "Pp",
             "udep::feats": "Case=Gen|Gender=Masc|Number=Plur|Person=3|PronType=Prs",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok24"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok5",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "moram", "udep::lemma": "mora",
             "udep::upostag": "NOUN", "udep::xpostag": "Nb", "udep::feats": "Case=Acc|Gender=Fem|Number=Sing",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok5"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok2",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "nos", "udep::lemma": "nos",
             "udep::upostag": "PRON", "udep::xpostag": "Pp",
             "udep::feats": "Case=Nom|Gender=Masc|Number=Plur|Person=1|PronType=Prs",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok2"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok7",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "quos", "udep::lemma": "qui",
             "udep::upostag": "PRON", "udep::xpostag": "Pr", "udep::feats": "Case=Acc|Gender=Masc|Number=Plur|PronType=Rel",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok7"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok26",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "nec", "udep::lemma": "neque",
             "udep::upostag": "ADV", "udep::xpostag": "Df",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok26"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok27",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "a", "udep::lemma": "ab",
             "udep::upostag": "ADP", "udep::xpostag": "R-",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok27"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok6",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "ne", "udep::lemma": "ne",
             "udep::upostag": "SCONJ", "udep::xpostag": "G-",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok6"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok3",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "recidamus", "udep::lemma": "recido#2",
             "udep::upostag": "VERB", "udep::xpostag": "V-",
             "udep::feats": "Mood=Sub|Number=Plur|Person=1|Tense=Pres|VerbForm=Fin|Voice=Act", "udep::deps": "root",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok3"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok8",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "reprehendimus",
             "udep::lemma": "repr(eh)endo", "udep::upostag": "VERB", "udep::xpostag": "V-",
             "udep::feats": "Mood=Ind|Number=Plur|Person=1|Tense=Pres|VerbForm=Fin|Voice=Act",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok8"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok30",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "intelligi", "udep::lemma": "intellego",
             "udep::upostag": "VERB", "udep::xpostag": "V-", "udep::feats": "Tense=Pres|VerbForm=Inf|Voice=Pass",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok30"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok28",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "disertissimis", "udep::lemma": "dissero",
             "udep::upostag": "ADJ", "udep::xpostag": "A-", "udep::feats": "Case=Abl|Degree=Sup|Gender=Masc|Number=Plur",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok28"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok31",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": ".", "udep::lemma": ".",
             "udep::upostag": "PUNCT", "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok31"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok9",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "imitemur", "udep::lemma": "imitor",
             "udep::upostag": "VERB", "udep::xpostag": "V-",
             "udep::feats": "Mood=Sub|Number=Plur|Person=1|Tense=Pres|VerbForm=Fin|Voice=Pass",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok9"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok10",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": ".", "udep::lemma": ".",
             "udep::upostag": "PUNCT", "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok10"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok29",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "possit", "udep::lemma": "possum",
             "udep::upostag": "VERB", "udep::xpostag": "V-",
             "udep::feats": "Mood=Sub|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin|Voice=Act",
             "id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok29"},
            {"annis::node_name": "urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok30",
             "annis::node_type": "node", "annis::type": "node", "annis::tok": "possit", "udep::lemma": "possum",
             "udep::upostag": "VERB", "udep::xpostag": "V-",
             "udep::feats": "Mood=Sub|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin|Voice=Act",
             "id": 1}
        ], "links": [
            {"udep::deprel": "nmod", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok1",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok3", "key": 0},
            {"udep::deprel": "nmod", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok1",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok4", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok1",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok2", "key": 0},
            {"udep::deprel": "nmod", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok3",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok4", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok3",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok4", "key": 1},
            {"udep::deprel": "iobj", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok7",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok6", "key": 0},
            {"udep::deprel": "aux", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok7",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok8", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok7",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok8", "key": 1},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok16",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok17", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok9",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok10", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok2",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok3", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok17",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok18", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok4",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok5", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok8",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok9", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok12",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok13", "key": 0},
            {"udep::deprel": "obl", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok10",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok6", "key": 0},
            {"udep::deprel": "obj:dir", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok10",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok9", "key": 0},
            {"udep::deprel": "advcl", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok10",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok14", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok10",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok11", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok3",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok4", "key": 0},
            {"udep::deprel": "case", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok13",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok12", "key": 0},
            {"udep::deprel": "advcl", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok13",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok21", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok13",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok14", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok18",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok19", "key": 0},
            {"udep::deprel": "advmod", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok5",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok1", "key": 0},
            {"udep::deprel": "discourse", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok5",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok2", "key": 0},
            {"udep::deprel": "nsubj", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok5",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok3", "key": 0},
            {"udep::deprel": "xcomp", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok5",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok10", "key": 0},
            {"annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok5",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok31", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok5",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok6", "key": 0},
            {"udep::deprel": "nsubj", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok9",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok1", "key": 0},
            {"udep::deprel": "cop", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok9",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok2", "key": 0},
            {"udep::deprel": "obj:dir", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok9",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok10", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok9",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok10", "key": 1},
            {"annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok9",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok11", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok11",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok12", "key": 0},
            {"udep::deprel": "nsubj:pass", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok14",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok11", "key": 0},
            {"udep::deprel": "obl:agent", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok14",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok13", "key": 0},
            {"udep::deprel": "aux:pass", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok14",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok15", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok14",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok15", "key": 1},
            {"udep::deprel": "mark", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok19",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok17", "key": 0},
            {"udep::deprel": "advmod", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok19",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok18", "key": 0},
            {"udep::deprel": "iobj", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok19",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok20", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok19",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok20", "key": 1},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok4",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok5", "key": 0},
            {"udep::deprel": "det", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok10",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok5", "key": 0},
            {"udep::deprel": "acl", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok10",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok7", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok10",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok11", "key": 0},
            {"udep::deprel": "cc", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok6",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok7", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok6",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok7", "key": 1},
            {"udep::deprel": "conj", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok6",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok8", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok15",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok16", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok7",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok8", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok20",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok21", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok11",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok1", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok5",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok6", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok8",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok9", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok22",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok23", "key": 0},
            {"udep::deprel": "nsubj", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok21",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok16", "key": 0},
            {"udep::deprel": "advcl", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok21",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok19", "key": 0},
            {"udep::deprel": "aux", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok21",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok22", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok21",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok22", "key": 1},
            {"udep::deprel": "advcl", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok21",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok29", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok1",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok2", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok6",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok7", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok4",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok5", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok23",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok24", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok2",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok3", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok1",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok2", "key": 0},
            {"udep::deprel": "det", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok25",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok24", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok25",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok26", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok24",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok25", "key": 0},
            {"udep::deprel": "nmod", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok5",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok4", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok5",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok6", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok2",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok3", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok7",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok8", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok26",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok27", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok27",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok28", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok6",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok7", "key": 0},
            {"udep::deprel": "cc", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok3",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok1", "key": 0},
            {"udep::deprel": "nsubj", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok3",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok2", "key": 0},
            {"udep::deprel": "obj:dir", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok3",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok5", "key": 0},
            {"udep::deprel": "advcl", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok3",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok9", "key": 0},
            {"annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok3",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok10", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok3",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok4", "key": 0},
            {"udep::deprel": "obj:dir", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok8",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok7", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok8",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok9", "key": 0},
            {"udep::deprel": "obl:agent", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok30",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok28", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok30",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok31", "key": 0},
            {"udep::deprel": "case", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok28",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok27", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok28",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok29", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok31",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok1", "key": 0},
            {"udep::deprel": "mark", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok9",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok6", "key": 0},
            {"udep::deprel": "obj:dir", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok9",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok8", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok9",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159695tok10", "key": 0},
            {"udep::deprel": "mark", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok29",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok23", "key": 0},
            {"udep::deprel": "nsubj", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok29",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok25", "key": 0},
            {"udep::deprel": "advmod", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok29",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok26", "key": 0},
            {"udep::deprel": "xcomp", "annis::component_name": "dep", "annis::component_type": "Pointing",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok29",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok30", "key": 0},
            {"annis::component_name": "", "annis::component_type": "Ordering",
             "source": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok29",
             "target": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok30", "key": 1}]},
                                     "solutions": [{"target": {"sentence_id": 159692, "token_id": 7,
                                                               "salt_id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok7",
                                                               "content": "praecepturus"},
                                                    "value": {"sentence_id": 0, "token_id": 0, "content": None,
                                                              "salt_id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok1"}},
                                                   {
                                                       "target": {"sentence_id": 159692, "token_id": 9,
                                                                  "salt_id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok9",
                                                                  "content": "aestimare"},
                                                       "value": {"sentence_id": 0, "token_id": 0, "content": None,
                                                                 "salt_id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok1"}},
                                                   {
                                                       "target": {"sentence_id": 159693, "token_id": 5,
                                                                  "salt_id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159693tok5",
                                                                  "content": "debet"},
                                                       "value": {"sentence_id": 0, "token_id": 0, "content": None,
                                                                 "salt_id": "salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent159692tok1"}}],
                                     "conll": "# newdoc id = /var/folders/30/yqnv6lz56r14dqhpw18knn2r0000gp/T/tmp7qn86au9\n# sent_id = 1\n# text = Caesar fortis est.\n1\tCaesar\tCaeso\tVERB\tC1|grn1|casA|gen1|stAN\tCase=Nom|Degree=Pos|Gender=Masc|Number=Sing\t2\tcsubj\t_\t_\n2\tfortis\tfortis\tADJ\tC1|grn1|casA|gen1|stAN\tCase=Nom|Degree=Pos|Gender=Masc|Number=Sing\t0\troot\troot\t_\n3\test\tsum\tAUX\tN3|modA|tem1|gen6|stAV\tMood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin|Voice=Act\t2\tcop\t_\tSpaceAfter=No\n4\t.\t.\tPUNCT\tPunc\t_\t2\tpunct\t_\t_\n\n# sent_id = 2\n# text = Galli moriuntur.\n1\tGalli\tGallus\tPRON\tF1|grn1|casJ|gen1|stPD\tCase=Nom|Degree=Pos|Gender=Masc|Number=Plur|PronType=Dem\t2\tnsubj:pass\t_\t_\n2\tmoriuntur\tmorior\tVERB\tL3|modJ|tem1|gen9|stAV\tMood=Ind|Number=Plur|Person=3|Tense=Pres|VerbForm=Fin|Voice=Pass\t0\troot\troot\tSpaceAfter=No\n3\t.\t.\tPUNCT\tPunc\t_\t2\tpunct\t_\tSpacesAfter=\\n\n\n"}
    
        app_dict: Dict[str, TestHelper] = {}
        aqls: List[str] = ["=".join([Phenomenon.partOfSpeech.value, '"{0}"'.format(
            AnnotationService.phenomenon_map[Phenomenon.partOfSpeech][PartOfSpeech.verb.name][0])])]
    
        graph_data: GraphData = AnnotationService.map_graph_data(annis_response_dict["graph_data_raw"])
        annis_response: AnnisResponse = AnnisResponse(graph_data=graph_data)
        corpora: List[Corpus] = [
    
            CorpusMC.from_dict(title="title1", source_urn="urn1", author="author1",
                               citation_level_1=CitationLevel.default.value),
            CorpusMC.from_dict(title="title2", source_urn="urn2", author="author2",
                               citation_level_1=CitationLevel.default.value)]
    
        cts_capabilities_xml: str = '<GetCapabilities xmlns="http://chs.harvard.edu/xmlns/cts"><request><requestName>GetInventory</requestName><requestFilters>urn=urn:cts:latinLit</requestFilters></request><reply><ti:TextInventory xmlns:ti=\'http://chs.harvard.edu/xmlns/cts\'><ti:textgroup urn=\'urn:cts:latinLit:phi0660\' xmlns:ti=\'http://chs.harvard.edu/xmlns/cts\'><ti:groupname xml:lang=\'eng\'>Tibullus</ti:groupname><ti:groupname xml:lang=\'lat\'>Corpus Tibullianum</ti:groupname><ti:work xml:lang="lat" urn=\'urn:cts:latinLit:phi0660.phi001\' groupUrn=\'urn:cts:latinLit:phi0660\' xmlns:ti=\'http://chs.harvard.edu/xmlns/cts\'><ti:title xml:lang=\'lat\'>Elegiae</ti:title><ti:edition urn=\'urn:cts:latinLit:phi0660.phi001.perseus-lat2\' workUrn=\'urn:cts:latinLit:phi0660.phi001\' xmlns:ti=\'http://chs.harvard.edu/xmlns/cts\'><ti:label xml:lang=\'eng\'>Elegiae, Aliorumque carminum libri tres</ti:label><ti:description xml:lang=\'eng\'>Tibullus, creator; Postgate, J. P. (John Percival), 1853- 1926, editor </ti:description><ti:online><ti:citationMapping><ti:citation label="book" xpath="/tei:div[@n=\'?\']" scope="/tei:TEI/tei:text/tei:body/tei:div"><ti:citation label="poem" xpath="/tei:div[@n=\'?\']" scope="/tei:TEI/tei:text/tei:body/tei:div/tei:div[@n=\'?\']"><ti:citation label="line" xpath="//tei:l[@n=\'?\']" scope="/tei:TEI/tei:text/tei:body/tei:div/tei:div[@n=\'?\']/tei:div[@n=\'?\']"></ti:citation></ti:citation></ti:citation></ti:citationMapping></ti:online></ti:edition></ti:work><ti:work xml:lang="lat" urn=\'urn:cts:latinLit:phi0660.phi003\' groupUrn=\'urn:cts:latinLit:phi0660\' xmlns:ti=\'http://chs.harvard.edu/xmlns/cts\'> </ti:work></ti:textgroup></ti:TextInventory></reply></GetCapabilities>'
        cts_passage_xml: str = '<GetPassage xmlns:tei="http://www.tei-c.org/ns/1.0" xmlns="http://chs.harvard.edu/xmlns/cts"><request><requestName>GetPassage</requestName><requestUrn>urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.1-1.1.2</requestUrn></request><reply><urn>urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.1-1.1.2</urn><passage><TEI xmlns="http://www.tei-c.org/ns/1.0"><text><body><div type="edition" xml:lang="lat" n="urn:cts:latinLit:phi0448.phi001.perseus-lat2"><div n="1" type="textpart" subtype="book"><div type="textpart" subtype="chapter" n="1"><div type="textpart" subtype="section" n="1"><p>Gallia est omnis divisa in partes tres, quarum unam incolunt Belgae, aliam Aquitani, tertiam qui ipsorum lingua Celtae, nostra Galli appellantur.</p></div><div type="textpart" subtype="section" n="2"><p>Hi omnes lingua, institutis, legibus inter se differunt. Gallos ab Aquitanis Garumna flumen, a Belgis Matrona et Sequana dividit.</p></div></div></div></div></body></text></TEI></passage></reply></GetPassage>'
        cts_passage_xml_1_level: str = '<GetPassage xmlns:tei="http://www.tei-c.org/ns/1.0" xmlns="http://chs.harvard.edu/xmlns/cts"><request><requestName>GetPassage</requestName><requestUrn>urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1-1.2</requestUrn></request><reply><urn>urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1-1.2</urn><passage><TEI xmlns="http://www.tei-c.org/ns/1.0"><text><body><div type="edition" xml:lang="lat" n="urn:cts:latinLit:phi0448.phi001.perseus-lat2"><div n="1" type="textpart" subtype="book"><p>Gallia est omnis divisa in partes tres, quarum unam incolunt Belgae, aliam Aquitani, tertiam qui ipsorum lingua Celtae, nostra Galli appellantur.</p></div><div n="2" type="textpart" subtype="book"><p>Gallia est omnis divisa in partes tres, quarum unam incolunt Belgae, aliam Aquitani, tertiam qui ipsorum lingua Celtae, nostra Galli appellantur.</p></div><div n="3" type="textpart" subtype="book"><p>Gallia est omnis divisa in partes tres, quarum unam incolunt Belgae, aliam Aquitani, tertiam qui ipsorum lingua Celtae, nostra Galli appellantur.</p></div></div></body></text></TEI></passage></reply></GetPassage>'
        cts_passage_xml_2_levels: str = '<GetPassage xmlns:tei="http://www.tei-c.org/ns/1.0" xmlns="http://chs.harvard.edu/xmlns/cts"><request><requestName>GetPassage</requestName><requestUrn>urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1-1.2</requestUrn></request><reply><urn>urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1-1.2</urn><passage><TEI xmlns="http://www.tei-c.org/ns/1.0"><text><body><div type="edition" xml:lang="lat" n="urn:cts:latinLit:phi0448.phi001.perseus-lat2"><div n="1" type="textpart" subtype="book"><div type="textpart" subtype="section" n="1"><p>Gallia est omnis divisa in partes tres, quarum unam incolunt Belgae, aliam Aquitani, tertiam qui ipsorum lingua Celtae, nostra Galli appellantur.</p></div></div></div></body></text></TEI></passage></reply></GetPassage>'
        cts_reff_xml: str = '<GetValidReff xmlns:tei="http://www.tei-c.org/ns/1.0" xmlns="http://chs.harvard.edu/xmlns/cts"><request><requestName>GetValidReff</requestName><requestUrn>urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1</requestUrn><requestLevel>3</requestLevel></request><reply><reff><urn>urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.1</urn><urn>urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.2</urn><urn>urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.3</urn><urn>urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.4</urn><urn>urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.5</urn><urn>urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.6</urn><urn>urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.7</urn></reff></reply></GetValidReff>'
    
        exercise: Exercise = ExerciseMC.from_dict(
            eid="test", last_access_time=datetime.utcnow().timestamp(), exercise_type='ddwtos',
    
            search_values=f'["{Phenomenon.case.name}={Case.accusative.name}", "{Phenomenon.dependency.name}={Dependency.object.name}", "{Phenomenon.lemma.name}=bellum", "{Phenomenon.dependency.name}={Dependency.root.name}"]',
    
            language=Language.English.value,
    
            conll="# newdoc id = /var/folders/30/yqnv6lz56r14dqhpw18knn2r0000gp/T/tmp7qn86au9\n# newpar\n# sent_id = 1\n# text = Caesar fortis est.\n1\tCaesar\tCaeso\tVERB\tC1|grn1|casA|gen1|stAN\tCase=Nom|Degree=Pos|Gender=Masc|Number=Sing\t2\tcsubj\t_\t_\n2\tfortis\tfortis\tADJ\tC1|grn1|casA|gen1|stAN\tCase=Nom|Degree=Pos|Gender=Masc|Number=Sing\t0\troot\t_\t_\n3\test\tsum\tAUX\tN3|modA|tem1|gen6|stAV\tMood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin|Voice=Act\t2\tcop\t_\tSpaceAfter=No\n4\t.\t.\tPUNCT\tPunc\t_\t2\tpunct\t_\t_\n\n# sent_id = 2\n# text = Galli moriuntur.\n1\tGalli\tGallus\tPRON\tF1|grn1|casJ|gen1|stPD\tCase=Nom|Degree=Pos|Gender=Masc|Number=Plur|PronType=Dem\t2\tnsubj:pass\t_\t_\n2\tmoriuntur\tmorior\tVERB\tL3|modJ|tem1|gen9|stAV\tMood=Ind|Number=Plur|Person=3|Tense=Pres|VerbForm=Fin|Voice=Pass\t0\troot\t_\tSpaceAfter=No\n3\t.\t.\tPUNCT\tPunc\t_\t2\tpunct\t_\tSpacesAfter=\\n\n\n",
            solutions=json.dumps([
                Solution(target=SolutionElement(
                    sentence_id=1, token_id=1, content="praecepturus",
                    salt_id="salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent1tok1"),
                    value=SolutionElement(
                        sentence_id=1, token_id=2, content="Caesar",
                        salt_id="salt:/urn:custom:latinLit:proiel.pal-agr.lat:1.1.1/doc1#sent1tok2")).serialize()
            ]).replace(" ", ""),
            urn=f"{CustomCorpusService.custom_corpora[4].corpus.source_urn}:2.23.1-2.23.1")
        exercise_data: ExerciseData = ExerciseData(
            graph=GraphData(directed=False, graph={}, links=[
                LinkMC(annis_component_name=Config.GRAPHANNIS_DEPENDENCY_LINK, annis_component_type="act",
                       source="doc1#sent1tok1", target="doc1#sent1tok2", udep_deprel="uddr")],
                            multigraph=False, nodes=[
                    NodeMC(annis_node_name="ann", annis_node_type="ant", annis_tok="atk", annis_type="atp",
                           node_id="doc1#sent1tok1", udep_upostag="udupt", udep_xpostag="udxpt", udep_feats="udf",
                           udep_lemma="udl"),
                    NodeMC(annis_node_name="ann", annis_node_type="ant", annis_tok="atk", annis_type="atp",
                           node_id="doc1#sent1tok2", udep_upostag="udupt", udep_xpostag="udxpt", udep_feats="udf",
                           udep_lemma="udl")]), uri="/test", solutions=[])
        exercise_pdf: bytes = b'%PDF-1.4\n%\x93\x8c\x8b\x9e ReportLab Generated PDF document http://www.reportlab.com\n1 0 obj\n<<\n/F1 2 0 R\n>>\nendobj\n2 0 obj\n<<\n/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font\n>>\nendobj\n3 0 obj\n<<\n/BitsPerComponent 1 /ColorSpace /DeviceGray /Filter [ /ASCII85Decode ] /Height 23 /Length 223 /Subtype /Image \n  /Type /XObject /Width 24\n>>\nstream\n\n            003B00 002700 002480 0E4940 114920 14B220 3CB650\n            75FE88 17FF8C 175F14 1C07E2 3803C4 703182 F8EDFC\n            B2BBC2 BB6F84 31BFC2 18EA3C 0E3E00 07FC00 03F800\n            1E1800 1FF800>\n            endstream\nendobj\n4 0 obj\n<<\n/Contents 8 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 7 0 R /Resources <<\n/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<\n/FormXob.c7485dcc8d256a6f197ed7802687f252 3 0 R\n>>\n>> /Rotate 0 /Trans <<\n\n>> \n  /Type /Page\n>>\nendobj\n5 0 obj\n<<\n/PageMode /UseNone /Pages 7 0 R /Type /Catalog\n>>\nendobj\n6 0 obj\n<<\n/Author () /CreationDate'
        exercise_xml: str = '<quiz>   <question type="matching">       <name>           <text></text>       </name>       <questiontext format="html">           <text><![CDATA[<br><p></p><p></p><br><br>]]></text>       </questiontext>       <generalfeedback format="html">           <text></text>       </generalfeedback>       <defaultgrade>1.0000000</defaultgrade>       <penalty>0.1000000</penalty>       <hidden>0</hidden>       <shuffleanswers>1</shuffleanswers>       <correctfeedback format="html">           <text></text>       </correctfeedback>       <partiallycorrectfeedback format="html">           <text></text>       </partiallycorrectfeedback>       <incorrectfeedback format="html">           <text></text>       </incorrectfeedback>       <shownumcorrect/>              <tags></tags>   </question></quiz>'
        graph_data_raw_part: str = '{"directed":true,"multigraph":true,"graph":{},"nodes":[{"annis::node_name":"'
        h5p_json_cloze: str = '{"textField":"*Caesar* fortis est. Galli moriuntur."}'
        h5p_json_matching: str = '{"textField":"praecepturus *Caesar*\\n"}'
        h5p_json_fill_blanks_1: Tuple[str, str] = ("1_en",
                                                   '{"questions": [ "<p>Gaius --> *C.* --> *make*<\/p>", "<p>scribo --> *scribere* --> *write*<\/p>", "<p>commoveri --> *commovere* --> *move / unsettle*<\/p>", "<p>gaudeas --> *gaudere* --> *rejoice / be glad*<\/p>" ], "showSolutions": "Show solutions", "tryAgain": "Try again", "text": "<p><b>Vocabulary knowledge<\/b><br>Fill in the basic form and give a translation of this form.</p>\\n"}')
        h5p_json_fill_blanks_3: Tuple[str, str] = ("3_en",
                                                   '{"questions": [ "<p>signum --> *sign*<\/p>", "<p>vas --> *jar*<\/p>", "<p>condicio --> *condition / requirement / term*<\/p>", "<p>clarus --> *clear / bright*<\/p>" ], "showSolutions": "Show solutions", "tryAgain": "Try again", "text": "<p>Translate this word of origin:<\/p>\\n"}')
        h5p_json_fill_blanks_4: Tuple[str, str] = ("4_en",
                                                   '{"questions": [ "<p>deducere --> *de*-*ducere* --> *lead away*<\/p>", "<p>commovere --> *com / cum*-*movere* --> *move / to move*<\/p>", "<p>praeclarus --> *prae*-*clarus* --> *highly famous / famous*" ], "showSolutions": "Show solutions", "tryAgain": "Try again", "text": "<p>Break down the compounds into their components and give a possible English translation:<\/p>\\n"}')
        h5p_json_fill_blanks_13: Tuple[str, str] = ("13_en",
                                                    '{"questions": [ "<p>Name the Latin phrase for \\"your efficiency\\".<br> *istam virtutem*<\/p>", "<p>Which English word corresponds to the Latin combination of words \\"moderationem animi\\"?<br> *serenity / the serenity / your serenity*<\/p>", "<p>Who sees and hears of the efficiency of Quintus? Indicate the appropriate genitive attributes.<br> *clarissimae provinciae* and *omnium gentium ac nationum*<\/p>" ], "showSolutions": "Show solutions", "tryAgain": "Try again", "text": "<p><b><i>Quid autem reperiri tam eximium aut tam expetendum potest quam istam virtutem, moderationem animi, temperantiam [...] in luce Asiae, in oculis clarissimae provinciae atque in auribus omnium gentium ac nationum esse positam?<\/i><\/b><\/p><br><p>But what can turn out to be greater and more desirable than that your efficiency, your serenity and your modesty [...] were spread out in the public of the province of Asia, before the eyes of the highly famous province and before the ears of all tribes and peoples?<\/p>\\n"}')
        h5p_json_multi_choice: str = '{"answers":[{"correct":false,"text":"<div>He is satisfied.<\/div>\\n","tipsAndFeedback":{"tip":"","chosenFeedback":"","notChosenFeedback":""}},{"correct":true,"text":"<div>It is enough.<\/div>\\n","tipsAndFeedback":{"tip":"","chosenFeedback":"","notChosenFeedback":""}},{"correct":false,"text":"<div>He has enough.<\/div>\\n","tipsAndFeedback":{"tip":"","chosenFeedback":"","notChosenFeedback":""}}],"question":"<p>Choose the correct meaning:<\/p><p><em>satis est.<\/em><\/p>\\n"}'
        h5p_json_multi_choice_2: str = '{"answers":[{"correct":true,"text":"<div>provincia</div>\\n","tipsAndFeedback":{"tip":"","chosenFeedback":"","notChosenFeedback":""}},{"correct":true,"text":"<div>civis</div>\\n","tipsAndFeedback":{"tip":"","chosenFeedback":"","notChosenFeedback":""}},{"correct":true,"text":"<div>socius</div>\\n","tipsAndFeedback":{"tip":"","chosenFeedback":"","notChosenFeedback":""}},{"correct":true,"text":"<div>publicus</div>\\n","tipsAndFeedback":{"tip":"","chosenFeedback":"","notChosenFeedback":""}},{"correct":false,"text":"<div>adventus</div>\\n","tipsAndFeedback":{"tip":"","chosenFeedback":"","notChosenFeedback":""}},{"correct":false,"text":"<div>omnis</div>\\n","tipsAndFeedback":{"tip":"","chosenFeedback":"","notChosenFeedback":""}},{"correct":false,"text":"<div>autem</div>\\n","tipsAndFeedback":{"tip":"","chosenFeedback":"","notChosenFeedback":""}},{"correct":false,"text":"<div>res</div>\\n","tipsAndFeedback":{"tip":"","chosenFeedback":"","notChosenFeedback":""}}],"question":"<p>Choose words (4) that belong to the word field <b>government</b>:</p>\\n"}'
        h5p_json_multi_choice_9: Tuple[str, str] = ("9_en",
                                                    '{"answers": [ { "correct": true, "text": "<div>provincia<\/div>\\n", "tipsAndFeedback": { "tip": "", "chosenFeedback": "", "notChosenFeedback": "" } }, { "correct": true, "text": "<div>civis<\/div>\\n", "tipsAndFeedback": { "tip": "", "chosenFeedback": "", "notChosenFeedback": "" } }, { "correct": true, "text": "<div>socius<\/div>\\n", "tipsAndFeedback": { "tip": "", "chosenFeedback": "", "notChosenFeedback": "" } }, { "correct": true, "text": "<div>publicus<\/div>\\n", "tipsAndFeedback": { "tip": "", "chosenFeedback": "", "notChosenFeedback": "" } }, { "correct": false, "text": "<div>adventus<\/div>\\n", "tipsAndFeedback": { "tip": "", "chosenFeedback": "", "notChosenFeedback": "" } }, { "correct": false, "text": "<div>omnis<\/div>\\n", "tipsAndFeedback": { "tip": "", "chosenFeedback": "", "notChosenFeedback": "" } }, { "correct": false, "text": "<div>autem<\/div>\\n", "tipsAndFeedback": { "tip": "", "chosenFeedback": "", "notChosenFeedback": "" } }, { "correct": false, "text": "<div>res<\/div>\\n", "tipsAndFeedback": { "tip": "", "chosenFeedback": "", "notChosenFeedback": "" } } ], "question": "<p>Choose words (4) that belong to the word field <b>government</b>:<\/p>\\n"}')
        h5p_json_voc_list: str = '{"questions":["<p><h4>atque </h4> *and : and*</p>"]}'
        headers_form_data: dict = {"Content-Type": "application/x-www-form-urlencoded"}
        kwic_svg: bytes = b'"<svg height=\\"360\\" id=\\"svg1\\" width=\\"1252\\">'
        nodes: List[dict] = [{"annis::node_name": "urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.1-1.1.1/doc1#sent1tok1",
                              "annis::node_type": "node", "annis::type": "node", "annis::tok": "Caesar",
                              "udep::upostag": "VERB", "udep::xpostag": "L3|modJ|tem3|gen4|stAV",
                              "udep::feats": "Mood=Ind|Number=Sing|Person=1|Tense=Fut|VerbForm=Fin|Voice=Pass",
                              "id": "salt:/urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.1-1.1.1/doc1#sent1tok1"},
                             {"annis::node_name": "urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.1-1.1.1/doc1#sent1tok5",
                              "annis::node_type": "node", "annis::type": "node", "annis::tok": "sunt",
                              "udep::upostag": "AUX", "udep::xpostag": "N3|modA|tem1|gen9|stAV",
                              "udep::feats": "Mood=Ind|Number=Plur|Person=3|Tense=Pres|VerbForm=Fin|Voice=Act",
                              "id": "salt:/urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.1-1.1.1/doc1#sent1tok5"},
                             {"annis::node_name": "urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.1-1.1.1/doc1#sent1tok4",
                              "annis::node_type": "node", "annis::type": "node", "annis::tok": "fortes",
                              "udep::upostag": "NOUN", "udep::xpostag": "C1|grn1|casJ|gen2|stRS",
                              "udep::feats": "Case=Nom|Degree=Pos|Gender=Fem|Number=Plur",
                              "id": "salt:/urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.1-1.1.1/doc1#sent1tok4"},
                             {"annis::node_name": "urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.1-1.1.1/doc1#sent1tok2",
                              "annis::node_type": "node", "annis::type": "node", "annis::tok": "et",
                              "udep::upostag": "CCONJ", "udep::xpostag": "O4|stRL",
                              "id": "salt:/urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.1-1.1.1/doc1#sent1tok2"},
                             {"annis::node_name": "urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.1-1.1.1/doc1#sent1tok6",
                              "annis::node_type": "node", "annis::type": "node", "annis::tok": ".",
                              "udep::upostag": "PUNCT", "udep::xpostag": "Punc",
                              "id": "salt:/urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.1-1.1.1/doc1#sent1tok6"},
                             {"annis::node_name": "urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.1-1.1.1/doc1#sent1tok3",
                              "annis::node_type": "node", "annis::type": "node", "annis::tok": "Galli",
                              "udep::upostag": "VERB", "udep::xpostag": "L3|modQ|tem1|stAC",
                              "udep::feats": "Tense=Pres|VerbForm=Inf|Voice=Pass",
                              "id": "salt:/urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.1-1.1.1/doc1#sent1tok3"}]
        proper_nouns: List[str] = ['Alcibiades', 'Carthago', 'Gallia', 'Graecus', 'Hermes', 'Iuppiter', 'Maria', 'Pollux',
                                   'Romanus', 'Solomon', 'amor']
        raw_text: str = "Caesar fortis est. Galli moriuntur."
        static_exercises_udpipe_string: str = "1\tscribere\tscribere\n1\tcommovere\tcommovere\n1\tC\tC\n1\tgaudere\tgaudere\n1\tsignum\tsignum\n1\tvas\tvas\n1\tclarus\tclarus\n1\tcondicio\tcondicio\n1\tcom\tcum\n1\tprae\tprae\n1\tmovere\tmovere\n1\tducere\tducere\n1\tde\tde\n1\tcum\tcum\n1\tistam\tiste\n1\tnationum\tnatio\n1\tclarissimae\tclarus\n1\tmoderationem\tmoderatio\n1\tanimi\tanimus\n1\tomnium\tomnis\n1\tgentium\tgens\n1\tac\tac\n1\tvirtutem\tvirtus\n1\tprovinciae\tprovincia\n1\tCaesar\tCaesar\n1\test\tesse\n1\tsatis\tsatis\n1\tgovernment\tgovernment\n1\tsocius\tsocius\n1\tprovincia\tprovincia\n1\tpublicus\tpublicus\n1\tcivis\tcivis\n1\tatque\tatque"
    
        subgraph_json: str = '{"directed":true,"exercise_id":"","exercise_type":"","frequency_analysis":[],"graph":{},"links":[],"multigraph":true,"nodes":[{"annis_node_name":"urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.1-1.1.1/doc1#sent1tok3","annis_node_type":"node","annis_tok":"Galli","annis_type":"node","id":"salt:/urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.1-1.1.1/doc1#sent1tok3","udep_lemma":"Gallo","udep_upostag":"VERB","udep_xpostag":"L3|modQ|tem1|stAC","udep_feats":"Tense=Pres|VerbForm=Inf|Voice=Pass","solution":"","is_oov":null}],"solutions":[],"text_complexity":{},"uri":""}'
    
        test_args: List[str] = ["tests.py", "-test"]
        text_complexity_json_string: str = '{"n_w":52,"pos":11,"n_sent":3,"avg_w_per_sent":17.33,"avg_w_len":5.79,"n_punct":3,"n_types":48,"lex_den":0.73,"n_clause":1,"n_subclause":0,"n_abl_abs":0,"n_gerund":1,"n_inf":1,"n_part":1,"all":54.53}'
        text_list: List[Tuple[str, str]] = [("urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.1", raw_text.split(".")[0]),
                                            ("urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.2", raw_text.split(".")[1])]
        text_parts: List[TextPart] = [
            TextPart(citation=Citation(level=CitationLevel.book, label="2", value=2), text_value="text", sub_text_parts=[
                TextPart(
                    citation=Citation(level=CitationLevel.chapter, label="23", value=23), text_value="inner text",
                    sub_text_parts=[
                        TextPart(citation=Citation(level=CitationLevel.section, label="1", value=1),
                                 text_value="subtext"),
                        TextPart(citation=Citation(level=CitationLevel.section, label="2", value=2))])])]
        udpipe_string: str = "# newpar\n# sent_id = 1\n# text = Caesar fortis est.\n1\tCaesar\tCaeso\tVERB\tC1|grn1|casA|gen1|stAN\tCase=Nom|Degree=Pos|Gender=Masc|Number=Sing\t2\tcsubj\t_\t_\n2\tfortis\tfortis\tADJ\tC1|grn1|casA|gen1|stAN\tCase=Nom|Degree=Pos|Gender=Masc|Number=Sing\t0\troot\t_\t_\n3\test\tsum\tAUX\tN3|modA|tem1|gen6|stAV\tMood=Ind|Number=Sing|Person=3|Tense=Pres|VerbForm=Fin|Voice=Act\t2\tcop\t_\tSpaceAfter=No\n4\t.\t.\tPUNCT\tPunc\t_\t2\tpunct\t_\t_\n\n# sent_id = 2\n# text = Galli moriuntur.\n1\tGalli\tGallus\tPRON\tF1|grn1|casJ|gen1|stPD\tCase=Nom|Degree=Pos|Gender=Masc|Number=Plur|PronType=Dem\t2\tnsubj:pass\t_\t_\n2\tmoriuntur\tmorior\tVERB\tL3|modJ|tem1|gen9|stAV\tMood=Ind|Number=Plur|Person=3|Tense=Pres|VerbForm=Fin|Voice=Pass\t0\troot\t_\tSpaceAfter=No\n3\t.\t.\tPUNCT\tPunc\t_\t2\tpunct\t_\tSpacesAfter=\\n\n\n"
        urn: str = "urn:cts:latinLit:phi0448.phi001.perseus-lat2:1.1.1-1.1.2"
        urn_custom: str = f"{CustomCorpusService.custom_corpora[4].corpus.source_urn}:2.23.1-2.23.1"
        xapi_json_string: str = '{"0":{"actor":{"account":{"name":"9a7eef78-b0b4-471d-b451-e47c9b20d231"},"objectType":"Agent"},"verb":{"id":"http://adlnet.gov/expapi/verbs/answered","display":{"en-US":"answered"}},"object":{"objectType":"Activity","definition":{"extensions":{"http://h5p.org/x-api/h5p-local-content-id":1},"interactionType":"fill-in","type":"http://adlnet.gov/expapi/activities/cmi.interaction","description":{"en-US":"<p>Matching: Assign the matching elements to each other!</p><br/>divisa __________<br/>dividit __________<br/>"},"correctResponsesPattern":["partes[,]Belgis"]}},"context":{"contextActivities":{"category":[{"id":"http://h5p.org/libraries/H5P.DragText-1.8","objectType":"Activity"}]}},"result":{"response":"Belgis[,]","score":{"min":0,"raw":0,"max":2,"scaled":0},"duration":"PT4.12S","completion":true}}}'
    
        @staticmethod
        def mock_add_eges(keys: List[str], w2v: Word2Vec, nearest_neighbor_count: int, min_count: int, graph: Graph):
            graph.add_edge("ueritas", "uera")