The Gaudi Framework  master (37c0b60a)
graphanalysis Namespace Reference

Functions

def read_graph_from_json (filename)
 
def analyze_and_fix_cycles (gr)
 
def analyze_connected_componets (gr)
 
def analyze_critical_path (gr)
 
def print_graph_to_json (gr, filename)
 

Variables

 filename
 
 gr
 
 had_to_fix_cycles
 

Function Documentation

◆ analyze_and_fix_cycles()

def graphanalysis.analyze_and_fix_cycles (   gr)

Definition at line 45 of file graphanalysis.py.

46  has_loop = True
47  n_cycles = 0
48  while has_loop:
49  cycle = find_cycle(gr)
50  if len(cycle) == 0:
51  has_loop = False
52  continue
53  n_cycles += 1
54  print(cycle)
55  print("Removed loop by deleting edge (%s,%s)" % (cycle[-1], cycle[0]))
56  gr.del_edge((cycle[-1], cycle[0]))
57  print("\nIN TOTAL %i CYCLES\n" % (n_cycles))
58  return n_cycles > 0 # whether it needed to fix cycles
59 
60 

◆ analyze_connected_componets()

def graphanalysis.analyze_connected_componets (   gr)

Definition at line 61 of file graphanalysis.py.

62  cc = connected_components(gr)
63  cc_size = {}
64  for i in cc.values():
65  cc_size[i] = 0
66  for k, v in cc.iteritems():
67  cc_size[v] = cc_size[v] + 1
68  print("Connected components have the following size:")
69  # for k,v in cc_size.iteritems():
70  # print "%i : %i" %(k,v)
71  print("NUMBER OF CONNECTED COMPONENTS: %i" % (len(cc_size.keys())))
72 
73 

◆ analyze_critical_path()

def graphanalysis.analyze_critical_path (   gr)

Definition at line 74 of file graphanalysis.py.

74 def analyze_critical_path(gr):
75  total_time = 0
76  critical_time = 0
77  cp = critical_path(gr)
78  # calculate total time
79  for edge in gr.edges():
80  total_time += gr.edge_weight(edge)
81 
82  # calculate time of critical path
83  edges = [tuple(cp[i : i + 2]) for i in range(0, len(cp))]
84  for edge in edges:
85  critical_time += gr.edge_weight(edge)
86 
87  print("Total time : %s" % total_time)
88  print("Critical path: %s" % critical_time)
89  print("POSSIBLE SPEEDUP: %s" % (total_time / critical_time))
90 
91 

◆ print_graph_to_json()

def graphanalysis.print_graph_to_json (   gr,
  filename 
)

Definition at line 92 of file graphanalysis.py.

92 def print_graph_to_json(gr, filename):
93  algorithms = {} # still make it known to workflow
94  known_names = set()
95  for edge in gr.edges():
96  if edge[0].endswith("_algo"):
97  algoname = edge[0].rstrip("_algo")
98  product = edge[1]
99  reading = False
100  else:
101  algoname = edge[1].rstrip("_algo")
102  product = edge[0]
103  reading = True
104 
105  if algoname not in known_names:
106  algorithms[algoname] = {
107  "name": algoname,
108  "inputs": [],
109  "outputs": [],
110  "runtimes": [1000], # TODO dummy
111  "runtimes_wall": [1000], # TODO dummy
112  }
113  known_names.add(algoname)
114  if reading:
115  algorithms[algoname]["inputs"].append(product)
116  else:
117  algorithms[algoname]["outputs"].append(product)
118  algorithms[algoname]["runtimes_wall"] = [
119  gr.edge_weight(edge) / 100,
120  ]
121  out = open(filename, "w")
122  algorithm_list = [item for item in algorithms.values()]
123  workflow = {"algorithms": algorithm_list}
124  out.write(workflow.__repr__())
125  out.close()
126 
127 

◆ read_graph_from_json()

def graphanalysis.read_graph_from_json (   filename)

Definition at line 18 of file graphanalysis.py.

18 def read_graph_from_json(filename):
19  data = open(filename).read()
20  workflow = eval(data)
21  gr = digraph()
22  # create all nodes
23  for algo in workflow["algorithms"]:
24  # to differentiate algos from equally named products
25  name = algo["name"] + "_algo"
26  gr.add_nodes([name])
27  for input in algo["inputs"]:
28  if input == "":
29  input = "dummy"
30  if not gr.has_node(input):
31  gr.add_nodes([input])
32  if not gr.has_edge((input, name)):
33  gr.add_edge((input, name), wt=0)
34  for output in algo["outputs"]:
35  if output == "":
36  output = "dummy"
37  if not gr.has_node(output):
38  gr.add_nodes([output])
39  if not gr.has_edge((name, output)):
40  # the output edge gets the weigth corresponding to the runtime
41  gr.add_edge((name, output), wt=algo["runtimes_wall"][0] * 100)
42  return gr
43 
44 

Variable Documentation

◆ filename

graphanalysis.filename

Definition at line 130 of file graphanalysis.py.

◆ gr

graphanalysis.gr

Definition at line 131 of file graphanalysis.py.

◆ had_to_fix_cycles

graphanalysis.had_to_fix_cycles

Definition at line 134 of file graphanalysis.py.

graphanalysis.analyze_connected_componets
def analyze_connected_componets(gr)
Definition: graphanalysis.py:61
graphanalysis.print_graph_to_json
def print_graph_to_json(gr, filename)
Definition: graphanalysis.py:92
graphanalysis.analyze_critical_path
def analyze_critical_path(gr)
Definition: graphanalysis.py:74
graphanalysis.analyze_and_fix_cycles
def analyze_and_fix_cycles(gr)
Definition: graphanalysis.py:45
hivetimeline.read
def read(f, regex=".*", skipevents=0)
Definition: hivetimeline.py:32
graphanalysis.read_graph_from_json
def read_graph_from_json(filename)
Definition: graphanalysis.py:18
Gaudi::Functional::details::zip::range
decltype(auto) range(Args &&... args)
Zips multiple containers together to form a single range.
Definition: details.h:97