77import numpy as np
88import networkx as nx
99import pandas as pd
10- from matplotlib import cm
11- from matplotlib .colors import ListedColormap
1210import matplotlib .lines as mlines
1311import matplotlib .pyplot as plt
1412
@@ -42,14 +40,13 @@ def load(self, filename):
4240
4341 :param str filename: input file in CSV format.
4442
45- :return: DataFrame containing the following attributes: mark, area,
46- perturbation_resistant, init_status, description;
43+ :return: DataFrame containing the following attributes: mark,
44+ init_status, description;
4745 DataFrame containing mark and father_mark attribute.
4846 :rtype: pandas.DataFrame, pandas.DataFrame
4947 """
5048
51- conv = {'mark' : str , 'father_mark' : str ,
52- 'perturbation_resistant' : str }
49+ conv = {'mark' : str , 'father_mark' : str }
5350 graph_df = pd .read_csv (filename , converters = conv , keep_default_na = False )
5451 cols_to_num = ['init_status' , 'initial_service' ]
5552 graph_df [cols_to_num ] = graph_df [cols_to_num ].apply (pd .to_numeric ,
@@ -59,34 +56,24 @@ def load(self, filename):
5956
6057 edge_weight = row .pop ('weight' )
6158 father_mark = row .pop ('father_mark' )
62- edge_father_condition = row .pop ('father_condition' )
6359
6460 self .add_node (row ['mark' ], ** row )
6561
6662 if father_mark != 'NULL' :
6763 self .add_edge (
6864 father_mark , row ['mark' ],
69- father_condition = edge_father_condition ,
7065 weight = edge_weight )
7166
7267 graph_edges_df = graph_df [['mark' , 'father_mark' ]]
7368
74- graph_df .drop (['father_condition ' , 'father_mark ' , 'type' ,
75- 'weight' , 'initial_service' ], axis = 1 , inplace = True )
69+ graph_df .drop (['father_mark ' , 'type ' , 'weight' , 'initial_service' ] ,
70+ axis = 1 , inplace = True )
7671 graph_df .drop_duplicates (inplace = True )
7772 graph_df .set_index ('mark' , inplace = True )
7873
7974 self ._final_status = {}
80- nx .set_node_attributes (self , 'AVAILABLE' , name = 'status_area' )
8175 nx .set_node_attributes (self , 'ACTIVE' , name = 'mark_status' )
8276
83- perts = nx .get_node_attributes (self , 'perturbation_resistant' )
84- split_perts = {node : perts [node ].split ("/" )
85- for node in self .nodes }
86- strip_perts = {node : [x .strip () for x in split_perts [node ]]
87- for node in self .nodes }
88- nx .set_node_attributes (self , strip_perts , name = 'perturbation_resistant' )
89-
9077 return graph_df , graph_edges_df
9178
9279 @property
@@ -98,26 +85,6 @@ def mark(self):
9885 """
9986 return nx .get_node_attributes (self , 'mark' )
10087
101- @property
102- def area (self ):
103- """
104-
105- :return: area attribute for every node.
106- :rtype: dict
107- """
108-
109- return nx .get_node_attributes (self , 'area' )
110-
111- @property
112- def perturbation_resistant (self ):
113- """
114-
115- :return: perturbation_resistant attribute for every node.
116- :rtype: dict
117- """
118-
119- return nx .get_node_attributes (self , 'perturbation_resistant' )
120-
12188 @property
12289 def description (self ):
12390 """
@@ -172,36 +139,6 @@ def mark_status(self):
172139
173140 return nx .get_node_attributes (self , 'mark_status' )
174141
175- @property
176- def status_area (self ):
177- """
178-
179- :return: status_area attribute for every node.
180- :rtype: dict
181- """
182-
183- return nx .get_node_attributes (self , 'status_area' )
184-
185- @status_area .setter
186- def status_area (self , status_area_dict ):
187- """
188-
189- :param dict status_area_dict: dictionary keyed by node,
190- containing the values for status_area attribute.
191- """
192-
193- nx .set_node_attributes (self , status_area_dict , name = 'status_area' )
194-
195- @property
196- def father_condition (self ):
197- """
198-
199- :return: father_condition attribute for every edge.
200- :rtype: dict
201- """
202-
203- return nx .get_edge_attributes (self , 'father_condition' )
204-
205142 @property
206143 def weight (self ):
207144 """
@@ -1251,7 +1188,7 @@ def compute_service(self):
12511188
12521189 def print_graph (self , radius = None , initial_pos = None , fixed_nodes = None ,
12531190 n_iter = 500 , thresh = 0.0001 , size = 800 , border = 'black' , edge_width = 1.0 ,
1254- arrow_size = 10 , fsize = 12 , fcolor = 'k' , title = 'Graph' , input_cmap = None ,
1191+ arrow_size = 10 , fsize = 12 , fcolor = 'k' , title = 'Graph' ,
12551192 legend = True , legend_loc = 'upper right' , legend_ncol = 1 ,
12561193 legend_anchor = None , legend_fsize = 12 , save_to_file = None , status = None ):
12571194 """
@@ -1264,12 +1201,6 @@ def print_graph(self, radius=None, initial_pos=None, fixed_nodes=None,
12641201 a subset of the nodes.
12651202 The shapes of the nodes characterize their type
12661203 (SOURCE/HUB/USER/SWITCH).
1267- Nodes color is set as white with black borders by default. If an input
1268- colormap is specified, different areas get colored differently (the
1269- colormap is evenly spaced in color depending on the total number of
1270- areas).
1271- Edges are colored depending on the logic relation specified: black for
1272- SINGLE edges, magenta for AND edges, brown dashed for OR edges.
12731204 The font size, family and color for labels can be also specified,
12741205 together with the title for the window figure.
12751206
@@ -1306,10 +1237,6 @@ def print_graph(self, radius=None, initial_pos=None, fixed_nodes=None,
13061237 :type fcolor: string, optional
13071238 :param title: title for figure window, default to 'Graph'.
13081239 :type title: string, optional
1309- :param input_cmap: colormap for coloring the different areas with
1310- different colors, default to None.
1311- If None, all nodes are colored as white.
1312- :type input_cmap: Matplotlib colormap
13131240 :param legend: show the legend on/off, default to True.
13141241 :type legend: bool, optional
13151242 :param legend_loc: the location of the legend, default to 'upper right'.
@@ -1345,64 +1272,31 @@ def print_graph(self, radius=None, initial_pos=None, fixed_nodes=None,
13451272
13461273 T = copy .deepcopy (self )
13471274
1348- T .add_nodes_from (self ._del_nodes )
1349- T .add_edges_from (self ._del_edges )
1275+ # T.add_nodes_from(self._del_nodes)
1276+ # T.add_edges_from(self._del_edges)
13501277
13511278 pos = nx .spring_layout (T , k = radius , pos = initial_pos ,
13521279 fixed = fixed_nodes , iterations = n_iter , threshold = thresh ,
13531280 seed = 3113794652 )
13541281
13551282 shapes = {'SOURCE' : 'v' , 'USER' : '^' , 'HUB' : 'o' , 'SWITCH' : 'X' }
13561283
1357- all_areas = list (set (self .area .values ()))
1358- if input_cmap is None :
1359- mymap = ListedColormap (["white" ])
1360- else :
1361- mymap = cm .get_cmap (input_cmap , len (all_areas ))
1362- area_indices = {}
1363- for idx , item in enumerate (all_areas ):
1364- area_indices [item ] = idx * (1. / len (all_areas ))
1365-
13661284 for node in self :
1367- col = mymap (area_indices [self .area [node ]])
1368- col = np .array ([col ])
1369- nx .draw_networkx_nodes (T , pos , nodelist = [node ], node_color = col ,
1285+ nx .draw_networkx_nodes (T , pos , nodelist = [node ],
13701286 node_shape = shapes [self .type [node ]], node_size = size ,
13711287 edgecolors = border , alpha = 0.5 )
13721288
1373- pert_resistant = [node for node in self .perturbation_resistant .keys ()
1374- if self .perturbation_resistant [node ][0 ]]
1289+ #if self._del_nodes:
1290+ # del_marks = {n: n for n in self._del_nodes}
1291+ # for node in self._del_nodes:
1292+ # nx.draw_networkx_nodes(T, pos, nodelist=[node],
1293+ # node_color='white', node_shape='.',
1294+ # node_size=size, edgecolors='white', alpha=1.0)
1295+ # nx.draw_networkx_labels(T, pos, labels=del_marks,
1296+ # font_size=fsize, font_color='red')
13751297
1376- for node in pert_resistant :
1377- col = mymap (area_indices [self .area [node ]])
1378- col = np .array ([col ])
1379- nx .draw_networkx_nodes (T , pos , nodelist = [node ], node_color = col ,
1380- node_shape = shapes [self .type [node ]], node_size = size ,
1381- edgecolors = border , alpha = 1.0 )
1382-
1383- if self ._del_nodes :
1384- del_marks = {n : n for n in self ._del_nodes }
1385- for node in self ._del_nodes :
1386- nx .draw_networkx_nodes (T , pos , nodelist = [node ],
1387- node_color = 'white' , node_shape = '.' ,
1388- node_size = size , edgecolors = 'white' , alpha = 1.0 )
1389- nx .draw_networkx_labels (T , pos , labels = del_marks ,
1390- font_size = fsize , font_color = 'red' )
1391-
1392- or_edges = [(u , v ) for (u , v , d ) in self .edges (data = True )
1393- if d ['father_condition' ] == 'OR' ]
1394- and_edges = [(u , v ) for (u , v , d ) in self .edges (data = True )
1395- if d ['father_condition' ] == 'AND' ]
1396- single_edges = [(u , v ) for (u , v , d ) in self .edges (data = True )
1397- if d ['father_condition' ] == 'SINGLE' ]
1398-
1399- #deleted edges
1400- or_edges_del = [(u , v ) for (u , v , d ) in self ._del_edges
1401- if d ['father_condition' ] == 'OR' ]
1402- and_edges_del = [(u , v ) for (u , v , d ) in self ._del_edges
1403- if d ['father_condition' ] == 'AND' ]
1404- single_edges_del = [(u , v ) for (u , v , d ) in self ._del_edges
1405- if d ['father_condition' ] == 'SINGLE' ]
1298+ edges = [(u , v ) for (u , v , d ) in self .edges (data = True )]
1299+ #edges_del = [(u, v) for (u, v, d) in self._del_edges]
14061300
14071301 if status == 'initial' :
14081302 status_sw = [k for k , v in self .init_status .items () if not v ]
@@ -1411,29 +1305,15 @@ def print_graph(self, radius=None, initial_pos=None, fixed_nodes=None,
14111305 for pred in list (self .predecessors (sw )):
14121306 edges_no_init .append ((pred ,sw ))
14131307
1414- or_edges = list (set (or_edges )- set (edges_no_init ))
1415- and_edges = list (set (and_edges )- set (edges_no_init ))
1416- single_edges = list (set (single_edges )- set (edges_no_init ))
1417-
1418- nx .draw_networkx_edges (T , pos , edgelist = or_edges , width = edge_width ,
1419- arrowsize = arrow_size , alpha = 0.9 , edge_color = 'brown' , style = 'dashed' ,
1420- node_size = size )
1421- nx .draw_networkx_edges (T , pos , edgelist = and_edges , width = edge_width ,
1422- arrowsize = arrow_size , alpha = 0.9 , edge_color = 'violet' ,
1423- node_size = size )
1424- nx .draw_networkx_edges (T , pos , edgelist = single_edges ,
1308+ edges = list (set (edges )- set (edges_no_init ))
1309+
1310+ nx .draw_networkx_edges (T , pos , edgelist = edges ,
14251311 width = edge_width , arrowsize = arrow_size , alpha = 0.9 ,
14261312 edge_color = 'black' , node_size = size )
14271313
1428- nx .draw_networkx_edges (T , pos , edgelist = or_edges_del ,
1429- width = (edge_width / 2. ), arrowsize = arrow_size , alpha = 0.9 ,
1430- edge_color = 'red' , style = 'dashed' , node_size = size )
1431- nx .draw_networkx_edges (T , pos , edgelist = and_edges_del ,
1432- width = (edge_width / 2. ), arrowsize = arrow_size , alpha = 0.9 ,
1433- edge_color = 'red' , node_size = size )
1434- nx .draw_networkx_edges (T , pos , edgelist = single_edges_del ,
1435- width = (edge_width / 2. ), arrowsize = arrow_size , alpha = 0.9 ,
1436- edge_color = 'red' , node_size = size )
1314+ #nx.draw_networkx_edges(T, pos, edgelist=edges_del,
1315+ # width=(edge_width/2.), arrowsize=arrow_size, alpha=0.9,
1316+ # edge_color='red', node_size=size)
14371317
14381318 nx .draw_networkx_labels (T , pos , labels = self .mark , font_size = fsize ,
14391319 font_color = fcolor )
@@ -1461,31 +1341,19 @@ def print_graph(self, radius=None, initial_pos=None, fixed_nodes=None,
14611341 markeredgecolor = 'black' , markersize = legend_fsize , linewidth = 0.0 ,
14621342 label = 'SWITCH' )
14631343 handles .append (switch_key )
1464- pr_key = mlines .Line2D ([], [], color = 'black' , alpha = 1.0 , marker = 'o' ,
1465- markeredgecolor = 'black' , markersize = legend_fsize , linewidth = 0.0 ,
1466- label = 'Perturbation Resistant' )
1467- handles .append (pr_key )
1468- del_node_key = mlines .Line2D ([], [], color = 'red' , alpha = 1.0 , marker = '.' ,
1469- markeredgecolor = 'white' , markersize = legend_fsize , linewidth = 0.0 ,
1470- label = 'Broken node' )
1471- handles .append (del_node_key )
1472-
1473- single_key = mlines .Line2D ([], [], color = 'white' ,
1344+ #del_node_key = mlines.Line2D([], [], color='red', alpha=1.0,marker='.',
1345+ # markeredgecolor='white', markersize=legend_fsize, linewidth=0.0,
1346+ # label='Broken node')
1347+ #handles.append(del_node_key)
1348+
1349+ edge_key = mlines .Line2D ([], [], color = 'white' ,
14741350 marker = r'$\rightarrow$' , markeredgecolor = 'black' ,
1475- markersize = legend_fsize , label = 'SINGLE' )
1476- handles .append (single_key )
1477- or_key = mlines .Line2D ([], [], color = 'white' ,
1478- marker = r'$-\rightarrow$' , markeredgecolor = 'brown' ,
1479- markersize = legend_fsize , label = 'OR' )
1480- handles .append (or_key )
1481- and_key = mlines .Line2D ([], [], color = 'white' ,
1482- marker = r'$\rightarrow$' , markeredgecolor = 'violet' ,
1483- markersize = legend_fsize , label = 'AND' )
1484- handles .append (and_key )
1485- del_edge_key = mlines .Line2D ([], [], color = 'white' ,
1486- marker = r'$\rightarrow$' , markeredgecolor = 'red' ,
1487- markersize = legend_fsize , label = 'Broken edge' )
1488- handles .append (del_edge_key )
1351+ markersize = legend_fsize , label = 'EDGE' )
1352+ handles .append (edge_key )
1353+ #del_edge_key = mlines.Line2D([], [], color='white',
1354+ # marker=r'$\rightarrow$', markeredgecolor='red',
1355+ # markersize=legend_fsize, label='Broken edge')
1356+ #handles.append(del_edge_key)
14891357
14901358 if legend :
14911359 plt .legend (handles = handles , loc = legend_loc , ncol = legend_ncol ,
0 commit comments