Stoicheia-code / tests /test_insc_lacuna.py
Ericu950's picture
Stoicheia: training and evaluation code
5952424 verified
Raw
History Blame Contribute Delete
3.26 kB
"""Whole-document lacuna handling: text_to_full_planes (iphi.py + papyri.py) must mark real
'-'/'...' damage runs distinctly from synthetically-maskable known text, with the exact known
length for '-' and a random stand-in width for '...' (unknown length)."""
import sys
from pathlib import Path
import numpy as np
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "insc" / "data"))
import iphi
import papyri
MASK, UNK_BND = 24, 3
def test_iphi_known_length_dash_run_marked_real_lacuna():
text = "λογος--ετερος" # 2-char real lacuna between two known words
out = iphi.text_to_full_planes(text)
assert out is not None
chars, boundary, dia, cap, punct, is_real = out
n_lacuna = int(is_real.sum())
assert n_lacuna == 2, "a '-' run's length is KNOWN -- must match the dash count exactly"
assert (chars[is_real] == MASK).all()
assert (boundary[is_real] == UNK_BND).all()
assert (~is_real).any(), "the surrounding known text must not be marked as lacuna"
assert len(cap) == len(chars)
def test_iphi_no_lacuna_when_no_dash():
out = iphi.text_to_full_planes("λογος ετερος")
assert out is not None
_, _, _, _, _, is_real = out
assert not is_real.any()
def test_papyri_dash_run_exact_length():
rng = np.random.default_rng(0)
text = "λογος---ετερος" # 3-char real lacuna, known length
out = papyri.text_to_full_planes(text, rng)
assert out is not None
chars, boundary, dia, cap, punct, is_real = out
assert int(is_real.sum()) == 3
assert (chars[is_real] == papyri.MASK).all()
assert len(cap) == len(chars)
def test_papyri_ellipsis_gets_random_stand_in_width_in_range():
rng = np.random.default_rng(0)
widths = []
for _ in range(30):
out = papyri.text_to_full_planes("λογος…ετερος", rng)
assert out is not None
_, _, _, _, _, is_real = out
widths.append(int(is_real.sum()))
assert all(papyri.ELLIPSIS_STAND_IN_MIN <= w <= papyri.ELLIPSIS_STAND_IN_MAX for w in widths)
assert len(set(widths)) > 1, "stand-in width should vary per draw, not be a fixed constant"
def test_papyri_mixed_dash_and_ellipsis_in_one_text():
rng = np.random.default_rng(0)
text = "αλφα--βητα…γαμμα"
out = papyri.text_to_full_planes(text, rng)
assert out is not None
chars, boundary, dia, cap, punct, is_real = out
# two separate lacuna runs, both real, both MASK
assert is_real.any()
assert (chars[is_real] == papyri.MASK).all()
# some known text survives on both sides
assert (~is_real).any()
def test_iphi_cap_plane_captured_not_discarded():
"""Regression test: text_to_full_planes used to silently discard the capitalization
plane (assigned to a throwaway `_cp` variable) -- train/collate.py needs rec["cap"] for
aux-label supervision, so this must be a real, correctly-sized array."""
out = iphi.text_to_full_planes("Λογος ετερος")
chars, boundary, dia, cap, punct, is_real = out
assert cap.dtype == chars.dtype or cap.shape == chars.shape
assert cap.sum() > 0, "the capitalized first letter must be reflected in the cap plane"