def test_encompasses(self): template_1 = Template([self.slot_x, self.a, self.slot_y]) template_2 = Template([self.slot_x, self.a, self.b]) template_3 = Template([self.c, self.a, self.b]) template_4 = Template([self.slot_z, self.a, self.b]) self.assertTrue( template_1.encompasses( template_1, SlotValues({ self.slot_x: [Template([self.slot_x])], self.slot_y: [Template([self.slot_y])], }), )) self.assertTrue( template_1.encompasses( template_2, SlotValues({ self.slot_x: [Template([self.slot_x])], self.slot_y: [Template([self.b])], }), )) self.assertTrue( template_1.encompasses( template_3, SlotValues({ self.slot_x: [Template([self.c])], self.slot_y: [Template([self.b])], }), )) self.assertTrue( template_1.encompasses( template_4, SlotValues({ self.slot_x: [Template([self.slot_z])], self.slot_y: [Template([self.b])], }), )) self.assertFalse( template_1.encompasses( template_2, SlotValues({ self.slot_x: [Template([self.slot_x])], self.slot_y: [Template([self.a])], }), ))
def test_collapse_using_slot_values(self): hello = TemplateString("hello") hey = TemplateString("hey") world = TemplateString("world") universe = TemplateString("universe") h1 = TemplateTree(Template([hello, world])) h2 = TemplateTree(Template([hey, world])) h3 = TemplateTree(Template([hello, universe])) h4 = TemplateTree(Template([hey, universe])) slot_a = NamedTemplateSlot("A") slot_b = NamedTemplateSlot("B") slot_c = NamedTemplateSlot("C") expected = TemplateTree(Template([slot_a, slot_b]), [h1, h2, h3, h4]) expected_values = SlotValues( { slot_a: {Template([hello]), Template([hey])}, slot_b: {Template([world]), Template([universe])}, } ) # Test first argument hello_t = Template([hello, slot_b]) hello_tt = TemplateTree(hello_t, [h1, h3]) hey_t = Template([hey, slot_b]) hey_tt = TemplateTree(hey_t, [h2, h4]) greeting_t = Template([slot_a, slot_b]) greeting_tt = TemplateTree(greeting_t, [hello_tt, hey_tt]) self.assertTrue(greeting_t.encompasses(hey_t, expected_values)) self.assertTrue(greeting_t.encompasses(hello_t, expected_values)) self.assertFalse(hello_t.encompasses(greeting_t, expected_values)) self.assertEqual( expected_values, greeting_tt.calculated_merged_independent_slot_values() ) self.assertEqual( expected, greeting_tt.collapse_using_slot_values(expected_values) ) # Do same, but for second argument world_t = Template([slot_a, world]) world_tt = TemplateTree(world_t, [h1, h2]) universe_t = Template([slot_a, universe]) universe_tt = TemplateTree(universe_t, [h3, h4]) place_t = Template([slot_a, slot_b]) place_tt = TemplateTree(place_t, [world_tt, universe_tt]) self.assertEqual( expected_values, place_tt.calculated_merged_independent_slot_values() ) self.assertEqual(expected, place_tt.collapse_using_slot_values(expected_values)) # Test mix mix_tt = TemplateTree(place_t, [world_tt, hey_tt, h3]) self.assertEqual( expected_values, mix_tt.calculated_merged_independent_slot_values() ) self.assertEqual(expected, mix_tt.collapse_using_slot_values(expected_values)) # Now with some noise noise = Template([TemplateString("noise")]) noise_tt = TemplateTree(noise) noise_t = Template([slot_c]) full_noise_tt = TemplateTree(noise_t, [greeting_tt, noise_tt]) noise_values = SlotValues( { slot_a: {Template([hello]), Template([hey])}, slot_b: {Template([world]), Template([universe])}, slot_c: {Template([slot_a, slot_b]), noise}, } ) collapsed_full_noise = full_noise_tt.collapse_using_slot_values(noise_values) self.assertEqual( noise_values, full_noise_tt.calculated_merged_independent_slot_values(), ) self.assertEqual( TemplateTree(Template([slot_c]), [expected, noise_tt]), collapsed_full_noise, )