Sonapse-LAB / tests /test_complex_environments.py
Kai9987kai's picture
feat: frontier apex omnibus mode, 2000-neuron connectome scaling & complex environments
ebdefe7
Raw History Blame Contribute Delete
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