graph LR S["site distances D"] --> P["polynomial basis: D^0, D^1, D^2, ..."] S --> B["B-spline basis\n{B_i(d)} on knots t"] P --> A["design matrices Sigma_1..m"] B --> A A --> O["cutting-plane solver"] style S fill:#eceff4,stroke:#4c566a,stroke-width:3px style P fill:#fff9c4,stroke:#f57f17,stroke-width:3px style B fill:#d5f5e3,stroke:#2e7d32,stroke-width:3px style A fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style O fill:#fadbd8,stroke:#c0392b,stroke-width:3px
graph LR S["Halton sites\n5 x 4 grid"] --> D["distances D\n20 x 20, dmax = 10.1"] D --> SP["basis Sigma_1..m\npoly or B-spline"] D --> TK["true kernel\n4 exp(-0.12 d^2)"] TK --> Y["biased Y\nN = 3000 samples"] SP --> SOL["cutting-plane\nsolver"] Y --> SOL SOL --> FIT["fitted kernel K_hat(d)"] style S fill:#eceff4,stroke:#4c566a,stroke-width:3px style D fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style SP fill:#fff9c4,stroke:#f57f17,stroke-width:3px style Y fill:#fadbd8,stroke:#c0392b,stroke-width:3px style SOL fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style FIT fill:#d5f5e3,stroke:#2e7d32,stroke-width:3px
graph LR P["Python reference\ncorr_bspline_oracle.py"] --> B["bspline.hpp\nclamped knots + de Boor"] P --> M["mono oracle\ncoefficients decreasing"] B --> C["design_cond\nGram + Jacobi in double-double"] M --> C C --> E["experiments/main.cpp\n5 experiment groups"] E --> O["stdout tables + CSV"] style P fill:#fff9c4,stroke:#f57f17,stroke-width:3px style B fill:#d5f5e3,stroke:#2e7d32,stroke-width:3px style M fill:#d5f5e3,stroke:#2e7d32,stroke-width:3px style C fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style E fill:#fadbd8,stroke:#c0392b,stroke-width:3px style O fill:#eceff4,stroke:#4c566a,stroke-width:3px
graph LR P["Python reference\ncorr_bspline_oracle.py"] --> S["bspline.rs\nclamped knots + de Boor"] P --> C["fitting.rs\nCCP surrogate + 50-round loop"] S --> E["eigen.rs\ndesign_cond in double-double"] C --> E E --> X["bin/experiments.rs\n5 experiment groups"] X --> O["stdout tables + CSV"] style P fill:#fff9c4,stroke:#f57f17,stroke-width:3px style S fill:#d5f5e3,stroke:#2e7d32,stroke-width:3px style C fill:#d5f5e3,stroke:#2e7d32,stroke-width:3px style E fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style X fill:#fadbd8,stroke:#c0392b,stroke-width:3px style O fill:#eceff4,stroke:#4c566a,stroke-width:3px