Exemple #1
0
    def test_param_4(self):
        system = DialogueSystem(TestParameters.domain1)
        system.detach_module(ForwardPlanner)
        system.get_settings().show_gui = False
        system.start_system()

        rules = TestParameters.domain1.get_models()[1].get_rules()
        outputs = rules[0].get_output(Assignment("u_u", "my name is"))
        o = Effect(BasicEffect("u_u^p", "Pierre"))
        assert isinstance(outputs.get_parameter(o), SingleParameter)
        input = Assignment("theta_5", ValueFactory.create("[0.36, 0.24, 0.40]"))
        assert outputs.get_parameter(o).get_value(input) == pytest.approx(0.36, abs=0.01)

        system.get_state().remove_nodes(system.get_state().get_action_node_ids())
        system.get_state().remove_nodes(system.get_state().get_utility_node_ids())
        system.add_content("u_u", "my name is")

        system.get_state().remove_nodes(system.get_state().get_action_node_ids())
        system.get_state().remove_nodes(system.get_state().get_utility_node_ids())
        system.add_content("u_u", "Pierre")

        system.get_state().remove_nodes(system.get_state().get_action_node_ids())
        system.get_state().remove_nodes(system.get_state().get_utility_node_ids())
        system.add_content("u_u", "my name is")

        system.get_state().remove_nodes(system.get_state().get_action_node_ids())
        system.get_state().remove_nodes(system.get_state().get_utility_node_ids())
        system.add_content("u_u", "Pierre")

        assert system.get_state().query_prob("theta_5").to_continuous().get_function().get_mean()[0] == pytest.approx(0.3, abs=0.12)
    def test_IS2013(self):
        domain = XMLDomainReader.extract_domain(TestLearning.domain_file)
        params = XMLStateReader.extract_bayesian_network(TestLearning.parameters_file, "parameters")
        domain.set_parameters(params)
        system = DialogueSystem(domain)
        system.get_settings().show_gui = False
        system.detach_module(ForwardPlanner)
        Settings.nr_samples = Settings.nr_samples * 3
        Settings.max_sampling_time = Settings.max_sampling_time * 10
        system.start_system()

        init_mean = system.get_content("theta_1").to_continuous().get_function().get_mean()

        builder = CategoricalTableBuilder("a_u")
        builder.add_row("Move(Left)", 1.0)
        builder.add_row("Move(Right)", 0.0)
        builder.add_row("None", 0.0)
        system.add_content(builder.build())
        system.get_state().remove_nodes(system.get_state().get_utility_node_ids())
        system.get_state().remove_nodes(system.get_state().get_action_node_ids())

        after_mean = system.get_content("theta_1").to_continuous().get_function().get_mean()

        assert after_mean[0] - init_mean[0] > 0.04
        assert after_mean[1] - init_mean[1] < 0.04
        assert after_mean[2] - init_mean[2] < 0.04
        assert after_mean[3] - init_mean[3] < 0.04
        assert after_mean[4] - init_mean[4] < 0.04
        assert after_mean[5] - init_mean[5] < 0.04
        assert after_mean[6] - init_mean[6] < 0.04
        assert after_mean[7] - init_mean[7] < 0.04

        Settings.nr_samples = int(Settings.nr_samples / 3)
        Settings.max_sampling_time = Settings.max_sampling_time / 10
Exemple #3
0
    def test_3(self):
        system = DialogueSystem(TestRule2.domain)
        system.get_settings().show_gui = False
        system.detach_module(ForwardPlanner)
        eq_factor = EquivalenceDistribution.none_prob
        EquivalenceDistribution.none_prob = 0.1
        old_prune_threshold = StatePruner.value_pruning_threshold
        StatePruner.value_pruning_threshold = 0.0
        system.start_system()

        TestRule2.inference.check_util(system.get_state(), "a_m'", "Do(A)",
                                       0.6)
        TestRule2.inference.check_util(system.get_state(), "a_m'", "Do(B)",
                                       -2.6)

        builder = CategoricalTableBuilder("a_u")
        builder.add_row("Ask(B)", 0.8)
        builder.add_row("None", 0.2)
        system.get_state().remove_nodes(
            system.get_state().get_action_node_ids())
        system.get_state().remove_nodes(
            system.get_state().get_utility_node_ids())
        system.add_content(builder.build())

        TestRule2.inference.check_util(system.get_state(), "a_m'", "Do(A)",
                                       -4.35)
        TestRule2.inference.check_util(system.get_state(), "a_m'", "Do(B)",
                                       2.357)

        EquivalenceDistribution.none_prob = eq_factor
        StatePruner.value_pruning_threshold = old_prune_threshold
    def test_state_copy(self):
        system = DialogueSystem(TestDialogueState.domain)
        system.detach_module(ForwardPlanner)
        StatePruner.enable_reduction = False

        system.get_settings().show_gui = False
        system.start_system()

        initial_state = copy(system.get_state())

        rule_id = ""
        for id in system.get_state().get_node("u_u2").get_output_node_ids():
            if str(system.get_content(id)).find("+=HowAreYou") != -1:
                rule_id = id

        TestDialogueState.inference.check_prob(
            initial_state, rule_id, Effect.parse_effect("a_u2+=HowAreYou"),
            0.9)
        TestDialogueState.inference.check_prob(initial_state, rule_id,
                                               Effect.parse_effect("Void"),
                                               0.1)

        TestDialogueState.inference.check_prob(initial_state, "a_u2",
                                               "[HowAreYou]", 0.2)
        TestDialogueState.inference.check_prob(initial_state, "a_u2",
                                               "[Greet, HowAreYou]", 0.7)
        TestDialogueState.inference.check_prob(initial_state, "a_u2", "[]",
                                               0.1)

        StatePruner.enable_reduction = True
Exemple #5
0
    def test_5(self):
        domain2 = XMLDomainReader.extract_domain(TestRule2.domain_file3)
        system2 = DialogueSystem(domain2)
        system2.detach_module(ForwardPlanner)
        system2.get_settings().show_gui = False
        system2.start_system()

        TestRule2.inference.check_util(
            system2.get_state(), ["a_ml'", "a_mg'", "a_md'"],
            Assignment([
                Assignment("a_ml'", "SayYes"),
                Assignment("a_mg'", "Nod"),
                Assignment("a_md'", "None")
            ]), 2.4)
        TestRule2.inference.check_util(
            system2.get_state(), ["a_ml'", "a_mg'", "a_md'"],
            Assignment([
                Assignment("a_ml'", "SayYes"),
                Assignment("a_mg'", "Nod"),
                Assignment("a_md'", "DanceAround")
            ]), -0.6)
        TestRule2.inference.check_util(
            system2.get_state(), ["a_ml'", "a_mg'", "a_md'"],
            Assignment([
                Assignment("a_ml'", "SayYes"),
                Assignment("a_mg'", "None"),
                Assignment("a_md'", "None")
            ]), 1.6)
Exemple #6
0
 def test_6(self):
     domain2 = XMLDomainReader.extract_domain(TestRule2.domain_file4)
     system2 = DialogueSystem(domain2)
     system2.detach_module(ForwardPlanner)
     system2.get_settings().show_gui = False
     system2.start_system()
     TestRule2.inference.check_prob(system2.get_state(), "A",
                                    ValueFactory.create("[a1,a2]"), 1.0)
     TestRule2.inference.check_prob(system2.get_state(), "a_u",
                                    "Request(ball)", 0.5)
Exemple #7
0
    def test_1(self):
        system = DialogueSystem(TestRule1.domain)
        system.detach_module(ForwardPlanner)
        StatePruner.enable_reduction = False
        system.get_settings().show_gui = False
        system.start_system()

        TestRule1.inference.check_prob(system.get_state(), "a_u", "Greeting",
                                       0.8)
        TestRule1.inference.check_prob(system.get_state(), "a_u", "None", 0.2)

        StatePruner.enable_reduction = True
Exemple #8
0
    def test_7(self):
        system = DialogueSystem(TestRule1.domain)
        system.detach_module(ForwardPlanner)
        StatePruner.enable_reduction = False
        system.get_settings().show_gui = False
        system.start_system()

        TestRule1.inference.check_prob(system.get_state(), "a_u2",
                                       "[Greet, HowAreYou]", 0.7)
        TestRule1.inference.check_prob(system.get_state(), "a_u2", "[]", 0.1)
        TestRule1.inference.check_prob(system.get_state(), "a_u2",
                                       "[HowAreYou]", 0.2)

        StatePruner.enable_reduction = True
Exemple #9
0
    def test_5(self):
        system = DialogueSystem(TestRule1.domain)
        system.detach_module(ForwardPlanner)
        StatePruner.enable_reduction = False
        system.get_settings().show_gui = False
        system.start_system()

        TestRule1.inference.check_prob(system.get_state(), "o2",
                                       "here is value1", 0.35)
        TestRule1.inference.check_prob(system.get_state(), "o2",
                                       "and value2 is over there", 0.07)
        TestRule1.inference.check_prob(system.get_state(), "o2",
                                       "value3, finally", 0.28)

        StatePruner.enable_reduction = True
Exemple #10
0
    def test_4(self):
        system = DialogueSystem(TestRule1.domain)
        system.detach_module(ForwardPlanner)
        StatePruner.enable_reduction = False
        system.get_settings().show_gui = False
        system.start_system()

        TestRule1.inference.check_prob(system.get_state(), "o",
                                       "and we have var1=value2", 0.3)
        TestRule1.inference.check_prob(system.get_state(), "o",
                                       "and we have localvar=value1", 0.2)
        TestRule1.inference.check_prob(system.get_state(), "o",
                                       "and we have localvar=value3", 0.28)

        StatePruner.enable_reduction = True
Exemple #11
0
    def test_1(self):
        system = DialogueSystem(TestRule2.domain)
        eq_factor = EquivalenceDistribution.none_prob
        EquivalenceDistribution.none_prob = 0.1
        old_prune_threshold = StatePruner.value_pruning_threshold
        StatePruner.value_pruning_threshold = 0.0

        system.get_settings().show_gui = False
        system.detach_module(ForwardPlanner)
        system.start_system()

        TestRule2.inference.check_prob(system.get_state(), "a_u^p", "Ask(A)",
                                       0.63)
        TestRule2.inference.check_prob(system.get_state(), "a_u^p", "Ask(B)",
                                       0.27)
        TestRule2.inference.check_prob(system.get_state(), "a_u^p", "None",
                                       0.1)

        builder = CategoricalTableBuilder("a_u")
        builder.add_row("Ask(B)", 0.8)
        builder.add_row("None", 0.2)

        system.get_state().remove_nodes(
            system.get_state().get_action_node_ids())
        system.get_state().remove_nodes(
            system.get_state().get_utility_node_ids())

        system.add_content(builder.build())

        TestRule2.inference.check_prob(system.get_state(), "i_u", "Want(A)",
                                       0.090)
        TestRule2.inference.check_prob(system.get_state(), "i_u", "Want(B)",
                                       0.91)

        TestRule2.inference.check_prob(system.get_state(), "a_u^p", "Ask(B)",
                                       0.91 * 0.9)
        TestRule2.inference.check_prob(system.get_state(), "a_u^p", "Ask(A)",
                                       0.09 * 0.9)
        TestRule2.inference.check_prob(system.get_state(), "a_u^p", "None",
                                       0.1)

        TestRule2.inference.check_prob(system.get_state(), "a_u", "Ask(B)",
                                       0.918)
        TestRule2.inference.check_prob(system.get_state(), "a_u", "None",
                                       0.081)

        EquivalenceDistribution.none_prob = eq_factor
        StatePruner.value_pruning_threshold = old_prune_threshold
Exemple #12
0
    def test_1(self):
        domain = XMLDomainReader.extract_domain(TestRule3.test1_domain_file)
        inference = InferenceChecks()
        inference.exact_threshold = 0.06
        system = DialogueSystem(domain)
        system.get_settings().show_gui = False
        system.detach_module(ForwardPlanner)
        StatePruner.enable_reduction = False
        system.start_system()

        inference.check_prob(system.get_state(), "found", "A", 0.7)

        inference.check_prob(system.get_state(), "found2", "D", 0.3)
        inference.check_prob(system.get_state(), "found2", "C", 0.5)

        StatePruner.enable_reduction = True
    def test_state_copy2(self):
        InferenceChecks.exact_threshold = 0.08

        system = DialogueSystem(TestDialogueState.domain)
        system.get_settings().show_gui = False
        system.detach_module(ForwardPlanner)
        system.start_system()

        initial_state = copy(system.get_state())

        TestDialogueState.inference.check_prob(initial_state, "a_u2",
                                               "[HowAreYou]", 0.2)
        TestDialogueState.inference.check_prob(initial_state, "a_u2",
                                               "[Greet, HowAreYou]", 0.7)
        TestDialogueState.inference.check_prob(initial_state, "a_u2", "[]",
                                               0.1)
Exemple #14
0
    def test_3(self):
        InferenceChecks.exact_threshold = 0.06

        system = DialogueSystem(TestRule1.domain)
        system.detach_module(ForwardPlanner)
        StatePruner.enable_reduction = False
        system.get_settings().show_gui = False
        system.start_system()

        TestRule1.inference.check_prob(system.get_state(), "direction",
                                       "straight", 0.79)
        TestRule1.inference.check_prob(system.get_state(), "direction", "left",
                                       0.20)
        TestRule1.inference.check_prob(system.get_state(), "direction",
                                       "right", 0.01)

        StatePruner.enable_reduction = True
Exemple #15
0
    def test_2(self):
        inference = InferenceChecks()

        domain = XMLDomainReader.extract_domain(TestRule3.test2_domain_file)
        system = DialogueSystem(domain)
        system.get_settings().show_gui = False

        system.detach_module(ForwardPlanner)
        StatePruner.enable_reduction = False
        system.start_system()

        inference.check_prob(system.get_state(), "graspable(obj1)", "True", 0.81)

        inference.check_prob(system.get_state(), "graspable(obj2)", "True", 0.16)
        inference.check_util(system.get_state(), "a_m'", "grasp(obj1)", 0.592)

        StatePruner.enable_reduction = True
Exemple #16
0
    def test_param_2(self):
        InferenceChecks.exact_threshold = 0.1

        system = DialogueSystem(TestParameters.domain1)
        system.detach_module(ForwardPlanner)
        system.get_settings().show_gui = False

        assert system.get_state().has_chance_node("theta_3")
        TestParameters.inference.check_cdf(system.get_state(), "theta_3", 0.6, 0.0)
        TestParameters.inference.check_cdf(system.get_state(), "theta_3", 0.8, 0.5)
        TestParameters.inference.check_cdf(system.get_state(), "theta_3", 0.95, 1.0)

        system.start_system()
        system.add_content("u_u", "brilliant")
        distrib = system.get_content("a_u")

        assert distrib.get_prob("approval") == pytest.approx(0.8, abs=0.05)
Exemple #17
0
    def test_2(self):
        system = DialogueSystem(TestRule2.domain)
        system.get_settings().show_gui = False
        system.detach_module(ForwardPlanner)
        eq_factor = EquivalenceDistribution.none_prob
        EquivalenceDistribution.none_prob = 0.1
        old_prune_threshold = StatePruner.value_pruning_threshold
        StatePruner.value_pruning_threshold = 0.0
        system.start_system()

        TestRule2.inference.check_prob(system.get_state(), "u_u2^p", "Do A",
                                       0.216)
        TestRule2.inference.check_prob(system.get_state(), "u_u2^p",
                                       "Please do C", 0.027)
        TestRule2.inference.check_prob(system.get_state(), "u_u2^p",
                                       "Could you do B?", 0.054)
        TestRule2.inference.check_prob(system.get_state(), "u_u2^p",
                                       "Could you do A?", 0.162)
        TestRule2.inference.check_prob(system.get_state(), "u_u2^p", "none",
                                       0.19)

        builder = CategoricalTableBuilder("u_u2")
        builder.add_row("Please do B", 0.4)
        builder.add_row("Do B", 0.4)

        system.get_state().remove_nodes(
            system.get_state().get_action_node_ids())
        system.get_state().remove_nodes(
            system.get_state().get_utility_node_ids())
        system.add_content(builder.build())

        TestRule2.inference.check_prob(system.get_state(), "i_u2", "Want(B)",
                                       0.654)
        TestRule2.inference.check_prob(system.get_state(), "i_u2", "Want(A)",
                                       0.1963)
        TestRule2.inference.check_prob(system.get_state(), "i_u2", "Want(C)",
                                       0.0327)
        TestRule2.inference.check_prob(system.get_state(), "i_u2", "none",
                                       0.1168)

        EquivalenceDistribution.none_prob = eq_factor
        StatePruner.value_pruning_threshold = old_prune_threshold
Exemple #18
0
    def test_param_1(self):
        InferenceChecks.exact_threshold = 0.1

        system = DialogueSystem(TestParameters.domain1)
        system.detach_module(ForwardPlanner)
        system.get_settings().show_gui = False
        assert system.get_state().has_chance_node("theta_1")
        TestParameters.inference.check_cdf(system.get_state(), "theta_1", 0.5, 0.5)
        TestParameters.inference.check_cdf(system.get_state(), "theta_1", 5., 0.99)

        TestParameters.inference.check_cdf(system.get_state(), "theta_2", 1., 0.07)
        TestParameters.inference.check_cdf(system.get_state(), "theta_2", 2., 0.5)

        system.start_system()
        system.add_content("u_u", "hello there")
        utils = ((SamplingAlgorithm()).query_util(system.get_state(), "u_m'"))
        assert utils.get_util(Assignment("u_m'", "yeah yeah talk to my hand")) > 0
        assert utils.get_util(Assignment("u_m'", "so interesting!")) > 1.7
        assert utils.get_util(Assignment("u_m'", "yeah yeah talk to my hand")) < utils.get_util(Assignment("u_m'", "so interesting!"))
        assert len(system.get_state().get_node_ids()) == 11
Exemple #19
0
    def test_6(self):
        InferenceChecks.exact_threshold = 0.06

        system = DialogueSystem(TestRule1.domain)
        system.detach_module(ForwardPlanner)
        system.get_settings().show_gui = False
        system.start_system()

        builder = CategoricalTableBuilder("var1")
        builder.add_row("value2", 0.9)
        system.add_content(builder.build())

        TestRule1.inference.check_prob(system.get_state(), "o",
                                       "and we have var1=value2", 0.9)
        TestRule1.inference.check_prob(system.get_state(), "o",
                                       "and we have localvar=value1", 0.05)
        TestRule1.inference.check_prob(system.get_state(), "o",
                                       "and we have localvar=value3", 0.04)

        StatePruner.enable_reduction = True
Exemple #20
0
    def test_param_5(self):
        system = DialogueSystem(TestParameters.domain2)
        system.detach_module(ForwardPlanner)
        system.get_settings().show_gui = False
        system.start_system()

        rules = TestParameters.domain2.get_models()[0].get_rules()
        outputs = rules[0].get_output(Assignment("u_u", "brilliant"))
        o = Effect(BasicEffect("a_u", "approval"))
        assert isinstance(outputs.get_parameter(o), ComplexParameter)
        input = Assignment([Assignment("theta_6", 2.1), Assignment("theta_7", 1.3)])
        assert outputs.get_parameter(o).get_value(input) == pytest.approx(0.74, abs=0.01)

        system.get_state().remove_nodes(system.get_state().get_action_node_ids())
        system.get_state().remove_nodes(system.get_state().get_utility_node_ids())
        system.add_content("u_u", "brilliant")

        assert system.get_state().query_prob("theta_6").to_continuous().get_function().get_mean()[0] == pytest.approx(1.0, abs=0.08)

        assert system.get_content("a_u").get_prob("approval") == pytest.approx(0.63, abs=0.08)
        assert system.get_content("a_u").get_prob("irony") == pytest.approx(0.3, abs=0.08)
Exemple #21
0
    def test_param1(self):
        domain = XMLDomainReader.extract_domain(TestDemo.domain_file)
        params = XMLStateReader.extract_bayesian_network(
            TestDemo.param_file, "parameters")
        domain.set_parameters(params)
        system = DialogueSystem(domain)
        system.get_settings().show_gui = False

        system.detach_module(ForwardPlanner)
        system.get_settings().show_gui = False

        system.start_system()
        system.add_content("a_m", "AskRepeat")

        t = CategoricalTableBuilder("a_u")
        t.add_row("DoA", 0.7)
        t.add_row("a_u", 0.2)
        t.add_row("a_u", 0.1)
        system.add_content(t.build())
        for i in range(3000):
            print((system.get_state().get_chance_node("theta").sample()
                   ).get_array()[0])
Exemple #22
0
    def test_4(self):
        domain2 = XMLDomainReader.extract_domain(TestRule2.domain_file2)
        system2 = DialogueSystem(domain2)
        system2.get_settings().show_gui = False
        system2.detach_module(ForwardPlanner)
        system2.start_system()

        TestRule2.inference.check_util(
            system2.get_state(), ["a_m3'", "obj(a_m3)'"],
            Assignment(
                [Assignment("a_m3'", "Do"),
                 Assignment("obj(a_m3)'", "A")]), 0.3)
        TestRule2.inference.check_util(
            system2.get_state(), ["a_m3'", "obj(a_m3)'"],
            Assignment(
                [Assignment("a_m3'", "Do"),
                 Assignment("obj(a_m3)'", "B")]), -1.7)
        TestRule2.inference.check_util(
            system2.get_state(), ["a_m3'", "obj(a_m3)'"],
            Assignment([
                Assignment("a_m3'", "SayHi"),
                Assignment("obj(a_m3)'", "None")
            ]), -0.9)
Exemple #23
0
    def test_simulator(self):
        system = DialogueSystem()
        nr_samples = Settings.nr_samples
        Settings.nr_samples = nr_samples / 5.0

        out_break = False
        for k in range(3):
            if out_break:
                break

            system = DialogueSystem(
                XMLDomainReader.extract_domain(TestSimulator.main_domain))
            if k > 0:
                self.log.warning("restarting the simulator...")
                pass

            system.get_domain().get_models().pop(0)
            system.get_domain().get_models().pop(0)
            system.get_domain().get_models().pop(0)

            sim_domain2 = XMLDomainReader.extract_domain(
                TestSimulator.sim_domain)
            sim = Simulator(system, sim_domain2)

            system.attach_module(sim)

            # NEED GUI
            system.get_settings().show_gui = False

            system.start_system()

            for i in range(40):
                if system.get_module(Simulator) is None:
                    break
                sleep(0.2)

                # NEED DialogueRecorder
                str = system.get_module(DialogueRecorder).get_record()
                try:
                    self.check_condition(str)
                    system.detach_module(Simulator)
                    out_break = True
                    break
                except:
                    pass

            if not out_break:
                system.detach_module(Simulator)

        # NEED DialogueRecorder
        self.check_condition(system.get_module(DialogueRecorder).get_record())

        system.detach_module(Simulator)
        system.pause(True)
        Settings.nr_samples = nr_samples * 5
Exemple #24
0
    def test_reward_learner(self):
        system = DialogueSystem()
        Settings.nr_samples = Settings.nr_samples * 2

        out_break = False
        for k in range(3):
            if out_break is True:
                break

            if k > 0:
                # log message
                pass

            system = DialogueSystem(
                XMLDomainReader.extract_domain(TestSimulator.main_domain2))
            sim_domain3 = XMLDomainReader.extract_domain(
                TestSimulator.sim_domain2)
            sim = Simulator(system, sim_domain3)
            system.attach_module(sim)

            # NEED GUI
            system.get_settings().show_gui = False

            system.start_system()

            for i in range(20):
                if system.get_module(Simulator) is None:
                    break

                sleep(0.1)

                try:
                    self.check_condition2(system)
                    system.detach_module(Simulator)
                    out_break = True
                    break
                except:
                    assert False

            system.detach_module(Simulator)

        self.check_condition2(system)
        system.detach_module(Simulator)
        system.pause(True)
        theta_correct = system.get_content(
            "theta_correct").to_continuous().get_function()
        theta_incorrect = system.get_content(
            "theta_incorrect").to_continuous().get_function()
        theta_repeat = system.get_content(
            "theta_repeat").to_continuous().get_function()
        self.log.debug("theta_correct %s" % theta_correct)
        self.log.debug("theta_incorrect %s" % theta_incorrect)
        self.log.debug("theta_repeat %s" % theta_repeat)

        Settings.nr_samples = Settings.nr_samples / 2.0
    def test_domain(self):
        system = DialogueSystem(
            XMLDomainReader.extract_domain(
                "test/data/example-step-by-step_params.xml"))
        system.detach_module(ForwardPlanner)
        system.get_settings().show_gui = False
        system.start_system()

        o1 = CategoricalTableBuilder("u_u")
        o1.add_row("move a little bit left", 0.4)
        o1.add_row("please move a little right", 0.3)
        system.add_content(o1.build())
        assert system.get_state().query_util(["a_m'"]).get_util(
            Assignment("a_m'", "AskRepeat")) == pytest.approx(0.0, abs=0.3)
        assert system.get_state().query_util(["a_m'"]).get_util(
            Assignment("a_m'", "Move(Left)")) == pytest.approx(-0.1, abs=0.15)

        system.get_state().remove_nodes(
            system.get_state().get_action_node_ids())
        system.get_state().remove_nodes(
            system.get_state().get_utility_node_ids())

        o1 = CategoricalTableBuilder("u_u")
        o1.add_row("move a little bit left", 0.5)
        o1.add_row("please move a little left", 0.2)
        system.add_content(o1.build())

        assert system.get_state().query_util(["a_m'"]).get_util(
            Assignment("a_m'", "AskRepeat")) == pytest.approx(0.0, abs=0.3)
        assert system.get_state().query_util(["a_m'"]).get_util(
            Assignment("a_m'", "Move(Left)")) == pytest.approx(0.2, abs=0.15)

        system.get_state().remove_nodes(
            system.get_state().get_action_node_ids())
        system.get_state().remove_nodes(
            system.get_state().get_utility_node_ids())

        o1 = CategoricalTableBuilder("u_u")
        o1.add_row("now move right please", 0.8)
        system.add_content(o1.build())

        assert system.get_state().query_util(["a_m'"]).get_util(
            Assignment("a_m'", "AskRepeat")) == pytest.approx(0.0, abs=0.3)
        assert system.get_state().query_util(["a_m'"]).get_util(
            Assignment("a_m'", "Move(Right)")) == pytest.approx(0.3, abs=0.15)

        system.get_state().remove_nodes(
            system.get_state().get_action_node_ids())
        system.get_state().remove_nodes(
            system.get_state().get_utility_node_ids())

        o1 = CategoricalTableBuilder("u_u")
        o1.add_row("move left", 0.7)
        system.add_content(o1.build())

        assert system.get_state().query_util(["a_m'"]).get_util(
            Assignment("a_m'", "AskRepeat")) == pytest.approx(0.0, abs=0.3)
        assert system.get_state().query_util(["a_m'"]).get_util(
            Assignment("a_m'", "Move(Left)")) == pytest.approx(0.2, abs=0.15)

        system.get_state().remove_nodes(
            system.get_state().get_action_node_ids())
        system.get_state().remove_nodes(
            system.get_state().get_utility_node_ids())

        o1 = CategoricalTableBuilder("u_u")
        o1.add_row("turn left", 0.32)
        o1.add_row("move left again", 0.3)
        system.add_content(o1.build())

        assert system.get_state().query_util(["a_m'"]).get_util(
            Assignment("a_m'", "AskRepeat")) == pytest.approx(0.0, abs=0.3)
        assert system.get_state().query_util(["a_m'"]).get_util(
            Assignment("a_m'", "Move(Left)")) == pytest.approx(0.1, abs=0.15)

        system.get_state().remove_nodes(
            system.get_state().get_action_node_ids())
        system.get_state().remove_nodes(
            system.get_state().get_utility_node_ids())

        o1 = CategoricalTableBuilder("u_u")
        o1.add_row("and do that again", 0.0)
        system.add_content(o1.build())

        system.get_state().remove_nodes(
            system.get_state().get_action_node_ids())
        system.get_state().remove_nodes(
            system.get_state().get_utility_node_ids())

        o1 = CategoricalTableBuilder("u_u")
        o1.add_row("turn left", 1.0)
        system.add_content(o1.build())

        assert system.get_state().query_util(["a_m'"]).get_util(
            Assignment("a_m'", "AskRepeat")) == pytest.approx(0.0, abs=0.3)
        assert system.get_state().query_util(["a_m'"]).get_util(
            Assignment("a_m'", "Move(Left)")) == pytest.approx(0.5, abs=0.15)

        system.get_state().remove_nodes(
            system.get_state().get_action_node_ids())
        system.get_state().remove_nodes(
            system.get_state().get_utility_node_ids())

        o1 = CategoricalTableBuilder("u_u")
        o1.add_row("turn right", 0.4)
        system.add_content(o1.build())

        assert system.get_state().query_util(["a_m'"]).get_util(
            Assignment("a_m'", "AskRepeat")) == pytest.approx(0.0, abs=0.3)
        assert system.get_state().query_util(["a_m'"]).get_util(
            Assignment("a_m'", "Move(Right)")) == pytest.approx(-0.1, abs=0.15)

        system.get_state().remove_nodes(
            system.get_state().get_action_node_ids())
        system.get_state().remove_nodes(
            system.get_state().get_utility_node_ids())

        o1 = CategoricalTableBuilder("u_u")
        o1.add_row("please turn right", 0.8)
        system.add_content(o1.build())

        assert system.get_state().query_util(["a_m'"]).get_util(
            Assignment("a_m'", "AskRepeat")) == pytest.approx(0.0, abs=0.3)
        assert system.get_state().query_util(["a_m'"]).get_util(
            Assignment("a_m'", "Move(Right)")) == pytest.approx(0.3, abs=0.15)

        system.get_state().remove_nodes(
            system.get_state().get_action_node_ids())
        system.get_state().remove_nodes(
            system.get_state().get_utility_node_ids())

        o1 = CategoricalTableBuilder("u_u")
        o1.add_row("and turn a bit left", 0.3)
        o1.add_row("move a bit left", 0.3)
        system.add_content(o1.build())

        assert system.get_state().query_util(["a_m'"]).get_util(
            Assignment("a_m'", "AskRepeat")) == pytest.approx(0.0, abs=0.3)
        assert system.get_state().query_util(["a_m'"]).get_util(
            Assignment("a_m'", "Move(Left)")) == pytest.approx(0.1, abs=0.15)

        system.get_state().remove_nodes(
            system.get_state().get_action_node_ids())
        system.get_state().remove_nodes(
            system.get_state().get_utility_node_ids())