Esempio n. 1
0
def test_medium_element(community):
    medium = media.minimal_medium(community, 0.8, 0.8, weights="C")
    assert len(medium) <= 4
    assert medium["EX_glc__D_m"] < 9.5

    # Anaerobic growth
    medium = media.minimal_medium(community, 0.1, 0.1, weights="C")
    assert len(medium) <= 4
    assert medium["EX_glc__D_m"] < 2.0
Esempio n. 2
0
def test_medium_mass(community):
    medium = media.minimal_medium(community, 0.8, 0.8, weights="mass")
    assert len(medium) <= 4
    medium["EX_o2_m"] > 20.0

    # Anaerobic growth
    medium = media.minimal_medium(community, 0.1, 0.1, weights="mass")
    assert len(medium) <= 4
    medium["EX_o2_m"] > 4.0
Esempio n. 3
0
def test_medium_mip(community):
    medium = media.minimal_medium(community, 0.8, 0.8,
                                    minimize_components=True)
    assert len(medium) <= 4
    assert all(medium > 1e-9)

    # Anaerobic growth
    medium = media.minimal_medium(community, 0.1, 0.1,
                                    minimize_components=True)
    assert len(medium) <= 3
    assert all(medium > 1e-9)
Esempio n. 4
0
def _growth(args):
    p, tradeoff, medium = args
    com = load_pickle(p)
    ex_ids = [r.id for r in com.exchanges]
    logger.info(
        "%d/%d import reactions found in model.",
        medium.index.isin(ex_ids).sum(),
        len(medium),
    )
    com.medium = medium[medium.index.isin(ex_ids)]

    # Get growth rates
    try:
        sol = com.cooperative_tradeoff(fraction=tradeoff)
        rates = sol.members
        rates["taxon"] = rates.index
        rates["tradeoff"] = tradeoff
        rates["sample_id"] = com.id
    except Exception:
        logger.warning("Could not solve cooperative tradeoff for %s." % com.id)
        return None

    # Get the minimal medium
    med = minimal_medium(com, 0.95 * sol.growth_rate)

    # Apply medium and reoptimize
    com.medium = med[med > 0]
    sol = com.cooperative_tradeoff(fraction=tradeoff, fluxes=True, pfba=False)
    fluxes = sol.fluxes.loc[:, sol.fluxes.columns.str.startswith("EX_")].copy()
    fluxes["sample_id"] = com.id
    return {"growth": rates, "exchanges": fluxes}
Esempio n. 5
0
def _medium(args):
    """Get minimal medium for a single model."""
    p, min_growth = args
    com = load_pickle(p)
    medium = mm.minimal_medium(com, 0.0, min_growth=min_growth).to_frame()
    medium.columns = ["flux"]
    medium.index.name = "reaction"
    return medium.reset_index()
Esempio n. 6
0
def _growth(args):
    p, tradeoff, medium, weights, atol, rtol = args
    com = load_pickle(p)

    if atol is None:
        atol = com.solver.configuration.tolerances.optimality
    if rtol is None:
        rtol = com.solver.configuration.tolerances.optimality

    com = load_pickle(p)

    if "glpk" in interface_to_str(com.solver.interface):
        logger.error(
            "Community models were not built with a QP-capable solver. "
            "This means that you did not install CPLEX or Gurobi. "
            "If you did install one of the two please file a bug report "
            "at https://github.com/micom-dev/micom/issues."
        )
        return None

    ex_ids = [r.id for r in com.exchanges]
    logger.info(
        "%d/%d import reactions found in model.",
        medium.index.isin(ex_ids).sum(),
        len(medium),
    )
    com.medium = medium[medium.index.isin(ex_ids)]

    # Get growth rates
    try:
        sol = com.cooperative_tradeoff(fraction=tradeoff)
        rates = sol.members
        rates["taxon"] = rates.index
        rates["tradeoff"] = tradeoff
        rates["sample_id"] = com.id
    except Exception:
        logger.warning(
            "Could not solve cooperative tradeoff for %s. "
            "This can often be fixed by chosing ore permissive atol and rtol "
            "arguments." % com.id)
        return None

    # Get the minimal medium and the solution at the same time
    sol = minimal_medium(
        com,
        exchanges=None,
        community_growth=sol.growth_rate,
        min_growth=rates.growth_rate.drop("medium"),
        solution=True,
        weights=weights,
        atol=atol,
        rtol=rtol
    )["solution"]
    fluxes = sol.fluxes.loc[:, sol.fluxes.columns.str.startswith("EX_")].copy()
    fluxes["sample_id"] = com.id
    fluxes["tolerance"] = atol
    anns = annotate_metabolites_from_exchanges(com)
    return {"growth": rates, "exchanges": fluxes, "annotations": anns}
Esempio n. 7
0
def test_complete_mip(community):
    m = media.minimal_medium(community, 0.85, 0.85, minimize_components=True)
    medium = media.complete_medium(community,
                                   m[0:2],
                                   0.8,
                                   0.0,
                                   max_import=20,
                                   minimize_components=True)
    assert len(medium) > 2
Esempio n. 8
0
def _medium(args):
    """Get minimal medium for a single model."""
    s, p, min_growth = args
    com = load_pickle(p)
    # open the bounds
    for ex in com.exchanges:
        ex.bounds = (-1000.0, 1000.0)
    try:
        medium = mm.minimal_medium(com, 0.0, min_growth=min_growth).to_frame()
    except Exception:
        return None
    medium.columns = ["flux"]
    medium["sample_id"] = s
    medium.index.name = "reaction"
    return medium.reset_index()
Esempio n. 9
0
def media_and_gcs(sam):
    com = load_pickle("data/models/" + sam + ".pickle")

    # Get growth rates
    try:
        sol = com.cooperative_tradeoff(fraction=0.5)
        rates = sol.members["growth_rate"].copy()
        rates["community"] = sol.growth_rate
        rates.name = sam
    except Exception:
        logger.warning("Could not solve cooperative tradeoff for %s." % sam)
        return None

    # Get the minimal medium
    med = minimal_medium(com, 0.95 * sol.growth_rate, exports=True)
    med.name = sam

    # Apply medium and reoptimize
    com.medium = med[med > 0]
    sol = com.cooperative_tradeoff(fraction=0.5, fluxes=True, pfba=False)
    fluxes = sol.fluxes
    fluxes["sample"] = sam
    return {"medium": med, "gcs": rates, "fluxes": fluxes}
Esempio n. 10
0
def media_and_gcs(sam):

    com = load_pickle(pickles_path +"/"+ sam)

    # Get growth rates
    try:
        sol = com.cooperative_tradeoff(fraction=trade_off)
        rates = sol.members["growth_rate"].copy()
        rates["community"] = sol.growth_rate
        rates.name = sam
    except Exception:
        logger.warning("Could not solve cooperative tradeoff for %s." % sam)
        return None

    # Get the minimal medium
    med = minimal_medium(com, 0.95 * sol.growth_rate, exports=True)
    med.name = sam

    # Apply medium and reoptimize
    com.medium = med[med > 0]
    sol = com.cooperative_tradeoff(fraction=0.5, fluxes=True, pfba=False) # uses the 'classic' FBA instead of the parsimonious FBA
    fluxes = sol.fluxes
    fluxes["sample"] = sam
    return {"medium": med, "gcs": rates, "fluxes": fluxes}
Esempio n. 11
0
def test_medium_linear(community):
    medium = media.minimal_medium(community, 0.8, 0.8)
    assert len(medium) <= 4
    assert all(medium > 1e-9)
Esempio n. 12
0
def test_medium_wrong_element(community):
    with pytest.raises(ValueError):
        medium = media.minimal_medium(community, 0.8, 0.8, weights="Cat")