{
  "schemaVersion": 1,
  "lessonId": "deployment-05",
  "contentHash": "c229344c4a2c52d7669643c92b4b25cb997cf90ecb36600645fff53e8c8cbe68",
  "rendererHash": "a1bd5b648f4731ae5d5f0a24811c2540d1a0a132149ce589d17c4113509cbedf",
  "kind": "executed",
  "generatedAt": "2026-10-20T10:46:51.082107+00:00",
  "provenance": "recorded_cpu_computation",
  "environment": {
    "backend": "cpu",
    "deviceCount": 1,
    "jax": "0.9.2",
    "numpy": "2.4.4",
    "matplotlib": "3.10.8"
  },
  "stdout": "<class 'jax.numpy.float32'> max absolute error 0.0\n<class 'jax.numpy.float16'> max absolute error 0.0010547637939453125\n<class 'jax.numpy.bfloat16'> max absolute error 0.006171703338623047\nW8A32 simulated output error 0.008031368255615234\nW4A32 simulated output error 0.14571428298950195\nAffine accumulators: [[5, 15]] output codes: [[2, 7]]\nCorrect / missing zero point / clipped: [[0.625, 0.9375]] [[-0.125, 0.5625]] [[0.52734375, 0.52734375]]\n",
  "data": {
    "panels": [
      {
        "kind": "bar",
        "labels": [
          "FP32",
          "FP16 \u2192 FP32",
          "BF16 \u2192 FP32",
          "W8 A32",
          "W4 A32"
        ],
        "ylabel": "maximum absolute output error",
        "series": [
          {
            "label": "CPU reference error",
            "y": [
              0.0,
              0.0010547637939453125,
              0.006171703338623047,
              0.008031368255615234,
              0.14571428298950195
            ]
          }
        ]
      },
      {
        "kind": "bar",
        "labels": [
          "output 0",
          "output 1"
        ],
        "ylabel": "output value",
        "series": [
          {
            "label": "correct affine / float reference",
            "y": [
              0.625,
              0.9375
            ]
          },
          {
            "label": "input zero point omitted",
            "y": [
              -0.125,
              0.5625
            ]
          },
          {
            "label": "narrow output grid clips",
            "y": [
              0.52734375,
              0.52734375
            ]
          }
        ]
      }
    ]
  },
  "diagram": {
    "title": "Integer values need scales and zero-points",
    "prediction": "What happens if you ignore a nonzero zero-point when interpreting quantized values?",
    "reading": "Follow affine integer codes into centered products, wide accumulation and compatible bias units, then output rescaling. Exact accumulator dtype and per-channel scale axes belong to the declared runtime policy. These arrows describe arithmetic dependencies, not a specific hardware kernel.",
    "alt": "Follow affine integer codes into centered products, wide accumulation and compatible bias units, then output rescaling. Exact accumulator dtype and per-channel scale axes belong to the declared runtime policy. These arrows describe arithmetic dependencies, not a specific hardware kernel.",
    "scope": "Architecture and dataflow mechanism diagram.",
    "height": 6.4,
    "panel": {
      "kind": "graph",
      "nodes": [
        {
          "id": "0",
          "x": 5,
          "y": 1,
          "label": "Real activations + weights\nChoose scales, zero-points and ranges",
          "tone": "data",
          "w": 8,
          "h": 1.05
        },
        {
          "id": "1",
          "x": 5,
          "y": 2.7,
          "label": "Round \u2192 add zero-point \u2192 clamp\nStore quantized codes",
          "tone": "data",
          "w": 8,
          "h": 1.05
        },
        {
          "id": "2",
          "x": 5,
          "y": 4.4,
          "label": "Center codes \u2192 products \u2192 wide accumulation\nMatch bias to accumulator units",
          "tone": "data",
          "w": 8,
          "h": 1.05
        },
        {
          "id": "3",
          "x": 5,
          "y": 6.1,
          "label": "Rescale / requantize output\nCompare independent references",
          "tone": "result",
          "w": 8,
          "h": 1.05
        }
      ],
      "edges": [
        {
          "from": "0",
          "to": "1"
        },
        {
          "from": "1",
          "to": "2"
        },
        {
          "from": "2",
          "to": "3"
        }
      ],
      "height": 7,
      "width": 10
    }
  }
}
