From 7c09ec981c6e06af2e62d67a609eb53728267954 Mon Sep 17 00:00:00 2001 From: Jonathan Herman Date: Thu, 27 Sep 2012 19:03:22 -0400 Subject: Added script to parse directory data, create CSVs for every chagned value. This change also makes SchedTrace and OverheadTrace events configurable. --- parse/tuple_table.py | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 parse/tuple_table.py (limited to 'parse/tuple_table.py') diff --git a/parse/tuple_table.py b/parse/tuple_table.py new file mode 100644 index 0000000..df80b37 --- /dev/null +++ b/parse/tuple_table.py @@ -0,0 +1,76 @@ +from collections import defaultdict +from point import SummaryPoint +from dir_map import DirMap + +class ColMap(object): + def __init__(self): + self.rev_map = {} + self.col_list = [] + + def columns(self): + return self.col_list + + def get_key(self, kv): + key = () + added = 0 + + for col in self.col_list: + if col not in kv: + key += (None,) + else: + added += 1 + key += (kv[col],) + + if added != len(kv): + raise Exception("column map '%s' missed field in map\n%s" % + (self.col_list, kv)) + + return key + + def get_map(self, tuple): + map = {} + for i in range(0, len(tuple)): + map[self.col_list[i]] = tuple[i] + return map + + def try_add(self, column): + if column not in self.rev_map: + self.rev_map[column] = len(self.col_list) + self.col_list += [column] + + def __str__(self): + return "%s" % (self.rev_map) + +class TupleTable(object): + def __init__(self, col_map): + self.col_map = col_map + self.table = defaultdict(lambda: []) + self.reduced = False + + def add_exp(self, kv, point): + key = self.col_map.get_key(kv) + self.table[key] += [point] + + def __reduce(self): + if self.reduced: + raise Exception("cannot reduce twice!") + self.reduced = True + for key, values in self.table.iteritems(): + self.table[key] = SummaryPoint(key, values) + + def write_result(self, out_dir): + dir_map = DirMap(out_dir) + self.__reduce() + for key, point in self.table.iteritems(): + kv = self.col_map.get_map(key) + + for col in self.col_map.columns(): + val = kv[col] + kv.pop(col) + + dir_map.add_point(col, val, kv, point) + + kv[col] = val + + dir_map.reduce() + dir_map.write() -- cgit v1.2.2