def test_yaml_scenario_one_event_two_actions(): events = [ DcopEvent( "1", actions=[ EventAction("remove_agent", agent="a01"), EventAction("remove_agent", agent="a05"), ], ) ] scenario = Scenario(events) scenario_str = yaml_scenario(scenario) obtained = load_scenario(scenario_str) assert len(obtained.events) == 1 assert len(obtained.events[0].actions) == 2 assert obtained.events[0].actions[1].type == "remove_agent" assert obtained.events[0].actions[1].args["agent"] == "a05"
def test_yaml_scenario_two_events(): events = [ DcopEvent( "1", actions=[ EventAction("remove_agent", agent="a01"), EventAction("remove_agent", agent="a05"), ], ), DcopEvent("2", delay=30), ] scenario = Scenario(events) scenario_str = yaml_scenario(scenario) obtained = load_scenario(scenario_str) assert len(obtained.events) == 2 assert obtained.events[1].is_delay assert not obtained.events[0].is_delay
def test_yaml_scenario_one_event(): events = [ DcopEvent("1", actions=[EventAction("remove_agent", agent="a01")]) ] scenario = Scenario(events) scenario_str = yaml_scenario(scenario) obtained = load_scenario(scenario_str) assert len(obtained.events) == 1 assert len(obtained.events[0].actions) == 1
def load_scenario(scenario_str) -> Scenario: """ Load a scenario from a yaml string. :param scenario_str: :return: """ loaded = yaml.load(scenario_str, Loader=yaml.FullLoader) evts = [] for evt in loaded["events"]: id_evt = evt["id"] if "actions" in evt: actions = [] for a in evt["actions"]: args = dict(a) args.pop("type") actions.append(EventAction(a["type"], **args)) evts.append(DcopEvent(id_evt, actions=actions)) elif "delay" in evt: evts.append(DcopEvent(id_evt, delay=evt["delay"])) return Scenario(evts)
def generate_scenario(evts_count, actions_count, delay, initial_delay, end_delay, agents) -> Scenario: agents = set(agents) events: List[DcopEvent] = [] events.append(generate_delay("init", initial_delay)) for i in range(evts_count): removed_agents = random.sample(agents, actions_count) agents.difference_update(removed_agents) actions = [ EventAction("remove_agent", agent=agent) for agent in removed_agents ] events.append(DcopEvent(f"e{i}", actions=actions)) if i != evts_count - 1: events.append(generate_delay(f"d{i}", delay)) events.append(generate_delay("end", end_delay)) return Scenario(events)
def load_scenario(scenario_str) -> Scenario: """ Load a scenario from a yaml string. :param scenario_str: :return: """ loaded = yaml.load(scenario_str) evts = [] for evt in loaded['events']: id = evt['id'] if 'actions' in evt: actions = [] for a in evt['actions']: type = a['type'] args = dict(a) args.pop('type') actions.append(EventAction(a['type'], **args)) evts.append(DcopEvent(id, actions=actions)) elif 'delay' in evt: evts.append(DcopEvent(id, delay=evt['delay'])) return Scenario(evts)