summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/extract_missalemeum_oracle.py21
1 files changed, 18 insertions, 3 deletions
diff --git a/tools/extract_missalemeum_oracle.py b/tools/extract_missalemeum_oracle.py
index 044aa54..a010b52 100644
--- a/tools/extract_missalemeum_oracle.py
+++ b/tools/extract_missalemeum_oracle.py
@@ -18,7 +18,7 @@
# exists for every day.
#
# One line per day, pipe-separated:
-# date|rank|colors|title|tempora|commemorations|displaced|n_masses
+# date|rank|colors|title|tempora|commemorations|displaced|n_masses|commemoration_ids
#
# - rank/colors/title/tempora/commemorations/displaced are info.rank,
# info.colors (sorted, concatenated, e.g. "pv"), info.title, info.tempora
@@ -31,6 +31,17 @@
# colors/tempora/commemorations/displaced are IDENTICAL across every Mass
# of the same day for all 730 days -- checked below, not assumed; see the
# task report for why entry[0] loses nothing).
+# - commemoration_ids (Task B, branch ef-rg16a) is the ";"-joined info.
+# commemorations[*].id, index-aligned with the commemorations field ("-"
+# for an empty list, same convention) -- e.g. "sancti:01-05:4:r". Added so
+# test_oracle.ml's identity comparison has a second, independent signal
+# beyond the title text (the id encodes the commemorated saint's own rank
+# and colour too, verified across the whole fixture to always carry the
+# SAME calendar date as the day itself -- a commemoration's own natural
+# fixed date, by construction, since only a saint impeded on their own day
+# is ever commemorated there). Never parsed for its date component by this
+# fixture or the comparator (info.rank/colors already give the day's own
+# values); kept opaque and compared as a plain string.
# - Spaces in tempora are turned to "_" (matching the "no field has an
# internal space" convention test/fixtures/lectio-ef-2005-2050.txt already
# uses, so this fixture can be read the same simple way -- split on '|',
@@ -62,8 +73,9 @@ def main():
if first[k] != o[k]:
print(f"WARNING: {date} masses disagree on {k}: {first[k]!r} vs {o[k]!r}", file=sys.stderr)
comm_titles = [c["title"] for c in first["commemorations"]]
+ comm_ids = [c["id"] for c in first["commemorations"]]
disp_titles = [d["title"] for d in first["displaced"]]
- for t in [first["title"]] + comm_titles + disp_titles:
+ for t in [first["title"]] + comm_titles + comm_ids + disp_titles:
if "|" in t or ";" in t:
print(f"ERROR: {date}: field {t!r} contains a delimiter this fixture uses", file=sys.stderr)
return 1
@@ -71,7 +83,10 @@ def main():
tempora = (first["tempora"] or "-").replace(" ", "_")
comms = ";".join(comm_titles) or "-"
disp = ";".join(disp_titles) or "-"
- rows.append(f"{date}|{first['rank']}|{colors}|{first['title']}|{tempora}|{comms}|{disp}|{len(data)}")
+ ids = ";".join(comm_ids) or "-"
+ rows.append(
+ f"{date}|{first['rank']}|{colors}|{first['title']}|{tempora}|{comms}|{disp}|{len(data)}|{ids}"
+ )
if len(rows) != 730:
print(f"ERROR: expected 730 days, got {len(rows)}", file=sys.stderr)