9 jupytext_version: 1.14.5
11 display_name: Python 3 (ipykernel)
18 import matplotlib as mpl
19 import matplotlib.pyplot as plt
22 from pstats import SortKey
24 from riddle_definitions import *
29 distances = [edit_distance(random.choice(dictionary),
30 random.choice(dictionary))
31 for _ in range(10000)]
32 distances = pd.Series(distances)
37 distances[distances <= 3].count() / distances.count()
41 metrics_original = pd.read_csv('metrics_original.csv')
46 metrics_related = pd.read_csv('metrics_related.csv')
51 metrics_lazy = pd.read_csv('metrics_lazy.csv')
56 metrics_original.describe()
60 metrics_related.describe()
64 metrics_lazy.describe()
68 fig, ax = plt.subplots(1, 1)
70 metrics_original.cpu_time.plot.hist(bins=20, ax=ax, alpha=0.5)
71 metrics_related.cpu_time.plot.hist(bins=20, ax=ax, alpha=0.5)
72 metrics_lazy.cpu_time.plot.hist(bins=20, ax=ax, alpha=0.5);
76 ax = metrics_original.cpu_time.plot.hist(bins=20, alpha=0.5)
77 metrics_related.cpu_time.plot.hist(bins=20, ax=ax, alpha=0.5)
78 metrics_lazy.cpu_time.plot.hist(bins=20, ax=ax, alpha=0.5);
82 ax = metrics_original.cpu_time.plot.kde(xlim=(0, 10))
83 metrics_related.cpu_time.plot.kde(ax=ax)
84 metrics_lazy.cpu_time.plot.kde(ax=ax);
88 fig, ax = plt.subplots()
89 ax.hist([metrics_original.cpu_time], bins=20)
90 ax.legend(['Original', 'Related', 'Related 2'])
91 ax.set_title('Times taken to generate a riddle')
92 ax.set_xlabel('Time (s)')
93 plt.savefig('original_time_histogram.png')
97 fig, ax = plt.subplots()
98 ax.hist([metrics_original.cpu_time,
99 metrics_related.cpu_time], bins=20)
100 ax.legend(['Original', 'Related'])
101 ax.set_title('Times taken to generate a riddle')
102 ax.set_xlabel('Time (s)')
103 plt.savefig('original_related_time_histogram.png')
107 fig, ax = plt.subplots()
108 ax.hist([metrics_original.cpu_time,
109 metrics_related.cpu_time,
110 metrics_lazy.cpu_time], bins=20)
111 ax.legend(['Original', 'Related', 'Lazy'])
112 ax.set_title('Times taken to generate a riddle')
113 ax.set_xlabel('Time (s)')
114 plt.savefig('original_related_lazy_time_histogram.png')
118 fig, ax = plt.subplots()
119 ax.hist([metrics_related.cpu_time,
120 metrics_lazy.cpu_time], bins=20,
121 color=['#ff7f0e', '#2ca02c'])
122 ax.legend(['Related', 'Lazy'])
123 ax.set_title('Times taken to generate a riddle')
124 ax.set_xlabel('Time (s)')
125 plt.savefig('related_lazy_time_histogram.png')
129 metrics_original['generated_per_line'] = metrics_original.generated_lines / metrics_original.riddle_lines
130 metrics_original['time_per_line'] = metrics_original.cpu_time / metrics_original.riddle_lines
135 metrics_related['generated_per_line'] = metrics_related.generated_lines / metrics_related.riddle_lines
136 metrics_related['time_per_line'] = metrics_related.cpu_time / metrics_related.riddle_lines
141 metrics_lazy['generated_per_line'] = metrics_lazy.generated_lines / metrics_lazy.riddle_lines
142 metrics_lazy['time_per_line'] = metrics_lazy.cpu_time / metrics_lazy.riddle_lines
147 fig, ax = plt.subplots()
148 ax.hist([metrics_original.time_per_line], bins=20)
149 ax.legend(['Original']);
153 fig, ax = plt.subplots()
154 ax.hist([metrics_original.time_per_line,
155 metrics_related.time_per_line], bins=20)
156 ax.legend(['Original', 'Related']);
160 fig, ax = plt.subplots()
161 ax.hist([metrics_original.time_per_line,
162 metrics_related.time_per_line,
163 metrics_lazy.time_per_line], bins=20)
164 ax.legend(['Original', 'Related', 'Lazy'])
168 plt.rcParams['axes.prop_cycle'].by_key()['color']
172 for bars, column in zip(*ax.get_legend_handles_labels()):
173 color = bars[0].get_facecolor()
178 fig, ax = plt.subplots()
179 ax.hist([metrics_related.time_per_line,
180 metrics_lazy.time_per_line], bins=20,
181 color=['#ff7f0e', '#2ca02c'])
182 ax.legend(['Related', 'Lazy']);
186 ax = metrics_original.time_per_line.plot.kde(xlim=(0, 2))
187 metrics_related.time_per_line.plot.kde(ax=ax)
188 metrics_lazy.time_per_line.plot.kde(ax=ax);
192 metrics_original.describe()
196 metrics_related.describe()
200 metrics_lazy.describe()
204 metrics_original.time_per_line.mean() / metrics_related.time_per_line.mean()
208 metrics_original.time_per_line.median() / metrics_related.time_per_line.median()
212 metrics_related.time_per_line.mean() / metrics_lazy.time_per_line.mean()
216 metrics_related.time_per_line.median() / metrics_lazy.time_per_line.median()
220 metrics_original.time_per_line.mean() / metrics_lazy.time_per_line.mean()
224 metrics_original.time_per_line.median() / metrics_lazy.time_per_line.median()
228 metrics_original.wall_time.mean() / metrics_related.wall_time.mean()
232 metrics_related.wall_time.mean() / metrics_lazy.wall_time.mean()
236 metrics_original.wall_time.mean() / metrics_lazy.wall_time.mean()
240 stats = pstats.Stats('filtered.stats')
241 stats.strip_dirs().sort_stats(SortKey.TIME).print_stats(10)
245 stats2 = pstats.Stats('lazy.stats')
246 stats2.strip_dirs().sort_stats(SortKey.TIME).print_stats(10)