mirror of
https://github.com/wiltodelta/remove-ai-watermarks.git
synced 2026-08-09 23:50:40 +02:00
Add video SynthID experiment harness
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
"""Pure regression tests for the oracle-gated video SynthID experiment."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import importlib.util
|
||||
from pathlib import Path
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
import numpy as np
|
||||
import pytest
|
||||
import torch
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from types import ModuleType
|
||||
|
||||
_SCRIPT = Path(__file__).parent.parent / "scripts" / "video_synthid_sweep.py"
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def sweep() -> ModuleType:
|
||||
spec = importlib.util.spec_from_file_location("video_synthid_sweep", _SCRIPT)
|
||||
assert spec is not None
|
||||
assert spec.loader is not None
|
||||
module = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(module)
|
||||
return module
|
||||
|
||||
|
||||
def test_fit_size_preserves_landscape_aspect_and_vae_alignment(sweep: ModuleType) -> None:
|
||||
assert sweep._fit_size(1280, 720, 512) == (512, 288)
|
||||
|
||||
|
||||
def test_fit_size_rejects_invalid_dimensions(sweep: ModuleType) -> None:
|
||||
with pytest.raises(ValueError, match="positive"):
|
||||
sweep._fit_size(0, 720, 512)
|
||||
|
||||
|
||||
def test_shared_latent_noise_is_one_spatial_field(sweep: ModuleType) -> None:
|
||||
noise = sweep._shared_latent_noise(
|
||||
(4, 8, 8),
|
||||
seed=7,
|
||||
device="cpu",
|
||||
dtype=torch.float32,
|
||||
)
|
||||
assert noise.shape == (1, 4, 8, 8)
|
||||
|
||||
|
||||
def test_shared_latent_noise_is_seeded(sweep: ModuleType) -> None:
|
||||
first = sweep._shared_latent_noise((4, 8, 8), seed=7, device="cpu", dtype=torch.float32)
|
||||
repeated = sweep._shared_latent_noise((4, 8, 8), seed=7, device="cpu", dtype=torch.float32)
|
||||
other = sweep._shared_latent_noise((4, 8, 8), seed=8, device="cpu", dtype=torch.float32)
|
||||
assert torch.equal(first, repeated)
|
||||
assert not torch.equal(first, other)
|
||||
|
||||
|
||||
def test_psnr_is_infinite_for_identical_frames(sweep: ModuleType) -> None:
|
||||
frame = np.full((2, 8, 8, 3), 120, dtype=np.uint8)
|
||||
assert sweep._psnr(frame, frame.copy()) == pytest.approx(float("inf"))
|
||||
|
||||
|
||||
def test_temporal_residual_ratio_is_one_for_identical_sequences(sweep: ModuleType) -> None:
|
||||
first = np.zeros((32, 32, 3), dtype=np.uint8)
|
||||
second = first.copy()
|
||||
second[:, 8:16] = 80
|
||||
sequence = [first, second]
|
||||
maps, baseline = sweep._temporal_reference(sequence)
|
||||
assert sweep._temporal_residual_ratio([frame.copy() for frame in sequence], maps, baseline) == pytest.approx(1.0)
|
||||
Reference in New Issue
Block a user