gen-f2d1187e333bf403 / tests /test_vectorized_cleanroom.py
ShinyUser's picture
cascade generator submission: epoch1211-cleanroom-fullclock-zero-v1
721b1d0 verified
Raw
History Blame Contribute Delete
10.5 kB
from __future__ import annotations
import importlib.util
import itertools
import json
from pathlib import Path
import numpy as np
import pytest
from cascade.interface import DataGenerator
from cascade.interface.generator import check_series
from cascade.interface.static_guard import scan_file
from cascade.interface.validation import (
check_config,
check_repo_layout,
check_requirements_hash_locked,
)
from cascade.miner.verify import verify_repo
from cascade.shared.config import load_chain_config
ROOT = Path(__file__).resolve().parents[1]
CASCADE = Path("/root/91/cascade")
HEAT_BUDGET = 6_660_000_000
FINAL_BUDGET = 39_960_000_000
def _module():
spec = importlib.util.spec_from_file_location(
"fullclock_zero_cleanroom_generator", ROOT / "generator.py"
)
module = importlib.util.module_from_spec(spec)
assert spec.loader is not None
spec.loader.exec_module(module)
return module
def _rows(seed: int, n: int, root: Path = ROOT):
return list(_module().Generator(str(root), seed=seed).generate(n))
def test_contract_exact_partial_chunk_and_determinism():
module = _module()
gen = module.Generator(str(ROOT), seed=73)
assert isinstance(gen, DataGenerator)
n = gen._chunk_size + 3
first = list(gen.generate(n))
second = list(module.Generator(str(ROOT), seed=73).generate(n))
assert len(first) == len(second) == n
for index, (left, right) in enumerate(zip(first, second, strict=True)):
check_series(
left, min_length=64, max_length=4096, max_channels=1, index=index
)
assert left.shape == (4096,)
assert left.flags.c_contiguous
assert np.array_equal(left, right)
assert np.isfinite(left).all()
assert np.ptp(left) > 0.0
keys = {row.tobytes() for row in first}
assert len(keys) == n
def test_huge_request_is_bounded_by_fixed_chunk(monkeypatch):
module = _module()
gen = module.Generator(str(ROOT), seed=91)
observed: list[int] = []
original = gen._family_batch
def wrapped(rng, family, count):
observed.append(int(count))
return original(rng, family, count)
monkeypatch.setattr(gen, "_family_batch", wrapped)
rows = list(itertools.islice(gen.generate(624_375_002), gen._chunk_size + 1))
assert len(rows) == gen._chunk_size + 1
assert observed and max(observed) <= gen._chunk_size
def test_seed_changes_corpus():
left = _rows(10, 32)
right = _rows(11, 32)
assert any(
not np.array_equal(a, b)
for a, b in zip(left, right, strict=True)
)
def test_rng_resets_partial_restart_and_global_state_is_untouched():
module = _module()
gen = module.Generator(str(ROOT), seed=104)
first = list(itertools.islice(gen.generate(104_062_502), 67))
second = list(itertools.islice(gen.generate(104_062_502), 67))
assert all(
np.array_equal(left, right)
for left, right in zip(first, second, strict=True)
)
np.random.seed(611)
expected = np.random.random(8)
np.random.seed(611)
list(itertools.islice(gen.generate(104_062_502), 5))
assert np.array_equal(np.random.random(8), expected)
def test_component_lanes_cannot_advance_each_other():
gen = _module().Generator(str(ROOT), seed=902)
direct = gen._rng(0x0401)
expected = [gen._source_batch(direct, 1, size)[0] for size in (2, 5, 3)]
stock = gen._rng(0x0400)
market = gen._rng(0x0401)
actual = []
for index, size in enumerate((2, 5, 3)):
gen._source_batch(stock, 0, index + 1)
actual.append(gen._source_batch(market, 1, size)[0])
assert all(
np.array_equal(left, right)
for left, right in zip(actual, expected, strict=True)
)
def test_zero_and_enabled_source_configs_share_every_unselected_base_row(tmp_path):
cfg = json.loads((ROOT / "config.json").read_text(encoding="utf-8"))
cfg["source_rate_start"] = {
"stock_flow": 0.004,
"market": 0.0,
"weather_load": 0.003,
"weekly_count": 0.003,
}
cfg["source_rate_final"] = {
"stock_flow": 0.032,
"market": 0.024,
"weather_load": 0.016,
"weekly_count": 0.008,
}
(tmp_path / "config.json").write_text(json.dumps(cfg), encoding="utf-8")
module = _module()
disabled = module.Generator(str(ROOT), seed=814)
enabled = module.Generator(str(tmp_path), seed=814)
n = 512
left = list(enabled.generate(n))
right = list(disabled.generate(n))
kinds = enabled._select_sources(enabled._rng(0x0300), 0, n, n)
assert np.any(kinds >= 0)
assert all(
np.array_equal(left[index], right[index])
for index in np.flatnonzero(kinds < 0)
)
def test_every_family_and_source_is_finite_nonconstant_and_integer_when_marked():
module = _module()
gen = module.Generator(str(ROOT), seed=512)
for family in range(module.FAMILY_COUNT):
values, integer = gen._family_batch(
gen._rng(0x7000 + family), family, 8
)
assert values.shape == (8, 4096)
assert np.isfinite(values).all()
assert np.all(np.ptp(values, axis=1) > 0.0)
if integer:
assert np.array_equal(values, np.rint(values))
for kind in range(4):
values, integer = gen._source_batch(gen._rng(0x7100 + kind), kind, 32)
assert values.shape == (32, 4096)
assert np.isfinite(values).all()
assert np.all(np.ptp(values, axis=1) > 0.0)
integer_rows = np.full(32, integer) if np.ndim(integer) == 0 else integer
if np.any(integer_rows):
assert np.array_equal(
values[integer_rows], np.rint(values[integer_rows])
)
def test_market_source_returns_per_row_integer_mask():
gen = _module().Generator(str(ROOT), seed=902)
values, integer_rows = gen._source_batch(gen._rng(0x999), 1, 64)
assert isinstance(integer_rows, np.ndarray)
assert integer_rows.dtype == np.bool_
assert integer_rows.shape == (64,)
assert np.any(integer_rows) and np.any(~integer_rows)
assert np.array_equal(
values[integer_rows], np.rint(values[integer_rows])
)
assert np.any(values[~integer_rows] != np.rint(values[~integer_rows]))
def test_pointwise_sanitizer_and_linear_filters_are_prefix_causal():
module = _module()
prefix = np.asarray([1.2, np.nan, 5.7, np.inf, -4.2])
left = module._causal_sanitize(
np.concatenate((prefix, np.ones(10))), cap=100.0
)
right = module._causal_sanitize(
np.concatenate((prefix, np.full(10, -99.0))), cap=100.0
)
assert np.array_equal(left[: prefix.size], right[: prefix.size])
rng = np.random.default_rng(8)
forcing = rng.normal(size=(7, 256))
altered = forcing.copy()
altered[:, 111:] = rng.normal(size=altered[:, 111:].shape)
initial = rng.normal(size=7)
phi = rng.uniform(-0.3, 0.9, size=7)
a = module._ar1_rows(forcing, phi, initial)
b = module._ar1_rows(altered, phi, initial)
assert np.array_equal(a[:, :111], b[:, :111])
@pytest.mark.parametrize(
("budget", "upper", "consumed", "terminal_row"),
[
(
HEAT_BUDGET,
104_062_502,
1_625_977,
1_056_885,
),
(
FINAL_BUDGET,
624_375_002,
9_755_860,
6_341_309,
),
],
)
def test_exact_public_source_and_base_clock_contract(
budget, upper, consumed, terminal_row
):
gen = _module().Generator(str(ROOT), seed=4)
assert budget // 64 + 2 == upper
assert gen._estimated_consumed_rows(upper) == consumed
assert (budget + 4095) // 4096 == consumed
assert gen._progress(terminal_row - 1, upper) < 1.0
assert gen._progress(terminal_row, upper) == 1.0
assert gen._source_progress(terminal_row - 1, upper) < 1.0
assert gen._source_progress(terminal_row, upper) == 1.0
assert gen._progress(consumed - 1, upper) == 1.0
assert gen._progress(terminal_row, upper) == gen._source_progress(
terminal_row, upper
)
assert np.array_equal(gen._source_rates(0, upper), gen._rate_start)
assert np.array_equal(
gen._source_rates(terminal_row, upper), gen._rate_final
)
probe = np.asarray([0, 1, terminal_row - 1, terminal_row])
source_vector = gen._source_progress_chunk(0, terminal_row + 1, upper)[
probe
]
base_vector = gen._progress_chunk(0, terminal_row + 1, upper)[probe]
source_scalar = np.asarray(
[gen._source_progress(int(row), upper) for row in probe]
)
base_scalar = np.asarray([gen._progress(int(row), upper) for row in probe])
assert np.array_equal(source_vector, source_scalar)
assert np.array_equal(base_vector, base_scalar)
assert np.array_equal(base_vector, source_vector)
def test_zero_overlay_component_mapping_and_rates():
cfg = json.loads((ROOT / "config.json").read_text(encoding="utf-8"))
assert list(cfg["source_rate_start"]) == [
"stock_flow",
"market",
"weather_load",
"weekly_count",
]
assert list(cfg["source_rate_start"].values()) == [
0.0,
0.0,
0.0,
0.0,
]
assert list(cfg["source_rate_final"].values()) == [
0.0,
0.0,
0.0,
0.0,
]
assert sum(cfg["source_rate_start"].values()) == 0.0
assert sum(cfg["source_rate_final"].values()) == 0.0
gen = _module().Generator(str(ROOT), seed=3)
kinds = gen._select_sources(gen._rng(0x0300), 0, 8192, 104_062_502)
assert np.all(kinds == -1)
@pytest.mark.parametrize("value", [0, -1, 4097, 1.5, True])
def test_rejects_invalid_chunk_size(tmp_path, value):
cfg = json.loads((ROOT / "config.json").read_text(encoding="utf-8"))
cfg["chunk_size"] = value
(tmp_path / "config.json").write_text(json.dumps(cfg), encoding="utf-8")
with pytest.raises(ValueError, match="chunk_size"):
_module().Generator(str(tmp_path), seed=1)
def test_static_cascade_validation():
cfg = load_chain_config(CASCADE / "chain.toml")
assert check_repo_layout(ROOT).ok
assert check_config(ROOT).ok
assert check_requirements_hash_locked(
ROOT / "requirements.txt",
allowed=cfg.dependencies.allowed,
max_packages=cfg.dependencies.max_packages,
).ok
assert scan_file(ROOT / "generator.py", cfg.static_guard.blocked).ok
report = verify_repo(ROOT, cfg, skip_runtime=True)
assert report.ok and report.runtime_skipped