def test_obsolete_term_repair_withfrom(): vals = ["ZFIN", "ZFIN:ZDB-GENE-980526-362", "acts_upstream_of_or_within", "GO:0007155", "PMID:15494018", "ECO:0000305", "GO:0005913|GO:1,GO:4|ZFIN:ZDB-MRPHLNO-010101-1,MGI:1232453", "", "20041026", "ZFIN", "", "contributor=GOC:zfin_curators|model-state=production|noctua-model-id=gomodel:ZFIN_ZDB-GENE-980526-362" ] ont = OntologyFactory().create(ALT_ID_ONT) config = assocparser.AssocParserConfig(ontology=ont, rule_set=assocparser.RuleSet.ALL) parser = GpadParser(config=config) result = parser.parse_line("\t".join(vals)) assoc = result.associations[0] # GO:0005913 should be repaired to its replacement term, GO:00005912 assert [ConjunctiveSet(elements=[Curie(namespace='GO', identity='0005912')]), # repaired test GO elements ConjunctiveSet(elements=[Curie(namespace='GO', identity='2'), Curie(namespace='GO', identity='3')]), # non GO elements stay the same, could be obsolete or not ConjunctiveSet(elements=[Curie(namespace='ZFIN', identity='ZDB-MRPHLNO-010101-1'), Curie(namespace='MGI', identity='1232453')])] == assoc.evidence.with_support_from
def test_parse_2_0(): version = "2.0" report = assocparser.Report(group="unknown", dataset="unknown") vals = [ "MGI:MGI:1918911", "", "RO:0002327", "GO:0003674", "MGI:MGI:2156816|GO_REF:0000015", "ECO:0000307", "", "", "2020-09-17", "MGI", "", "creation-date=2020-09-17|modification-date=2020-09-17|contributor-id=http://orcid.org/0000-0003-2689-5511" ] result = to_association(list(vals), report=report, version=version) assert result.skipped == 0 assert len([m for m in result.report.messages if m["level"] == "ERROR"]) == 0 assert len(result.associations) == 1 # Annotation_Extensions vals[10] = "BFO:0000066(CL:0000010),GOREL:0001004(CL:0000010)" result = to_association(list(vals), report=report, version=version) assert result.associations[0].object_extensions == [ConjunctiveSet([ ExtensionUnit(Curie("BFO", "0000066"), Curie("CL", "0000010")), ExtensionUnit(Curie("GOREL", "0001004"), Curie("CL", "0000010")) ])] # With_or_From vals[6] = "PR:Q505B8|PR:Q8CHK4" result = to_association(list(vals), report=report, version=version) assert result.associations[0].evidence.with_support_from == [ ConjunctiveSet([Curie("PR", "Q505B8")]), ConjunctiveSet([Curie("PR", "Q8CHK4")]) ] # Interacting taxon - this example should fail vals[7] = "Staphylococcus aureus ; NCBITaxon:1280" result = to_association(list(vals), report=report, version=version) assert len([m for m in result.report.messages if m["level"] == "ERROR"]) > 0 assert len(result.associations) == 0 # Now test valid interacting taxon value vals[7] = "NCBITaxon:1280" result = to_association(list(vals), report=report, version=version) assert result.associations[0].interacting_taxon == Curie("NCBITaxon", "1280") # Confirm non-"MGI:MGI:" IDs will parse vals[0] = "WB:WBGene00001189" result = to_association(list(vals), report=report, version=version) assert result.associations[0].subject.id == Curie("WB", "WBGene00001189") # Test annotation property retrieval contributors = result.associations[0].annotation_property_values(property_key="contributor-id") assert set(contributors) == {"http://orcid.org/0000-0003-2689-5511"}
def test_gaf_writer(): association = GoAssociation( source_line="", subject=Subject( id=Curie("PomBase", "SPAC25B8.17"), label="ypf1", type=["protein"], fullname=[ "intramembrane aspartyl protease of the perinuclear ER membrane Ypf1 (predicted)" ], synonyms=["ppp81"], taxon=Curie("NCBITaxon", "4896")), object=Term(id=Curie("GO", "0000006"), taxon=Curie("NCBITaxon", "4896")), negated=False, qualifiers=[], aspect=Aspect("C"), relation=Curie("BFO", "0000050"), interacting_taxon=Curie("NCBITaxon", "555"), evidence=Evidence( type=Curie("ECO", "0000266"), has_supporting_reference=[Curie("GO_REF", "0000024")], with_support_from=[ ConjunctiveSet(elements=[Curie("SGD", "S000001583")]) ]), provided_by=Provider("PomBase"), date=Date(year="2015", month="03", day="05", time=""), subject_extensions=[ ExtensionUnit(relation=Curie("rdfs", "subClassOf"), term=Curie("UniProtKB", "P12345")) ], object_extensions=[ ConjunctiveSet(elements=[ ExtensionUnit(relation=Curie("BFO", "0000050"), term=Curie("X", "1")) ]) ], properties=dict()) out = io.StringIO() writer = assocwriter.GafWriter(file=out) # `out` will get written with gaf lines from the above assocation object expected = "PomBase\tSPAC25B8.17\typf1\t\tGO:0000006\tGO_REF:0000024\tISO\tSGD:S000001583\tC\tintramembrane aspartyl protease of the perinuclear ER membrane Ypf1 (predicted)\tppp81\tprotein\ttaxon:4896|taxon:555\t20150305\tPomBase\tpart_of(X:1)\tUniProtKB:P12345" writer.write_assoc(association) print(out.getvalue()) gaf = [ line.strip("\n") for line in out.getvalue().split("\n") if not line.startswith("!") ][0] assert expected == gaf
def test_obsolete_replair_of_withfrom(): p = GafParser(config=assocparser.AssocParserConfig( ontology=OntologyFactory().create(OBSOLETE_ONT))) assocs = p.parse(open(ZFIN_GAF, "r"), skipheader=True) assert assocs[0].evidence.with_support_from == [ ConjunctiveSet(elements=[Curie(namespace='GO', identity='0005912')]) ] # Reset parser report p = GafParser(config=assocparser.AssocParserConfig( ontology=OntologyFactory().create(OBSOLETE_ONT))) p.version = "2.2" obsolete_no_replacement_line = "FB\tFBgn0003334\tScm\tlocated_in\tGO:0005634\tFB:FBrf0179383|PMID:15280237\tIC\tGO:0016458\tC\tSex comb on midleg\tCG9495|SCM|Sex Comb on Midleg|Sex Comb on the Midleg|Sex combs on midleg|Sex combs on midlegs|Su(z)302|l(3)85Ef|scm|sex comb on midleg\tprotein\ttaxon:7227\t20050203\tUniProt\t\t" assoc_result = p.parse_line(obsolete_no_replacement_line) assert assoc_result.associations == [] assert p.report.to_report_json( )["messages"]["gorule-0000020"][0]["obj"] == "GO:0016458"