From 7cb2f5543b19b42df8a75ea6d209e2ec112c5ef1 Mon Sep 17 00:00:00 2001 From: igerber Date: Sat, 29 Aug 2026 13:13:34 -0400 Subject: [PATCH 1/5] marketing: DMLDiD launch carousel (Circuit palette) + claims-sync guard 11-slide poster-mode deck for the v3.11 DMLDiD launch (ML-forward hook; user decisions 2026-08-29): cover curve-vs-line motif, the confidently-wrong receipt (linear 2.5909, reported SE 0.0743, vs true 2.2388 - nominal-inference caveats slide-local), dark ridge twist, Chang (2020) paper slide (attributed paraphrase, no verbatim pull quote - the published PDF was not cross-checked word-for-word), annotated Case-1 score slide (the UNCENTERED summand s labeled as such, centered score psi = s - ATT in the caption, orthogonality scoped to the learned nuisances g and l, arrows pixel-anchored via manual fraction composition - mathtext bboxes carry asymmetric slop), four-learner payoff chart with the double-robustness beat, honest DMLDiD-vs-CS decision split plus the learner-flexibility band (four built-ins with no extra installs; scikit-learn estimators fit the duck-typed fit()/predict() contract), dark code slide with a real sklearn swap line, production grid (aggregation/HonestDiD/sup-t, survey + clustering with the A2.3 same-target-population qualifier on the RCS card, diagnostics) with the DoubleML Case-1 parity strip (ATT diff 4.4e-16, committed spike), CTA with the single tutorial-32 mention. Every estimate is a seed-locked tutorial-32 value from the simulated truth-known example (labeled on-slide). tests/test_dml_carousel_claims.py (17 checks): notebook-surface sync with row-associated learner-table pins, arithmetic backing for the five-SE and recovery claims, constants-reach-their-slides + qualifier slide-locality enforcement, banned-absolutes list (including the retired overclaims: "in each nuisance", "confident CI"), REGISTRY sync for the DoubleML figure, dependency-free proof for the built-in-learner claim, and the documented-sklearn-contract check. --- carousel/diff-diff-dml-carousel.pdf | Bin 0 -> 210313 bytes carousel/generate_dml_carousel.py | 1313 +++++++++++++++++++++++++++ tests/test_dml_carousel_claims.py | 417 +++++++++ 3 files changed, 1730 insertions(+) create mode 100644 carousel/diff-diff-dml-carousel.pdf create mode 100644 carousel/generate_dml_carousel.py create mode 100644 tests/test_dml_carousel_claims.py diff --git a/carousel/diff-diff-dml-carousel.pdf b/carousel/diff-diff-dml-carousel.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2c823ba6518cb89c9a8181779f44633ae398d49a GIT binary patch literal 210313 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�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 16pt, captions >= 13pt, headlines 32-54pt, code >= 15pt; one idea + +one visual + roughly 25 words per slide). + +Palette: "Circuit" - graphite/slate structure with a single SIGNAL GREEN +accent reserved for the ML/curved-truth motif (the deck's visual thesis: +the relationship the fixed-form model cannot bend to). The misspecified +linear fit is always warm gray. Two dark slides: the ridge twist (slide 4) +and the code slide (slide 9). + +Narrative spine (ML-FORWARD hook - user decision 2026-08-29: lead with the +capability, then earn it with the confidently-wrong receipt): + +1. Cover -- "Plug any ML model into your DiD." Curve-vs-line + motif (illustrative); subtitle names DMLDiD + the + 3.11 release (version derived from pyproject, never + hardcoded). +2. The bet -- covariate adjustment is a modeling bet: classic DiD + estimators fix the nuisance forms (logit + linear + OLS); when assignment or trends bend in X, the bet + loses silently. +3. The receipt -- simulated staggered panel, truth known by + construction (said on-slide): linear reads 2.5909 + (reported SE 0.0743) against a true 2.2388 - almost + five standard errors off, behind a narrow nominal + interval (nominal-inference caveat on-slide). +4. Twist (DARK) -- ridge won't save you: 2.5898. A penalty on the wrong + functional form is still the wrong functional form. +5. The paper -- Chang (2020), The Econometrics Journal: two ideas - + Neyman-orthogonal scores + cross-fitting. + ATTRIBUTED PARAPHRASE ONLY, no quote marks: the + paper review (docs/methodology/papers/ + chang-2020-review.md) is pinned to the arXiv v3 + layout and the published PDF has not been + cross-checked word-for-word, so this deck carries NO + verbatim pull quote (unlike the CiC deck, whose + quote was verified against its published PDF). +6. The math -- the Case 1 score annotated term-by-term (matplotlib + mathtext, big type), plus the two one-liners: + orthogonality (nuisance error enters at second + order) and cross-fitting (no unit scored by a + learner that saw it). +7. The payoff -- the four-learner chart: linear/ridge miss high, + sieve 2.2804 and a hand-rolled PolynomialRidge + 2.2818 recover the truth line. The double-robustness + beat rides ON the slide: the propensity model is + misspecified in every arm; the flexible OUTCOME + model alone rescues the point estimate. +8. When to use it -- the honest decision split (mirrors + docs/choosing_estimator.rst): nonlinear / + high-dimensional covariates -> DMLDiD; a plausible + logit + linear spec -> CallawaySantAnna (fewer + moving parts). Closing band (user emphasis, + 2026-08-29): four learners BUILT IN with no extra + installs, or bring your own - scikit-learn + estimators already fit the duck-typed + fit()/predict() contract. +9. Code (DARK) -- the tutorial's own fit (sieve, n_folds=5, seed=42), + >= 15pt, plus the bring-your-own swap rendered as a + real sklearn import + constructor call. +10. Production -- feature grid (post-fit staggered surface: event + study / group / HonestDiD / sup-t bands; survey + designs + clustering with PSU-cohesive folds; + repeated cross-sections; per-cell cross-fit + diagnostics) + validation strip (Chang Case 1 score + anchored to DoubleML at machine precision; committed + spike). +11. CTA -- pip install; tutorial 32 mentioned ONCE, here. + +Claim discipline (verified against the committed executed notebook +``docs/tutorials/32_dml_did.ipynb`` and ``docs/methodology/REGISTRY.md``): + +- EVERY estimate on the deck is a committed, seed-locked tutorial-32 value + from a SIMULATED example with truth known by construction - labeled + on-slide wherever a truth value appears. notebook <-> deck sync is + pinned by ``tests/test_dml_carousel_claims.py`` (parses this module's + constants via ``ast`` and locates each on the committed notebook + surface). The 30-seed robustness sweep from prototyping is deliberately + NOT on the deck (it is not on the committed notebook surface). +- "Almost five standard errors" mirrors the tutorial's own wording and is + a DISTANCE in reported-SE units; the deck never presents the simulated + SEs as valid coverage. The rate-condition caveat is SLIDE-LOCAL wherever + reported uncertainty appears (review round 1): slide 3 labels the value + "reported SE" / "narrow nominal interval" and carries the + nominal-not-theory-backed caption, slide 4 says "nominal precision" with + its own qualifier line, and the payoff slide keeps the + illustrative-inference caption. +- The math slide labels the displayed expression as the UNCENTERED summand + ``s`` (its cell mean is the ATT; the centered eq. 3.1 score is + ``psi = s - ATT`` - said in the caption), and scopes orthogonality to + the LEARNED nuisances g and l only (the treated share p carries the + Theorem 2 augmented-score variance correction, per the REGISTRY + chang_panel_score note) - review round 1 correction. +- The repeated-cross-section card states Chang Assumption 2.3's + same-target-population requirement ON the card ("fresh samples from the + SAME target population each wave") - review round 1 correction. +- The COVER motif is stylized art (a curved relationship vs a straight + fit), labeled "illustrative" on-slide; it plots no tutorial data. +- CallawaySantAnna is named twice, neutrally and honestly: slide 2 (the + fixed-form nuisances it and classic DR estimators use - stated as a + design choice, not a defect) and slide 8 (the choosing_estimator + decision rule RECOMMENDING it when a parametric spec is plausible). No + "only"/"first" absolutes anywhere (claims test bans them). No external + competitor is named. +- The math slide renders the ``chang_panel_score`` summand exactly as the + REGISTRY documents it (Equation 3.1 as implemented); g-hat is the + conditional propensity, p-hat the unconditional treated share (the + REGISTRY notation split). +- The DoubleML anchor is scoped ON-SLIDE to the Case 1 score (committed + spike ``benchmarks/doubleml/chang_case1_parity.py``, ATT diff 4.4e-16 + per the REGISTRY DR-score families note) - never an end-to-end + staggered-parity claim. +- Survey/cluster support and the staggered ATT(g,t) construction are + documented library extensions of Chang (REGISTRY DMLDiD Notes); the + production slide says "documented extension" rather than attributing + them to the paper. +- The learner-flexibility claims are library-surface facts, not + comparisons: the four built-in learners live in ``diff_diff/_learners.py`` + on the library's own numpy/scipy solvers (no additional dependency - the + claims test asserts the module imports no external ML package), and + scikit-learn compatibility is the documented duck-typed protocol + (``docs/api/dml_did.rst`` names scikit-learn; sklearn is an ecosystem + library the estimator interoperates with, never a compared-against + competitor). The sklearn import on the code slide is illustrative of the + contract; the notebook's own custom-learner demo is a numpy-only object + (the notebooks CI environment deliberately excludes sklearn). +- Tutorial 32 is referenced ONCE, on the CTA slide (house precedent). + +Run with:: + + python carousel/generate_dml_carousel.py + +Produces ``carousel/diff-diff-dml-carousel.pdf``. Generation requires +``fpdf2``, ``Pillow``, and ``matplotlib`` (carousel-only dependencies, not +part of the library's install extras). +""" + +import os +import re +import tempfile +from pathlib import Path + +import matplotlib + +matplotlib.use("Agg") +import matplotlib.pyplot as plt # noqa: E402 +import numpy as np # noqa: E402 +from fpdf import FPDF # noqa: E402 +from PIL import Image as PILImage # noqa: E402 + +# Page dimensions (4:5 portrait -- same as the other decks) +WIDTH = 270 # mm +HEIGHT = 337.5 # mm + +# Version label derived from pyproject.toml (regex, not tomllib: py>=3.9). +_PYPROJECT = Path(__file__).parent.parent / "pyproject.toml" +_m = re.search(r'^version\s*=\s*"([^"]+)"', _PYPROJECT.read_text(encoding="utf-8"), re.MULTILINE) +if _m is None: + raise RuntimeError(f"could not parse project version from {_PYPROJECT}") +VERSION_LABEL = "v" + _m.group(1) +RELEASE_LABEL = ".".join(_m.group(1).split(".")[:2]) + +TOTAL_SLIDES = 11 + +# ------------------------------------------------------------------------- +# "Circuit" palette -- graphite/slate structure, SIGNAL GREEN = the ML / +# curved-truth motif. The wrong linear fit is always warm gray. +# ------------------------------------------------------------------------- +GRAPHITE = (30, 41, 59) # #1e293b primary accent / structure +SLATE = (51, 65, 85) # #334155 +SIGNAL = (22, 163, 74) # #16a34a THE CURVED TRUTH / ML (chart grammar) +SIGNAL_BRIGHT = (74, 222, 128) # #4ade80 signal on the dark slides +SIGNAL_TINT = (240, 253, 244) # #f0fdf4 gradient start +MINT = (187, 247, 208) # #bbf7d0 light fills / dark-slide text pop +WRONG_GRAY = (120, 113, 108) # #78716c the misspecified fit (warm gray) +SHADOW = (203, 213, 225) # #cbd5e1 soft card shadow + +# Text + structural (shared with the other decks for legibility) +NAVY = (15, 23, 42) # #0f172a primary text; dark-slide gradient start +GRAY = (100, 116, 139) # #64748b +LIGHT_GRAY = (148, 163, 184) # #94a3b8 +WHITE = (255, 255, 255) +DEEP_GREEN = (20, 46, 34) # #142e22 dark-slide gradient end +PANEL_NAVY = (30, 41, 59) # #1e293b code panel fill +GREEN_CODE = (74, 222, 128) # #4ade80 code string/number literals +SLATE_CODE = (148, 163, 184) # #94a3b8 + +GRAPHITE_HEX = "#1e293b" +SIGNAL_HEX = "#16a34a" +SIGNAL_BRIGHT_HEX = "#4ade80" +MINT_HEX = "#bbf7d0" +WRONG_GRAY_HEX = "#78716c" +NAVY_HEX = "#0f172a" +GRAY_HEX = "#64748b" +LIGHT_GRAY_HEX = "#94a3b8" + +# ------------------------------------------------------------------------- +# Seed-locked numbers from the committed executed tutorial +# (docs/tutorials/32_dml_did.ipynb). Every constant below is located on the +# committed notebook surface by tests/test_dml_carousel_claims.py - never +# edit one without re-running it. The example is SIMULATED with truth known +# by construction (stated on every slide that shows a truth value). +# ------------------------------------------------------------------------- + +TRUTH = 2.2388 # DGP-implied overall ATT (the fit's own aggregation weights) +LINEAR = (2.5909, 0.0743) # outcome_learner="linear": ATT, SE +RIDGE = (2.5898, 0.0736) # outcome_learner="ridge" +SIEVE = (2.2804, 0.0438) # outcome_learner="sieve" +POLY = (2.2818, 0.0438) # hand-rolled duck-typed PolynomialRidge object + +N_UNITS, N_PERIODS = 600, 6 +N_NEVER = 354 # never-treated units in the simulated panel +COHORTS = (4, 5) + +# Survey lane provenance (RCS + SurveyDesign fit) +SURVEY_DF, SURVEY_PSU, SURVEY_STRATA = 16, 20, 4 + +# Tutorial fit config rendered on the code slide (claims test pins these +# against the notebook's code cells) +CODE_LEARNER, CODE_FOLDS, CODE_SEED = "sieve", 5, 42 + +# DoubleML anchor (REGISTRY DR-score families note; committed spike +# benchmarks/doubleml/chang_case1_parity.py) - Case 1 SCORE parity only. +DOUBLEML_ATT_DIFF = "4.4e-16" + + +class DMLCarouselPDF(FPDF): + def __init__(self): + super().__init__(orientation="P", unit="mm", format=(WIDTH, HEIGHT)) + self.set_auto_page_break(False) + self._temp_files = [] + + def cleanup(self): + for f in self._temp_files: + try: + os.unlink(f) + except OSError: + pass + + # ----------------------------------------------------------------- + # Magazine vertical sidebar -- GRAPHITE bar, SIGNAL progress tick. + # ----------------------------------------------------------------- + def _draw_vertical_sidebar(self, slide_number, total=TOTAL_SLIDES, dark=False): + bar_x = 14 + bar_y_top = 45 + bar_y_bottom = 275 + self.set_draw_color(*(LIGHT_GRAY if dark else GRAPHITE)) + self.set_line_width(0.6) + self.line(bar_x, bar_y_top, bar_x, bar_y_bottom) + + ratio = (slide_number - 1) / (total - 1) if total > 1 else 0.0 + tick_y = bar_y_top + ratio * (bar_y_bottom - bar_y_top) + self.set_draw_color(*(SIGNAL_BRIGHT if dark else SIGNAL)) + self.set_line_width(1.2) + self.line(bar_x - 4, tick_y, bar_x + 7, tick_y) + + # ----------------------------------------------------------------- + # Backgrounds + footer + # ----------------------------------------------------------------- + def light_gradient_background(self): + """Green tint #f0fdf4 fading to white.""" + steps = 50 + r0, g0, b0 = SIGNAL_TINT + for i in range(steps): + ratio = i / steps + self.set_fill_color( + int(r0 + (255 - r0) * ratio), + int(g0 + (255 - g0) * ratio), + int(b0 + (255 - b0) * ratio), + ) + y = i * HEIGHT / steps + self.rect(0, y, WIDTH, HEIGHT / steps + 1, "F") + + def dark_gradient_background(self): + """Near-black navy #0f172a fading to deep green #142e22.""" + steps = 50 + r0, g0, b0 = NAVY + r1, g1, b1 = DEEP_GREEN + for i in range(steps): + ratio = i / steps + self.set_fill_color( + int(r0 + (r1 - r0) * ratio), + int(g0 + (g1 - g0) * ratio), + int(b0 + (b1 - b0) * ratio), + ) + y = i * HEIGHT / steps + self.rect(0, y, WIDTH, HEIGHT / steps + 1, "F") + + def add_footer(self, dark=False): + """Centered split-color ``diff-diff vX.Y.Z`` wordmark.""" + self.set_font("Helvetica", "B", 12) + dd_text = "diff-diff " + v_text = VERSION_LABEL + dd_w = self.get_string_width(dd_text) + v_w = self.get_string_width(v_text) + start_x = (WIDTH - dd_w - v_w) / 2 + + self.set_xy(start_x, HEIGHT - 18) + self.set_text_color(*(LIGHT_GRAY if dark else GRAY)) + self.cell(dd_w, 10, dd_text) + self.set_text_color(*(SIGNAL_BRIGHT if dark else SIGNAL)) + self.cell(v_w, 10, v_text) + + # ----------------------------------------------------------------- + # Text helpers + # ----------------------------------------------------------------- + def centered_text(self, y, text, size=28, bold=True, color=NAVY, italic=False): + self.set_xy(0, y) + style = ("B" if bold else "") + ("I" if italic else "") + self.set_font("Helvetica", style, size) + self.set_text_color(*color) + self.cell(WIDTH, size * 0.5, text, align="C") + + def _kicker(self, y, text, color=SIGNAL): + """Editorial section label: letter-spaced caps with flanking rules.""" + spaced = " ".join(text.upper()) + self.set_font("Helvetica", "B", 14) + tw = self.get_string_width(spaced) + mid_y = y + 3 + rule = 20 + gap = 8 + self.set_draw_color(*color) + self.set_line_width(0.7) + self.line(WIDTH / 2 - tw / 2 - gap - rule, mid_y, WIDTH / 2 - tw / 2 - gap, mid_y) + self.line(WIDTH / 2 + tw / 2 + gap, mid_y, WIDTH / 2 + tw / 2 + gap + rule, mid_y) + self.set_xy(0, y) + self.set_text_color(*color) + self.cell(WIDTH, 6, spaced, align="C") + + def draw_split_logo(self, y, size=18): + """Split-color diff-diff logo with SIGNAL middle dash.""" + self.set_xy(0, y) + self.set_font("Helvetica", "B", size) + self.set_text_color(*NAVY) + self.cell(WIDTH / 2 - 5, 10, "diff", align="R") + self.set_text_color(*SIGNAL) + self.cell(10, 10, "-", align="C") + self.set_text_color(*NAVY) + self.cell(WIDTH / 2 - 5, 10, "diff", align="L") + + # ----------------------------------------------------------------- + # Shadowed card helper (poster mode: used sparingly, big type inside) + # ----------------------------------------------------------------- + def _shadow_rect(self, x, y, w, h): + self.set_fill_color(*SHADOW) + self.rect(x + 1.4, y + 1.4, w, h, "F") + + def _stat_card(self, x, y, w, h, headline, sub_lines, accent, headline_size=40): + """One shadowed stat card: big number + caption lines (>= 14pt).""" + self._shadow_rect(x, y, w, h) + self.set_fill_color(*WHITE) + self.set_draw_color(220, 220, 220) + self.set_line_width(0.5) + self.rect(x, y, w, h, "DF") + self.set_fill_color(*accent) + self.rect(x, y, w, 3.2, "F") + + self.set_xy(x, y + 13) + self.set_font("Helvetica", "B", headline_size) + self.set_text_color(*accent) + self.cell(w, 16, headline, align="C") + + ly = y + 36 + for line, emphasize in sub_lines: + self.set_xy(x + 6, ly) + self.set_font("Helvetica", "B" if emphasize else "", 14) + self.set_text_color(*(NAVY if emphasize else GRAY)) + self.cell(w - 12, 8, line, align="C") + ly += 10.5 + + # ----------------------------------------------------------------- + # Figure helpers (matplotlib -> PNG -> fpdf image) + # ----------------------------------------------------------------- + def _save_fig(self, fig, dpi=200, transparent=False, facecolor="white"): + fd, path = tempfile.mkstemp(suffix=".png") + os.close(fd) + self._temp_files.append(path) + try: + fig.savefig( + path, + dpi=dpi, + bbox_inches="tight", + pad_inches=0.1, + transparent=transparent, + facecolor=None if transparent else facecolor, + ) + finally: + plt.close(fig) + with PILImage.open(path) as img: + pw, ph = img.size + return path, pw, ph + + # ----------------------------------------------------------------- + # Cover motif -- a curved covariate relationship (signal green) that + # a straight gray fit cannot bend to. Stylized art, not a data claim + # (it plots no tutorial data) - labeled "illustrative" on-slide. + # ----------------------------------------------------------------- + def _render_cover_motif(self): + rng = np.random.default_rng(2020) + x = np.linspace(-2.6, 2.6, 140) + truth = 1.6 * (x**2 - 1.0) * 0.55 + 0.6 + + fig, ax = plt.subplots(figsize=(10, 3.7)) + fig.patch.set_alpha(0) + ax.set_facecolor("none") + + xs = rng.uniform(-2.6, 2.6, 170) + ys = 1.6 * (xs**2 - 1.0) * 0.55 + 0.6 + rng.normal(0, 0.42, xs.size) + ax.plot(xs, ys, "o", color=GRAPHITE_HEX, markersize=5.5, alpha=0.30) + + coef = np.polyfit(xs, ys, 1) + ax.plot( + x, + np.polyval(coef, x), + color=WRONG_GRAY_HEX, + linewidth=3.2, + linestyle=(0, (6, 3)), + ) + ax.plot(x, truth, color=SIGNAL_HEX, linewidth=4.2, zorder=5) + + ax.text( + 2.68, + float(truth[-1]) - 0.15, + "what an ML learner\ncan fit", + fontsize=14, + color=SIGNAL_HEX, + fontweight="bold", + va="center", + ) + ax.text( + 2.68, + float(np.polyval(coef, 2.6)) - 1.05, + "what a linear\nmodel fits", + fontsize=13.5, + color=WRONG_GRAY_HEX, + fontweight="bold", + va="center", + ) + ax.text( + 3.9, + -1.62, + "illustrative", + fontsize=15, + color=LIGHT_GRAY_HEX, + style="italic", + ha="right", + ) + + ax.set_xlim(-2.8, 4.0) + ax.set_ylim(-1.75, 3.3) + ax.set_xticks([]) + ax.set_yticks([]) + for spine in ax.spines.values(): + spine.set_visible(False) + fig.tight_layout(pad=0.2) + return self._save_fig(fig, transparent=True) + + # ----------------------------------------------------------------- + # Math slide equation (matplotlib mathtext -> crisp big type) + # ----------------------------------------------------------------- + def _render_score_equation(self, dark=False): + """Equation composed from measured fragments, with the second + fraction built MANUALLY (numerator text, drawn bar, denominator + text) so the annotation arrows can anchor to center-placed text + objects instead of mathtext bounding boxes - mathtext bboxes carry + asymmetric slop (worst around \\left[...\\right]), which pushed + every arrow visibly right of its target in the first two cuts.""" + fg = "white" if dark else NAVY_HEX + accent = SIGNAL_BRIGHT_HEX if dark else SIGNAL_HEX + gray = LIGHT_GRAY_HEX if dark else GRAY_HEX + + fig, ax = plt.subplots(figsize=(10.8, 4.1)) + fig.patch.set_alpha(0) + ax.set_facecolor("none") + ax.set_xlim(0, 10) + ax.set_ylim(0, 10) + ax.axis("off") + + y_eq = 6.1 + frags = [ + ("prefix", r"$s \,=$"), + ("bracket", r"$\left[\,D \;-\; \hat g(X)\,\frac{1-D}{1-\hat g(X)}\,\right]$"), + ("dot", r"$\cdot$"), + ] + texts = {} + cursor = 0.0 + lead_gap = {"prefix": 0.0, "bracket": -0.12, "dot": 0.18} + fig.canvas.draw() + renderer = fig.canvas.get_renderer() + inv = ax.transData.inverted() + boxes = {} + for name, tex in frags: + t = ax.text( + cursor + lead_gap[name], y_eq, tex, fontsize=30, color=fg, ha="left", va="center" + ) + fig.canvas.draw() + bb = t.get_window_extent(renderer=renderer) + (x0, y0), (x1, y1) = inv.transform([(bb.x0, bb.y0), (bb.x1, bb.y1)]) + texts[name] = t + boxes[name] = [x0, y0, x1, y1] + cursor = x1 + + # Manual fraction: numerator / bar / p-hat, all centered on one x + # so the arrows can anchor EXACTLY (ha="center" text at a known x). + num_t = ax.text( + cursor + 0.35, + y_eq + 0.28, + r"$\Delta Y \;-\; \hat\ell(X)$", + fontsize=25, + color=fg, + ha="left", + va="bottom", + ) + fig.canvas.draw() + bb = num_t.get_window_extent(renderer=renderer) + (nx0, _ny0), (nx1, _ny1) = inv.transform([(bb.x0, bb.y0), (bb.x1, bb.y1)]) + frac_cx = (nx0 + nx1) / 2 + bar_pad = 0.12 + bar = ax.plot( + [nx0 - bar_pad, nx1 + bar_pad], + [y_eq + 0.08, y_eq + 0.08], + color=fg, + linewidth=2.0, + solid_capstyle="butt", + )[0] + den_t = ax.text( + frac_cx, y_eq - 0.16, r"$\hat p$", fontsize=25, color=fg, ha="center", va="top" + ) + frac_parts = [num_t, bar, den_t] + + # Recenter the assembled equation on x = 5. + span_mid = (boxes["prefix"][0] + (nx1 + bar_pad)) / 2 + shift = 5.0 - span_mid + for name, _ in frags: + x_old, y_old = texts[name].get_position() + texts[name].set_position((x_old + shift, y_old)) + boxes[name][0] += shift + boxes[name][2] += shift + for artist in frac_parts: + if artist is bar: + xs = bar.get_xdata() + bar.set_xdata([xs[0] + shift, xs[1] + shift]) + else: + x_old, y_old = artist.get_position() + artist.set_position((x_old + shift, y_old)) + frac_cx += shift + nx0 += shift + nx1 += shift + + # Bracket arrow center: the bbox RIGHT edge carries \right]-related + # slop, so use the reliable left edge and the dot fragment's left + # edge (which visually abuts the closing bracket) as the span. + bracket_cx = (boxes["bracket"][0] + boxes["dot"][0] - lead_gap["dot"]) / 2 + bracket_bottom = boxes["bracket"][1] + + pad = 0.45 + arrow_kw = dict(arrowstyle="->", color=accent, lw=1.8) + # propensity weight -> the bracket, from below + ax.annotate( + "", + xy=(bracket_cx, bracket_bottom - 0.15), + xytext=(bracket_cx, bracket_bottom - pad - 0.9), + arrowprops=arrow_kw, + ) + ax.text( + bracket_cx, + bracket_bottom - pad - 1.05, + "propensity weight\n(treated vs reweighted controls)", + fontsize=13.5, + color=gray, + ha="center", + va="top", + ) + # outcome-model residual -> the numerator, from above + num_top = y_eq + 1.22 + ax.annotate( + "", + xy=(frac_cx, num_top + 0.1), + xytext=(frac_cx, num_top + pad + 0.85), + arrowprops=arrow_kw, + ) + ax.text( + frac_cx, + num_top + pad + 1.0, + "outcome-model residual\n(what the trend model missed)", + fontsize=13.5, + color=gray, + ha="center", + va="bottom", + ) + # treated share -> p-hat, from below (den_t is ha="center" at + # frac_cx, so this arrow hits the glyph center exactly) + den_bottom = y_eq - 1.28 + ax.annotate( + "", + xy=(frac_cx, den_bottom + 0.1), + xytext=(frac_cx, den_bottom - pad - 0.75), + arrowprops=arrow_kw, + ) + ax.text( + frac_cx, + den_bottom - pad - 0.9, + "treated share\n(normalizer)", + fontsize=13.5, + color=gray, + ha="center", + va="top", + ) + + ax.text( + 5.0, + 0.15, + r"$\hat g(X)$: propensity learner " + r"$\hat\ell(X)$: outcome learner " + r"$\hat p$: treated share", + fontsize=14.5, + color=gray, + ha="center", + ) + fig.tight_layout(pad=0.2) + return self._save_fig(fig, transparent=True) + + # ----------------------------------------------------------------- + # Payoff chart -- the four learner estimates vs the truth line. + # ONLY committed tutorial values (point estimates + 1.96*SE whiskers, + # labeled illustrative-inference on-slide). + # ----------------------------------------------------------------- + def _render_payoff_chart(self): + fig, ax = plt.subplots(figsize=(10.2, 4.1)) + + learners = [ + ("linear", LINEAR, WRONG_GRAY_HEX), + ("ridge", RIDGE, WRONG_GRAY_HEX), + ("sieve", SIEVE, SIGNAL_HEX), + ("custom\nPolynomialRidge", POLY, SIGNAL_HEX), + ] + xs = np.arange(len(learners)) + ax.axhline(TRUTH, color=GRAPHITE_HEX, linewidth=2.2, linestyle=(0, (5, 3))) + ax.text( + 3.52, + TRUTH - 0.028, + f"true effect {TRUTH:.4f}\n(simulated - known\nby construction)", + fontsize=13.5, + color=GRAPHITE_HEX, + fontweight="bold", + va="top", + ) + + for i, (name, (att, se), color) in enumerate(learners): + ax.errorbar( + [i], + [att], + yerr=[1.96 * se], + fmt="o", + color=color, + markersize=14, + capsize=7, + linewidth=2.8, + capthick=2.4, + ) + ax.annotate( + f"{att:.4f}", + xy=(i, att), + xytext=(i + 0.09, att + 0.035), + fontsize=15, + fontweight="bold", + color=color, + ) + + ax.set_xticks(xs) + ax.set_xticklabels([n for n, _, _ in learners], fontsize=14.5, color=NAVY_HEX) + ax.set_ylabel("estimated overall ATT", fontsize=14, color=NAVY_HEX) + ax.tick_params(axis="y", labelsize=13, colors=GRAY_HEX) + ax.set_xlim(-0.5, 4.6) + ax.set_ylim(2.1, 2.82) + for s in ("top", "right"): + ax.spines[s].set_visible(False) + for s in ("bottom", "left"): + ax.spines[s].set_color(LIGHT_GRAY_HEX) + fig.tight_layout(pad=0.3) + return self._save_fig(fig, facecolor="white") + + # ----------------------------------------------------------------- + # Code-block helper (dark panel with token-colored lines) + # ----------------------------------------------------------------- + def _add_code_block( + self, x, y, w, token_lines, font_size=15, line_height=12.5, fill=PANEL_NAVY + ): + n_lines = len(token_lines) + total_h = n_lines * line_height + 26 + + self.set_fill_color(*fill) + self.rect(x, y, w, total_h, "F") + + self.set_font("Courier", "", font_size) + char_w = self.get_string_width("M") + + pad_x = 14 + pad_y = 13 + for i, tokens in enumerate(token_lines): + cx = x + pad_x + cy = y + pad_y + i * line_height + for text, color in tokens: + if not text: + continue + self.set_xy(cx, cy) + self.set_text_color(*color) + self.cell(char_w * len(text), 10, text) + cx += char_w * len(text) + return total_h + + # ----------------------------------------------------------------- + # Slides + # ----------------------------------------------------------------- + def slide_01_cover(self): + self.add_page() + self.light_gradient_background() + self._draw_vertical_sidebar(1) + + self.draw_split_logo(26, size=34) + + self.centered_text(60, "Plug any ML model", size=52) + self.centered_text(90, "into your DiD.", size=52, color=SIGNAL) + + motif_path, _pw, _ph = self._render_cover_motif() + motif_w = 224 + self.image(motif_path, (WIDTH - motif_w) / 2, 122, motif_w) + + self.centered_text( + 212, + f"New in diff-diff {RELEASE_LABEL}: the DMLDiD estimator.", + size=22, + color=GRAPHITE, + ) + self.centered_text( + 230, + "Double/debiased machine learning DiD (Chang 2020).", + size=19, + bold=False, + ) + self.add_footer() + + def slide_02_bet(self): + self.add_page() + self.light_gradient_background() + self._draw_vertical_sidebar(2) + + self._kicker(42, "Why You'd Want This") + + self.centered_text(78, "Covariate adjustment", size=44) + self.centered_text(104, "is a modeling bet.", size=44, color=GRAPHITE) + + self.set_xy(28, 138) + self.set_font("Helvetica", "", 20) + self.set_text_color(*NAVY) + self.multi_cell( + WIDTH - 56, + 11, + "Classic doubly-robust DiD (CallawaySantAnna and friends) fixes the " + "nuisance models up front: a logit for treatment, a linear " + "regression for trends.", + align="C", + ) + + self.set_draw_color(*SIGNAL) + self.set_line_width(1.4) + self.line(WIDTH / 2 - 30, 186, WIDTH / 2 + 30, 186) + + self.set_xy(28, 200) + self.set_font("Helvetica", "B", 22) + self.set_text_color(*GRAPHITE) + self.multi_cell( + WIDTH - 56, + 12, + "When treatment or trends bend in X, that bet loses - and nothing " + "in the output tells you.", + align="C", + ) + self.add_footer() + + def slide_03_receipt(self): + self.add_page() + self.light_gradient_background() + self._draw_vertical_sidebar(3) + + self._kicker(36, "The Receipt") + + self.centered_text(62, "Confidently wrong.", size=48) + + card_w, card_h = 108, 78 + gap = 14 + left_x = (WIDTH - 2 * card_w - gap) / 2 + y0 = 100 + self._stat_card( + left_x, + y0, + card_w, + card_h, + f"{LINEAR[0]:.4f}", + [ + (f"reported SE {LINEAR[1]:.4f}", True), + ("linear outcome model -", False), + ("a narrow nominal interval", False), + ], + WRONG_GRAY, + ) + self._stat_card( + left_x + card_w + gap, + y0, + card_w, + card_h, + f"{TRUTH:.4f}", + [ + ("the true effect", True), + ("simulated staggered panel -", False), + ("truth known by construction", False), + ], + SIGNAL, + ) + + self.centered_text(198, "Almost five standard errors off.", size=30, color=GRAPHITE) + + self.set_xy(30, 222) + self.set_font("Helvetica", "", 18) + self.set_text_color(*GRAY) + self.multi_cell( + WIDTH - 60, + 9.5, + f"{N_UNITS} units, {N_PERIODS} periods, cohorts treated at t = {COHORTS[0]} " + f"and {COHORTS[1]}, {N_NEVER} never treated. Assignment and trends both " + "bend in X - the linear model cannot. (SEs here are nominal, not " + "theory-backed: the DGP deliberately breaks the rate conditions.)", + align="C", + ) + self.add_footer() + + def slide_04_twist(self): + self.add_page() + self.dark_gradient_background() + self._draw_vertical_sidebar(4, dark=True) + + self._kicker(40, "It Gets Worse", color=SIGNAL_BRIGHT) + + self.centered_text(84, "Ridge won't save you.", size=48, color=WHITE) + + self.centered_text(136, f"{RIDGE[0]:.4f}", size=64, color=LIGHT_GRAY) + self.centered_text( + 166, + f"reported SE {RIDGE[1]:.4f} - same miss, same nominal precision", + size=19, + bold=False, + color=LIGHT_GRAY, + ) + + self.set_xy(30, 204) + self.set_font("Helvetica", "B", 24) + self.set_text_color(*MINT) + self.multi_cell( + WIDTH - 60, + 13, + "A penalty on the wrong functional form\nis still the wrong functional form.", + align="C", + ) + + self.set_xy(30, 250) + self.set_font("Helvetica", "", 16) + self.set_text_color(*LIGHT_GRAY) + self.multi_cell( + WIDTH - 60, + 8.5, + "Regularization tunes a model family. It cannot leave the family. " + "(Reported SEs are nominal - illustrative under this DGP.)", + align="C", + ) + self.add_footer(dark=True) + + def slide_05_paper(self): + self.add_page() + self.light_gradient_background() + self._draw_vertical_sidebar(5) + + self._kicker(38, "The Paper") + + self.centered_text(66, "Chang (2020):", size=40) + self.centered_text(92, "stop betting. Learn them.", size=40, color=SIGNAL) + + y0 = 128 + for num, head, body in [ + ( + "1", + "Neyman-orthogonal scores", + "built so small nuisance errors hit the estimate only at second order", + ), + ( + "2", + "Cross-fitting", + "nuisances learned on K-1 folds, applied to the held-out fold - " + "flexible learners without overfitting bias", + ), + ]: + self.set_fill_color(*SIGNAL) + self.set_xy(34, y0) + self.set_font("Helvetica", "B", 26) + self.set_text_color(*SIGNAL) + self.cell(14, 12, num) + self.set_xy(52, y0) + self.set_font("Helvetica", "B", 23) + self.set_text_color(*NAVY) + self.cell(WIDTH - 86, 12, head) + self.set_xy(52, y0 + 14) + self.set_font("Helvetica", "", 17) + self.set_text_color(*GRAY) + self.multi_cell(WIDTH - 92, 9, body) + y0 += 52 + + self.set_xy(30, 244) + self.set_font("Helvetica", "I", 15) + self.set_text_color(*GRAY) + self.multi_cell( + WIDTH - 60, + 8, + "Double/debiased machine learning for difference-in-differences models " + "- The Econometrics Journal, 23(2).", + align="C", + ) + self.add_footer() + + def slide_06_math(self): + self.add_page() + self.light_gradient_background() + self._draw_vertical_sidebar(6) + + self._kicker(34, "The Math") + + self.centered_text(58, "One orthogonal score per cell.", size=36) + + eq_path, _pw, _ph = self._render_score_equation() + eq_w = 232 + self.image(eq_path, (WIDTH - eq_w) / 2, 84, eq_w) + + y0 = 182 + for head, body in [ + ( + "Orthogonal.", + "The score's derivative in the LEARNED nuisances g and l is " + "zero at the truth - learner error is second-order. (The " + "treated share p gets its own variance correction.)", + ), + ( + "Cross-fit.", + "No unit is scored by a learner that trained on it - " + "flexibility without self-overfitting.", + ), + ]: + self.set_xy(34, y0) + self.set_font("Helvetica", "B", 20) + self.set_text_color(*SIGNAL) + head_w = self.get_string_width(head) + 4 + self.cell(head_w, 10, head) + self.set_xy(34 + head_w, y0) + self.set_font("Helvetica", "", 17) + self.set_text_color(*NAVY) + self.multi_cell(WIDTH - 68 - head_w, 9.4, body) + y0 += 34 + + self.set_xy(30, 256) + self.set_font("Helvetica", "I", 13.5) + self.set_text_color(*GRAY) + self.multi_cell( + WIDTH - 60, + 7, + "Chang eq. 3.1 (panel case) as implemented: the mean of the summand " + "s over a (cohort, period) cell is that cell's ATT; the centered " + "score is psi = s - ATT.", + align="C", + ) + self.add_footer() + + def slide_07_payoff(self): + self.add_page() + self.light_gradient_background() + self._draw_vertical_sidebar(7) + + self._kicker(34, "The Payoff") + + self.centered_text(58, "Same data. Same propensity.", size=32) + self.centered_text(78, "Flexible outcome model: truth.", size=32, color=SIGNAL) + + chart_path, _pw, _ph = self._render_payoff_chart() + chart_w = 226 + self.image(chart_path, (WIDTH - chart_w) / 2, 98, chart_w) + + self.set_xy(28, 232) + self.set_font("Helvetica", "", 16.5) + self.set_text_color(*NAVY) + self.multi_cell( + WIDTH - 56, + 9, + "That is double robustness doing real work: the propensity model is " + "misspecified in every arm - a flexible outcome model alone rescues " + "the point estimate.", + align="C", + ) + self.set_xy(28, 262) + self.set_font("Helvetica", "I", 13) + self.set_text_color(*GRAY) + self.multi_cell( + WIDTH - 56, + 7, + "Seed-locked simulated example; whiskers are 1.96 SE, illustrative " + "under the deliberately misspecified propensity.", + align="C", + ) + self.add_footer() + + def slide_08_when(self): + self.add_page() + self.light_gradient_background() + self._draw_vertical_sidebar(8) + + self._kicker(36, "When To Reach For It") + + col_w = 106 + gap = 16 + left_x = (WIDTH - 2 * col_w - gap) / 2 + y0 = 66 + col_h = 118 + + self._shadow_rect(left_x, y0, col_w, col_h) + self.set_fill_color(*WHITE) + self.set_draw_color(220, 220, 220) + self.rect(left_x, y0, col_w, col_h, "DF") + self.set_fill_color(*SIGNAL) + self.rect(left_x, y0, col_w, 3.2, "F") + self.set_xy(left_x, y0 + 10) + self.set_font("Helvetica", "B", 24) + self.set_text_color(*SIGNAL) + self.cell(col_w, 12, "DMLDiD", align="C") + self.set_xy(left_x + 8, y0 + 28) + self.set_font("Helvetica", "", 16) + self.set_text_color(*NAVY) + self.multi_cell( + col_w - 16, + 9, + "Covariates with nonlinear or high-dimensional relationships to " + "treatment or trends.", + align="C", + ) + self.set_xy(left_x + 8, y0 + 82) + self.set_font("Helvetica", "B", 15) + self.set_text_color(*GRAPHITE) + self.multi_cell(col_w - 16, 8.5, "Bring any learner:\nfit() / predict().", align="C") + + rx = left_x + col_w + gap + self._shadow_rect(rx, y0, col_w, col_h) + self.set_fill_color(*WHITE) + self.set_draw_color(220, 220, 220) + self.rect(rx, y0, col_w, col_h, "DF") + self.set_fill_color(*GRAPHITE) + self.rect(rx, y0, col_w, 3.2, "F") + self.set_xy(rx, y0 + 10) + self.set_font("Helvetica", "B", 24) + self.set_text_color(*GRAPHITE) + self.cell(col_w, 12, "CallawaySantAnna", align="C") + self.set_xy(rx + 8, y0 + 28) + self.set_font("Helvetica", "", 16) + self.set_text_color(*NAVY) + self.multi_cell( + col_w - 16, + 9, + "A logit + linear spec is plausible for your covariates.", + align="C", + ) + self.set_xy(rx + 8, y0 + 82) + self.set_font("Helvetica", "B", 15) + self.set_text_color(*GRAPHITE) + self.multi_cell(col_w - 16, 8.5, "Fewer moving parts.\nStill doubly robust.", align="C") + + self.set_xy(28, y0 + col_h + 20) + self.set_font("Helvetica", "", 18) + self.set_text_color(*NAVY) + self.multi_cell( + WIDTH - 56, + 10, + "Same staggered surface either way: ATT(g,t) cells, event studies, " + "group effects, HonestDiD.", + align="C", + ) + + band_y = y0 + col_h + 52 + self.set_fill_color(*GRAPHITE) + self.rect(28, band_y, WIDTH - 56, 40, "F") + self.set_xy(34, band_y + 6) + self.set_font("Helvetica", "B", 17) + self.set_text_color(*SIGNAL_BRIGHT) + self.cell( + WIDTH - 68, + 9, + "Four learners built in: linear, ridge, sieve, logit - no extra installs.", + align="C", + ) + self.set_xy(34, band_y + 19) + self.set_font("Helvetica", "B", 16) + self.set_text_color(*WHITE) + self.multi_cell( + WIDTH - 68, + 8.5, + "Or bring your own: scikit-learn estimators already fit the\n" + "fit() / predict() contract.", + align="C", + ) + self.add_footer() + + def slide_09_code(self): + self.add_page() + self.dark_gradient_background() + self._draw_vertical_sidebar(9, dark=True) + + self._kicker(34, "The Code", color=SIGNAL_BRIGHT) + + self.centered_text(58, "Three lines. Any learner.", size=40, color=WHITE) + + W_ = WHITE + G_ = GREEN_CODE + S_ = SLATE_CODE + code = [ + [("est = DMLDiD(", W_)], + [(" outcome_learner=", W_), (f'"{CODE_LEARNER}"', G_), (",", W_)], + [ + (" n_folds=", W_), + (str(CODE_FOLDS), G_), + (", seed=", W_), + (str(CODE_SEED), G_), + (",", W_), + ], + [(")", W_)], + [("res = est.fit(df, outcome=", W_), ('"y"', G_), (", ...,", W_)], + [ + (" covariates=[", W_), + ('"x1"', G_), + (", ", W_), + ('"x2"', G_), + ("])", W_), + ], + [("res.aggregate(", W_), ('"event_study"', G_), (")", W_)], + [("", W_)], + [("# or bring your own - sklearn fits the contract:", S_)], + [("from sklearn.ensemble import GradientBoostingRegressor", W_)], + [("DMLDiD(outcome_learner=GradientBoostingRegressor())", W_)], + ] + block_w = 212 + self._add_code_block( + (WIDTH - block_w) / 2, 88, block_w, code, font_size=15, line_height=11.8 + ) + + self.set_xy(30, 246) + self.set_font("Helvetica", "", 16) + self.set_text_color(*LIGHT_GRAY) + self.multi_cell( + WIDTH - 60, + 8.5, + "seed= pins the fold draws - the shown call reproduces the shown numbers exactly.", + align="C", + ) + self.add_footer(dark=True) + + def slide_10_production(self): + self.add_page() + self.light_gradient_background() + self._draw_vertical_sidebar(10) + + self._kicker(34, "Built For Production") + + self.centered_text(56, "The full staggered toolkit.", size=36) + + features = [ + ( + "Post-fit aggregation", + "event studies, group effects,\nHonestDiD, uniform sup-t bands", + ), + ( + "Survey data", + f"designs + clustering: PSU-cohesive\nfolds; design df: {SURVEY_PSU} PSUs\n" + f"- {SURVEY_STRATA} strata = {SURVEY_DF}", + ), + ( + "Repeated cross-sections", + "panel=False runs Chang's Case 2:\nfresh samples from the SAME\ntarget population each wave", + ), + ( + "Cross-fit diagnostics", + "per-cell fold losses, overlap,\ntrimming - inspect every nuisance", + ), + ] + card_w, card_h = 108, 62 + gap_x, gap_y = 14, 12 + x0 = (WIDTH - 2 * card_w - gap_x) / 2 + y0 = 82 + for i, (head, body) in enumerate(features): + cx = x0 + (i % 2) * (card_w + gap_x) + cy = y0 + (i // 2) * (card_h + gap_y) + self._shadow_rect(cx, cy, card_w, card_h) + self.set_fill_color(*WHITE) + self.set_draw_color(220, 220, 220) + self.rect(cx, cy, card_w, card_h, "DF") + self.set_fill_color(*SIGNAL) + self.rect(cx, cy, card_w, 3, "F") + self.set_xy(cx + 6, cy + 9) + self.set_font("Helvetica", "B", 17) + self.set_text_color(*GRAPHITE) + self.cell(card_w - 12, 9, head, align="C") + self.set_xy(cx + 6, cy + 22) + self.set_font("Helvetica", "", 13.5) + self.set_text_color(*GRAY) + self.multi_cell(card_w - 12, 7.5, body, align="C") + + strip_y = y0 + 2 * card_h + gap_y + 16 + self.set_fill_color(*GRAPHITE) + self.rect(28, strip_y, WIDTH - 56, 30, "F") + self.set_xy(34, strip_y + 5) + self.set_font("Helvetica", "B", 15.5) + self.set_text_color(*SIGNAL_BRIGHT) + self.cell(WIDTH - 68, 8, f"Chang Case 1 score vs DoubleML: ATT diff {DOUBLEML_ATT_DIFF}") + self.set_xy(34, strip_y + 15) + self.set_font("Helvetica", "", 13) + self.set_text_color(*LIGHT_GRAY) + self.cell( + WIDTH - 68, + 7, + "committed parity spike; staggered cells + survey lanes are documented " + "extensions of the paper", + ) + self.add_footer() + + def slide_11_cta(self): + self.add_page() + self.light_gradient_background() + self._draw_vertical_sidebar(11) + + self.draw_split_logo(38, size=34) + + self.centered_text(80, "Your covariates aren't linear.", size=38) + self.centered_text(106, "Your DiD can keep up now.", size=38, color=SIGNAL) + + chip_w = 150 + chip_x = (WIDTH - chip_w) / 2 + self.set_fill_color(*PANEL_NAVY) + self.rect(chip_x, 142, chip_w, 22, "F") + self.set_xy(chip_x, 148) + self.set_font("Courier", "B", 19) + self.set_text_color(*GREEN_CODE) + self.cell(chip_w, 10, "pip install diff-diff", align="C") + + self.set_xy(30, 184) + self.set_font("Helvetica", "", 17) + self.set_text_color(*NAVY) + self.multi_cell( + WIDTH - 60, + 9, + "Tutorial 32 reproduces every number on this deck - learner " + "comparison, HonestDiD, and the survey lane included:", + align="C", + ) + self.centered_text( + 218, + "diff-diff.readthedocs.io/en/latest/tutorials/32_dml_did.html", + size=14, + color=SLATE, + ) + + self.centered_text(242, "github.com/igerber/diff-diff", size=17) + + self.set_xy(0, 264) + self.set_font("Helvetica", "I", 13) + self.set_text_color(*GRAY) + self.cell( + WIDTH, + 6, + "Chang (2020), The Econometrics Journal 23(2) - doi:10.1093/ectj/utaa001.", + align="C", + ) + self.add_footer() + + +def main(): + pdf = DMLCarouselPDF() + try: + pdf.slide_01_cover() + pdf.slide_02_bet() + pdf.slide_03_receipt() + pdf.slide_04_twist() + pdf.slide_05_paper() + pdf.slide_06_math() + pdf.slide_07_payoff() + pdf.slide_08_when() + pdf.slide_09_code() + pdf.slide_10_production() + pdf.slide_11_cta() + + output_path = Path(__file__).parent / "diff-diff-dml-carousel.pdf" + pdf.output(str(output_path)) + print(f"PDF saved to: {output_path}") + finally: + pdf.cleanup() + + +if __name__ == "__main__": + main() diff --git a/tests/test_dml_carousel_claims.py b/tests/test_dml_carousel_claims.py new file mode 100644 index 00000000..84b0e878 --- /dev/null +++ b/tests/test_dml_carousel_claims.py @@ -0,0 +1,417 @@ +"""Claim-sync guard for the DMLDiD launch carousel. + +The deck (``carousel/generate_dml_carousel.py``) hardcodes committed, +seed-locked numbers from the executed tutorial-32 notebook as module +constants. The synchronization chain is: + +- library <-> notebook: tutorial 32 is numbers-locked and executed against + the committed library (``tests/test_t32_dml_did_drift.py`` re-derives the + estimates and hash-pins the code cells); +- notebook <-> carousel: THIS file parses the deck's constants (via ``ast`` + - the generator imports ``fpdf2``, a carousel-only dependency deliberately + absent from CI) and locates each on the COMMITTED NOTEBOOK SURFACE, not + restated here. If the tutorial is ever retuned and the carousel is + forgotten, the notebook surface changes and this file fails. +- REGISTRY <-> carousel: the DoubleML parity strip renders the diff the + REGISTRY DR-score families note records for the committed spike. + +Skips cleanly when ``carousel/`` or ``docs/`` is absent (the +isolated-install CI jobs copy only ``tests/``). +""" + +from __future__ import annotations + +import ast +import json +from pathlib import Path + +import pytest + +from tests._tutorial_drift import notebook_markdown, notebook_output_text + +GENERATOR = Path(__file__).resolve().parents[1] / "carousel" / "generate_dml_carousel.py" +REGISTRY = Path(__file__).resolve().parents[1] / "docs" / "methodology" / "REGISTRY.md" +NB = "docs/tutorials/32_dml_did.ipynb" + +TOTAL_SLIDES = 11 + + +@pytest.fixture(scope="module") +def deck_constants(): + if not GENERATOR.exists(): + pytest.skip(f"{GENERATOR} not available in this CI environment.") + tree = ast.parse(GENERATOR.read_text(encoding="utf-8")) + consts = {} + for node in tree.body: + if isinstance(node, ast.Assign) and len(node.targets) == 1: + target = node.targets[0] + if isinstance(target, ast.Name): + try: + consts[target.id] = ast.literal_eval(node.value) + except (ValueError, TypeError): + pass + elif isinstance(target, ast.Tuple) and all( + isinstance(el, ast.Name) for el in target.elts + ): + try: + values = ast.literal_eval(node.value) + except (ValueError, TypeError): + continue + if isinstance(values, tuple) and len(values) == len(target.elts): + for el, val in zip(target.elts, values): + consts[el.id] = val + return consts + + +@pytest.fixture(scope="module") +def visible_strings(): + """Slide copy: every string literal in the generator EXCEPT docstrings. + + f-strings contribute their constant fragments (``ast.Constant`` nodes + inside ``ast.JoinedStr``), so phrase pins must not span a ``{...}`` + substitution. + """ + if not GENERATOR.exists(): + pytest.skip(f"{GENERATOR} not available in this CI environment.") + tree = ast.parse(GENERATOR.read_text(encoding="utf-8")) + docstring_nodes = set() + for node in ast.walk(tree): + if isinstance(node, (ast.Module, ast.ClassDef, ast.FunctionDef, ast.AsyncFunctionDef)): + body = node.body + if ( + body + and isinstance(body[0], ast.Expr) + and isinstance(body[0].value, ast.Constant) + and isinstance(body[0].value.value, str) + ): + docstring_nodes.add(id(body[0].value)) + return " ".join( + node.value + for node in ast.walk(tree) + if isinstance(node, ast.Constant) + and isinstance(node.value, str) + and id(node) not in docstring_nodes + ) + + +# Chart helpers attributed to the slide that places them. +_SLIDE_HELPERS = { + "slide_01_cover": ("_render_cover_motif",), + "slide_06_math": ("_render_score_equation",), + "slide_07_payoff": ("_render_payoff_chart",), +} + + +def _per_slide(collect): + if not GENERATOR.exists(): + pytest.skip(f"{GENERATOR} not available in this CI environment.") + tree = ast.parse(GENERATOR.read_text(encoding="utf-8")) + per_func = {} + for node in ast.walk(tree): + if isinstance(node, ast.FunctionDef): + per_func[node.name] = collect(node) + slides = {} + for name, value in per_func.items(): + if name.startswith("slide_"): + for helper in _SLIDE_HELPERS.get(name, ()): + value = value + per_func.get(helper, type(value)()) + slides[name] = value + assert ( + len(slides) == TOTAL_SLIDES + ), f"expected {TOTAL_SLIDES} slide_* methods, found {sorted(slides)}" + return slides + + +@pytest.fixture(scope="module") +def slide_strings(): + """Per-slide visible strings (a qualifier must live ON the slide that + makes the claim, not merely somewhere in the module).""" + + def collect(node): + return " ".join( + n.value + for n in ast.walk(node) + if isinstance(n, ast.Constant) and isinstance(n.value, str) + ) + + return _per_slide(collect) + + +@pytest.fixture(scope="module") +def slide_constant_refs(): + """Per-slide referenced module-level names (each pinned statistical + constant must actually be RENDERED by its intended slide - a hardcoded + literal bypassing the constant would otherwise pass).""" + + def collect(node): + return [n.id for n in ast.walk(node) if isinstance(n, ast.Name)] + + return _per_slide(collect) + + +@pytest.fixture(scope="module") +def nb_output(): + return notebook_output_text(NB) + + +def _notebook_code(rel_path: str) -> str: + nb_path = Path(__file__).resolve().parents[1] / rel_path + if not nb_path.exists(): + pytest.skip(f"Notebook not found at {nb_path}.") + return "\n".join( + "".join(c["source"]) if isinstance(c["source"], list) else c["source"] + for c in json.loads(nb_path.read_text())["cells"] + if c["cell_type"] == "code" + ) + + +class TestEstimatesMatchNotebook: + """Every estimate on the deck is on the committed tutorial-32 surface.""" + + def test_truth_and_sieve_lines(self, deck_constants, nb_output): + c = deck_constants + att, se = c["SIEVE"] + for needle in ( + f"DGP-implied overall ATT: {c['TRUTH']:.4f}", + f"DMLDiD (sieve) estimate: {att:.4f} +/- {se:.4f}", + ): + assert needle in nb_output, f"deck value not on tutorial-32 surface: {needle!r}" + + def test_learner_table_values(self, deck_constants, nb_output): + # The notebook renders the comparison as a pandas table; pin each + # deck (ATT, SE) pair to ITS OWN ROW (label + ATT + SE in order on + # one line), so swapped labels or a mislabeled constant cannot pass + # on mere presence of the numbers (review round 1 P2). + import re + + rows = { + "LINEAR": "linear", + "RIDGE": "ridge", + "SIEVE": "sieve", + "POLY": r"PolynomialRidge \(custom\)", + } + for key, label in rows.items(): + att, se = deck_constants[key] + pattern = rf"{label}\s+{att:.4f}\s+{se:.4f}" + assert re.search( + pattern, nb_output + ), f"{key}: no notebook table row matches {pattern!r}" + + def test_dgp_shape_values(self, deck_constants, nb_output): + c = deck_constants + md = notebook_markdown(NB) + assert f"{c['N_NEVER']} never-treated units" in md + # cohort sizes render in the DGP cell's value_counts output + assert str(c["N_NEVER"]) in nb_output + code = _notebook_code(NB) + assert f"n_units, periods = {c['N_UNITS']}," in code + for g in c["COHORTS"]: + assert ( + f"np.where(early, {c['COHORTS'][0]}, {c['COHORTS'][1]})" in code or str(g) in code + ) + + def test_survey_provenance_line(self, deck_constants, nb_output): + c = deck_constants + needle = ( + f"design df: {c['SURVEY_DF']} ({c['SURVEY_PSU']} PSUs - " + f"{c['SURVEY_STRATA']} strata)" + ) + assert needle in nb_output, f"deck value not on tutorial-32 surface: {needle!r}" + + def test_five_se_claim_is_arithmetic(self, deck_constants): + # "Almost five standard errors off" must follow from the pinned + # values (a distance in reported-SE units, mirroring the tutorial's + # own wording - never presented as valid coverage). + c = deck_constants + att, se = c["LINEAR"] + ratio = abs(att - c["TRUTH"]) / se + assert 4.0 < ratio < 5.0, ratio + + def test_recovery_claim_is_arithmetic(self, deck_constants): + # The payoff headline ("Flexible outcome model: truth.") rests on + # sieve/custom landing within ~1 reported SE of the DGP truth. + c = deck_constants + for key in ("SIEVE", "POLY"): + att, se = c[key] + assert abs(att - c["TRUTH"]) / se < 1.05, key + + +class TestRegistrySync: + def test_doubleml_diff_matches_registry(self, deck_constants): + if not REGISTRY.exists(): + pytest.skip("REGISTRY.md not available in this CI environment.") + text = REGISTRY.read_text(encoding="utf-8") + assert ( + f"ATT diff {deck_constants['DOUBLEML_ATT_DIFF']}" in text + ), "the deck's DoubleML parity figure is not the REGISTRY's" + assert "chang_case1_parity.py" in text + + +class TestGuardrailPhrases: + def test_qualifiers_are_slide_local(self, slide_strings): + expectations = { + # the cover motif is stylized art, labeled on-slide + "slide_01_cover": ("illustrative",), + # the receipt states simulation + known truth WITH the numbers, + # labels uncertainty as reported/nominal, and carries the + # rate-condition caveat locally (review round 1 P1) + "slide_03_receipt": ( + "truth known by construction", + "simulated", + "reported SE ", + "narrow nominal interval", + "nominal, not ", + ), + # the twist repeats the nominal qualifier locally + "slide_04_twist": ("nominal precision", "nominal - illustrative"), + # the math slide scopes orthogonality to the learned nuisances + # and distinguishes the summand from the centered score + "slide_06_math": ( + "LEARNED nuisances g and l", + "psi = s - ATT", + "own variance correction", + ), + # the payoff carries the DR beat + the illustrative-inference + # qualifier (the tutorial's rate-condition caveat) + simulation + "slide_07_payoff": ( + "misspecified in every arm", + "illustrative", + "known\nby construction", + "Seed-locked simulated example", + ), + # the parity strip scopes the DoubleML anchor to the committed + # Case 1 spike and labels staggered/survey as extensions + "slide_10_production": ( + "committed parity spike", + "documented extensions of the paper", + "Chang Case 1 score", + # A2.3: fresh samples must come from the SAME target + # population (review round 1 P1) + "SAME\ntarget population each wave", + ), + } + for slide, phrases in expectations.items(): + for phrase in phrases: + assert phrase in slide_strings[slide], ( + f"qualifier {phrase!r} is not on {slide} - it must ride " + "with the claim it scopes" + ) + + def test_statistical_constants_reach_their_slides(self, slide_constant_refs): + expectations = { + "slide_03_receipt": ("LINEAR", "TRUTH", "N_UNITS", "N_PERIODS", "N_NEVER", "COHORTS"), + "slide_04_twist": ("RIDGE",), + "slide_07_payoff": ("LINEAR", "RIDGE", "SIEVE", "POLY", "TRUTH"), + "slide_09_code": ("CODE_LEARNER", "CODE_FOLDS", "CODE_SEED"), + "slide_10_production": ( + "SURVEY_PSU", + "SURVEY_STRATA", + "SURVEY_DF", + "DOUBLEML_ATT_DIFF", + ), + } + for slide, names in expectations.items(): + for name in names: + assert name in slide_constant_refs[slide], ( + f"constant {name} is not rendered by {slide} - a " + "hardcoded literal may have replaced the synced value" + ) + + def test_no_absolutes_or_competitor_claims(self, visible_strings): + # CS is named neutrally/honestly (slide 8 RECOMMENDS it for the + # parametric case); DoubleML appears only as the parity anchor. No + # superlatives, no external-competitor comparisons, no coverage + # overclaims for the deliberately misspecified demo. + lowered = visible_strings.lower() + for banned in ( + "the only ", + "first and only", + "no other estimator", + "nothing else", + "better than", + "state of the art", + "state-of-the-art", + "game changer", + "revolutionary", + "econml", + "geolift", + "causalimpact", + "csdid", + "unbiased", # the deck shows recovery, never claims unbiasedness + "valid coverage", + "guarantees", + "in each nuisance", # orthogonality covers g and l, not p + "confident ci", + "same confidence", + ): + assert banned not in lowered, f"banned absolute/competitive claim: {banned!r}" + + def test_no_verbatim_pull_quote(self, slide_strings): + # The Chang paper review is pinned to the arXiv layout and the + # published PDF has not been cross-checked word-for-word, so the + # paper slide must carry NO quotation-marked pull quote (module + # docstring records the decision). + paper = slide_strings["slide_05_paper"] + for ch in ('"', "“", "”"): + assert ch not in paper, "the paper slide must not carry a quoted pull quote" + + def test_cs_is_a_real_exported_estimator(self): + init = Path(__file__).resolve().parents[1] / "diff_diff" / "__init__.py" + if not init.exists(): + pytest.skip("diff_diff/__init__.py not available in this CI environment.") + assert "CallawaySantAnna" in init.read_text(encoding="utf-8") + + def test_code_slide_fragments_match_notebook_invocation(self, deck_constants, visible_strings): + # Slide 9's fit is the tutorial's own configuration; the displayed + # learner/folds/seed render from the deck constants, so + # reconstructing the fragments pins deck <-> notebook. + code = _notebook_code(NB) + c = deck_constants + for fragment in ( + f'outcome_learner="{c["CODE_LEARNER"]}"', + f"n_folds={c['CODE_FOLDS']},", + f"seed={c['CODE_SEED']},", + 'covariates=["x1", "x2"]', + 'aggregate("event_study")', + ): + assert fragment in code, f"tutorial 32 lost the displayed invocation: {fragment!r}" + assert "outcome_learner=" in visible_strings + # the bring-your-own swap line renders a real sklearn constructor + assert "GradientBoostingRegressor()" in visible_strings + + def test_builtin_learner_claim_is_dependency_free(self): + # Slide 8 says the four built-in learners need "no extra installs": + # diff_diff/_learners.py must import no external ML package. + learners = Path(__file__).resolve().parents[1] / "diff_diff" / "_learners.py" + if not learners.exists(): + pytest.skip("diff_diff/_learners.py not available in this CI environment.") + tree = ast.parse(learners.read_text(encoding="utf-8")) + imported = set() + for node in ast.walk(tree): + if isinstance(node, ast.Import): + imported.update(a.name.split(".")[0] for a in node.names) + elif isinstance(node, ast.ImportFrom) and node.module: + imported.add(node.module.split(".")[0]) + assert not imported & {"sklearn", "statsmodels", "xgboost", "lightgbm", "torch"}, imported + + def test_sklearn_contract_claim_is_documented(self): + # Slide 8/9 say scikit-learn estimators fit the duck-typed + # contract - the API docs must actually document that claim. + rst = Path(__file__).resolve().parents[1] / "docs" / "api" / "dml_did.rst" + if not rst.exists(): + pytest.skip("docs/api/dml_did.rst not available in this CI environment.") + assert "scikit-learn" in rst.read_text(encoding="utf-8") + + def test_flexibility_band_is_slide_local(self, slide_strings): + # The user-emphasized flexibility beats (2026-08-29) live on their + # slides: built-ins + no-extra-installs on slide 8, the sklearn + # contract line on the code slide. + assert "no extra installs" in slide_strings["slide_08_when"] + assert "scikit-learn estimators already fit the" in slide_strings["slide_08_when"] + assert "sklearn fits the contract" in slide_strings["slide_09_code"] + + def test_tutorial_referenced_once_on_cta(self, visible_strings): + assert visible_strings.count("Tutorial 32") == 1 + assert "tutorials/32_dml_did.html" in visible_strings + nb_path = Path(__file__).resolve().parents[1] / NB + assert nb_path.exists(), "CTA points to a tutorial that does not exist" From 7880232969cf322d2a305fca7085af74fd580283 Mon Sep 17 00:00:00 2001 From: igerber Date: Sat, 29 Aug 2026 13:20:06 -0400 Subject: [PATCH 2/5] marketing(dml-carousel): state both learner contracts; exact cohort-construction pin PR #802 review P2s: (1) slide 8 said any learner needs fit()/predict(), but propensity learners require predict_proba() - the card and the flexibility band now state both contracts (regressors fit()/predict(), classifiers predict_proba()), with slide-local pins; (2) the cohort sync assertion's str(g)-in-code fallback was vacuous (single digits occur everywhere) - it now requires the exact np.where(early, 4, 5) construction rendered from the deck constants. PDF regenerated; claims guard 17/17 green. --- carousel/diff-diff-dml-carousel.pdf | Bin 210313 -> 210359 bytes carousel/generate_dml_carousel.py | 11 ++++++++--- tests/test_dml_carousel_claims.py | 14 +++++++++----- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/carousel/diff-diff-dml-carousel.pdf b/carousel/diff-diff-dml-carousel.pdf index 2c823ba6518cb89c9a8181779f44633ae398d49a..5b90ec644fc90b9cc01fafd7e62046ad75dabc42 100644 GIT binary patch delta 2093 zcmai$3pA8j0LQ(C8XA!y<&}_VYM$TtwhZGHH6CkIlvN%>b`Oe?vBr*9rlH7VmLYkr z#-klZc@(86v0kxbvmOzRtg!~!m5FxR_UyKF&VJ|IbME<_`~Uy%{oix$`Is|Gbu&s; z*1PEd03{HhVU$p^cMz0%?TY)5>xA9b=qb~cr>7p&gxwd(3)3A<+K)H8MGlr{R*{Qs z>}}G$--s!xFLOm_BZ-}tSI_}Y`GFn}xdCwy{x>jpxqzYMKLK&J50Pi1etyA{0;xR z_OyaN)OCVuoAzU;mwu_C3m397mae~{xP0BRJ+*SYvm{P+lv!{DX|8(A-e~o1<7a{N z3to;cB!i3xVfNXe`Qrn=*hQw_Sr1LYsOC>Pa&Y&2eR85p9?<^)m1k3mAL6v8u@`+? z`{idqmJ*RADtF+Gk_8Q;xeg|s6tvb1$iD0t>E?ybB^Z(67-oSrmqR^5C#GNsL zh^sZLqXPskQdG32x7x(}&6OEEsI?6@;WSG;wj>U!Ny*+A5`#y+&AGrlWqw4pf0~pT z5bF0wEVGr5NZ5UG>(0$AD0pf0;+Yg*abZz!lxCN%H%6@+HC~W#m+lu;WX#XPXu|Cp zs5c2k>X_nMYxG>M);I*G|bK#rB94q&mk;*P0$ZHT0a=*Sw{B_{E||c67|3 z#VhT#)~>rO(oW`J; z(u?G$(YZ7+T}pSntX<>Lp_K0DR69h8yrrwPg&@+)Kj_pxMN-I&XzoVoy`Cos@%g=H zb+Xgv${}510yW|Fo*I(-+NGr(TtXSlgPzAC|DN77N_LCza2rfr=CVp))7o$EC-A)B z+Hd8|XNPXkU=W{^{xh}p2T)yjR)O`gk%&yIl0F*!gzto(Vb4$MY}sR~CtNT+9MhyDGg0gNN z2VG&mgx7Qmz)6l)wt-GB#IxJ~xlzR;j7{kIk!Q|$%ZAp@4kYWhjhC1G>?~^uUy!qa zWIm+#Y(wP`?|BLqVI#D%ipE(NMP+2TeV~RI#dy)?`y=7|bl34qAvTq4wch?LA((Yeshp7l%7!hPlbS_@Xcu;5jTCDMKM%BpB&_BOKR=N>K+0V{8dG>$ z)0kmf?ddeFti+5DxDqrS%dky4bEePN-XdKbjj)(^FAb))3BN^ITB5wu_JEx!|6x>y#~ z;B#cq$9i9#xn=i=;nh(=sMWClw(V;K0z)%%WxtLTr+d_}Ec&Ryx7-6;W;Ww(mCEq4 z{W$AC7JYWg#00?W!6FG7l*eM>U^uRi#0lO(&f;g-Wh6G;Ac93fgmRv%?XtO3T$KPH zshQT1)T61_7|y*rB4kR>pm4bad0{ZF^ZGftLNlSR_*$5qsH8H~I8ooXIq>0B%A?vl z9$3xu`O!=6CdZ6~GWKawVsjh2CA=IP5eZz~dKdtBDOONbcni%-jw(&0&5B`4XtE87&>7AMSY=1%-52zL}ybIP7uFjB8aECUZiZW+zo>Jmxp)Y_!ge znF$CCwc)x&o|K9Y$7C8_o_S-(mEhO|xr6y_Ia(t6=J}&WBH1mXI2ue7Eoi*?>D%T) zda{u9K?mM$^Qb!1CAHn5M7sCEI}JC!^w^>ne~m=*#2?eh{5mBe95EIB5^?bt$qOBi zk8aa%ETe`a^E<5Z#EQ7EaX#t*C)V39ETEmZ(b}Ln!`)7nImK!@uY}-avy@F0WqE@O zineavutK@F&HRNc=4pYsuDfh|T518yvR+o~sCYHCFfujU996Z+I$QLv+MxL3fG*Q8 z=f7D2&ofRXq~a+C%S5ARej?t5s>nXcq2X3X=6Tm3E^qyTmNC$de}B?A$I@6Ud;R<5 z4#S<#nXU59ZKBRbi3x$1!xsvYpEw?RN7T_j8Y-<=ylL|GX&-Z_VuYYTU^|&@^F4Q* z!4#-5a%oxjVVwy&Gz@5qZ7epiJI-IbkR|G^{ASY&=3`y@d~a9t{Db*SVd1s08m|NQvN zte#O!V33QC%`D+Wx>tVp7eeP@NsW8I=SP;ATo?Uh?~SZ*_qQzp{iJ6+zCS}6`^`al zTBh5=;32=ZhU4o`F|Wlp$2KI6thJer2aX?^t4L-3c*1u0GQY08-?M8e?!9TCbSNDd zm=#K2@2c#=ltO_!0R2sr$>Zf--~-YXJ#*8C2CV(t_FuWr$vIobbycvO=Z$gKdHuI{ zwJ9s=`f5!tqvO+Ue*S84&`e8@J(mbYD!LbHnGi@!OC}VL7_)2 zH5B$4<(RNP{TP2rv?bBK6J?TYbrU+_u}@EEpV{cS$LP;$C7p1lx^80qb6W3*i(->K z>{RiKuEv`iLIQ#oO2q{Z`oo9Xpq zXHBj|^kRAVUs^pE8*~e}@00DZ4i632mT$e2u5J3m;bkf-D0jO1lQtaR_bQ{(>SU!A zLUlEoDy@)r*C9z%xG9v3EJbVwX|NgT?_(BahW`8@lc;2xIwR8rdLRLSEq=AkipfH9-}l0&1pJ3VCbbw4lTUfa6cSHXLK=~4U diff --git a/carousel/generate_dml_carousel.py b/carousel/generate_dml_carousel.py index 5ca34132..721c6294 100644 --- a/carousel/generate_dml_carousel.py +++ b/carousel/generate_dml_carousel.py @@ -1054,7 +1054,12 @@ def slide_08_when(self): self.set_xy(left_x + 8, y0 + 82) self.set_font("Helvetica", "B", 15) self.set_text_color(*GRAPHITE) - self.multi_cell(col_w - 16, 8.5, "Bring any learner:\nfit() / predict().", align="C") + self.multi_cell( + col_w - 16, + 8.5, + "Bring your own learners:\nregressors fit() / predict(),\nclassifiers predict_proba().", + align="C", + ) rx = left_x + col_w + gap self._shadow_rect(rx, y0, col_w, col_h) @@ -1110,8 +1115,8 @@ def slide_08_when(self): self.multi_cell( WIDTH - 68, 8.5, - "Or bring your own: scikit-learn estimators already fit the\n" - "fit() / predict() contract.", + "Or bring your own: scikit-learn regressors already fit the fit() /\n" + "predict() contract - classifiers add predict_proba().", align="C", ) self.add_footer() diff --git a/tests/test_dml_carousel_claims.py b/tests/test_dml_carousel_claims.py index 84b0e878..79e54c7b 100644 --- a/tests/test_dml_carousel_claims.py +++ b/tests/test_dml_carousel_claims.py @@ -205,10 +205,10 @@ def test_dgp_shape_values(self, deck_constants, nb_output): assert str(c["N_NEVER"]) in nb_output code = _notebook_code(NB) assert f"n_units, periods = {c['N_UNITS']}," in code - for g in c["COHORTS"]: - assert ( - f"np.where(early, {c['COHORTS'][0]}, {c['COHORTS'][1]})" in code or str(g) in code - ) + # exact cohort-construction expression (review round: a bare + # str(g)-in-code fallback was vacuous - single digits occur + # everywhere) + assert f"np.where(early, {c['COHORTS'][0]}, {c['COHORTS'][1]})" in code def test_survey_provenance_line(self, deck_constants, nb_output): c = deck_constants @@ -407,7 +407,11 @@ def test_flexibility_band_is_slide_local(self, slide_strings): # slides: built-ins + no-extra-installs on slide 8, the sklearn # contract line on the code slide. assert "no extra installs" in slide_strings["slide_08_when"] - assert "scikit-learn estimators already fit the" in slide_strings["slide_08_when"] + assert "scikit-learn regressors already fit the" in slide_strings["slide_08_when"] + # the propensity contract is predict_proba, not predict - both + # contracts must be stated (review round 2 P2) + assert "predict_proba()" in slide_strings["slide_08_when"] + assert "classifiers" in slide_strings["slide_08_when"] assert "sklearn fits the contract" in slide_strings["slide_09_code"] def test_tutorial_referenced_once_on_cta(self, visible_strings): From 6521075c1e8415aebe4f6d2886ffc6186aa11df2 Mon Sep 17 00:00:00 2001 From: igerber Date: Sat, 29 Aug 2026 13:27:09 -0400 Subject: [PATCH 3/5] marketing(dml-carousel): docstring states both learner contracts + ast docstring guard PR #802 review round 2 P1: the slide fix missed the module docstring, which still described a bare fit()/predict() scikit-learn contract - propensity classifiers need predict_proba() (a LinearSVC would be rejected). The spine bullet and claim-discipline bullet now state both contracts, and a new ast.get_docstring test requires predict_proba() there (the slide-string guard deliberately excludes docstrings, so the docstring needs its own pin). PDF regenerated (byte-freshness only; slide content unchanged); claims guard 18/18 green. --- carousel/diff-diff-dml-carousel.pdf | Bin 210359 -> 210359 bytes carousel/generate_dml_carousel.py | 7 +++++-- tests/test_dml_carousel_claims.py | 9 +++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/carousel/diff-diff-dml-carousel.pdf b/carousel/diff-diff-dml-carousel.pdf index 5b90ec644fc90b9cc01fafd7e62046ad75dabc42..e23e6f3167de848150b062bc9712e12d7548651e 100644 GIT binary patch delta 98 zcmdn~nrHiKo`x327N#xCafU2L<_3n_lMI=^F*_MMxw)7-xjLJf7&)7p8JiiHIT|<{ XIl8$3nU}l<8ylHAy1F?U YS(;m#nVLB|nw#0#5K=LHmMOC=0Eo>R8vp= 15pt, plus the bring-your-own swap rendered as a real sklearn import + constructor call. @@ -124,6 +126,7 @@ on the library's own numpy/scipy solvers (no additional dependency - the claims test asserts the module imports no external ML package), and scikit-learn compatibility is the documented duck-typed protocol + (regressor fit()/predict(); classifier fit()/predict_proba()) (``docs/api/dml_did.rst`` names scikit-learn; sklearn is an ecosystem library the estimator interoperates with, never a compared-against competitor). The sklearn import on the code slide is illustrative of the diff --git a/tests/test_dml_carousel_claims.py b/tests/test_dml_carousel_claims.py index 79e54c7b..aac103a2 100644 --- a/tests/test_dml_carousel_claims.py +++ b/tests/test_dml_carousel_claims.py @@ -402,6 +402,15 @@ def test_sklearn_contract_claim_is_documented(self): pytest.skip("docs/api/dml_did.rst not available in this CI environment.") assert "scikit-learn" in rst.read_text(encoding="utf-8") + def test_module_docstring_states_both_contracts(self): + # The review-round P1: the guard below excludes docstrings, so the + # module docstring itself must also carry the classifier contract + # (predict_proba), never the bare fit()/predict() shorthand. + tree = ast.parse(GENERATOR.read_text(encoding="utf-8")) + doc = ast.get_docstring(tree) or "" + assert "predict_proba()" in doc + assert "CLASSIFIERS" in doc or "classifier" in doc.lower() + def test_flexibility_band_is_slide_local(self, slide_strings): # The user-emphasized flexibility beats (2026-08-29) live on their # slides: built-ins + no-extra-installs on slide 8, the sklearn From e5f0914c22aea61deb6d0b39b77ac3836bbcc8f6 Mon Sep 17 00:00:00 2001 From: igerber Date: Sat, 29 Aug 2026 13:33:16 -0400 Subject: [PATCH 4/5] marketing(dml-carousel): render a complete, valid fit call on the code slide PR #802 review round 3 P2: the displayed call used a positional ellipsis after keyword arguments (a SyntaxError) under a caption claiming the shown call reproduces the shown numbers. The slide now renders the tutorial's full invocation (unit/time/first_treat keywords + base_period=universal) in a slightly wider panel, and a new claims check reconstructs the snippet from the slide's token lines via AST and requires it to ast.parse, pinning base_period and the fit keywords. PDF regenerated; claims guard 19/19 green. --- carousel/diff-diff-dml-carousel.pdf | Bin 210359 -> 210451 bytes carousel/generate_dml_carousel.py | 19 +++++++--- tests/test_dml_carousel_claims.py | 53 ++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 4 deletions(-) diff --git a/carousel/diff-diff-dml-carousel.pdf b/carousel/diff-diff-dml-carousel.pdf index e23e6f3167de848150b062bc9712e12d7548651e..2805730285f663422f3a886092caa3bb8cfc17f3 100644 GIT binary patch delta 1939 zcmajge>9VO90%~bmS|R1)D$iyk&*4$o^21M+DuxEOIwsRv!clFRR{~=rlpidT1h4; zKT{S?x9Epba?6iQsr+a%Ke{qhqPx2Pbf$CebIx;#7guOi?f*-z%8-$1yAKUtp(d&qc?ZeQ|X0qqn4j;68Zod;Qv*@sBNS2~<eClYJVSOrQ@O#yk?(VXo)nH4Hq3gqLvmz~W1{%F^PwUURt01uWBu zHa8I^%(u+&`Lt;f*FhmU1h*{$NQ0?3gvTuP)V66b^_7f6Pm)Y#**vH^>DoMRz*6v8v#1g! z(oNiDozx{P@j7i-K{wkHsrzKmt+M4pms@aBLOb$ZWA5OMwmiCW?fl}*Cj8BF+}Ad;x8NS1l^B$YPTR5LK{PP z^M<+gM`U-33~R-UMY?BdefR=xyv6c*2a##UwHOAkDzsgYMPR23nHnu9hPLP&y4IMx zkH^wIyl$nR#^%EEq{5S~fmV+x`Yd62%>!GX)A@SYs@ack`@@h6#@!15MNzEc&tE&s z=18kNwzG}|)E?PXaVT`-thc8dH{I%~Ahg`k;A9^Xo`IS;m^?S`6jfSeS z=+Ugd2l}16dW$alOuEA`P8hwiv51b{MJ~sDYVOj%@^*aq#NYJho7LO`jSw4uepu8; z>g{GL_nF)H7G5-MQxbn$=%5S19X~WqM009P(PS{4c z?)HeutOe7OaBgvqcLZ#bhvzrcA#+IGNFhmz~* z;fxA>7~RC}bnb|pLY=+x`(r9x-$a%e?agv6-(wyjFB@Od$EPDJqi>EW?oQuYIqxI) zru2yQLUcdIk104X7H4bM*~=R~-^O*StDXSDwQ1?)0=kxC=1V|PT)EJe-9QG~)+9?Veobp9X1(LvrgM-IzSXba}}>;35|KRzNA%nwarLk1QP8!YPdY%D8Mo ztK{fV{q1m0Vocsh2q5j3^aaTe-iWE$VD2-c~% zB!AexJ1diouNsQ;L2k%s=q3d!?k79l+hu?zjXJe<=LXw;dF6a*k@wV=7eSgm98=#H zmHPx0IUEh^7`gINyxclH|1XMo$HprmovHsY!`iDiBNr|;sz+dS9+Z5rQ@UAi#nFw9 zUux{FqRnnTI&M!J-4EpOSdqIG{XIc@ImK4SXp+T{-tA@AM$ze;67wvLbA*h%-~IfZ z%TpvSS7n1%Q;%$pKA2c?{l-@0Bz|OWa;Ul1{`cQtB^$iKM4iVCzc9it3=}{!(veB{nT^TBnRU=igH)M+O7|lig!_d75cH!i(*%T* zIgSvShR2cskc!9R$TTuYz)?Vm3eo@q)qzaI+OPTF3if|jEjOGW8NSO80bo_92_nqQ JXs(Wke*sTA{h- z^AmGn(e28d4xd&#e)rK^jwR(~<+ApTd4`9rqlwpaqIcc-y0ok+NQWUb(=z1Yfoa9d z2tjeu49mDEs0-va9^9Ry{3w4E$^|ZW<6@hfdl+yzu3M%|OO%upkKJ-pmrI}ERvE@m zwl!(=F6(kbEQRS!QqD)pt<5wxym%+jrnw!dpp1UfESAq(c%U6l=~gRLywTgE7h}qG zgH-xAbEJ7Ed`WI7yS%kru8^QZ&AQqeo2>KR>!IlqdgR{O#{$SZ{0M<2$EV74 z65V-caHpJHr6XIUVDZVWbhIg}{*tw)Cfd)95B*~aoU~s3ks68{e zPsz%e2IFfZ40}kWj{E2dH-ZlxRB16rNVoYKZBJ)$=`$P4t?!PuNzSNdCb~w__)?R7 z8zxhNbDqdamAGY6pdCd0YL)z&H~wm;XR1~Kzr8xD<(H?mbCfcf+ff>xAINld3PGR4 zD(-pN!f4LG@$F!p?5d!Ms*lc21@U8|c7ES8E>BmN;&wOjd1|c#a~E;TU0FlbyBV^y zLpL|aTPXaJ?@m)Q^C&KbWMWQz0VZ?wVa$`CHq+J1@B-U7#_1Smo#|7Me@g(75q z+?H5>!SqgyleXoit{I1>aJ;as@{-1hUqC-;Q-k_<9@JXavrX@g6L?Yf(;pa|Ys3XWTZqo-pfHe87P=$eoTu zLSI6O4G&2pe$!(|-7L&C3awuB3M*aH@Uy#)L#KRoF<9l-@GfpF(qcTAfocCdcrJI_ z!ihd|ZfCY1?iTg|DP{4~PdTIviHbj7>!`vlT_x@>jl$GUmd!@UxSNN_M z#(EY9`h8e&mM)iO0>YVlv+@Gpo4rg=Vk&@*cUiBf9iJ_9wIzA@Y^i0!p}+o|s*FYq z@Syp!0OabBX+%f!(-n?Xv~2%ZRUiM5`;P{$bgww86D^=H+cv(=IFRTS3wdOG+VXhR z+27!cC0+aSL}+*~H&4HH=h=?1TM@L<=GwlYvAk?OtH#@9oZ;x&hb05TQjXBacB=31 z;aZjb6tE`R@Y>`=8A4ET?xcn%i z)+;R&9J^H+vMYENs@T6wzr1p;&Js~|(t2`_)VO5h?@y3Sbk4*4KZWO(n>im%s z4ib`RJbk#{GaUiMtPRHF*X|>%V?@H5W{AK#CYt$s3mLIE34#Y^ zKh+w)pF#$)XfhtefB Date: Sat, 29 Aug 2026 14:43:41 -0400 Subject: [PATCH 5/5] test(dml-carousel): skip-guard the docstring check in isolated CI layouts CI failure on every Python leg: test_module_docstring_states_both_contracts read the generator without the GENERATOR.exists() guard the rest of the file carries, and the isolated-install CI jobs copy only tests/ (no carousel/). Verified both layouts: full checkout 19 passed; a simulated tests-only layout 19 skipped. --- tests/test_dml_carousel_claims.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/test_dml_carousel_claims.py b/tests/test_dml_carousel_claims.py index f47b0659..fb2200e6 100644 --- a/tests/test_dml_carousel_claims.py +++ b/tests/test_dml_carousel_claims.py @@ -411,6 +411,8 @@ def test_module_docstring_states_both_contracts(self): # The review-round P1: the guard below excludes docstrings, so the # module docstring itself must also carry the classifier contract # (predict_proba), never the bare fit()/predict() shorthand. + if not GENERATOR.exists(): + pytest.skip(f"{GENERATOR} not available in this CI environment.") tree = ast.parse(GENERATOR.read_text(encoding="utf-8")) doc = ast.get_docstring(tree) or "" assert "predict_proba()" in doc