graph LR CP["cutting_plane_optim\n(ellalgo)"] --> SP["Ell\nsearch space"] CP --> OR["Oracle\nassess_optim"] OR --> L0["LMI0Oracle\nSigma x_k >= 0"] OR --> QM["QMIOracle\nt*I - F F^T >= 0"] L0 --> LD["LDLTMgr\nfactor / witness"] QM --> LD LD --> CUT["cut (g, beta)"] CUT --> CP style CP fill:#e3f2fd,stroke:#1565c0,stroke-width:3px style OR fill:#fff9c4,stroke:#f57f17,stroke-width:3px style LD fill:#bf616a,stroke:#8b2c3a,stroke-width:4px,color:#ffffff style SP fill:#d1c4e9,stroke:#6a1b9a,stroke-width:3px
The same unchanged baseline, measured minutes apart run A (cool machine) 21.8 s run B (same code!) 54.9 s ยท 2.4ร slower Nothing changed. Only the machine state. Absolute timings are not comparable across runs.
Where 45.3 s went โ cumulative time LDLT _factor_impl 32.7 s ยท 72% ellipsoid update + drivers 11.9 s ยท 26% copy.deepcopy (Ell clone) 0.43 s ยท 1% data setup 0.05 s ยท 0.1% of the 32.7 s โ 18.3 s is Python-level element access (56%), 8.5 s loop bookkeeping. 18,907 factorizations ยท 2.27 M element accesses ยท ~120 interpreter calls each
Controlled alternating A/B, min of 3, same process lsq_corr_poly ๐ 26ร ยท 47.97 s โ 1.81 s lsq_corr_poly2 ๐ 51ร ยท 8.67 s โ 0.17 s mle_corr_bspline ๐ 13ร ยท 1.22 s โ 0.09 s Bar width โ speedup. The pure-Python path stays available โ the kernels are an opt-in module behind a numba extra, not a replacement.
Bisection width tau vs iteration (log scale, broken x-axis) 1e+3 1e-2 1e-8 1e-16 tolerance = 1e-20 โ never reached โ 62 steps: converged axis break 1938 steps doing nothing ๐๏ธ tau bottoms out at the ulp of the threshold value (1.11e-16) and cannot shrink further. The loop is not converging โ it is spinning.
Inner feasibility iterations (log-scaled bars) site=5x4 m=3 491,269 8,707 ยท 56ร site=6x5 m=4 945,759 17,457 ยท 54ร site=10x8 m=4 901,861 16,195 ยท 56ร Outer iterations went 2000 โ ~62 on every instance in a 10-case battery.
MLE correlation ยท MSVC release, /arch:AVX2 before โ๏ธ 146.0 ms after โ๏ธ 110.8 ms ยท โ24% โ Iteration count unchanged at 200 โ the algebra is identical, only the evaluation order changed.
corr-solver ยท speedup, and iterations lsq_corr_poly ๐ 28ร ยท 18.0 s โ 0.65 s iters 2000 โ 61 lsq_corr_poly2 ๐ 62ร ยท 3.9 s โ 0.06 s mle_corr_bspline ๐ 13ร ยท 1.2 s โ 0.09 s MLE_corr โ๏ธ 1.24ร ยท 146.0 โ 110.8 ms Bar width โ speedup. Iteration counts are the machine-independent evidence. โ