def test_to_dict(self, lineage_data): lineage1 = Lineage(**lineage_data["good"]) assert lineage1.to_dict("Class") == { "Kingdom": "Bacteria", "Phylum": "P1", "Class": "C1", }
def test_to_str(self, lineage_data): lineage1 = Lineage(**lineage_data["good"]) assert ( lineage1.to_str(style="gg", level="Family") == "k__Bacteria;p__P1;c__C1;o__O1;f__F1" ) assert ( lineage1.to_str(style="silva", level="Order") == "D_0__Bacteria;D_1__P1;D_2__C1;D_3__O1" )
def test_sub(self, lineage_data): lineage1 = Lineage(**lineage_data["good"]) lineage2 = Lineage(**{**lineage_data["good"], **{"Order": "O2"}}) assert lineage1 - lineage2 == lineage2 - lineage1 common = { k: v for k, v in lineage_data["good"].items() if k in ["Kingdom", "Phylum", "Class"] } assert lineage1 - lineage2 == Lineage(**common)
def test_init(self, lineage_data): good_lineage = Lineage(**lineage_data["good"]) assert good_lineage.Kingdom == lineage_data["good"]["Kingdom"] assert good_lineage.Phylum == lineage_data["good"]["Phylum"] assert good_lineage.Class == lineage_data["good"]["Class"] assert good_lineage.Order == lineage_data["good"]["Order"] assert good_lineage.Family == lineage_data["good"]["Family"] assert good_lineage.Genus == lineage_data["good"]["Genus"] assert good_lineage.Species == lineage_data["good"]["Species"] with pytest.warns(RuntimeWarning): Lineage(**lineage_data["bad"])
def test_taxid(self, lineage_data): lineage1 = Lineage.from_str( "k__Bacteria;p__Firmicutes;c__Clostridia;o__Clostridiales;f__Ruminococcaceae" ) assert lineage1.taxid[1] == 216572 lineage2 = Lineage.from_str( "k__Bacteria;p__Proteobacteria;c__Gammaproteobacteria;o__Enterobacterales;f__Enterobacteriaceae;g__Escherichia;s__coli" ) assert lineage2.taxid[1] == 562 lineage3 = Lineage.from_str( "k__Bacteria;p__Proteobacteria;c__Gammaproteobacteria;o__Enterobacterales;f__Enterobacteriaceae;g__Escherichia;s__dragon" ) with pytest.warns(RuntimeWarning): assert lineage3.taxid[1] == 561
def test_filter(self, stool_biom): otu_inst = Otu(stool_biom) query = "Firmicutes" func = lambda values, id_, md: Lineage(**md).Phylum == query md = otu_inst.obs_metadata ind = md.index[md.Phylum == query] otu_filtered = otu_inst.filter(func=func) assert otu_filtered.otu_data.shape[1] == otu_inst.otu_data.shape[1] assert otu_filtered.otu_data.shape[0] < otu_inst.otu_data.shape[0] assert set(ind) == set(otu_filtered.otu_data.ids("observation"))
def test_partition(self, stool_biom): otu_inst = Otu(stool_biom) func = lambda id_, md: Lineage(**md).get_superset("Phylum") md = otu_inst.obs_metadata gen = otu_inst.partition(axis="observation", func=func) partition_dict = {k.name[1]: v for k, v in gen} assert set(partition_dict) == set(md.Phylum) assert len(set(v.otu_data.shape[1] for v in partition_dict.values())) == 1 assert (sum( v.otu_data.shape[0] for v in partition_dict.values()) == otu_inst.otu_data.shape[0])
def network_data(network_json_files): """ Fixture that loads the network for the Network contructor """ data = {"good": [], "bad": []} for kind in {"good", "bad"}: for file in network_json_files[kind]: with open(file, "r") as fid: network_data = simplejson.load(fid) non_meta_keys = ["nodes", "links"] metadata = {k: v for k, v in network_data.items() if k not in non_meta_keys} cmetadata = network_data.get("computational_metadata", {}) interaction_type = network_data.get("interaction_type", "") interaction_threshold = cmetadata.get("interaction_threshold", np.nan) pvalue_threshold = cmetadata.get("pvalue_threshold", np.nan) pvalue_correction = None directed = ( True if network_data.get("directionality", "") == "directed" else False ) nodes = [] links = [] lineages = [] children_map = {} for node in network_data["nodes"]: try: node_id = node["id"] children_map[node_id] = node["children"] except KeyError: node_id = "missing" nodes.append(node_id) try: lineage = Lineage.from_str(node["lineage"]).to_dict("Species") except KeyError: lineage = Lineage().to_dict("Species") abundance = node.get("abundance", np.nan) if abundance is not None: lineages.append({**lineage, **dict(Abundance=abundance)}) else: lineages.append(lineage) obs_metadata = pd.DataFrame(lineages, index=nodes) for link in network_data["links"]: source, target = link.get("source", "missing"), link.get( "target", "missing" ) links.append( ( source, target, { "weight": link.get("weight", np.nan), "pvalue": link.get("pvalue", np.nan), }, ) ) data[kind].append( ( nodes, links, metadata, cmetadata, obs_metadata, children_map, interaction_type, interaction_threshold, pvalue_threshold, pvalue_correction, directed, ) ) return data
def test_get_superset(self, lineage_data): lineage1 = Lineage(**lineage_data["good"]) lineage2 = Lineage(**{**lineage_data["good"], **{"Genus": "", "Species": ""}}) assert lineage1.get_superset("Family") == lineage2
def test_from_str(self, lineage_data): lineage1 = Lineage(**lineage_data["good"]) lineage2 = Lineage.from_str(str(lineage1)) assert lineage1 == lineage2 assert str(lineage1) == str(lineage2)
def test_str(self, lineage_data): lineage1 = Lineage(**lineage_data["good"]) assert str(lineage1) == "k__Bacteria;p__P1;c__C1;o__O1;f__F1;g__G1;s__S1" lineage2 = Lineage(**{**lineage_data["good"], **{"Genus": "", "Species": ""}}) assert str(lineage2) == "k__Bacteria;p__P1;c__C1;o__O1;f__F1;g__;s__"
def test_name(self, lineage_data): lineage1 = Lineage(**lineage_data["good"]) assert lineage1.name == ("Species", lineage_data["good"]["Species"]) lineage2 = Lineage(**{**lineage_data["good"], **{"Genus": "", "Species": ""}}) assert lineage2.name == ("Family", lineage_data["good"]["Family"])