aboutsummaryrefslogtreecommitdiffstats
path: root/parse/col_map.py
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2013-02-11 18:28:31 -0500
committerJonathan Herman <hermanjl@cs.unc.edu>2013-02-11 18:28:31 -0500
commitb2fa65ecfe14bb9377fbd8afa5f457a07472b6fb (patch)
tree5bb1402027e1c56eccf38682166b1850c8b89aa9 /parse/col_map.py
parent7c647198fc40e72ef6ca23c2484bf49eba2079ee (diff)
First attempt at plot_exps.py.
Diffstat (limited to 'parse/col_map.py')
-rw-r--r--parse/col_map.py38
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
19class ColMap(object): 19class 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):