{
  "schemaVersion": 1,
  "lessonId": "arrays-02",
  "contentHash": "28d613b670b5073f1d70575c8995cf41882ab452ee78c3e449b38a9a90c754fb",
  "rendererHash": "a1bd5b648f4731ae5d5f0a24811c2540d1a0a132149ce589d17c4113509cbedf",
  "kind": "executed",
  "generatedAt": "2026-10-20T10:45:08.535041+00:00",
  "provenance": "recorded_cpu_computation",
  "environment": {
    "backend": "cpu",
    "deviceCount": 1,
    "jax": "0.9.2",
    "numpy": "2.4.4",
    "matplotlib": "3.10.8"
  },
  "stdout": "[[11. 22. 33.]\n [14. 25. 36.]]\nShape: (2, 3) dtype: float32\n",
  "data": {
    "kind": "heatmap",
    "values": [
      [
        10.0,
        20.0,
        30.0
      ],
      [
        10.0,
        20.0,
        30.0
      ]
    ],
    "rows": [
      "observation 0",
      "observation 1"
    ],
    "columns": [
      "feature 0",
      "feature 1",
      "feature 2"
    ],
    "unit": "added bias"
  },
  "diagram": {
    "title": "Align axes before reducing",
    "prediction": "Why is checking that the loss is scalar insufficient?",
    "reading": "Feature bias reuses a vector across observations; row offsets reuse each scalar across features. The final row creates all-pairs residuals. A mean would hide the unwanted \\((n,n)\\) intermediate. Each row describes a different shape contract.",
    "alt": "Feature bias reuses a vector across observations; row offsets reuse each scalar across features. The final row creates all-pairs residuals. A mean would hide the unwanted \\((n,n)\\) intermediate. Each row describes a different shape contract.",
    "scope": "Architecture and dataflow mechanism diagram.",
    "height": 4.3,
    "panel": {
      "kind": "table",
      "headers": [
        "Purpose",
        "Left",
        "Right aligned",
        "Result"
      ],
      "rows": [
        [
          "Feature bias",
          "(2, 3)",
          "(1, 3)",
          "(2, 3)"
        ],
        [
          "Row offsets",
          "(2, 3)",
          "(2, 1)",
          "(2, 3)"
        ],
        [
          "Aligned residual",
          "(n,)",
          "(n,)",
          "(n,)"
        ],
        [
          "Wrong target axis",
          "(n, 1)",
          "(1, n)",
          "(n, n)"
        ]
      ]
    }
  }
}
