diff options
author | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-02-08 11:54:49 -0500 |
---|---|---|
committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-02-08 11:54:49 -0500 |
commit | d312e270ed5c2926c8651291a4026062213876f8 (patch) | |
tree | 94992d8562332ae84be9f2b5aba169f0e287ea51 /parse/tuple_table.py | |
parent | 2b416f696a50f4ae264d5aec8c78fa7686cc7927 (diff) |
ColMaps are now created by ColMapBuilders which order columns by their number
of distinct values.
Diffstat (limited to 'parse/tuple_table.py')
-rw-r--r-- | parse/tuple_table.py | 72 |
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 | ||
5 | from pprint import pprint | 5 | from pprint import pprint |
6 | 6 | ||
7 | class 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 | |||
69 | class TupleTable(object): | 7 | class 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 | ||