From 2b416f696a50f4ae264d5aec8c78fa7686cc7927 Mon Sep 17 00:00:00 2001 From: Jonathan Herman Date: Thu, 7 Feb 2013 19:07:33 -0500 Subject: Added support to load DirMap's from directories. --- parse/dir_map.py | 36 +++++++++++++++++++++++++++--------- parse/tuple_table.py | 2 +- parse_exps.py | 3 +++ 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/parse/dir_map.py b/parse/dir_map.py index 781607c..b864318 100644 --- a/parse/dir_map.py +++ b/parse/dir_map.py @@ -1,4 +1,5 @@ import os +import numpy as np from collections import defaultdict @@ -9,21 +10,17 @@ class TreeNode(object): self.values = [] class DirMap(object): - def to_csv(self, vals): - val_strs = [] - for key in sorted(vals.keys()): - val_strs += ["%s=%s" % (key, vals[key])] - return "%s.csv" % ("_".join(val_strs)) - - def __init__(self): + def __init__(self, in_dir = None): self.root = TreeNode(None) self.values = [] + if in_dir: + self.__read(in_dir) - def add_value(self, path, value): + def add_values(self, path, values): node = self.root for p in path: node = node.children[p] - node.values += [value] + node.values += values def reduce(self): def reduce2(node): @@ -56,6 +53,27 @@ class DirMap(object): write2([out_dir], self.root) + def __read(self, in_dir): + if not os.path.exists(in_dir): + raise ValueError("Can't load from nonexistent path : %s" % in_dir) + + def read2(path): + if os.path.isdir(path): + map(lambda x : read2(path+"/"+x), os.listdir(path)) + else: + with open(path, 'rb') as f: + data = np.loadtxt(f, delimiter=",") + + # Convert to tuples of ints if possible, else floats + values = [map(lambda a:a if a%1 else int(a), t) for t in data] + values = map(tuple, values) + + stripped = path if path.find(in_dir) else path[len(in_dir):] + path_arr = stripped.split("/") + + self.add_values(path_arr, values) + + read2(in_dir) def __str__(self): def str2(node, level): diff --git a/parse/tuple_table.py b/parse/tuple_table.py index a00e8ad..45b46af 100644 --- a/parse/tuple_table.py +++ b/parse/tuple_table.py @@ -136,7 +136,7 @@ class TupleTable(object): path = [ stat, variable, "taskset-" + base_type, summary_type, leaf ] result = measurement[base_type] - dir_map.add_value(path, (value, result)) + dir_map.add_values(path, [(value, result)]) kv[variable] = value diff --git a/parse_exps.py b/parse_exps.py index f8a1b98..5228cbe 100755 --- a/parse_exps.py +++ b/parse_exps.py @@ -11,14 +11,17 @@ import sys from collections import namedtuple from common import load_params from optparse import OptionParser +from parse.dir_map import DirMap from parse.point import ExpPoint from parse.tuple_table import ColMap,TupleTable + def parse_args(): # TODO: convert data-dir to proper option, clean 'dest' options parser = OptionParser("usage: %prog [options] [data_dir]...") print("default to no params.py") + print("save measurements in temp directory for faster reloading") parser.add_option('-o', '--out', dest='out', help='file or directory for data output', default='parse-data') -- cgit v1.2.2