コード例 #1
0
ファイル: test_value.py プロジェクト: KAIST-AILab/PyOpenDial
    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)
コード例 #2
0
    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"
コード例 #3
0
    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
コード例 #4
0
 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]"