"""Shared fixtures: fast synthetic stores (no pod5 needed) and determinism.""" from __future__ import annotations import sys from pathlib import Path import pytest sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src")) from custom_models.seed import seed_everything from custom_models.store import synthetic_store @pytest.fixture(autouse=True) def _seed_every_test() -> None: """Seed all RNGs before each test (the GATE ZERO ยง2.3 contract).""" seed_everything(0) @pytest.fixture(scope="session") def fast_store(tmp_path_factory: pytest.TempPathFactory) -> Path: """A small 6-genus duty-cycle store for split/config tests.""" out = tmp_path_factory.mktemp("store") / "main" synthetic_store( out_dir=out, n_genera=6, reads_per_genus=12, window_samples=1200, shard_windows=8, seed=0, ) return out @pytest.fixture(scope="session") def trap_store(tmp_path_factory: pytest.TempPathFactory) -> Path: """A small eval-only impostor store (and test-split source).""" out = tmp_path_factory.mktemp("store") / "trap" synthetic_store( out_dir=out, n_genera=2, reads_per_genus=6, window_samples=1200, shard_windows=8, seed=1, genus_prefix="trap_", ) return out