{
  "article_slug": "neural-ode-solver-contracts",
  "figures": [
    {
      "id": "euler-state-gradient",
      "kind": "line_chart",
      "title": "Exact flow versus a finite solver",
      "x_label": "Euler steps",
      "y_label": "Endpoint or parameter derivative",
      "x": [
        1,
        2,
        4,
        8,
        16,
        32
      ],
      "series": [
        {
          "name": "Euler endpoint",
          "y": [
            -1,
            0,
            0.0625,
            0.1001129150390625,
            0.1180670870212488,
            0.12678878637700036
          ]
        },
        {
          "name": "Euler derivative",
          "y": [
            1,
            0,
            0.125,
            0.13348388671875,
            0.13493381373857005,
            0.13524137213546705
          ]
        },
        {
          "name": "Exact reference",
          "y": [
            0.1353352832366127,
            0.1353352832366127,
            0.1353352832366127,
            0.1353352832366127,
            0.1353352832366127,
            0.1353352832366127
          ]
        }
      ],
      "caption": "Author-constructed dz/dt=-2z on a unit interval; fixed-step Euler formulas, not a learned-model benchmark. Negative values must remain visible."
    },
    {
      "id": "reverse-conditioning",
      "kind": "line_chart",
      "title": "Forward contraction, backward amplification",
      "x_label": "Damping magnitude over the unit interval",
      "y_label": "Endpoint perturbation amplification",
      "x": [
        1,
        2,
        4,
        8
      ],
      "y": [
        2.718281828459045,
        7.38905609893065,
        54.598150033144236,
        2980.9579870417283
      ],
      "caption": "Exact inverse sensitivity exp(a) for dz/dt=-az. This is conditioning of a scalar inverse map, not measured adjoint error."
    }
  ],
  "constructed_only": true
}
