def fill_sequences_with_gaps_to_reach_the_max_sequence_length( self, solution: MSASolution, max_length: int, cutting_points: list): for i in range(solution.number_of_variables): sequence_length = solution.get_length_of_sequence(i) if sequence_length != max_length: for j in range(sequence_length, max_length): if cutting_points[i] == -1: solution.add_gap_to_sequence_at_index( seq_index=i, gap_position=sequence_length - 1) else: solution.add_gap_to_sequence_at_index( seq_index=i, gap_position=cutting_points[i] + 1)
def test_should_create_new_gaps_group(self): # setup problem = MSA(score_list=[]) problem.identifiers = ['seq1'] problem.number_of_variables = 1 msa_1 = MSASolution(problem, msa=[('seq1', 'A-')]) msa_2 = MSASolution(problem, msa=[('seq1', '-A')]) msa_3 = MSASolution(problem, msa=[('seq1', 'A-C')]) msa_4 = MSASolution(problem, msa=[('seq1', 'AAA')]) # run msa_1.add_gap_to_sequence_at_index(seq_index=0, gap_position=0) msa_2.add_gap_to_sequence_at_index(seq_index=0, gap_position=2) msa_3.add_gap_to_sequence_at_index(seq_index=0, gap_position=3) msa_4.add_gap_to_sequence_at_index(seq_index=0, gap_position=1) # check self.assertEqual([('seq1', '-A-')], msa_1.decode_alignment_as_list_of_pairs()) self.assertEqual([('seq1', '-A-')], msa_2.decode_alignment_as_list_of_pairs()) self.assertEqual([('seq1', 'A-C-')], msa_3.decode_alignment_as_list_of_pairs()) self.assertEqual([('seq1', 'A-AA')], msa_4.decode_alignment_as_list_of_pairs())
def do_mutation(self, solution: MSASolution) -> MSASolution: if random.random() <= self.probability: length_of_alignment = solution.get_length_of_alignment() for seq_index in range(solution.number_of_variables): point = random.randint(0, length_of_alignment - 1) solution.add_gap_to_sequence_at_index(seq_index, point) if self.remove_full_of_gap_columns: solution.remove_full_of_gaps_columns() # Sanity check: alignment is valid (same length for all sequences) if not solution.is_valid_msa(): raise Exception("Mutated solution is not valid! {0}".format( solution.decode_alignment_as_list_of_pairs())) return solution