def testParallel_AllSucceed_Failure(self): """Can we visit a failing parallel (all succeed)? """ tree = owyl.parallel(owyl.sequence(owyl.succeed(), owyl.fail()), owyl.sequence(owyl.succeed(), owyl.succeed()), policy=owyl.PARALLEL_SUCCESS.REQUIRE_ALL) v = owyl.visit(tree) results = [x for x in v if x is not None] self.assertEqual(results, [False])
def testVisitSequenceSuccess(self): """Can we visit a successful sequence? """ tree = owyl.sequence(owyl.succeed(), owyl.succeed(), owyl.succeed()) v = owyl.visit(tree) results = [x for x in v if x is not None] self.assertEqual(results, [True, True, True, True]) v = owyl.visit(tree) results = [x for x in v if x is not None] self.assertEqual(results, [True, True, True, True])
def testVisitSequenceFailure(self): """Can we visit a failing sequence? """ tree = owyl.sequence(owyl.succeed(), owyl.succeed(), owyl.fail(), owyl.succeed()) v = owyl.visit(tree) results = [x for x in v if x is not None] self.assertEqual(results, [True, True, False, False]) v = owyl.visit(tree) results = [x for x in v if x is not None] self.assertEqual(results, [True, True, False, False])
def testParallel_OneSucceeds_Success(self): """Can we visit a suceeding parallel (one succeeds)? """ tree = owyl.parallel(owyl.sequence(owyl.succeed(), owyl.succeed()), owyl.sequence(owyl.succeed(), owyl.fail()), policy=owyl.PARALLEL_SUCCESS.REQUIRE_ONE) v = owyl.visit(tree) results = [x for x in v if x is not None] self.assertEqual(results, [True]) v = owyl.visit(tree) results = [x for x in v if x is not None] self.assertEqual(results, [True])
def interact_with_people(self) : tree = owyl.sequence( self.is_face_target(), owyl.selector( ##### Start A New Interaction ##### owyl.sequence( owyl.selector( self.is_not_interacting_with_someone(), owyl.sequence( self.is_more_than_one_face_target(), self.is_time_to_change_face_target() ) ), self.select_a_face_target(), self.record_start_time(variable="interact_with_face_target_since"), self.interact_with_face_target(id="current_face_target", new_face=False) ), ##### Glance At Other Faces & Continue With The Last Interaction ##### owyl.sequence( self.print_status(str="----- Continue interaction"), owyl.selector( owyl.sequence( self.is_more_than_one_face_target(), self.dice_roll(event="group_interaction"), self.select_a_glance_target(), self.glance_at(id="current_glance_target") ), owyl.succeed() ), self.interact_with_face_target(id="current_face_target", new_face=False) ) ) ) return tree
def someone_left(self) : tree = owyl.sequence( self.is_someone_left(), owyl.selector( ##### Was Interacting With That Person ##### owyl.sequence( self.was_interacting_with_that_person(), self.return_to_neutral_position(trigger="someone_left"), self.show_frustrated_expression(trigger="someone_left") ), ##### Is Interacting With Someone Else ##### owyl.sequence( self.is_interacting_with_someone(), self.dice_roll(event="glance_lost_face"), self.glance_at_lost_face(trigger="someone_left") ), ##### Does Nothing ##### owyl.sequence( self.print_status(str="----- Ignoring the lost face!"), self.log(behavior="ignore_face", trigger="someone_left"), owyl.succeed() ) ), self.clear_lost_face_target() ) return tree
def someone_arrived(self) : tree = owyl.sequence( self.is_someone_arrived(), owyl.selector( ##### There previously were no people in the scene ##### owyl.sequence( self.were_no_people_in_the_scene(), self.assign_face_target(variable="current_face_target", value="new_face"), self.record_start_time(variable="interact_with_face_target_since"), self.show_expression(emo_class="new_arrival_emotions", trigger="someone_arrived"), self.interact_with_face_target(id="current_face_target", new_face=True, trigger="someone_arrived") ), ##### Currently interacting with someone ##### owyl.sequence( self.is_interacting_with_someone(), self.dice_roll(event="glance_new_face"), self.glance_at_new_face(trigger="someone_arrived") ), ##### Does Nothing ##### owyl.sequence( self.print_status(str="----- Ignoring the new face!"), self.log(behavior="ignore_face", trigger="someone_arrived"), owyl.succeed() ) ), self.clear_new_face_target() ) return tree
def testThrow(self): """Can we throw an exception within the tree? """ tree = owyl.sequence( owyl.succeed(), owyl.succeed(), owyl.throw(throws=ValueError, throws_message="AUGH!!"), ) v = owyl.visit(tree) self.assertEqual(v.next(), True) self.assertEqual(v.next(), True) self.assertRaises(ValueError, v.next) v = owyl.visit(tree) self.assertEqual(v.next(), True) self.assertEqual(v.next(), True) self.assertRaises(ValueError, v.next)
def testThrow(self): """Can we throw an exception within the tree? """ tree = owyl.sequence(owyl.succeed(), owyl.succeed(), owyl.throw(throws=ValueError, throws_message="AUGH!!"), ) v = owyl.visit(tree) self.assertEqual(v.next(), True) self.assertEqual(v.next(), True) self.assertRaises(ValueError, v.next) v = owyl.visit(tree) self.assertEqual(v.next(), True) self.assertEqual(v.next(), True) self.assertRaises(ValueError, v.next)
def testCatch(self): """Can we catch an exception thrown within the tree? """ tree = owyl.sequence( owyl.succeed(), owyl.succeed(), owyl.catch(owyl.throw(throws=ValueError, throws_message="AUGH!!"), caught=ValueError, branch=owyl.succeed())) v = owyl.visit(tree) self.assertEqual(v.next(), True) self.assertEqual(v.next(), True) self.assertEqual(v.next(), True) v = owyl.visit(tree) self.assertEqual(v.next(), True) self.assertEqual(v.next(), True) self.assertEqual(v.next(), True)
def testCatchIgnoresOthers(self): """Does catch ignore other exceptions thrown within the tree? """ tree = owyl.sequence( owyl.succeed(), owyl.succeed(), owyl.catch(owyl.throw(throws=ValueError, throws_message="AUGH!!"), caught=IndexError, branch=owyl.succeed())) v = owyl.visit(tree) self.assertEqual(v.next(), True) self.assertEqual(v.next(), True) self.assertRaises(ValueError, v.next) v = owyl.visit(tree) self.assertEqual(v.next(), True) self.assertEqual(v.next(), True) self.assertRaises(ValueError, v.next)
def testStructure(self): tree = owyl.sequence(owyl.succeed(), owyl.fail()) viztree = OwylTree(tree) structure = truncate(viztree.get_structure(), ['name', 'children']) self.assertEquals(structure, {'name': 'sequence', 'children': [{'name': 'succeed', 'children': []}, {'name': 'fail', 'children': []}]})
def testCatch(self): """Can we catch an exception thrown within the tree? """ tree = owyl.sequence(owyl.succeed(), owyl.succeed(), owyl.catch(owyl.throw(throws=ValueError, throws_message="AUGH!!"), caught=ValueError, branch=owyl.succeed()) ) v = owyl.visit(tree) self.assertEqual(v.next(), True) self.assertEqual(v.next(), True) self.assertEqual(v.next(), True) v = owyl.visit(tree) self.assertEqual(v.next(), True) self.assertEqual(v.next(), True) self.assertEqual(v.next(), True)
def testCatchIgnoresOthers(self): """Does catch ignore other exceptions thrown within the tree? """ tree = owyl.sequence(owyl.succeed(), owyl.succeed(), owyl.catch(owyl.throw(throws=ValueError, throws_message="AUGH!!"), caught=IndexError, branch=owyl.succeed()) ) v = owyl.visit(tree) self.assertEqual(v.next(), True) self.assertEqual(v.next(), True) self.assertRaises(ValueError, v.next) v = owyl.visit(tree) self.assertEqual(v.next(), True) self.assertEqual(v.next(), True) self.assertRaises(ValueError, v.next)
def interact_with_people(self) : tree = owyl.sequence( self.is_face_target(), owyl.selector( ##### Start A New Interaction ##### owyl.sequence( owyl.selector( self.is_not_interacting_with_someone(), owyl.sequence( self.is_more_than_one_face_target(), self.is_time_to_change_face_target() ) ), self.select_a_face_target(), self.record_start_time(variable="interact_with_face_target_since"), self.interact_with_face_target(id="current_face_target", new_face=False, trigger="people_in_scene") ), ##### Glance At Other Faces & Continue With The Last Interaction ##### owyl.sequence( self.print_status(str="----- Continue interaction"), owyl.selector( owyl.sequence( self.is_more_than_one_face_target(), self.dice_roll(event="group_interaction"), self.select_a_glance_target(), self.glance_at(id="current_glance_target", trigger="people_in_scene") ), owyl.succeed() ), self.interact_with_face_target(id="current_face_target", new_face=False, trigger="people_in_scene"), owyl.selector( owyl.sequence( self.dice_roll(event="face_study_saccade"), self.face_study_saccade(id="current_face_target", trigger="people_in_scene") ), owyl.succeed() ) ) ) ) return tree
def testSucceed(self): """Can we succeed? """ s = owyl.succeed() t = s() self.assertEqual(t.next(), True) self.assertRaises(StopIteration, t.next) t = s() self.assertEqual(t.next(), True) self.assertRaises(StopIteration, t.next)
def testYieldHookSmallTree(self): tree = owyl.sequence(owyl.succeed(), owyl.fail()) viztree = OwylTree(tree) structure = viztree.get_structure() mock = Mock() viztree.on_yield += [mock] tree = viztree.tree_with_hooks [x for x in owyl.visit(tree)] mock.assert_has_calls([call(structure['children'][0]['id'], True), call(structure['children'][1]['id'], False), call(structure['id'], False)])
def testVisitSelectorSuccess(self): """Can we visit a successful selector? """ tree = owyl.selector(owyl.fail(), owyl.fail(), owyl.succeed(), owyl.fail()) v = owyl.visit(tree) results = [x for x in v if x is not None] self.assertEqual(results, [False, False, True, True]) v = owyl.visit(tree) results = [x for x in v if x is not None] self.assertEqual(results, [False, False, True, True])
def testParallel_DelayedFailure(self): """Can parallel fail if child fails later (all succeed)? """ # Fail after 5 iterations. after = 5 tree = owyl.parallel(owyl.succeed(), owyl.failAfter(after=after), policy=owyl.PARALLEL_SUCCESS.REQUIRE_ALL) v = owyl.visit(tree) results = [x for x in v if x is not None] self.assertEqual(results, [False]) v = owyl.visit(tree) results = [x for x in v if x is not None] self.assertEqual(results, [False])