aboutsummaryrefslogtreecommitdiffstats
path: root/parse/tuple_table.py
diff options
context:
space:
mode:
Diffstat (limited to 'parse/tuple_table.py')
-rw-r--r--parse/tuple_table.py41
1 files changed, 36 insertions, 5 deletions
diff --git a/parse/tuple_table.py b/parse/tuple_table.py
index 434eb22..465abb3 100644
--- a/parse/tuple_table.py
+++ b/parse/tuple_table.py
@@ -1,7 +1,9 @@
1from collections import defaultdict 1from collections import defaultdict
2from point import SummaryPoint 2from point import SummaryPoint,Type
3from dir_map import DirMap 3from dir_map import DirMap
4 4
5from pprint import pprint
6
5class ColMap(object): 7class ColMap(object):
6 def __init__(self): 8 def __init__(self):
7 self.rev_map = {} 9 self.rev_map = {}
@@ -31,13 +33,16 @@ class ColMap(object):
31 map[self.col_list[i]] = tuple[i] 33 map[self.col_list[i]] = tuple[i]
32 return map 34 return map
33 35
36 def force_add(self, column):
37 self.rev_map[column] = len(self.col_list)
38 self.col_list += [column]
39
34 def try_add(self, column, value): 40 def try_add(self, column, value):
35 if column not in self.rev_map: 41 if column not in self.rev_map:
36 if column not in self.value_map: 42 if column not in self.value_map:
37 self.value_map[column] = value 43 self.value_map[column] = value
38 elif value != self.value_map[column]: 44 elif value != self.value_map[column]:
39 self.rev_map[column] = len(self.col_list) 45 self.force_add(column)
40 self.col_list += [column]
41 46
42 def __str__(self): 47 def __str__(self):
43 return "<ColMap>%s" % (self.rev_map) 48 return "<ColMap>%s" % (self.rev_map)
@@ -53,6 +58,9 @@ class TupleTable(object):
53 key = self.col_map.get_key(kv) 58 key = self.col_map.get_key(kv)
54 self.table[key] += [point] 59 self.table[key] += [point]
55 60
61 def col_map(self):
62 return self.col_map
63
56 def get_exps(self, kv): 64 def get_exps(self, kv):
57 key = self.col_map.get_key(kv) 65 key = self.col_map.get_key(kv)
58 return self.table[key] 66 return self.table[key]
@@ -66,9 +74,32 @@ class TupleTable(object):
66 raise Exception("cannot reduce twice!") 74 raise Exception("cannot reduce twice!")
67 self.reduced = True 75 self.reduced = True
68 for key, values in self.table.iteritems(): 76 for key, values in self.table.iteritems():
69 self.table[key] = SummaryPoint(str(key), values) 77 self.table[key] = SummaryPoint(values[0].id, values)
70 78
71 def write_result(self, out_dir): 79 def write_map(self, out_map):
80 if not self.reduced:
81 raise Exception("must reduce table to write map!")
82
83 rows = {}
84
85 for key, point in self.table.iteritems():
86 row = {}
87 for name,measurement in point:
88 name = name.lower().replace('_','-')
89 row[name]={}
90 for base_type in Type:
91 type_key = str(base_type).lower()
92 if base_type in measurement[Type.Avg]:
93 value = measurement[Type.Avg][base_type]
94 row[name][type_key] = value
95 rows[key] = row
96
97 result = {'columns': self.col_map.columns(), 'rows':rows}
98
99 with open(out_map, 'wc') as map_file:
100 pprint(result,stream=map_file, width=20)
101
102 def write_csvs(self, out_dir):
72 dir_map = DirMap(out_dir) 103 dir_map = DirMap(out_dir)
73 104
74 for key, point in self.table.iteritems(): 105 for key, point in self.table.iteritems():