def test_change_presence(state):
    state.change(Present(F.parse('gene.foo(A)')))

    assert state.changes == (Change(None, F.parse('gene.foo(A)')), )

    state.change(Present(F.parse('gene.foo(B)')))

    assert state.changes == (Change(None, F.parse('gene.foo(B)')), )
def test_match_on_delete(state):
    state.change(Change(None, F.parse('species/gene.A')))
    assert state.changes == (
        Change(None, F.parse('species/gene.A')),
    )

    state.change(Change(F.parse('gene.A'), None))
    assert state.changes == ()
def test_match_whole_fusion_on_delete_with_variant(state):
    state.change(+F.parse('gene.A')**F.parse('gene.B'))
    state.change(+F.parse('gene.C'))
    state.change(-F.parse('gene.A')**F.parse('gene.B(x)'))

    assert state.changes == (
        +F.parse('gene.A')**F.parse('gene.B'),
        +F.parse('gene.C'),
        -F.parse('gene.A')**F.parse('gene.B(x)'),
    )
def test_replacement_replace_variant(state):
    state.change(Change(F('a'), F.parse('a(x)')))
    assert state.changes == (
        Change(F('a'), F.parse('a(x)')),
    )

    state.change(Change(F('a'), F.parse('a(y)')))
    assert state.changes == (
        Change(F('a'), F.parse('a(y)')),
    )
def test_change_presence(state):
    state.change(Present(F.parse('gene.foo(A)')))

    assert state.changes == (
        Change(None, F.parse('gene.foo(A)')),
    )

    state.change(Present(F.parse('gene.foo(B)')))

    assert state.changes == (
        Change(None, F.parse('gene.foo(B)')),
    )
def test_update_fusion_with_composite_annotation_in_replacement(state):
    state.change(+F.parse('gene.A')**F.parse('gene.B'))
    state.change(
        F.parse('gene.B') > CompositeAnnotation(F.parse('gene.C'),
                                                F.parse('gene.D')))

    assert state.changes == (+F.parse('gene.A')**CompositeAnnotation(
        F.parse('gene.C'), F.parse('gene.D')), )
def test_integrate_plasmid_with_fusion(state):
    state.change(
        F('site') > Plasmid('pA', [F.parse('gene.A')**F.parse('gene.B')]))

    assert state.changes == (F('site') > Plasmid(
        'pA', [F.parse('gene.A')**F.parse('gene.B')]), )

    state.change(F.parse('gene.A')**F.parse('gene.B') > F.parse('gene.C'))
    assert state.changes == (F('site') > CompositeAnnotation(
        F.parse('gene.C')), )
def test_imply_locus_with_substitution():

    assert chain('gene.A>promoter.X:gene.B',
                 'gene.C>promoter.X:gene.D',
                 '[email protected]>promoter.Y').changes() == (
        Change(Feature.parse('gene.C'), Fusion(Feature.parse('promoter.X'), Feature.parse('gene.D'))),
        Change(Feature.parse('gene.A'), Fusion(Feature.parse('promoter.Y'), Feature.parse('gene.B'))),
    )
Beispiel #9
0
def test_parse_feature():
    assert Feature('foo') == Feature.parse('foo')
    assert Feature('foo', type='gene') == Feature.parse('gene.foo')
    assert Feature('foo', organism='organism') == Feature.parse('organism/foo')
    assert Feature('foo', accession=Accession('id', 'database')) == Feature.parse('foo#database:id')
    assert Feature('foo', accession=Accession('id123')) == Feature.parse('foo#id123')
    assert Feature('foo', type='gene', organism='organism', accession=Accession('id', 'database'),
                   variant=tuple('variant')) == Feature.parse('organism/gene.foo#database:id(variant)')
def test_replacement_of_variants(state):
    state.change(Change(F.parse('a(x)'), F('b')))

    assert state.changes == (Change(F.parse('a(x)'), F('b')), )

    state.change(Change(F.parse('a(y)'), F('b')))
    assert state.changes == (
        Change(F.parse('a(x)'), F('b')),
        Change(F.parse('a(y)'), F('b')),
    )

    state.change(Change(F.parse('a(y)'), F('c')))
    assert state.changes == (
        Change(F.parse('a(x)'), F('b')),
        Change(F.parse('a(y)'), F('c')),
    )
Beispiel #11
0
def test_feature_gnomic_format(gnomic_formatter):
    assert gnomic_formatter.format_annotation(Feature(name='foo')) == 'foo'
    assert gnomic_formatter.format_annotation(Feature.parse('foo(f)')) == 'foo(f)'
    assert gnomic_formatter.format_annotation(Feature.parse('foo(f, g)')) == 'foo(f; g)'
    assert gnomic_formatter.format_annotation(Feature.parse('organism/type.gene#db:123(f, g)')) \
        == 'organism/type.gene#db:123(f; g)'
    assert gnomic_formatter.format_annotation(Feature.parse('#db:123')) == '#db:123'
    assert gnomic_formatter.format_annotation(Feature.parse('gene#123')) == 'gene#123'
    assert gnomic_formatter.format_annotation(Feature.parse('foo(mutant; variant)')) == 'foo(mutant; variant)'
def test_replacement_of_variants(state):
    state.change(Change(F.parse('a(x)'), F('b')))

    assert state.changes == (
        Change(F.parse('a(x)'), F('b')),
    )

    state.change(Change(F.parse('a(y)'), F('b')))
    assert state.changes == (
        Change(F.parse('a(x)'), F('b')),
        Change(F.parse('a(y)'), F('b')),
    )

    state.change(Change(F.parse('a(y)'), F('c')))
    assert state.changes == (
        Change(F.parse('a(x)'), F('b')),
        Change(F.parse('a(y)'), F('c')),
    )
def test_imply_locus_with_substitution():

    assert chain('gene.A>promoter.X:gene.B', 'gene.C>promoter.X:gene.D',
                 '[email protected]>promoter.Y').changes() == (
                     Change(
                         Feature.parse('gene.C'),
                         Fusion(Feature.parse('promoter.X'),
                                Feature.parse('gene.D'))),
                     Change(
                         Feature.parse('gene.A'),
                         Fusion(Feature.parse('promoter.Y'),
                                Feature.parse('gene.B'))),
                 )
Beispiel #14
0
def test_feature_gnomic_format(gnomic_formatter):
    assert gnomic_formatter.format_annotation(Feature(name='foo')) == 'foo'
    assert gnomic_formatter.format_annotation(
        Feature.parse('foo(f)')) == 'foo(f)'
    assert gnomic_formatter.format_annotation(
        Feature.parse('foo(f, g)')) == 'foo(f; g)'
    assert gnomic_formatter.format_annotation(Feature.parse('organism/type.gene#db:123(f, g)')) \
        == 'organism/type.gene#db:123(f; g)'
    assert gnomic_formatter.format_annotation(
        Feature.parse('#db:123')) == '#db:123'
    assert gnomic_formatter.format_annotation(
        Feature.parse('gene#123')) == 'gene#123'
    assert gnomic_formatter.format_annotation(
        Feature.parse('foo(mutant; variant)')) == 'foo(mutant; variant)'
def test_parse_feature():
    assert Feature('foo') == Feature.parse('foo')
    assert Feature('foo', type='gene') == Feature.parse('gene.foo')
    assert Feature('foo', organism='organism') == Feature.parse('organism/foo')
    assert Feature('foo', accession=Accession(
        'id', 'database')) == Feature.parse('foo#database:id')
    assert Feature('foo',
                   accession=Accession('id123')) == Feature.parse('foo#id123')
    assert Feature('foo',
                   type='gene',
                   organism='organism',
                   accession=Accession('id', 'database'),
                   variant=tuple('variant')) == Feature.parse(
                       'organism/gene.foo#database:id(variant)')
def test_replace_gene_with_fusion(state):
    state.change(+F.parse('gene.A'))
    state.change(F.parse('gene.A') > F.parse('gene.A')**F.parse('gene.B'))

    assert state.changes == (+F.parse('gene.A')**F.parse('gene.B'), )
Beispiel #17
0
def test_genotype_parse_plasmid_insertion(parse):
    assert [Change(after=Plasmid('foo'))] == parse('(foo)')
    assert [Change(after=Plasmid('foo', [Feature.parse('gene.A')]))] == parse('(foo gene.A)')
def test_match_on_delete(state):
    state.change(Change(None, F.parse('species/gene.A')))
    assert state.changes == (Change(None, F.parse('species/gene.A')), )

    state.change(Change(F.parse('gene.A'), None))
    assert state.changes == ()
def test_replacement_replace_variant(state):
    state.change(Change(F('a'), F.parse('a(x)')))
    assert state.changes == (Change(F('a'), F.parse('a(x)')), )

    state.change(Change(F('a'), F.parse('a(y)')))
    assert state.changes == (Change(F('a'), F.parse('a(y)')), )
def test_update_fusion_in_deletion(state):
    state.change(+F.parse('gene.A')**F.parse('gene.B'))
    state.change(+F.parse('gene.C'))
    state.change(-F.parse('gene.A'))

    assert state.changes == (
        +F.parse('gene.A')**F.parse('gene.B'),
        +F.parse('gene.C'),
        -F.parse('gene.A'),
    )

    state.change(-F.parse('gene.A')**F.parse('gene.B'))
    assert state.changes == (
        +F.parse('gene.C'),
        -F.parse('gene.A'),
    )
def test_update_fusion_in_deletion_at_locus(state):
    state.change(F.parse('gene.A') > F.parse('gene.B')**F.parse('gene.C'))
    state.change(-F.parse('gene.C') % F.parse('gene.A'))

    assert state.changes == (F.parse('gene.A') > F.parse('gene.B'), )
def test_genotype_parse_plasmid_insertion(parse):
    assert [Change(after=Plasmid('foo'))] == parse('(foo)')
    assert [Change(after=Plasmid('foo', [Feature.parse('gene.A')]))
            ] == parse('(foo gene.A)')
def test_scenario_1c_disambiguate_site_using_repeat_site(state):
    state.change(
        Change(F.parse('gene.A'),
               F.parse('promoter.X')**F.parse('gene.B')))
    state.change(
        Change(F.parse('gene.C'),
               F.parse('promoter.X')**F.parse('gene.D')))

    state.change(
        Change(F.parse('gene.A'),
               F.parse('promoter.Y')**F.parse('gene.B')))
    assert state.changes == (Change(F.parse('gene.C'),
                                    F.parse('promoter.X')**F.parse('gene.D')),
                             Change(F.parse('gene.A'),
                                    F.parse('promoter.Y')**F.parse('gene.B')))
def test_scenario_2_change_at_unknown_locus(state):
    state.change(
        Change(
            F.parse('promoter.A') % F.parse('gene.foo'),
            F.parse('promoter.B')))

    assert state.changes == (Change(
        F.parse('promoter.A') % F.parse('gene.foo'), F.parse('promoter.B')), )

    state.change(Change(None, F.parse('gene.foo')))
    assert state.changes == (
        Change(
            F.parse('promoter.A') % F.parse('gene.foo'),
            F.parse('promoter.B')),
        Change(None, F.parse('gene.foo')),
    )

    state.change(
        Change(
            F.parse('promoter.B') % F.parse('gene.foo'),
            F.parse('promoter.A')))
    assert state.changes == (Change(None, F.parse('gene.foo')), )
def test_scenario_2_change_at_unknown_locus(state):
    state.change(Change(F.parse('promoter.A') % F.parse('gene.foo'), F.parse('promoter.B')))

    assert state.changes == (
        Change(F.parse('promoter.A') % F.parse('gene.foo'), F.parse('promoter.B')),
    )

    state.change(Change(None, F.parse('gene.foo')))
    assert state.changes == (
        Change(F.parse('promoter.A') % F.parse('gene.foo'), F.parse('promoter.B')),
        Change(None, F.parse('gene.foo')),
    )

    state.change(Change(F.parse('promoter.B') % F.parse('gene.foo'), F.parse('promoter.A')))
    assert state.changes == (
        Change(None, F.parse('gene.foo')),
    )
def test_match_whole_fusion_on_delete(state):
    state.change(+F.parse('gene.A')**F.parse('gene.B'))
    state.change(+F.parse('gene.C'))
    state.change(-F('gene.A'))

    assert state.changes == (
        +F.parse('gene.A')**F.parse('gene.B'),
        +F.parse('gene.C'),
        -F('gene.A'),
    )

    state.change(-F.parse('gene.C'))
    assert state.changes == (
        +F.parse('gene.A')**F.parse('gene.B'),
        -F('gene.A'),
    )

    state.change(-F.parse('gene.A')**F.parse('gene.B'))
    assert state.changes == (-F('gene.A'), )
def test_update_part_of_fusion_in_replacement(state):
    state.change(+F.parse('gene.A')**F.parse('gene.B'))
    state.change(F.parse('gene.A') > F.parse('gene.C'))

    assert state.changes == (+F.parse('gene.C')**F.parse('gene.B'), )

    state.change(
        F.parse('gene.C')**F.parse('gene.B') > F.parse('gene.A')**F.parse(
            'gene.B')**F.parse('gene.C'))
    assert state.changes == (
        +F.parse('gene.A')**F.parse('gene.B')**F.parse('gene.C'), )

    state.change(
        F.parse('gene.A')**F.parse('gene.B') > F.parse('gene.D')**F.parse(
            'gene.E'))
    assert state.changes == (
        +F.parse('gene.D')**F.parse('gene.E')**F.parse('gene.C'), )
def test_scenario_1c_disambiguate_site_using_repeat_site(state):
    state.change(Change(F.parse('gene.A'), F.parse('promoter.X') ** F.parse('gene.B')))
    state.change(Change(F.parse('gene.C'), F.parse('promoter.X') ** F.parse('gene.D')))

    state.change(Change(F.parse('gene.A'), F.parse('promoter.Y') ** F.parse('gene.B')))
    assert state.changes == (
        Change(F.parse('gene.C'), F.parse('promoter.X') ** F.parse('gene.D')),
        Change(F.parse('gene.A'), F.parse('promoter.Y') ** F.parse('gene.B'))
    )