diff options
| author | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-02-07 19:07:33 -0500 |
|---|---|---|
| committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-02-07 19:07:33 -0500 |
| commit | 2b416f696a50f4ae264d5aec8c78fa7686cc7927 (patch) | |
| tree | 531271ef1ef37d60e1d53e4169cf7ef7623993c6 | |
| parent | 063f5bc4b78a8368054c7e11c5fe177aafc4e28d (diff) | |
Added support to load DirMap's from directories.
| -rw-r--r-- | parse/dir_map.py | 36 | ||||
| -rw-r--r-- | parse/tuple_table.py | 2 | ||||
| -rwxr-xr-x | 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 @@ | |||
| 1 | import os | 1 | import os |
| 2 | import numpy as np | ||
| 2 | 3 | ||
| 3 | from collections import defaultdict | 4 | from collections import defaultdict |
| 4 | 5 | ||
| @@ -9,21 +10,17 @@ class TreeNode(object): | |||
| 9 | self.values = [] | 10 | self.values = [] |
| 10 | 11 | ||
| 11 | class DirMap(object): | 12 | class DirMap(object): |
| 12 | def to_csv(self, vals): | 13 | def __init__(self, in_dir = None): |
| 13 | val_strs = [] | ||
| 14 | for key in sorted(vals.keys()): | ||
| 15 | val_strs += ["%s=%s" % (key, vals[key])] | ||
| 16 | return "%s.csv" % ("_".join(val_strs)) | ||
| 17 | |||
| 18 | def __init__(self): | ||
| 19 | self.root = TreeNode(None) | 14 | self.root = TreeNode(None) |
| 20 | self.values = [] | 15 | self.values = [] |
| 16 | if in_dir: | ||
| 17 | self.__read(in_dir) | ||
| 21 | 18 | ||
| 22 | def add_value(self, path, value): | 19 | def add_values(self, path, values): |
| 23 | node = self.root | 20 | node = self.root |
| 24 | for p in path: | 21 | for p in path: |
| 25 | node = node.children[p] | 22 | node = node.children[p] |
| 26 | node.values += [value] | 23 | node.values += values |
| 27 | 24 | ||
| 28 | def reduce(self): | 25 | def reduce(self): |
| 29 | def reduce2(node): | 26 | def reduce2(node): |
| @@ -56,6 +53,27 @@ class DirMap(object): | |||
| 56 | 53 | ||
| 57 | write2([out_dir], self.root) | 54 | write2([out_dir], self.root) |
| 58 | 55 | ||
| 56 | def __read(self, in_dir): | ||
| 57 | if not os.path.exists(in_dir): | ||
| 58 | raise ValueError("Can't load from nonexistent path : %s" % in_dir) | ||
| 59 | |||
| 60 | def read2(path): | ||
| 61 | if os.path.isdir(path): | ||
| 62 | map(lambda x : read2(path+"/"+x), os.listdir(path)) | ||
| 63 | else: | ||
| 64 | with open(path, 'rb') as f: | ||
| 65 | data = np.loadtxt(f, delimiter=",") | ||
| 66 | |||
| 67 | # Convert to tuples of ints if possible, else floats | ||
| 68 | values = [map(lambda a:a if a%1 else int(a), t) for t in data] | ||
| 69 | values = map(tuple, values) | ||
| 70 | |||
| 71 | stripped = path if path.find(in_dir) else path[len(in_dir):] | ||
| 72 | path_arr = stripped.split("/") | ||
| 73 | |||
| 74 | self.add_values(path_arr, values) | ||
| 75 | |||
| 76 | read2(in_dir) | ||
| 59 | 77 | ||
| 60 | def __str__(self): | 78 | def __str__(self): |
| 61 | def str2(node, level): | 79 | 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): | |||
| 136 | path = [ stat, variable, "taskset-" + base_type, summary_type, leaf ] | 136 | path = [ stat, variable, "taskset-" + base_type, summary_type, leaf ] |
| 137 | result = measurement[base_type] | 137 | result = measurement[base_type] |
| 138 | 138 | ||
| 139 | dir_map.add_value(path, (value, result)) | 139 | dir_map.add_values(path, [(value, result)]) |
| 140 | 140 | ||
| 141 | kv[variable] = value | 141 | kv[variable] = value |
| 142 | 142 | ||
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 | |||
| 11 | from collections import namedtuple | 11 | from collections import namedtuple |
| 12 | from common import load_params | 12 | from common import load_params |
| 13 | from optparse import OptionParser | 13 | from optparse import OptionParser |
| 14 | from parse.dir_map import DirMap | ||
| 14 | from parse.point import ExpPoint | 15 | from parse.point import ExpPoint |
| 15 | from parse.tuple_table import ColMap,TupleTable | 16 | from parse.tuple_table import ColMap,TupleTable |
| 16 | 17 | ||
| 18 | |||
| 17 | def parse_args(): | 19 | def parse_args(): |
| 18 | # TODO: convert data-dir to proper option, clean 'dest' options | 20 | # TODO: convert data-dir to proper option, clean 'dest' options |
| 19 | parser = OptionParser("usage: %prog [options] [data_dir]...") | 21 | parser = OptionParser("usage: %prog [options] [data_dir]...") |
| 20 | 22 | ||
| 21 | print("default to no params.py") | 23 | print("default to no params.py") |
| 24 | print("save measurements in temp directory for faster reloading") | ||
| 22 | 25 | ||
| 23 | parser.add_option('-o', '--out', dest='out', | 26 | parser.add_option('-o', '--out', dest='out', |
| 24 | help='file or directory for data output', default='parse-data') | 27 | help='file or directory for data output', default='parse-data') |
