def test_distance_based_on_molecular_formula():
    assert_equal(
        distance_based_on_molecular_formula(TEST_MODEL.metabolites[0], TEST_MODEL.metabolites[0], normalize=False), 0)
    assert_equal(
        distance_based_on_molecular_formula(TEST_MODEL.metabolites[0], TEST_MODEL.metabolites[0], normalize=True), 0)
    assert_equal(
        distance_based_on_molecular_formula(TEST_MODEL.metabolites[0], TEST_MODEL.metabolites[1], normalize=False),
        58.0)
    assert_equal(
        distance_based_on_molecular_formula(TEST_MODEL.metabolites[0], TEST_MODEL.metabolites[1], normalize=True),
        0.6590909090909091)
def test_distance_based_on_molecular_formula():
    assert_equal(
        distance_based_on_molecular_formula(TEST_MODEL.metabolites[0], TEST_MODEL.metabolites[0], normalize=False), 0
    )
    assert_equal(
        distance_based_on_molecular_formula(TEST_MODEL.metabolites[0], TEST_MODEL.metabolites[0], normalize=True), 0
    )
    assert_equal(
        distance_based_on_molecular_formula(TEST_MODEL.metabolites[0], TEST_MODEL.metabolites[1], normalize=False), 58.0
    )
    assert_equal(
        distance_based_on_molecular_formula(TEST_MODEL.metabolites[0], TEST_MODEL.metabolites[1], normalize=True),
        0.6590909090909091,
    )
示例#3
0
    def test_distance_based_on_molecular_formula(
            self):  # from network_analysis.util
        met1 = Metabolite("H2O", formula="H2O")
        met2 = Metabolite("H2O2", formula="H2O2")
        met3 = Metabolite("C6H12O6", formula="C6H12O6")

        self.assertEqual(
            distance_based_on_molecular_formula(met1, met2, normalize=False),
            1)
        self.assertEqual(
            distance_based_on_molecular_formula(met1, met2, normalize=True),
            1. / 7)

        self.assertEqual(
            distance_based_on_molecular_formula(met2, met3, normalize=False),
            20)
        self.assertEqual(
            distance_based_on_molecular_formula(met2, met3, normalize=True),
            20. / 28)

        self.assertEqual(
            distance_based_on_molecular_formula(met1, met3, normalize=False),
            21)
        self.assertEqual(
            distance_based_on_molecular_formula(met1, met3, normalize=True),
            21. / 27)
示例#4
0
def reactions_to_network(reactions, max_distance=0.3):
    """Convert a list of reactions into a networkx graph.

    Parameters
    ----------
    reactions : list
        The list of reactions.
    max_distance : float, optional
        A threshold on the normalized distance between two compounds. If distance is above this threshold,
        no edge between those compounds will be created.

    Returns
    -------
    networkx.MultiDiGraph

    See Also
    --------
    distance_based_on_molecular_formula
    """
    edges = list()
    for reaction in reactions:
        substrates = list(reaction.reactants)
        for substrate in substrates:
            products = list(reaction.products)
            for product in products:
                try:
                    distance = distance_based_on_molecular_formula(
                        substrate, product, normalize=True)
                except ValueError:
                    distance = 0.
                if distance <= max_distance:
                    if reaction.reversibility:
                        edges.append(
                            (product, substrate, dict(reaction=reaction)))
                        edges.append(
                            (substrate, product, dict(reaction=reaction)))
                    elif reaction.lower_bound > 0:
                        edges.append(
                            (substrate, product, dict(reaction=reaction)))
                    else:
                        edges.append(
                            (product, substrate, dict(reaction=reaction)))

    multi_graph = nx.MultiDiGraph(edges)
    return multi_graph
示例#5
0
    def test_distance_based_on_molecular_formula(self):  # from network_analysis.util
        met1 = Metabolite("H2O", formula="H2O")
        met2 = Metabolite("H2O2", formula="H2O2")
        met3 = Metabolite("C6H12O6", formula="C6H12O6")

        assert distance_based_on_molecular_formula(met1, met2, normalize=False) == 1
        assert distance_based_on_molecular_formula(met1, met2, normalize=True) == 1. / 7

        assert distance_based_on_molecular_formula(met2, met3, normalize=False) == 20
        assert distance_based_on_molecular_formula(met2, met3, normalize=True) == 20. / 28

        assert distance_based_on_molecular_formula(met1, met3, normalize=False) == 21
        assert distance_based_on_molecular_formula(met1, met3, normalize=True) == 21. / 27
示例#6
0
    def test_distance_based_on_molecular_formula(self):  # from network_analysis.util
        met1 = Metabolite("H2O", formula="H2O")
        met2 = Metabolite("H2O2", formula="H2O2")
        met3 = Metabolite("C6H12O6", formula="C6H12O6")

        self.assertEqual(distance_based_on_molecular_formula(met1, met2, normalize=False), 1)
        self.assertEqual(distance_based_on_molecular_formula(met1, met2, normalize=True), 1. / 7)

        self.assertEqual(distance_based_on_molecular_formula(met2, met3, normalize=False), 20)
        self.assertEqual(distance_based_on_molecular_formula(met2, met3, normalize=True), 20. / 28)

        self.assertEqual(distance_based_on_molecular_formula(met1, met3, normalize=False), 21)
        self.assertEqual(distance_based_on_molecular_formula(met1, met3, normalize=True), 21. / 27)
示例#7
0
def reactions_to_network(reactions, max_distance=0.3):
    """Convert a list of reactions into a networkx graph.

    Parameters
    ----------
    reactions : list
        The list of reactions.
    max_distance : float, optional
        A threshold on the normalized distance between two compounds. If distance is above this threshold, no edge between
        those compounds will be created.

    Returns
    -------
    networkx.MultiDiGraph

    See Also
    --------
    distance_based_on_molecular_formula
    """
    edges = list()
    for reaction in reactions:
        substrates = list(reaction.reactants)
        for substrate in substrates:
            products = list(reaction.products)
            for product in products:
                try:
                    distance = distance_based_on_molecular_formula(substrate, product, normalize=True)
                except ValueError:
                    distance = 0.
                if distance <= max_distance:
                    if reaction.reversibility:
                        edges.append((product, substrate, dict(reaction=reaction)))
                        edges.append((substrate, product, dict(reaction=reaction)))
                    elif reaction.lower_bound > 0:
                        edges.append((substrate, product, dict(reaction=reaction)))
                    else:
                        edges.append((product, substrate, dict(reaction=reaction)))

    multi_graph = nx.MultiDiGraph(edges)
    return multi_graph