|
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