Spaces:
Running on Zero
Running on Zero
| """Shared pytest fixtures for WP-0 and WP-1 tests.""" | |
| from __future__ import annotations | |
| import os | |
| import pytest as _pytest | |
| def _hermetic_api_env(monkeypatch): | |
| """The suite must NEVER see operator API credentials. | |
| app.main calls load_dotenv() at import, so a real .env (present since the | |
| WP-14 key setup) leaks REPLICATE_API_TOKEN / ANTHROPIC_API_KEY into every | |
| test after the first app.main import — demo-mode assertions then take the | |
| live-API branch and pytest attempts PAID network calls (observed live | |
| 2026-07-14: 4 failures + real 402s from Replicate). Strip the keys for | |
| every test; API-path tests mock at the client boundary and never need them. | |
| """ | |
| for var in ("REPLICATE_API_TOKEN", "ANTHROPIC_API_KEY", "REPLICATE_INPAINT_MODEL"): | |
| monkeypatch.delenv(var, raising=False) | |
| import numpy as np | |
| import pytest | |
| import torch | |
| from film_physics import get_film_curve, PiecewiseFilmCurve | |
| def generic_curve() -> PiecewiseFilmCurve: | |
| return get_film_curve("Generic") | |
| def small_rgb() -> np.ndarray: | |
| """64×64 random float32 RGB in (0.1, 0.9) — mid-range to avoid gradient clamps.""" | |
| rng = np.random.default_rng(0) | |
| return rng.uniform(0.1, 0.9, (64, 64, 3)).astype(np.float32) | |
| def small_log_exposure() -> torch.Tensor: | |
| """(1, 1, 64, 64) log-exposure tensor at a mid-curve value.""" | |
| return torch.full((1, 1, 64, 64), -0.3) | |