def test_include_gaps(self): from multicov.alignment import Alignment, ReferenceMapping from multicov.alphabet import rna_alphabet, NumericAlphabet from multicov.binary import BinaryAlignment align1 = Alignment(['ACA', 'GUA', '-A-'], alphabet=rna_alphabet) align2 = Alignment([[2, 3], [0, 4], [1, 3]], alphabet=NumericAlphabet(5, has_gap=False)) align = Alignment(align1).add(align2) align.reference = ReferenceMapping((list(range(1, 4)), list(range(2)))) align.annotations['seqw'] = [0.5, 1.5, 0.2] bin_align = BinaryAlignment.from_alignment(align) bin_align.add_gap_positions() expected1 = np.asmatrix([[0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0], [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0]]) # 0 1 2 3 4 expected2 = np.asmatrix([[0, 0, 1, 0, 0, 0, 0, 0, 1, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 1], [0, 1, 0, 0, 0, 0, 0, 0, 1, 0]]) self.assertTrue(bin_align.include_gaps) self.assertSequenceEqual(bin_align.alphabets, [(rna_alphabet, 3), (NumericAlphabet(5, has_gap=False), 2)]) self.assertTrue( np.array_equal(bin_align.data.todense(), np.hstack((expected1, expected2)))) self.assertIs(bin_align.reference, align.reference) self.assertIs(bin_align.annotations, align.annotations)
def test_set_default_reference(self): from multicov.binary import BinaryAlignment from multicov.alignment import ReferenceMapping from multicov.alphabet import NumericAlphabet bin_align = BinaryAlignment( [[0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1]], NumericAlphabet(5)) self.assertEqual(bin_align.reference, ReferenceMapping(list(range(4))))
def test_deep_copy_data(self): from multicov.binary import BinaryAlignment from multicov.alphabet import NumericAlphabet bin_align1 = BinaryAlignment( [[0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1]], NumericAlphabet(5)) bin_align2 = BinaryAlignment(bin_align1) self.assertIsNot(bin_align1.data, bin_align2.data)
def test_numeric_nonzero_base_len(self): from multicov.alphabet import NumericAlphabet self.assertEqual(len(NumericAlphabet(11, 17)), 6)
def test_numeric_gapless_nonzero_base_size_nogap(self): from multicov.alphabet import NumericAlphabet self.assertEqual(NumericAlphabet(10, 16, has_gap=True).size(no_gap=True), 5)
def test_numeric_base0_len(self): from multicov.alphabet import NumericAlphabet self.assertEqual(len(NumericAlphabet(8)), 8)
def test_numeric_base0_force_nogap(self): from multicov.alphabet import NumericAlphabet self.assertFalse(NumericAlphabet(8, has_gap=False).has_gap)
def test_numeric_base0_default_gap(self): from multicov.alphabet import NumericAlphabet self.assertTrue(NumericAlphabet(6).has_gap)
def test_numeric_sequence_example_base0(self): from multicov.alphabet import NumericAlphabet alpha = NumericAlphabet(10) self.assertTrue(np.array_equal(alpha.from_int([8, 0, 4, 2]), [8, 0, 4, 2]))
def test_numeric_name_base_0(self): from multicov.alphabet import NumericAlphabet alpha = NumericAlphabet(7) self.assertEqual(alpha.name, 'numeric[0:7]')
def test_numeric_nonzero_base_smaller_end(self): from multicov.alphabet import NumericAlphabet self.assertEqual(len(NumericAlphabet(7, 5).letters()), 0)
def test_numeric_base0_nonpositive_end(self): from multicov.alphabet import NumericAlphabet self.assertEqual(len(NumericAlphabet(0).letters()), 0) self.assertEqual(len(NumericAlphabet(-5).letters()), 0)
def test_numeric_letters_nogap_nonzero_base_gapful(self): from multicov.alphabet import NumericAlphabet alpha = NumericAlphabet(5, 11, has_gap=True) self.assertTrue(np.array_equal(alpha.letters(no_gap=True), list(range(6, 11))))
def test_numeric_letters_nonzero_base(self): from multicov.alphabet import NumericAlphabet alpha = NumericAlphabet(2, 7) self.assertTrue(np.array_equal(alpha.letters(), list(range(2, 7))))
def test_numeric_letters_nogap_base0_gapless(self): from multicov.alphabet import NumericAlphabet alpha = NumericAlphabet(4, has_gap=False) self.assertTrue(np.array_equal(alpha.letters(no_gap=True), list(range(4))))
def test_numeric_sequence_example_base0(self): from multicov.alphabet import NumericAlphabet alpha = NumericAlphabet(7) result = alpha.to_int([0, 2, 3]) self.assertTrue(np.array_equal(result, [0, 2, 3]))
def test_numeric_sequence_example_nonzero_base(self): from multicov.alphabet import NumericAlphabet alpha = NumericAlphabet(3, 8) self.assertTrue(np.array_equal(alpha.to_int([3, 7, 5]), [0, 4, 2]))
def test_index_numeric(self): from multicov.alphabet import NumericAlphabet alpha = NumericAlphabet(4, 8) for i, n in enumerate(alpha.letters()): self.assertEqual(alpha[i], n)
def test_numeric_sequence_example_nonzero_base(self): from multicov.alphabet import NumericAlphabet alpha = NumericAlphabet(5, 10) self.assertTrue(np.array_equal(alpha.from_int([3, 0, 2, 4]), [8, 5, 7, 9]))
def test_numeric_name_nonzero_base(self): from multicov.alphabet import NumericAlphabet alpha = NumericAlphabet(3, 7) self.assertEqual(alpha.name, 'numeric[3:7]')
def test_numeric_nonzero_base_default_nogap(self): from multicov.alphabet import NumericAlphabet self.assertFalse(NumericAlphabet(3, 6).has_gap)
def test_numeric_base0_size(self): from multicov.alphabet import NumericAlphabet self.assertEqual(NumericAlphabet(8).size(), 8)
def test_numeric_nonzero_base_force_gap(self): from multicov.alphabet import NumericAlphabet self.assertTrue(NumericAlphabet(3, 9, has_gap=True).has_gap)
def test_numeric_base0_size_nogap(self): from multicov.alphabet import NumericAlphabet self.assertEqual(NumericAlphabet(8).size(no_gap=True), 7)