Venket / tests /test_discovery.py
venki101's picture
Add files using upload-large-folder tool
1a12965 verified
Raw History Blame Contribute Delete
3.4 kB
"""Integration tests for template and signature dataset discovery against the real bundled assets."""
from __future__ import annotations
from src.signatures.signature_dataset import SignatureDataset
from src.templates.template_loader import TemplateLoader
import numpy as np
def test_template_loader_discovers_all_nine_templates(image_dir, annotations_dir):
loader = TemplateLoader(image_dir, annotations_dir)
templates = loader.discover()
assert len(templates) == 9
assert set(templates.keys()) == {f"bank_doc_{i:02d}" for i in range(1, 10)}
def test_every_template_has_at_least_one_valid_signature_box(image_dir, annotations_dir):
loader = TemplateLoader(image_dir, annotations_dir)
for template_id in loader.list_ids():
template = loader.get(template_id)
page = template.annotation.pages[0]
assert len(page.signature_boxes) >= 1
for box in page.signature_boxes:
assert box.x2 > box.x1
assert box.y2 > box.y1
# Box must lie within the annotated page bounds.
assert 0 <= box.x1 and box.x2 <= page.page_size[0]
assert 0 <= box.y1 and box.y2 <= page.page_size[1]
def test_template_loader_random_template_is_deterministic(image_dir, annotations_dir):
loader = TemplateLoader(image_dir, annotations_dir)
t1 = loader.random_template(np.random.default_rng(123))
t2 = loader.random_template(np.random.default_rng(123))
assert t1.template_id == t2.template_id
def test_signature_dataset_discovers_bundled_dataset(dataset_dir):
ds = SignatureDataset(dataset_dir)
records = ds.discover()
assert len(records) > 0
assert any(r.source_type == "genuine" for r in records)
assert any(r.source_type == "forged" for r in records)
def test_signature_dataset_source_filter(dataset_dir):
ds = SignatureDataset(dataset_dir)
rng = np.random.default_rng(0)
for _ in range(20):
record = ds.sample(rng, source_filter="genuine")
assert record.source_type == "genuine"
def test_signature_dataset_sample_is_deterministic(dataset_dir):
ds = SignatureDataset(dataset_dir)
r1 = ds.sample(np.random.default_rng(55), source_filter="any")
r2 = ds.sample(np.random.default_rng(55), source_filter="any")
assert r1.signature_id == r2.signature_id
def test_signature_dataset_discovers_multi_script_named_signers(dataset_dir):
"""dataset/metadata.csv associates dataset/hindi_bengali/*.png with real named,
scripted identities (see dataset/hindi_bengali/) alongside the anonymous CEDAR pool."""
ds = SignatureDataset(dataset_dir)
by_group = {}
for r in ds.discover():
if "hindi_bengali" in r.path.as_posix():
by_group.setdefault(r.signer_group, set()).add(r.script)
expected = {
"Priya Sharma": {"hindi"}, "Raj Malhotra": {"hindi"}, "Vikram Singh": {"hindi"},
"Suman Das": {"bengali"}, "Anika Roy": {"bengali"},
"Carol Wong": {"latin"}, "Henry Ooi": {"latin"},
}
assert by_group == expected
for name in expected:
assert ds.script_for_group(name) == next(iter(expected[name]))
def test_default_script_for_unlabeled_records_is_latin(dataset_dir):
ds = SignatureDataset(dataset_dir)
cedar_records = [r for r in ds.discover() if "hindi_bengali" not in r.path.as_posix()]
assert all(r.script == "latin" for r in cedar_records)