vla / tests /test_intervention_sampler.py
anhtld's picture
Initial commit: DoVLA-CIL codebase (h=16 breakthrough) (part 2)
20c251e verified
Raw
History Blame Contribute Delete
3.16 kB
from __future__ import annotations
from dovla_cil.interventions.samplers import InterventionSampler, RandomInterventionSampler
from dovla_cil.sim.registry import get_simulator_backend
from dovla_cil.tasks.library import ToyTaskLibrary
def test_sampler_returns_exactly_k_or_less_when_impossible() -> None:
task = ToyTaskLibrary().get_by_id("toy_pick_object_among_distractors")
sim = get_simulator_backend("toy")
sim.seed(3)
sim.reset_task(task)
expert = RandomInterventionSampler(k=1, seed=3).sample(sim.render_observation(), task)[0].action
actions = InterventionSampler(seed=9).sample(
task=task,
observation=sim.render_observation(),
symbolic_state=sim.get_symbolic_state(),
expert_actions=[expert],
k=6,
)
assert len(actions) == 6
assert len({action.action_id for action in actions}) == len(actions)
def test_sampler_candidate_metadata_and_determinism() -> None:
task = ToyTaskLibrary().get_by_id("toy_put_red_mug_in_blue_bowl")
sim = get_simulator_backend("toy")
sim.seed(5)
sim.reset_task(task)
expert = RandomInterventionSampler(k=1, seed=5).sample(sim.render_observation(), task)[0].action
first = InterventionSampler(seed=11).sample(
task, sim.render_observation(), sim.get_symbolic_state(), [expert], 8
)
second = InterventionSampler(seed=11).sample(
task, sim.render_observation(), sim.get_symbolic_state(), [expert], 8
)
assert [action.to_dict() for action in first] == [action.to_dict() for action in second]
for action in first:
assert "candidate_type" in action.metadata
assert "intended_target" in action.metadata
assert "intended_relation" in action.metadata
assert "difficulty" in action.metadata
def test_wrong_target_actions_use_distractors_if_present() -> None:
task = ToyTaskLibrary().get_by_id("toy_pick_object_among_distractors")
sim = get_simulator_backend("toy")
sim.seed(7)
sim.reset_task(task)
actions = InterventionSampler(seed=7).sample(
task,
sim.render_observation(),
sim.get_symbolic_state(),
[],
8,
)
wrong_targets = [
action.metadata["intended_target"]
for action in actions
if action.metadata.get("candidate_type") == "wrong_target"
]
assert wrong_targets
assert set(wrong_targets).issubset(set(task.distractor_object_ids))
def test_near_miss_actions_differ_from_expert() -> None:
task = ToyTaskLibrary().get_by_id("toy_put_red_mug_in_blue_bowl")
sim = get_simulator_backend("toy")
sim.seed(13)
sim.reset_task(task)
expert = RandomInterventionSampler(k=1, seed=13).sample(
sim.render_observation(), task
)[0].action
actions = InterventionSampler(seed=13).sample(
task,
sim.render_observation(),
sim.get_symbolic_state(),
[expert],
8,
)
near_misses = [
action for action in actions if action.metadata.get("candidate_type") == "near_miss"
]
assert near_misses
assert all(action.values != expert.values for action in near_misses)