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'))), )
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')), )
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'))), )
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'), )
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')) )