File size: 2,700 Bytes
20c251e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | 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)
|