Spaces:
Sleeping
Sleeping
| """Determinism: same (state, action, seed) β identical output. | |
| Covers both ``apply_tick`` and ``make_observation`` independent RNG streams. | |
| """ | |
| from CrisisWorldCortex.models import ( | |
| CrisisworldcortexObservation, | |
| DeployResource, | |
| NoOp, | |
| ) | |
| from CrisisWorldCortex.server.simulator import ( | |
| apply_tick, | |
| load_task, | |
| make_observation, | |
| ) | |
| def test_apply_tick_same_seed_same_state() -> None: | |
| s1 = load_task("outbreak_easy", episode_seed=42) | |
| s2 = load_task("outbreak_easy", episode_seed=42) | |
| a = NoOp() | |
| assert apply_tick(s1, a) == apply_tick(s2, a) | |
| def test_apply_tick_explicit_seed_override() -> None: | |
| s1 = load_task("outbreak_medium", episode_seed=1) | |
| s2 = load_task("outbreak_medium", episode_seed=1) | |
| # Same explicit seed β identical result regardless of episode_seed. | |
| assert apply_tick(s1, NoOp(), seed=99) == apply_tick(s2, NoOp(), seed=99) | |
| def test_make_observation_pure_under_same_seed() -> None: | |
| state = load_task("outbreak_hard", episode_seed=7) | |
| obs1 = make_observation(state) | |
| obs2 = make_observation(state) | |
| assert obs1 == obs2 # purity: same state + derived seed β same obs | |
| def test_make_observation_different_seeds_different_noise() -> None: | |
| state = load_task("outbreak_hard", episode_seed=7) | |
| obs_a = make_observation(state, seed=1) | |
| obs_b = make_observation(state, seed=2) | |
| # Different observation seeds β different noise realizations. | |
| assert obs_a != obs_b | |
| def test_apply_tick_different_episode_seeds_diverge() -> None: | |
| s1 = load_task("outbreak_hard", episode_seed=1) | |
| s2 = load_task("outbreak_hard", episode_seed=2) | |
| obs1 = make_observation(apply_tick(s1, NoOp())) | |
| obs2 = make_observation(apply_tick(s2, NoOp())) | |
| # Different episode seeds β different observation streams. | |
| assert obs1 != obs2 | |
| def test_apply_tick_with_action_deterministic() -> None: | |
| s1 = load_task("outbreak_easy", episode_seed=0) | |
| s2 = load_task("outbreak_easy", episode_seed=0) | |
| a = DeployResource(region="R1", resource_type="test_kits", quantity=100) | |
| assert apply_tick(s1, a) == apply_tick(s2, a) | |
| def test_observation_shape_after_apply_tick() -> None: | |
| state = load_task("outbreak_easy", episode_seed=0) | |
| state = apply_tick(state, NoOp()) | |
| obs = make_observation(state) | |
| assert isinstance(obs, CrisisworldcortexObservation) | |
| assert obs.tick == 1 | |
| assert obs.ticks_remaining == 11 | |
| assert obs.cognition_budget_remaining == 6000 | |
| assert len(obs.regions) == 4 | |
| assert obs.done is False | |