def test_before_commit(self):
        state = State(self.state_value, self.p)

        token = Token(45.3, [])
        state.pass_token(token)

        self.assertEqual(Token(state.infinite_score, []), state.token)
class TokenDeepCopyTests(TokenBaseTests):
    def setUp(self):
        super().setUp()

        self.history_copy = list(self.history)
        self.words_copy = list(self.words)
        self.token = Token(self.score, self.history_copy, self.words_copy )

    def modify_token_content(self, token):
        token.history.append(40)
        token.words.append(3)

    def did_not_changed(self):
        self.assertEqual(self.history, self.history_copy)
        self.assertEqual(self.words, self.words_copy)

    def test_update_score_create_deep_copy(self):
        token = self.token.update_score(10)
        self.modify_token_content(token)
        self.did_not_changed()

    def test_update_history_create_deep_copy(self):
        token = self.token.update_history(10)
        self.modify_token_content(token)
        self.did_not_changed()

    def test_update_words_create_deep_copy(self):
        token = self.token.update_words(10)
        self.modify_token_content(token)
        self.did_not_changed()
    def test_commit_without_passing_token(self):
        state = State(self.state_value, self.p)
        token = Token(45.3, [30])
        state.pass_token(token)
        state.commit()

        state.commit()

        self.assertEqual(Token(state.infinite_score, []), state.token)
    def test_pass_token_with_transit_cost(self):
        state = State(self.state_value, self.p)
        local_cost = state.local_cost()

        token = Token(45.3, [state])
        state.pass_token(token, transit_cost=10)
        state.pass_token(Token(20.3, []), transit_cost=2)

        state.commit()
        self.assertEqual(Token(20.3 + local_cost + 2, [self.state_value]), state.token)
    def test_token_after_passing_token_and_commit(self):
        state = State(self.state_value, self.p)
        local_cost = state.local_cost()

        token = Token(45.3, [state])
        state.pass_token(token)
        state.pass_token(Token(20.3, []))

        state.commit()

        self.assertEqual(Token(20.3 + local_cost, [self.state_value]),
                         state.token)
    def test_pass_token_after_commit(self):
        state = State(self.state_value, self.p)
        token = Token(45.3, [state])
        state.pass_token(token)
        state.commit()

        cost = state.local_cost()
        state.pass_token(Token(80.3, []))
        state.pass_token(Token(50.3, []))
        state.pass_token(Token(90.3, []))

        state.commit()

        self.assertEqual(Token(50.3 + cost, [self.state_value]), state.token)
 def test_pass_token_retains_words(self):
     state = State(self.state_value, self.p)
     words = [5, 10]
     token = Token(25, [], words)
     state.pass_token(token)
     state.commit()
     self.assertEqual(words, state.token.words)
    def test_pass_token(self):
        expected_score = self.transition.full_cost()
        self.state.initialize_token()
        self.transition.pass_token()
        self.state.commit()

        self.assertEqual(Token(expected_score, [self.state.state]),
                         self.state.token)
    def test_pass_token(self):
        graph = Graph(self.states)
        score = 30
        expected_score = score + graph.local_cost()
        expected_history = [20, 30, self.state1]
        graph.pass_token(Token(score, expected_history[:-1]))
        graph.commit()
        first_state = self.states[0]

        self.assertEqual(expected_score, first_state.token.score)
        self.assertEqual(expected_history, first_state.token.history)
    def test_one_state_model(self):
        states = [self.states[0]]
        graph = Graph(states)
        graph.add_transition(
            Transition.free(self.states[0], self.states[0])
        )

        graph.evolve()
        graph.commit()

        t1_prob = self.p1[0]
        t2_prob = self.p1[1]

        self.assertEqual(Token(- np.log(t1_prob), [self.state1]),
                         graph.optimal_path())

        graph.evolve()
        graph.commit()

        expected = Token(- np.log(t1_prob) - np.log(t2_prob),
                         [self.state1, self.state1])
        self.assertEqual(expected, graph.optimal_path())
    def test_multiple_states_model(self):
        graph_id = 7
        graph = Graph(self.states, graph_id=graph_id)
        graph.add_transition(
            Transition.free(self.states[0], self.states[1])
        )
        graph.add_transition(
            Transition.free(self.states[1], self.states[1])
        )

        graph.evolve()
        graph.commit()

        self.assertEqual(Token(- np.log(self.p1[0]), [self.state1], [graph_id]),
                         graph.optimal_path())

        graph.evolve()
        graph.commit()

        expected = Token(- np.log(self.p1[0]) - np.log(self.p2[1]),
                         [self.state1, self.state2], [graph_id])
        self.assertEqual(expected, graph.optimal_path())
    def test_token_on_nested_graph(self):
        g1 = Graph([self.states[0]])
        g2 = Graph([self.states[1]])

        g3_state = State(34, [0.2])
        g3 = Graph([g3_state])
        top_level = Graph([g1, g2, g3])

        token = Token(3, [23])
        expected_score = 3 + g3.local_cost()
        g3_state.pass_token(token)
        g3_state.commit()

        self.assertEqual(expected_score, top_level.token.score)
    def test_inequality(self):
        self.assertNotEqual(Token(self.score, self.history, self.words),
                            Token(self.score, self.history, [3]))

        self.assertNotEqual(Token(self.score, self.history, self.words),
                            Token(self.score, [96], self.words))

        self.assertNotEqual(Token(self.score, self.history, self.words),
                            Token(self.score + 5, self.history, self.words))
 def test_update_score(self):
     token = Token(self.score, self.history)
     res = token.update_score(5)
     self.assertEqual(Token(self.score + 5, self.history), res)
     self.assertEqual(Token(self.score, self.history), token)
 def test_update_words(self):
     token = Token(self.score, self.history, self.words)
     res = token.update_words(42)
     self.assertEqual(Token(self.score, self.history, self.words + [42]), res)
    def test_updated_returns_correct_token(self):
        token = Token(self.score, self.history)

        res = token.updated(5, 80)
        expected = Token(30, self.history + [80])
        self.assertEqual(expected, res)
    def test_equality(self):
        a = Token(self.score, self.history, self.words)
        b = Token(self.score, self.history, self.words)

        self.assertEqual(a, b)
        self.assertEqual(a, a)
 def test_initial_token(self):
     state = State(self.state_value, self.p)
     self.assertEqual(Token(state.infinite_score, []), state.token)
 def test_token_after_calling_initialization_method(self):
     state = State(self.state_value, self.p)
     state.initialize_token()
     self.assertEqual(Token(0, []), state.token)
 def test_token(self):
     graph = Graph(self.states)
     self.states[1].pass_token(Token(34, [20, 30]))
     self.states[1].commit()
     self.assertEqual(self.states[1].token, graph.token)
    def setUp(self):
        super().setUp()

        self.history_copy = list(self.history)
        self.words_copy = list(self.words)
        self.token = Token(self.score, self.history_copy, self.words_copy )
 def test_passing_token_to_graph_adds_word_id_to_history(self):
     graph = Graph(self.states, graph_id=7)
     token = Token(25, [3], words=[3])
     graph.pass_token(token)
     graph.commit()
     self.assertEqual([3, 7], self.states[0].token.words)