"""which transit combinations are actually missing?

Generated from src/content/docs/reference/pairs.md.
Run with the documented Fieldwork release in a writable directory.
Exports are saved there using the filenames shown in the walkthrough.
"""

import pandas as pd
import fieldwork as fw

cells = [
    ("morning", "Harbor", "single", 2),
    ("morning", "Harbor", "pass", 2),
    ("morning", "Hill", "single", 2),
    ("morning", "Hill", "pass", 2),
    ("morning", "Airport", "group", 4),
    ("evening", "Harbor", "single", 2),
    ("evening", "Harbor", "pass", 2),
    ("evening", "Hill", "single", 4),
]
rows = []
for period, route, ticket, count in cells:
    for _ in range(count):
        rows.append((period, route, ticket))

boardings = pd.DataFrame(
    rows,
    columns=["period", "route", "ticket"],
)
print("Rows:", len(boardings))

report = fw.pairs(
    boardings,
    ["route", "ticket"],
    include_absence=True,
    reference_domains={
        "route": ["Harbor", "Hill", "Airport", "Ferry"],
        "ticket": ["single", "pass", "group", "student"],
    },
    pair_contexts=[{"period": "evening"}],
)
records = report.to_dict()["pairs"]
summary = pd.DataFrame(
    [
        {
            "population": "all" if not record["context"] else "evening",
            "rows": record["evaluated_rows"],
            "mapping": record["relation"],
            "V": round(record["cramers_v"], 3),
            "observed": record["observed_cells"],
            "absent": record["absence"]["absent_cells"],
        }
        for record in records
    ]
)
print(summary.to_string(index=False))

for label, record in zip(["all", "evening"], records):
    print(label, record["absence"]["classes"])

evening_only = fw.pairs(
    boardings.loc[boardings["period"].eq("evening")],
    ["route", "ticket"],
    include_absence=True,
)
local = evening_only["pairs"][0]
print(
    "Filtered empirical domain:",
    local["domains"]["a_size"],
    "x",
    local["domains"]["b_size"],
    "; absent:",
    local["absence"]["absent_cells"],
)

boardings["zone"] = boardings["route"].map(
    {"Harbor": "town", "Hill": "town", "Airport": "outer"}
)
mapping = fw.pairs(boardings, ["route", "zone"])["pairs"][0]
print(
    "Route to zone:",
    mapping["relation"],
    "; V:",
    round(mapping["cramers_v"], 3),
)

svg = fw.render_svg(report, view="association")
html = fw.render_html(report)

from pathlib import Path

Path("pairs.svg").write_text(svg, encoding="utf-8")
Path("pairs.html").write_text(html, encoding="utf-8")
