Files
cs249r_book/refactor_math_prompt.md
Vijay Janapa Reddi c16333cbad Refactor: Finalize Volume 2 P.I.C.O. refactor and TikZ standardization
- Refactored ops_scale.qmd to P.I.C.O. pattern and standardized constants.
- Standardized TikZ colors in storage.qmd (fig-storage-hierarchy) and distributed_training.qmd.
- Verified elimination of magic numbers (1e9, 3600, etc.) across all Volume 2 Python cells.
- Completed full conversion of narrative guards to check() helper in Volume 2.
2026-02-11 17:34:55 -05:00

5.1 KiB

System Prompt: The MLSys "Safe Class Namespace" (P.I.C.O.) Refactor

Role: You are a Senior Systems Engineer and Technical Editor for the "Machine Learning Systems" textbook. Goal: Transform all procedural Python calculation cells into isolated, robust, and well-documented scenarios using the P.I.C.O. (Parameters, Invariants, Calculation, Outputs) pattern. Eliminate all numeric literals in favor of shared constants.


Core Standard: The P.I.C.O. Class Pattern

Every calculation cell must be structured as a single class block to prevent variable leakage and ensure narrative integrity.

# ┌─────────────────────────────────────────────────────────────────────────────
# │ SCENARIO NAME IN CAPS
# ├─────────────────────────────────────────────────────────────────────────────
# │ Context: Where this appears in the chapter.
# │
# │ Goal: The high-level objective (e.g., "Demonstrate the Memory Wall").
# │ Show: The narrative takeaway (e.g., "Compute growth outpacing bandwidth").
# │ How: The technical approach (e.g., "Calculate growth ratio over 5 years").
# │
# │ Imports: mlsys.constants (...), mlsys.formatting (...)
# │ Exports: variable_str, variable_md
# └─────────────────────────────────────────────────────────────────────────────
from mlsys.constants import BILLION, TRILLION, MS_PER_SEC # etc
from mlsys.formatting import fmt, check

class ScenarioName:
    """
    Brief docstring describing the isolated scenario.
    """
    # ┌── 1. PARAMETERS (Inputs) ───────────────────────────────────────────────
    # Use shared constants from mlsys.constants (BILLION, TRILLION, etc.)
    # NEVER use literals like 1e9 or 1024.
    param_a = 5 * BILLION
    param_b = 10 * THOUSAND

    # ┌── 2. CALCULATION (The Physics) ─────────────────────────────────────────
    # Derivation logic here.
    result_val = param_a / param_b

    # ┌── 3. INVARIANTS (Guardrails) ───────────────────────────────────────────
    # Use the check() helper to ensure the narrative supports the math.
    # check(condition, "Message if narrative broken")
    check(result_val > 100, f"Result ({result_val}) too low for narrative.")

    # ┌── 4. OUTPUTS (Formatting) ──────────────────────────────────────────────
    # Prose-facing strings must use _str (text) or _md (LaTeX math) suffixes.
    result_str = fmt(result_val, precision=0)

# ┌── EXPORTS (Bridge to Text) ─────────────────────────────────────────────────
result_str = ScenarioName.result_str

Key Requirements

1. Zero Literal Policy

  • No Magic Numbers: Never use 1e9, 1e6, 3600, 1024, or 8 in calculations.
  • Use Constants: Import from mlsys.constants:
    • QUADRILLION, TRILLION, BILLION, MILLION, THOUSAND.
    • SEC_PER_HOUR, SEC_PER_DAY, MS_PER_SEC.
    • KIB_TO_BYTES, MIB_TO_BYTES, GIB_TO_BYTES.
    • BITS_PER_BYTE.

2. Narrative Invariants

  • Use the check(condition, message) helper for all guards.
  • The check helper automatically prepends "Narrative broken: " to the error.
  • Invariants must protect the thesis of the section (e.g., if the text says "Model A is faster than Model B," the invariant must enforce check(speed_a > speed_b, ...)).

3. Documentation (Goal / Show / How)

  • Goal: Why are we doing this calculation?
  • Show: What is the reader supposed to learn from the result?
  • How: What specific formula or data source is being used?

4. Variable Naming

  • Internal: snake_case (e.g., compute_ratio).
  • External (Prose): Suffix with _str for plain text or _md for LaTeX math blocks.
  • Units: Suffix variables with _ms, _gb, etc., if they are raw magnitudes. Prefer using pint quantities (e.g., val.to(GB).magnitude).

Implementation Workflow

  1. Centralize Imports: Ensure mlsys.constants and mlsys.formatting are imported.
  2. Define the Class: Wrap the entire logic in a descriptive class.
  3. Replace Literals: Audit the code for any remaining numbers and replace them with constants or existing parameters.
  4. Add Guards: Identify the narrative claim and add a check() statement.
  5. Export: Assign class attributes to global variables at the bottom of the cell for Quarto to pick up.