From fa57f067fe40785c5bb41a4e7917325f1a0c3248 Mon Sep 17 00:00:00 2001 From: jamesdward Date: Mon, 6 Jul 2026 14:10:13 +0100 Subject: [PATCH] feat: print pack and photo ingest for the field battery (Phase 4b) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - battery/printpack.py: six A4 300dpi print sheets (3 surfaces per grammar), labels provably outside the pattern area, INSTRUCTIONS.md with the photo condition matrix, manifest template - battery/ingest: full implementation — identical recognise pipeline over a photo folder, per-row robustness, raw_results.csv with the two-path ink detail (implied gain answers the is-real-WB-diagonal question), summary.md auto-answering the three Phase 4b questions - print-pack/ committed as the experiment's fixed input - SI-023 (pipeline runs unmodified on raw photos; margin labels are bookkeeping) and SI-024 (field coverage requirements are feature-dependent) - 10 new tests (2 old structure-seam tests replaced); 133 total green --- SPEC-ISSUES.md | 42 +++ battery/ingest/__init__.py | 507 +++++++++++++++++++++++++++++----- battery/ingest/__main__.py | 6 + battery/printpack.py | 364 ++++++++++++++++++++++++ photos/.gitkeep | 0 photos/manifest.template.yaml | 40 +++ print-pack/001-s0.png | Bin 0 -> 159851 bytes print-pack/001-s1.png | Bin 0 -> 158748 bytes print-pack/001-s2.png | Bin 0 -> 159176 bytes print-pack/002-s0.png | Bin 0 -> 160717 bytes print-pack/002-s1.png | Bin 0 -> 157814 bytes print-pack/002-s2.png | Bin 0 -> 156404 bytes print-pack/INSTRUCTIONS.md | 86 ++++++ tests/test_battery.py | 51 +--- tests/test_ingest.py | 236 ++++++++++++++++ 15 files changed, 1218 insertions(+), 114 deletions(-) create mode 100644 battery/ingest/__main__.py create mode 100644 battery/printpack.py create mode 100644 photos/.gitkeep create mode 100644 photos/manifest.template.yaml create mode 100644 print-pack/001-s0.png create mode 100644 print-pack/001-s1.png create mode 100644 print-pack/001-s2.png create mode 100644 print-pack/002-s0.png create mode 100644 print-pack/002-s1.png create mode 100644 print-pack/002-s2.png create mode 100644 print-pack/INSTRUCTIONS.md create mode 100644 tests/test_ingest.py diff --git a/SPEC-ISSUES.md b/SPEC-ISSUES.md index 9d4d3e7..342d4a8 100644 --- a/SPEC-ISSUES.md +++ b/SPEC-ISSUES.md @@ -431,3 +431,45 @@ measured in a shared feature space. **Two consequences the spec should price in: feature (here: commit `primitive_frequency_mix`, SI-008) or state explicitly that its enrolment distance is single-dimensional and therefore that same-family collision is unguarded — because a one-feature signature has no minimum distance to defend once that feature is shared. + +## SI-023 · §11/§10 · decided-here — The field battery runs the pipeline UNMODIFIED on raw photos, and puts its human-readable label in the page margin + +Spec §11 makes L3 depend on recognition "under the hostile-conditions test battery (print, camera, +light, angle, damage)" but does not say (a) whether a conforming recogniser may *preprocess* a +photograph — deskew, colour-correct, denoise — before the "identical pipeline" of §8, or (b) where the +human-readable fallback §10 requires on an identity-bearing artefact may sit relative to the pattern. +The print-and-photograph path (`battery/printpack.py`, `battery/ingest/`) makes both concrete. +**Choice:** (a) v0 ingestion runs `recogniser.claim.recognise` on each photo with **no** photo-special +preprocessing — byte-for-byte the pipeline the synthetic battery uses — so a raw-phone-photo failure is +a *reported result* (a per-row status and a "not_recognised"/insufficient line in `summary.md`), never +silently repaired. A v0 that quietly pre-corrected photos could not measure what real capture costs +recognition, which is the entire L3 question; any preprocessing should be an explicit, declared, +reproducible stage the spec names, not an implementation convenience. (b) Each print sheet carries a +small label (surface id + seed + "print at 100%") in the **page margin**, whose bounding box is asserted +disjoint from the pattern rectangle (`test_ingest`), so nothing is added *inside* the surface — honouring +principle 2 / §2 ("no bounded marks, no fiducial code regions; the whole surface is the pattern") while +still providing the §10 human-readable fallback. Nothing on the label is measured or fed to the +recogniser; the photographer crops the pattern, not the label. **Spec consequence:** §11 should state +(i) whether field-battery recognition is defined on the raw capture or on a declared preprocessing +front-end (and if the latter, fix that stage so two conforming recognisers agree), and (ii) that a +required human-readable fallback lives outside the signature-bearing surface — a margin/label region is +not part of the pattern and MUST NOT be recovered or scored as if it were. + +## SI-024 · §11/§5 · decided-here — The field battery must gather ink-rich framings, or the diagonal-white-balance question is unanswerable + +`experiments/exp-002-cross-grammar` §6 sets three questions Phase 4b must answer, and the ingest +`summary.md` answers each from data or marks it "insufficient data". Question (a) — *is real camera white +balance diagonal?* — is answered from the iso-002 ink two-path working: the implied applied gain (1/g), +its in-bounds flag, and the per-channel rank correlation (SI-020). But the relationship colour path only +runs when a photo shows at least `MIN_INKS_FOR_GAIN=3` distinct inks (SI-020's credibility floor against +a per-channel gain overfitting a handful of colours). A field battery shot mostly at distance, or on +small fragments, can therefore recognise 002 surfaces yet **never accumulate a single row able to answer +(a)** — the capture protocol silently gates the conclusion. **Choice:** the printed 002 sheets are dense +12×8 grids (many inks per frame) and the INSTRUCTIONS ask explicitly for at least the "fills the frame" +condition per surface, so the ink-rich framings that (a) needs are captured by construction; the summary +still degrades to "insufficient data" honestly when they are absent. **Spec consequence:** §11 should +recognise that a hostile-conditions battery's *coverage requirements are feature-dependent* — a +relationship/ordering colour signature (Milestone 2, §5) can only be validated for illuminant-robustness +from captures rich enough to estimate the correction, so the field-battery protocol must state a minimum +per-feature framing (here: ≥3 inks in frame for the WB-diagonal check) rather than treating "photograph +the surface under varied conditions" as sufficient for every question the battery is meant to answer. diff --git a/battery/ingest/__init__.py b/battery/ingest/__init__.py index 3b66279..9635de9 100644 --- a/battery/ingest/__init__.py +++ b/battery/ingest/__init__.py @@ -1,111 +1,482 @@ -"""Phase-4b real-photo ingestion path -- STRUCTURE ONLY for this session. +"""Phase-4b real-photo ingestion path -- the field half of the L3 battery. The synthetic battery (``battery.run``) degrades generated fragments; the *field* -battery (spec s11 L3) needs real printed-and-photographed surfaces. This module -is the seam for that: given a folder of photos and a manifest describing each -one, it runs the IDENTICAL recognise pipeline and writes the SAME -``raw_results.csv`` shape, so synthetic and real rows are directly comparable. +battery (spec s11 L3: "print, camera, light, angle, damage") needs real +printed-and-photographed surfaces. This module is that path: given a folder of +photos and a manifest describing each one, it runs the IDENTICAL recognise +pipeline the synthetic battery uses -- **no photo-special preprocessing in v0**. +If recognition fails on a raw phone photo, that is a RESULT to record and report +(the summary marks it), never something to silently fix here; a v0 that quietly +pre-corrected photos could not tell us what real capture does to recognition, +which is the whole question (spec s11: "criteria deliberately unfinished until +that data exists"). -Print-and-photograph capture is explicitly out of scope this session; here the -plumbing is defined and unit-tested with a generated PNG standing in for a photo. +Each photo becomes one row of ``raw_results.csv``: the manifest fields verbatim, +a per-row status, the recogniser's top verdict, the target-sheet aggregate / +coverage / renormalised / verdict, the four bar-cascade-001 feature agreements +(for 001 rows), and -- for iso-002 rows -- the ink two-path detail INCLUDING the +implied applied gain (1/g). That gain block is what answers Phase-4b question (a): +the relationship colour path (SI-020) assumes a real illuminant is a per-channel +DIAGONAL gain; the implied applied gain recovers the white balance it removed, and +``ink_gain_in_bounds`` / ``ink_rank_correlation`` say whether a single diagonal +gain actually explained the cast. If those are consistently out of bounds or the +rank correlation is low across real photos, the diagonal model is wrong. + +A ``summary.md`` is auto-written alongside: per-condition tables plus the three +Phase-4b questions (from ``experiments/exp-002-cross-grammar`` s6), each answered +from the data present or explicitly marked "insufficient data". + +Robustness (a broken capture set must never crash the run): a manifest entry +whose file is missing, a file in the folder not named in the manifest, and an +unreadable/corrupt image are each recorded as a row ``status`` -- never an +exception. Only a malformed manifest file (not loadable YAML) is fatal. Manifest format (``manifest.yaml``):: - surface_id: bar-cascade-001 # optional default for every entry + surface_id: null # optional default surface_id for every entry photos: - - file: shot_0001.jpg # path relative to the photo folder - surface_id: bar-cascade-001 # which enrolled surface this depicts - conditions: # free-form capture metadata (logged) - light: office - angle_deg: 15 - print: laser - -Each photo becomes one CSV row: the recogniser's verdict + three numbers against -bar-cascade-001, plus the recorded capture conditions. Ground-truth fields that -only a generated fragment can know (``boundaries_spanned``, ``frac``) stay blank. + - file: IMG_0001.jpg # filename inside the photo folder + surface_id: 001-s0 # matches the printed label (printpack) + grammar: bar-cascade-001 # bar-cascade-001 | iso-002 (the target sheet) + conditions: + lighting: daylight + angle_deg: 0 + distance: fills_frame + printer: "Brand Model" + paper: plain + notes: "" """ from __future__ import annotations import argparse import csv +import subprocess +from datetime import datetime, timezone from pathlib import Path import yaml from recogniser.claim import recognise -from battery.run import CSV_FIELDS, GRAMMARS, TARGET_SHEET_ID, _result_for, _feature_agreement - - -def _row_from_claim(file_name, surface_id, conditions, claim) -> dict: - """One CSV row (battery.run.CSV_FIELDS shape) for a recognised real photo.""" - top = claim["results"][0] - r001 = _result_for(claim, TARGET_SHEET_ID) - cond_str = ";".join(f"{k}={v}" for k, v in sorted((conditions or {}).items())) - row = {k: "" for k in CSV_FIELDS} - row.update({ - "arm": "real", - "impostor_id": "", - "surface_seed": surface_id or "", - "degradation": "photo", - "degradation_param": cond_str, - "top_sheet": top["sheet_id"], - "top_aggregate": top["aggregate_confidence"], - "verdict_001": r001["verdict"] if r001 else "", - "aggregate_001": r001["aggregate_confidence"] if r001 else "", - "coverage_001": r001["coverage"] if r001 else "", - "renormalised_001": r001["renormalised_score"] if r001 else "", - "agr_cascade_ratio": _feature_agreement(r001, "cascade_ratio") if r001 else "", - "agr_duty": _feature_agreement(r001, "duty") if r001 else "", - "agr_phase_duty_identity": _feature_agreement(r001, "phase_duty_identity") if r001 else "", - "agr_colour_pair": _feature_agreement(r001, "colour_pair") if r001 else "", - }) - row["rotation_deg"] = (conditions or {}).get("angle_deg", "") + +REPO_ROOT = Path(__file__).resolve().parent.parent.parent +GRAMMARS = REPO_ROOT / "grammars" + +# Recognised image extensions when scanning the folder for stray files. +IMAGE_EXTS = {".jpg", ".jpeg", ".png", ".tif", ".tiff", ".bmp", ".webp", ".heic"} + +# The four bar-cascade-001 identification/normalisation feature agreements we log +# (mirrors battery.run.FEATURE_COLUMNS so 001 real rows line up with synthetic). +BAND_FEATURES = ["cascade_ratio", "duty", "phase_duty_identity", "colour_pair"] + +# Manifest condition keys logged verbatim (order fixes the CSV column order). +CONDITION_KEYS = ["lighting", "angle_deg", "distance", "printer", "paper"] + +CSV_FIELDS = [ + # provenance + status + "file", "status", "surface_id", "grammar", "notes", + *CONDITION_KEYS, + # recognition summary + "image_shape", "top_sheet", "top_aggregate", + "target_sheet", "verdict", "aggregate", "coverage", "renormalised", + # bar-cascade-001 per-feature agreements (blank for grid rows) + "agr_cascade_ratio", "agr_duty", "agr_phase_duty_identity", "agr_colour_pair", + # iso-002 ink two-path detail incl. implied applied gain (blank for band rows) + "ink_agreement_absolute", "ink_agreement_relationship", + "ink_mean_delta_e_absolute", "ink_mean_delta_e_relationship", + "ink_correction_gain_b", "ink_correction_gain_g", "ink_correction_gain_r", + "ink_implied_applied_gain_b", "ink_implied_applied_gain_g", + "ink_implied_applied_gain_r", + "ink_gain_in_bounds", "ink_relationship_applicable", + "ink_n_inks", "ink_n_clipped_inks", "ink_gain_fallback_channels", + "ink_rank_correlation", + # anything that went wrong (unreadable image message, etc.) + "error", +] + + +# --------------------------------------------------------------------------- # +# Claim -> row extraction +# --------------------------------------------------------------------------- # + +def _result_for(claim: dict, sheet_id: str): + for r in claim.get("results", []): + if r.get("sheet_id") == sheet_id: + return r + return None + + +def _feature_agreement(result: dict, fid: str): + if not result: + return None + for f in result.get("per_feature", []): + if f.get("id") == fid: + return f.get("agreement") + return None + + +def _ink_two_path_detail(result: dict): + """Return the grid ink-set two-path ``detail`` dict for ``result`` or None. + + Scans the per-feature working for the ``ink_set_match`` measure carrying the + white-balance relationship path (a ``correction_gain_bgr`` marks the grid + two-path detail; band sheets score colour absolute-only and have no gain). + """ + if not result: + return None + for f in result.get("per_feature", []): + if f.get("measure") == "ink_set_match": + detail = f.get("detail") or {} + if "correction_gain_bgr" in detail: + return detail + return None + + +def _base_row() -> dict: + return {k: "" for k in CSV_FIELDS} + + +def _row_from_claim(entry_row: dict, claim: dict, target_sheet: str) -> dict: + """Fill ``entry_row`` (already carrying manifest fields) from a recognise claim.""" + row = dict(entry_row) + row["status"] = "ok" + row["image_shape"] = "x".join(str(d) for d in claim.get("image_shape", [])) + results = claim.get("results", []) + if results: + row["top_sheet"] = results[0].get("sheet_id", "") + row["top_aggregate"] = results[0].get("aggregate_confidence", "") + + target = _result_for(claim, target_sheet) if target_sheet else None + if target is None and results: + # No declared grammar (or it is not an enrolled sheet): fall back to the + # recogniser's own top result so the row still carries a verdict. + target = results[0] + row["target_sheet"] = target.get("sheet_id", "") + else: + row["target_sheet"] = target_sheet or "" + + if target: + row["verdict"] = target.get("verdict", "") + row["aggregate"] = target.get("aggregate_confidence", "") + row["coverage"] = target.get("coverage", "") + row["renormalised"] = target.get("renormalised_score", "") + for fid in BAND_FEATURES: + agr = _feature_agreement(target, fid) + if agr is not None: + row[f"agr_{fid}"] = agr + + detail = _ink_two_path_detail(target) + if detail: + gain = detail.get("correction_gain_bgr", [None, None, None]) + impl = detail.get("implied_applied_gain_bgr", [None, None, None]) + clip = detail.get("clipping", {}) + row.update({ + "ink_agreement_absolute": detail.get("agreement_absolute", ""), + "ink_agreement_relationship": detail.get("agreement_relationship", ""), + "ink_mean_delta_e_absolute": detail.get("mean_delta_e_absolute", ""), + "ink_mean_delta_e_relationship": detail.get("mean_delta_e_relationship", ""), + "ink_correction_gain_b": gain[0], "ink_correction_gain_g": gain[1], + "ink_correction_gain_r": gain[2], + "ink_implied_applied_gain_b": impl[0], + "ink_implied_applied_gain_g": impl[1], + "ink_implied_applied_gain_r": impl[2], + "ink_gain_in_bounds": detail.get("gain_in_bounds", ""), + "ink_relationship_applicable": detail.get("relationship_applicable", ""), + "ink_n_inks": detail.get("n_inks", ""), + "ink_n_clipped_inks": clip.get("n_clipped_inks", ""), + "ink_gain_fallback_channels": ",".join(clip.get("gain_fallback_channels", [])), + "ink_rank_correlation": detail.get("rank_correlation", ""), + }) + return row + + +# --------------------------------------------------------------------------- # +# Ingest +# --------------------------------------------------------------------------- # + +def _entry_row(entry: dict, default_surface: str) -> dict: + """Build the manifest-field portion of a row (no recognition yet).""" + row = _base_row() + row["file"] = entry.get("file", "") + row["surface_id"] = entry.get("surface_id", default_surface) or "" + row["grammar"] = entry.get("grammar", "") or "" + row["notes"] = entry.get("notes", "") or "" + conditions = entry.get("conditions") or {} + for k in CONDITION_KEYS: + v = conditions.get(k, "") + row[k] = "" if v is None else v return row -def ingest(folder, manifest_path, out_csv=None, grammars_dir=None) -> list[dict]: - """Recognise every photo listed in ``manifest_path`` under ``folder``. +def ingest(folder, manifest_path, out_dir=None, *, grammars_dir=None, + timestamp=None) -> list[dict]: + """Recognise every photo in ``manifest_path`` under ``folder``; return rows. + + Runs the identical ``recognise`` pipeline used by the synthetic battery. When + ``out_dir`` is given, writes ``raw_results.csv`` and ``summary.md`` there. - Runs the identical ``recognise`` pipeline used by the synthetic battery and - (when ``out_csv`` is given) writes rows in the same ``raw_results.csv`` shape. - Returns the list of row dicts. Raises ``FileNotFoundError`` for a missing - photo so a broken manifest fails loudly rather than silently skipping. + A missing photo, a folder file absent from the manifest, and an unreadable + image are each recorded as a row ``status`` (``missing`` / ``not_in_manifest`` + / ``unreadable``) rather than raising -- a broken capture set never crashes + the run. A manifest that will not parse as YAML IS fatal (that is operator + error, not capture data). """ folder = Path(folder) + grammars = str(grammars_dir) if grammars_dir else str(GRAMMARS) with open(manifest_path) as fh: manifest = yaml.safe_load(fh) or {} default_surface = manifest.get("surface_id") - grammars = str(grammars_dir) if grammars_dir else str(GRAMMARS) - rows = [] - for entry in manifest.get("photos", []): - file_name = entry["file"] - path = folder / file_name - if not path.exists(): - raise FileNotFoundError(f"photo listed in manifest not found: {path}") - surface_id = entry.get("surface_id", default_surface) - conditions = entry.get("conditions", {}) - claim = recognise(str(path), grammars) - rows.append(_row_from_claim(file_name, surface_id, conditions, claim)) - - if out_csv is not None: - with open(out_csv, "w", newline="") as fh: + rows: list[dict] = [] + listed_files = set() + for entry in manifest.get("photos", []) or []: + entry_row = _entry_row(entry, default_surface) + file_name = entry_row["file"] + listed_files.add(file_name) + target_sheet = entry_row["grammar"] + path = folder / file_name if file_name else None + + if not file_name: + entry_row["status"] = "missing" + entry_row["error"] = "manifest entry has no 'file'" + rows.append(entry_row) + continue + if path is None or not path.exists(): + entry_row["status"] = "missing" + entry_row["error"] = f"file not found under {folder}" + rows.append(entry_row) + continue + try: + claim = recognise(str(path), grammars) + except Exception as exc: # unreadable/corrupt image, decode failure, etc. + entry_row["status"] = "unreadable" + entry_row["error"] = f"{type(exc).__name__}: {exc}" + rows.append(entry_row) + continue + rows.append(_row_from_claim(entry_row, claim, target_sheet)) + + # Files present in the folder but never named in the manifest -> flagged. + for p in sorted(folder.glob("*")) if folder.exists() else []: + if p.is_file() and p.suffix.lower() in IMAGE_EXTS and p.name not in listed_files: + stray = _base_row() + stray["file"] = p.name + stray["status"] = "not_in_manifest" + stray["error"] = "image in folder not listed in manifest" + rows.append(stray) + + if out_dir is not None: + out_dir = Path(out_dir) + out_dir.mkdir(parents=True, exist_ok=True) + with open(out_dir / "raw_results.csv", "w", newline="") as fh: writer = csv.DictWriter(fh, fieldnames=CSV_FIELDS) writer.writeheader() writer.writerows(rows) + ts = timestamp or datetime.now(timezone.utc).isoformat() + (out_dir / "summary.md").write_text(build_summary(rows, ts)) + return rows +# --------------------------------------------------------------------------- # +# summary.md +# --------------------------------------------------------------------------- # + +def _git_commit() -> str: + try: + return subprocess.check_output( + ["git", "rev-parse", "HEAD"], cwd=str(REPO_ROOT), text=True).strip() + except Exception: + return "unknown" + + +def _num(v): + """Coerce a CSV cell to float, or None if blank/non-numeric.""" + if v is None or v == "" or isinstance(v, bool): + return None + try: + return float(v) + except (TypeError, ValueError): + return None + + +def _ok_rows(rows): + return [r for r in rows if r.get("status") == "ok"] + + +def _fmt(v, nd=3): + return "--" if v is None else f"{v:.{nd}f}" + + +def _mean(values): + vals = [v for v in values if v is not None] + return sum(vals) / len(vals) if vals else None + + +def _verdict_counts(rows): + counts = {"identified": 0, "candidate": 0, "not_recognised": 0, "other": 0} + for r in rows: + v = r.get("verdict", "") + counts[v if v in counts else "other"] += 1 + return counts + + +def _condition_table(rows, key, title): + """A markdown table of mean aggregate + verdict mix grouped by one condition.""" + groups: dict = {} + for r in rows: + groups.setdefault(str(r.get(key, "")), []).append(r) + lines = [f"**By {title}**", "", + f"| {title} | n | mean aggregate | identified | candidate | not_recognised |", + "|---|---|---|---|---|---|"] + for g in sorted(groups): + grp = groups[g] + vc = _verdict_counts(grp) + magg = _mean([_num(r.get("aggregate")) for r in grp]) + lines.append(f"| {g or '(blank)'} | {len(grp)} | {_fmt(magg)} | " + f"{vc['identified']} | {vc['candidate']} | {vc['not_recognised']} |") + lines.append("") + return "\n".join(lines) + + +def _answer_wb_diagonal(grid_rows): + """Question (a): is real camera white balance diagonal?""" + usable = [r for r in grid_rows + if str(r.get("ink_relationship_applicable")).lower() == "true"] + if not usable: + return ("**(a) Is real camera white balance diagonal?** insufficient data " + "-- no iso-002 photo recognised with the relationship colour path " + "applicable (need >= 3 inks in frame; SI-020).") + in_bounds = sum(1 for r in usable + if str(r.get("ink_gain_in_bounds")).lower() == "true") + mean_rank = _mean([_num(r.get("ink_rank_correlation")) for r in usable]) + frac = in_bounds / len(usable) + verdict = ("consistent with a per-channel diagonal gain" + if frac >= 0.8 and (mean_rank or 0) >= 0.8 + else "NOT well explained by a diagonal gain (the SI-020 model is " + "too weak for real illuminants)") + return (f"**(a) Is real camera white balance diagonal?** {verdict}. " + f"{in_bounds}/{len(usable)} recognised iso-002 photos had an in-bounds " + f"single diagonal correction gain (GAIN_MIN..GAIN_MAX), mean per-channel " + f"rank correlation {_fmt(mean_rank)}. A positive diagonal gain is " + f"order-preserving, so high rank correlation corroborates the diagonal " + f"model; low values (or many out-of-bounds gains) say real white balance " + f"is not diagonal and the relationship path needs a richer transform.") + + +def _answer_clipping(grid_rows): + """Question (b): real clipping behaviour on bright inks.""" + counts = [_num(r.get("ink_n_clipped_inks")) for r in grid_rows] + counts = [c for c in counts if c is not None] + if not counts: + return ("**(b) Real clipping on bright inks?** insufficient data -- no " + "iso-002 photo produced a measured ink set to inspect for clipping.") + total_clipped = sum(int(c) for c in counts) + n_with_clip = sum(1 for c in counts if c > 0) + return (f"**(b) Real clipping on bright inks?** across {len(counts)} recognised " + f"iso-002 photos, {n_with_clip} showed >= 1 clipped ink " + f"(mean {_fmt(_mean(counts), 2)} clipped inks/photo, {total_clipped} total). " + f"Clipping destroys a bright ink's channel asymmetrically (only a lower " + f"bound survives; SI-020), so a rising clipped-ink count under warm/bright " + f"lighting is the s2 strong-warm edge appearing on real ink -- cross-check " + f"against the by-lighting table above.") + + +def _answer_gamut(grid_rows): + """Question (c): does 002's ink set survive the print gamut?""" + if not grid_rows: + return ("**(c) Does 002's ink set survive the print gamut?** insufficient " + "data -- no iso-002 photo was successfully recognised.") + vc = _verdict_counts(grid_rows) + survived = vc["identified"] + vc["candidate"] + mean_abs = _mean([_num(r.get("ink_agreement_absolute")) for r in grid_rows]) + mean_rel = _mean([_num(r.get("ink_agreement_relationship")) for r in grid_rows]) + return (f"**(c) Does 002's ink set survive the print gamut?** {survived}/" + f"{len(grid_rows)} recognised iso-002 photos reached candidate or better " + f"(identified {vc['identified']}, candidate {vc['candidate']}, " + f"not_recognised {vc['not_recognised']}). Mean ink agreement: absolute " + f"path {_fmt(mean_abs)}, relationship path {_fmt(mean_rel)}. If the " + f"absolute path collapses but the relationship path holds, the print " + f"shifted the inks by a recoverable cast; if BOTH collapse, the print " + f"gamut moved the inks out of delta-E tolerance and 002's single " + f"colour-borne identity (SI-008/SI-022) does not survive this print.") + + +def build_summary(rows, timestamp: str) -> str: + """Render summary.md from the ingested rows (deterministic given ``timestamp``).""" + ok = _ok_rows(rows) + band_rows = [r for r in ok if r.get("grammar") == "bar-cascade-001"] + grid_rows = [r for r in ok if r.get("grammar") == "iso-002"] + + status_counts: dict = {} + for r in rows: + status_counts[r.get("status", "")] = status_counts.get(r.get("status", ""), 0) + 1 + + L = [] + L.append("# exp-003 print-and-photograph -- ingest summary") + L.append("") + L.append(f"- generated: {timestamp}") + L.append(f"- git commit: {_git_commit()}") + L.append(f"- recogniser: v0 (identical pipeline; no photo-special preprocessing)") + L.append(f"- rows: {len(rows)} " + f"(" + ", ".join(f"{k}={v}" for k, v in sorted(status_counts.items())) + ")") + L.append(f"- recognised: bar-cascade-001 {len(band_rows)}, iso-002 {len(grid_rows)}") + L.append("") + + if not ok: + L.append("No photo was successfully recognised, so every Phase-4b question " + "below is answered **insufficient data**. Check the per-row status " + "in raw_results.csv (missing / unreadable / not_in_manifest).") + L.append("") + + L.append("## Per-condition tables") + L.append("") + if ok: + L.append(_condition_table(ok, "lighting", "lighting")) + L.append(_condition_table(ok, "angle_deg", "angle (deg)")) + L.append(_condition_table(ok, "distance", "distance")) + L.append(_condition_table(ok, "surface_id", "surface")) + else: + L.append("_(no recognised rows to tabulate)_") + L.append("") + + L.append("## The three Phase-4b questions (exp-002 s6)") + L.append("") + L.append(_answer_wb_diagonal(grid_rows)) + L.append("") + L.append(_answer_clipping(grid_rows)) + L.append("") + L.append(_answer_gamut(grid_rows)) + L.append("") + L.append("---") + L.append("") + L.append("Each answer is computed only from photos that recognised; a question " + "with no supporting rows is marked *insufficient data* rather than " + "guessed. L3 (spec s11) stays open until this runs on a real, " + "sufficiently-covered capture set (SI-017, SI-023).") + L.append("") + return "\n".join(L) + + +# --------------------------------------------------------------------------- # +# CLI +# --------------------------------------------------------------------------- # + def _main(argv=None) -> int: parser = argparse.ArgumentParser( description="Ingest photographed surfaces and recognise them (Phase 4b).") parser.add_argument("folder", help="folder of photo files") parser.add_argument("manifest", help="manifest.yaml listing the photos") - parser.add_argument("--out", default=None, help="output raw_results.csv path") + parser.add_argument("--out", default=None, + help="output directory for raw_results.csv + summary.md") + parser.add_argument("--grammars", default=None, + help="grammar sheet directory (default: repo grammars/)") args = parser.parse_args(argv) - rows = ingest(args.folder, args.manifest, out_csv=args.out) - print(f"ingested {len(rows)} photo(s)") + rows = ingest(args.folder, args.manifest, out_dir=args.out, + grammars_dir=args.grammars) + ok = sum(1 for r in rows if r["status"] == "ok") + print(f"ingested {len(rows)} row(s); {ok} recognised") + if args.out: + print(f"wrote {args.out}/raw_results.csv and {args.out}/summary.md") return 0 diff --git a/battery/ingest/__main__.py b/battery/ingest/__main__.py new file mode 100644 index 0000000..e608ac8 --- /dev/null +++ b/battery/ingest/__main__.py @@ -0,0 +1,6 @@ +"""``python -m battery.ingest`` entry point (Phase 4b real-photo ingestion).""" + +from battery.ingest import _main + +if __name__ == "__main__": + raise SystemExit(_main()) diff --git a/battery/printpack.py b/battery/printpack.py new file mode 100644 index 0000000..a1f9366 --- /dev/null +++ b/battery/printpack.py @@ -0,0 +1,364 @@ +"""Print-pack generator for the print-and-photograph field battery (Phase 4b). + +Spec s11 L3 ("Field-proven") depends on recognition "under the hostile-conditions +test battery (print, camera, light, angle, damage)". The synthetic battery +(``battery.run``) stands in for those axes deterministically; this module produces +the *fixed physical input* for the real thing: a small set of A4 sheets a person +prints at 100% and photographs. It is the experiment's committed input, so the +generated ``print-pack/`` is version-controlled, not gitignored. + +What it emits (deterministically -- README principle 4): + + * six single-page PNGs sized EXACTLY for A4 at 300 dpi (2480 x 3508 px): + - three bar-cascade-001 surfaces (seeds 0, 1, 2), ~170 mm square, 5 bands; + - three iso-002 surfaces (seeds 0, 1, 2; each seed picks a different ink + subset), a 12 x 8 cell grid ~170 mm wide. + Each surface is centred with a white margin, and a small human-readable label + is placed in the BOTTOM PAGE MARGIN, strictly outside the pattern rectangle. + * ``print-pack/INSTRUCTIONS.md`` -- the print/photograph/manifest protocol. + * ``photos/manifest.template.yaml`` (+ an empty ``photos/`` for the captures). + +On the label vs the spec's "no marks inside the pattern" rule (spec s2, principle +2: "no payload encoding, no bounded marks, no fiducial code regions -- the whole +surface is the pattern"): the label is NOT part of the surface. It sits in the +page margin, never touching the pattern rectangle (``test_ingest`` asserts the two +bounding boxes are disjoint), and carries only human bookkeeping (which seed this +is, and "print at 100%"). Nothing about it is measured or fed to the recogniser -- +the recogniser only ever sees a photograph of the pattern rectangle, cropped by +the photographer. It is exactly the "human-readable fallback" the spec calls a +conformance requirement for identity-bearing artefacts (spec s10 Accessibility), +kept off the signature-bearing surface on purpose. +""" + +from __future__ import annotations + +import argparse +from pathlib import Path + +import cv2 +import numpy as np + +from sheets import load_sheet +from generator import cascade +from generator import grid + +REPO_ROOT = Path(__file__).resolve().parent.parent +GRAMMARS = REPO_ROOT / "grammars" +SHEET_001 = GRAMMARS / "bar-cascade-001.yaml" +SHEET_002 = GRAMMARS / "iso-002.yaml" + +# --- A4 at 300 dpi (portrait) ------------------------------------------------ +DPI = 300 +PAGE_W = 2480 # 210 mm * 300 / 25.4, rounded +PAGE_H = 3508 # 297 mm * 300 / 25.4, rounded +MM = DPI / 25.4 # pixels per millimetre + +# Pattern target width ~170 mm at 300 dpi. +PATTERN_PX = round(170 * MM) # 2008 px + +# 001: 5 bands across ~170 mm -> a band module of ~402 px (5 * 402 = 2010 px). +BANDS_001 = 5 +MODULE_001 = round(PATTERN_PX / BANDS_001) # 402 + +# 002: 12 x 8 cells, ~170 mm across the 12 columns -> module ~167 px. +COLS_002, ROWS_002 = 12, 8 +MODULE_002 = round(PATTERN_PX / COLS_002) # 167 + +# A bottom band of the page reserved for the label (never overlaps the pattern). +LABEL_BAND_PX = 380 +SEEDS = (0, 1, 2) + +_FONT = cv2.FONT_HERSHEY_SIMPLEX + + +def _surface_specs(): + """Return the ordered list of surface specs (grammar x seed) to emit. + + Each spec is a plain dict; ``render`` is a zero-arg callable returning the + (H, W, 3) BGR pattern array so page assembly is generator-agnostic. + """ + sheet_001 = load_sheet(SHEET_001) + sheet_002 = load_sheet(SHEET_002) + specs = [] + for seed in SEEDS: + specs.append({ + "surface_id": f"001-s{seed}", + "grammar": "bar-cascade-001", + "seed": seed, + "render": (lambda s=seed: cascade.render( + sheet_001, n_bands=BANDS_001, module_px=MODULE_001, seed=s)), + }) + for seed in SEEDS: + specs.append({ + "surface_id": f"002-s{seed}", + "grammar": "iso-002", + "seed": seed, + "render": (lambda s=seed: grid.render( + sheet_002, cols=COLS_002, rows=ROWS_002, module_px=MODULE_002, seed=s)), + }) + return specs + + +def _label_lines(spec) -> list[str]: + """The two human-readable label lines drawn in the bottom page margin.""" + return [ + f"{spec['surface_id']} seed {spec['seed']} grammar {spec['grammar']}", + "PRINT AT 100% / ACTUAL SIZE - no fit-to-page, no scaling", + ] + + +def build_page(spec) -> tuple[np.ndarray, dict]: + """Compose one A4 page for ``spec``; return (page_bgr, meta). + + The pattern is centred horizontally and centred vertically in the region + ABOVE a reserved bottom label band, so the label bounding box is always + strictly below (disjoint from) the pattern rectangle. ``meta`` records both + bounding boxes so the disjointness is machine-checkable (test requirement). + """ + pattern = spec["render"]() + ph, pw = pattern.shape[:2] + + page = np.full((PAGE_H, PAGE_W, 3), 255, np.uint8) + + avail_h = PAGE_H - LABEL_BAND_PX + x0 = (PAGE_W - pw) // 2 + y0 = (avail_h - ph) // 2 + if x0 < 0 or y0 < 0: + raise ValueError( + f"pattern {pw}x{ph} does not fit A4 with the reserved label band") + x1, y1 = x0 + pw, y0 + ph + page[y0:y1, x0:x1] = pattern + pattern_bbox = (x0, y0, x1, y1) + + # --- label in the bottom band, horizontally centred, disjoint from pattern + lines = _label_lines(spec) + scale, thickness = 1.4, 3 + sizes = [cv2.getTextSize(t, _FONT, scale, thickness) for t in lines] + line_gap = 26 + text_h = sum(s[0][1] for s in sizes) + line_gap * (len(lines) - 1) + band_top = avail_h + block_top = band_top + (LABEL_BAND_PX - text_h) // 2 + + ly = block_top + label_x0, label_x1 = PAGE_W, 0 + label_y0 = block_top + for text, ((tw, th), _base) in zip(lines, sizes): + tx = (PAGE_W - tw) // 2 + ly += th + cv2.putText(page, text, (tx, ly), _FONT, scale, (0, 0, 0), thickness, + cv2.LINE_AA) + label_x0 = min(label_x0, tx) + label_x1 = max(label_x1, tx + tw) + ly += line_gap + label_bbox = (label_x0, label_y0, label_x1, block_top + text_h) + + meta = { + "surface_id": spec["surface_id"], + "grammar": spec["grammar"], + "seed": spec["seed"], + "pattern_bbox": pattern_bbox, + "label_bbox": label_bbox, + "pattern_shape": [int(ph), int(pw)], + } + return page, meta + + +def _bboxes_disjoint(a, b) -> bool: + """True if axis-aligned boxes (x0,y0,x1,y1) do not overlap.""" + ax0, ay0, ax1, ay1 = a + bx0, by0, bx1, by1 = b + return ax1 <= bx0 or bx1 <= ax0 or ay1 <= by0 or by1 <= ay0 + + +INSTRUCTIONS = """\ +# Print pack -- Phase 4b (print-and-photograph field battery) + +These six sheets are the fixed physical input for the L3 "field-proven" test +(spec s11). You print them, photograph them under a spread of real conditions, +and the recogniser is run on the photos UNCHANGED. The point is to find out what +real print + camera + light + angle do to recognition -- so photograph honestly, +including the awkward conditions. A photo that fails to recognise is a RESULT, not +a mistake; do not retake it to "make it work". + +## 1. Print (do this once, note what you used) + +- Print every PNG in this folder at **100% / actual size**. In the print dialog: + turn **OFF** "fit to page", "shrink to fit" and any scaling -- it MUST say 100%. +- Use **plain white paper** for the first pass. (If you want a second pass on + matte photo paper later, do it -- just record `paper:` in the manifest.) +- Write down your **printer model** -- you will put it in the manifest. +- The label in the bottom margin of each sheet says which surface it is + (e.g. `001-s0`) and "print at 100%". That label is NOT part of the pattern; it + is only there so you can tell the sheets apart. Do not photograph it as if it + were the pattern -- frame the pattern square/rectangle itself. + +## 2. Photograph (the condition matrix) + +For **each** of the six printed sheets, take a spread of photos covering: + +- **3 lightings:** `daylight` (near a window, no direct sun on the paper) · + `warm_indoor` (a warm bulb / tungsten-ish room light) · + `cool_led_or_shade` (cool white LED, or open shade outdoors). +- **3 angles:** `0` (straight on, phone parallel to paper) · `30` (~30 deg + tilt) · `60` (~60 deg tilt -- a steep, hostile angle). +- **2 distances:** `fills_frame` (the pattern fills most of the frame) · + `far_2m` (stand back ~2 m; the pattern is small in the frame). + +That is 3 x 3 x 2 = 18 photos per sheet if you do the full matrix. If time is +short, prioritise: all three lightings straight-on and filling the frame first, +then add angles and distance. Partial coverage is fine -- the summary marks any +question it lacks data for as "insufficient data" rather than guessing. + +Phone camera: use the **default** camera app, **auto** everything (auto WB, auto +exposure, HDR as it comes). Do NOT use a "document scan" mode -- that flattens +lighting and defeats the point. Hold steady; a blurred shot is a blurred shot. + +## 3. File naming + +Names carry NO meaning -- the manifest does. Let your phone name them +(`IMG_0001.jpg` ...), or use anything you like. Just make each filename unique and +put every file in the `photos/` folder. + +## 4. Fill the manifest (this is the important part) + +Copy `photos/manifest.template.yaml` to `photos/manifest.yaml` and add **one +entry per photo**. Each entry ties a filename to the surface it shows and the +conditions you shot it under: + +```yaml +photos: + - file: IMG_0001.jpg # exact filename in photos/ + surface_id: 001-s0 # the id printed on the sheet's bottom label + grammar: bar-cascade-001 # bar-cascade-001 for 001-* sheets, iso-002 for 002-* + conditions: + lighting: daylight # daylight | warm_indoor | cool_led_or_shade + angle_deg: 0 # 0 | 30 | 60 + distance: fills_frame # fills_frame | far_2m + printer: "Brand Model 123" # your printer + paper: plain # plain | matte_photo + notes: "" # anything worth remembering; free-form +``` + +`surface_id` MUST match the printed label exactly, and `grammar` MUST be +`bar-cascade-001` or `iso-002`. Everything else is logged verbatim. + +## 5. Run the recogniser over the photos + +From the repo root: + +```sh +uv run python -m battery.ingest photos/ photos/manifest.yaml --out experiments/exp-003-print-photo/ +``` + +That reads the manifest, runs the **identical** recognise pipeline on each photo +(no photo-special preprocessing), and writes `raw_results.csv` (one row per photo, +with the recogniser's verdict and, for the 002 sheets, the white-balance two-path +detail) and `summary.md` (per-condition tables plus the three Phase-4b questions, +each answered from the data or marked "insufficient data"). A missing file, a file +not in the manifest, or an unreadable image is recorded as a row status -- the run +never crashes. +""" + +MANIFEST_TEMPLATE = """\ +# Manifest for the print-and-photograph field battery (Phase 4b). +# +# Copy this file to photos/manifest.yaml and add one entry per photo you take. +# - file: the exact filename in the photos/ folder (names carry no meaning). +# - surface_id: MUST match the label printed in the sheet's bottom margin +# (001-s0..001-s2 for the bar-cascade-001 sheets, 002-s0..002-s2 +# for the iso-002 sheets). +# - grammar: bar-cascade-001 (for the 001-* sheets) or iso-002 (for the 002-*). +# - conditions: how you shot it; logged verbatim into raw_results.csv. +# lighting: daylight | warm_indoor | cool_led_or_shade +# angle_deg: 0 | 30 | 60 (straight-on / ~30 deg / ~60 deg) +# distance: fills_frame | far_2m +# printer: your printer model (free text) +# paper: plain | matte_photo | ... +# - notes: free-form. +# +# The two entries below are EXAMPLES -- delete them and add your own. + +surface_id: null # optional default surface_id for entries that omit their own +photos: + - file: IMG_0001.jpg + surface_id: 001-s0 + grammar: bar-cascade-001 + conditions: + lighting: daylight + angle_deg: 0 + distance: fills_frame + printer: "" + paper: plain + notes: "" + - file: IMG_0002.jpg + surface_id: 002-s0 + grammar: iso-002 + conditions: + lighting: warm_indoor + angle_deg: 30 + distance: fills_frame + printer: "" + paper: plain + notes: "example second entry" +""" + + +def generate(out_dir, photos_dir=None) -> dict: + """Generate the whole print pack. Returns a small summary dict. + + Writes the six page PNGs and INSTRUCTIONS.md under ``out_dir`` (default + ``print-pack/``) and the manifest template + an empty capture folder under + ``photos_dir`` (default ``/photos``). Deterministic: identical bytes on + every run for identical grammars/generators. + """ + out_dir = Path(out_dir) + out_dir.mkdir(parents=True, exist_ok=True) + photos_dir = Path(photos_dir) if photos_dir else (REPO_ROOT / "photos") + photos_dir.mkdir(parents=True, exist_ok=True) + + pages = [] + for spec in _surface_specs(): + page, meta = build_page(spec) + # Cheap invariant: the label never touches the pattern (spec s2). + if not _bboxes_disjoint(meta["pattern_bbox"], meta["label_bbox"]): + raise AssertionError( + f"label overlaps pattern for {meta['surface_id']}") + path = out_dir / f"{spec['surface_id']}.png" + if not cv2.imwrite(str(path), page): + raise IOError(f"failed to write {path}") + meta["png"] = str(path) + pages.append(meta) + + (out_dir / "INSTRUCTIONS.md").write_text(INSTRUCTIONS) + (photos_dir / "manifest.template.yaml").write_text(MANIFEST_TEMPLATE) + # Keep the (otherwise empty) capture folder in version control. + (photos_dir / ".gitkeep").write_text("") + + return { + "out_dir": str(out_dir), + "photos_dir": str(photos_dir), + "pages": pages, + "page_size": [PAGE_W, PAGE_H], + } + + +def _main(argv=None) -> int: + parser = argparse.ArgumentParser( + description="Generate the print-and-photograph print pack (Phase 4b).") + parser.add_argument("--out", default="print-pack", + help="output directory for the page PNGs + INSTRUCTIONS") + parser.add_argument("--photos", default=None, + help="folder for the manifest template + captures " + "(default: /photos)") + args = parser.parse_args(argv) + summary = generate(args.out, args.photos) + print(f"wrote {len(summary['pages'])} pages to {summary['out_dir']} " + f"(A4 {summary['page_size'][0]}x{summary['page_size'][1]} px)") + for p in summary["pages"]: + print(f" {p['surface_id']}: {p['png']}") + print(f"manifest template + captures: {summary['photos_dir']}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(_main()) diff --git a/photos/.gitkeep b/photos/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/photos/manifest.template.yaml b/photos/manifest.template.yaml new file mode 100644 index 0000000..42f26a1 --- /dev/null +++ b/photos/manifest.template.yaml @@ -0,0 +1,40 @@ +# Manifest for the print-and-photograph field battery (Phase 4b). +# +# Copy this file to photos/manifest.yaml and add one entry per photo you take. +# - file: the exact filename in the photos/ folder (names carry no meaning). +# - surface_id: MUST match the label printed in the sheet's bottom margin +# (001-s0..001-s2 for the bar-cascade-001 sheets, 002-s0..002-s2 +# for the iso-002 sheets). +# - grammar: bar-cascade-001 (for the 001-* sheets) or iso-002 (for the 002-*). +# - conditions: how you shot it; logged verbatim into raw_results.csv. +# lighting: daylight | warm_indoor | cool_led_or_shade +# angle_deg: 0 | 30 | 60 (straight-on / ~30 deg / ~60 deg) +# distance: fills_frame | far_2m +# printer: your printer model (free text) +# paper: plain | matte_photo | ... +# - notes: free-form. +# +# The two entries below are EXAMPLES -- delete them and add your own. + +surface_id: null # optional default surface_id for entries that omit their own +photos: + - file: IMG_0001.jpg + surface_id: 001-s0 + grammar: bar-cascade-001 + conditions: + lighting: daylight + angle_deg: 0 + distance: fills_frame + printer: "" + paper: plain + notes: "" + - file: IMG_0002.jpg + surface_id: 002-s0 + grammar: iso-002 + conditions: + lighting: warm_indoor + angle_deg: 30 + distance: fills_frame + printer: "" + paper: plain + notes: "example second entry" diff --git a/print-pack/001-s0.png b/print-pack/001-s0.png new file mode 100644 index 0000000000000000000000000000000000000000..f616080a7a37f3083b9bd8a5a74bf75a08c34ae1 GIT binary patch literal 159851 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%0D6WHg{gB^fK%WjV5i6s^5(%(b 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%0D6WHg{gB^fK%WjV5i6s^5(%(b zW+|^@?L>F_DOWqXr7{q$KLC#Emyq2ss53nDRCb`5sfIp2QgTY35rE`U{9t|h0;g%Lxcnizo{6@ZyGCLqk z6Xjg5(CJxbfRB~@#S$Tjy%oAI$jDIVs_HwLI4tV9F|sYAjcC7e=^9lo@KTxwxv`+5 zrIVr%FS2m=zZ){OkIKlXOic%1Y_D)~r`RlNY?$SJ<_j=QAM>e-lR*bQpcpBm17})@ zJAI*sBp|`KU5UXr>7*f{v!}aN5oM?>ROW_d@E(ps3jlCT8)e&_p+v+*h(A`((SrT} zUTW~K0qm{F)*n@lICJmUc?;S=uvu>dtkmRB1;aY>8aTp~SVI@sW3@aT1zP(sPasSs zBGL$08vC0(HsC~-;WB=bfeG&C*;-(NM%U~0zZIBgX4_2}jUo^|LNo}FuDtx(==2ss zXL)8AV8hBu@lcFIYO9qW!izEr`vUL*Gb$@z4oSiHQQ6Tc%aie&g@3fC26(_6mQEsO z$bm{=SeXIHC@hl{Z0k@i0a>_6lpX*Z7%LhfdnhKS!XUaD=9hP>u?o(z?a{6k&Uomi zg<4%7zBqqaqGHsrCONmX>qqlVt?ph9yq#1qQvSGYoOC)Qq3D+NOq5VrhAJe;w96N7 zyIE{mjOiw@Ii%Z;SyZ;@b5Sd`lP5XoB_5kG>2$Jo#2nir1`~Q@ie!P!I|`7XUhN56 zWY%TSF08{e)3=jXcq(knt6>J>-4e)G>}ZMDGJ@FHXu>@5W*QKD0D&y6lVSGfD3f63 z9h-Hs5O!ag2W!^}!-c_ZCrvx^F!bN&9x&a%7PQg-sv!8t6kbloC;J}di?-1czZEGy z_&Sk5H`T{l;;FvCnUv*2IJVT`bxn5av&^bwQP4l=T;&L-Jl1EACjTQFkuX=3*aEKX zvx&-y6nK!6Nj1$l(KEpn!Lazmd5UCgpuG1JyhK!kdBn)T1e6~x@A0>!=!8KsK;X3l zu>M5WhyUI;C1KPUI}6~>dj$oBO?*44ZBNiu!OR%xg(Y=p1dNi#QihUz)&g>ADJ`t; zCc;nJ6a*))t`Kh7lygvtc0#<61&#QaTU=$RzauT)_%yiCUMd%1zO4*FLlb?R&i z5sAAHG6wTsH(?OgC6uJHEahaj%ak7C`R|%{cr7ied&{mn`GtA;kpM8Qt{>R+!Zj!O z7KOg>RU&j4>$P>2(;5-V8h{I%A=xY;I1ZO4%q#iiOc%-;r-&M1K36(uN8q;PqGXF9 zg?;hMLZDHIw92IDq%#i*E*3p>gZ-S^SO`9LScue+3-QpSR1 z7qu}YkMl3&v3d}gl<62Z%kT@Fd((;;3j4Ofdx7}pSOyJRRPr`8A25r!s{>fk2COA? zrUN*=Q!YF`LwURSr~1YwbY`AHH5VlF%&b`lThj^>Q5CBXEdWY{Iy3L|V827^>U&}_ zt7TzSAMw`${G}X^)pbjN1$GjDhwldNne>wjE&pIteVrM31k0y%Y;;`?*= z2{6K{j3OCBX1nsDmUJr6`5I7kXGQT8Gfs1yC;Tnk zUmz&pbWE;7GG1v8huRF5Hpo1g!Vb@$%=*1jJdipMQ`EwT9B|T_>ws!eFY8|=iK0s1 zt3%91{OY5dGSXlZdaPzdxg8L;PvC7{z+}B>#lx4w3Y=>t5f0_(X|-8C)^xkM61bCc zre81`jCD{5Re;N6Hz1mBA{2X|^eRdf>x+!aVr>^kH9L3fus&;yYosD9t6w)arQTzv za(EvI?`*zyO_-p|Au}@zE~ry&$e9Cx*SEWd;)az|F^36d2CYV1QQ}hcQtl*JQ{#>M zond*JYBoD9`xDKmwH2kAP{MO~S4=X;Q^^^t1YYyEaw*G z;f-+DgNhu7rXw6Vk5*~0but9}8xV1(G=wjNaD6vK-<0{B9Lh-xH^oK$kA=fbE#RYxlavB!DZv|_)eMU~J3iX>IE znb1sd{}YdpsRH$!fYQDGJ?*E_9vN<5t@uXk4?&>~j>6e;Sy5HOeX7`8p1hLMvPT>z zw1}h`FZ(T~c0S)x2_6VlNvDoV1xfc|cdB{ z$R+9DQhH*Z$;7^P#ZYImHozw(2jqQ|5cB_UjtDy4{x*CIz03zTOdDyD#?cD3qvRXN zHr1I9JW6OOsT9udLx_!V2&-<#FU=x?6Hyx0uTTaEbxdys5aAiP(FuMw!=4; z$FYdnDU%4Cub@1JyD~7h=~QcKf~h)DZ|!gELwTmbZ96TC<>8>DtzRfVKE-4^sgntu z^WuufD*A3y+>c{DjYhtCn&<>7@h7FMLg$Z*&RBhH@Q|V$(wIg^#mVGPtd@r@;2{Nv zsWbY7HE2YAp~6LWY8VY142dm-5Xzqwr8C?w#uW=u_ozVGR7u-P%Il2La9D$9K5gaI zGaQqb7|*0jWnDoNo+%41WsQRZF;GP4`iKoa#wk?*90Ym<*dK^L$6}E~VnTVFs4n+E zbouCT4W$;0KP&aAha3TA{<^!1tj*=hwh+kH0O?yu|0;GD&AIijGtL`5w53!1F{X;L zX?2&|EwNH|KN_Z-^8uw1^9k44OlZN3C=Akgb998tz}$M_f zwte7~VXfa}7&OdBSXKRHz9?_;V?)5D!n3qAAe)-ixP#*?ZE2kXcu;f%1s~4QF_yqz z&@xtAP+kE4BypwFWv>c{AHvSmsG1;D`M1^bO;zcyL!CM-!WZ_Z(E+??>dMPS#c#V`Jdue0) zJ>p&faeJ27WR_tWZXGYyv0CNH^S_qV*$#CqG|wNX2< zh5#K{>j5&wy+2Aw=Uh8OhX(!%%z}X3cDfXPExT8ED>eq0xb*^$PVf}Dm@04@6SVOQ6 z(o}Ns&DT@u%vlT<5~G)DFd4qUq+qwKJOx82)T|s9il$ZL0p41`mK8|A&Za<)p0=RX zZOlwGZcCVpc3XnOS;ii=SLy1qU?UxLaHZV_n!us#3%4L+Stk*1EO2CWB$9r6qCILr z2Y5m!1o*JZ=P(Agll2f(f7x)Ai9l#6_hf+cH8?7=6V5!Cwv6>>_?34y<;mI)gRD42 zvSZM?R-1+Og}hnYHvcJcgQW3{=6d%kR#g_ITv!0lo9TvX&M*aDsk_<-E^ZpWps>+n$;bZ? z-Wi-RIIHsSG@mJc#U-b%hIv=Go!MCkk1?6Ol=~t3Y#O~X=dz>IT_-LoaPN`0D6Dwl z0QZ_z>?$yTBfLXx8@K*KZ}0e;jqoN@D7^f-~5ul-q)plbLz~N6QxlF?sRM3#5tnf%1X=o zqv#Csw{7F#Dz*c7V(>F&$AMtyPXpea<-2F=rL8UrjhM~RyOPn#$s^6Sn@|0BPspsj zTx*GBd~WotTx98UDR3Iu%Xj>*bEAFtB>mB{+qtNNpMtMSW{3r&|)U>FK>%E=suFX1o zqi=r9S$GH&UL-b3a-5U!-bzapotOJmzv3brd^1;J+iUQO7V?wF&yzgCi%gsO`4C2k zrYHtZ&J^ZJD?-8m|6}NA#TdwOKkeKVC%hA|soj_#@4~A+@sFX8psyPe_war zS_-?)IcwvHo^mpH-&((pHLFgPb||DbM1mi9KTZnWexqkqR^icHPmRx?3S)IfZ6}O`eEZ^3NHzdtiNy@ z*QNyfpE6Kxxro7bsuFd)GYV(b?s?nQ_i1J@Wc`(gDgsB)`{j-9WG)3r!*SO9CAw6w zv5>CAfQ1F_eRcO1p)YqxUY3|zj4Zd8#Fb~w?T9}5`i~uSuhZi!R!8Pa(2|?K2tJdz zByK_2bq4cfC{9sMY(6M$1sm>rk{wARsiZwCk;<9#AxS`(<0+rnS!4_Czr`i<@B=na24v}s;k1LKc6*z{8wjl?z+ijE^A z*gg=zEX`+FB23V{9rnQ5YHz?dDG~Z9I4IFg+?_w)XF?h3HdF7rUg>=p=f|C6Ev(5 z-WMNV?dSqdEHNlDk$D$DnR+9@>5pR0MxivKb&Nc z{t^$#e}_=4MM4T$SD9b|SMi=uhSU7_$|T{PVYk-Ufq=rUfZv&90gF{Fq7NncK3(5w zgan%gurPk?@0mYef+WHL6=tQT+(@D-euB+y7>WKHm!lMv$~;zXME2eH9R-k$s5Y`4 zN=^|z?_?cE_^VKsrh_l+Ep+I?$Jvu#;DRhf+$<;We_FTUoMr)24#`uT^P{~;2b_X; zL;}SMuRR0o=&8Khgt<@2sw*0bzAVDBrMZHH3OV$NHOm>o$bKra!8hTKSK+f7t0`yT z`TDMc(P6hN?H>C+adR584x75$7(Rc%nU-HG+})iMI$-fJCV@{<7}-B6 z^zm-w+aJ$A!I#gd@JCaNbYl8n^uILm{XojuSZM<9ZM#I$q=K`=t0)H+Ja7D`Pqezw z&6wrM5DhllJ2_ke!g9}J9wReuyqaG-TumTbrU8`lV!pyq4~$*U0>jlsbYprpY%bsz zE-KV_eMfu-7Bg^>qs4TDUnz`cqqKGP-osMB2qUT|G6+|Ukh!%){kxqE9dxKJ-u?tF zc5seG#u7D>KZnpvghuwIJXYi47~YUKXai8~gbIsH-jMnZkxflBj!zO@jm#yT&@e3- z6+)nfwYjd!t*Qmt_|w?Xbsr;dir_oWcA|3V1e?aSH4vOZUrUq`5P9!mL|GAZLpJf* zI;bza`Q#mD=SSF+b=;l0{l-|GBC3Uj+Qcb%&ZiU>1qM)D6ra=pN#8Bk(PfZ#Dk(vU zPrTA+ikl-FWP418QPi`_{c<45x)~i_$r1$7)(5BqxpiQCRN(U%beXsyV0E0 zRfBTi8A;D!m5?Gkl-RuV9V^B*GPhAA4Ab+QG@Re%<8j*(yQn#|MQH&0FrCj^aoupbDU-EZ}SCHbOcPb^d_)lE*i0JwP#vI{K zV}6u^hOoj#wQubT$8ULthT0w}^<^1ZC zo61HpsBRZaA|rTkaKc->UnPvvK#5?y;b;grmcN{-Xi!rmTj9r)spjGUWOAjO37RP< z>lt@bU~|3Vj>Zr*Lwupz1f}1>_5X#XM4`f(YOgXz!lT4WAB^_o4Fm=o2vr#X>&&k; zwF(#!=QxC&2^G-Z@tc)vYN0H@G3wAvax=xzLI^3NC~IxVv|iFGv~XH@@L>8DkaJN( z`AQI}V}Zo$dX94gD4rZzv?zQatbW2HR69XA*&_WKnKU1wwKKrSdgl-JDB=o!)Y@Ui{0+MI>IiSm zpzj4x-Rv~&?(jU3C$Ic$h|cwt(--LSR@CM;;FXM2@}`E+7$ug%K^GN_^$;>Fb~HgqA$V0lLeS#CJw-5@4`NLU zMjn`@o1Zii!dy; zjoTEo7jt&N*Eby55M@5D>4*s-d8{Q7BU2?8Q=Y?njoGWoOy)kc?4J3!CMBZim5ywQ zzMQ4h7M2J~-@cr$$dkC3ar&bo+iqKo{c)tWIr7e+O={d+#Z5kdJLm_D*{m7i>7PYT z#$g$_G~~q;nHz{)GH*X)2T8qAI;4d z9HUznCiEZ=S(ju;xFj#o7-b%he~YWy(H*=$&6MN?dRB=9UFkFB*54WTfIBOXz+?G0 zY4XBA{)My=&+A{)fi~8ems<;D1ER3+c*2pE$>(Rfp90_9@VG=Fv8I`lw6u~%6|0$z-2ok7K&Mv~Tu3T2L9EyO$wLCNj#Q8> z{Vdv_G3A1rvnC{K0YYX%2EE)_Csf5c&H>$p)R3$UMP&b41_7}e1(%zx91Jq2(wz?W zuc79__MAlj#M>Sa;GZH{MV5mS3Q}&OcysUA(CDbF&PcbDpD%P0+u z9}c|baH_~M5gO~HA;R{I*|rig0vqxag*F_!|02jGetuBSqNwC`UOc?NoKNwrPz*O0 zo|guMlXBV$N8yP3>(W|+a)bB&N%%uH5|DXVmMdc05EANO3l0EHV4@;!EgKXZMF*LY zU|P2+{P-c)Q&I^<8)e*Eej~)!M7~x&esax+L+IDapMUG{$Q~|UPrmx(A4fftX1aEL zuFKDVR(k$$Ll|;6$mY^!W9jbo%?`~P9>0FmCmTlfTK&NXo}6Wnf;m2JdR7XDbUF;4uNw?3nh!SzmcHN0aS7{IjyCq}dH zRYu<}&$IY1uFaT`*zsiPoyc8&15tE*N=hKv8`UdyYB2i@dY^CBKC@_-UwVG!tJ{ws z`t&t=iore1d+Ry-J-Ta5dH9N!KMyDm*0){Ty{!9FXUl8e-m=6H-tWepO5h<^wx4~^ z*aN=S`y0Hh{*@%RxS&{HtBq*I18S=;qO;FgoSzd&3vO zRZ@*>UfZzv@!rL|^Ytm`;APws66^G~5c{KR4^924xahg37N0NQKDM~1bjiUcvERZw zQB7_G-2GEe^x3>9eM(N&xZc-y=er{F;rWt%TFu^$ymtrd^RDmT-d~<%EgNmnwjYxZ z2X%-_&A%Gqy>;8zRfXP9E%x3Tym6lIwNCK5*63A7g5B3D?tu)h2YA~#n^rzo*4=ip zeBoese;D%KpPH0P|!;MSPLIe*Pajfo#WY2r%w@{O%fzVgZbH|{va?s9w)WZx;@(Uumh zpJ=c4bb=4ngC}@QRxAa)GXE8Nb(FR;|LQ%vHQxRdx^PkQ!>3NY246O4bNtX#qmF{8 z?AT#RZ4K;T+WWJ@AV}!)<>EeH!>8kgfufz~r5A`F2k+M&wEyUCWpjJN2MbYn==pNv z#4?n9Zpp!B>|3{?ePJWU<}v5aPKS@lqY4xAhWaLm3J%Xm)dlWyX=pk}g6)~GL+gMX zARq68jX9@3Bep zy1NwO1Qy19d;_*CPTiQcPvh^%eN^)QWADx5YRv!s@zZXJni)&hFf%l^l8{P;!63?( zEES0?Q4vMksZb;tA*6+dkT#)cJ1LToCP|`>k|NcqRHyy>yq2?dV&=YopWpAkAHOeu z%uv_zUS7-d`Fy>u>&mNXa;h6aIBC1eHzs`m(Wr(kFvQHk$DaEY1Z(B0k5T%mp$IfG7X(%I+l*%eUL;&_z2lis?2xE!~?$VngGOfG1s z8?b*oX>sjCFh7k?!rqy-VEMO~i^262oWzwwyy~nnm*g%J{E+tZx@D)oZunI#)xRf2W$-F|_O2&8SPu$ao9a11{dxqtQQFPntsR zRpRK)rWhnXAbmr8@8CfvE_RQtL=P2nY|oKFJ(o-t8sYid9NLn%B9sv&6^-g19h@a+ z{Bo7X^`crNo2^U95fMi>+l#LW0tQpz%8dx_j7EGXxw;uC4xM%69&`H(VmhN;S2W(~ zUQe@J|8f) ze_P#5?8>~bdmUyGc?gi9+XPdjQ$<2xx52L>?^*X&kl-0^wJx`HkvQDKgqN7ubSz(j zCz3{2O=D`8GL1oq*v|@yq;`(l4)R#8VKO;1Homh=fQ<8b{F!2@l($X^lCzBX<2M=0 z9Yo-7A3~1$_=j731i^N2GLKY1&63u&nS5pQ?wxLS!Q1K zZeKb;gY`92PJ<^6W6wU5y1DAFQ<66u+nau5xIG8-nIGgAUQ|A`3wQw0t9c6P87NVE z3(Nz#jlsQ|lH!U--fA|f4GGu_6}4T_=c5h{ICE@NB{<7mTsnTlr%^I{*gPU1vBO$h zTM?@h{OVHM;{kNPbq(_K)0{AYsddyBMc3`*W6eIyk_r;Ivvmpl2P@hvY(?`vh&cpP zujU&k$PD=;;%8JWW!5&39KcqY_>KUcIl9STK;U~x^<~{d>Fho9DwW|=3Q$RxiJHB# z$(q%#B-JMPs@j#@?gCr$lsk!eMdU4`YU`6w0tvK4uy26t)X8 z={j4JUxkS4zK9G?Eb;Ym{b!<^hHPpPM$p5r zh>0uy@_8$a9x!sdT z)s9fe3n8zL_*R_I-V#V0vSJZMe`v4kzD#(chz3|-Z1!!*L`-8m5?ul~*;|_3Fy73j z@O8I6196Y%4a9-sX2N&s9`%5dp7DmIO_9BB=4#1vQ9A3B$VQUEy@p&vuu5PMiko$_ z*&zbefd-PWvN8%nVulp;9Azcq>!W_+1E%92um;dX7|x3*@QX|lN^%$Bl_k)Q^GbdY z=cyu$km7GoisAeVb<*$gB@tb%0RR^NbiyAL)%s5!NDkqF+hqaR*4IrE=wh^fhy>x=^WAm-B6%D>VNF8Rv`m5E$WM0c zVKnCxGFTFjo+w^jg?r%>?<5*_mKQ{MT8Y5-12$4oTi}uT?wi$k4Ns=;m_gCJ2EVk^nL~ zLq*nu$8&k>)BOsTSBX%>hm=w&>22FxfE`BtZq zo14%&3deFGmASc2#2gsv-Tp0<|A@fA{+SZd$B?+9AJc$hg`<9|jcD8$ufYGeXyQRw z*!8cbNThL!j{L(o@P@GIBANh0onk^_VS=4Vo5lAbju#F-WSD2xQr|E8w%OndbtLk1 zrsS7zEH#P8b%}z>v&(2$ce8 zK71mTgp!#B1%#|G9==GRjsOX4j@k=BDBRwN=~vv31joX+>p-2E&g9=e2*?FUap^NL zkSyV>MqI63S4=A4UZa-dt5@^5La7l1ET_|vlx_?$5AGd0zL6JwsJ8>0;2Xn|JTI)< zQLd>@!er2UYDLJ^c_V`Op=OFjQECeS%*nzCNuy8P6%a2nkpC>gDY`b06^v$T*GL|% z9xuXkkj|Xd&COG#^-1nOYL5Vv5<&zaJCd~h{eSl4Y@5`F@pR>n=Bf-=EhJ~x5DH|o z4I4>I>wa5!#uzJc(91Hch9JRhIJI}6uZZ}-P=46+8Ut_b7U+OHJjn3hyajiA3go*aF~97 zk;($0Y|&M;(9tA==ShmG$RjXWLhKRVa6)m={p)6w$S4>N93k08*xm@W#Mz4y;CWIn z`85)*i_p=rE3)TpM=ttvna8{vBczmxP!>ejGze|VLwN`P zhLo^kM@k!rABYjPFGZ>*l=fa%A<(=CVDBVeAt%pn--S)8ZF1|X?OILC+KA>o#b4rZ zW}9f!!Pfg?nS#8kYl5J@Kt#sQHDWn{Jg#%4px{DEuM334kY=)|N7RcL+}{KxdqUb_ zWkN%#ghFZ}RI?l^&E zxUpL`Y5B`lzw-#N`0a_CFy7<|R+~~;K~jUemCcC*n{SC${fVC?gbVC~XYQ<7qNOq7 zI7ZDjk&%%U%|%g6kMAia_zn( zT#;huP|%+pC(@EawY`A63Y9nEZFcC4;kDh6hj7wFISa)A0tSPq0 zV_2BX3{h{@cqgpDl66cT0RH+(oE!o6<248!7Acw%C2Hq%fi)7oPxucE{xeL(f8O5^FHUf;QDszIvfI%o0!8F5^l0^Aa5Z|I712%w^@~pbydo=< zPKu-A+QRz{2W2gQWG7l1M$jDfB>Wh%U2xVYM$ihi*z^ z#f!Q>GnK4G38YEoECOs1%PiVgg-1+;aw!R$`s-e&8`x5IipCF4i=d!P$dHz$RI?n@ zMv&0R?j_DlO8%um&ls#DZY_2ge%3>n(e+2OSV@Jjwd0|qhVCJXWmONMUN5nSxDg^` z&s22P^#{~qTlG*p;W~?04MxN{M*yhyiBvZXT{k658?11VhCZSJBIi9gCG!F$tO=KW znW?dSdnS=1eJqcE+K4VKs@z#*@u!Sf(nlo%hZLFs@o{p3f2In;2^s&Li3*(v*P>c^ z`Y^pog!zrLxTnM!XM1wbXOZns4iNuuIc_Ivvr^rRem-fN~Lk%^gFHWDVQPBJ6 zWBQ{`{G8=9c<5yNJeQo1>yNZrw#>?D$aHC~$EOYJTE7fuv_xc&r_0|8s(unKmFK4) z*gG?*wqV_t3fE+GxHFhDI3Kes5P5bc>CTeV@BDPL58Voop1p}-9y7y>fKrkqVHYt?F!xT8paW>iqEGr<9iwpr<1&?uC7Z9TECNg z3&QdJNOMzTUhk{petBkdMdL?eI^Vcy(p21(csNP+>=vJv-HE936+f)X!&fV! zCr8jNEs^`Gn8Tk8YN*V2)WU6ZL&za}=-MxF!rL)N{S^1W`R?1V+>ufH_XdsOhU0Q0 zgzo%uTD6^9FQx&mS-ub7ixu07wbd^rIJ@NMr`Or{h-sL;>& z_BQZt%a+?i?(3K9e2H~ z#`_%wvF#Ey202bJ&kq>w9I*v&Zn9zT9JP8g*mBP)Cl`u$UI9>D-;zdl z+-&cXVO_EIFS62yB9 z_e7u|fF76@yi_)9BZDI)zD-1a0Wj|@59z$yl5H;aC`~Lb;jtFeypebhShu7=L>D_Z zBr`^F1bMSkn}>N>82f03dTx)i1hU4X`BB?YcA|nKJwstnYRpsB%Pc{>#)!XA8v(;H zIo>uGwshi1`94@3&KDaIV&k82Lcx^I01Rb3YD|n#J@(BmtRutnlGt`eyw!U2)Ow1a z883&BiGaNWnYpcT5aE9cOb5I=#eT^!#yOK+Gl-m|UZ>jiCFiMm=TKq8z?Il_OrFor3^