diff options
author | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-02-11 18:28:31 -0500 |
---|---|---|
committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-02-11 18:28:31 -0500 |
commit | b2fa65ecfe14bb9377fbd8afa5f457a07472b6fb (patch) | |
tree | 5bb1402027e1c56eccf38682166b1850c8b89aa9 /parse/col_map.py | |
parent | 7c647198fc40e72ef6ca23c2484bf49eba2079ee (diff) |
First attempt at plot_exps.py.
Diffstat (limited to 'parse/col_map.py')
-rw-r--r-- | parse/col_map.py | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/parse/col_map.py b/parse/col_map.py index 6f83ca1..8132639 100644 --- a/parse/col_map.py +++ b/parse/col_map.py | |||
@@ -6,9 +6,9 @@ class ColMapBuilder(object): | |||
6 | 6 | ||
7 | def build(self): | 7 | def build(self): |
8 | columns = sorted(self.value_map.keys(), | 8 | columns = sorted(self.value_map.keys(), |
9 | key=lambda c: (len(self.value_map[c]), c)) | 9 | key=lambda c: (-len(self.value_map[c]), c)) |
10 | col_list = filter(lambda c : len(self.value_map[c]) > 1, columns) | 10 | col_list = filter(lambda c : len(self.value_map[c]) > 1, columns) |
11 | return ColMap(col_list) | 11 | return ColMap(col_list, self.value_map) |
12 | 12 | ||
13 | def try_add(self, column, value): | 13 | def try_add(self, column, value): |
14 | self.value_map[column].add( value ) | 14 | self.value_map[column].add( value ) |
@@ -17,9 +17,17 @@ class ColMapBuilder(object): | |||
17 | del(self.value_map[column]) | 17 | del(self.value_map[column]) |
18 | 18 | ||
19 | class ColMap(object): | 19 | class ColMap(object): |
20 | def __init__(self, col_list): | 20 | def __init__(self, col_list, values = None): |
21 | self.col_list = col_list | 21 | self.col_list = col_list |
22 | self.rev_map = {} | 22 | self.rev_map = {} |
23 | self.values = values | ||
24 | |||
25 | self.minimums = [] | ||
26 | for c in col_list: | ||
27 | end = 1 | ||
28 | while c[:end] in self.minimums: | ||
29 | end += 1 | ||
30 | self.minimums += [c[:end]] | ||
23 | 31 | ||
24 | for i, col in enumerate(col_list): | 32 | for i, col in enumerate(col_list): |
25 | self.rev_map[col] = i | 33 | self.rev_map[col] = i |
@@ -27,6 +35,9 @@ class ColMap(object): | |||
27 | def columns(self): | 35 | def columns(self): |
28 | return self.col_list | 36 | return self.col_list |
29 | 37 | ||
38 | def get_values(self): | ||
39 | return self.values | ||
40 | |||
30 | def get_key(self, kv): | 41 | def get_key(self, kv): |
31 | '''Convert a key-value dict into an ordered tuple of values.''' | 42 | '''Convert a key-value dict into an ordered tuple of values.''' |
32 | key = () | 43 | key = () |
@@ -46,8 +57,7 @@ class ColMap(object): | |||
46 | kv[self.col_list[i]] = key[i] | 57 | kv[self.col_list[i]] = key[i] |
47 | return kv | 58 | return kv |
48 | 59 | ||
49 | 60 | def encode(self, kv, minimum=False): | |
50 | def encode(self, kv): | ||
51 | '''Converted a dict into a string with items sorted according to | 61 | '''Converted a dict into a string with items sorted according to |
52 | the ColMap key order.''' | 62 | the ColMap key order.''' |
53 | def escape(val): | 63 | def escape(val): |
@@ -55,13 +65,23 @@ class ColMap(object): | |||
55 | 65 | ||
56 | vals = [] | 66 | vals = [] |
57 | 67 | ||
58 | for key in self.col_list: | 68 | if minimum: |
69 | format = "%s:%s" | ||
70 | join = ", " | ||
71 | else: | ||
72 | format = "%s=%s" | ||
73 | join = "_" | ||
74 | |||
75 | reverse = list(self.col_list) | ||
76 | reverse.reverse() | ||
77 | for key in reverse: | ||
59 | if key not in kv: | 78 | if key not in kv: |
60 | continue | 79 | continue |
61 | k, v = escape(key), escape(kv[key]) | 80 | display = key if not minimum else self.minimums[self.rev_map[key]] |
62 | vals += ["%s=%s" % (k, v)] | 81 | k, v = escape(display), escape(kv[key]) |
82 | vals += [format % (k, v)] | ||
63 | 83 | ||
64 | return "_".join(vals) | 84 | return join.join(vals) |
65 | 85 | ||
66 | @staticmethod | 86 | @staticmethod |
67 | def decode(string): | 87 | def decode(string): |