Skip to content
Snippets Groups Projects
Commit 81ebcff8 authored by Brandon Rodriguez's avatar Brandon Rodriguez
Browse files

Add graph list, sorted by number of edge connections

parent 5e720a8c
Branches
No related merge requests found
......@@ -24,7 +24,8 @@ node_1 = test_graph_1.add_node(edges_in=[node_0, ])
node_2 = test_graph_1.add_node(edges_in=[node_1, ])
node_3 = test_graph_1.add_node(edges_in=[node_2, ])
node_4 = test_graph_1.add_node(edges_in=[node_3, ], edges_out=[node_0, ])
logger.info(test_graph_1.info_string())
test_graph_1.sort_edge_count_list()
# logger.info(test_graph_1.info_string())
# Map graph to visual representation.
mapper = data_mapping.DataMapping(test_graph_1, None)
......@@ -41,6 +42,9 @@ node_1 = test_graph_2.add_node(edges_in=[node_0, ])
node_2 = test_graph_2.add_node(edges_in=[node_1, ])
node_3 = test_graph_2.add_node(edges_in=[node_1, node_2, ], edges_out=[node_2, ])
node_4 = test_graph_2.add_node(edges_in=[node_3, ], edges_out=[node_0, node_2, ])
# Map graph to visual representation.
test_graph_2.sort_edge_count_list()
mapper = data_mapping.DataMapping(test_graph_1, test_graph_2)
mapper.draw_map()
......
......@@ -18,8 +18,9 @@ class Graph():
"""
def __init__(self, *args, **kwargs):
self.name = None # Optional name to identify graph.
self.nodes = {} # Dict object of all nodes within graph.
self.nodes = {} # Dict object of all nodes within graph.
self._auto_counter = 0 # Int to count "nameless" nodes added to graph.
self.edge_count_list = [] # List keeping track of edges each node has.
# Attempt to set name.
try:
......@@ -64,13 +65,17 @@ class Graph():
"""
Adds new node to graph.
"""
# Create node.
new_node = Node(name=name)
if edges_in is not None or edges_out is not None:
new_node.add_edge(edges_in, edges_out)
if new_node.name is None:
count_value = self.auto_count()
new_node.identifier = count_value
# Add to node dict and edge_count list.
self.nodes[new_node.identifier] = new_node
self.edge_count_list.append(new_node)
return new_node
......@@ -101,6 +106,9 @@ class Graph():
# Find in "edges_out" list and remove.
edge_node.remove_edge(edges_out=[removed_node, ])
# Remove from edge_count list.
self.edge_count_list.remove(removed_node)
return removed_node
except KeyError:
logger.warning('Invalid key passed. Cannot remove node from graph.')
......@@ -122,6 +130,24 @@ class Graph():
for key, value in temp_dict.items():
del self.nodes[key]
def sort_edge_count_list(self):
"""
Sorts edge_count list.
"""
# print_string = ''
# logger.info('List before sorting: ')
# for node in self.edge_count_list:
# print_string += str(node.info_string() + ' ')
# logger.info(print_string)
self.edge_count_list = sorted(self.edge_count_list, key=lambda node: (len(node.edges_in) + len(node.edges_out)), reverse=True)
# print_string = ''
# logger.info('List after sorting: ')
# for node in self.edge_count_list:
# print_string += str(node.info_string() + ' ')
# logger.info(print_string)
def info_string(self, only_name=False, only_edges_in=False, only_edges_out=False):
"""
Returns information about graph.
......
......@@ -87,6 +87,28 @@ class Graph(unittest.TestCase):
node = self.test_graph.get_node(0)
self.assertEqual(node.identifier, 0)
def test_edge_count(self):
# Test with no edges.
self.assertEqual(self.test_graph.edge_count_list, [])
# Test with one node.
node_0 = self.test_graph.add_node()
self.assertEqual(self.test_graph.edge_count_list, [node_0, ])
# Test multiple nodes.
node_1 = self.test_graph.add_node()
node_2 = self.test_graph.add_node(edges_in=[node_1, ], edges_out=[node_1, ])
node_3 = self.test_graph.add_node(edges_in=[node_2, ], edges_out=[node_1, node_2, ])
node_4 = self.test_graph.add_node()
node_5 = self.test_graph.add_node(edges_out=[node_4])
self.assertEqual(self.test_graph.edge_count_list, [node_0, node_1, node_2, node_3, node_4, node_5, ])
node_6 = self.test_graph.add_node()
self.test_graph.sort_edge_count_list()
self.assertEqual(self.test_graph.edge_count_list, [node_0, node_1, node_2, node_3, node_4, node_5, node_6])
# Note: The only way (I can find) to check that list is properly sorted is to print before and after, and
# manually check.
class Node(unittest.TestCase):
def setUp(self):
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment