Esempio n. 1
0
 def test_to_dict(self, lineage_data):
     lineage1 = Lineage(**lineage_data["good"])
     assert lineage1.to_dict("Class") == {
         "Kingdom": "Bacteria",
         "Phylum": "P1",
         "Class": "C1",
     }
Esempio n. 2
0
 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"
     )
Esempio n. 3
0
 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)
Esempio n. 4
0
 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"])
Esempio n. 5
0
 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
Esempio n. 6
0
 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"))
Esempio n. 7
0
 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])
Esempio n. 8
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
Esempio n. 9
0
 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
Esempio n. 10
0
 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)
Esempio n. 11
0
 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__"
Esempio n. 12
0
 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"])