def test_oneLineage_returnsOnlyElement(self):
        l1 = Lineage(major="4", minor="1.3.4")
        classifier = Classifier()
        sample_idx = 0

        actual = classifier.call_sample_lineage([l1], sample_idx)
        expected = str(l1)

        assert actual == expected
    def test_emptyList_returnsNone(self):
        lineages = []
        classifier = Classifier()
        sample_idx = 0

        expected = "unknown"
        actual = classifier.call_sample_lineage(lineages, sample_idx, default=expected)

        assert actual == expected
    def test_twoLineagesDiffMajor_returnsMixedDisregardMaxAlt(self):
        l1 = Lineage(major="4", minor="1.3.4")
        l2 = Lineage(major="5", minor="8.3")
        classifier = Classifier(max_alt_lineages=5)
        sample_idx = 0

        actual = classifier.call_sample_lineage([l1, l2], sample_idx)
        expected = "mixed"

        assert actual == expected
    def test_twoLineagesSameMajor_returnsLowestOnTree(self):
        l1 = Lineage(major="4", minor="1.3.4")
        l2 = Lineage(major="4", minor="8.3")
        classifier = Classifier()
        sample_idx = 0

        actual = classifier.call_sample_lineage([l1, l2], sample_idx)
        expected = str(l1)

        assert actual == expected
    def test_oneLineageTooManyHets_returnsTooManyHets(self):
        l1 = Lineage(major="4", minor="1.3.4")
        classifier = Classifier(max_het=1)
        sample_idx = 0
        classifier.het_counts[sample_idx] = 5

        actual = classifier.call_sample_lineage([l1], sample_idx)
        expected = "too_many_hets"

        assert actual == expected
    def test_mixedLineagesBelowThreshold_returnsMostCommon(self):
        l1 = Lineage(major="4", minor="1.3.4")
        l2 = Lineage(major="4", minor="1.3")
        l3 = Lineage(major="5", minor="8.3")
        classifier = Classifier(max_alt_lineages=1)
        sample_idx = 0

        actual = classifier.call_sample_lineage([l1, l2, l3], sample_idx)
        expected = str(l1)

        assert actual == expected