def test_assign(self): a = Assignment.create_from_string( 'blabla=3 ^ !bloblo^TTT=32.4 ^v=[0.4,0.6] ^ final') assert len(a.get_variables()) == 5 assert a.get_variables() == {'blabla', 'bloblo', 'TTT', 'v', 'final'} assert a.get_value('blabla') == ValueFactory.create('3') assert a.get_value('bloblo') == ValueFactory.create(False) assert a.get_value('TTT') == ValueFactory.create('32.4') assert a.get_value('v') == ValueFactory.create([0.4, 0.6]) assert a.get_value('final') == ValueFactory.create(True)
def test_real_function(self): # def add(*x): # return ValueFactory.create(sum([float(item) for item in x])) # # def substract(*x): # return ValueFactory.create(value=float(x[0]) - sum([float(item) for item in x[1:]])) # Settings.add_function("add", lambda *x: ValueFactory.create(sum([float(item) for item in x]))) Settings.add_function("substract", lambda *x: ValueFactory.create(float(x[0]) - sum([float(item) for item in x[1:]]))) t = Template.create("add({X},{Y})") assert t.fill_slots(Assignment.create_from_string("X=1 ^ Y=2")) == "3" t = Template.create("add(4,{Y},{Z})") assert t.fill_slots(Assignment.create_from_string("Z=3 ^ Y=2")) == "9" t = Template.create("add(4,2)") assert t.fill_slots(Assignment.create_from_string("Z=3 ^ Y=2")) == "6" t = Template.create("add(substract({X},{Y}),{Z})") assert isinstance(t, FunctionalTemplate) assert t.fill_slots(Assignment.create_from_string("X=3 ^ Y=1 ^ Z=2")) == "4" t = Template.create("add(substract({X},{Y}),substract({Z}, {A}))") assert isinstance(t, FunctionalTemplate) assert t.fill_slots(Assignment.create_from_string("X=3 ^ Y=1 ^ Z=4 ^ A=2")) == "4"
def extract_dialogue(data_file): """ Extracts the dialogue specified in the data file. The result is a list of dialogue state (one for each turn). :param data_file: the XML file containing the turns :return: the list of dialogue state """ doc = XMLUtils.get_xml_document(data_file) main_node = XMLUtils.get_main_node(doc) f = open(data_file) root_path = f.name sample = [] for node in main_node: node_name = node.keys()[0] if "Turn" in node_name: state = DialogueState( XMLStateReader.get_bayesian_network(node)) sample.append(state) if node_name == "systemTurn" and state.has_chance_node("a_m"): assign = Assignment("a_m", state.query_prob("a_m").get_best()) state.add_evidence(assign) elif node_name == "wiazard": assign = Assignment.create_from_string( node.get_first_child().get_node_value().trim()) sample[-1].add_evidence(assign) elif node_name == "import": file_name = main_node.get_attributes().get_named_item( "href").get_node_value() points = XMLDialogueReader.extract_dialogue(root_path + "/" + file_name) sample.append(points) return sample
def test_functions(self): t = Template.create("{X}+{Y}") assert t.fill_slots(Assignment.create_from_string("X=1 ^ Y=2")) == "3" assert t.fill_slots(Assignment.create_from_string("X=[1,2] ^ Y=4")) == "[1, 2, 4]" t = Template.create("{X}-{Y}") assert t.fill_slots(Assignment.create_from_string("X=[1,2] ^ Y=2")) == "[1]"