diff options
Diffstat (limited to 'parse/tuple_table.py')
-rw-r--r-- | parse/tuple_table.py | 41 |
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 @@ | |||
1 | from collections import defaultdict | 1 | from collections import defaultdict |
2 | from point import SummaryPoint | 2 | from point import SummaryPoint,Type |
3 | from dir_map import DirMap | 3 | from dir_map import DirMap |
4 | 4 | ||
5 | from pprint import pprint | ||
6 | |||
5 | class ColMap(object): | 7 | class 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(): |