Example #1
0
def build_graph(degree_sequence, nodes=None):
    ''' Generates undirected graph of the given degree
        sequence. If nodes are provided, each node will
        have the corresponding data. '''

    if not is_valid_degree_sequence(degree_sequence):
        raise InvalidDegreeSequence('Invalid degree sequence!')

    graph = Graph()
    degree_node = []

    if not nodes:
        nodes = count()

    for item in map(lambda x, y: [x, y], degree_sequence, nodes):
        degree_node.append(item)

    degree_node.sort(reverse=True)
    degree_node = deque(degree_node)

    while degree_node:
        degree, node = degree_node.popleft()

        if degree == 0:
            graph.add_node(node)
            continue

        for other_dn in islice(degree_node, 0, degree):
            graph.add_edge(node, other_dn[1])
            other_dn[0] -= 1

    return graph
Example #2
0
def test_edge_can_be_successfully_added_to_the_graph():
  node_a = Node('a')
  node_b = Node('b')
  graph = Graph()
  graph.add_node(node_a)
  graph.add_node(node_b)
  graph.add_edge(node_a,node_b,1)
  assert graph._adjacency_list[node_a][0].node == node_b
Example #3
0
def test_neighbors_are_returned_with_the_weight_between_nodes_included():
  node_a = Node('a')
  node_b = Node('b')
  node_c = Node('c')
  graph = Graph()
  graph.add_node(node_a)
  graph.add_node(node_b)
  graph.add_node(node_c)
  graph.add_edge(node_a,node_b,1)
  graph.add_edge(node_a,node_c,2)
  assert graph.get_neighbors(node_a) == [{'b': 1}, {'c': 2}]
Example #4
0
def test_all_appropriate_neighbors_can_be_retrieved_from_the_graph():
  node_a = Node('a')
  node_b = Node('b')
  node_c = Node('c')
  graph = Graph()
  graph.add_node(node_a)
  graph.add_node(node_b)
  graph.add_node(node_c)
  graph.add_edge(node_a,node_b,1)
  graph.add_edge(node_a,node_c,2)
  assert graph.get_neighbors(node_a) == [{'b': 1}, {'c': 2}]
Example #5
0
def test_depth_first():
  node_a = Node('a')
  node_b = Node('b')
  node_c = Node('c')
  node_d = Node('d')
  node_e = Node('e')
  node_f = Node('f')
  node_g = Node('g')
  node_h = Node('h')

  graph = Graph()

  graph.add_node(node_a)
  graph.add_node(node_b)
  graph.add_node(node_c)
  graph.add_node(node_d)
  graph.add_node(node_e)
  graph.add_node(node_f)
  graph.add_node(node_g)
  graph.add_node(node_h)

  graph.add_edge(node_a,node_b)
  graph.add_edge(node_a,node_d)
  graph.add_edge(node_b,node_a)
  graph.add_edge(node_b,node_c)
  graph.add_edge(node_b,node_d)
  graph.add_edge(node_c,node_b)
  graph.add_edge(node_c,node_g)
  graph.add_edge(node_d,node_a)
  graph.add_edge(node_d,node_b)
  graph.add_edge(node_d,node_e)
  graph.add_edge(node_d,node_f)
  graph.add_edge(node_d,node_h)
  graph.add_edge(node_e,node_d)
  graph.add_edge(node_f,node_d)
  graph.add_edge(node_f,node_h)
  graph.add_edge(node_g,node_c)
  graph.add_edge(node_h,node_d)
  graph.add_edge(node_h,node_f)

  assert(graph.depth_first(node_a)) == ['a', 'b', 'c', 'g', 'd', 'e', 'f', 'h']
Example #6
0
def test_the_proper_size_is_returned_representing_the_number_of_nodes_in_the_graph():
  node_a = Node('a')
  node_b = Node('b')
  node_c = Node('c')
  node_d = Node('d')
  node_e = Node('e')
  node_f = Node('f')
  graph = Graph()
  graph.add_node(node_a)
  graph.add_node(node_b)
  graph.add_node(node_c)
  graph.add_node(node_d)
  graph.add_node(node_e)
  graph.add_node(node_f)
  assert graph.size() == 6
Example #7
0
def test_a_collection_of_all_nodes_can_be_properly_retrieved_from_the_graph():
  node_a = Node('a')
  node_b = Node('b')
  node_c = Node('c')
  node_d = Node('d')
  node_e = Node('e')
  node_f = Node('f')
  graph = Graph()
  graph.add_node(node_a)
  graph.add_node(node_b)
  graph.add_node(node_c)
  graph.add_node(node_d)
  graph.add_node(node_e)
  graph.add_node(node_f)
  assert graph.get_nodes() == ['a', 'b', 'c', 'd', 'e', 'f']
Example #8
0
def test_bussiness_trip():
  node_pandora = Node('pandora')
  node_arendelle = Node('arendelle')
  node_metroville = Node('metroville')
  node_monstropolis = Node('monstropolis')
  node_naboo = Node('naboo')
  node_narnia = Node('narnia')

  trip = Graph()

  trip.add_node(node_pandora)
  trip.add_node(node_arendelle)
  trip.add_node(node_metroville)
  trip.add_node(node_monstropolis)
  trip.add_node(node_naboo)
  trip.add_node(node_narnia)

  trip.add_edge(node_pandora,node_arendelle,150)
  trip.add_edge(node_pandora,node_metroville,82)
  trip.add_edge(node_arendelle,node_pandora,150)
  trip.add_edge(node_arendelle,node_metroville,99)
  trip.add_edge(node_arendelle,node_monstropolis,42)
  trip.add_edge(node_metroville,node_pandora,82)
  trip.add_edge(node_metroville,node_arendelle,99)
  trip.add_edge(node_metroville,node_monstropolis,105)
  trip.add_edge(node_metroville,node_naboo,26)
  trip.add_edge(node_metroville,node_narnia,37)
  trip.add_edge(node_monstropolis,node_arendelle,42)
  trip.add_edge(node_monstropolis,node_metroville,105)
  trip.add_edge(node_monstropolis,node_naboo,73)
  trip.add_edge(node_naboo,node_monstropolis,73)
  trip.add_edge(node_naboo,node_metroville,26)
  trip.add_edge(node_naboo,node_narnia,250)
  trip.add_edge(node_narnia,node_metroville,37)
  trip.add_edge(node_narnia,node_naboo,250)

  assert business_trip(trip,['Metroville', 'Pandora' ]) == 82
  assert business_trip(trip,['Arendelle', 'Monstropolis', 'Naboo']) == 115
  assert business_trip(trip,['Naboo', 'Pandora']) == None
  assert business_trip(trip,['Narnia', 'Arendelle', 'Naboo']) == None
Example #9
0
def test_a_graph_with_only_one_node_and_edge_can_be_properly_returned():
  node_a = Node('a')
  graph = Graph()
  graph.add_node(node_a)
  graph.add_edge(node_a,node_a,1)
  assert graph._adjacency_list
Example #10
0
def test_node_can_be_successfully_added_to_the_graph():
  node_a = Node('a')
  graph = Graph()
  graph.add_node(node_a)
  assert node_a in graph._adjacency_list
  assert graph._adjacency_list[node_a] == []
Example #11
0
 def test_with_one_and_only(self):
     t = Graph()
     t.add_node(1, p=1256)
     self.assertEqual(max_independent_set(t, 1, weight_attribute="p"), (1256, {1}))
Example #12
0
 def test_centers_one_node_tree(self):
     tree = Graph()
     tree.add_node(1)
     self.assertEqual(centers(tree), {1, })