def test_mle(self): states = ["0", "1", "2", "3"] alphabet = ["A", "C", "G", "T"] training_data = [("AACCCGGGTTTTTTT", "001112223333333"), ("ACCGTTTTTTT", "01123333333"), ("ACGGGTTTTTT", "01222333333"), ("ACCGTTTTTTTT", "011233333333"), ] training_outputs = array([[0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3], [ 0, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3], [0, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3], [0, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3]]) training_states = array([[0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3], [ 0, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3], [0, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3], [0, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3]]) p_initial = array([1., 0., 0., 0.]) p_transition = array([[0.2, 0.8, 0., 0.], [0., 0.5, 0.5, 0.], [0., 0., 0.5, 0.5], [0., 0., 0., 1.]]) p_emission = array( [[0.66666667, 0.11111111, 0.11111111, 0.11111111], [0.08333333, 0.75, 0.08333333, 0.08333333], [0.08333333, 0.08333333, 0.75, 0.08333333], [0.03125, 0.03125, 0.03125, 0.90625]]) p_initial_out, p_transition_out, p_emission_out = MarkovModel._mle( len(states), len(alphabet), training_outputs, training_states, None, None, None) self.assertTrue( array_equal(around(p_initial_out, decimals=3), around(p_initial, decimals=3))) self.assertTrue( array_equal(around(p_transition_out, decimals=3), around(p_transition, decimals=3))) self.assertTrue( array_equal(around(p_emission_out, decimals=3), around(p_emission, decimals=3)))