|
1 | 1 | import os |
2 | 2 | import pickle |
3 | 3 | import sys |
| 4 | +from collections import Counter |
4 | 5 |
|
5 | 6 | from pytensor.configdefaults import config |
6 | 7 |
|
|
15 | 16 | else: |
16 | 17 | dirs = os.listdir(config.compiledir) |
17 | 18 | dirs = [os.path.join(config.compiledir, d) for d in dirs] |
18 | | -keys: dict = {} # key -> nb seen |
| 19 | +keys: Counter[bytes] = Counter() # key -> nb seen |
19 | 20 | mods: dict = {} |
20 | 21 | for dir in dirs: |
21 | 22 | key = None |
22 | 23 | try: |
23 | | - with open(os.path.join(dir, "key.pkl")) as f: |
| 24 | + with open(os.path.join(dir, "key.pkl"), "rb") as f: |
24 | 25 | key = f.read() |
25 | | - keys.setdefault(key, 0) |
26 | 26 | keys[key] += 1 |
27 | 27 | del f |
28 | 28 | except OSError: |
29 | 29 | # print dir, "don't have a key.pkl file" |
30 | 30 | pass |
31 | 31 | try: |
32 | 32 | path = os.path.join(dir, "mod.cpp") |
33 | | - if not os.path.exists(path): |
34 | | - path = os.path.join(dir, "mod.cu") |
35 | | - with open(path) as f: |
36 | | - mod = f.read() |
| 33 | + with open(path) as fmod: |
| 34 | + mod = fmod.read() |
37 | 35 | mods.setdefault(mod, ()) |
38 | 36 | mods[mod] += (key,) |
39 | 37 | del mod |
40 | | - del f |
| 38 | + del fmod |
41 | 39 | del path |
42 | 40 | except OSError: |
43 | | - print(dir, "don't have a mod.{cpp,cu} file") |
| 41 | + print(dir, "don't have a mod.cpp file") |
44 | 42 |
|
45 | 43 | if DISPLAY_DUPLICATE_KEYS: |
46 | 44 | for k, v in keys.items(): |
47 | 45 | if v > 1: |
48 | 46 | print("Duplicate key (%i copies): %s" % (v, pickle.loads(k))) |
49 | 47 |
|
50 | | -nbs_keys: dict = {} # nb seen -> now many key |
51 | | -for val in keys.values(): |
52 | | - nbs_keys.setdefault(val, 0) |
53 | | - nbs_keys[val] += 1 |
| 48 | +# nb seen -> how many keys |
| 49 | +nbs_keys = Counter(val for val in keys.values()) |
54 | 50 |
|
55 | | -nbs_mod: dict = {} # nb seen -> how many key |
56 | | -nbs_mod_to_key = {} # nb seen -> keys |
57 | | -more_than_one = 0 |
58 | | -for mod, kk in mods.items(): |
59 | | - val = len(kk) |
60 | | - nbs_mod.setdefault(val, 0) |
61 | | - nbs_mod[val] += 1 |
62 | | - if val > 1: |
63 | | - more_than_one += 1 |
64 | | - nbs_mod_to_key[val] = kk |
| 51 | +# nb seen -> how many keys |
| 52 | +nbs_mod = Counter(len(kk) for kk in mods.values()) |
| 53 | +# nb seen -> keys |
| 54 | +nbs_mod_to_key = {len(kk): kk for kk in mods.values()} |
| 55 | +more_than_one = sum(len(kk) > 1 for kk in mods.values()) |
65 | 56 |
|
66 | 57 | if DISPLAY_MOST_FREQUENT_DUPLICATE_CCODE: |
67 | | - m = max(nbs_mod.keys()) |
68 | | - print("The keys associated to the mod.{cpp,cu} with the most number of copy:") |
| 58 | + m = max(nbs_mod) |
| 59 | + print("The keys associated to the mod.cpp with the most number of copy:") |
69 | 60 | for kk in nbs_mod_to_key[m]: |
70 | 61 | kk = pickle.loads(kk) |
71 | 62 | print(kk) |
72 | 63 |
|
73 | 64 | print("key.pkl histograph") |
74 | | -l = list(nbs_keys.items()) |
75 | | -l.sort() |
76 | | -print(l) |
| 65 | +print(sorted(nbs_keys.items())) |
77 | 66 |
|
78 | | -print("mod.{cpp,cu} histogram") |
79 | | -l = list(nbs_mod.items()) |
80 | | -l.sort() |
81 | | -print(l) |
| 67 | +print("mod.cpp histogram") |
| 68 | +print(sorted(nbs_mod.items())) |
82 | 69 |
|
83 | | -total = sum(len(k) for k in list(mods.values())) |
| 70 | +total = sum(len(k) for k in mods.values()) |
84 | 71 | uniq = len(mods) |
85 | 72 | useless = total - uniq |
86 | | -print("mod.{cpp,cu} total:", total) |
87 | | -print("mod.{cpp,cu} uniq:", uniq) |
88 | | -print("mod.{cpp,cu} with more than 1 copy:", more_than_one) |
89 | | -print("mod.{cpp,cu} useless:", useless, float(useless) / total * 100, "%") |
| 73 | +print("mod.cpp total:", total) |
| 74 | +print("mod.cpp uniq:", uniq) |
| 75 | +print("mod.cpp with more than 1 copy:", more_than_one) |
| 76 | +print("mod.cpp useless:", useless, float(useless) / total * 100, "%") |
90 | 77 |
|
91 | 78 | print("nb directory", len(dirs)) |
0 commit comments