The pinned uv environment every rigorquant subagent executes against. One environment, two duties:
- Exact lane:
sympy(symbolic closed forms, exact invariants),mpmath(50-digit ground-truth checks for Gate A). - Numeric/statistical lane:
numpy/scipy(methods),cvxpy+ Clarabel/SCS (convex optimization, constrained multi-objective),jax(sampling/simulation),pytest+hypothesis(Gate D property-based falsification).
uv sync --frozen --project envThe lockfile env/uv.lock is committed (reproducibility is Gate D). Subagents
run code through this lane:
uv run --frozen --project <path-to-this-env> python script.py- Never
pip installinto the ambient interpreter; the lane is the contract. - Record the seed of every stochastic run in
study.json(at the study root). - Python ≥ 3.12 (aligns with the jacobian escalation lane's runtime).
"Same lane, same lockfile, same seed" is not enough. A reproduction manifest must record:
- repository commit and code hash;
- input-data hashes and any transformations;
- the exact Python version;
- operating system and architecture;
- BLAS and device backend;
- solver, status, tolerances, residuals, and thread settings;
- JAX precision (
jax_enable_x64) and determinism configuration; - every random stream, including Hypothesis.
Use uv sync --frozen / uv run --frozen so the pinned lockfile is honored.
Either pin a supported Python range and backend, or replace any "bit-identical"
claim with a documented numerical-tolerance guarantee.