59 lines
2.2 KiB
Python
59 lines
2.2 KiB
Python
from __future__ import annotations
|
||
|
||
import pytest
|
||
|
||
from packs import load_pack_entries
|
||
from morphology.registry import MorphologyRegistry, load_morphology
|
||
|
||
|
||
def test_hebrew_morphology_registry_loads_triliteral_roots():
|
||
registry = load_morphology("he_logos_micro_v1")
|
||
|
||
assert len(registry) == len(load_pack_entries("he_logos_micro_v1"))
|
||
davar = registry.require("he-morph-001")
|
||
assert davar.surface == "\u05d3\u05d1\u05e8"
|
||
assert davar.root == "\u05d3-\u05d1-\u05e8"
|
||
assert davar.inflection["gender"] == "masculine"
|
||
devarim = registry.require("he-morph-008")
|
||
assert devarim.surface == "\u05d3\u05d1\u05e8\u05d9\u05dd"
|
||
assert devarim.root == davar.root
|
||
assert devarim.suffix_chain == ("\u05d9\u05dd",)
|
||
assert devarim.inflection["number"] == "plural"
|
||
pointed_or = registry.require("he-morph-009")
|
||
assert pointed_or.surface == "אוֹר"
|
||
assert pointed_or.root == "א-ו-ר"
|
||
assert pointed_or.inflection["pointing"] == "tiberian"
|
||
|
||
|
||
def test_greek_morphology_registry_preserves_ordered_prefix_and_suffix():
|
||
registry = load_morphology("grc_logos_micro_v1")
|
||
|
||
aletheia = registry.for_surface("\u1f00\u03bb\u03ae\u03b8\u03b5\u03b9\u03b1")
|
||
assert aletheia is not None
|
||
assert aletheia.prefix_chain == ("\u1f00",)
|
||
assert aletheia.stem == "\u03bb\u03b7\u03b8\u03b5\u03b9"
|
||
assert aletheia.suffix_chain == ("\u03b1",)
|
||
assert aletheia.inflection["case"] == "nominative"
|
||
|
||
|
||
def test_depth_pack_lexicon_entries_resolve_morphology_ids():
|
||
registry = load_morphology("he_logos_micro_v1")
|
||
entries = load_pack_entries("he_logos_micro_v1")
|
||
|
||
assert all(entry.morphology_id for entry in entries)
|
||
for entry in entries:
|
||
morph = registry.require(entry.morphology_id or "")
|
||
assert morph.surface == entry.surface
|
||
assert morph.lemma == entry.lemma
|
||
|
||
|
||
def test_pack_without_morphology_returns_empty_registry():
|
||
registry = load_morphology("en_minimal_v1")
|
||
assert len(registry) == 0
|
||
assert registry.get("missing") is None
|
||
|
||
|
||
def test_morphology_registry_rejects_duplicate_ids():
|
||
entry = load_morphology("he_logos_micro_v1").require("he-morph-001")
|
||
with pytest.raises(ValueError, match="Duplicate morphology_id"):
|
||
MorphologyRegistry([entry, entry])
|