Download tests/test_complex_environments.py from Kai9987kai/Sonapse-LAB: direct link, hf CLI and curl.
- Browser
- Download file 5.51 kB
-
https://huggingface.co/Kai9987kai/Sonapse-LAB/resolve/main/tests/test_complex_environments.py
- Command line
-
hf download hf://Kai9987kai/Sonapse-LAB/tests/test_complex_environments.py
-
curl -L -o test_complex_environments.py https://huggingface.co/Kai9987kai/Sonapse-LAB/resolve/main/tests/test_complex_environments.py
5.51 kB
| """Comprehensive verification suite for dynamic complex environments and physics. | |
| Covers: | |
| 1. Frontier tasks: apex_megasite, stealth_labyrinth, kinetic_foundry. | |
| 2. Vector flow displacement physics (rivers, conveyor belts). | |
| 3. Topographic elevation hill slope gradient forces. | |
| 4. Coordinated multi-agent predator pack alerting and flanking. | |
| 5. Rotating sentinel searchlights with cone detection and shadow cloaks. | |
| 6. Acoustic sound tripwires with speed threshold sensing. | |
| 7. Multi-switch and button puzzle unlocks with terminal goal rewards. | |
| """ | |
| import math | |
| import numpy as np | |
| import pytest | |
| from synapse.complex_world import ComplexWorld, COMPLEX_TASKS, ALL_TASKS | |
| def test_all_frontier_tasks_reset_and_have_valid_observations(): | |
| world = ComplexWorld(seed=123) | |
| for task in COMPLEX_TASKS: | |
| obs = world.reset(task) | |
| assert isinstance(obs, np.ndarray) | |
| assert obs.shape == (155,) | |
| assert np.isfinite(obs).all() | |
| def test_vector_river_current_displaces_agent_and_objects(): | |
| world = ComplexWorld(seed=42) | |
| world.reset("apex_megasite") | |
| # Place agent directly in the river current (x=0, y=0, vy=-0.15) | |
| world.a["x"] = 0.0 | |
| world.a["y"] = 0.0 | |
| initial_y = world.a["y"] | |
| # Step with neutral zero action | |
| zero_action = np.zeros(5, dtype=np.float32) | |
| world.step(zero_action) | |
| # Agent should have been carried downstream (negative y) | |
| assert world.a["y"] < initial_y | |
| delta_y = world.a["y"] - initial_y | |
| assert delta_y < -0.10 | |
| def test_topographic_elevation_gradient_force(): | |
| world = ComplexWorld(seed=42) | |
| world.reset("apex_megasite") | |
| # Position agent on the slope of the West Plateau hill (hill is at x=-2.6, y=2.0, height=1.8) | |
| world.a["x"] = -2.0 | |
| world.a["y"] = 2.0 | |
| initial_x = world.a["x"] | |
| zero_action = np.zeros(5, dtype=np.float32) | |
| _, _, _, info = world.step(zero_action) | |
| assert "elevation_gradient" in info | |
| gx, gy = info["elevation_gradient"] | |
| # Slope vector should be directed uphill towards hill center (-2.6 < -2.0), so gx is negative | |
| assert gx < 0.0 | |
| # Gravitational drift pushes downhill (positive x direction) | |
| assert world.a["x"] > initial_x | |
| def test_predator_pack_alert_propagation(): | |
| world = ComplexWorld(seed=42) | |
| world.reset("apex_megasite") | |
| assert len(world.predators) >= 2 | |
| # Initially predators are not alerted | |
| for p in world.predators: | |
| assert not p.get("alerted", False) | |
| # Position agent close to the leader predator (within alert distance 3.5) | |
| lead_pred = world.predators[0] | |
| world.a["x"] = lead_pred["x"] + 1.0 | |
| world.a["y"] = lead_pred["y"] + 1.0 | |
| zero_action = np.zeros(5, dtype=np.float32) | |
| world.step(zero_action) | |
| # Alert should have triggered on the leader and propagated across the pack | |
| for p in world.predators: | |
| assert p.get("alerted", True) is True | |
| def test_sentinel_searchlight_detection_and_shadow_cloaking(): | |
| world = ComplexWorld(seed=42) | |
| world.reset("stealth_labyrinth") | |
| assert len(world.sentinels) >= 1 | |
| sentinel = world.sentinels[0] # at (0, 2.2) | |
| sentinel["angle"] = -math.pi / 2.0 # pointing south | |
| # Place agent south of sentinel in open corridor outside shadow zones | |
| world.a["x"] = 0.0 | |
| world.a["y"] = 1.0 | |
| zero_action = np.zeros(5, dtype=np.float32) | |
| _, _, _, info = world.step(zero_action) | |
| assert info.get("in_shadow") is False | |
| assert info.get("alarm_tripped") is True | |
| assert sentinel.get("alerted") is True | |
| # Now place agent in a designated shadow zone (e.g. x=-1.2, y=-2.0) | |
| world.reset("stealth_labyrinth") | |
| shadow = next(tz for tz in world.terrain_zones if tz.get("kind") == "shadow") | |
| world.a["x"] = shadow["x"] | |
| world.a["y"] = shadow["y"] | |
| # Point sentinel right at agent | |
| sentinel = world.sentinels[0] | |
| sentinel["x"] = shadow["x"] + 1.0 | |
| sentinel["y"] = shadow["y"] | |
| sentinel["angle"] = math.pi | |
| _, _, _, info = world.step(zero_action) | |
| # Cloaked in shadow, alarm must not be tripped | |
| assert info.get("in_shadow") is True | |
| assert info.get("alarm_tripped") is False | |
| def test_acoustic_sound_tripwire_trigger(): | |
| world = ComplexWorld(seed=42) | |
| world.reset("stealth_labyrinth") | |
| assert len(world.sound_tripwires) >= 1 | |
| trip = world.sound_tripwires[0] | |
| # Position agent right on tripwire crossing with forward drive velocity | |
| world.a["x"] = (trip["x1"] + trip["x2"]) / 2.0 | |
| world.a["y"] = (trip["y1"] + trip["y2"]) / 2.0 | |
| fast_action = np.array([0.8, 0.0, 0.0, 0.0, 0.0], dtype=np.float32) | |
| _, _, _, info = world.step(fast_action) | |
| assert info.get("alarm_tripped") is True | |
| def test_puzzle_chamber_button_unlock_and_goal_reward(): | |
| world = ComplexWorld(seed=42) | |
| world.reset("puzzle_chamber") | |
| btn = next(o for o in world.objects if o.get("kind") == "button") | |
| target = next(o for o in world.objects if o.get("kind") == "target") | |
| gate = world.dynamic_gates[0] | |
| assert not gate.get("open", False) | |
| # Step agent touching button | |
| world.a["x"] = btn["x"] | |
| world.a["y"] = btn["y"] | |
| btn["pressed"] = True | |
| zero_action = np.zeros(5, dtype=np.float32) | |
| world.step(zero_action) | |
| assert gate.get("open", False) is True | |
| # Now step agent to target -> should complete episode with success bonus | |
| world.a["x"] = target["x"] | |
| world.a["y"] = target["y"] | |
| _, reward, done, info = world.step(zero_action) | |
| assert done is True | |
| assert info.get("outcome") == "success" | |
| assert reward >= 5.0 | |