9 jupytext_version: 1.11.1
11 display_name: Python 3 (ipykernel)
22 import matplotlib as mpl
23 import matplotlib.pyplot as plt
28 with open('../advent-of-code21.cabal') as f:
29 build_depends = [l for l in f.readlines() if 'build-depends' in l]
34 cabal_file = open('../advent-of-code21.cabal').read()
35 executables = cabal_file.split('executable')[2:]
41 e.strip().split('build-depends: ')[1].split(',')
46 parts = line.strip().split('build-depends: ')
47 name = parts[0].split()[0]
49 depends = [p.strip() for p in parts[1].split('\n')[0].split(',') if 'base' not in p]
56 modules = {e: ms for e, ms in [extract(e) for e in executables] if e.endswith(tuple(str(i) for i in range(10)))}
61 all_modules = set(m for p in modules for m in modules[p])
62 modules_df = pd.DataFrame.from_dict({p: {m: m in modules[p] for m in sorted(all_modules)} for p in modules}, orient='index').sort_index()
67 print(modules_df.sum().sort_values(ascending=False).to_markdown())
71 modules_scatter = modules_df.stack().reset_index()
72 modules_scatter.columns = ['program', 'module', 'present']
73 modules_scatter = modules_scatter[modules_scatter.present]
78 modules_scatter.plot.scatter(x='program', y='module', s=80, rot=45, figsize=(10, 6))
82 cmap = mpl.colors.ListedColormap(['white', 'blue'])
84 fig, ax = plt.subplots(figsize=(10, 10))
85 ax.imshow(modules_df.to_numpy().T, cmap=cmap)
86 plt.xticks(range(modules_df.index.size), labels=modules_df.index.values, rotation=90);
87 plt.yticks(range(modules_df.columns.size), labels=modules_df.columns.values);
89 ax.xaxis.set_minor_locator(mpl.ticker.MultipleLocator(0.5))
90 ax.yaxis.set_minor_locator(mpl.ticker.MultipleLocator(0.5))
91 ax.grid(which='minor', axis='both', linestyle='-', color='silver', linewidth=1.5);
92 plt.savefig('packages.png');
96 mains = list(sorted(f for f in glob.glob('../advent*/Main.hs')))
105 lines = f.readlines()
106 import_lines = [l for l in lines if l.strip().startswith('import') if 'Debug.Trace' not in l]
108 for i in import_lines:
109 words = i.strip().split()
111 imports.append((words[2], True))
113 imports.append((words[1], False))
114 main_imports[m.split('/')[1]] = imports
120 import_counts = collections.Counter(l for ls in main_imports.values() for l in ls)
121 import_counts.most_common()
125 main_imports_unqualified = {m: set(i[0] for i in main_imports[m]) for m in main_imports}
126 main_imports_unqualified
130 import_counts_unqualified = collections.Counter(l for ls in main_imports_unqualified.values() for l in ls)
131 import_counts_unqualified.most_common()
135 all_imports = set(m for p in main_imports_unqualified for m in main_imports_unqualified[p])
136 imports_df = pd.DataFrame.from_dict(
137 {p: {m: m in main_imports_unqualified[p]
138 for m in sorted(all_imports)}
139 for p in main_imports_unqualified},
140 orient='index').sort_index()
145 print(imports_df.sum().sort_values(ascending=False).to_markdown())
149 imports_scatter = imports_df.stack().reset_index()
150 imports_scatter.columns = ['program', 'module', 'present']
151 imports_scatter = imports_scatter[imports_scatter.present]
156 imports_scatter.plot.scatter(x='program', y='module', s=80, rot=45, figsize=(10, 10))
160 imports_df.columns.size
164 cmap = mpl.colors.ListedColormap(['white', 'blue'])
166 fig, ax = plt.subplots(figsize=(10, 10))
167 ax.imshow(imports_df.to_numpy().T, cmap=cmap)
168 plt.xticks(range(imports_df.index.size), labels=imports_df.index.values, rotation=90);
169 plt.yticks(range(imports_df.columns.size), labels=imports_df.columns.values);
171 ax.xaxis.set_minor_locator(mpl.ticker.MultipleLocator(0.5))
172 ax.yaxis.set_minor_locator(mpl.ticker.MultipleLocator(0.5))
173 ax.grid(which='minor', axis='both', linestyle='-', color='silver', linewidth=1.5);
174 plt.savefig('imports.png');
178 import matplotlib as mpl