5-minute per-shot limit on Quandela cloud. Script handles this with:
1. RECOVERABLE DAG: each computation step is a DAG node
- Checkpointed to disk after each node
- If a shot times out, resume from last checkpoint with --resume
- The DAG records HOW SLOS computes (the path, not just the result)
- This is informative: the computation structure IS data
2. NODE TYPES:
- eigenvalue_products: cheap (O(n^k)), always runs
- slos_circuit: circuit built, about to sample
- slos: the actual SLOS simulation (5-min limit)
- compare: eigenvalue products vs SLOS output
3. EDGE TYPES:
- products → compare (comparison depends on products)
- slos → compare (comparison depends on SLOS)
4. CHECKPOINTS:
- Each node saved to .openresearch/artifacts/slos_checkpoints/node_<id>.json
- Full DAG state saved to slos_computation_dag.json
- --resume flag loads DAG state and skips already-computed nodes
5. DAG REPORT:
- slos_computation_dag.md: human-readable report of all nodes
- Records: what was computed, when, how long, what it found
- The computation path itself is data about how SLOS processes
the Sidon structure
Usage:
# Local
python3 scripts/perceval_slos_verify.py
# Quandela cloud (5-min/shot limit)
PERCEVAL_TOKEN='token' python3 scripts/perceval_slos_verify.py --cloud
# Resume after timeout
python3 scripts/perceval_slos_verify.py --resume
Tests:
- T1: Sidon vs non-Sidon at K=2 and K=3
- 4 test cases × 2 photon numbers = 8 SLOS shots
- Each shot: ~5 min on cloud (or seconds local)
- Total cloud time: ~40 min (8 shots)
- DAG records the exact computation path for each shot