vla / tests /test_toy_sim.py
anhtld's picture
Initial commit: DoVLA-CIL codebase (h=16 breakthrough) (part 2)
20c251e verified
Raw
History Blame Contribute Delete
2.7 kB
from __future__ import annotations
from dovla_cil.sim.base import ActionChunk, SimState
from dovla_cil.sim.registry import get_simulator_backend
from dovla_cil.sim.toy_backend import ToyBackend
from dovla_cil.tasks.library import ToyTaskLibrary
from dovla_cil.tasks.predicates import evaluate_task_success
def test_toy_backend_can_reset_task() -> None:
task = ToyTaskLibrary().get_by_id("toy_put_red_mug_in_blue_bowl")
sim = ToyBackend()
sim.seed(123)
state = sim.reset_task(task)
observation = sim.render_observation()
assert isinstance(state, SimState)
assert state.task_id == task.task_id
assert "red_mug" in observation["objects"]
assert observation["robot"]["gripper"] == "open"
def test_serialize_restore_gives_identical_symbolic_state() -> None:
task = ToyTaskLibrary().get_by_id("toy_put_red_mug_in_blue_bowl")
sim = ToyBackend()
sim.seed(123)
sim.reset_task(task)
state_blob = sim.serialize_state()
expected = sim.get_symbolic_state()
sim.execute_action_chunk(ActionChunk.single("push", object="red_mug", dx=0.2, dy=0.0))
sim.restore_state(state_blob)
assert sim.get_symbolic_state() == expected
def test_same_action_from_same_restored_state_is_deterministic() -> None:
task = ToyTaskLibrary().get_by_id("toy_push_cube_to_target_zone")
sim = ToyBackend()
sim.seed(17)
sim.reset_task(task)
state_blob = sim.serialize_state()
action = ActionChunk.single("push", object="cube", dx=0.1, dy=0.2)
first = sim.execute_action_chunk(action)
sim.restore_state(state_blob)
second = sim.execute_action_chunk(action)
assert first.after_state == second.after_state
assert first.observation == second.observation
assert first.contacts == second.contacts
assert first.reward == second.reward
def test_predicate_success_after_toy_actions() -> None:
task = ToyTaskLibrary().get_by_id("toy_put_red_mug_in_blue_bowl")
sim = ToyBackend()
sim.seed(4)
sim.reset_task(task)
result = sim.execute_action_chunk(
ActionChunk(
[
{"command": "move_to", "object": "red_mug"},
{"command": "grasp", "object": "red_mug"},
{
"command": "place_at",
"object": "red_mug",
"container": "blue_bowl",
"relation": "inside",
},
]
)
)
assert evaluate_task_success(task, sim.get_symbolic_state())
assert result.info["success"] is True
assert result.reward == 1.0
def test_registry_toy_backend_works() -> None:
assert isinstance(get_simulator_backend("toy"), ToyBackend)