コード例 #1
0
ファイル: crossover.py プロジェクト: dg310012/Sequoya
 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)
コード例 #2
0
ファイル: test_solution.py プロジェクト: dg310012/Sequoya
    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())
コード例 #3
0
    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