"""Provides support for Qiime formats."""frommicom.utilimportload_pickleimportosfromosimportpathimportpandasaspdfromzipfileimportZipFilefromruamel.yamlimportYAMLfromtempfileimportTemporaryDirectory
[docs]defmetadata(artifact):"""Read metadata from a Qiime 2 artifact."""withZipFile(artifact)aszf:files=zf.namelist()meta=[fiforfiinfilesif"metadata.yaml"infiand"provenance"notinfi]iflen(meta)==0:raiseValueError("%s is not a valid Qiime 2 artifact :("%artifact)withzf.open(meta[0])asmf:meta=yaml.load(mf)returnmeta
[docs]defload_qiime_model_db(artifact,extract_path):"""Prepare a model database for use."""ifnotpath.exists(extract_path):os.mkdir(extract_path)meta=metadata(artifact)ifmeta["type"]!="MetabolicModels[JSON]":raiseValueError("%s is not a q2-micom model database :("%artifact)uuid=meta["uuid"]withZipFile(artifact)aszf:zf.extractall(extract_path)manifest=pd.read_csv(path.join(extract_path,uuid,"data","manifest.csv"))manifest["file"]=[path.join(extract_path,uuid,"data",f)forfinmanifest.file]returnmanifest
[docs]defload_qiime_manifest(artifact):"""Prepare community models for use."""meta=metadata(artifact)ifmeta["type"]notin_has_manifest:raiseValueError("%s is not a supported q2-micom artifact :("%artifact)uuid=meta["uuid"]withZipFile(artifact)aszf,TemporaryDirectory(prefix="micom_")astd:zf.extract(uuid+"/data/manifest.csv",str(td))manifest=pd.read_csv(path.join(str(td),uuid,"data","manifest.csv"))returnmanifest
[docs]defload_qiime_model(artifact,id):"""Load a model from a Qiime 2 artifact."""meta=metadata(artifact)ifmeta["type"]!="CommunityModels[Pickle]":raiseValueError("%s is not a q2-micom community model collection :("%artifact)uuid=meta["uuid"]withZipFile(artifact)aszf,TemporaryDirectory(prefix="micom_")astd:try:zf.extract("%s/data/%s.pickle"%(uuid,id),str(td))exceptException:raiseValueError("Could not extract model with ID `%s` :(. ""Are you sure the ID is valid?"%id)model=load_pickle(path.join(str(td),uuid,"data","%s.pickle"%id))returnmodel
[docs]defload_qiime_medium(artifact):"""Load a growth medium/diet from a Qiime 2 artifact."""meta=metadata(artifact)ifnotmeta["type"].startswith("MicomMedium["):raiseValueError("%s is not a q2-micom medium :("%artifact)uuid=meta["uuid"]withZipFile(artifact)aszf,TemporaryDirectory(prefix="micom_")astd:zf.extract(uuid+"/data/medium.csv",str(td))medium=pd.read_csv(path.join(str(td),uuid,"data","medium.csv"))medium.index=medium.reactionreturnmedium
[docs]defload_qiime_feature_table(artifact):"""Load a feature table from a Qiime 2 artifact."""try:importbiomexceptImportError:raiseImportError("Reading Qiime 2 FeatureTables requires the `biom-format` package.""You can install it with:\n pip install numpy Cython\n""pip install biom-format")meta=metadata(artifact)ifnotmeta["type"].startswith("FeatureTable["):raiseValueError("%s is not a Qiime 2 FeatureTable :("%artifact)uuid=meta["uuid"]withZipFile(artifact)aszf,TemporaryDirectory(prefix="micom_")astd:zf.extract(uuid+"/data/feature-table.biom",str(td))table=biom.load_table(path.join(str(td),uuid,"data","feature-table.biom"))returntable
[docs]defload_qiime_taxonomy(artifact):"""Load taxonomy feature data from a Qiime 2 artifact."""meta=metadata(artifact)ifnotmeta["type"].startswith("FeatureData[Taxonomy]"):raiseValueError("%s is not a Qiime 2 FeatureData object :("%artifact)uuid=meta["uuid"]withZipFile(artifact)aszf,TemporaryDirectory(prefix="micom_")astd:zf.extract(uuid+"/data/taxonomy.tsv",str(td))taxa=pd.read_csv(path.join(str(td),uuid,"data","taxonomy.tsv"),sep="\t",index_col=0)["Taxon"]returntaxa