{
  "schemaVersion": 1,
  "lessonId": "kernels-01",
  "contentHash": "0a36a139ed87e8fad68216085d916f9734fc00a60182c82f9e3da5a0ed3dff19",
  "rendererHash": "a1bd5b648f4731ae5d5f0a24811c2540d1a0a132149ce589d17c4113509cbedf",
  "kind": "executed",
  "generatedAt": "2026-10-20T10:46:28.332597+00:00",
  "provenance": "recorded_cpu_computation",
  "environment": {
    "backend": "cpu",
    "deviceCount": 1,
    "jax": "0.9.2",
    "numpy": "2.4.4",
    "matplotlib": "3.10.8"
  },
  "stdout": "Shape and boundary: (5, 11) -3.75 7.050000190734863\nGrid: (3, 3) logical/padded elements: 55 72\nPadding fraction: 0.2361111111111111\n",
  "data": {
    "kind": "heatmap",
    "values": [
      [
        0,
        0,
        0,
        0,
        1,
        1,
        1,
        1,
        2,
        2,
        2
      ],
      [
        0,
        0,
        0,
        0,
        1,
        1,
        1,
        1,
        2,
        2,
        2
      ],
      [
        3,
        3,
        3,
        3,
        4,
        4,
        4,
        4,
        5,
        5,
        5
      ],
      [
        3,
        3,
        3,
        3,
        4,
        4,
        4,
        4,
        5,
        5,
        5
      ],
      [
        6,
        6,
        6,
        6,
        7,
        7,
        7,
        7,
        8,
        8,
        8
      ]
    ],
    "unit": "program ID (categorical label)",
    "rows": [
      "0",
      "1",
      "2",
      "3",
      "4"
    ],
    "columns": [
      "0",
      "1",
      "2",
      "3",
      "4",
      "5",
      "6",
      "7",
      "8",
      "9",
      "10"
    ],
    "xlabel": "logical column",
    "ylabel": "logical row"
  },
  "diagram": {
    "title": "Program coordinates and partial boundary tiles",
    "prediction": "Why test an awkward shape in addition to a tile-aligned shape?",
    "reading": "Two-by-four tiles cover a five-by-eleven logical matrix. Each cell lists a program ID and valid row/column range. Bottom and right tiles are partial; accesses outside the logical range need boundary treatment. Program IDs are categories, matching the corrected discrete ownership heatmap. Here explicit padding makes whole-block accesses valid; cropping removes artificial output positions.",
    "alt": "Two-by-four tiles cover a five-by-eleven logical matrix. Each cell lists a program ID and valid row/column range. Bottom and right tiles are partial; accesses outside the logical range need boundary treatment. Program IDs are categories, matching the corrected discrete ownership heatmap. Here explicit padding makes whole-block accesses valid; cropping removes artificial output positions.",
    "scope": "Architecture and dataflow mechanism diagram.",
    "height": 4.6,
    "panel": {
      "kind": "table",
      "headers": [
        "Grid row",
        "Column 0",
        "Column 1",
        "Column 2"
      ],
      "rows": [
        [
          "0",
          "ID 0: rows 0\u20131\ncols 0\u20133",
          "ID 1: rows 0\u20131\ncols 4\u20137",
          "ID 2: rows 0\u20131\ncols 8\u201310"
        ],
        [
          "1",
          "ID 3: rows 2\u20133\ncols 0\u20133",
          "ID 4: rows 2\u20133\ncols 4\u20137",
          "ID 5: rows 2\u20133\ncols 8\u201310"
        ],
        [
          "2",
          "ID 6: row 4\ncols 0\u20133",
          "ID 7: row 4\ncols 4\u20137",
          "ID 8: row 4\ncols 8\u201310"
        ]
      ]
    }
  }
}
