Ejemplo n.º 1
0
def is_triangle_free(G):
    """Returns True if *G* is triangle-free, and False otherwise.

    A graph is *triangle-free* if it contains no induced subgraph isomorphic to
    the complete graph on 3 vertices.

    Parameters
    ----------
    G : NetworkX graph
        An undirected graph.

    Returns
    -------
    boolean
        True if G is triangle-free, False otherwise.

    Examples
    --------
    >>> G = gp.complete_graph(4)
    >>> gp.is_triangle_free(G)
    False
    >>> G = gp.cycle_graph(5)
    >> gp.is_triangle_free(G)
    True
    """
    # define a triangle graph, also known as the complete graph K_3
    triangle = gp.complete_graph(3)

    # enumerate over all possible combinations of 3 vertices contained in G
    for S in set(itertools.combinations(G.nodes(), 3)):
        H = G.subgraph(list(S))
        if gp.is_isomorphic(H, triangle):
            return False
    # if the above loop completes, the graph is triangle free
    return True
Ejemplo n.º 2
0
 def test_contracting_two_nodes(self):
     G = gp.complete_graph(3)
     gp.contract_nodes(G, [0, 1])
     assert G.has_node(0) == True
     assert G.has_node(2) == True
     assert G.has_node(1) == False
     assert G.has_edge(0, 2) == True
     assert G.has_edge(0, 1) == False
     assert G.has_edge(1, 2) == False
Ejemplo n.º 3
0
 def test_contracting_single_node_does_not_change_graph(self):
     G = gp.complete_graph(3)
     gp.contract_nodes(G, 0)
     assert G.has_node(0) == True
     assert G.has_node(2) == True
     assert G.has_node(1) == True
     assert G.has_edge(0, 2) == True
     assert G.has_edge(0, 1) == True
     assert G.has_edge(1, 2) == True
def graph_property_check(G, property):
    if property == "is_planar":
        return gp.check_planarity(G)[0]
    elif property == "is_regular":
        return gp.min_degree(G) == gp.max_degree(G)
    elif property == "is_cubic":
        return gp.min_degree(G) == 3 and gp.max_degree(G) == 3
    elif property == "is_not_K_n":
        return gp.is_isomorphic(G, gp.complete_graph(gp.number_of_nodes(G))) == False
    elif property == "is_triangle_free":
        return set(gp.triangles(G).values()) == {0}
    else:
        return getattr(gp, property)(G)
Ejemplo n.º 5
0
 def test_elimination_sequence_of_complete_graph(self):
     G = gp.complete_graph(5)
     assert gp.elimination_sequence(G) == [4, 3, 2, 1, 0]
Ejemplo n.º 6
0
 def test_common_neighbors_of_pair_of_nodes_in_K3_is_third_node(self):
     G = gp.complete_graph(3)
     assert gp.common_neighbors(G, [0, 1]) == [2]
Ejemplo n.º 7
0
def test_chromatic_number_of_complete_graph_is_order():
    for i in range(1, 11):
        G = gp.complete_graph(i)
        assert (gp.chromatic_number(G, method='ram-rama') == G.order())
        assert (gp.chromatic_number(G, method='ilp') == G.order())
Ejemplo n.º 8
0
 def test_sub_2_domination_number_of_complete_graph(self):
     for i in range(1, 10):
         G = gp.complete_graph(i)
         n = G.order()
         val = n / (1 + (0.5 * (n - 1)))
         assert gp.sub_k_domination_number(G, 2) == ceil(val)
Ejemplo n.º 9
0
 def test_annihilation_number_of_complete_graph_is_half_of_nodes(self):
     for i in range(2, 11):
         G = gp.complete_graph(i)
         assert gp.annihilation_number(G) == floor(G.order() / 2)
Ejemplo n.º 10
0
 def test_K4_is_not_triangle_free(self):
     G = gp.complete_graph(4)
     assert gp.is_triangle_free(G) == False
Ejemplo n.º 11
0
 def test_common_neighbors_of_single_node_in_K3_is_other_two_nodes(self):
     G = gp.complete_graph(3)
     assert gp.common_neighbors(G, [0]) == [1, 2]
Ejemplo n.º 12
0
 def test_power_domination_number_of_complete_graph_is_1(self):
     for i in range(1, 11):
         G = gp.complete_graph(i)
         assert gp.power_domination_number(G) == 1
Ejemplo n.º 13
0
def test_2_independence_number_of_complete_graph_is_2():
    for i in range(2, 11):
        G = gp.complete_graph(i)
        assert gp.k_independence_number(G, 2) == 2
Ejemplo n.º 14
0
 def test_residue_of_complete_graph_is_1(self):
     for i in range(1, 11):
         G = gp.complete_graph(i)
         assert gp.residue(G) == 1
Ejemplo n.º 15
0
 def test_2_residue_of_complete_graph_is_three_halves(self):
     for i in range(3, 13):
         G = gp.complete_graph(i)
         assert gp.k_residue(G, 2) == 1.5
Ejemplo n.º 16
0
 def test_K5_is_complete_graph(self):
     G = gp.complete_graph(5)
     assert gp.is_complete_graph(G) == True
Ejemplo n.º 17
0
 def test_K4_is_claw_free(self):
     G = gp.complete_graph(4)
     assert gp.is_claw_free(G) == True
Ejemplo n.º 18
0
 def test_bull_is_not_bull_free(self):
     G = gp.complete_graph(3)
     G.add_edge(1, 3)
     G.add_edge(2, 4)
     assert gp.is_bull_free(G) == False
Ejemplo n.º 19
0
def test_independence_number_of_complete_graph_is_1():
    for i in range(1, 13):
        G = gp.complete_graph(i)
        assert gp.independence_number(G, method="bf") == 1
        assert gp.independence_number(G, method="ilp") == 1
Ejemplo n.º 20
0
 def test_process_of_compete_graph(self):
     G = gp.complete_graph(4)
     hh = gp.HavelHakimi(gp.degree_sequence(G))
     p = [[3, 3, 3, 3], [2, 2, 2], [1, 1], [0]]
     assert hh.get_process() == p
Ejemplo n.º 21
0
def test_vertex_cover_number_of_K4_is_3():
    G = gp.complete_graph(4)
    assert gp.vertex_cover_number(G) == 3
Ejemplo n.º 22
0
 def test_elimination_sequence_of_complete_graph(self):
     G = gp.complete_graph(4)
     hh = gp.HavelHakimi(gp.degree_sequence(G))
     e = [3, 2, 1, 0]
     assert hh.get_elimination_sequence() == e
Ejemplo n.º 23
0
 def test_initial_sequence(self):
     G = gp.complete_graph(4)
     hh = gp.HavelHakimi(gp.degree_sequence(G))
     assert hh.get_initial_sequence() == [3, 3, 3, 3]
Ejemplo n.º 24
0
 def test_depth_of_complete_graph_is_order_minus_1(self):
     for i in range(2, 12):
         G = gp.complete_graph(i)
         hh = gp.HavelHakimi(gp.degree_sequence(G))
         assert hh.depth() == G.order() - 1
Ejemplo n.º 25
0
 def test_slater_of_complete_graph_is_1(self):
     for i in range(1, 10):
         G = gp.complete_graph(i)
         assert gp.slater(G) == 1
Ejemplo n.º 26
0
class TestTopologicalIndices:
    @pytest.mark.parametrize(
        "graph, expected_value",
        ((gp.path_graph(2), 1**-0.5), (gp.cycle_graph(3), 1.5),
         (gp.cycle_graph(4), 2), (gp.cycle_graph(5), 2.5)),
    )
    def test_randic_index(self, graph, expected_value):
        """Ensure randic_index returns the expected value for a given graph"""
        assert gp.randic_index(graph) == expected_value

    @pytest.mark.parametrize(
        "graph, k, expected_value",
        (
            (gp.path_graph(2), -0.5, 1**-0.5),
            (gp.cycle_graph(3), -0.5, 1.5),
            (gp.cycle_graph(4), -0.5, 2),
            (gp.cycle_graph(5), -0.5, 2.5),
        ),
    )
    def test_generalized_randic_index(self, graph, k, expected_value):
        """Ensure randic_index returns the expected value for a given graph"""
        assert gp.generalized_randic_index(graph, k) == expected_value

    @pytest.mark.parametrize("graph, expected_value",
                             ((gp.path_graph(2), 1), (gp.cycle_graph(3), 1.5),
                              (gp.complete_graph(4), 2)))
    def test_augmented_randic_index(self, graph, expected_value):
        """Ensure augmented_randic_index returns the expected value for a given graph"""
        assert gp.augmented_randic_index(graph) == expected_value

    @pytest.mark.parametrize("graph, expected_value",
                             ((gp.path_graph(2), 1), (gp.cycle_graph(3), 1.5),
                              (gp.complete_graph(4), 2)))
    def test_harmonic_index(self, graph, expected_value):
        """Ensure augmented_randic_index returns the expected value for a given graph"""
        assert gp.harmonic_index(graph) == expected_value

    @pytest.mark.parametrize(
        "graph, expected_value",
        ((gp.path_graph(2), 0), (gp.cycle_graph(3), 3 * math.sqrt(2) / 2),
         (gp.complete_graph(4), 4.0)),
    )
    def test_atom_bond_connectivity_index(self, graph, expected_value):
        """Ensure augmented_randic_index returns the expected value for a given graph"""
        assert gp.atom_bond_connectivity_index(graph) == expected_value

    @pytest.mark.parametrize(
        "graph, expected_value",
        ((gp.path_graph(2), 1 / math.sqrt(2)), (gp.cycle_graph(3), 1.5),
         (gp.complete_graph(4), 6 / math.sqrt(6))),
    )
    def test_sum_connectivity_index(self, graph, expected_value):
        """Ensure augmented_randic_index returns the expected value for a given graph"""
        assert gp.sum_connectivity_index(graph) == expected_value

    @pytest.mark.parametrize("graph, expected_value",
                             ((gp.path_graph(2), 2.0),
                              (gp.cycle_graph(3), 12.0),
                              (gp.complete_graph(4), 36.0)))
    def test_first_zagreb_index(self, graph, expected_value):
        """Ensure augmented_randic_index returns the expected value for a given graph"""
        assert gp.first_zagreb_index(graph) == expected_value

    @pytest.mark.parametrize("graph, expected_value",
                             ((gp.path_graph(2), 1.0),
                              (gp.cycle_graph(3), 12.0),
                              (gp.complete_graph(4), 54.0)))
    def test_second_zagreb_index(self, graph, expected_value):
        """Ensure augmented_randic_index returns the expected value for a given graph"""
        assert gp.second_zagreb_index(graph) == expected_value
Ejemplo n.º 27
0
 def test_sub_total_domination_number_of_complete_graph_is_2(self):
     for i in range(2, 10):
         G = gp.complete_graph(i)
         assert gp.sub_total_domination_number(G) == 2
Ejemplo n.º 28
0
 def test_irregularity_complete_graph(self):
     for i in range(2, 10):
         G = gp.complete_graph(i)
         assert gp.irregularity(G) == 1.0
Ejemplo n.º 29
0
 def test_clique_number_of_complete_graph_is_order(self):
     for i in range(1, 11):
         G = gp.complete_graph(i)
         assert gp.clique_number(G) == G.order()
Ejemplo n.º 30
0
def test_chromatic_number_of_complete_graph_is_order():
    for i in range(1, 11):
        G = gp.complete_graph(i)
        assert gp.chromatic_number(G, method="ram-rama") == G.order()
        assert gp.chromatic_number(G, method="ilp") == G.order()