Epic: #31 · Depends on: #34, #35
Background
Assemble the adapters (#33), the grouping core (#34), and the validation (#35) into the public reconciliation entry point — the ReconciliationModule equivalent. The original drags ProcessPoolExecutor (for torch/GPU dispatch) and wandb alerting; neither is justified for fast numpy arithmetic.
Work
- A single orchestration class/function: validate → group+reconcile → return a new pgm
PredictionFrame.
- SRP: orchestration only — the math is the leaf, the mapping is injected, the I/O is the adapters, the validation is helpers. One main class per file; composition over inheritance.
- Drop
wandb and ProcessPoolExecutor; document why (numpy is fast, no GPU). If scale ever demands parallelism, add it behind the same interface (OCP) — do not bake it in now.
- De-mutated return (C-184).
Acceptance criteria
Validation
- Integration test running the full module on the S0 fixture (precursor to the end-to-end parity gate, the next story).
Epic: #31 · Depends on: #34, #35
Background
Assemble the adapters (#33), the grouping core (#34), and the validation (#35) into the public reconciliation entry point — the
ReconciliationModuleequivalent. The original dragsProcessPoolExecutor(for torch/GPU dispatch) andwandbalerting; neither is justified for fast numpy arithmetic.Work
PredictionFrame.wandbandProcessPoolExecutor; document why (numpy is fast, no GPU). If scale ever demands parallelism, add it behind the same interface (OCP) — do not bake it in now.Acceptance criteria
reconcile(...)runs end-to-end on the S0 fixture and returns a reconciled pgm frame.torch/pandas/viewser/wandbimports anywhere inviews_postprocessing/reconciliation/.Validation