blob: 1323272d2ae638e08e13389ca66747c295c46b08 [file] [log] [blame]
koder aka kdanilovda45e882015-04-06 02:24:42 +03001import math
2import itertools
3
4
5def med_dev(vals):
6 med = sum(vals) / len(vals)
koder aka kdanilovb896f692015-04-07 14:57:55 +03007 dev = ((sum(abs(med - i) ** 2.0 for i in vals) / len(vals)) ** 0.5)
8 return med, dev
koder aka kdanilovda45e882015-04-06 02:24:42 +03009
10
11def round_deviation(med_dev):
12 med, dev = med_dev
13
14 if dev < 1E-7:
15 return med_dev
16
17 dev_div = 10.0 ** (math.floor(math.log10(dev)) - 1)
18 dev = int(dev / dev_div) * dev_div
19 med = int(med / dev_div) * dev_div
20 return (type(med_dev[0])(med),
21 type(med_dev[1])(dev))
22
23
24def groupby_globally(data, key_func):
25 grouped = {}
26 grouped_iter = itertools.groupby(data, key_func)
27
28 for (bs, cache_tp, act, conc), curr_data_it in grouped_iter:
29 key = (bs, cache_tp, act, conc)
30 grouped.setdefault(key, []).extend(curr_data_it)
31
32 return grouped
33
34
35def read_data_agent_result(fname):
36 data = []
37 with open(fname) as fc:
38 block = None
39 for line in fc:
40 if line.startswith("{'__meta__':"):
41 block = line
42 elif block is not None:
43 block += line
44
45 if block is not None:
46 if block.count('}') == block.count('{'):
47 data.append(eval(block))
48 block = None
49 return data