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.py72
1 files changed, 4 insertions, 68 deletions
diff --git a/parse/tuple_table.py b/parse/tuple_table.py
index 45b46af..0b84296 100644
--- a/parse/tuple_table.py
+++ b/parse/tuple_table.py
@@ -4,68 +4,6 @@ from dir_map import DirMap
4 4
5from pprint import pprint 5from pprint import pprint
6 6
7class ColMap(object):
8 def __init__(self):
9 self.rev_map = {}
10 self.value_map = {}
11 self.col_list = []
12
13 def columns(self):
14 return self.col_list
15
16 def get_key(self, kv):
17 key = ()
18
19 for col in self.col_list:
20 if col not in kv:
21 key += (None,)
22 else:
23 key += (kv[col],)
24 return key
25
26 def get_encoding(self, kv):
27 def escape(val):
28 return str(val).replace("_", "-").replace("=", "-")
29 vals = []
30 for key in self.col_list:
31 if key not in kv:
32 continue
33 k, v = escape(key), escape(kv[key])
34 vals += ["%s=%s" % (k, v)]
35 return "_".join(vals)
36
37 def __contains__(self, col):
38 return col in self.rev_map
39
40 def get_map(self, tuple):
41 map = {}
42 for i in range(0, len(tuple)):
43 map[self.col_list[i]] = tuple[i]
44 return map
45
46 def force_add(self, column):
47 self.rev_map[column] = len(self.col_list)
48 self.col_list += [column]
49
50 def try_add(self, column, value):
51 if column not in self.rev_map:
52 if column not in self.value_map:
53 self.value_map[column] = value
54 elif value != self.value_map[column]:
55 self.force_add(column)
56 del(self.value_map[column])
57
58 def try_remove(self, column):
59 if column in self.rev_map:
60 idx = self.rev_map[column]
61 for value in self.col_list[idx+1:]:
62 self.rev_map[value] -= 1
63 del(self.col_list[self.rev_map[column]])
64 del(self.rev_map[column])
65
66 def __str__(self):
67 return "<ColMap>%s" % (self.rev_map)
68
69class TupleTable(object): 7class TupleTable(object):
70 def __init__(self, col_map): 8 def __init__(self, col_map):
71 self.col_map = col_map 9 self.col_map = col_map
@@ -132,8 +70,9 @@ class TupleTable(object):
132 if not base_type in measurement: 70 if not base_type in measurement:
133 continue 71 continue
134 # Ex: release/num_tasks/measured-max/avg/x=5.csv 72 # Ex: release/num_tasks/measured-max/avg/x=5.csv
135 leaf = self.col_map.get_encoding(kv) + ".csv" 73 leaf = self.col_map.encode(kv) + ".csv"
136 path = [ stat, variable, "taskset-" + base_type, summary_type, leaf ] 74 path = [ stat, variable, "taskset-" + base_type,
75 summary_type, leaf ]
137 result = measurement[base_type] 76 result = measurement[base_type]
138 77
139 dir_map.add_values(path, [(value, result)]) 78 dir_map.add_values(path, [(value, result)])
@@ -144,7 +83,7 @@ class TupleTable(object):
144 dir_map = DirMap() 83 dir_map = DirMap()
145 84
146 for key, point in self.table.iteritems(): 85 for key, point in self.table.iteritems():
147 kv = self.col_map.get_map(key) 86 kv = self.col_map.get_kv(key)
148 87
149 for col in self.col_map.columns(): 88 for col in self.col_map.columns():
150 val = kv[col] 89 val = kv[col]
@@ -159,6 +98,3 @@ class TupleTable(object):
159 98
160 dir_map.reduce() 99 dir_map.reduce()
161 return dir_map 100 return dir_map
162
163 def from_dir_map(dir_map):
164 pass