{
  "schemaVersion": 1,
  "lessonId": "optimization-05",
  "contentHash": "d4f1f65e9be5e5231003b756f6a7dcaefb895c32fab266192c9e5f10120a7db0",
  "rendererHash": "a1bd5b648f4731ae5d5f0a24811c2540d1a0a132149ce589d17c4113509cbedf",
  "kind": "executed",
  "generatedAt": "2026-10-20T10:45:17.642573+00:00",
  "provenance": "recorded_cpu_computation",
  "environment": {
    "backend": "cpu",
    "deviceCount": 1,
    "jax": "0.9.2",
    "numpy": "2.4.4",
    "matplotlib": "3.10.8"
  },
  "stdout": "projection / residual: [3. 0.] [0. 4.]\n",
  "data": {
    "kind": "vectors",
    "arrows": [
      {
        "label": "input u",
        "start": [
          0,
          0
        ],
        "end": [
          3.0,
          4.0
        ]
      },
      {
        "label": "projection p",
        "start": [
          0,
          0
        ],
        "end": [
          3.0,
          0.0
        ]
      },
      {
        "label": "residual r",
        "start": [
          3.0,
          0.0
        ],
        "end": [
          3.0,
          4.0
        ]
      }
    ]
  }
}
