def test_clarify_objects__no_proper_answer__returns_wait_for_response_state(
         self):
     entities = [(EntityType.LOCATION, "blue"),
                 (EntityType.LOCATION, "cover"),
                 (EntityType.OBJECT, "next"),
                 (EntityType.LOCATION, "black"),
                 (EntityType.OBJECT, "bottom cover"),
                 (EntityType.LOCATION, "above"),
                 (EntityType.OBJECT, "bottom cover")]
     grounding_return = GroundingReturn()
     grounding_return.is_success = True
     base_task = Task(name="Dummy name")
     base_task.task_type = TaskType.PICK
     task_grounding_return = TaskGroundingReturn()
     task_grounding_return.task_info.append(base_task)
     self.container.ner.get_entities = Mock(return_value=entities)
     self.container.grounding.find_object = Mock(
         return_value=grounding_return)
     clarify_objects_state = dialog_flow.ClarifyObjects(
         self.state_dict, self.container)
     clarify_objects_state.state_dict["base_task"] = base_task
     clarify_objects_state.state_dict[
         "task_grounding_return"] = task_grounding_return
     clarify_objects_state.is_first_run = False
     self.container.speak = Mock()
     return_state = clarify_objects_state.execute()
     self.assertTrue(
         isinstance(return_state, dialog_flow.WaitForResponseState))
 def test_clarify_objects__cant_find_no_restart_request_grounding_fail_new_error__returns_clarify_state(
         self):
     entities = [(EntityType.LOCATION, "blue"),
                 (EntityType.LOCATION, "cover"),
                 (EntityType.OBJECT, "next"),
                 (EntityType.LOCATION, "black"),
                 (EntityType.OBJECT, "bottom cover"),
                 (EntityType.LOCATION, "above"),
                 (EntityType.OBJECT, "bottom cover")]
     grounding_return = GroundingReturn()
     grounding_return.is_success = False
     grounding_return.error_code = GroundingErrorType.ALREADY_KNOWN
     self.container.ner.get_entities = Mock(return_value=entities)
     self.container.grounding.find_object = Mock(
         return_value=grounding_return)
     clarify_objects_state = dialog_flow.ClarifyObjects(
         self.state_dict, self.container)
     base_task = Task(name="Dummy name")
     dummy_object = ObjectEntity(name="dummy")
     base_task.objects_to_execute_on.append(dummy_object)
     base_task.task_type = TaskType.PICK
     task_grounding_return = TaskGroundingReturn()
     task_grounding_return.task_info.append(base_task)
     clarify_objects_state.state_dict["base_task"] = base_task
     clarify_objects_state.state_dict[
         "task_grounding_return"] = task_grounding_return
     clarify_objects_state.error = GroundingErrorType.CANT_FIND
     clarify_objects_state.is_first_run = False
     self.container.speak = Mock()
     return_state = clarify_objects_state.execute()
     self.assertTrue(isinstance(return_state, dialog_flow.ClarifyObjects))
 def test_perform_task__succeeds_to_perform_task__returns_perform_task_state(
         self):
     grounding_return = GroundingReturn()
     grounding_return.is_success = True
     grounding_return.object_infos.append("dummy")
     self.container.speak = Mock()
     self.container.robot.move_out_of_view = Mock()
     self.container.camera.get_image = Mock()
     self.container.camera.get_depth = Mock()
     self.container.grounding.find_object = Mock(
         return_value=grounding_return)
     self.container.robot.pick_up = Mock(return_value=True)
     perform_task_state = dialog_flow.PerformTaskState(
         self.state_dict, self.container)
     base_task = Task(name="Dummy name")
     dummy_object = ObjectEntity(name="dummy")
     base_task.objects_to_execute_on.append(dummy_object)
     base_task.task_type = TaskType.PICK
     task_grounding_return = TaskGroundingReturn()
     task_grounding_return.task_info.append(base_task)
     perform_task_state.state_dict["base_task"] = base_task
     perform_task_state.state_dict[
         "task_grounding_return"] = task_grounding_return
     return_state = perform_task_state.execute()
     self.assertTrue(isinstance(return_state, dialog_flow.PerformTaskState))
Esempio n. 4
0
    def test_add_entities_to_task__objects_in_entity_list__adds_object_to_task(self):
        entities = [
            (EntityType.COLOUR, "blue"),
            (EntityType.OBJECT, "cover")
        ]
        self.ner_mock.get_entities = Mock(return_value=entities)
        task = Task("pick")
        task.task_type = TaskType.PICK
        self.cmd_builder.add_entities_to_task(task, "Dummy sentence")

        self.assertEqual("blue cover", task.objects_to_execute_on[0].name)
    def test_get_specific_task_from_task__task_is_custom_task__returns_list_of_primary_skills(self):
        pick_up_task = Task("pick up")
        pick_up_task.task_type = TaskType.PICK
        pick_up_task.objects_to_execute_on = [ObjectEntity()]
        move_task = Task("pick up")
        move_task.task_type = TaskType.MOVE
        move_task.objects_to_execute_on = [ObjectEntity()]
        place_task = Task("pick up")
        place_task.task_type = TaskType.PICK
        place_task.objects_to_execute_on = [ObjectEntity()]
        sub_tasks = [[1, 2, 3], ["pick up", "move", "place"], [pick_up_task, move_task, place_task]]
        tasks = [TaskType.PICK, TaskType.MOVE, TaskType.PLACE]
        self.db_mock.get_task = Mock(return_value=(1, "clear table"))
        self.db_mock.get_sub_tasks = Mock(return_value=sub_tasks)
        task = Task("tidy")

        returned = self.task_grounding.get_specific_task_from_task(task)

        returned_tasks = [returned.task_info[0].task_type,
                          returned.task_info[1].task_type,
                          returned.task_info[2].task_type]

        self.assertEqual(tasks, returned_tasks)
 def task_switch(self, task_id, task_name, task: Task):
     tasks = []
     if task_name is None:
         return None, self.unknown_task_error(task.name)
     elif task_name == "pick up":  # Check the default skills first.
         task.task_type = TaskType.PICK
         tasks.append(task)
         if len(task.objects_to_execute_on) == 0:
             error = self.missing_entities_error(task.name)
             return tasks, error
     elif task_name == "find":
         task.task_type = TaskType.FIND
         tasks.append(task)
         if len(task.objects_to_execute_on) == 0:
             error = self.missing_entities_error(task.name)
             return tasks, error
     elif task_name == "move":
         task.task_type = TaskType.MOVE
         tasks.append(task)
         if len(task.objects_to_execute_on) == 0:
             error = self.missing_entities_error(task.name)
             return tasks, error
     elif task_name == "place":
         task.task_type = TaskType.PLACE
         tasks.append(task)
         if len(task.objects_to_execute_on) == 0:
             error = self.missing_entities_error(task.name)
             return tasks, error
     else:
         sub_tasks = self.db.get_sub_tasks(task_id)
         if sub_tasks is None:
             error = TaskGroundingError()
             error.error_task_name = task_name
             error.error_code = TaskErrorType.NO_SUBTASKS
             return None, error
         tasks = self.handle_custom_task(sub_tasks)
     return tasks, None
 def test_clarify_objects__first_run_cant_find_object__returns_wait_response_state(
         self):
     clarify_objects_state = dialog_flow.ClarifyObjects(
         self.state_dict, self.container)
     clarify_objects_state.error = GroundingErrorType.CANT_FIND
     self.container.speak = Mock()
     base_task = Task(name="Dummy name")
     dummy_object = ObjectEntity(name="dummy")
     base_task.objects_to_execute_on.append(dummy_object)
     base_task.task_type = TaskType.PICK
     task_grounding_return = TaskGroundingReturn()
     task_grounding_return.task_info.append(base_task)
     clarify_objects_state.state_dict["base_task"] = base_task
     clarify_objects_state.state_dict[
         "task_grounding_return"] = task_grounding_return
     return_state = clarify_objects_state.execute()
     self.assertTrue(
         isinstance(return_state, dialog_flow.WaitForResponseState))
Esempio n. 8
0
    def test_add_entities_to_task__sub_task_in_entity_list__adds_subtask_to_task(self):
        entities = [
            (EntityType.TASK, "place"),
            (EntityType.COLOUR, "blue"),
            (EntityType.OBJECT, "cover"),
            (EntityType.LOCATION, "next"),
            (EntityType.COLOUR, "white"),
            (EntityType.OBJECT, "cover"),
            (EntityType.LOCATION, "top left corner"),
            (EntityType.OBJECT, "table")
        ]
        self.ner_mock.get_entities = Mock(return_value=entities)
        task = Task("pick")
        task.task_type = TaskType.PICK
        self.cmd_builder.add_entities_to_task(task, "Dummy sentence")

        self.assertEqual("place", task.child_tasks[0].name)
        self.assertEqual("white cover", task.child_tasks[0].objects_to_execute_on[0].spatial_descriptions[0].object_entity.name)
        self.assertEqual("top left corner", task.child_tasks[0].objects_to_execute_on[0].spatial_descriptions[1].object_entity.name)