5 "execution_count": 201,
13 "import pandas as pd\n",
14 "import numpy as np\n",
18 "import matplotlib.pyplot as plt\n",
24 "execution_count": null,
28 "! cd .. && cabal install"
33 "execution_count": null,
42 "output_type": "stream",
44 "Build profile: -w ghc-9.2.5 -O1\n",
45 "In order, the following will be built (use -v for more details):\n",
46 " - split-0.2.3.5 (lib) (requires build)\n",
47 " - advent-of-code22-0.1.0.0 (exe:advent01) --enable-profiling (configuration changed)\n",
48 "Starting split-0.2.3.5 (lib)\n",
49 "Building split-0.2.3.5 (lib)\n",
50 "Installing split-0.2.3.5 (lib)\n",
51 "Completed split-0.2.3.5 (lib)\n",
52 "Configuring executable 'advent01' for advent-of-code22-0.1.0.0..\n",
53 "Preprocessing executable 'advent01' for advent-of-code22-0.1.0.0..\n",
54 "Building executable 'advent01' for advent-of-code22-0.1.0.0..\n",
55 "[2 of 2] Compiling Main ( advent01/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent01/build/advent01/advent01-tmp/Main.dyn_o ) [Data.List.Split changed]\n",
56 "[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent01/build/advent01/advent01-tmp/AoC.p_o )\n",
57 "[2 of 2] Compiling Main ( advent01/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent01/build/advent01/advent01-tmp/Main.p_o )\n",
58 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent01/build/advent01/advent01 ...\n",
61 " 19,449,616 bytes allocated in the heap\n",
62 " 1,325,784 bytes copied during GC\n",
63 " 408,784 bytes maximum residency (2 sample(s))\n",
64 " 144,176 bytes maximum slop\n",
65 " 63 MiB total memory in use (0 MB lost due to fragmentation)\n",
67 " Tot time (elapsed) Avg pause Max pause\n",
68 " Gen 0 3 colls, 3 par 0.002s 0.001s 0.0003s 0.0003s\n",
69 " Gen 1 2 colls, 1 par 0.002s 0.001s 0.0004s 0.0005s\n",
71 " Parallel GC work balance: 29.84% (serial 0%, perfect 100%)\n",
73 " TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
75 " SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
77 " INIT time 0.004s ( 0.002s elapsed)\n",
78 " MUT time 0.013s ( 0.012s elapsed)\n",
79 " GC time 0.004s ( 0.002s elapsed)\n",
80 " RP time 0.000s ( 0.000s elapsed)\n",
81 " PROF time 0.000s ( 0.000s elapsed)\n",
82 " EXIT time 0.002s ( 0.001s elapsed)\n",
83 " Total time 0.023s ( 0.017s elapsed)\n",
85 " Alloc rate 1,512,211,092 bytes per MUT second\n",
87 " Productivity 56.0% of total user, 69.2% of total elapsed\n",
89 "Build profile: -w ghc-9.2.5 -O1\n",
90 "In order, the following will be built (use -v for more details):\n",
91 " - attoparsec-0.14.4 (lib:attoparsec-internal) (requires build)\n",
92 " - attoparsec-0.14.4 (lib) (requires build)\n",
93 " - advent-of-code22-0.1.0.0 (exe:advent02) --enable-profiling (configuration changed)\n",
94 "Starting attoparsec-0.14.4 (lib:attoparsec-internal)\n",
95 "Building attoparsec-0.14.4 (lib:attoparsec-internal)\n",
96 "Installing attoparsec-0.14.4 (lib:attoparsec-internal)\n",
97 "Completed attoparsec-0.14.4 (lib:attoparsec-internal)\n",
98 "Starting attoparsec-0.14.4 (lib)\n",
99 "Building attoparsec-0.14.4 (lib)\n",
100 "Installing attoparsec-0.14.4 (lib)\n",
101 "Completed attoparsec-0.14.4 (lib)\n",
102 "Configuring executable 'advent02' for advent-of-code22-0.1.0.0..\n",
103 "Preprocessing executable 'advent02' for advent-of-code22-0.1.0.0..\n",
104 "Building executable 'advent02' for advent-of-code22-0.1.0.0..\n",
105 "[2 of 2] Compiling Main ( advent02/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent02/build/advent02/advent02-tmp/Main.dyn_o ) [Data.Attoparsec.Text changed]\n",
107 "\u001b[;1madvent02/Main.hs:55:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
108 " Top-level binding with no type signature:\n",
109 " match1P :: Data.Attoparsec.Internal.Types.Parser\n",
110 " Data.Text.Internal.Text [Round]\u001b[0m\u001b[0m\n",
111 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
112 "\u001b[;1m\u001b[34m55 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmatch1P\u001b[0m\u001b[0m = roundP `sepBy` endOfLine\n",
113 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
115 "\u001b[;1madvent02/Main.hs:56:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
116 " Top-level binding with no type signature:\n",
117 " roundP :: Data.Attoparsec.Internal.Types.Parser\n",
118 " Data.Text.Internal.Text Round\u001b[0m\u001b[0m\n",
119 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
120 "\u001b[;1m\u001b[34m56 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mroundP\u001b[0m\u001b[0m = Round <$> p1ShapeP <*> (\" \" *> p2ShapeP)\n",
121 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^\u001b[0m\u001b[0m\n",
123 "\u001b[;1madvent02/Main.hs:58:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
124 " Top-level binding with no type signature:\n",
125 " match2P :: Data.Attoparsec.Internal.Types.Parser\n",
126 " Data.Text.Internal.Text [ShapeResult]\u001b[0m\u001b[0m\n",
127 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
128 "\u001b[;1m\u001b[34m58 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmatch2P\u001b[0m\u001b[0m = shapeResultP `sepBy` endOfLine\n",
129 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
131 "\u001b[;1madvent02/Main.hs:59:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
132 " Top-level binding with no type signature:\n",
133 " shapeResultP :: Data.Attoparsec.Internal.Types.Parser\n",
134 " Data.Text.Internal.Text ShapeResult\u001b[0m\u001b[0m\n",
135 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
136 "\u001b[;1m\u001b[34m59 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mshapeResultP\u001b[0m\u001b[0m = ShapeResult <$> p1ShapeP <*> (\" \" *> resultP)\n",
137 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
139 "\u001b[;1madvent02/Main.hs:61:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
140 " Top-level binding with no type signature:\n",
141 " p1ShapeP :: Data.Attoparsec.Internal.Types.Parser\n",
142 " Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
143 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
144 "\u001b[;1m\u001b[34m61 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mp1ShapeP\u001b[0m\u001b[0m = aP <|> bP <|> cP\n",
145 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^\u001b[0m\u001b[0m\n",
147 "\u001b[;1madvent02/Main.hs:62:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
148 " Top-level binding with no type signature:\n",
149 " aP :: Data.Attoparsec.Internal.Types.Parser\n",
150 " Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
151 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
152 "\u001b[;1m\u001b[34m62 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35maP\u001b[0m\u001b[0m = Rock <$ \"A\"\n",
153 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
155 "\u001b[;1madvent02/Main.hs:63:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
156 " Top-level binding with no type signature:\n",
157 " bP :: Data.Attoparsec.Internal.Types.Parser\n",
158 " Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
159 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
160 "\u001b[;1m\u001b[34m63 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mbP\u001b[0m\u001b[0m = Paper <$ \"B\"\n",
161 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
163 "\u001b[;1madvent02/Main.hs:64:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
164 " Top-level binding with no type signature:\n",
165 " cP :: Data.Attoparsec.Internal.Types.Parser\n",
166 " Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
167 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
168 "\u001b[;1m\u001b[34m64 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mcP\u001b[0m\u001b[0m = Scissors <$ \"C\"\n",
169 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
171 "\u001b[;1madvent02/Main.hs:66:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
172 " Top-level binding with no type signature:\n",
173 " p2ShapeP :: Data.Attoparsec.Internal.Types.Parser\n",
174 " Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
175 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
176 "\u001b[;1m\u001b[34m66 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mp2ShapeP\u001b[0m\u001b[0m = xP <|> yP <|> zP\n",
177 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^\u001b[0m\u001b[0m\n",
179 "\u001b[;1madvent02/Main.hs:67:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
180 " Top-level binding with no type signature:\n",
181 " xP :: Data.Attoparsec.Internal.Types.Parser\n",
182 " Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
183 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
184 "\u001b[;1m\u001b[34m67 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mxP\u001b[0m\u001b[0m = Rock <$ \"X\"\n",
185 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
187 "\u001b[;1madvent02/Main.hs:68:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
188 " Top-level binding with no type signature:\n",
189 " yP :: Data.Attoparsec.Internal.Types.Parser\n",
190 " Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
191 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
192 "\u001b[;1m\u001b[34m68 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35myP\u001b[0m\u001b[0m = Paper <$ \"Y\"\n",
193 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
195 "\u001b[;1madvent02/Main.hs:69:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
196 " Top-level binding with no type signature:\n",
197 " zP :: Data.Attoparsec.Internal.Types.Parser\n",
198 " Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
199 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
200 "\u001b[;1m\u001b[34m69 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mzP\u001b[0m\u001b[0m = Scissors <$ \"Z\"\n",
201 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
203 "\u001b[;1madvent02/Main.hs:71:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
204 " Top-level binding with no type signature:\n",
205 " resultP :: Data.Attoparsec.Internal.Types.Parser\n",
206 " Data.Text.Internal.Text Result\u001b[0m\u001b[0m\n",
207 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
208 "\u001b[;1m\u001b[34m71 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mresultP\u001b[0m\u001b[0m = xrP <|> yrP <|> zrP\n",
209 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
211 "\u001b[;1madvent02/Main.hs:72:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
212 " Top-level binding with no type signature:\n",
213 " xrP :: Data.Attoparsec.Internal.Types.Parser\n",
214 " Data.Text.Internal.Text Result\u001b[0m\u001b[0m\n",
215 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
216 "\u001b[;1m\u001b[34m72 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mxrP\u001b[0m\u001b[0m = Loss <$ \"X\"\n",
217 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^\u001b[0m\u001b[0m\n",
219 "\u001b[;1madvent02/Main.hs:73:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
220 " Top-level binding with no type signature:\n",
221 " yrP :: Data.Attoparsec.Internal.Types.Parser\n",
222 " Data.Text.Internal.Text Result\u001b[0m\u001b[0m\n",
223 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
224 "\u001b[;1m\u001b[34m73 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35myrP\u001b[0m\u001b[0m = Draw <$ \"Y\"\n",
225 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^\u001b[0m\u001b[0m\n",
227 "\u001b[;1madvent02/Main.hs:74:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
228 " Top-level binding with no type signature:\n",
229 " zrP :: Data.Attoparsec.Internal.Types.Parser\n",
230 " Data.Text.Internal.Text Result\u001b[0m\u001b[0m\n",
231 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
232 "\u001b[;1m\u001b[34m74 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mzrP\u001b[0m\u001b[0m = Win <$ \"Z\"\n",
233 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^\u001b[0m\u001b[0m\n",
235 "\u001b[;1madvent02/Main.hs:77:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
236 " Top-level binding with no type signature:\n",
237 " successfulParse1 :: Data.Text.Internal.Text -> [Round]\u001b[0m\u001b[0m\n",
238 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
239 "\u001b[;1m\u001b[34m77 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35msuccessfulParse1\u001b[0m\u001b[0m input = \n",
240 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
242 "\u001b[;1madvent02/Main.hs:80:11: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
243 " This binding for ‘match’ shadows the existing binding\n",
244 " imported from ‘Data.Attoparsec.Text’ at advent02/Main.hs:6:1-43\n",
245 " (and originally defined in ‘attoparsec-0.14.4-6c5af65faab69e2a5d91c97faaf49696df50d10719db2c6a1db14bb260536cd8:Data.Attoparsec.Text.Internal’)\u001b[0m\u001b[0m\n",
246 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
247 "\u001b[;1m\u001b[34m80 |\u001b[0m\u001b[0m Right \u001b[;1m\u001b[35mmatch\u001b[0m\u001b[0m -> match\n",
248 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^\u001b[0m\u001b[0m\n",
250 "\u001b[;1madvent02/Main.hs:82:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
251 " Top-level binding with no type signature:\n",
252 " successfulParse2 :: Data.Text.Internal.Text -> [ShapeResult]\u001b[0m\u001b[0m\n",
253 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
254 "\u001b[;1m\u001b[34m82 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35msuccessfulParse2\u001b[0m\u001b[0m input = \n",
255 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
257 "\u001b[;1madvent02/Main.hs:85:11: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
258 " This binding for ‘match’ shadows the existing binding\n",
259 " imported from ‘Data.Attoparsec.Text’ at advent02/Main.hs:6:1-43\n",
260 " (and originally defined in ‘attoparsec-0.14.4-6c5af65faab69e2a5d91c97faaf49696df50d10719db2c6a1db14bb260536cd8:Data.Attoparsec.Text.Internal’)\u001b[0m\u001b[0m\n",
261 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
262 "\u001b[;1m\u001b[34m85 |\u001b[0m\u001b[0m Right \u001b[;1m\u001b[35mmatch\u001b[0m\u001b[0m -> match\n",
263 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^\u001b[0m\u001b[0m\n",
264 "[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent02/build/advent02/advent02-tmp/AoC.p_o )\n",
265 "[2 of 2] Compiling Main ( advent02/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent02/build/advent02/advent02-tmp/Main.p_o )\n",
267 "\u001b[;1madvent02/Main.hs:55:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
268 " Top-level binding with no type signature:\n",
269 " match1P :: Data.Attoparsec.Internal.Types.Parser\n",
270 " Data.Text.Internal.Text [Round]\u001b[0m\u001b[0m\n",
271 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
272 "\u001b[;1m\u001b[34m55 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmatch1P\u001b[0m\u001b[0m = roundP `sepBy` endOfLine\n",
273 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
275 "\u001b[;1madvent02/Main.hs:56:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
276 " Top-level binding with no type signature:\n",
277 " roundP :: Data.Attoparsec.Internal.Types.Parser\n",
278 " Data.Text.Internal.Text Round\u001b[0m\u001b[0m\n",
279 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
280 "\u001b[;1m\u001b[34m56 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mroundP\u001b[0m\u001b[0m = Round <$> p1ShapeP <*> (\" \" *> p2ShapeP)\n",
281 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^\u001b[0m\u001b[0m\n",
283 "\u001b[;1madvent02/Main.hs:58:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
284 " Top-level binding with no type signature:\n",
285 " match2P :: Data.Attoparsec.Internal.Types.Parser\n",
286 " Data.Text.Internal.Text [ShapeResult]\u001b[0m\u001b[0m\n",
287 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
288 "\u001b[;1m\u001b[34m58 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmatch2P\u001b[0m\u001b[0m = shapeResultP `sepBy` endOfLine\n",
289 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
291 "\u001b[;1madvent02/Main.hs:59:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
292 " Top-level binding with no type signature:\n",
293 " shapeResultP :: Data.Attoparsec.Internal.Types.Parser\n",
294 " Data.Text.Internal.Text ShapeResult\u001b[0m\u001b[0m\n",
295 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
296 "\u001b[;1m\u001b[34m59 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mshapeResultP\u001b[0m\u001b[0m = ShapeResult <$> p1ShapeP <*> (\" \" *> resultP)\n",
297 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
299 "\u001b[;1madvent02/Main.hs:61:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
300 " Top-level binding with no type signature:\n",
301 " p1ShapeP :: Data.Attoparsec.Internal.Types.Parser\n",
302 " Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
303 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
304 "\u001b[;1m\u001b[34m61 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mp1ShapeP\u001b[0m\u001b[0m = aP <|> bP <|> cP\n",
305 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^\u001b[0m\u001b[0m\n",
307 "\u001b[;1madvent02/Main.hs:62:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
308 " Top-level binding with no type signature:\n",
309 " aP :: Data.Attoparsec.Internal.Types.Parser\n",
310 " Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
311 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
312 "\u001b[;1m\u001b[34m62 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35maP\u001b[0m\u001b[0m = Rock <$ \"A\"\n",
313 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
315 "\u001b[;1madvent02/Main.hs:63:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
316 " Top-level binding with no type signature:\n",
317 " bP :: Data.Attoparsec.Internal.Types.Parser\n",
318 " Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
319 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
320 "\u001b[;1m\u001b[34m63 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mbP\u001b[0m\u001b[0m = Paper <$ \"B\"\n",
321 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
323 "\u001b[;1madvent02/Main.hs:64:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
324 " Top-level binding with no type signature:\n",
325 " cP :: Data.Attoparsec.Internal.Types.Parser\n",
326 " Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
327 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
328 "\u001b[;1m\u001b[34m64 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mcP\u001b[0m\u001b[0m = Scissors <$ \"C\"\n",
329 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
331 "\u001b[;1madvent02/Main.hs:66:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
332 " Top-level binding with no type signature:\n",
333 " p2ShapeP :: Data.Attoparsec.Internal.Types.Parser\n",
334 " Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
335 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
336 "\u001b[;1m\u001b[34m66 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mp2ShapeP\u001b[0m\u001b[0m = xP <|> yP <|> zP\n",
337 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^\u001b[0m\u001b[0m\n",
339 "\u001b[;1madvent02/Main.hs:67:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
340 " Top-level binding with no type signature:\n",
341 " xP :: Data.Attoparsec.Internal.Types.Parser\n",
342 " Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
343 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
344 "\u001b[;1m\u001b[34m67 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mxP\u001b[0m\u001b[0m = Rock <$ \"X\"\n",
345 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
347 "\u001b[;1madvent02/Main.hs:68:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
348 " Top-level binding with no type signature:\n",
349 " yP :: Data.Attoparsec.Internal.Types.Parser\n",
350 " Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
351 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
352 "\u001b[;1m\u001b[34m68 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35myP\u001b[0m\u001b[0m = Paper <$ \"Y\"\n",
353 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
355 "\u001b[;1madvent02/Main.hs:69:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
356 " Top-level binding with no type signature:\n",
357 " zP :: Data.Attoparsec.Internal.Types.Parser\n",
358 " Data.Text.Internal.Text Shape\u001b[0m\u001b[0m\n",
359 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
360 "\u001b[;1m\u001b[34m69 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mzP\u001b[0m\u001b[0m = Scissors <$ \"Z\"\n",
361 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^\u001b[0m\u001b[0m\n",
363 "\u001b[;1madvent02/Main.hs:71:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
364 " Top-level binding with no type signature:\n",
365 " resultP :: Data.Attoparsec.Internal.Types.Parser\n",
366 " Data.Text.Internal.Text Result\u001b[0m\u001b[0m\n",
367 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
368 "\u001b[;1m\u001b[34m71 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mresultP\u001b[0m\u001b[0m = xrP <|> yrP <|> zrP\n",
369 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
371 "\u001b[;1madvent02/Main.hs:72:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
372 " Top-level binding with no type signature:\n",
373 " xrP :: Data.Attoparsec.Internal.Types.Parser\n",
374 " Data.Text.Internal.Text Result\u001b[0m\u001b[0m\n",
375 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
376 "\u001b[;1m\u001b[34m72 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mxrP\u001b[0m\u001b[0m = Loss <$ \"X\"\n",
377 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^\u001b[0m\u001b[0m\n",
379 "\u001b[;1madvent02/Main.hs:73:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
380 " Top-level binding with no type signature:\n",
381 " yrP :: Data.Attoparsec.Internal.Types.Parser\n",
382 " Data.Text.Internal.Text Result\u001b[0m\u001b[0m\n",
383 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
384 "\u001b[;1m\u001b[34m73 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35myrP\u001b[0m\u001b[0m = Draw <$ \"Y\"\n",
385 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^\u001b[0m\u001b[0m\n",
387 "\u001b[;1madvent02/Main.hs:74:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
388 " Top-level binding with no type signature:\n",
389 " zrP :: Data.Attoparsec.Internal.Types.Parser\n",
390 " Data.Text.Internal.Text Result\u001b[0m\u001b[0m\n",
391 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
392 "\u001b[;1m\u001b[34m74 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mzrP\u001b[0m\u001b[0m = Win <$ \"Z\"\n",
393 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^\u001b[0m\u001b[0m\n",
395 "\u001b[;1madvent02/Main.hs:77:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
396 " Top-level binding with no type signature:\n",
397 " successfulParse1 :: Data.Text.Internal.Text -> [Round]\u001b[0m\u001b[0m\n",
398 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
399 "\u001b[;1m\u001b[34m77 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35msuccessfulParse1\u001b[0m\u001b[0m input = \n",
400 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
402 "\u001b[;1madvent02/Main.hs:80:11: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
403 " This binding for ‘match’ shadows the existing binding\n",
404 " imported from ‘Data.Attoparsec.Text’ at advent02/Main.hs:6:1-43\n",
405 " (and originally defined in ‘attoparsec-0.14.4-6c5af65faab69e2a5d91c97faaf49696df50d10719db2c6a1db14bb260536cd8:Data.Attoparsec.Text.Internal’)\u001b[0m\u001b[0m\n",
406 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
407 "\u001b[;1m\u001b[34m80 |\u001b[0m\u001b[0m Right \u001b[;1m\u001b[35mmatch\u001b[0m\u001b[0m -> match\n",
408 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^\u001b[0m\u001b[0m\n",
410 "\u001b[;1madvent02/Main.hs:82:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wmissing-signatures\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
411 " Top-level binding with no type signature:\n",
412 " successfulParse2 :: Data.Text.Internal.Text -> [ShapeResult]\u001b[0m\u001b[0m\n",
413 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
414 "\u001b[;1m\u001b[34m82 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35msuccessfulParse2\u001b[0m\u001b[0m input = \n",
415 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
417 "\u001b[;1madvent02/Main.hs:85:11: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
418 " This binding for ‘match’ shadows the existing binding\n",
419 " imported from ‘Data.Attoparsec.Text’ at advent02/Main.hs:6:1-43\n",
420 " (and originally defined in ‘attoparsec-0.14.4-6c5af65faab69e2a5d91c97faaf49696df50d10719db2c6a1db14bb260536cd8:Data.Attoparsec.Text.Internal’)\u001b[0m\u001b[0m\n",
421 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
422 "\u001b[;1m\u001b[34m85 |\u001b[0m\u001b[0m Right \u001b[;1m\u001b[35mmatch\u001b[0m\u001b[0m -> match\n",
423 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^\u001b[0m\u001b[0m\n",
424 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent02/build/advent02/advent02 ...\n",
427 " 15,142,040 bytes allocated in the heap\n",
428 " 1,016,576 bytes copied during GC\n",
429 " 294,736 bytes maximum residency (2 sample(s))\n",
430 " 143,536 bytes maximum slop\n",
431 " 63 MiB total memory in use (0 MB lost due to fragmentation)\n",
433 " Tot time (elapsed) Avg pause Max pause\n",
434 " Gen 0 2 colls, 2 par 0.001s 0.001s 0.0004s 0.0004s\n",
435 " Gen 1 2 colls, 1 par 0.002s 0.001s 0.0003s 0.0003s\n",
437 " Parallel GC work balance: 31.81% (serial 0%, perfect 100%)\n",
439 " TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
441 " SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
443 " INIT time 0.004s ( 0.002s elapsed)\n",
444 " MUT time 0.014s ( 0.013s elapsed)\n",
445 " GC time 0.003s ( 0.001s elapsed)\n",
446 " RP time 0.000s ( 0.000s elapsed)\n",
447 " PROF time 0.000s ( 0.000s elapsed)\n",
448 " EXIT time 0.002s ( 0.001s elapsed)\n",
449 " Total time 0.023s ( 0.017s elapsed)\n",
451 " Alloc rate 1,119,000,702 bytes per MUT second\n",
453 " Productivity 59.2% of total user, 73.6% of total elapsed\n",
455 "Build profile: -w ghc-9.2.5 -O1\n",
456 "In order, the following will be built (use -v for more details):\n",
457 " - advent-of-code22-0.1.0.0 (exe:advent03) --enable-profiling (configuration changed)\n",
458 "Configuring executable 'advent03' for advent-of-code22-0.1.0.0..\n",
459 "Preprocessing executable 'advent03' for advent-of-code22-0.1.0.0..\n",
460 "Building executable 'advent03' for advent-of-code22-0.1.0.0..\n",
461 "[2 of 2] Compiling Main ( advent03/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent03/build/advent03/advent03-tmp/Main.dyn_o ) [Data.List.Split changed]\n",
462 "[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent03/build/advent03/advent03-tmp/AoC.p_o )\n",
463 "[2 of 2] Compiling Main ( advent03/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent03/build/advent03/advent03-tmp/Main.p_o )\n",
464 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent03/build/advent03/advent03 ...\n",
467 " 9,004,224 bytes allocated in the heap\n",
468 " 886,400 bytes copied during GC\n",
469 " 214,088 bytes maximum residency (1 sample(s))\n",
470 " 121,784 bytes maximum slop\n",
471 " 62 MiB total memory in use (0 MB lost due to fragmentation)\n",
473 " Tot time (elapsed) Avg pause Max pause\n",
474 " Gen 0 2 colls, 2 par 0.002s 0.001s 0.0006s 0.0010s\n",
475 " Gen 1 1 colls, 0 par 0.000s 0.000s 0.0003s 0.0003s\n",
477 " Parallel GC work balance: 24.28% (serial 0%, perfect 100%)\n",
479 " TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
481 " SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
483 " INIT time 0.004s ( 0.002s elapsed)\n",
484 " MUT time 0.007s ( 0.006s elapsed)\n",
485 " GC time 0.002s ( 0.002s elapsed)\n",
486 " RP time 0.000s ( 0.000s elapsed)\n",
487 " PROF time 0.000s ( 0.000s elapsed)\n",
488 " EXIT time 0.002s ( 0.001s elapsed)\n",
489 " Total time 0.015s ( 0.011s elapsed)\n",
491 " Alloc rate 1,362,247,646 bytes per MUT second\n",
493 " Productivity 43.5% of total user, 54.5% of total elapsed\n",
495 "Build profile: -w ghc-9.2.5 -O1\n",
496 "In order, the following will be built (use -v for more details):\n",
497 " - advent-of-code22-0.1.0.0 (exe:advent04) --enable-profiling (configuration changed)\n",
498 "Configuring executable 'advent04' for advent-of-code22-0.1.0.0..\n",
499 "Preprocessing executable 'advent04' for advent-of-code22-0.1.0.0..\n",
500 "Building executable 'advent04' for advent-of-code22-0.1.0.0..\n",
501 "[2 of 2] Compiling Main ( advent04/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent04/build/advent04/advent04-tmp/Main.dyn_o ) [Data.Attoparsec.Text changed]\n",
502 "[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent04/build/advent04/advent04-tmp/AoC.p_o )\n",
503 "[2 of 2] Compiling Main ( advent04/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent04/build/advent04/advent04-tmp/Main.p_o )\n",
504 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent04/build/advent04/advent04 ...\n",
507 " 4,443,080 bytes allocated in the heap\n",
508 " 164,040 bytes copied during GC\n",
509 " 223,280 bytes maximum residency (1 sample(s))\n",
510 " 124,880 bytes maximum slop\n",
511 " 62 MiB total memory in use (0 MB lost due to fragmentation)\n",
513 " Tot time (elapsed) Avg pause Max pause\n",
514 " Gen 0 0 colls, 0 par 0.000s 0.000s 0.0000s 0.0000s\n",
515 " Gen 1 1 colls, 0 par 0.000s 0.000s 0.0003s 0.0003s\n",
517 " TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
519 " SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
521 " INIT time 0.005s ( 0.003s elapsed)\n",
522 " MUT time 0.005s ( 0.005s elapsed)\n",
523 " GC time 0.000s ( 0.000s elapsed)\n",
524 " RP time 0.000s ( 0.000s elapsed)\n",
525 " PROF time 0.000s ( 0.000s elapsed)\n",
526 " EXIT time 0.002s ( 0.001s elapsed)\n",
527 " Total time 0.013s ( 0.009s elapsed)\n",
529 " Alloc rate 853,932,014 bytes per MUT second\n",
531 " Productivity 40.5% of total user, 54.6% of total elapsed\n",
533 "Build profile: -w ghc-9.2.5 -O1\n",
534 "In order, the following will be built (use -v for more details):\n",
535 " - advent-of-code22-0.1.0.0 (exe:advent05) --enable-profiling (configuration changed)\n",
536 "Configuring executable 'advent05' for advent-of-code22-0.1.0.0..\n",
537 "Preprocessing executable 'advent05' for advent-of-code22-0.1.0.0..\n",
538 "Building executable 'advent05' for advent-of-code22-0.1.0.0..\n",
539 "[2 of 2] Compiling Main ( advent05/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent05/build/advent05/advent05-tmp/Main.dyn_o ) [Data.Attoparsec.Text changed]\n",
541 "\u001b[;1madvent05/Main.hs:54:9: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wincomplete-uni-patterns\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
542 " Pattern match(es) are non-exhaustive\n",
543 " In a pattern binding: Patterns of type ‘[Crate]’ not matched: []\u001b[0m\u001b[0m\n",
544 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
545 "\u001b[;1m\u001b[34m54 |\u001b[0m\u001b[0m where \u001b[;1m\u001b[35m(c:origin) = wharf!from\u001b[0m\u001b[0m\n",
546 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
547 "[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent05/build/advent05/advent05-tmp/AoC.p_o )\n",
548 "[2 of 2] Compiling Main ( advent05/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent05/build/advent05/advent05-tmp/Main.p_o )\n",
550 "\u001b[;1madvent05/Main.hs:54:9: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wincomplete-uni-patterns\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
551 " Pattern match(es) are non-exhaustive\n",
552 " In a pattern binding: Patterns of type ‘[Crate]’ not matched: []\u001b[0m\u001b[0m\n",
553 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
554 "\u001b[;1m\u001b[34m54 |\u001b[0m\u001b[0m where \u001b[;1m\u001b[35m(c:origin) = wharf!from\u001b[0m\u001b[0m\n",
555 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
556 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent05/build/advent05/advent05 ...\n",
559 " 5,094,344 bytes allocated in the heap\n",
560 " 425,056 bytes copied during GC\n",
561 " 214,088 bytes maximum residency (1 sample(s))\n",
562 " 125,880 bytes maximum slop\n",
563 " 62 MiB total memory in use (0 MB lost due to fragmentation)\n",
565 " Tot time (elapsed) Avg pause Max pause\n",
566 " Gen 0 1 colls, 1 par 0.001s 0.000s 0.0003s 0.0003s\n",
567 " Gen 1 1 colls, 0 par 0.000s 0.000s 0.0003s 0.0003s\n",
569 " Parallel GC work balance: 49.39% (serial 0%, perfect 100%)\n",
571 " TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
573 " SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
575 " INIT time 0.004s ( 0.002s elapsed)\n",
576 " MUT time 0.005s ( 0.004s elapsed)\n",
577 " GC time 0.001s ( 0.001s elapsed)\n",
578 " RP time 0.000s ( 0.000s elapsed)\n",
579 " PROF time 0.000s ( 0.000s elapsed)\n",
580 " EXIT time 0.002s ( 0.001s elapsed)\n",
581 " Total time 0.012s ( 0.008s elapsed)\n",
583 " Alloc rate 1,061,113,423 bytes per MUT second\n",
585 " Productivity 40.8% of total user, 53.4% of total elapsed\n",
587 "Build profile: -w ghc-9.2.5 -O1\n",
588 "In order, the following will be built (use -v for more details):\n",
589 " - advent-of-code22-0.1.0.0 (exe:advent06) --enable-profiling (configuration changed)\n",
590 "Configuring executable 'advent06' for advent-of-code22-0.1.0.0..\n",
591 "Preprocessing executable 'advent06' for advent-of-code22-0.1.0.0..\n",
592 "Building executable 'advent06' for advent-of-code22-0.1.0.0..\n",
593 "[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent06/build/advent06/advent06-tmp/AoC.p_o )\n",
594 "[2 of 2] Compiling Main ( advent06/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent06/build/advent06/advent06-tmp/Main.p_o )\n",
595 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent06/build/advent06/advent06 ...\n",
598 " 7,728,352 bytes allocated in the heap\n",
599 " 340,432 bytes copied during GC\n",
600 " 231,824 bytes maximum residency (1 sample(s))\n",
601 " 132,720 bytes maximum slop\n",
602 " 61 MiB total memory in use (0 MB lost due to fragmentation)\n",
604 " Tot time (elapsed) Avg pause Max pause\n",
605 " Gen 0 1 colls, 1 par 0.001s 0.000s 0.0002s 0.0002s\n",
606 " Gen 1 1 colls, 0 par 0.000s 0.000s 0.0003s 0.0003s\n",
608 " Parallel GC work balance: 57.64% (serial 0%, perfect 100%)\n",
610 " TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
612 " SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
614 " INIT time 0.004s ( 0.003s elapsed)\n",
615 " MUT time 0.004s ( 0.004s elapsed)\n",
616 " GC time 0.001s ( 0.000s elapsed)\n",
617 " RP time 0.000s ( 0.000s elapsed)\n",
618 " PROF time 0.000s ( 0.000s elapsed)\n",
619 " EXIT time 0.002s ( 0.001s elapsed)\n",
620 " Total time 0.012s ( 0.008s elapsed)\n",
622 " Alloc rate 1,749,470,406 bytes per MUT second\n",
624 " Productivity 37.0% of total user, 50.2% of total elapsed\n",
626 "Build profile: -w ghc-9.2.5 -O1\n",
627 "In order, the following will be built (use -v for more details):\n",
628 " - rosezipper-0.2 (lib:rosezipper) (requires build)\n",
629 " - advent-of-code22-0.1.0.0 (exe:advent07) --enable-profiling (configuration changed)\n",
630 "Starting rosezipper-0.2 (all, legacy fallback)\n",
631 "Building rosezipper-0.2 (all, legacy fallback)\n",
632 "Installing rosezipper-0.2 (all, legacy fallback)\n",
633 "Completed rosezipper-0.2 (all, legacy fallback)\n",
634 "Configuring executable 'advent07' for advent-of-code22-0.1.0.0..\n",
635 "Preprocessing executable 'advent07' for advent-of-code22-0.1.0.0..\n",
636 "Building executable 'advent07' for advent-of-code22-0.1.0.0..\n",
637 "[2 of 2] Compiling Main ( advent07/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent07/build/advent07/advent07-tmp/Main.dyn_o )\n",
638 "[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent07/build/advent07/advent07-tmp/AoC.p_o )\n",
639 "[2 of 2] Compiling Main ( advent07/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent07/build/advent07/advent07-tmp/Main.p_o )\n",
640 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent07/build/advent07/advent07 ...\n",
643 " 4,838,856 bytes allocated in the heap\n",
644 " 510,704 bytes copied during GC\n",
645 " 214,088 bytes maximum residency (1 sample(s))\n",
646 " 125,880 bytes maximum slop\n",
647 " 63 MiB total memory in use (0 MB lost due to fragmentation)\n",
649 " Tot time (elapsed) Avg pause Max pause\n",
650 " Gen 0 1 colls, 1 par 0.001s 0.000s 0.0005s 0.0005s\n",
651 " Gen 1 1 colls, 0 par 0.000s 0.000s 0.0004s 0.0004s\n",
653 " Parallel GC work balance: 41.61% (serial 0%, perfect 100%)\n",
655 " TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
657 " SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
659 " INIT time 0.004s ( 0.002s elapsed)\n",
660 " MUT time 0.006s ( 0.006s elapsed)\n",
661 " GC time 0.001s ( 0.001s elapsed)\n",
662 " RP time 0.000s ( 0.000s elapsed)\n",
663 " PROF time 0.000s ( 0.000s elapsed)\n",
664 " EXIT time 0.002s ( 0.001s elapsed)\n",
665 " Total time 0.013s ( 0.010s elapsed)\n",
667 " Alloc rate 792,510,382 bytes per MUT second\n",
669 " Productivity 45.7% of total user, 56.1% of total elapsed\n",
671 "Build profile: -w ghc-9.2.5 -O1\n",
672 "In order, the following will be built (use -v for more details):\n",
673 " - advent-of-code22-0.1.0.0 (exe:advent08) --enable-profiling (first run)\n",
674 "Configuring executable 'advent08' for advent-of-code22-0.1.0.0..\n",
675 "Preprocessing executable 'advent08' for advent-of-code22-0.1.0.0..\n",
676 "Building executable 'advent08' for advent-of-code22-0.1.0.0..\n",
677 "[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent08/build/advent08/advent08-tmp/AoC.dyn_o )\n",
678 "[2 of 2] Compiling Main ( advent08/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent08/build/advent08/advent08-tmp/Main.dyn_o )\n",
679 "[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent08/build/advent08/advent08-tmp/AoC.p_o )\n",
680 "[2 of 2] Compiling Main ( advent08/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent08/build/advent08/advent08-tmp/Main.p_o )\n",
681 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent08/build/advent08/advent08 ...\n",
684 " 351,652,392 bytes allocated in the heap\n",
685 " 11,062,736 bytes copied during GC\n",
686 " 1,485,704 bytes maximum residency (6 sample(s))\n",
687 " 138,792 bytes maximum slop\n",
688 " 63 MiB total memory in use (0 MB lost due to fragmentation)\n",
690 " Tot time (elapsed) Avg pause Max pause\n",
691 " Gen 0 80 colls, 80 par 0.077s 0.025s 0.0003s 0.0069s\n",
692 " Gen 1 6 colls, 5 par 0.016s 0.004s 0.0007s 0.0013s\n",
694 " Parallel GC work balance: 45.01% (serial 0%, perfect 100%)\n",
696 " TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
698 " SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
700 " INIT time 0.005s ( 0.003s elapsed)\n",
701 " MUT time 0.174s ( 0.164s elapsed)\n",
702 " GC time 0.092s ( 0.029s elapsed)\n",
703 " RP time 0.000s ( 0.000s elapsed)\n",
704 " PROF time 0.001s ( 0.001s elapsed)\n",
705 " EXIT time 0.002s ( 0.001s elapsed)\n",
706 " Total time 0.273s ( 0.197s elapsed)\n",
708 " Alloc rate 2,024,427,305 bytes per MUT second\n",
710 " Productivity 63.9% of total user, 83.3% of total elapsed\n",
712 "Build profile: -w ghc-9.2.5 -O1\n",
713 "In order, the following will be built (use -v for more details):\n",
714 " - advent-of-code22-0.1.0.0 (exe:advent09) --enable-profiling (first run)\n",
715 "Configuring executable 'advent09' for advent-of-code22-0.1.0.0..\n",
716 "Preprocessing executable 'advent09' for advent-of-code22-0.1.0.0..\n",
717 "Building executable 'advent09' for advent-of-code22-0.1.0.0..\n",
718 "[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent09/build/advent09/advent09-tmp/AoC.dyn_o )\n",
719 "[2 of 2] Compiling Main ( advent09/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent09/build/advent09/advent09-tmp/Main.dyn_o )\n",
720 "[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent09/build/advent09/advent09-tmp/AoC.p_o )\n",
721 "[2 of 2] Compiling Main ( advent09/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent09/build/advent09/advent09-tmp/Main.p_o )\n",
722 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent09/build/advent09/advent09 ...\n",
725 " 59,497,800 bytes allocated in the heap\n",
726 " 40,326,560 bytes copied during GC\n",
727 " 8,220,544 bytes maximum residency (6 sample(s))\n",
728 " 2,878,880 bytes maximum slop\n",
729 " 77 MiB total memory in use (0 MB lost due to fragmentation)\n",
731 " Tot time (elapsed) Avg pause Max pause\n",
732 " Gen 0 7 colls, 7 par 0.029s 0.027s 0.0038s 0.0066s\n",
733 " Gen 1 6 colls, 5 par 0.054s 0.037s 0.0061s 0.0125s\n",
735 " Parallel GC work balance: 7.47% (serial 0%, perfect 100%)\n",
737 " TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
739 " SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
741 " INIT time 0.004s ( 0.002s elapsed)\n",
742 " MUT time 0.041s ( 0.039s elapsed)\n",
743 " GC time 0.083s ( 0.063s elapsed)\n",
744 " RP time 0.000s ( 0.000s elapsed)\n",
745 " PROF time 0.000s ( 0.000s elapsed)\n",
746 " EXIT time 0.002s ( 0.001s elapsed)\n",
747 " Total time 0.131s ( 0.105s elapsed)\n",
749 " Alloc rate 1,443,718,624 bytes per MUT second\n",
751 " Productivity 31.6% of total user, 36.9% of total elapsed\n",
753 "Build profile: -w ghc-9.2.5 -O1\n",
754 "In order, the following will be built (use -v for more details):\n",
755 " - advent-of-code22-0.1.0.0 (exe:advent10) --enable-profiling (first run)\n",
756 "Configuring executable 'advent10' for advent-of-code22-0.1.0.0..\n",
757 "Preprocessing executable 'advent10' for advent-of-code22-0.1.0.0..\n",
758 "Building executable 'advent10' for advent-of-code22-0.1.0.0..\n",
759 "[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent10/build/advent10/advent10-tmp/AoC.dyn_o )\n",
760 "[2 of 2] Compiling Main ( advent10/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent10/build/advent10/advent10-tmp/Main.dyn_o )\n",
761 "[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent10/build/advent10/advent10-tmp/AoC.p_o )\n",
762 "[2 of 2] Compiling Main ( advent10/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent10/build/advent10/advent10-tmp/Main.p_o )\n",
763 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent10/build/advent10/advent10 ...\n",
765 "███ ███ ██ ██ ████ ██ ██ ███ \n",
766 "â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ \n",
767 "███ █ █ █ █ █ █ █ █ █ █ █ \n",
768 "█ █ ███ █ ████ █ █ ██ ████ ███ \n",
769 "â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ \n",
770 "███ █ ██ █ █ ████ ███ █ █ █ \n",
773 " 900,472 bytes allocated in the heap\n",
774 " 164,040 bytes copied during GC\n",
775 " 223,280 bytes maximum residency (1 sample(s))\n",
776 " 124,880 bytes maximum slop\n",
777 " 62 MiB total memory in use (0 MB lost due to fragmentation)\n",
779 " Tot time (elapsed) Avg pause Max pause\n",
780 " Gen 0 0 colls, 0 par 0.000s 0.000s 0.0000s 0.0000s\n",
781 " Gen 1 1 colls, 0 par 0.000s 0.000s 0.0005s 0.0005s\n",
783 " TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
785 " SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
787 " INIT time 0.004s ( 0.002s elapsed)\n",
788 " MUT time 0.001s ( 0.001s elapsed)\n",
789 " GC time 0.000s ( 0.000s elapsed)\n",
790 " RP time 0.000s ( 0.000s elapsed)\n",
791 " PROF time 0.000s ( 0.000s elapsed)\n",
792 " EXIT time 0.002s ( 0.001s elapsed)\n",
793 " Total time 0.008s ( 0.005s elapsed)\n",
795 " Alloc rate 680,385,621 bytes per MUT second\n",
797 " Productivity 16.9% of total user, 23.5% of total elapsed\n",
799 "Build profile: -w ghc-9.2.5 -O1\n",
800 "In order, the following will be built (use -v for more details):\n",
801 " - advent-of-code22-0.1.0.0 (exe:advent11) --enable-profiling (configuration changed)\n",
802 "Configuring executable 'advent11' for advent-of-code22-0.1.0.0..\n",
803 "Preprocessing executable 'advent11' for advent-of-code22-0.1.0.0..\n",
804 "Building executable 'advent11' for advent-of-code22-0.1.0.0..\n",
805 "[2 of 2] Compiling Main ( advent11/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent11/build/advent11/advent11-tmp/Main.dyn_o )\n",
807 "\u001b[;1madvent11/Main.hs:89:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wincomplete-patterns\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
808 " Pattern match(es) are non-exhaustive\n",
809 " In an equation for ‘updateWorry’:\n",
810 " Patterns of type ‘Int’, ‘Expression’, ‘Int -> Int’ not matched:\n",
811 " _ (Expression Plus (Literal _)) _\n",
812 " _ (Expression Plus Old) _\n",
813 " _ (Expression Times (Literal _)) _\n",
814 " _ (Expression Times Old) _\u001b[0m\u001b[0m\n",
815 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
816 "\u001b[;1m\u001b[34m89 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mupdateWorry current (Expression operator operand) threshold\u001b[0m\u001b[0m\n",
817 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...\u001b[0m\u001b[0m\n",
818 "[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent11/build/advent11/advent11-tmp/AoC.p_o )\n",
819 "[2 of 2] Compiling Main ( advent11/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent11/build/advent11/advent11-tmp/Main.p_o )\n",
821 "\u001b[;1madvent11/Main.hs:89:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wincomplete-patterns\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
822 " Pattern match(es) are non-exhaustive\n",
823 " In an equation for ‘updateWorry’:\n",
824 " Patterns of type ‘Int’, ‘Expression’, ‘Int -> Int’ not matched:\n",
825 " _ (Expression Plus (Literal _)) _\n",
826 " _ (Expression Plus Old) _\n",
827 " _ (Expression Times (Literal _)) _\n",
828 " _ (Expression Times Old) _\u001b[0m\u001b[0m\n",
829 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
830 "\u001b[;1m\u001b[34m89 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mupdateWorry current (Expression operator operand) threshold\u001b[0m\u001b[0m\n",
831 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...\u001b[0m\u001b[0m\n",
832 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent11/build/advent11/advent11 ...\n",
835 " 1,017,483,040 bytes allocated in the heap\n",
836 " 383,219,896 bytes copied during GC\n",
837 " 59,332,752 bytes maximum residency (11 sample(s))\n",
838 " 748,528 bytes maximum slop\n",
839 " 179 MiB total memory in use (0 MB lost due to fragmentation)\n",
841 " Tot time (elapsed) Avg pause Max pause\n",
842 " Gen 0 231 colls, 231 par 0.216s 0.175s 0.0008s 0.0086s\n",
843 " Gen 1 11 colls, 10 par 0.733s 0.215s 0.0195s 0.0584s\n",
845 " Parallel GC work balance: 49.26% (serial 0%, perfect 100%)\n",
847 " TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
849 " SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
851 " INIT time 0.004s ( 0.003s elapsed)\n",
852 " MUT time 0.508s ( 0.467s elapsed)\n",
853 " GC time 0.860s ( 0.301s elapsed)\n",
854 " RP time 0.000s ( 0.000s elapsed)\n",
855 " PROF time 0.089s ( 0.088s elapsed)\n",
856 " EXIT time 0.002s ( 0.001s elapsed)\n",
857 " Total time 1.464s ( 0.860s elapsed)\n",
859 " Alloc rate 2,004,482,550 bytes per MUT second\n",
861 " Productivity 40.8% of total user, 64.5% of total elapsed\n",
863 "Build profile: -w ghc-9.2.5 -O1\n",
864 "In order, the following will be built (use -v for more details):\n",
865 " - pqueue-1.4.3.0 (lib) (requires build)\n",
866 " - advent-of-code22-0.1.0.0 (exe:advent12) --enable-profiling (configuration changed)\n",
867 "Starting pqueue-1.4.3.0 (lib)\n",
868 "Building pqueue-1.4.3.0 (lib)\n",
869 "Installing pqueue-1.4.3.0 (lib)\n",
870 "Completed pqueue-1.4.3.0 (lib)\n",
871 "Configuring executable 'advent12' for advent-of-code22-0.1.0.0..\n",
872 "Preprocessing executable 'advent12' for advent-of-code22-0.1.0.0..\n",
873 "Building executable 'advent12' for advent-of-code22-0.1.0.0..\n",
874 "[2 of 2] Compiling Main ( advent12/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent12/build/advent12/advent12-tmp/Main.dyn_o )\n",
876 "\u001b[;1madvent12/Main.hs:29:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
877 " Defined but not used: ‘goal’\u001b[0m\u001b[0m\n",
878 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
879 "\u001b[;1m\u001b[34m29 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmakeLenses ''Mountain\u001b[0m\u001b[0m\n",
880 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
882 "\u001b[;1madvent12/Main.hs:39:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
883 " Defined but not used: ‘cost’\u001b[0m\u001b[0m\n",
884 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
885 "\u001b[;1m\u001b[34m39 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmakeLenses ''Agendum\u001b[0m\u001b[0m \n",
886 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
888 "\u001b[;1madvent12/Main.hs:81:9: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
889 " This binding for ‘grid’ shadows the existing binding\n",
890 " defined at advent12/Main.hs:29:1\u001b[0m\u001b[0m\n",
891 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
892 "\u001b[;1m\u001b[34m81 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mgrid\u001b[0m\u001b[0m = grid0 // [(s, mkCell 'a'), (g, mkCell 'z')]\n",
893 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
895 "\u001b[;1madvent12/Main.hs:123:8: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
896 " This binding for ‘grid’ shadows the existing binding\n",
897 " defined at advent12/Main.hs:29:1\u001b[0m\u001b[0m\n",
898 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
899 "\u001b[;1m\u001b[34m123 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mgrid\u001b[0m\u001b[0m <- asks _grid\n",
900 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
902 "\u001b[;1madvent12/Main.hs:123:8: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-matches\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
903 " Defined but not used: ‘grid’\u001b[0m\u001b[0m\n",
904 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
905 "\u001b[;1m\u001b[34m123 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mgrid\u001b[0m\u001b[0m <- asks _grid\n",
906 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
908 "\u001b[;1madvent12/Main.hs:134:6: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
909 " This binding for ‘goal’ shadows the existing binding\n",
910 " defined at advent12/Main.hs:29:1\u001b[0m\u001b[0m\n",
911 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
912 "\u001b[;1m\u001b[34m134 |\u001b[0m\u001b[0m do \u001b[;1m\u001b[35mgoal\u001b[0m\u001b[0m <- asks _goal\n",
913 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
915 "\u001b[;1madvent12/Main.hs:139:6: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
916 " This binding for ‘grid’ shadows the existing binding\n",
917 " defined at advent12/Main.hs:29:1\u001b[0m\u001b[0m\n",
918 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
919 "\u001b[;1m\u001b[34m139 |\u001b[0m\u001b[0m do \u001b[;1m\u001b[35mgrid\u001b[0m\u001b[0m <- asks _grid\n",
920 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
922 "\u001b[;1madvent12/Main.hs:153:6: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
923 " This binding for ‘goal’ shadows the existing binding\n",
924 " defined at advent12/Main.hs:29:1\u001b[0m\u001b[0m\n",
925 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
926 "\u001b[;1m\u001b[34m153 |\u001b[0m\u001b[0m do \u001b[;1m\u001b[35mgoal\u001b[0m\u001b[0m <- asks _goal\n",
927 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
928 "[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent12/build/advent12/advent12-tmp/AoC.p_o )\n",
929 "[2 of 2] Compiling Main ( advent12/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent12/build/advent12/advent12-tmp/Main.p_o )\n",
931 "\u001b[;1madvent12/Main.hs:29:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
932 " Defined but not used: ‘goal’\u001b[0m\u001b[0m\n",
933 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
934 "\u001b[;1m\u001b[34m29 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmakeLenses ''Mountain\u001b[0m\u001b[0m\n",
935 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
937 "\u001b[;1madvent12/Main.hs:39:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
938 " Defined but not used: ‘cost’\u001b[0m\u001b[0m\n",
939 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
940 "\u001b[;1m\u001b[34m39 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmakeLenses ''Agendum\u001b[0m\u001b[0m \n",
941 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
943 "\u001b[;1madvent12/Main.hs:81:9: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
944 " This binding for ‘grid’ shadows the existing binding\n",
945 " defined at advent12/Main.hs:29:1\u001b[0m\u001b[0m\n",
946 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
947 "\u001b[;1m\u001b[34m81 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mgrid\u001b[0m\u001b[0m = grid0 // [(s, mkCell 'a'), (g, mkCell 'z')]\n",
948 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
950 "\u001b[;1madvent12/Main.hs:123:8: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
951 " This binding for ‘grid’ shadows the existing binding\n",
952 " defined at advent12/Main.hs:29:1\u001b[0m\u001b[0m\n",
953 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
954 "\u001b[;1m\u001b[34m123 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mgrid\u001b[0m\u001b[0m <- asks _grid\n",
955 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
957 "\u001b[;1madvent12/Main.hs:123:8: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-matches\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
958 " Defined but not used: ‘grid’\u001b[0m\u001b[0m\n",
959 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
960 "\u001b[;1m\u001b[34m123 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mgrid\u001b[0m\u001b[0m <- asks _grid\n",
961 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
963 "\u001b[;1madvent12/Main.hs:134:6: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
964 " This binding for ‘goal’ shadows the existing binding\n",
965 " defined at advent12/Main.hs:29:1\u001b[0m\u001b[0m\n",
966 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
967 "\u001b[;1m\u001b[34m134 |\u001b[0m\u001b[0m do \u001b[;1m\u001b[35mgoal\u001b[0m\u001b[0m <- asks _goal\n",
968 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
970 "\u001b[;1madvent12/Main.hs:139:6: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
971 " This binding for ‘grid’ shadows the existing binding\n",
972 " defined at advent12/Main.hs:29:1\u001b[0m\u001b[0m\n",
973 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
974 "\u001b[;1m\u001b[34m139 |\u001b[0m\u001b[0m do \u001b[;1m\u001b[35mgrid\u001b[0m\u001b[0m <- asks _grid\n",
975 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
977 "\u001b[;1madvent12/Main.hs:153:6: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
978 " This binding for ‘goal’ shadows the existing binding\n",
979 " defined at advent12/Main.hs:29:1\u001b[0m\u001b[0m\n",
980 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
981 "\u001b[;1m\u001b[34m153 |\u001b[0m\u001b[0m do \u001b[;1m\u001b[35mgoal\u001b[0m\u001b[0m <- asks _goal\n",
982 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
983 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent12/build/advent12/advent12 ...\n",
986 " 2,329,680,024 bytes allocated in the heap\n",
987 " 94,728,104 bytes copied during GC\n",
988 " 849,440 bytes maximum residency (43 sample(s))\n",
989 " 186,352 bytes maximum slop\n",
990 " 62 MiB total memory in use (0 MB lost due to fragmentation)\n",
992 " Tot time (elapsed) Avg pause Max pause\n",
993 " Gen 0 521 colls, 521 par 0.250s 0.156s 0.0003s 0.0014s\n",
994 " Gen 1 43 colls, 42 par 0.086s 0.028s 0.0007s 0.0016s\n",
996 " Parallel GC work balance: 16.10% (serial 0%, perfect 100%)\n",
998 " TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
1000 " SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
1002 " INIT time 0.005s ( 0.003s elapsed)\n",
1003 " MUT time 2.081s ( 1.966s elapsed)\n",
1004 " GC time 0.331s ( 0.179s elapsed)\n",
1005 " RP time 0.000s ( 0.000s elapsed)\n",
1006 " PROF time 0.005s ( 0.005s elapsed)\n",
1007 " EXIT time 0.002s ( 0.001s elapsed)\n",
1008 " Total time 2.423s ( 2.154s elapsed)\n",
1010 " Alloc rate 1,119,659,454 bytes per MUT second\n",
1012 " Productivity 86.0% of total user, 91.5% of total elapsed\n",
1014 "Build profile: -w ghc-9.2.5 -O1\n",
1015 "In order, the following will be built (use -v for more details):\n",
1016 " - advent-of-code22-0.1.0.0 (exe:advent13) --enable-profiling (configuration changed)\n",
1017 "Configuring executable 'advent13' for advent-of-code22-0.1.0.0..\n",
1018 "Preprocessing executable 'advent13' for advent-of-code22-0.1.0.0..\n",
1019 "Building executable 'advent13' for advent-of-code22-0.1.0.0..\n",
1020 "[2 of 2] Compiling Main ( advent13/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent13/build/advent13/advent13-tmp/Main.dyn_o )\n",
1021 "[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent13/build/advent13/advent13-tmp/AoC.p_o )\n",
1022 "[2 of 2] Compiling Main ( advent13/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent13/build/advent13/advent13-tmp/Main.p_o )\n",
1023 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent13/build/advent13/advent13 ...\n",
1026 " 15,983,552 bytes allocated in the heap\n",
1027 " 2,677,272 bytes copied during GC\n",
1028 " 1,145,232 bytes maximum residency (2 sample(s))\n",
1029 " 136,816 bytes maximum slop\n",
1030 " 64 MiB total memory in use (0 MB lost due to fragmentation)\n",
1032 " Tot time (elapsed) Avg pause Max pause\n",
1033 " Gen 0 2 colls, 2 par 0.003s 0.002s 0.0011s 0.0011s\n",
1034 " Gen 1 2 colls, 1 par 0.004s 0.001s 0.0007s 0.0010s\n",
1036 " Parallel GC work balance: 30.00% (serial 0%, perfect 100%)\n",
1038 " TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
1040 " SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
1042 " INIT time 0.005s ( 0.003s elapsed)\n",
1043 " MUT time 0.016s ( 0.016s elapsed)\n",
1044 " GC time 0.007s ( 0.004s elapsed)\n",
1045 " RP time 0.000s ( 0.000s elapsed)\n",
1046 " PROF time 0.000s ( 0.000s elapsed)\n",
1047 " EXIT time 0.002s ( 0.001s elapsed)\n",
1048 " Total time 0.030s ( 0.023s elapsed)\n",
1050 " Alloc rate 975,509,592 bytes per MUT second\n",
1052 " Productivity 55.1% of total user, 67.1% of total elapsed\n",
1054 "Build profile: -w ghc-9.2.5 -O1\n",
1055 "In order, the following will be built (use -v for more details):\n",
1056 " - advent-of-code22-0.1.0.0 (exe:advent14) --enable-profiling (configuration changed)\n",
1057 "Configuring executable 'advent14' for advent-of-code22-0.1.0.0..\n",
1058 "Preprocessing executable 'advent14' for advent-of-code22-0.1.0.0..\n",
1059 "Building executable 'advent14' for advent-of-code22-0.1.0.0..\n",
1060 "[2 of 2] Compiling Main ( advent14/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent14/build/advent14/advent14-tmp/Main.dyn_o )\n",
1062 "\u001b[;1madvent14/Main.hs:7:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1063 " The import of ‘Control.Applicative’ is redundant\n",
1064 " except perhaps to import instances from ‘Control.Applicative’\n",
1065 " To import instances alone, use: import Control.Applicative()\u001b[0m\u001b[0m\n",
1066 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1067 "\u001b[;1m\u001b[34m7 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Control.Applicative\u001b[0m\u001b[0m\n",
1068 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1069 "[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent14/build/advent14/advent14-tmp/AoC.p_o )\n",
1070 "[2 of 2] Compiling Main ( advent14/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent14/build/advent14/advent14-tmp/Main.p_o )\n",
1072 "\u001b[;1madvent14/Main.hs:7:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1073 " The import of ‘Control.Applicative’ is redundant\n",
1074 " except perhaps to import instances from ‘Control.Applicative’\n",
1075 " To import instances alone, use: import Control.Applicative()\u001b[0m\u001b[0m\n",
1076 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1077 "\u001b[;1m\u001b[34m7 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Control.Applicative\u001b[0m\u001b[0m\n",
1078 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1079 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent14/build/advent14/advent14 ...\n",
1082 " 474,666,344 bytes allocated in the heap\n",
1083 " 44,189,776 bytes copied during GC\n",
1084 " 3,669,176 bytes maximum residency (17 sample(s))\n",
1085 " 160,312 bytes maximum slop\n",
1086 " 66 MiB total memory in use (0 MB lost due to fragmentation)\n",
1088 " Tot time (elapsed) Avg pause Max pause\n",
1089 " Gen 0 99 colls, 99 par 0.047s 0.027s 0.0003s 0.0009s\n",
1090 " Gen 1 17 colls, 16 par 0.080s 0.028s 0.0017s 0.0031s\n",
1092 " Parallel GC work balance: 50.21% (serial 0%, perfect 100%)\n",
1094 " TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
1096 " SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
1098 " INIT time 0.004s ( 0.003s elapsed)\n",
1099 " MUT time 1.617s ( 1.592s elapsed)\n",
1100 " GC time 0.112s ( 0.040s elapsed)\n",
1101 " RP time 0.000s ( 0.000s elapsed)\n",
1102 " PROF time 0.015s ( 0.015s elapsed)\n",
1103 " EXIT time 0.002s ( 0.001s elapsed)\n",
1104 " Total time 1.751s ( 1.650s elapsed)\n",
1106 " Alloc rate 293,505,646 bytes per MUT second\n",
1108 " Productivity 93.3% of total user, 97.4% of total elapsed\n",
1110 "Build profile: -w ghc-9.2.5 -O1\n",
1111 "In order, the following will be built (use -v for more details):\n",
1112 " - advent-of-code22-0.1.0.0 (exe:advent15) --enable-profiling (configuration changed)\n",
1113 "Configuring executable 'advent15' for advent-of-code22-0.1.0.0..\n",
1114 "Preprocessing executable 'advent15' for advent-of-code22-0.1.0.0..\n",
1115 "Building executable 'advent15' for advent-of-code22-0.1.0.0..\n",
1116 "[2 of 2] Compiling Main ( advent15/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent15/build/advent15/advent15-tmp/Main.dyn_o )\n",
1118 "\u001b[;1madvent15/Main.hs:7:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1119 " The import of ‘Control.Applicative’ is redundant\n",
1120 " except perhaps to import instances from ‘Control.Applicative’\n",
1121 " To import instances alone, use: import Control.Applicative()\u001b[0m\u001b[0m\n",
1122 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1123 "\u001b[;1m\u001b[34m7 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Control.Applicative\u001b[0m\u001b[0m\n",
1124 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1126 "\u001b[;1madvent15/Main.hs:8:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1127 " The import of ‘Data.List’ is redundant\n",
1128 " except perhaps to import instances from ‘Data.List’\n",
1129 " To import instances alone, use: import Data.List()\u001b[0m\u001b[0m\n",
1130 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1131 "\u001b[;1m\u001b[34m8 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Data.List\u001b[0m\u001b[0m\n",
1132 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1134 "\u001b[;1madvent15/Main.hs:12:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1135 " The import of ‘Control.Lens’ is redundant\n",
1136 " except perhaps to import instances from ‘Control.Lens’\n",
1137 " To import instances alone, use: import Control.Lens()\u001b[0m\u001b[0m\n",
1138 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1139 "\u001b[;1m\u001b[34m12 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Control.Lens\u001b[0m\u001b[0m\n",
1140 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1142 "\u001b[;1madvent15/Main.hs:25:21: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-matches\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1143 " Defined but not used: ‘p’\u001b[0m\u001b[0m\n",
1144 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1145 "\u001b[;1m\u001b[34m25 |\u001b[0m\u001b[0m mempty = Region (\\\u001b[;1m\u001b[35mp\u001b[0m\u001b[0m -> False)\n",
1146 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^\u001b[0m\u001b[0m\n",
1147 "[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent15/build/advent15/advent15-tmp/AoC.p_o )\n",
1148 "[2 of 2] Compiling Main ( advent15/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent15/build/advent15/advent15-tmp/Main.p_o )\n",
1150 "\u001b[;1madvent15/Main.hs:7:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1151 " The import of ‘Control.Applicative’ is redundant\n",
1152 " except perhaps to import instances from ‘Control.Applicative’\n",
1153 " To import instances alone, use: import Control.Applicative()\u001b[0m\u001b[0m\n",
1154 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1155 "\u001b[;1m\u001b[34m7 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Control.Applicative\u001b[0m\u001b[0m\n",
1156 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1158 "\u001b[;1madvent15/Main.hs:8:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1159 " The import of ‘Data.List’ is redundant\n",
1160 " except perhaps to import instances from ‘Data.List’\n",
1161 " To import instances alone, use: import Data.List()\u001b[0m\u001b[0m\n",
1162 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1163 "\u001b[;1m\u001b[34m8 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Data.List\u001b[0m\u001b[0m\n",
1164 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1166 "\u001b[;1madvent15/Main.hs:12:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1167 " The import of ‘Control.Lens’ is redundant\n",
1168 " except perhaps to import instances from ‘Control.Lens’\n",
1169 " To import instances alone, use: import Control.Lens()\u001b[0m\u001b[0m\n",
1170 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1171 "\u001b[;1m\u001b[34m12 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Control.Lens\u001b[0m\u001b[0m\n",
1172 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1174 "\u001b[;1madvent15/Main.hs:25:21: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-matches\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1175 " Defined but not used: ‘p’\u001b[0m\u001b[0m\n",
1176 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1177 "\u001b[;1m\u001b[34m25 |\u001b[0m\u001b[0m mempty = Region (\\\u001b[;1m\u001b[35mp\u001b[0m\u001b[0m -> False)\n",
1178 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^\u001b[0m\u001b[0m\n",
1179 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent15/build/advent15/advent15 ...\n",
1182 " 189,084,295,488 bytes allocated in the heap\n",
1183 "10,329,767,309,344 bytes copied during GC\n",
1184 " 13,185,529,696 bytes maximum residency (1550 sample(s))\n",
1185 " 64,387,232 bytes maximum slop\n",
1186 " 25723 MiB total memory in use (0 MB lost due to fragmentation)\n",
1188 " Tot time (elapsed) Avg pause Max pause\n",
1189 " Gen 0 44034 colls, 44034 par 69.955s 59.862s 0.0014s 0.0142s\n",
1190 " Gen 1 1550 colls, 1549 par 18709.588s 6375.071s 4.1129s 9.0665s\n",
1192 " Parallel GC work balance: 91.17% (serial 0%, perfect 100%)\n",
1194 " TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
1196 " SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
1198 " INIT time 0.005s ( 0.003s elapsed)\n",
1199 " MUT time 257.456s (161.075s elapsed)\n",
1200 " GC time 14408.495s (2094.011s elapsed)\n",
1201 " RP time 0.000s ( 0.000s elapsed)\n",
1202 " PROF time 4371.048s (4340.921s elapsed)\n",
1203 " EXIT time 1.473s ( 0.001s elapsed)\n",
1204 " Total time 19038.476s (6596.011s elapsed)\n",
1206 " Alloc rate 734,434,270 bytes per MUT second\n",
1208 " Productivity 24.3% of total user, 68.3% of total elapsed\n",
1210 "Build profile: -w ghc-9.2.5 -O1\n",
1211 "In order, the following will be built (use -v for more details):\n",
1212 " - advent-of-code22-0.1.0.0 (exe:advent16) --enable-profiling (configuration changed)\n",
1213 "Configuring executable 'advent16' for advent-of-code22-0.1.0.0..\n",
1214 "Preprocessing executable 'advent16' for advent-of-code22-0.1.0.0..\n",
1215 "Building executable 'advent16' for advent-of-code22-0.1.0.0..\n",
1216 "[2 of 2] Compiling Main ( advent16/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent16/build/advent16/advent16-tmp/Main.dyn_o )\n",
1218 "\u001b[;1madvent16/Main.hs:58:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1219 " Defined but not used: ‘benefit’\u001b[0m\u001b[0m\n",
1220 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1221 "\u001b[;1m\u001b[34m58 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmakeLenses ''Agendum\u001b[0m\u001b[0m \n",
1222 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1223 "[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent16/build/advent16/advent16-tmp/AoC.p_o )\n",
1224 "[2 of 2] Compiling Main ( advent16/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent16/build/advent16/advent16-tmp/Main.p_o )\n",
1226 "\u001b[;1madvent16/Main.hs:58:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1227 " Defined but not used: ‘benefit’\u001b[0m\u001b[0m\n",
1228 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1229 "\u001b[;1m\u001b[34m58 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmakeLenses ''Agendum\u001b[0m\u001b[0m \n",
1230 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1231 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent16/build/advent16/advent16 ...\n",
1234 " 436,836,396,688 bytes allocated in the heap\n",
1235 " 48,620,803,928 bytes copied during GC\n",
1236 " 20,171,424 bytes maximum residency (2171 sample(s))\n",
1237 " 351,712 bytes maximum slop\n",
1238 " 97 MiB total memory in use (0 MB lost due to fragmentation)\n",
1240 " Tot time (elapsed) Avg pause Max pause\n",
1241 " Gen 0 103284 colls, 103284 par 56.327s 37.400s 0.0004s 0.0132s\n",
1242 " Gen 1 2171 colls, 2170 par 47.089s 15.604s 0.0072s 0.0351s\n",
1244 " Parallel GC work balance: 31.48% (serial 0%, perfect 100%)\n",
1246 " TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
1248 " SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
1250 " INIT time 0.004s ( 0.002s elapsed)\n",
1251 " MUT time 224.034s (206.413s elapsed)\n",
1252 " GC time 93.183s ( 42.812s elapsed)\n",
1253 " RP time 0.000s ( 0.000s elapsed)\n",
1254 " PROF time 10.234s ( 10.192s elapsed)\n",
1255 " EXIT time 0.002s ( 0.001s elapsed)\n",
1256 " Total time 327.457s (259.420s elapsed)\n",
1258 " Alloc rate 1,949,862,696 bytes per MUT second\n",
1260 " Productivity 71.5% of total user, 83.5% of total elapsed\n",
1262 "Build profile: -w ghc-9.2.5 -O1\n",
1263 "In order, the following will be built (use -v for more details):\n",
1264 " - advent-of-code22-0.1.0.0 (exe:advent17) --enable-profiling (configuration changed)\n",
1265 "Configuring executable 'advent17' for advent-of-code22-0.1.0.0..\n",
1266 "Preprocessing executable 'advent17' for advent-of-code22-0.1.0.0..\n",
1267 "Building executable 'advent17' for advent-of-code22-0.1.0.0..\n",
1268 "[2 of 2] Compiling Main ( advent17/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent17/build/advent17/advent17-tmp/Main.dyn_o )\n",
1270 "\u001b[;1madvent17/Main.hs:7:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1271 " The qualified import of ‘Data.Map.Strict’ is redundant\n",
1272 " except perhaps to import instances from ‘Data.Map.Strict’\n",
1273 " To import instances alone, use: import Data.Map.Strict()\u001b[0m\u001b[0m\n",
1274 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1275 "\u001b[;1m\u001b[34m7 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport qualified Data.Map.Strict as M\u001b[0m\u001b[0m\n",
1276 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1278 "\u001b[;1madvent17/Main.hs:70:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1279 " Defined but not used: ‘simSome’\u001b[0m\u001b[0m\n",
1280 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1281 "\u001b[;1m\u001b[34m70 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35msimSome\u001b[0m\u001b[0m oneJetCycle n = fromMaybe -1 $ maximumOf (folded . _y) (final ^. chamber)\n",
1282 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
1284 "\u001b[;1madvent17/Main.hs:74:10: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1285 " This binding for ‘rocks’ shadows the existing binding\n",
1286 " defined at advent17/Main.hs:22:1\u001b[0m\u001b[0m\n",
1287 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1288 "\u001b[;1m\u001b[34m74 |\u001b[0m\u001b[0m simulate \u001b[;1m\u001b[35mrocks\u001b[0m\u001b[0m jets n = (!!n) $ iterate dropFromTop initState\n",
1289 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^\u001b[0m\u001b[0m\n",
1291 "\u001b[;1madvent17/Main.hs:74:16: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1292 " This binding for ‘jets’ shadows the existing binding\n",
1293 " defined at advent17/Main.hs:22:1\u001b[0m\u001b[0m\n",
1294 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1295 "\u001b[;1m\u001b[34m74 |\u001b[0m\u001b[0m simulate rocks \u001b[;1m\u001b[35mjets\u001b[0m\u001b[0m n = (!!n) $ iterate dropFromTop initState\n",
1296 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
1298 "\u001b[;1madvent17/Main.hs:96:6: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1299 " This binding for ‘chamber’ shadows the existing binding\n",
1300 " defined at advent17/Main.hs:22:1\u001b[0m\u001b[0m\n",
1301 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1302 "\u001b[;1m\u001b[34m96 |\u001b[0m\u001b[0m push \u001b[;1m\u001b[35mchamber\u001b[0m\u001b[0m rock direction \n",
1303 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
1305 "\u001b[;1madvent17/Main.hs:106:6: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1306 " This binding for ‘chamber’ shadows the existing binding\n",
1307 " defined at advent17/Main.hs:22:1\u001b[0m\u001b[0m\n",
1308 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1309 "\u001b[;1m\u001b[34m106 |\u001b[0m\u001b[0m fall \u001b[;1m\u001b[35mchamber\u001b[0m\u001b[0m rock \n",
1310 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
1312 "\u001b[;1madvent17/Main.hs:143:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1313 " Defined but not used: ‘showChamber’\u001b[0m\u001b[0m\n",
1314 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1315 "\u001b[;1m\u001b[34m143 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mshowChamber\u001b[0m\u001b[0m chamber = unlines \n",
1316 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1318 "\u001b[;1madvent17/Main.hs:143:13: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1319 " This binding for ‘chamber’ shadows the existing binding\n",
1320 " defined at advent17/Main.hs:22:1\u001b[0m\u001b[0m\n",
1321 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1322 "\u001b[;1m\u001b[34m143 |\u001b[0m\u001b[0m showChamber \u001b[;1m\u001b[35mchamber\u001b[0m\u001b[0m = unlines \n",
1323 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
1324 "[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent17/build/advent17/advent17-tmp/AoC.p_o )\n",
1325 "[2 of 2] Compiling Main ( advent17/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent17/build/advent17/advent17-tmp/Main.p_o )\n",
1327 "\u001b[;1madvent17/Main.hs:7:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1328 " The qualified import of ‘Data.Map.Strict’ is redundant\n",
1329 " except perhaps to import instances from ‘Data.Map.Strict’\n",
1330 " To import instances alone, use: import Data.Map.Strict()\u001b[0m\u001b[0m\n",
1331 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1332 "\u001b[;1m\u001b[34m7 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport qualified Data.Map.Strict as M\u001b[0m\u001b[0m\n",
1333 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1335 "\u001b[;1madvent17/Main.hs:70:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1336 " Defined but not used: ‘simSome’\u001b[0m\u001b[0m\n",
1337 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1338 "\u001b[;1m\u001b[34m70 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35msimSome\u001b[0m\u001b[0m oneJetCycle n = fromMaybe -1 $ maximumOf (folded . _y) (final ^. chamber)\n",
1339 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
1341 "\u001b[;1madvent17/Main.hs:74:10: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1342 " This binding for ‘rocks’ shadows the existing binding\n",
1343 " defined at advent17/Main.hs:22:1\u001b[0m\u001b[0m\n",
1344 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1345 "\u001b[;1m\u001b[34m74 |\u001b[0m\u001b[0m simulate \u001b[;1m\u001b[35mrocks\u001b[0m\u001b[0m jets n = (!!n) $ iterate dropFromTop initState\n",
1346 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^\u001b[0m\u001b[0m\n",
1348 "\u001b[;1madvent17/Main.hs:74:16: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1349 " This binding for ‘jets’ shadows the existing binding\n",
1350 " defined at advent17/Main.hs:22:1\u001b[0m\u001b[0m\n",
1351 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1352 "\u001b[;1m\u001b[34m74 |\u001b[0m\u001b[0m simulate rocks \u001b[;1m\u001b[35mjets\u001b[0m\u001b[0m n = (!!n) $ iterate dropFromTop initState\n",
1353 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^\u001b[0m\u001b[0m\n",
1355 "\u001b[;1madvent17/Main.hs:96:6: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1356 " This binding for ‘chamber’ shadows the existing binding\n",
1357 " defined at advent17/Main.hs:22:1\u001b[0m\u001b[0m\n",
1358 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1359 "\u001b[;1m\u001b[34m96 |\u001b[0m\u001b[0m push \u001b[;1m\u001b[35mchamber\u001b[0m\u001b[0m rock direction \n",
1360 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
1362 "\u001b[;1madvent17/Main.hs:106:6: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1363 " This binding for ‘chamber’ shadows the existing binding\n",
1364 " defined at advent17/Main.hs:22:1\u001b[0m\u001b[0m\n",
1365 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1366 "\u001b[;1m\u001b[34m106 |\u001b[0m\u001b[0m fall \u001b[;1m\u001b[35mchamber\u001b[0m\u001b[0m rock \n",
1367 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
1369 "\u001b[;1madvent17/Main.hs:143:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1370 " Defined but not used: ‘showChamber’\u001b[0m\u001b[0m\n",
1371 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1372 "\u001b[;1m\u001b[34m143 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mshowChamber\u001b[0m\u001b[0m chamber = unlines \n",
1373 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1375 "\u001b[;1madvent17/Main.hs:143:13: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1376 " This binding for ‘chamber’ shadows the existing binding\n",
1377 " defined at advent17/Main.hs:22:1\u001b[0m\u001b[0m\n",
1378 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1379 "\u001b[;1m\u001b[34m143 |\u001b[0m\u001b[0m showChamber \u001b[;1m\u001b[35mchamber\u001b[0m\u001b[0m = unlines \n",
1380 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^\u001b[0m\u001b[0m\n",
1381 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent17/build/advent17/advent17 ...\n",
1384 " 112,643,551,288 bytes allocated in the heap\n",
1385 " 3,363,497,384 bytes copied during GC\n",
1386 " 4,914,576 bytes maximum residency (500 sample(s))\n",
1387 " 766,208 bytes maximum slop\n",
1388 " 65 MiB total memory in use (0 MB lost due to fragmentation)\n",
1390 " Tot time (elapsed) Avg pause Max pause\n",
1391 " Gen 0 24300 colls, 24300 par 7.144s 3.060s 0.0001s 0.0112s\n",
1392 " Gen 1 500 colls, 499 par 2.683s 1.091s 0.0022s 0.0114s\n",
1394 " Parallel GC work balance: 32.92% (serial 0%, perfect 100%)\n",
1396 " TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
1398 " SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
1400 " INIT time 0.004s ( 0.002s elapsed)\n",
1401 " MUT time 56.213s ( 52.282s elapsed)\n",
1402 " GC time 9.185s ( 3.513s elapsed)\n",
1403 " RP time 0.000s ( 0.000s elapsed)\n",
1404 " PROF time 0.641s ( 0.638s elapsed)\n",
1405 " EXIT time 0.003s ( 0.002s elapsed)\n",
1406 " Total time 66.046s ( 56.437s elapsed)\n",
1408 " Alloc rate 2,003,871,640 bytes per MUT second\n",
1410 " Productivity 86.1% of total user, 93.8% of total elapsed\n",
1412 "Build profile: -w ghc-9.2.5 -O1\n",
1413 "In order, the following will be built (use -v for more details):\n",
1414 " - advent-of-code22-0.1.0.0 (exe:advent18) --enable-profiling (configuration changed)\n",
1415 "Configuring executable 'advent18' for advent-of-code22-0.1.0.0..\n",
1416 "Preprocessing executable 'advent18' for advent-of-code22-0.1.0.0..\n",
1417 "Building executable 'advent18' for advent-of-code22-0.1.0.0..\n",
1418 "[2 of 2] Compiling Main ( advent18/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent18/build/advent18/advent18-tmp/Main.dyn_o )\n",
1419 "[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent18/build/advent18/advent18-tmp/AoC.p_o )\n",
1420 "[2 of 2] Compiling Main ( advent18/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent18/build/advent18/advent18-tmp/Main.p_o )\n",
1421 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent18/build/advent18/advent18 ...\n",
1424 " 101,387,336 bytes allocated in the heap\n",
1425 " 7,046,080 bytes copied during GC\n",
1426 " 1,772,120 bytes maximum residency (3 sample(s))\n",
1427 " 198,056 bytes maximum slop\n",
1428 " 64 MiB total memory in use (0 MB lost due to fragmentation)\n",
1430 " Tot time (elapsed) Avg pause Max pause\n",
1431 " Gen 0 22 colls, 22 par 0.011s 0.007s 0.0003s 0.0015s\n",
1432 " Gen 1 3 colls, 2 par 0.006s 0.001s 0.0005s 0.0005s\n",
1434 " Parallel GC work balance: 27.29% (serial 0%, perfect 100%)\n",
1436 " TASKS: 26 (1 bound, 25 peak workers (25 total), using -N12)\n",
1438 " SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)\n",
1440 " INIT time 0.004s ( 0.002s elapsed)\n",
1441 " MUT time 0.095s ( 0.092s elapsed)\n",
1442 " GC time 0.017s ( 0.008s elapsed)\n",
1443 " RP time 0.000s ( 0.000s elapsed)\n",
1444 " PROF time 0.000s ( 0.000s elapsed)\n",
1445 " EXIT time 0.002s ( 0.001s elapsed)\n",
1446 " Total time 0.118s ( 0.103s elapsed)\n",
1448 " Alloc rate 1,068,522,257 bytes per MUT second\n",
1450 " Productivity 80.4% of total user, 88.9% of total elapsed\n",
1452 "Build profile: -w ghc-9.2.5 -O1\n",
1453 "In order, the following will be built (use -v for more details):\n",
1454 " - advent-of-code22-0.1.0.0 (exe:advent19) --enable-profiling (configuration changed)\n",
1455 "Configuring executable 'advent19' for advent-of-code22-0.1.0.0..\n",
1456 "Preprocessing executable 'advent19' for advent-of-code22-0.1.0.0..\n",
1457 "Building executable 'advent19' for advent-of-code22-0.1.0.0..\n",
1458 "[2 of 2] Compiling Main ( advent19/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent19/build/advent19/advent19-tmp/Main.dyn_o ) [Control.Parallel.Strategies changed]\n",
1460 "\u001b[;1madvent19/Main.hs:3:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1461 " The import of ‘Debug.Trace’ is redundant\n",
1462 " except perhaps to import instances from ‘Debug.Trace’\n",
1463 " To import instances alone, use: import Debug.Trace()\u001b[0m\u001b[0m\n",
1464 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1465 "\u001b[;1m\u001b[34m3 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Debug.Trace\u001b[0m\u001b[0m\n",
1466 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1468 "\u001b[;1madvent19/Main.hs:19:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1469 " The import of ‘Data.Ord’ is redundant\n",
1470 " except perhaps to import instances from ‘Data.Ord’\n",
1471 " To import instances alone, use: import Data.Ord()\u001b[0m\u001b[0m\n",
1472 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1473 "\u001b[;1m\u001b[34m19 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Data.Ord\u001b[0m\u001b[0m\n",
1474 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1476 "\u001b[;1madvent19/Main.hs:56:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1477 " Defined but not used: ‘benefit’\u001b[0m\u001b[0m\n",
1478 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1479 "\u001b[;1m\u001b[34m56 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmakeLenses ''Agendum\u001b[0m\u001b[0m \n",
1480 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1482 "\u001b[;1madvent19/Main.hs:166:22: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-matches\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1483 " Defined but not used: ‘prevBenefit’\u001b[0m\u001b[0m\n",
1484 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1485 "\u001b[;1m\u001b[34m166 |\u001b[0m\u001b[0m makeAgendum previous \u001b[;1m\u001b[35mprevBenefit\u001b[0m\u001b[0m newState = \n",
1486 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1488 "\u001b[;1madvent19/Main.hs:193:24: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1489 " This binding for ‘robots’ shadows the existing binding\n",
1490 " defined at advent19/Main.hs:45:1\u001b[0m\u001b[0m\n",
1491 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1492 "\u001b[;1m\u001b[34m193 |\u001b[0m\u001b[0m where blueprintify n \u001b[;1m\u001b[35mrobots\u001b[0m\u001b[0m = \n",
1493 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^\u001b[0m\u001b[0m\n",
1494 "[1 of 2] Compiling AoC ( src/AoC.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent19/build/advent19/advent19-tmp/AoC.p_o )\n",
1495 "[2 of 2] Compiling Main ( advent19/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent19/build/advent19/advent19-tmp/Main.p_o )\n",
1497 "\u001b[;1madvent19/Main.hs:3:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1498 " The import of ‘Debug.Trace’ is redundant\n",
1499 " except perhaps to import instances from ‘Debug.Trace’\n",
1500 " To import instances alone, use: import Debug.Trace()\u001b[0m\u001b[0m\n",
1501 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1502 "\u001b[;1m\u001b[34m3 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Debug.Trace\u001b[0m\u001b[0m\n",
1503 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1505 "\u001b[;1madvent19/Main.hs:19:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-imports\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1506 " The import of ‘Data.Ord’ is redundant\n",
1507 " except perhaps to import instances from ‘Data.Ord’\n",
1508 " To import instances alone, use: import Data.Ord()\u001b[0m\u001b[0m\n",
1509 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1510 "\u001b[;1m\u001b[34m19 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mimport Data.Ord\u001b[0m\u001b[0m\n",
1511 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1513 "\u001b[;1madvent19/Main.hs:56:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1514 " Defined but not used: ‘benefit’\u001b[0m\u001b[0m\n",
1515 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1516 "\u001b[;1m\u001b[34m56 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmakeLenses ''Agendum\u001b[0m\u001b[0m \n",
1517 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1519 "\u001b[;1madvent19/Main.hs:166:22: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-matches\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1520 " Defined but not used: ‘prevBenefit’\u001b[0m\u001b[0m\n",
1521 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1522 "\u001b[;1m\u001b[34m166 |\u001b[0m\u001b[0m makeAgendum previous \u001b[;1m\u001b[35mprevBenefit\u001b[0m\u001b[0m newState = \n",
1523 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1525 "\u001b[;1madvent19/Main.hs:193:24: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wname-shadowing\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1526 " This binding for ‘robots’ shadows the existing binding\n",
1527 " defined at advent19/Main.hs:45:1\u001b[0m\u001b[0m\n",
1528 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1529 "\u001b[;1m\u001b[34m193 |\u001b[0m\u001b[0m where blueprintify n \u001b[;1m\u001b[35mrobots\u001b[0m\u001b[0m = \n",
1530 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^\u001b[0m\u001b[0m\n",
1531 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent19/build/advent19/advent19 ...\n",
1537 "! cd .. && for i in {01..25}; do cabal run advent${i} --enable-profiling -- +RTS -N -pj -s -hT ; done"
1541 "cell_type": "code",
1542 "execution_count": 20,
1547 "output_type": "stream",
1549 "rm: cannot remove '../times.csv': No such file or directory\n",
1550 "rm: cannot remove '../times_raw.csv': No such file or directory\n"
1555 "! rm ../times.csv\n",
1556 "! rm ../times_raw.csv"
1560 "cell_type": "code",
1561 "execution_count": 21,
1563 "Collapsed": "false",
1570 "output_type": "stream",
1601 "███ ███ ██ ██ ████ ██ ██ ███ \n",
1602 "â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ \n",
1603 "███ █ █ █ █ █ █ █ █ █ █ █ \n",
1604 "█ █ ███ █ ████ █ █ ██ ████ ███ \n",
1605 "â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ \n",
1606 "███ █ ██ █ █ ████ ███ █ █ █ \n",
1636 "Build profile: -w ghc-9.2.5 -O1\n",
1637 "In order, the following will be built (use -v for more details):\n",
1638 " - advent-of-code22-0.1.0.0 (exe:advent20) (file advent20/Main.hs changed)\n",
1639 "Preprocessing executable 'advent20' for advent-of-code22-0.1.0.0..\n",
1640 "Building executable 'advent20' for advent-of-code22-0.1.0.0..\n",
1641 "[2 of 2] Compiling Main ( advent20/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent20/build/advent20/advent20-tmp/Main.o, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent20/build/advent20/advent20-tmp/Main.dyn_o )\n",
1642 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent20/build/advent20/advent20 ...\n",
1645 "Build profile: -w ghc-9.2.5 -O1\n",
1646 "In order, the following will be built (use -v for more details):\n",
1647 " - advent-of-code22-0.1.0.0 (exe:advent21) (file advent21/Main.hs changed)\n",
1648 "Preprocessing executable 'advent21' for advent-of-code22-0.1.0.0..\n",
1649 "Building executable 'advent21' for advent-of-code22-0.1.0.0..\n",
1650 "[2 of 2] Compiling Main ( advent21/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent21/build/advent21/advent21-tmp/Main.o, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent21/build/advent21/advent21-tmp/Main.dyn_o )\n",
1652 "\u001b[;1madvent21/Main.hs:38:9: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wincomplete-uni-patterns\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1653 " Pattern match(es) are non-exhaustive\n",
1654 " In a pattern binding:\n",
1655 " Patterns of type ‘Shout’ not matched: Literal _\u001b[0m\u001b[0m\n",
1656 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1657 "\u001b[;1m\u001b[34m38 |\u001b[0m\u001b[0m where \u001b[;1m\u001b[35m(Operation _ rootL rootR) = monkeys ! \"root\"\u001b[0m\u001b[0m\n",
1658 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1660 "\u001b[;1madvent21/Main.hs:50:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wincomplete-patterns\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1661 " Pattern match(es) are non-exhaustive\n",
1662 " In an equation for ‘binarySearch’:\n",
1663 " Patterns of type ‘Monkeys’, ‘Monkeys’, ‘Int’, ‘Int’ not matched:\n",
1664 " (Data.Map.Internal.Bin _ _ _ _ _) (Data.Map.Internal.Bin _ _ _ _ _)\n",
1666 " (Data.Map.Internal.Bin _ _ _ _ _) Data.Map.Internal.Tip _ _\n",
1667 " Data.Map.Internal.Tip (Data.Map.Internal.Bin _ _ _ _ _) _ _\n",
1668 " Data.Map.Internal.Tip Data.Map.Internal.Tip _ _\u001b[0m\u001b[0m\n",
1669 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1670 "\u001b[;1m\u001b[34m50 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mbinarySearch values operations lower upper \u001b[0m\u001b[0m\n",
1671 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^...\u001b[0m\u001b[0m\n",
1672 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent21/build/advent21/advent21 ...\n",
1678 "Build profile: -w ghc-9.2.5 -O1\n",
1679 "In order, the following will be built (use -v for more details):\n",
1680 " - advent-of-code22-0.1.0.0 (exe:advent23) (file advent23/Main.hs changed)\n",
1681 "Preprocessing executable 'advent23' for advent-of-code22-0.1.0.0..\n",
1682 "Building executable 'advent23' for advent-of-code22-0.1.0.0..\n",
1683 "[2 of 2] Compiling Main ( advent23/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent23/build/advent23/advent23-tmp/Main.o, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent23/build/advent23/advent23-tmp/Main.dyn_o )\n",
1684 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent23/build/advent23/advent23 ...\n",
1687 "Build profile: -w ghc-9.2.5 -O1\n",
1688 "In order, the following will be built (use -v for more details):\n",
1689 " - advent-of-code22-0.1.0.0 (exe:advent24) (file advent24/Main.hs changed)\n",
1690 "Preprocessing executable 'advent24' for advent-of-code22-0.1.0.0..\n",
1691 "Building executable 'advent24' for advent-of-code22-0.1.0.0..\n",
1692 "[2 of 2] Compiling Main ( advent24/Main.hs, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent24/build/advent24/advent24-tmp/Main.o, /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent24/build/advent24/advent24-tmp/Main.dyn_o )\n",
1694 "\u001b[;1madvent24/Main.hs:53:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1695 " Defined but not used: ‘cost’\u001b[0m\u001b[0m\n",
1696 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1697 "\u001b[;1m\u001b[34m53 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mmakeLenses ''Agendum\u001b[0m\u001b[0m \n",
1698 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^^^^^^^^^^^^^\u001b[0m\u001b[0m\n",
1700 "\u001b[;1madvent24/Main.hs:221:1: \u001b[;1m\u001b[35mwarning:\u001b[0m\u001b[0m\u001b[;1m [\u001b[;1m\u001b[35m-Wunused-top-binds\u001b[0m\u001b[0m\u001b[;1m]\u001b[0m\u001b[0m\u001b[;1m\n",
1701 " Defined but not used: ‘showSafe’\u001b[0m\u001b[0m\n",
1702 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\n",
1703 "\u001b[;1m\u001b[34m221 |\u001b[0m\u001b[0m \u001b[;1m\u001b[35mshowSafe\u001b[0m\u001b[0m valley = unlines $ reverse rows\n",
1704 "\u001b[;1m\u001b[34m |\u001b[0m\u001b[0m\u001b[;1m\u001b[35m ^^^^^^^^\u001b[0m\u001b[0m\n",
1705 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent24/build/advent24/advent24 ...\n",
1708 "Build profile: -w ghc-9.2.5 -O1\n",
1709 "In order, the following will be built (use -v for more details):\n",
1710 " - advent-of-code22-0.1.0.0 (exe:advent25) (configuration changed)\n",
1711 "Configuring executable 'advent25' for advent-of-code22-0.1.0.0..\n",
1712 "Preprocessing executable 'advent25' for advent-of-code22-0.1.0.0..\n",
1713 "Building executable 'advent25' for advent-of-code22-0.1.0.0..\n",
1714 "Linking /home/neil/Programming/advent-of-code-22/dist-newstyle/build/x86_64-linux/ghc-9.2.5/advent-of-code22-0.1.0.0/x/advent25/build/advent25/advent25 ...\n",
1715 "20==1==12=0111=2--20\n"
1720 "! cd .. && for i in {01..25}; do /usr/bin/time -f \"%C,%S,%E,%M\" -o times.csv -a cabal run advent${i}; done"
1724 "cell_type": "code",
1725 "execution_count": 22,
1727 "Collapsed": "false",
1734 "output_type": "stream",
1755 "███ ███ ██ ██ ████ ██ ██ ███ \n",
1756 "â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ \n",
1757 "███ █ █ █ █ █ █ █ █ █ █ █ \n",
1758 "█ █ ███ █ ████ █ █ ██ ████ ███ \n",
1759 "â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ â–ˆ \n",
1760 "███ █ ██ █ █ ████ ███ █ █ █ \n",
1791 "20==1==12=0111=2--20\n"
1796 "! cd .. && for i in {01..25}; do /usr/bin/time -f \"%C,%S,%E,%M\" -o times_raw.csv -a advent${i}; done"
1800 "cell_type": "code",
1801 "execution_count": 26,
1809 "cell_type": "code",
1810 "execution_count": 27,
1814 "!mv ../times.csv ."
1818 "cell_type": "code",
1819 "execution_count": 28,
1823 "!mv ../times_raw.csv ."
1827 "cell_type": "code",
1828 "execution_count": 29,
1836 "cell_type": "code",
1837 "execution_count": 30,
1842 "output_type": "stream",
1844 "/bin/bash: -c: line 1: syntax error near unexpected token `;'\n",
1845 "/bin/bash: -c: line 1: ` for f in *hp ; do hp2ps $<_io.TextIOWrapper name='advent24.prof' mode='r' encoding='UTF-8'> ; done'\n"
1850 "! for f in *hp ; do hp2ps ${f} ; done"
1854 "cell_type": "code",
1855 "execution_count": 31,
1857 "Collapsed": "false"
1863 "['advent13.prof',\n",
1864 " 'advent10.prof',\n",
1865 " 'advent03.prof',\n",
1866 " 'advent07.prof',\n",
1867 " 'advent20.prof',\n",
1868 " 'advent19.prof',\n",
1869 " 'advent01.prof',\n",
1870 " 'advent18.prof',\n",
1871 " 'advent06.prof',\n",
1872 " 'advent09.prof',\n",
1873 " 'advent08.prof',\n",
1874 " 'advent23.prof',\n",
1875 " 'advent21.prof',\n",
1876 " 'advent22.prof',\n",
1877 " 'advent16.prof',\n",
1878 " 'advent25.prof',\n",
1879 " 'advent11.prof',\n",
1880 " 'advent02.prof',\n",
1881 " 'advent15.prof',\n",
1882 " 'advent17.prof',\n",
1883 " 'advent05.prof',\n",
1884 " 'advent12.prof',\n",
1885 " 'advent04.prof',\n",
1886 " 'advent14.prof',\n",
1890 "execution_count": 31,
1892 "output_type": "execute_result"
1896 "glob.glob('*prof')"
1900 "cell_type": "code",
1901 "execution_count": 32,
1903 "Collapsed": "false",
1910 "[{'program': 'advent13',\n",
1911 " 'total_time': 0.08,\n",
1912 " 'total_alloc': 10281760,\n",
1913 " 'total_ticks': 264,\n",
1914 " 'initial_capabilities': 12},\n",
1915 " {'program': 'advent10',\n",
1916 " 'total_time': 0.01,\n",
1917 " 'total_alloc': 631808,\n",
1918 " 'total_ticks': 48,\n",
1919 " 'initial_capabilities': 12},\n",
1920 " {'program': 'advent03',\n",
1921 " 'total_time': 0.04,\n",
1922 " 'total_alloc': 6018112,\n",
1923 " 'total_ticks': 120,\n",
1924 " 'initial_capabilities': 12},\n",
1925 " {'program': 'advent07',\n",
1926 " 'total_time': 0.03,\n",
1927 " 'total_alloc': 3049136,\n",
1928 " 'total_ticks': 108,\n",
1929 " 'initial_capabilities': 12},\n",
1930 " {'program': 'advent20',\n",
1931 " 'total_time': 116.93,\n",
1932 " 'total_alloc': 55860434768,\n",
1933 " 'total_ticks': 398748,\n",
1934 " 'initial_capabilities': 12},\n",
1935 " {'program': 'advent19',\n",
1936 " 'total_time': 125807.27,\n",
1937 " 'total_alloc': 1964531122296,\n",
1938 " 'total_ticks': 429011004,\n",
1939 " 'initial_capabilities': 12},\n",
1940 " {'program': 'advent01',\n",
1941 " 'total_time': 0.06,\n",
1942 " 'total_alloc': 11516576,\n",
1943 " 'total_ticks': 192,\n",
1944 " 'initial_capabilities': 12},\n",
1945 " {'program': 'advent18',\n",
1946 " 'total_time': 0.36,\n",
1947 " 'total_alloc': 68244096,\n",
1948 " 'total_ticks': 1224,\n",
1949 " 'initial_capabilities': 12},\n",
1950 " {'program': 'advent06',\n",
1951 " 'total_time': 0.02,\n",
1952 " 'total_alloc': 5025888,\n",
1953 " 'total_ticks': 84,\n",
1954 " 'initial_capabilities': 12},\n",
1955 " {'program': 'advent09',\n",
1956 " 'total_time': 0.37,\n",
1957 " 'total_alloc': 39708256,\n",
1958 " 'total_ticks': 1248,\n",
1959 " 'initial_capabilities': 12},\n",
1960 " {'program': 'advent08',\n",
1961 " 'total_time': 0.69,\n",
1962 " 'total_alloc': 214597512,\n",
1963 " 'total_ticks': 2352,\n",
1964 " 'initial_capabilities': 12},\n",
1965 " {'program': 'advent23',\n",
1966 " 'total_time': 1977.02,\n",
1967 " 'total_alloc': 26387446504,\n",
1968 " 'total_ticks': 6741780,\n",
1969 " 'initial_capabilities': 12},\n",
1970 " {'program': 'advent21',\n",
1971 " 'total_time': 1.97,\n",
1972 " 'total_alloc': 351135824,\n",
1973 " 'total_ticks': 6720,\n",
1974 " 'initial_capabilities': 12},\n",
1975 " {'program': 'advent22',\n",
1976 " 'total_time': 3671.94,\n",
1977 " 'total_alloc': 528445105288,\n",
1978 " 'total_ticks': 12521556,\n",
1979 " 'initial_capabilities': 12},\n",
1980 " {'program': 'advent16',\n",
1981 " 'total_time': 910.42,\n",
1982 " 'total_alloc': 296137053800,\n",
1983 " 'total_ticks': 3104592,\n",
1984 " 'initial_capabilities': 12},\n",
1985 " {'program': 'advent25',\n",
1986 " 'total_time': 0.01,\n",
1987 " 'total_alloc': 642496,\n",
1988 " 'total_ticks': 48,\n",
1989 " 'initial_capabilities': 12},\n",
1990 " {'program': 'advent11',\n",
1991 " 'total_time': 3.02,\n",
1992 " 'total_alloc': 655812832,\n",
1993 " 'total_ticks': 10308,\n",
1994 " 'initial_capabilities': 12},\n",
1995 " {'program': 'advent02',\n",
1996 " 'total_time': 0.06,\n",
1997 " 'total_alloc': 9613016,\n",
1998 " 'total_ticks': 192,\n",
1999 " 'initial_capabilities': 12},\n",
2000 " {'program': 'advent15',\n",
2001 " 'total_time': 23014.42,\n",
2002 " 'total_alloc': 126607950592,\n",
2003 " 'total_ticks': 78480684,\n",
2004 " 'initial_capabilities': 12},\n",
2005 " {'program': 'advent17',\n",
2006 " 'total_time': 198.34,\n",
2007 " 'total_alloc': 77649009464,\n",
2008 " 'total_ticks': 676368,\n",
2009 " 'initial_capabilities': 12},\n",
2010 " {'program': 'advent05',\n",
2011 " 'total_time': 0.02,\n",
2012 " 'total_alloc': 3396888,\n",
2013 " 'total_ticks': 84,\n",
2014 " 'initial_capabilities': 12},\n",
2015 " {'program': 'advent12',\n",
2016 " 'total_time': 7.58,\n",
2017 " 'total_alloc': 1598902400,\n",
2018 " 'total_ticks': 25836,\n",
2019 " 'initial_capabilities': 12},\n",
2020 " {'program': 'advent04',\n",
2021 " 'total_time': 0.03,\n",
2022 " 'total_alloc': 2913824,\n",
2023 " 'total_ticks': 96,\n",
2024 " 'initial_capabilities': 12},\n",
2025 " {'program': 'advent14',\n",
2026 " 'total_time': 5.8,\n",
2027 " 'total_alloc': 258169680,\n",
2028 " 'total_ticks': 19788,\n",
2029 " 'initial_capabilities': 12},\n",
2030 " {'program': 'advent24',\n",
2031 " 'total_time': 18.13,\n",
2032 " 'total_alloc': 3268072336,\n",
2033 " 'total_ticks': 61836,\n",
2034 " 'initial_capabilities': 12}]"
2037 "execution_count": 32,
2039 "output_type": "execute_result"
2044 "for fn in glob.glob('*prof'):\n",
2045 " with open(fn) as f:\n",
2046 " j = json.load(f)\n",
2048 " for n in 'program total_time total_alloc total_ticks initial_capabilities'.split():\n",
2049 " prof[n] = j[n]\n",
2050 " profs.append(prof)\n",
2055 "cell_type": "code",
2056 "execution_count": 158,
2058 "Collapsed": "false"
2066 " .dataframe tbody tr th:only-of-type {\n",
2067 " vertical-align: middle;\n",
2070 " .dataframe tbody tr th {\n",
2071 " vertical-align: top;\n",
2074 " .dataframe thead th {\n",
2075 " text-align: right;\n",
2078 "<table border=\"1\" class=\"dataframe\">\n",
2080 " <tr style=\"text-align: right;\">\n",
2082 " <th>total_time</th>\n",
2083 " <th>total_alloc</th>\n",
2084 " <th>total_ticks</th>\n",
2085 " <th>initial_capabilities</th>\n",
2088 " <th>program</th>\n",
2097 " <th>advent01</th>\n",
2099 " <td>11516576</td>\n",
2104 " <th>advent02</th>\n",
2106 " <td>9613016</td>\n",
2111 " <th>advent03</th>\n",
2113 " <td>6018112</td>\n",
2118 " <th>advent04</th>\n",
2120 " <td>2913824</td>\n",
2125 " <th>advent05</th>\n",
2127 " <td>3396888</td>\n",
2132 " <th>advent06</th>\n",
2134 " <td>5025888</td>\n",
2139 " <th>advent07</th>\n",
2141 " <td>3049136</td>\n",
2146 " <th>advent08</th>\n",
2148 " <td>214597512</td>\n",
2153 " <th>advent09</th>\n",
2155 " <td>39708256</td>\n",
2160 " <th>advent10</th>\n",
2162 " <td>631808</td>\n",
2167 " <th>advent11</th>\n",
2169 " <td>655812832</td>\n",
2170 " <td>10308</td>\n",
2174 " <th>advent12</th>\n",
2176 " <td>1598902400</td>\n",
2177 " <td>25836</td>\n",
2181 " <th>advent13</th>\n",
2183 " <td>10281760</td>\n",
2188 " <th>advent14</th>\n",
2190 " <td>258169680</td>\n",
2191 " <td>19788</td>\n",
2195 " <th>advent15</th>\n",
2196 " <td>23014.42</td>\n",
2197 " <td>126607950592</td>\n",
2198 " <td>78480684</td>\n",
2202 " <th>advent16</th>\n",
2203 " <td>910.42</td>\n",
2204 " <td>296137053800</td>\n",
2205 " <td>3104592</td>\n",
2209 " <th>advent17</th>\n",
2210 " <td>198.34</td>\n",
2211 " <td>77649009464</td>\n",
2212 " <td>676368</td>\n",
2216 " <th>advent18</th>\n",
2218 " <td>68244096</td>\n",
2223 " <th>advent19</th>\n",
2224 " <td>125807.27</td>\n",
2225 " <td>1964531122296</td>\n",
2226 " <td>429011004</td>\n",
2230 " <th>advent20</th>\n",
2231 " <td>116.93</td>\n",
2232 " <td>55860434768</td>\n",
2233 " <td>398748</td>\n",
2237 " <th>advent21</th>\n",
2239 " <td>351135824</td>\n",
2244 " <th>advent22</th>\n",
2245 " <td>3671.94</td>\n",
2246 " <td>528445105288</td>\n",
2247 " <td>12521556</td>\n",
2251 " <th>advent23</th>\n",
2252 " <td>1977.02</td>\n",
2253 " <td>26387446504</td>\n",
2254 " <td>6741780</td>\n",
2258 " <th>advent24</th>\n",
2259 " <td>18.13</td>\n",
2260 " <td>3268072336</td>\n",
2261 " <td>61836</td>\n",
2265 " <th>advent25</th>\n",
2267 " <td>642496</td>\n",
2276 " total_time total_alloc total_ticks initial_capabilities\n",
2278 "advent01 0.06 11516576 192 12\n",
2279 "advent02 0.06 9613016 192 12\n",
2280 "advent03 0.04 6018112 120 12\n",
2281 "advent04 0.03 2913824 96 12\n",
2282 "advent05 0.02 3396888 84 12\n",
2283 "advent06 0.02 5025888 84 12\n",
2284 "advent07 0.03 3049136 108 12\n",
2285 "advent08 0.69 214597512 2352 12\n",
2286 "advent09 0.37 39708256 1248 12\n",
2287 "advent10 0.01 631808 48 12\n",
2288 "advent11 3.02 655812832 10308 12\n",
2289 "advent12 7.58 1598902400 25836 12\n",
2290 "advent13 0.08 10281760 264 12\n",
2291 "advent14 5.80 258169680 19788 12\n",
2292 "advent15 23014.42 126607950592 78480684 12\n",
2293 "advent16 910.42 296137053800 3104592 12\n",
2294 "advent17 198.34 77649009464 676368 12\n",
2295 "advent18 0.36 68244096 1224 12\n",
2296 "advent19 125807.27 1964531122296 429011004 12\n",
2297 "advent20 116.93 55860434768 398748 12\n",
2298 "advent21 1.97 351135824 6720 12\n",
2299 "advent22 3671.94 528445105288 12521556 12\n",
2300 "advent23 1977.02 26387446504 6741780 12\n",
2301 "advent24 18.13 3268072336 61836 12\n",
2302 "advent25 0.01 642496 48 12"
2305 "execution_count": 158,
2307 "output_type": "execute_result"
2311 "performance = pd.DataFrame(profs).set_index('program').sort_index()\n",
2316 "cell_type": "code",
2317 "execution_count": 159,
2319 "Collapsed": "false"
2325 "<AxesSubplot:xlabel='program'>"
2328 "execution_count": 159,
2330 "output_type": "execute_result"
2334 "image/png": "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\n",
2336 "<Figure size 432x288 with 1 Axes>"
2340 "needs_background": "light"
2342 "output_type": "display_data"
2346 "performance.total_ticks.plot.bar()"
2350 "cell_type": "code",
2351 "execution_count": 160,
2353 "Collapsed": "false"
2359 "<AxesSubplot:xlabel='program'>"
2362 "execution_count": 160,
2364 "output_type": "execute_result"
2368 "image/png": "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\n",
2370 "<Figure size 432x288 with 1 Axes>"
2374 "needs_background": "light"
2376 "output_type": "display_data"
2380 "performance.total_ticks.plot.bar(logy=True)"
2384 "cell_type": "code",
2385 "execution_count": 161,
2387 "Collapsed": "false"
2393 "<AxesSubplot:xlabel='program'>"
2396 "execution_count": 161,
2398 "output_type": "execute_result"
2402 "image/png": "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\n",
2404 "<Figure size 432x288 with 1 Axes>"
2408 "needs_background": "light"
2410 "output_type": "display_data"
2414 "performance.total_alloc.plot.bar()"
2418 "cell_type": "code",
2419 "execution_count": 162,
2421 "Collapsed": "false"
2427 "<AxesSubplot:xlabel='program'>"
2430 "execution_count": 162,
2432 "output_type": "execute_result"
2436 "image/png": "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\n",
2438 "<Figure size 432x288 with 1 Axes>"
2442 "needs_background": "light"
2444 "output_type": "display_data"
2448 "performance.total_alloc.plot.bar(logy=True)"
2452 "cell_type": "code",
2453 "execution_count": 163,
2455 "Collapsed": "false"
2460 "image/png": "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nXfemS233LLdpUjSmFfaIYOenh623XZbdt11V6qu5a5RIjNZt24dPT09TJkypd3lSNKY19ZDHjJzSWbO7erq2uy5l156iUmTJtkYGKUigkmTJtkDJGms6oqIhcUP41Io7ZABYGNglHP/ShrDejNzbruLqFbaIQNJktQ6bW0QFCdjWNLd3X3yUK/ddf71Td32mgXvG/T5Z555hssuu4xTTjll4Iw1a7j99ts54YQTBt/WmjUcfvjhrFy5st/nV6xYwdq1a/nzP/9zAK699lruu+8+5s+fP6w8SZLqVarTJpbJM888w1e/+tVBX7NmzRouu+yyhre1YsUKli5duunxkUceOWBjQJKkkdDWBkFEHBERC3t7e9tZRr/mz5/PL3/5S2bOnMmpp57KqaeeyrRp09h7771ZvHjxptfccsstzJw5k3PPPZc1a9bwrne9i3333Zd9992X22+/fcjtvPzyy5x++uksXryYmTNnsnjxYhYtWsS8efMAeOyxxzjmmGOYMWMGM2bM2CzzoYceYp999mH58uXce++9zJo1i5kzZzJ9+nQefPDB5n8wkqRRqWOGDFptwYIFrFy5khUrVnDVVVdxwQUXcPfdd/Pkk0/y9re/nQMOOIAFCxZwzjnncN111wHw4osvcuONNzJhwgQefPBB5syZw5133jnodsaPH8/nPvc57rzzTs477zwAFi1atOn5T3ziE8yePZurr76a3t5enn/+eZ5++mkA7r//fo4//ni+9rWvMXPmTD7+8Y/zyU9+kr/6q7/i5ZdfpowNLUlSOZX6KIOyuPXWW5kzZw5dXV3ssMMOzJ49m+XLl7Pddtu95nWvvPIK8+bNY8WKFXR1dfHAAw80vO2bbrqJSy+9FICuri4mTpzI008/zRNPPMFRRx3FVVddxdve9jYA/viP/5jPf/7z9PT08P73v5/dd9+94e1LksYGGwQ1qPX0zueeey477LADd999N6+++ioTJkwYsZomTpzILrvswm233bapQXDCCSew//77c/3113PIIYdw4YUX8u53v3vEapA0cvpOpF4zoZ/Jy2eub1E1GgFdZbvaoXMIBrDtttvy3HPPAXDAAQewePFient7eeKJJ1i2bBmzZs16zWsA1q9fz0477cQWW2zB17/+9Zq77PvmVPuzP/szzj//fAB6e3t59tlngcpQwzXXXMOll166aWLjQw89xG677cYnPvEJjjzySH7+858P+/1LkkZUb2bOLUtjADpoDsFQhwk226RJk3jnO9/JtGnTOOyww5g+fTozZswgIjj77LPZcccdmTRpEuPGjWPGjBmceOKJnHLKKRx77LFceeWVHHTQQXR313bdioMOOogFCxYwc+ZMPv3pT7/muS9+8YvMnTuXiy66iK6uLs4//3x22mknALq7u7nuuut4z3veQ3d3N/fddx/f+MY32HLLLdlxxx05/fTTm/65SJJGp9Je7XDVqlXstddebapIreJ+lvrnkMHoVsarHXoeAkmS5KTCVrrhhhs47bTTXrNsypQpXH311W2qSJKkChsELXTIIYdwyCGHtLsMSZI248WNJElSe+cQZOaSzJzb1dXVzjIkSRrznFQoSVKHi4jdIuKiiPh21bKjI+JfI+LfIuK9Q2XYIJAkqYQi4uKIeDwiVvZZfmhE3B8RqyNiPkBmPpSZJ1W/LjOvycyTgROBvxxqe53TIDhzYnNvQ6jl8sdQ+yWQ16xZw7Rp02p6qwOtd/PNN3P44YfXndGf4447joceeqjf5z760Y9y3333Dbr+iSeeyLe//e3Nlvf9PO655x5OPPHEhmqVpDFqEXBo9YKI6AK+AhwGTAXmRMTUIXI+W6wzqM5pELRYsxsEZXLvvffS29vLbrvtttlzvb29XHjhhUydOtT3q399P4+9996bnp4efv3rXw+7XkkaizJzGfBUn8WzgNVFj8DLwOXAUf2tHxX/BHw3M+8aans2CAYwf/58fvnLXzJz5kxOPfVUMpNTTz2VadOmsffee7N48eJNr7vllluYOXMm5557LmvWrOFd73oX++67L/vuuy+33357Tdurd72nnnqKo48+munTp/OOd7xj03ULnn/+eT784Q+z9957M336dK666qrN1v3mN7/JUUf97vuzzTbbcPrpp7P//vtzxx13cOCBB266bPNFF13EHnvswYEHHsjJJ5/MvHnzNq23bNky/uRP/oTddtttU29B388D4IgjjuDyyy+v6XOQpDFiXETcWXWbW+N6k4GHqx73AJMjYlJEXADsExEbz4H/ceBg4LiI+NiQBdVTfbOV+bDDBQsWsHLlSlasWAHAVVddxYoVK7j77rt58sknefvb384BBxzAggULOOecc7juuusAePHFF7nxxhuZMGECDz74IHPmzNn0x3Uw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\n",
2462 "<Figure size 576x432 with 2 Axes>"
2466 "needs_background": "light"
2468 "output_type": "display_data"
2472 "performance[['total_ticks', 'total_alloc']].plot.bar(\n",
2473 " logy=True, secondary_y=['total_alloc'], \n",
2474 " figsize=(8, 6), title=\"Internal time and memory\")\n",
2475 "plt.savefig('internal_time_and_memory_log.png')"
2479 "cell_type": "code",
2480 "execution_count": 164,
2482 "Collapsed": "false"
2487 "image/png": "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5MnMnj2bWbNmccoppwDw+OOPc9RRRzFp0iQmTZq0XuaSJUvYddddWbBgAXfffTdTp05l8uTJTJw4kQcffHDg3xhJUsOVV8J/H7g3M7/ZxWzzgA9FYQ9gRWY+BiwAxkfEuIgYBhxbztulQTss32wzZszgrrvuYtGiRcyZM4fzzz+f22+/nT//+c+89a1vZa+99mLGjBl84xvf4IorrgDghRde4Oqrr2b48OE8+OCDTJ8+nYULF3a7nmHDhnHWWWexcOFCzjnnHABmzZq1dvonP/lJpk2bxty5c1m9ejXPPfccTz/9NAD3338/xx57LD/4wQ+YPHkyn/jEJ/jUpz7F+9//fl5++WVWr17dmDdHktRoewIfBO6MiEXluC8A2wNk5vnAfIqvwS2m+CrcCeW0VRFxCnAlxVfhLsjMu7tb2UbT3GvdcMMNTJ8+nba2NrbaaiumTZvGggUL2HTTTdeZ769//SunnHIKixYtoq2tjQceeKDf677mmmu46KKLAGhra2PMmDE8/fTTPPnkkxxxxBHMmTOHt7zlLQC87W1v4ytf+Qrt7e285z3vYfz48f1evySp+TLzBjo/d147TwIf72LafIrmX5eN5rB8reL969nZZ5/NVlttxe23387ChQt5+eWXG1bTmDFj2G677bjxxhvXjjvuuOOYN28eI0aM4MADD+Saa65p2PolSdWx0ey5jx49mmeffRaAvfbai3//93/nwx/+ME899RTXX389X//613n00UfXzgOwYsUKxo4dyyabbMKFF15Y92Hx2nV19K53vYvzzjuPT3/606xevXrtrXGHDRvG5ZdfzoEHHsioUaM47rjjWLJkCTvuuCOf/OQnWbJkCXfccQf77rtvP98JSc3W2beDlg7v8K2cM1c0qRptDAatuff01bWBtvnmm7PnnnsyYcIEDj74YCZOnMikSZOICL72ta+x9dZbs/nmmzNkyBAmTZrE8ccfz8knn8zRRx/NZZddxj777MPIkSPrWtc+++zDjBkzmDx5Mp///OfXmfbtb3+bk046ie9///u0tbVx3nnnsc022wAwcuRIrrjiCvbff39GjhzJPffcw49+9COGDh3K1ltvzemnnz7g74skqXqi3kPUvTFy5Mhcs0e6xr333stOO+004OtS63AbS51zz736IuKFzKxvD7AJNspz7pIkVdlGc869Ea688ko+97nPrTNu3LhxzJ07d5AqkiTJ5t4vBx54IAceeOBglyFJ0jo8LC9JUsXY3CVJqhibuyRJFWNzlySpYgavuZ85ZmAfPajnlq9Q/21fly5dyoQJE+p6qV0td91113HYYYf1OqMzxxxzDEuWLOl02oknnsg999zT7fLHH388P/3pT9cb3/H9uPPOOzn++OP7VaskqbE2mj33gW7ureTuu+9m9erV7LjjjutNW716Nd/73vfYeeed+5Td8f3YZZddaG9v5+GHH+5zvZKkxtpomnvH+7lnZsPu6Q70ermnnnqKI488kokTJ7LHHntwxx13APDcc89xwgknsMsuuzBx4kTmzJmz3rIXX3wxRxxxxNrhUaNGcfrpp7P77rtz8803s/fee6+9Ve33v/993vSmN7H33nvzsY99bO195gGuv/563v72t7Pjjjuu3Yvv+H4AvPvd7+bSSy+t632QJDXfRvM999r7uQPMmTOHRYsWNeSe7gBbbrllr5Y744wz2HXXXbn88su55ppr+NCHPsSiRYv48pe/zJgxY7jzzjsB1t77vdaNN97I9OnT1w4///zzTJgwgbPOOmud+ZYtW8aXv/xlbrvtNkaPHs2+++7LpEmT1k5/7LHHuOGGG7jvvvs4/PDDOeaYY9Z7PwCmTJnCjBkz+OxnP9vj+yBJar6Nprl31Oh7uvd2uRtuuGHtXvm+++7L8uXLWbFiBb/+9a/X2UvebLPN1lv2scce43Wve93a4ba2No4++uj15vv973/PtGnTeO1rXwvAe9/73nXqOvLII9lkk03Yeeedefzxx7usdcstt2TZsmXdvh5J0uDZaJt7X+7p/sorrzB8+PCGLNdZPRFBZhIR3S47YsQIVq5cuXZ4+PDhtLW11bWOWq961avqmnflypWMGDGi2yxJ0uDZaM65d7zH+l577cXs2bNZvXo1Tz75JNdffz1Tp05db74VK1awzTbbsMkmm/DDH/6w7nu693a5vfbai4svvhgorqLfYost2HTTTTnggAM455xz1s7X2WH5nXbaicWLF/dY09SpU/nNb37D008/zapVqzo9f99RZ/emf+CBB/r0TQFJUnPUveceEW3AQuDRzOz/97eafHvDjvdz/9rXvsbNN9/csHu693a5M888kxNOOIGJEyfy6le/mgsvvBCAL37xi3z84x9nwoQJtLW1ccYZZ/Ce97xn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\n",
2489 "<Figure size 576x432 with 2 Axes>"
2493 "needs_background": "light"
2495 "output_type": "display_data"
2499 "performance[['total_ticks', 'total_alloc']].plot.bar(\n",
2500 " logy=False, secondary_y=['total_alloc'], \n",
2501 " figsize=(8, 6), title=\"Internal time and memory\")\n",
2502 "plt.savefig('internal_time_and_memory_linear.png')"
2506 "cell_type": "code",
2507 "execution_count": 165,
2511 "# times = pd.read_csv('times.csv', \n",
2512 "# names=['program', 'system', 'elapsed', 'memory'], \n",
2513 "# index_col='program')\n",
2514 "# times.index = times.index.str.slice(start=len('cabal run '))\n",
2515 "# times.elapsed = pd.to_numeric(times.elapsed.str.slice(start=2))\n",
2520 "cell_type": "code",
2521 "execution_count": 166,
2527 "datetime.datetime(2022, 12, 26, 23, 59, 59)"
2530 "execution_count": 166,
2532 "output_type": "execute_result"
2536 "today = datetime.date.today()\n",
2537 "today = datetime.datetime(year=today.year, month=today.month, day=today.day) - datetime.timedelta(seconds=1)\n",
2542 "cell_type": "code",
2543 "execution_count": 167,
2549 "datetime.datetime(1900, 1, 1, 0, 0)"
2552 "execution_count": 167,
2554 "output_type": "execute_result"
2558 "epoch = datetime.datetime(year=1900, month=1, day=1)\n",
2563 "cell_type": "code",
2564 "execution_count": 168,
2572 " .dataframe tbody tr th:only-of-type {\n",
2573 " vertical-align: middle;\n",
2576 " .dataframe tbody tr th {\n",
2577 " vertical-align: top;\n",
2580 " .dataframe thead th {\n",
2581 " text-align: right;\n",
2584 "<table border=\"1\" class=\"dataframe\">\n",
2586 " <tr style=\"text-align: right;\">\n",
2588 " <th>system</th>\n",
2589 " <th>elapsed</th>\n",
2590 " <th>memory</th>\n",
2593 " <th>program</th>\n",
2601 " <th>advent01</th>\n",
2604 " <td>10488</td>\n",
2607 " <th>advent02</th>\n",
2610 " <td>11112</td>\n",
2613 " <th>advent03</th>\n",
2616 " <td>10408</td>\n",
2619 " <th>advent04</th>\n",
2625 " <th>advent05</th>\n",
2631 " <th>advent06</th>\n",
2634 " <td>10124</td>\n",
2637 " <th>advent07</th>\n",
2643 " <th>advent08</th>\n",
2646 " <td>12204</td>\n",
2649 " <th>advent09</th>\n",
2652 " <td>23660</td>\n",
2655 " <th>advent10</th>\n",
2661 " <th>advent11</th>\n",
2664 " <td>66664</td>\n",
2667 " <th>advent12</th>\n",
2670 " <td>13264</td>\n",
2673 " <th>advent13</th>\n",
2676 " <td>12300</td>\n",
2679 " <th>advent14</th>\n",
2682 " <td>15068</td>\n",
2685 " <th>advent15</th>\n",
2686 " <td>20.65</td>\n",
2687 " <td>137.27</td>\n",
2688 " <td>18101260</td>\n",
2691 " <th>advent16</th>\n",
2692 " <td>15.74</td>\n",
2693 " <td>144.64</td>\n",
2694 " <td>45628</td>\n",
2697 " <th>advent17</th>\n",
2699 " <td>20.67</td>\n",
2700 " <td>22000</td>\n",
2703 " <th>advent18</th>\n",
2706 " <td>14060</td>\n",
2709 " <th>advent19</th>\n",
2710 " <td>87.22</td>\n",
2711 " <td>1134.12</td>\n",
2712 " <td>14295324</td>\n",
2715 " <th>advent20</th>\n",
2717 " <td>15.04</td>\n",
2718 " <td>13940</td>\n",
2721 " <th>advent21</th>\n",
2724 " <td>12680</td>\n",
2727 " <th>advent22</th>\n",
2730 " <td>15908</td>\n",
2733 " <th>advent23</th>\n",
2735 " <td>370.18</td>\n",
2736 " <td>13628</td>\n",
2739 " <th>advent24</th>\n",
2742 " <td>74820</td>\n",
2745 " <th>advent25</th>\n",
2755 " system elapsed memory\n",
2757 "advent01 0.00 0.02 10488\n",
2758 "advent02 0.00 0.02 11112\n",
2759 "advent03 0.00 0.02 10408\n",
2760 "advent04 0.00 0.01 9040\n",
2761 "advent05 0.01 0.01 9324\n",
2762 "advent06 0.01 0.02 10124\n",
2763 "advent07 0.00 0.01 9192\n",
2764 "advent08 0.02 0.09 12204\n",
2765 "advent09 0.01 0.06 23660\n",
2766 "advent10 0.00 0.01 6800\n",
2767 "advent11 0.07 0.36 66664\n",
2768 "advent12 0.06 1.09 13264\n",
2769 "advent13 0.01 0.01 12300\n",
2770 "advent14 0.01 0.85 15068\n",
2771 "advent15 20.65 137.27 18101260\n",
2772 "advent16 15.74 144.64 45628\n",
2773 "advent17 3.94 20.67 22000\n",
2774 "advent18 0.02 0.06 14060\n",
2775 "advent19 87.22 1134.12 14295324\n",
2776 "advent20 2.81 15.04 13940\n",
2777 "advent21 0.02 0.40 12680\n",
2778 "advent22 0.02 0.23 15908\n",
2779 "advent23 1.87 370.18 13628\n",
2780 "advent24 0.24 2.74 74820\n",
2781 "advent25 0.00 0.01 5896"
2784 "execution_count": 168,
2786 "output_type": "execute_result"
2790 "times = pd.read_csv('times_raw.csv', \n",
2791 " names=['program', 'system', 'elapsed', 'memory'], \n",
2792 " index_col='program')\n",
2793 "times.elapsed = (pd.to_datetime(times.elapsed, format=\"%M:%S.%f\") - epoch)\n",
2794 "times.elapsed = times.elapsed.apply(lambda x: x.total_seconds())\n",
2799 "cell_type": "code",
2800 "execution_count": 169,
2807 "elapsed float64\n",
2812 "execution_count": 169,
2814 "output_type": "execute_result"
2822 "cell_type": "code",
2823 "execution_count": 170,
2825 "Collapsed": "false"
2833 " .dataframe tbody tr th:only-of-type {\n",
2834 " vertical-align: middle;\n",
2837 " .dataframe tbody tr th {\n",
2838 " vertical-align: top;\n",
2841 " .dataframe thead th {\n",
2842 " text-align: right;\n",
2845 "<table border=\"1\" class=\"dataframe\">\n",
2847 " <tr style=\"text-align: right;\">\n",
2849 " <th>system</th>\n",
2850 " <th>elapsed</th>\n",
2851 " <th>memory</th>\n",
2856 " <th>count</th>\n",
2857 " <td>25.000000</td>\n",
2858 " <td>25.000000</td>\n",
2859 " <td>2.500000e+01</td>\n",
2863 " <td>5.309200</td>\n",
2864 " <td>73.117600</td>\n",
2865 " <td>1.313392e+06</td>\n",
2869 " <td>17.799571</td>\n",
2870 " <td>235.410442</td>\n",
2871 " <td>4.513418e+06</td>\n",
2875 " <td>0.000000</td>\n",
2876 " <td>0.010000</td>\n",
2877 " <td>5.896000e+03</td>\n",
2881 " <td>0.000000</td>\n",
2882 " <td>0.020000</td>\n",
2883 " <td>1.040800e+04</td>\n",
2887 " <td>0.020000</td>\n",
2888 " <td>0.090000</td>\n",
2889 " <td>1.326400e+04</td>\n",
2893 " <td>0.240000</td>\n",
2894 " <td>2.740000</td>\n",
2895 " <td>2.200000e+04</td>\n",
2899 " <td>87.220000</td>\n",
2900 " <td>1134.120000</td>\n",
2901 " <td>1.810126e+07</td>\n",
2908 " system elapsed memory\n",
2909 "count 25.000000 25.000000 2.500000e+01\n",
2910 "mean 5.309200 73.117600 1.313392e+06\n",
2911 "std 17.799571 235.410442 4.513418e+06\n",
2912 "min 0.000000 0.010000 5.896000e+03\n",
2913 "25% 0.000000 0.020000 1.040800e+04\n",
2914 "50% 0.020000 0.090000 1.326400e+04\n",
2915 "75% 0.240000 2.740000 2.200000e+04\n",
2916 "max 87.220000 1134.120000 1.810126e+07"
2919 "execution_count": 170,
2921 "output_type": "execute_result"
2929 "cell_type": "code",
2930 "execution_count": 171,
2932 "Collapsed": "false"
2940 " .dataframe tbody tr th:only-of-type {\n",
2941 " vertical-align: middle;\n",
2944 " .dataframe tbody tr th {\n",
2945 " vertical-align: top;\n",
2948 " .dataframe thead th {\n",
2949 " text-align: right;\n",
2952 "<table border=\"1\" class=\"dataframe\">\n",
2954 " <tr style=\"text-align: right;\">\n",
2956 " <th>total_time</th>\n",
2957 " <th>total_alloc</th>\n",
2958 " <th>total_ticks</th>\n",
2959 " <th>initial_capabilities</th>\n",
2960 " <th>system</th>\n",
2961 " <th>elapsed</th>\n",
2962 " <th>memory</th>\n",
2965 " <th>program</th>\n",
2977 " <th>advent01</th>\n",
2979 " <td>11516576</td>\n",
2984 " <td>10488</td>\n",
2987 " <th>advent02</th>\n",
2989 " <td>9613016</td>\n",
2994 " <td>11112</td>\n",
2997 " <th>advent03</th>\n",
2999 " <td>6018112</td>\n",
3004 " <td>10408</td>\n",
3007 " <th>advent04</th>\n",
3009 " <td>2913824</td>\n",
3017 " <th>advent05</th>\n",
3019 " <td>3396888</td>\n",
3027 " <th>advent06</th>\n",
3029 " <td>5025888</td>\n",
3034 " <td>10124</td>\n",
3037 " <th>advent07</th>\n",
3039 " <td>3049136</td>\n",
3047 " <th>advent08</th>\n",
3049 " <td>214597512</td>\n",
3054 " <td>12204</td>\n",
3057 " <th>advent09</th>\n",
3059 " <td>39708256</td>\n",
3064 " <td>23660</td>\n",
3067 " <th>advent10</th>\n",
3069 " <td>631808</td>\n",
3077 " <th>advent11</th>\n",
3079 " <td>655812832</td>\n",
3080 " <td>10308</td>\n",
3084 " <td>66664</td>\n",
3087 " <th>advent12</th>\n",
3089 " <td>1598902400</td>\n",
3090 " <td>25836</td>\n",
3094 " <td>13264</td>\n",
3097 " <th>advent13</th>\n",
3099 " <td>10281760</td>\n",
3104 " <td>12300</td>\n",
3107 " <th>advent14</th>\n",
3109 " <td>258169680</td>\n",
3110 " <td>19788</td>\n",
3114 " <td>15068</td>\n",
3117 " <th>advent15</th>\n",
3118 " <td>23014.42</td>\n",
3119 " <td>126607950592</td>\n",
3120 " <td>78480684</td>\n",
3122 " <td>20.65</td>\n",
3123 " <td>137.27</td>\n",
3124 " <td>18101260</td>\n",
3127 " <th>advent16</th>\n",
3128 " <td>910.42</td>\n",
3129 " <td>296137053800</td>\n",
3130 " <td>3104592</td>\n",
3132 " <td>15.74</td>\n",
3133 " <td>144.64</td>\n",
3134 " <td>45628</td>\n",
3137 " <th>advent17</th>\n",
3138 " <td>198.34</td>\n",
3139 " <td>77649009464</td>\n",
3140 " <td>676368</td>\n",
3143 " <td>20.67</td>\n",
3144 " <td>22000</td>\n",
3147 " <th>advent18</th>\n",
3149 " <td>68244096</td>\n",
3154 " <td>14060</td>\n",
3157 " <th>advent19</th>\n",
3158 " <td>125807.27</td>\n",
3159 " <td>1964531122296</td>\n",
3160 " <td>429011004</td>\n",
3162 " <td>87.22</td>\n",
3163 " <td>1134.12</td>\n",
3164 " <td>14295324</td>\n",
3167 " <th>advent20</th>\n",
3168 " <td>116.93</td>\n",
3169 " <td>55860434768</td>\n",
3170 " <td>398748</td>\n",
3173 " <td>15.04</td>\n",
3174 " <td>13940</td>\n",
3177 " <th>advent21</th>\n",
3179 " <td>351135824</td>\n",
3184 " <td>12680</td>\n",
3187 " <th>advent22</th>\n",
3188 " <td>3671.94</td>\n",
3189 " <td>528445105288</td>\n",
3190 " <td>12521556</td>\n",
3194 " <td>15908</td>\n",
3197 " <th>advent23</th>\n",
3198 " <td>1977.02</td>\n",
3199 " <td>26387446504</td>\n",
3200 " <td>6741780</td>\n",
3203 " <td>370.18</td>\n",
3204 " <td>13628</td>\n",
3207 " <th>advent24</th>\n",
3208 " <td>18.13</td>\n",
3209 " <td>3268072336</td>\n",
3210 " <td>61836</td>\n",
3214 " <td>74820</td>\n",
3217 " <th>advent25</th>\n",
3219 " <td>642496</td>\n",
3231 " total_time total_alloc total_ticks initial_capabilities \\\n",
3233 "advent01 0.06 11516576 192 12 \n",
3234 "advent02 0.06 9613016 192 12 \n",
3235 "advent03 0.04 6018112 120 12 \n",
3236 "advent04 0.03 2913824 96 12 \n",
3237 "advent05 0.02 3396888 84 12 \n",
3238 "advent06 0.02 5025888 84 12 \n",
3239 "advent07 0.03 3049136 108 12 \n",
3240 "advent08 0.69 214597512 2352 12 \n",
3241 "advent09 0.37 39708256 1248 12 \n",
3242 "advent10 0.01 631808 48 12 \n",
3243 "advent11 3.02 655812832 10308 12 \n",
3244 "advent12 7.58 1598902400 25836 12 \n",
3245 "advent13 0.08 10281760 264 12 \n",
3246 "advent14 5.80 258169680 19788 12 \n",
3247 "advent15 23014.42 126607950592 78480684 12 \n",
3248 "advent16 910.42 296137053800 3104592 12 \n",
3249 "advent17 198.34 77649009464 676368 12 \n",
3250 "advent18 0.36 68244096 1224 12 \n",
3251 "advent19 125807.27 1964531122296 429011004 12 \n",
3252 "advent20 116.93 55860434768 398748 12 \n",
3253 "advent21 1.97 351135824 6720 12 \n",
3254 "advent22 3671.94 528445105288 12521556 12 \n",
3255 "advent23 1977.02 26387446504 6741780 12 \n",
3256 "advent24 18.13 3268072336 61836 12 \n",
3257 "advent25 0.01 642496 48 12 \n",
3259 " system elapsed memory \n",
3261 "advent01 0.00 0.02 10488 \n",
3262 "advent02 0.00 0.02 11112 \n",
3263 "advent03 0.00 0.02 10408 \n",
3264 "advent04 0.00 0.01 9040 \n",
3265 "advent05 0.01 0.01 9324 \n",
3266 "advent06 0.01 0.02 10124 \n",
3267 "advent07 0.00 0.01 9192 \n",
3268 "advent08 0.02 0.09 12204 \n",
3269 "advent09 0.01 0.06 23660 \n",
3270 "advent10 0.00 0.01 6800 \n",
3271 "advent11 0.07 0.36 66664 \n",
3272 "advent12 0.06 1.09 13264 \n",
3273 "advent13 0.01 0.01 12300 \n",
3274 "advent14 0.01 0.85 15068 \n",
3275 "advent15 20.65 137.27 18101260 \n",
3276 "advent16 15.74 144.64 45628 \n",
3277 "advent17 3.94 20.67 22000 \n",
3278 "advent18 0.02 0.06 14060 \n",
3279 "advent19 87.22 1134.12 14295324 \n",
3280 "advent20 2.81 15.04 13940 \n",
3281 "advent21 0.02 0.40 12680 \n",
3282 "advent22 0.02 0.23 15908 \n",
3283 "advent23 1.87 370.18 13628 \n",
3284 "advent24 0.24 2.74 74820 \n",
3285 "advent25 0.00 0.01 5896 "
3288 "execution_count": 171,
3290 "output_type": "execute_result"
3294 "performance = performance.merge(times, left_index=True, right_index=True)\n",
3295 "# performance.drop(index='advent15loop', inplace=True)\n",
3300 "cell_type": "code",
3301 "execution_count": 172,
3303 "Collapsed": "false"
3309 "Index(['total_time', 'total_alloc', 'total_ticks', 'initial_capabilities',\n",
3310 " 'system', 'elapsed', 'memory'],\n",
3314 "execution_count": 172,
3316 "output_type": "execute_result"
3320 "performance.columns"
3324 "cell_type": "code",
3325 "execution_count": 173,
3330 "image/png": "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\n",
3332 "<Figure size 576x432 with 1 Axes>"
3336 "needs_background": "light"
3338 "output_type": "display_data"
3342 "# performance[['total_ticks', 'elapsed']].plot.bar(logy=True)\n",
3343 "performance.elapsed.plot.bar(\n",
3344 " figsize=(8, 6), title=\"External time\")\n",
3345 "plt.savefig('external_time.png')"
3349 "cell_type": "code",
3350 "execution_count": 174,
3355 "image/png": "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gAMO4D//8z/JTABuv/12APbZZ581hzruvPNOli5d2pTHLUla/zii0A877LAD//qv/8r+++/PK6+8wqhRo/jOd76zpv/AAw9k3rx5TJ06le22244999xzTd+4ceO466672H333Rk/fjwLFy5k9erVHHbYYTz11FNkJp/97Gd57Wtfy4knnshnPvMZpk6dSmYyadIkfvazn/Hxj3+cI488kqlTp7LLLrswbdq0oXgapOY6eXyn5aeGJo8a6Hyll1dqaTBFx7fVuho3blw+99xza7Xdc889bL/99kOU0cBsvPHGPPvss0OdxpBq5ddPQ8hCYQ0LheEtIv6cmeOGOo8OHnqQJEmVLBSabH0fTZAktRYLBUmSVMlCQZIkVfKqB0mSWkhEnAX8A/BoZu7URf9xwKHl4khge2DzzHw8IpYDzwCrgfbM3KOn/TmiIElSa1kAHFjVmZn/lpm7ZOYuwBeAazPz8YZV9iv7eywSwEJhvfLtb3+bc845p8u+efPmVfZ1WLBgAccee2yXfV/96lfXzL/00kvss88+tLe39z9ZSVKXMvM64PEeVyzMBs4fyP6Gx6GHztdXDzhe61yf3d7ezsiRPb+M7e3tnHXWWdx2221d9n3sYx8bUB5f/epXOeGEEwAYPXo0M2bMYOHChRx66KE9bClJGgwRMZZi5KHxG14CV0REAv+VmfO73LiBIwr9sHz5ct7ylrdw9NFHs9NOO3HooYdy1VVXsffeezNlyhRuvvlmoPo20QsWLGDmzJkcfPDBTJ48mdNPP51vfetb7Lrrruy55548/nhRKC5ZsoQ999yTqVOn8p73vIcnnngCgOnTp3PCCSew7777csoppzB58mRefvllAJ5++mkmTZq0ZrnDL3/5S3bbbbc1RUVjjFNPPZWTTz55zc2nbrnlFqZOncpee+3Fcccdx047/eUQ2MqVKznwwAOZMmUKn//85wE4/vjjef7559lll13WFAYzZ8581R01JUm9MjIiFjdMc/oZ52Dg+k6HHfbOzN2Ag4BjImKfnoJYKPTTsmXL+PSnP83SpUu59957Oe+88/jNb37DN7/5zTXD8FW3iYbiHg3nnXceN998M1/84hcZO3Yst99+O3vttdeaQwCHH344X//611m6dClvfetb19ySGuDJJ5/k2muv5aSTTmL69OlcemnxS20XXHAB73vf+xg1atRa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\n",
3357 "<Figure size 576x432 with 2 Axes>"
3361 "needs_background": "light"
3363 "output_type": "display_data"
3367 "# performance[['total_ticks', 'elapsed']].plot.bar(logy=True)\n",
3368 "performance[['elapsed', 'memory']].plot.bar(\n",
3369 " logy=False, secondary_y=['memory'], \n",
3370 " figsize=(8, 6), title=\"External time and memory\")\n",
3371 "plt.savefig('external_time_and_memory.png')"
3375 "cell_type": "code",
3376 "execution_count": 175,
3381 "image/png": "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jYEkabKIiIcys3v4Z04c5xhIkqQaGwNJklRT5ByD7Xnsscfo6enhkUceaXUpGqHp06czc+ZMpkyZ0upSJElDaLvGoKenh1133ZVZs2ZRvd672kBmcvfdd9PT08Ps2bNbXY4kaQhttyvhkUceYffdd7cpaDMRwe677+5IjyQVru0aA8CmoE35vklS+dqyMSjRrFmz+OMf/9j0112wYAFXX311019XktSZ2m6OwUCzlq4d17zNy44d1zxJktqJIwaj8OUvf5n58+ez//778y//8i/09fVt8/iiRYs46KCDeP7zn8/y5f99ifZddtmFd7/73Rx44IEcfvjh3HXXXQCcc845zJ07l3nz5nHCCScA8OCDD/LGN76Rgw8+mAMOOIBvfetbADz88MOccMIJzJs3j+OPP56HH275SbIkSeOnKyKWV88A3BJtP2LQbBs3bmTVqlVceeWVTJkyhbe+9a185Stf2eY5K1as4ClPeQoPP/wwBx98MK961avYfffdefDBBznwwAP55Cc/yb//+7/zoQ99iHPPPZdly5bx29/+lmnTprF161YAPvrRj/J3f/d3rFixgq1btzJ//nyOOOIIPv/5z7Pzzjtz/fXXc/3113PggQe24LcgSZogfZm5pJUF2BiM0Pe//31+8YtfcPDBBwOVb/BPe9rTtnnOOeecwze+8Q0AtmzZwm9+8xt23313dthhB44//ngAXvva1/LKV74SgHnz5nHiiSeyaNEiFi1aBMD3vvc9Vq9ezSc+8QmgcjTG73//e9avX8/b3/722nbz5s2b8J9ZkjR5NK0xiIh9gHcATwW+n5mfa9Zrj6fM5PWvfz1nnXXWNutXrlwJwA9/+EMuv/xyrrrqKnbeeWcWLFgw5CF6/bP0165dy/r161m9ejUf/vCHuemmm8hMvva1r7H33nsPuZ0kSeNtTHMMImJFRNwZETcOWH90RNwSEZsiYilAZm7MzDcDrwZeMJbXbaXDDz+cyy67jDvvvBOAe+65h9/97ne1x++77z522203dt55Z26++WZ++tOf1h57/PHHueyyywC46KKLePGLX8zjjz/Oli1beOlLX8rHP/5xtm7dygMPPMBRRx3FZz7zGfovcnXttdcC8JKXvKS26+LGG2/k+uuvb8rPLbXUGTO2vU1is5au3eYmjbexjhisBM4FLuhfERFdwHnAy4AeYENErM7MX0XEPwBLq9u0pblz5/KRj3yEI488kscff5wpU6Zw3nnn1R4/+uijOf/885k3bx577703hxxySO2x7u5ubrrpJg466CBmzJjBqlWr6Ovr47WvfS333Xcfmcm73vUunvzkJ3P66afzzne+k3nz5pGZzJo1i29/+9u85S1v4aSTTmLevHnsv//+zJ8/vxW/BklShxrzZZcjYhbw7czct7p8KHBGZh5VXf5XgMw8q26btZk57HGBg112eePGjeyzzz5jqrlVdtllFx544IFWl9FS7fz+qYUGjhKccV9r6ijAwFECD7HuLCVcdnki5hjsCWypW+4BXhgRC4BXAtOAdUNtHBFLgCUAU6dOnYDyJEnSUCaiMRhsZlxm5g+BHw63cWYuB5ZDZcRgXCtrsck+WiBJKt9EnOCoB9irbnkmcPsEvI4kSRpnE9EYbADmRMTsiJgKnACsHklARCyMiOUDzygoSZIm1lgPV7wYuArYOyJ6IuLkzOwFTgW+C2wELs3Mm0aSm5lrMnNJV1fXWMqTJEkjNKY5Bpm5eIj169jOBENJklSmIi+i5K6E8ffpT3+aCy64YNDHzj///CEf67dy5UpOPfXUQR8788wza/cfffRRXvKSl9Db2zv6YiU1zpM/aZwVea2EzFwDrOnu7j5l2CeP9/8IbXR8dG9vLzvuOPxb2Nvby4oVK7jmmmsGfezNb37zmOo488wzed/73gdUDjE9/PDDWbVqFSeeeOKYciVJzVfkiEHJNm/ezPOe9zze9KY3se+++3LiiSdy+eWX86IXvYg5c+bw85//HBj6sskrV65k0aJFLFy4kNmzZ3PuuefyqU99igMOOIBDDjmEe+65B4DrrruOQw45hHnz5vGKV7yCe++9F4AFCxbwvve9j8MOO4yPfvSjzJ49m8ceewyAP/3pT8yaNau23O8HP/gBBx54YK2JqM84++yzOeOMM2oXa9qwYQPz5s3j0EMP5bTTTmPfffet5dx+++0cffTRzJkzh/e85z0ALF26lIcffpj999+/1ggsWrToCVeclCS1hyIbg9J3JWzatIl3vOMdXH/99dx8881cdNFF/OQnP+ETn/hEbVi9/7LJGzZs4IorruC0006j/yyON954IxdddBE///nPef/738/OO+/Mtddey6GHHlob0n/d617Hxz72Ma6//nr2228/PvShD9Vef+vW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\n",
3383 "<Figure size 576x432 with 2 Axes>"
3387 "needs_background": "light"
3389 "output_type": "display_data"
3393 "# performance[['total_ticks', 'elapsed']].plot.bar(logy=True)\n",
3394 "performance[['elapsed', 'memory']].plot.bar(\n",
3395 " logy=True, secondary_y=['memory'], \n",
3396 " figsize=(8, 6), title=\"External time and memory\")\n",
3397 "plt.savefig('external_time_and_memory_log.png')"
3401 "cell_type": "code",
3402 "execution_count": 176,
3404 "Collapsed": "false"
3409 "image/png": "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gAMO4D//8z/JTABuv/12APbZZ581hzruvPNOli5d2pTHLUla/zii0A877LAD//qv/8r+++/PK6+8wqhRo/jOd76zpv/AAw9k3rx5TJ06le22244999xzTd+4ceO466672H333Rk/fjwLFy5k9erVHHbYYTz11FNkJp/97Gd57Wtfy4knnshnPvMZpk6dSmYyadIkfvazn/Hxj3+cI488kqlTp7LLLrswbdq0oXgapOY6eXyn5aeGJo8a6Hyll1dqaTBFx7fVuho3blw+99xza7Xdc889bL/99kOU0cBsvPHGPPvss0OdxpBq5ddPQ8hCYQ0LheEtIv6cmeOGOo8OHnqQJEmVLBSabH0fTZAktRYLBUmSVMlCQZIkVfKqB0mSWkhEnAX8A/BoZu7URf9xwKHl4khge2DzzHw8IpYDzwCrgfbM3KOn/TmiIElSa1kAHFjVmZn/lpm7ZOYuwBeAazPz8YZV9iv7eywSwEJhvfLtb3+bc845p8u+efPmVfZ1WLBgAccee2yXfV/96lfXzL/00kvss88+tLe39z9ZSVKXMvM64PEeVyzMBs4fyP6Gx6GHztdXDzhe61yf3d7ezsiRPb+M7e3tnHXWWdx2221d9n3sYx8bUB5f/epXOeGEEwAYPXo0M2bMYOHChRx66KE9bClJGgwRMZZi5KHxG14CV0REAv+VmfO73LiBIwr9sHz5ct7ylrdw9NFHs9NOO3HooYdy1VVXsffeezNlyhRuvvlmoPo20QsWLGDmzJkcfPDBTJ48mdNPP51vfetb7Lrrruy55548/nhRKC5ZsoQ999yTqVOn8p73vIcnnngCgOnTp3PCCSew7777csoppzB58mRefvllAJ5++mkmTZq0ZrnDL3/5S3bbbbc1RUVjjFNPPZWTTz55zc2nbrnlFqZOncpee+3Fcccdx047/eUQ2MqVKznwwAOZMmUKn//85wE4/vjjef7559lll13WFAYzZ8581R01JUm9MjIiFjdMc/oZ52Dg+k6HHfbOzN2Ag4BjImKfnoJYKPTTsmXL+PSnP83SpUu59957Oe+88/jNb37DN7/5zTXD8FW3iYbiHg3nnXceN998M1/84hcZO3Yst99+O3vttdeaQwCHH344X//611m6dClvfetb19ySGuDJJ5/k2muv5aSTTmL69OlcemnxS20XXHAB73vf+xg1atRa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\n",
3411 "<Figure size 576x432 with 2 Axes>"
3415 "needs_background": "light"
3417 "output_type": "display_data"
3421 "# performance[['total_ticks', 'elapsed']].plot.bar(logy=True)\n",
3422 "performance[['elapsed', 'memory']].plot.bar(\n",
3423 " logy=False, secondary_y=['memory'], \n",
3424 " figsize=(8, 6), title=\"External time and memory\")\n",
3425 "plt.savefig('external_time_and_memory_linear.png')"
3429 "cell_type": "code",
3430 "execution_count": 177,
3432 "Collapsed": "false"
3437 "image/png": "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/RwxkCSpxRwxkCQ1xYsvvkhPTw9r165tdymqw5gxYxg3bhybb755u0upm4cSJKmD9PT0sM022zB+/HgqC2OqrDKTJ554gp6eHnbaaad2l1O3tp4qkZkLM3NmV1dXO8uQpI6xdu1atttuOzsFHSAi2G677TpudKeU51BKkgZmp6BzdOJn5aEESZJU1daOQXFRh4Xd3d0ntLMOSepU42dd1dS8FbMPHfT5p59+mosvvphPfepTA2esWMHPf/5zjj322MH3tWIFhx12GHfffXe/z99+++2sWrWK973vfQAsWLCAe+65h1mzZg0rT/XxUIIkqW5PP/003/zmNwd9zYoVK7j44osb3tftt9/OokWLqo/f//73D9gpUPO0tWMQEYdHxJze3t52liFJqtOsWbP47//+b6ZMmcJnP/tZPvvZzzJp0iTe/va3M3/+/OprbrjhBqZMmcLXvvY1VqxYwTvf+U723HNP9txzT37+859vcD8vvPACp5xyCvPnz2fKlCnMnz+fefPmceKJJwLwyCOP8IEPfIDdd9+d3Xff/RWZDzzwAHvssQdLlixh2bJlTJ06lSlTpjB58mTuv//+5r8xGxEPJUiS6jZ79mzuvvtubr/9di6//HLOO+887rjjDh5//HH22Wcf3vWudzF79my++tWvcuWVVwLw3HPPcc011zBmzBjuv/9+ZsyYwdKlSwfdz+jRo/mnf/onli5dytlnnw3AvHnzqs+fdNJJTJs2jR/+8If09vayZs0annrqKQDuu+8+jjnmGL797W8zZcoU/vZv/5ZPf/rTfOQjH+GFF17AP0YH5wWOJEnDcuONNzJjxgy6urp4/etfz7Rp01iyZAnbbrvty1734osvcuKJJ3L77bfT1dXFb37zm4b3fe2113LhhRcC0NXVxdixY3nqqad47LHHOOKII7j88st529veBsA73vEOTj/9dHp6ejjqqKOYMGFCw/svm4jYDfg0sD3w08w8d7hZdgwkqYT6TipcMaYykW+32sbTVreuoH7Ue0n9r33ta7z+9a/njjvu4KWXXmLMmDEjVtPYsWPZcccduemmm6odg2OPPZZ9992Xq666ikMOOYTzzz+fd7/73SNWQ7NExFzgMODRzJxU0z4dOBPoAs7PzNmZeS/wyYjYDPj3RvbrHANJUt222WYbnnnmGQDe9a53MX/+fHp7e3nsscdYvHgxU6dOfdlrAFavXs0b3/hGNttsM77zne/UPZTfN6fWgQceyLnnVv4o7u3t5fe//z1QOQRxxRVXcOGFF1YnQD7wwAPsvPPOnHTSSbz//e/nzjvvHPbP32LzgOm1DRHRBZwDvBeYCMyIiInFc+8HbgR+2shOnWMgSR1sQ6cXNtt2223Hn/3ZnzFp0iTe+973MnnyZHbffXcigjPOOIM3vOENbLfddowaNYrdd9+d4447jk996lMcffTRfP/73+eAAw6gu7u+tYMOOOAAZs+ezZQpU/j85z//sufOPPNMZs6cyQUXXEBXVxfnnnsub3zjGwHo7u7myiuv5OCDD6a7u5t77rmHiy66iM0335w3vOENnHLKKU1/X0ZCZi6OiPF9mqcCyzPzAYCIuBQ4ArgnMxcACyLiKmDYp4W4uqIkldBAhxJeps2HElSfe++9l912e9lBICLiBeCumqY5mTmn77ZFx+DK9YcSIuKDwPTM/ETx+C+AfYHLgKOALYA7M/Oc4dbrHANJklpvXWbuPYzt+rvGcmbm9cD1DVVUsGMgSWqrq6++ms997nMva9tpp5344Q9/2KaKSq0H2LHm8ThgVTN3YMdAktRWhxxyCIcccki7y2i1roiYAyws5tvVawkwISJ2Ah4CjgEGv/b0ELmIkiRJrdebmTMHe0FEXALsD2wfET3AqZl5QUScCFxN5XTFuZm5rJmFeVaCJEkllJkzBmhfBCzq77lmcBElSZJarysi5hQj56Vix0CS1BTjx4/n8ccfb/l+999//wHXXvjgBz/IAw880O9zn/jEJ7jnnnsGzT7uuOO47LLLXtHedwXJu+66i+OOO67+ootDCUOcX9ASTj6UpE522tgm520810ZYtmwZvb297Lzzzq94rre3l/PPP3/Y2es7BsceW5n39/a3v52enh4efPBB3vzmNw87twwcMZAkDclFF11UXcb4r//6r/u9xPGRRx7JXnvtxdve9jbmzPnf6/ZsvfXW/N3f/R177rknBx54II899hgAZ511FhMnTmTy5Mkcc8wxADz77LN8/OMfZ5999mGPPfbgRz/6EQDPP/88xxxzDJMnT+bDH/4wzz//fL91fve73+WII4542b5POeUU9t13X26++eaXjTRccMEF7LLLLuy///6ccMIJ1eWdARYvXsyf/umfsvPOO1dHD/ouLQ1w+OGHc+mll9b7NnooQZLU+e69917mz5/PTTfdVF0t8bvf/e4rXjd37lxuueUWli5dyllnncUTTzwBVH7Z77nnntx6661MmzaNL37xi0BlOefbbruNO++8k/POOw+A008/nXe/+90sWbKE6667js9+9rM8++yznHvuuWy11VbceeedfOELX+CWW27pt9abbrqJvfbaq/r42WefZdKkSfzyl79kv/32q7avWrWKL33pS/ziF7/gmmuu4de//vXLch5++GFuvPFGrrzySmbNmlWt953vfCe33347n/nMZwDYe++9ueGGG+p9Kz2U0B9PV5SkzvLTn/6UW265hX322Qeo/PX+ute97hWvO+uss6oXKFq5ciX3338/2223HZttthkf/vCHAfjoRz/KUUcdBcDkyZP5yEc+wpFHHsmRRx4JwI9//GMWLFjAV7/6VQDWrl3Lgw8+yOLFiznppJOq202ePLnfWh9++GFe+9rXVh93dXVx9NFHv+J1v/rVr5g2bRqvec1rAPjQhz70sqWhjzzySDbbbDMmTpzII488MuB787rXvY5Vq5p6raG28HRFSVLdMpO/+qu/4itf+cqAr7n++uv5yU9+ws0338xWW23F/vvvz9q1a/t9bUTlCr9XXXUVixcvZsGCBXzpS19i2bJlZCaXX345u+6664DbDWbLLbd82X7HjBlDV1dXvz/TYGr/eB3stWvXrmXLLbfcYF1l56EESVLdDjzwQC677DIeffRRAJ588kl+97vfvew1q1ev5tWvfjVbbbUVv/71r/nFL35Rfe6ll16qHqe/+OKL2W+//XjppZdYuXIlBxxwAGeccQZPP/00a9as4ZBDDuEb3/hG9ZfxbbfdBlSWe15/+OLuu+8ecBnl3XbbjeXLl2/wZ5o6dSo/+9nPeOqpp1i3bh2XX375Brfpb0no3/zmN0yaNGmD2xacYyBJ6nwTJ07ky1/+Mu95z3uYPHkyBx98MA8//PDLXjN9+nTWrVvH5MmTOfnkk/mTP/mT6nPd3d0sW7aMvfbai2uvvZZTTjmF3t5ePvrRj/L2t7+dPfbYg8985jO86lWv4uSTT+bFF19k8uTJTJo0iZNPPhmAv/mbv2HNmjVMnjyZM844g6lTp/Zb66GHHsr111+/wZ9phx124B/+4R/Yd999Oeigg5g4cSJjxw5+tsfkyZOrS0uvn3x43XXXceihdS+D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\n",
3439 "<Figure size 576x432 with 2 Axes>"
3443 "needs_background": "light"
3445 "output_type": "display_data"
3449 "# performance[['total_ticks', 'elapsed']].plot.bar(logy=True)\n",
3450 "performance[['total_ticks', 'elapsed']].plot.bar(\n",
3451 " logy=True, secondary_y=['elapsed'], \n",
3452 " figsize=(8, 6), title=\"Internal vs external time\")\n",
3453 "plt.savefig('internal_external_time.png')"
3457 "cell_type": "code",
3458 "execution_count": 178,
3460 "Collapsed": "false"
3465 "image/png": "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OTIiNgUezMxX/SOLiFnURuwuKG4/DLy1GDwjSZK6qGV7zZn5d+CRiDgCVv/wxuhi9nzggGL6rtS+VvREq2qTJKmqmrZHHxG/APajNtr2MWqfYV4PnEPt0NkA4NLM/HpEjAD+L7WRsgl8KTOvaUphkiStR5p66F6SJPUuB7xJklRhNnpJkiqsKT+Ys8EGG+SgQYOaES1JUuk8//zzmZml3HluSqMfNGgQy5Yta0a0JEmlExEvrHup3lHKdx+SJKln2OglSaowG70kSRXWtLPXSZLW7uWXX2bhwoUsX768t0tRgwYOHMiwYcMYMGBAb5fSMBu9JPWShQsXsskmm7DjjjtSO+mgyiwzeeqpp1i4cCE77bRTb5fTMA/dS1IvWb58OVtuuaVNvo+ICLbccss+dwTGRi9Jvcgm37f0xefLRi9JUoX5Gb0klcSOk37bo3nzphyyzmWWLFnCJZdcwgknnNBxzrx5/OlPf+Koo45a+/bmzeN973sf999/f7vzZ86cyaJFi3jve98LwLRp05g9ezaTJk3qUp4a4x69JK3HlixZwtlnn73WZebNm8cll1zS7W3NnDmTq6++evXtD3zgAx02efUcG70krccmTZrE//7v/zJmzBhOOeUUTjnlFEaOHMmb3/xmpk6dunqZP/7xj4wZM4bvfe97zJs3j3e+853sscce7LHHHvzpT39a53ZeeuklTj/9dKZOncqYMWOYOnUqF1xwASeeeCIAjz32GIcddhijR49m9OjRr8p8+OGH2X333bnjjjuYNWsWY8eOZcyYMYwaNYq5c+f2/ANTIR66l6T12JQpU7j//vuZOXMmV155JT/+8Y+55557ePLJJ9l7773Zd999mTJlCt/5zneYPn06AM8//zzXXnstAwcOZO7cuRx55JHMmDFjrdvZcMMN+frXv86MGTP40Y9+BMAFF1ywev5JJ53EuHHj+NWvfsXKlStZunQpzzzzDAAPPvggEydO5Gc/+xljxozhc5/7HCeffDIf/ehHeemll1i5cmVzHpyKsNFLkgC4+eabOfLII+nXrx/bbLMN48aN44477mDTTTddY7mXX36ZE088kZkzZ9KvXz/+8pe/dHvb119/PT//+c8B6NevH0OHDuWZZ57hiSee4NBDD+XKK69kt912A+Btb3sbkydPZuHChXzwgx9k+PDh3d5+lXnoXpIE1H4QphHf+9732GabbbjnnnuYMWMGL730UtNqGjp0KDvssAO33HLL6mlHHXUU06ZNY9CgQYwfP57rr7++aduvAvfoJanJ2htNP2/gUexaP+GMZ1tWT71NNtmE5557DoB9992Xn/zkJxxzzDE8/fTT3HTTTXz729/m0UcfXb0MwLPPPsuwYcPYYIMNuPDCCxs+dF6/rbYOOOAAzjnnHD7/+c+zcuXK1ac633DDDfn1r3/N+PHjGTJkCEcddRQPP/wwO++8MyeddBIPP/ww9957L+9617u6+UhUl41ekkqika/D9bQtt9ySd7zjHYwcOZL3vOc9jBo1itGjRxMRnHnmmWy77bZsueWW9O/fn9GjR3PsscdywgkncPjhh3P55Zez//77M3jw4Ia2tf/++zNlyhTGjBnDqaeeusa8H/zgBxx//PGcd9559OvXj3POOYftttsOgMGDBzN9+nQOOuggBg8ezOzZs7nooosYMGAA2267LaeffnqPPy5VEo0equmMwYMH56p3Y5K0vutoj34NvbRHr86bM2cOu+66xvEYIuL5zGzsHU+L+Rm9JEkV5qF7SVKP+t3vfseXv/zlNabttNNO/OpXv+qlitZvNnpJUo8aP34848eP7+0yVPDQvSRJFWajlySpwmz0kiRVmI1ekvQqO+64I08++WTLt7vffvt1+Lv5H/rQh3j44YfbnfepT32K2bNnrzX72GOP5YorrnjV9LZn57vvvvs49thjGy+65ByMJ0llccbQHs6rznfzZ82axcqVK9l5551fNW/lypX89Kc/7XL2qkZ/1FG13zZ485vfzMKFC5k/fz6ve93rupxbFu7RS9J67KKLLlp9ytd//ud/bvfnbCdMmMCee+7Jbrvtxrnnnrt6+pAhQ/jiF7/IHnvswQEHHMATTzwBwFlnncWIESMYNWoUEydOBGDZsmV88pOfZO+992b33XfnqquuAuCFF15g4sSJjBo1io985CO88MIL7dZ58cUXc+ihh66x7dNPP523vOUt/PnPf17jSMB5553HLrvswn777cenP/3p1afCBbjpppt4+9vfzs4777x6777taXgB3v/+93PppZd2+XEtExu9JK2n5syZw9SpU7nllltWn4nu4osvftVy559/PnfeeSczZszgrLPO4qmnngJqzXuPPfbgrrvuYty4cXzta18Daqe+vfvuu7n33nv58Y9/DMDkyZN517vexR133MENN9zAKaecwrJlyzjnnHPYeOONuffee/nXf/1X7rzzznZrveWWW9hzzz1X3162bBkjR47ktttuY5999lk9fdGiRXzjG9/g1ltv5dprr+WBBx5YI2fx4sXcfPPNTJ8+nUmTJq2u953vfCczZ87kC1/4AgB77bUXf/zjH7v60JaKh+4laT113XXXceedd7L33nsDtb3rrbfe+lXLnXXWWat/7GbBggXMnTuXLbfckg022ICPfOQjABx99NF88IMfBGDUqFF89KMfZcKECUyYMAGAa665hmnTpvGd73wHgOXLlzN//nxuuukmTjrppNXrjRo1qt1aFy9ezFZbbbX6dr9+/Tj88MNftdztt9/OuHHj2GKLLQA44ogj1jiN7oQJE9hggw0YMWIEjz32WIePzdZbb82iRYs6nN+X2OglaT2VmRxzzDF861vf6nCZG2+8kd///vf8+c9/ZuONN2a//fZj+fLl7S4bEQD89re/5aabbmLatGl84xvfYNasWWQmV155JW984xs7XG9tBg0atMZ2Bw4cSL9+/dq9T2uz0UYbNbTs8uXLGTRo0Drr6gs8dC9J66kDDjiAK664gscffxyAp59+mr/+9a9rLPPss8+y+eabs/HGG/PAAw9w6623rp73yiuvrP6c+5JLLmGfffbhlVdeYcGCBey///6ceeaZLFmyhKVLlzJ+/Hh++MMfrm6ud999N1A7Ne6qjwvuv/9+7r333nZr3XXXXXnooYfWeZ/Gjh3LH/7wB5555hlWrFjBlVdeuc512jt97l/+8hdGjhy5znX7Ahu9JK2nRowYwTe/+U3e/e53M2rUKA466CAWL168xjIHH3wwK1asYNSoUZx22mm89a1vXT1v8ODBzJo1iz333JPrr7+e008/nZUrV3L00Ufz5je/md13350vfOELbLbZZpx22mm8/PLLjBo1ipEjR3LaaacB8JnPfIalS5cyatQozjzzTMaOHdturYcccgg33njjOu/T9ttvz1e+8hXe8pa3cOCBBzJixAiGDl37txlGjRq1+jS8qwbj3XDDDRxySOtPG9wMDZ+mNiL6ATOARzPzfWtb1tPUStI/VPU0tUOGDGHp0qUt2dYLL7zA/vvvzy233NLuIft6S5cuZciQIaxYsYLDDjuMT37ykxx22GENb+vFF19k3Lhx3Hzz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\n",
3467 "<Figure size 576x432 with 2 Axes>"
3471 "needs_background": "light"
3473 "output_type": "display_data"
3477 "# performance[['total_ticks', 'elapsed']].plot.bar(logy=True)\n",
3478 "performance[['total_ticks', 'elapsed']].plot.bar(\n",
3479 " logy=False, secondary_y=['elapsed'], \n",
3480 " figsize=(8, 6), title=\"Internal vs external time\")\n",
3481 "plt.savefig('internal_external_time_linear.png')"
3485 "cell_type": "code",
3486 "execution_count": 179,
3488 "Collapsed": "false"
3493 "image/png": "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8t/5Z6kMm3+1GHk4CjgqIt5drH4a8JVimP1/biRrIL5OZdLmKuAa4GcDzOlXMfQ/g8rchUeofBY/pDJ3YiBmApOofD9+DpxczKfor4bbgJeBuzJz2QC3KzVc1+xrSVKdRMQNwMWZ+cNm1yJVy4ZAkuqo2D1xHbB9jwmJUqm5y0CS6iQiLgCuB/4/mwG1GkcIJEmSIwSSJMmGQJIkUdITE40aNSo33XTTZpchSVLDvPDCC5mZTftDvVQNQUTMAGaMHTuW559/vtnlSJLUMBHx4sZfNYTbL+Okwvb29rQhkCSNJBHxQma2N2v7ziGQJEk2BJIkqWRzCPqzZs0aOjo6WL169cZfrFIZN24cEydOZPTo0c0uRZLUh5ZpCDo6Othiiy2YNGkSlQu3qRVkJitWrKCjo4PJkyc3uxxJUh9KtcsgImZExJy1aze8suvq1auZMGGCzUCLiQgmTJjgyI4klVypGoLMnJ+Zs9ra2np93magNfm5SVL5laohkCRJzdEycwh6mnTSNXXNWzb7Qxt9zcqVK7n44os57rjj+s5Ztozbb7+dww8/vP/tLVvGhz/8Ye6///7a6uy23k033cTpp5/O1VdfXVOGJEk9OUJQg5UrV/L973+/39csW7aMiy++uEEVSZKGkbaImFOctbfhbAhqcNJJJ/Ff//Vf7LrrrpxwwgmccMIJTJ06lZ133pl58+ate80tt9zCrrvuyne/+12WLVvGu9/9bnbffXd23313br/99qq2Vet6Tz31FIcccgjTpk1jr7324t577wXgueee46ijjmLnnXdm2rRpXHHFFYN7EyRJQ2VtZs7KzPnN2HjL7jJohtmzZ3P//fezZMkSrrjiCs4991zuuecennzySfbYYw/23XdfZs+evd4w/gsvvMB1113HuHHjePjhh5k5cyaLFy/e6LZe85rX1LTeySefzG677cYvfvELbrjhBo488kiWLFnCN77xDcaPH899990HwNNPP12fN0OSNKzYEAzQrbfeysyZM2lra+O1r30t++23H4sWLWLLLbdc73Vr1qzh+OOPZ8mSJbS1tfH73/++qvxa17v11lvX/fX/3ve+lxUrVrBq1Squv/56Lr300nWv22qrrWr8SSVJI0GpGoLuVzssu2ovCvXd736X1772tdxzzz28/PLLjBs3bkjW662eiCAzPexPreuU8b0sW9X4Okqgt4nU1UyGlqpVqjkEGzsPQbNtscUWPPvsswDsu+++zJs3j7Vr1/LEE0+wcOFC9txzz/VeA7Bq1Spe//rXM2rUKC666CJ6O+lSb2pdb9999+UnP/kJADfddBNbb701W265JR/4wAc4++yz173OXQaSpN6UaoSgFs3ojCdMmMA+++zD1KlTOeigg5g2bRq77LILEcG3v/1tXve61zFhwgQ22WQTdtllFz75yU9y3HHHceihh3L55Zfznve8h/b26q5sWet6p5xyCkcddRTTpk1js80244ILLgDgK1/5Cv/8z//M1KlTaWtr4+STT+ajH/3ooN8LSdLwEtUOfTdSe3t7Pv/88+ste/DBB9lxxx2bVJEGy89PA+Iug3XcZTD8RcQLmVndX41DoFS7DCRJUnO07C6D4eLaa6/lxBNPXG/Z5MmT+fnPf96kiiRJI5ENQZMdeOCBHHjggc0uQ5I0wrnLQJIk2RBIkqQh2mUQEW8CvgyMz8yPFcsOAT4EvAY4JzN/NRTblqQRo+dRGCP0CAzVR9UjBBFxXkQ8HhH391g+PSIeioilEXESQGb+ITOP7v66zPxFZh4LfBL4hzrUriqcccYZXHjhhb0+d+655/b5XJe5c+dy/PHH9/rcN7/5zXX3X3rpJfbdd186OzsHXqwkqWlqGSGYC5wNrPsNEhFtwDnA+4EOYFFEXJWZv+0n5yvFOoPT2/HJg8prnc66s7OTTTbZ+EfX2dnJeeedx1133dXrc5/+9KcHVcc3v/lNvvSlLwEwZswYDjjgAObNm8cRRxwxqFxJUuNVPUKQmQuBp3os3hNYWowIvARcChzc2/pR8S3gl5m54W+oklu2bBlvectbOOaYY5g6dSpHHHEE119/Pfvssw9TpkzhzjvvBOD555/nU5/6FHvssQe77bYbV155JVD5S/uQQw5hxowZTJ48mbPPPpvvfOc77Lbbbuy111489VTlrV2yZAl77bUX06ZN4yMf+ci6Uw3vv//+fOlLX2K//fbj1FNPZfLkyaxZswaAZ555hkmTJq173OWGG25g9913X9c8dM8488wzOeWUUzj99NMBWLRoEdOmTWPvvfded1nnLo899hjTp09nypQpfOELXwAql3l+8cUX2XXXXdc1AIcccsi60ydLklrLYCcVbgcs7/a4A9guIiZExLnAbhHxxeK5fwHeB3wsIjb40zQiZkXE4ohYXNZh56VLl/K5z32Oe++9l9/97ndcfPHF3HrrrZx++unrhs9PPfVU3vve97Jo0SJuvPFGTjjhBLrOunj//fdz8cUXc+edd/LlL3+ZzTbbjLvvvpu999573dD9kUceybe+9S3uvfdedt55Z77+9a+v2/7KlSu5+eabOfnkk9l///255prKmcsuvfRSDj30UEaPHr1evbfddhtve9vb1lvWlfH5z39+veVHHXUU5557LnfccQc9ryWxZMkS5s2bx3333ce8efNYvnw5s2fPZtNNN2XJkiXrmoCpU6eyaNGiwb7NkqQmGGxD0Ntl9DIzV2TmpzPzbzLztGLh9zLzbcXyc3tZaU5mvj0z317NcHgzTJ48mZ133plRo0bx1re+lQMOOICIYOedd2bZsmUA/OpXv2L27Nnsuuuu7L///qxevZo//elPALznPe9hiy22YJtttmH8+PHMmDEDYN36q1atYuXKley3334AfOITn2DhwoXrtv8P//DK1ItjjjmG888/H4Dzzz+fo446aoN6//znP7PNNtust6x7RpeVK1fy7LPP8s53vhOAww8/fL3nDzjgAMaPH8+4cePYaaed+OMf/9jr+9PW1saYMWPWu7iTJKk1DPY3bwewfbfHE4HHBhpW9ssfd69r1KhR6x6PGjVq3WS6zOSKK65ghx12WG/d3/zmN1Wt35/uFzjaZ599WLZsGTfffDNr165db4i/y6abbsrq1av7zOiysetZdK+7ra2t31r/+te/Vn2JZ0lSeQx2hGARMCUiJkfEGOAw4KqBhpX98sfVOPDAAznrrLPW/ZK9++67q153/PjxbLXVVtxyyy0AXHTRRetGC3pz5JFHMnPmzF5HBwB23HFHli5dutHtbrXVVmyxxRb8+te/Biq7IKoxevTo9eYtrFixgm222WaDXReSpPKr5bDDS4A7gB0ioiMijs7MTuB44FrgQeCyzHxgaEptDV/96ldZs2YN06ZNY+rUqXz1q1+taf0LLriAE044gWnTprFkyRK+9rWv9fnaI444gqeffpqZM2f2+vxBBx203i6H/vzoRz9i1qxZ7L333mQm48dv/CiOWbNmMW3atHWTCm+88UY++MEPVrU9SVK5lOryx912GRzbc6jby+du6Kc//SlXXnklF110UZ+v+chHPsK3v/1tpkyZ0m/Wc889x+abbw7A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\n",
3495 "<Figure size 576x432 with 2 Axes>"
3499 "needs_background": "light"
3501 "output_type": "display_data"
3505 "# performance[['total_ticks', 'elapsed']].plot.bar(logy=True)\n",
3506 "performance[['total_alloc', 'memory']].plot.bar(\n",
3507 " logy=True, secondary_y=['memory'], \n",
3508 " figsize=(8, 6), title=\"Internal vs external memory\")\n",
3509 "plt.savefig('internal_external_memory_log.png')"
3513 "cell_type": "code",
3514 "execution_count": 180,
3516 "Collapsed": "false"
3521 "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgcAAAGpCAYAAAAZX5U4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAz9UlEQVR4nO3de7xcdX3v/9eHJNtwCRG5KlFI26hgCAFDCkW5iEKgckCxlkilUjEPL7T++vBQqReg9SjxUoWKmObYGKEGUkSEQpDL4Q4iQQg3QU0hSgwVCCRcIwQ+vz/W2nHWZl9mkr1n1oTX8/GYR2bW5b0+e2ZgPvNda9aKzESSJKnXJp0uQJIk1YvNgSRJqrA5kCRJFTYHkiSpwuZAkiRV2BxIkqQKmwOpDSLi2og4vtN11FFELIuId3a6Dkl/YHOgrtXKh4ofzgPzw1lSXzYHUhMiYlSna6ijKLzi/z8SEaM7XYM0nF7x/1Fr4xARH4qIGyPiaxHxREQ8GBGHlvO+CLwdODMino6IM8vpb46IKyPi8Yj4RUS8vyFvfkR8OyIWRcQzwIHlN+z/HRF3RcTqiFgYEWPL5beKiEsi4tFy+5dExIQm6n5dRDwXEa9pmLZHRDwWEWMi4k8i4rpye49FxMJBsvaOiJsjYlVE3BkRB5TT/6xc9/Xl493LZd4cEecAbwD+q3xu/mGwrHLetRHxxYi4CXgW+KOIyIj4aET8qvz7vxURUS7/xxFxdUSsLOv4fkS8euhXdd3rcFZEXFbWd1NE7BARp5fbuT8i9ujzfF5Qvg4PRsTfNcw7NSLOj4j/iIinIuLuiHhjRPxjRDwSEQ9FxMF9si4u3x9LI+IjfbJ+UGY9CZwUEc9GxNYNy7y1rGNMM3+rVCuZ6c1bV96AZcA7y/sfAl4APgKMAj4GrACinH8tcHzDupsDDwHHAaOBPYHHgLeU8+cDq4F9KZroseX2bgVeB7wGuA/4aLn81sBRwGbAOOB84EcN26tsv8/fcTXwkYbHXwXmlPfPBT7bUMPbBsjYEVgJHFYu+67y8bbl/C+W29kUuAs4ob/nscmsa4HfAG8pn7sxQAKXAK+maDYeBWaUy/9JmfEqYFvgeuD0gbbf5++aX74uby3//quBB4Fjy9f5/wDXlMtuAvwMOBnoAf4IeAA4pJx/KrAGOKSs++wy67Pl3/AR4MGGbV8HnFVud2r5Nx3UkPUCcGS53U2BRcDHGtb/BvDNTv934s3b+txqO3IQEfPKbv6eJpbdLyJuj4i1EfG+hulTI+InEXFv+W3vL0e2anXYrzPz/2bmi8D3gNcC2w+w7LuBZZn53cxcm5m3AxcA72tY5qLMvCkzX8rMNeW0f83MFZn5OPBfFB8aZObKzLwgM5/NzKcoPoz3b7LuBcBMKIbpgaPLaVB8AO0EvC4z12TmjQNk/BWwKDMXlfVeCdxG8QEPxYfZeIrmZgXwrUHqGSoLYH5m3ls+dy+U02Zn5qrM/A1wDX94bpZm5pWZ+fvMfBT4Os0/NwAXZubPytfgQmBNZp5dvs4Lgd6Rg70oGph/zsznM/MB4P9SPJ+9bsjMyzNzLUUDt21Z9wvAecDOEfHqcpTlbcCny+d9CfAd4IMNWT/JzB+Vz9FzFO+5v4J1u6FmAue08HeqC7X4WfWNiFhS3n4ZEavaUOJ6qW1zQPGNYUaTy/6G4pvjgj7TnwWOzcy3lFmnNzucqa70P713MvPZ8u4WAyy7E/Cn5bD5qvI/0mOAHRqWeWiwbVC8v7YAiIjNIuLfIuLX5TDz9cCro7ljFX4A7BMRrwP2o/gWfkM57x+AAG4tm9y/GeTv+Ys+f8/bKBokyg+/+cBk4F8yc7Arrg2aVWrludkuIs6LiN+Wz81/ANsMsv2+ftdw/7l+Hve+xjsBr+tT92eoNoh9132sbDJ6H1PmvQ54vGz0ev2aYlSlV9/n4CJg14j4I4qRktWZeWsTf5+623ya/KzKzL/PzKmZORX4JvDDEaxrg9T2IJrMvD4idm6cFhF/TPGNZ1uK//l8JDPvz8xl5fyX+mT8suH+ioh4pFx31YgWrzrq+2H4EHBdZr6rhXUG8yngTcCfZub/RMRU4A6KD/bBC8tcFRFXAO8HdgHO7f3wzsz/oRjuJiLeBlwVEddn5tJ+/p5zMvMj9CMidgROAb4L/EtE7JWZvx/g7xw0a4B1BnNaufyUzFwZEUcCZ7awfrMeotgtMGkYslYAr4mIcQ0NwhuA3zYsU3kOMnNNRPwnRZP5Zhw1eEVo5bOqz6ozKf6brKU6jxz0Zy7wt5n5VuB/U+wPbEpETKfYD/nfI1Sb6u13FPuge10CvDEiPhjFgX9jImKviNhlPfPHUXzzXBXFwYWt/ke/gGI/+lE0jIBFxF/EHw5sfILiA+nFl6/OfwCHR8QhETEqIsZGxAERMaHcVTEf+Hfgw8DDwBca1u373AyY1eLf1Gsc8DTFc7MjcOJ65gzlVuDJiPh0RGxa1j45IvZqNSgzHwJuBk4r//4pFM/d94dY9WyKUcz/RfE86pVp0M+qiNgJmEhxDE0tdU1zEBFbAH8GnB8RS4B/ozrMOdi6r6Xo4o/LzJeGWl4bpTOA90VxhPu/lt8GD6bYH72CYkj8yxQHza2P0ykOSnsMuAX4cYvrXwxMAn6XmXc2TN8L+GlEPF0u88nMfLDvyuWH2REUw+iPUnyLPpHiv/G/oxha/3w5InEccFxEvL1c/TTgc+VQ/P8eImt9/BPFAZ+rgUsZoaHUcvfA4RTHOjxI8Vp8h+JYi/UxE9iZ4v1xIXBKefzFYDXcBLwE3N47oqlXliY/q44GftCwS6t2eo/krqVyqOaSzJwcEVsCv8jMARuCiJhfLv+DhmlbUhxdfVpmnj+yFUt6pYuIq4EFmfmdTtei9liPz6o7gE9k5s3tqrFVXTNykJlPAg9GxF/AupOv7D7YOhHRQ9Hxn21jIGmklbsw9qT4FYVegYb6rIqINwFbAT/pUIlNqW1zEBHnUjx5b4qI5RHxYYoDfT4cEXcC91IMfVLuK14O/AXwbxFxbxnzfoqjvz/U8PORqe3+WyRt/CLie8BVwP/X51cO2oi18llVmgmcN8Qvhjqu1rsVJElS+9V25ECSJHWGzYEkSaqo5UmQNtlkk9x00007XYYkSW3x7LPPZmbW5gt7LZuDTTfdlGeeeabTZUiS1BYR8dzQS7VPbboUSZJUDzYHkiSpwuZAkiRV1PKYg/688MILLF++nDVr1nS6FLVg7NixTJgwgTFjxnS6FElSk4ZsDiLi9RRXGtuB4oIiczPzjD7LBMWFbQ6juDzlhzLz9nLejHLeKOA7mTl7fQpdvnw548aNY+edd6bYnOouM1m5ciXLly9n4sSJnS5HktSkZnYrrAU+lZm7AHsDn4iIXfsscyjFFeUmAbOAbwNExCiKa1ofCuwKzOxn3aasWbOGrbfe2sagi0QEW2+9taM9ktRlhmwOMvPh3lGA8nzh9wE79lnsCIqLG2Vm3gK8urxM8nRgaWY+kJnPA+dRPcd0S2wMuo+vmSR1n5YOSCwvS7kH8NM+s3akuOZ7r+XltIGmS5Kkmmr6gMSI2AK4gOKKY0/2nd3PKjnI9P7yZ1HskqCnp2fIenY+6dIhl2nFstl/Puj8VatWsWDBAj7+8Y8PnLFsGTfffDMf+MAHBt/WsmW8+93v5p577mmtxob1rr32Wr72ta9xySWXtJQhSdJQmho5iIgxFI3B9zPzh/0sshx4fcPjCcCKQaa/TGbOzcxpmTlt9Oj6/Yhi1apVnHXWWYMus2zZMhYsWNCmiiRJGhlDNgflLxH+HbgvM78+wGIXA8dGYW9gdWY+DCwGJkXExIjoAY4ul+06J510Ev/93//N1KlTOfHEEznxxBOZPHkyu+22GwsXLly3zA033MDUqVP5xje+wbJly3j729/OnnvuyZ577snNN9/c1LZaXe/xxx/nyCOPZMqUKey9997cddddADz99NMcd9xx7LbbbkyZMoULLrhgw54ESdIrQjNf0fcFPgjcHRFLymmfAd4AkJlzgEUUP2NcSvFTxuPKeWsj4gTgcoqfMs7LzHuH8w9ol9mzZ3PPPfewZMkSLrjgAubMmcOdd97JY489xl577cV+++3H7NmzK0P9zz77LFdeeSVjx47lV7/6FTNnzuS2224bclvbbbddS+udcsop7LHHHvzoRz/i6quv5thjj2XJkiV84QtfYPz48dx9990APPHEE8PzZEiSNmpDNgeZeSP9HzvQuEwCnxhg3iKK5mGjceONNzJz5kxGjRrF9ttvz/7778/ixYvZcsstK8u98MILnHDCCSxZsoRRo0bxy1/+sqn8Vte78cYb140KvOMd72DlypWsXr2aq666ivPOO2/dcltttVWLf6kk6ZWofjv3u0DRCw3tG9/4Bttvvz133nknL730EmPHjh2R9fqrJyLITH9KKElqmddWaNK4ceN46qmnANhvv/1YuHAhL774Io8++ijXX38906dPrywDsHr1al772teyySabcM455/Diiy82ta1W19tvv/34/ve/D8C1117LNttsw5ZbbsnBBx/MmWeeuW45dyuoq5w6/uW3V6idT7r0ZTdpJHXtyMFQPz0cbltvvTX77rsvkydP5tBDD2XKlCnsvvvuRARf+cpX2GGHHdh6660ZPXo0u+++Ox/60If4+Mc/zlFHHcX555/PgQceyOabb97Utlpd79RTT+W4445jypQpbLbZZnzve98D4HOf+xyf+MQnmDx5MqNGjeKUU07hve997wY/F5KkjVs0O0TeTptvvnk+88wzlWn33Xcfu+yyS4cq0obwtdN66W+k4NTV7a+jBvobKWj3FySNrIh4NjOb+wbZBu5WkCRJFV27W2FjcPnll/PpT3+6Mm3ixIlceOGFHapIkiSbg4465JBDOOSQQzpdhiRJFTYHkiTVXETMA94NPJKZk/uZfyJwTPlwNLALsG1mPh4Ry4CngBeBtZk5bajtecyBJEn1Nx+YMdDMzPxqZk7NzKnAPwLXZebjDYscWM4fsjEAmwNJkmovM68HHh9ywcJM4NwN2Z7NwUbu9NNP5+yzz+533pw5cwac12v+/PmccMIJ/c770pe+tO7+888/z3777cfatWvXv1hJ0gaJiM0oRhgar7SXwBUR8bOImNVMTvceczDcZ0vrot9Pr127lmYua7127VrmzZvH7bff3u+8j370oxtUx5e+9CU+85nPANDT08NBBx3EwoULOeaYY4ZYU5LUx+iIaLzC3tzMnLseOYcDN/XZpbBvZq6IiO2AKyPi/nIkYkCOHDRp2bJlvPnNb+b4449n8uTJHHPMMVx11VXsu+++TJo0iVtvvRWAZ555hr/5m79hr732Yo899uCiiy4Cim/gRx55JIcffjgTJ07kzDPP5Otf/zp77LEHe++9N48/XryOS5YsYe+992bKlCm85z3vWXfK4wMOOIDPfOYz7L///nzxi19k4sSJvPDCCwA8+eST7Lzzzuse97r66qvZc8891zUSjRlnnHEGp556Kl/72tcAWLx4MVOmTGGfffZZdznqXitWrGDGjBlMmjSJf/iHfwCKy1M/99xzTJ06dV0zcOSRR647jbMkqSVrM3Naw219GgOAo+mzSyEzV5T/PgJcCEwfKsTmoAVLly7lk5/8JHfddRf3338/CxYs4MYbb+RrX/vauiH2L37xi7zjHe9g8eLFXHPNNZx44on0nu3xnnvuYcGCBdx666189rOfZbPNNuOOO+5gn332WTe8f+yxx/LlL3+Zu+66i912241/+qd/Wrf9VatWcd1113HKKadwwAEHcOmlxVnTzjvvPI466ijGjBlTqfemm27irW99a2Vab8anPvWpyvTjjjuOOXPm8JOf/IRRo0ZV5i1ZsoSFCxdy9913s3DhQh566CFmz57NpptuypIlS9Y1BJMnT2bx4sUb+jRLktZDRIwH9gcuapi2eUSM670PHAzcM1SWzUELJk6cyG677cYmm2zCW97yFg466CAigt12241ly5YBcMUVVzB79mymTp3KAQccwJo1a/jNb34DwIEHHsi4cePYdtttGT9+PIcffjjAuvVXr17NqlWr2H///QH467/+a66//g8jP3/5l3+57v7xxx/Pd7/7XQC++93vctxxx72s3ocffphtt922Mq0xo9eqVat46qmn+LM/+zMAPvCBD1TmH3TQQYwfP56xY8ey66678utf/7rf52fUqFH09PRULj4lSdpwEXEu8BPgTRGxPCI+HBEfjYjG/cPvAa7IzMbrD2wP3BgRdwK3Apdm5o+H2l73HnPQAa961avW3d9kk03WPd5kk03WHYiXmVxwwQW86U1vqqz705/+tKn1B9N4AaZ9992XZcuWcd111/Hiiy9WdgP02nTTTVmzZs2AGb2Gur5GY92jRo0atNbf//73TV+aWpLUnMyc2cQy8yl+8tg47QFg91a358jBMDvkkEP45je/ue4D94477mh63fHjx7PVVltxww03AHDOOeesG0Xoz7HHHsvMmTP7HTUA2GWXXVi6dOmQ291qq60YN24ct9xyC1DspmjGmDFjKsc5rFy5km233fZluzckSd3F5mCYff7zn+eFF15gypQpTJ48mc9//vMtrf+9732PE088kSlTprBkyRJOPvnkAZc95phjeOKJJ5g5s/+G8tBDD63slhjMv//7vzNr1iz22WcfMpPx44f+NcisWbOYMmXKugMSr7nmGg477LCmtidJqi8v2dzFfvCDH3DRRRdxzjnnDLjMe97zHr7yla8wadKkQbOefvpptthiCwBmz57Nww8/zBlnnNFSPe9973s57bTTXrZLxddO68VLNq/jJZs3fnW7ZLPHHHSpv/3bv+Wyyy5j0aJFgy7X+0E/VHNw6aWXctppp7F27Vp22mkn5s+f31I9zz//PEceeeTLGgNJUvdx5EAjztdO68WRg3UcOdj41W3kwGMOJElSRVc1B3Uc5dDgfM0kqft0TXMwduxYVq5c6YdNF8lMVq5c6XkPJKnLdM0BiRMmTGD58uU8+uijnS5FLRg7diwTJkzodBmSpBZ0TXMwZswYJk6c2OkyJEna6HXNbgVJktQeNgeSJKnC5kCSJFXYHEiSpAqbA0mSVDHkrxUiYh7wbuCRzJzcz/wTgWMa8nYBts3MxyNiGfAU8CKwNjOnDVfhkiRpZDQzcjAf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\n",
3523 "<Figure size 576x432 with 2 Axes>"
3527 "needs_background": "light"
3529 "output_type": "display_data"
3533 "# performance[['total_ticks', 'elapsed']].plot.bar(logy=True)\n",
3534 "performance[['total_alloc', 'memory']].plot.bar(\n",
3535 " logy=False, secondary_y=['memory'], \n",
3536 " figsize=(8, 6), title=\"Internal vs external memory\")\n",
3537 "plt.savefig('internal_external_memory_linear.png')"
3541 "cell_type": "code",
3542 "execution_count": 181,
3544 "Collapsed": "false"
3548 "# performance['elapsed_adj'] = performance['elapsed'] - 0.28\n",
3553 "cell_type": "code",
3554 "execution_count": 182,
3556 "Collapsed": "false"
3560 "# performance[['total_time', 'elapsed_adj']].plot.bar(logy=True)"
3564 "cell_type": "code",
3565 "execution_count": 194,
3567 "Collapsed": "false"
3572 "image/png": "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\n",
3574 "<Figure size 1440x360 with 3 Axes>"
3578 "needs_background": "light"
3580 "output_type": "display_data"
3584 "fig, ax = plt.subplots(ncols=3, figsize=(20,5))\n",
3586 "performance['elapsed'].plot.bar(ax=ax[2],\n",
3588 " title=\"Run times (wall clock), log scale\",\n",
3589 "# figsize=(10,8)\n",
3591 "ax[2].set_xlabel('Program')\n",
3593 "performance['elapsed'].plot.bar(ax=ax[0],\n",
3595 " title=\"Run times (wall clock), linear scale\",\n",
3596 "# figsize=(10,8)\n",
3598 "ax[0].set_xlabel('Program')\n",
3600 "performance['elapsed'].plot.bar(ax=ax[1],\n",
3603 " title=\"Run times (wall clock), truncated linear scale\",\n",
3604 "# figsize=(10,8)\n",
3606 "ax[1].set_xlabel('Program')\n",
3608 "plt.savefig('run_times_combined.png')"
3612 "cell_type": "code",
3613 "execution_count": 184,
3615 "Collapsed": "false"
3620 "image/png": "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\n",
3622 "<Figure size 936x360 with 2 Axes>"
3626 "needs_background": "light"
3628 "output_type": "display_data"
3632 "fig, ax = plt.subplots(ncols=2, figsize=(13,5))\n",
3634 "performance['memory'].plot.bar(ax=ax[0],\n",
3636 " title=\"Memory used, log scale\",\n",
3637 "# figsize=(10,8)\n",
3639 "ax[0].set_xlabel('Program')\n",
3641 "performance['memory'].plot.bar(ax=ax[1],\n",
3643 " title=\"Memory used, linear scale\",\n",
3644 "# figsize=(10,8)\n",
3646 "ax[1].set_xlabel('Program')\n",
3648 "plt.savefig('memory_combined.png')"
3652 "cell_type": "code",
3653 "execution_count": 251,
3658 "image/png": "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\n",
3660 "<Figure size 936x360 with 4 Axes>"
3664 "needs_background": "light"
3666 "output_type": "display_data"
3670 "fig, ax = plt.subplots(ncols=2, figsize=(13,5))\n",
3672 "performance[['total_alloc', 'memory']].plot.bar(ax=ax[0],\n",
3673 " logy=False, secondary_y=['memory'], \n",
3674 " title=\"Internal vs external memory, linear scale\")\n",
3675 "ax[0].set_xlabel('Program')\n",
3677 "performance[['total_alloc', 'memory']].plot.bar(ax=ax[1],\n",
3678 " logy=True, secondary_y=['memory'], \n",
3679 " title=\"Internal vs external memory. log scale\")\n",
3681 "plt.savefig('internal_external_memory_combined.png')"
3685 "cell_type": "code",
3686 "execution_count": 185,
3688 "Collapsed": "false"
3692 "# ax = performance['elapsed_adj'].plot.bar(logy=False, \n",
3693 "# title=\"Run times (wall clock), linear scale\",\n",
3694 "# figsize=(10,8))\n",
3695 "# ax.set_xlabel('Program')\n",
3696 "# plt.savefig('run_times_linear.png')"
3700 "cell_type": "code",
3701 "execution_count": 186,
3703 "Collapsed": "false"
3709 "Index(['total_time', 'total_alloc', 'total_ticks', 'initial_capabilities',\n",
3710 " 'system', 'elapsed', 'memory'],\n",
3714 "execution_count": 186,
3716 "output_type": "execute_result"
3720 "performance.columns"
3724 "cell_type": "code",
3725 "execution_count": 187,
3727 "Collapsed": "false"
3733 "<AxesSubplot:xlabel='program'>"
3736 "execution_count": 187,
3738 "output_type": "execute_result"
3742 "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAE3CAYAAACkZooiAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAb8UlEQVR4nO3de7BdZZnn8e/PXLxwE80RFAhhnKggRRBPRx0YA9OAAWWio+0k4+i0DXWKVma6uqa6TM9Mg9XOOHRb3do2l1TKSjFUD5ehNZrWcLOlxYZBk0Ag4RJIBZRDnE64XwQx8Mwfa52wOOzb2Wef97znze9Tters9b7r2c9zFpvnrKy99tqKCMzMrFyvm+4CzMxsarnRm5kVzo3ezKxwbvRmZoVzozczK5wbvZlZ4bJt9JLWSNolaWsP235d0uZ6uV/SkwlKNDObEZTrdfSSPgw8C1weEcdOIO4/Au+LiN+bsuLMzGaQbI/oI+Jm4PHmmKR3SrpO0iZJP5H0nhahK4ArkxRpZjYDzJ7uAiZoNXBuRDwg6QPAJcC/GpuUdCRwFPCjaarPzCw7M6bRS9of+BfANZLGhl8/brPlwN9GxEspazMzy9mMafRUp5mejIjjO2yzHPhimnLMzGaGbM/RjxcRTwMPSvodAFUWjc1LejdwMPB/p6lEM7MsZdvoJV1J1bTfLWlU0tnAZ4CzJd0J3A0sa4SsAK6KXC8jMjObJtleXmlmZoOR7RG9mZkNhhu9mVnhsrzqZt68ebFgwYLpLsPMbMbYtGnToxEx1Gouy0a/YMECNm7cON1lmJnNGJJ+3m7Op27MzArnRm9mVjg3ejOzwrnRm5kVzo3ezKxwbvRmZoVzozczK5wbvZlZ4bL8wJTZvmjByh+0nXvowo8mrMRK4yN6M7PCudGbmRWu66kbSWuAjwG7IuLYFvN/RPWFIGPPdzQwFBGPS3oIeAZ4CdgTEcODKtzMzHrTyxH9ZcDSdpMR8bWIOL7+Ltc/Bn4cEY83NjmlnneTNzObBl0bfUTcDDzebbvaCuDKSVVkZmYDNbBz9JLeRHXk/+3GcAA3SNokaWRQuczMrHeDvLzyLOCWcadtToyInZLeBtwo6b76XwivUf8hGAGYP3/+AMsyM9u3DfKqm+WMO20TETvrn7uAtcDidsERsToihiNieGio5ZekmJlZHwbS6CUdBCwBvtcY20/SAWOPgdOBrYPIZ2Zmvevl8sorgZOBeZJGgQuAOQARsare7BPADRHxXCP0EGCtpLE8V0TEdYMr3czMetG10UfEih62uYzqMszm2A5gUb+FmZnZYPiTsWZmhXOjNzMrnBu9mVnh3OjNzArnRm9mVjg3ejOzwrnRm5kVzo3ezKxwbvRmZoVzozczK5wbvZlZ4dzozcwK50ZvZlY4N3ozs8K50ZuZFc6N3syscG70ZmaFc6M3MyucG72ZWeHc6M3MCte10UtaI2mXpK1t5k+W9JSkzfVyfmNuqaRtkrZLWjnIws3MrDe9HNFfBiztss1PIuL4evlTAEmzgIuBM4BjgBWSjplMsWZmNnFdG31E3Aw83sdzLwa2R8SOiHgRuApY1sfzmJnZJAzqHP2HJN0p6VpJ763HDgMebmwzWo+ZmVlCswfwHLcDR0bEs5LOBL4LLATUYtto9ySSRoARgPnz5w+gLDMzgwEc0UfE0xHxbP14PTBH0jyqI/gjGpseDuzs8DyrI2I4IoaHhoYmW5aZmdUm3eglHSpJ9ePF9XM+BmwAFko6StJcYDmwbrL5zMxsYrqeupF0JXAyME/SKHABMAcgIlYBnwJ+X9Ie4HlgeUQEsEfSecD1wCxgTUTcPSW/hZmZtdW10UfEii7zFwEXtZlbD6zvrzQzMxsEfzLWzKxwbvRmZoVzozczK9wgrqM3M2trwcoftJ176MKPJqxk3+UjejOzwrnRm5kVzo3ezKxwbvRmZoVzozczK5wbvZlZ4dzozcwK50ZvZlY4N3ozs8K50ZuZFc6N3syscG70ZmaFc6M3MyucG72ZWeHc6M3MCudGb2ZWuK6NXtIaSbskbW0z/xlJd9XLrZIWNeYekrRF0mZJGwdZuJmZ9aaXI/rLgKUd5h8ElkTEccBXgNXj5k+JiOMjYri/Es3MbDK6fpVgRNwsaUGH+Vsbq7cBhw+gLjMzG5BBn6M/G7i2sR7ADZI2SRrpFChpRNJGSRt379494LLMzPZdA/tycEmnUDX6kxrDJ0bETklvA26UdF9E3NwqPiJWU5/2GR4ejkHVZWa2rxvIEb2k44BvAcsi4rGx8YjYWf/cBawFFg8in5mZ9W7SjV7SfOA7wGcj4v7G+H6SDhh7DJwOtLxyx8zMpk7XUzeSrgROBuZJGgUuAOYARMQq4HzgrcAlkgD21FfYHAKsrcdmA1dExHVT8DuYmVkHvVx1s6LL/DnAOS3GdwCLXhthZmYp+ZOxZmaFc6M3MyucG72ZWeHc6M3MCudGb2ZWODd6M7PCudGbmRXOjd7MrHBu9GZmhXOjNzMrnBu9mVnh3OjNzArnRm9mVjg3ejOzwrnRm5kVzo3ezKxwbvRmZoVzozczK5wbvZlZ4bo2eklrJO2StLXNvCR9U9J2SXdJOqExt1TStnpu5SALNzOz3vRyRH8ZsLTD/BnAwnoZAS4FkDQLuLiePwZYIemYyRRrZmYT17XRR8TNwOMdNlkGXB6V24A3S3o7sBjYHhE7IuJF4Kp6WzMzS2gQ5+gPAx5urI/WY+3GzcwsoUE0erUYiw7jrZ9EGpG0UdLG3bt3D6AsMzODwTT6UeCIxvrhwM4O4y1FxOqIGI6I4aGhoQGUZWZmMJhGvw74XH31zQeBpyLil8AGYKGkoyTNBZbX25qZWUKzu20g6UrgZGCepFHgAmAOQESsAtYDZwLbgV8Bn6/n9kg6D7gemAWsiYi7p+B3MDOzDro2+ohY0WU+gC+2mVtP9YfAzMymiT8Za2ZWODd6M7PCudGbmRXOjd7MrHBu9GZmhXOjNzMrnBu9mVnh3OjNzArnRm9mVjg3ejOzwrnRm5kVzo3ezKxwbvRmZoVzozczK5wbvZlZ4dzozcwK50ZvZlY4N3ozs8K50ZuZFc6N3syscD01eklLJW2TtF3SyhbzfyRpc71slfSSpLfUcw9J2lLPbRz0L2BmZp3N7raBpFnAxcBpwCiwQdK6iLhnbJuI+BrwtXr7s4A/jIjHG09zSkQ8OtDKzcysJ70c0S8GtkfEjoh4EbgKWNZh+xXAlYMozszMJq+XRn8Y8HBjfbQeew1JbwKWAt9uDAdwg6RNkkbaJZE0ImmjpI27d+/uoSwzM+tFL41eLcaizbZnAbeMO21zYkScAJwBfFHSh1sFRsTqiBiOiOGhoaEeyjIzs1700uhHgSMa64cDO9tsu5xxp20iYmf9cxewlupUkJmZJdJLo98ALJR0lKS5VM183fiNJB0ELAG+1xjbT9IBY4+B04GtgyjczMx60/Wqm4jYI+k84HpgFrAmIu6WdG49v6re9BPADRHxXCP8EGCtpLFcV0TEdYP8BczMrLOujR4gItYD68eNrRq3fhlw2bixHcCiSVVoZmaT4k/GmpkVzo3ezKxwbvRmZoVzozczK5wbvZlZ4dzozcwK50ZvZlY4N3ozs8K50ZuZFc6N3syscG70ZmaFc6M3MyucG72ZWeHc6M3MCudGb2ZWODd6M7PCudGbmRXOjd7MrHBu9GZmheup0UtaKmmbpO2SVraYP1nSU5I218v5vcaamdnU6vrl4JJmARcDpwGjwAZJ6yLinnGb/iQiPtZnrJmZTZFejugXA9sjYkdEvAhcBSzr8fknE2tmZgPQS6M/DHi4sT5aj433IUl3SrpW0nsnGGtmZlOk66kbQC3GYtz67cCREfGspDOB7wILe4ytkkgjwAjA/PnzeyjLzMx60csR/ShwRGP9cGBnc4OIeDoinq0frwfmSJrXS2zjOVZHxHBEDA8NDU3gVzAzs056afQbgIWSjpI0F1gOrGtuIOlQSaofL66f97FeYs3MbGp1PXUTEXsknQdcD8wC1kTE3ZLOredXAZ8Cfl/SHuB5YHlEBNAydop+FzMza6GXc/Rjp2PWjxtb1Xh8EXBRr7FmZpaOPxlrZlY4N3ozs8K50ZuZFc6N3syscG70ZmaFc6M3MyucG72ZWeHc6M3MCudGb2ZWODd6M7PCudGbmRXOjd7MrHBu9GZmhXOjNzMrnBu9mVnh3OjNzArnRm9mVjg3ejOzwrnRm5kVzo3ezKxwPTV6SUslbZO0XdLKFvOfkXRXvdwqaVFj7iFJWyRtlrRxkMWbmVl3s7ttIGkWcDFwGjAKbJC0LiLuaWz2ILAkIp6QdAawGvhAY/6UiHh0gHWbmVmPejmiXwxsj4gdEfEicBWwrLlBRNwaEU/Uq7cBhw+2TDMz61cvjf4w4OHG+mg91s7ZwLWN9QBukLRJ0sjESzQzs8noeuoGUIuxaLmhdApVoz+pMXxiROyU9DbgRkn3RcTNLWJHgBGA+fPn91CWmZn1opcj+lHgiMb64cDO8RtJOg74FrAsIh4bG4+InfXPXcBaqlNBrxERqyNiOCKGh4aGev8NzMyso14a/QZgoaSjJM0FlgPrmhtImg98B/hsRNzfGN9P0gFjj4HTga2DKt7MzLrreuomIvZIOg+4HpgFrImIuyWdW8+vAs4H3gpcIglgT0QMA4cAa+ux2cAVEXHdlPwmZmbWUi/n6ImI9cD6cWOrGo/PAc5pEbcDWDR+3MzM0vEnY83MCudGb2ZWODd6M7PCudGbmRXOjd7MrHBu9GZmhXOjNzMrnBu9mVnh3OjNzArnRm9mVjg3ejOzwrnRm5kVzo3ezKxwbvRmZoVzozczK5wbvZlZ4dzozcwK50ZvZlY4N3ozs8K50ZuZFa6nRi9pqaRtkrZLWtliXpK+Wc/fJemEXmPNzGxqdW30kmYBFwNnAMcAKyQdM26zM4CF9TICXDqBWDMzm0Kze9hmMbA9InYASLoKWAbc09hmGXB5RARwm6Q3S3o7sKCHWDOzfcKClT9oO/fQhR+dsry9NPrDgIcb66PAB3rY5rAeYwGQNEL1rwGAZyVta7HZPODRHmoeRFyqmFJz5V5fylyTrk9/li5Xypgp/r32tX1xZLuAXhq9WoxFj9v0ElsNRqwGVncsRNoYEcOdthlUXKqYUnPlXl/KXLnXlzJX7vWlzJWyvl4a/ShwRGP9cGBnj9vM7SHWzMymUC9X3WwAFko6StJcYDmwbtw264DP1VfffBB4KiJ+2WOsmZlNoa5H9BGxR9J5wPXALGBNRNwt6dx6fhWwHjgT2A78Cvh8p9hJ1Nvx1M6A41LFlJor9/pS5sq9vpS5cq8vZa5k9am6UMbMzErlT8aamRXOjd7MrHBu9GZmhXOjNzMr3Ixs9JLO7zD3EUlnS1owbvz3OsRI0qcl/U79+Lfrm7R9QVLP+0jSj7rMzxu3/u/rPCOSWn24bGy7T0h6S/14SNLlkrZIulrS4W1i/lLSib3W3oh7i6TzJZ1T74v/Kun7kr4m6eAOcadIukjS9yR9W9KFkv55l1wfkXSppHV13KWSlk605sbz+XXh10Wr59unXhctn2smXnUj6RcRMb/F+FeBk4DbgbOAb0TEX9dzt0fECeNj6rlLgLdRfcDraeD1wN9RXTL6TxHxBy1i7ho/BLwL2AYQEce1iNlbg6T/BvxL4ArgY8BoRPxhm/ruiYhj6sdXA7cB1wCnAp+JiNNaxOwGfg4MAVcDV0bEHa2ef1zcemALcCBwdP34/wCnAYsiYlmLmAuBQ4C/Bz4OPAjcD3wB+GpEXNMi5htU++tyqg/cQfWBus8BD7Ta5z3U7teFXxetat+nXhctRUSWS70DWy3PAHvaxGwBZteP30x1ff/X6/U7OuTaUv+cAzwGzK3XZ4/NtYhZB/wN8B6qe0wsoLqvz5HAkW1i7mg8vh3Yr5G3ZZ56flvj8aZxc5s75aK6o+ifAHcD9wEXAO/qkGtz/VPAIz3m2tJ4PBu4pX58MLC1Tcz9bcZF9T+0Xxd+Xfh10cfrotWS86mbJ4GFEXHguOUA4JdtYmZHxB6AiHiS6q/0gZKuofrr285YzG+ADRHxYr2+B3ipVUBE/Gvg21QfXlgUEQ8Bv4mIn0fEz9vkeaOk90l6PzArIp5r5G2Zp/YPkv5U0hvrxx+H6p/FwFNtYqJ+7gci4isR8V7g08AbqF7Q7byu/qf4EcD+Y/+klfRW2u/Dl8dOIQDvoPpwHBHxBK3vdwTwgqTFLcZ/C3ihQ31P4tfFGL8uXvEkfl20N5G/CikX4L8Di9vM/Vmb8e8DS9o818sdcl0L7N9i/FDgZ13q3A/4S6q/2KNdtr1p3PL2evytwMYOcXOALwO/qJeXqY5UrgDmt4m5o8/9vgL4p3r5JPBD4EbgEWCkTcy/pTodcENd30fr8SHgijYxJwA/pbpl9Q31cm899n6/Lvy68Ouiv9dFq2VGnqNvpz6yISKebzF3WEQ8MsHn24/qn0u7eth2EfChqG4JMSGqvqDl9RHxqx62PYjqSOSxLtvtHxHPTrSWRj2K6hYWs4Hjqf653u7IiPrI7Z9Rff/AkxPIdSjV7axF9cL/f/3U3CWHXxevbOfXxSs5in9d7I3JudHX7ywvpvoPHlR3vvxZdCi6n5iUuXKvL3WuNs/1noi4L0Vc7rlyr2+qckmaE9UpiubYvIjoeM/3fuJyz9Vvfa8ykcP/lAtwOtVN0q4FvlUv19Vjpw8qJmWu3OtLnatDDb/o8zUz4bjcc+Ve36BzAadQXW2zm+q0zYLG3O0dnm/Ccbnn6re+Vksv96OfLn8FnBrVmxZ7STqK6k2jowcUkzJX7vUlyyXpm23yi+oKiNaTfcTlniv3+hLn+nPgI1HdIfdTwI2SPhsRt9H+Ddx+43LP1W99r5Fzo5/NK9fRNj1C9SbUoGJS5sq9vpS5Pg/8Z+DXLeZWdKivn7jcc+VeX8pcc6O+lXlE/K2ke4HvSFpJm2+nm0Rc7rn6re81cm70a4ANqr5QfOx7Z4+g+vKSNQOMSZkr9/pS5tpAdS31reMnJH25Q339xOWeK/f6Uub6jaRDo37ztT6a/W2qK2Te2aG+fuJyz9Vvfa+R+5uxRwPLaLz7DqyLiHsGGZMyV+71pcql6mqMF2ICVw70G5d7rtzrS5lL0qnA7oi4c9z4QcB5EfE/BhWXe65+62tpIif0p2MB/qCXscnGpMyVe33eF94X050r9/pmwr541fYT2Xg6Flq8u0yXD330E5MyV+71eV94X0x3rtzrmwn7orlke45e0grg3wFHSWp+ofgBVPeXGEhMyly515cyV+71pcyVe30pc+VeX8pc/dbXSraNHriV6h4V84C/aIw/A4y/E9xkYlLmyr2+lLlyry9lrtzrS5kr9/pS5uq3vtfI+s1YMzObvJzvXgmApH8j6QFJT0l6WtIzkp4edEzKXLnXlzJX7vWlzJV7fSlz5V5fylz91vcqEzmhPx0L1cfoj57qmJS5cq/P+8L7Yrpz5V7fTNgXzSX7I3qqb2y5N0FMyly515cyV+71pcyVe30pc+VeX8pc/da3V/bn6CX9FdV9nr9L46PUEfGdQcakzJV7fSlz5V5fyly515cyV+71pczVb31NOV91M+ZA4FdUd0gcE0CnX7KfmJS5cq8vZa7c60uZK/f6UubKvb6Uufqtb6/sj+jNzGxysj9HL+ldkv5e0tZ6/ThV34g+0JiUuXKvL2Wu3OtLmSv3+lLmyr2+lLn6re9VJvNObooF+DHVNxfd0Rhr+Q3yk4lJmSv3+rwvvC+mO1fu9c2EfdFcsj+iB94UET8bN7ZnCmJS5sq9vpS5cq8vZa7c60uZK/f6Uubqt769ZkKjf1TSO6lvtK/qm1bafhnxJGJS5sq9vpS5cq8vZa7c60uZK/f6Uubqt75XTOTwfzoWqm+Q/yHVu86PAP8IHDnomJS5cq/P+8L7Yrpz5V7fTNgXzSX7q24kzYqIlyTtB7wuIp6ZipiUuXKvL2Wu3OtLmSv3+lLmyr2+lLn6ra9pJpy6eVDSauCDwLNTGJMyV+71pcyVe30pc+VeX8pcudeXMle/9b1iIof/07EAbwQ+TfXhgIeAi4CTBh2TMlfu9XlfeF9Md67c65sJ++JVzzGRjad7AQ4GLgdemsqYlLlyr8/7wvtiunPlXt9M2Bcz4dQNkpZIugS4HXgD1V+3gcekzJV7fSlz5V5fyly515cyV+71pczVb317TeSvwnQswIPAWmAFsN9UxaTMlXt93hfeF9OdK/f6ZsK+aC4z4aqbAyNiQjfZ7ycmZa7c60uZK/f6UubKvb6UuXKvL2Wufut71XPk2ugl/TX1BwRaiYj/NIiYlLlyry9lrtzrS5kr9/pS5sq9vpS5+q2vlZzP0W8ENlGdjzoBeKBejgdeGmBMyly515cyV+71pcyVe30pc+VeX8pc/db3Wv2c70m5ADcBcxrrc4CbBh2TMlfu9XlfeF9Md67c65sJ+6K55HxEP+YdwAGN9f3rsUHHpMyVe30pc+VeX8pcudeXMlfu9aXM1W99e82Eb5i6ELhD0k31+hLgy1MQkzJX7vWlzJV7fSlz5V5fyly515cyV7/17ZXtm7FNkt4BfBa4F3gTsDMibh50TMpcudeXMlfu9aXMlXt9KXPlXl/KXP3Wt9dEzvNMxwKcA2wBnqA6V/U88KNBx6TMlXt93hfeF9OdK/f6ZsK+eNVzTGTj6VjqX/ANwOZ6/T3A1YOOSZkr9/q8L7wvpjtX7vXNhH3RXGbCm7EvRMQLAJJeHxH3Ae+egpiUuXKvL2Wu3OtLmSv3+lLmyr2+lLn6rW+vmfBm7KikNwPfBW6U9ASwcwpiUubKvb6UuXKvL2Wu3OtLmSv3+lLm6re+vWbEm7FjJC0BDgKui4gXpyomZa7c60uZK/f6UubKvb6UuXKvL2WuvuubSY3ezMwmbiacozczs0lwozczK5wbvZlZ4dzobZ8nadYk42fC1Wu2D/ObsVY0SQuA64CfAu8D7gc+B9wDrAFOp/qyZQH/pf75g4j4Uh1/NvAlqsvZHgB+HRHnSboMeLx+ztuBq4FvUH2R8/PA5yNim6TfBT4OzAKOBf4CmEv1cfZfA2dGxONTtwfMZsZ19GaT9W7g7Ii4RdIa4Av1+AsRcVJ9H5HbgPdTfcz8BkkfB34G/AnVvcCfAX4E3Nl43ncBp0bES5IOBD4cEXsknQp8Ffhkvd2xVH8Q3gBsB74UEe+T9HWqPzrfmKLf2wxwo7d9w8MRcUv9+G+AsW/mubr++VvAP0TEbgBJ/xv4cD3347EjbknXUDX3MddExNgXQBwE/C9JC6m+FWhOY7ubIuIZ4BlJTwF/V49vAY4bxC9o1onP0du+YPz5ybH15+qfahPXbnzMc43HX6Fq6McCZ1EdvY/5dePxy431l/HBliXgRm/7gvmSPlQ/XgH847j5nwJLJM2r35hdAfyY6tTNEkkH12+4fpL2DgIeqR//7sAqNxsAN3rbF9wL/AdJdwFvAS5tTkbEL4E/proF7J3A7RHxvYh4hOpc+0+BH1K9gftUmxx/DvxPSbdQvfFqlg1fdWNFq6+6+X59SqWf+P0j4tn6iH4tsCYi1g6yRrOp5iN6s86+LGkzsBV4kOoOgmYzio/ozcwK5yN6M7PCudGbmRXOjd7MrHBu9GZmhXOjNzMrnBu9mVnh/j8OerpUBEdtOwAAAABJRU5ErkJggg==\n",
3744 "<Figure size 432x288 with 1 Axes>"
3748 "needs_background": "light"
3750 "output_type": "display_data"
3754 "performance['memory'].plot.bar()"
3758 "cell_type": "code",
3759 "execution_count": 188,
3761 "Collapsed": "false"
3767 "<AxesSubplot:xlabel='elapsed', ylabel='total_alloc'>"
3770 "execution_count": 188,
3772 "output_type": "execute_result"
3776 "image/png": "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\n",
3778 "<Figure size 432x288 with 1 Axes>"
3782 "needs_background": "light"
3784 "output_type": "display_data"
3788 "performance.plot.scatter('elapsed', 'total_alloc', logx=True, logy=True)"
3792 "cell_type": "code",
3793 "execution_count": 189,
3795 "Collapsed": "false"
3801 "<AxesSubplot:xlabel='memory', ylabel='total_alloc'>"
3804 "execution_count": 189,
3806 "output_type": "execute_result"
3810 "image/png": "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\n",
3812 "<Figure size 432x288 with 1 Axes>"
3816 "needs_background": "light"
3818 "output_type": "display_data"
3822 "performance.plot.scatter('memory', 'total_alloc', logx=True, logy=True)"
3826 "cell_type": "code",
3827 "execution_count": 190,
3829 "Collapsed": "false"
3835 "<AxesSubplot:xlabel='elapsed', ylabel='total_ticks'>"
3838 "execution_count": 190,
3840 "output_type": "execute_result"
3844 "image/png": "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\n",
3846 "<Figure size 432x288 with 1 Axes>"
3850 "needs_background": "light"
3852 "output_type": "display_data"
3856 "performance.plot.scatter('elapsed', 'total_ticks', logx=True, logy=True)"
3860 "cell_type": "code",
3861 "execution_count": 191,
3863 "Collapsed": "false"
3867 "performance[['total_alloc', 'memory', 'elapsed']].to_csv('performance.csv')"
3871 "cell_type": "code",
3872 "execution_count": 192,
3874 "Collapsed": "false"
3879 "output_type": "stream",
3881 "| program | total_alloc | elapsed | memory |\n",
3882 "|:----------|--------------:|----------:|---------:|\n",
3883 "| advent01 | 11516576 | 0.02 | 10488 |\n",
3884 "| advent02 | 9613016 | 0.02 | 11112 |\n",
3885 "| advent03 | 6018112 | 0.02 | 10408 |\n",
3886 "| advent04 | 2913824 | 0.01 | 9040 |\n",
3887 "| advent05 | 3396888 | 0.01 | 9324 |\n",
3888 "| advent06 | 5025888 | 0.02 | 10124 |\n",
3889 "| advent07 | 3049136 | 0.01 | 9192 |\n",
3890 "| advent08 | 214597512 | 0.09 | 12204 |\n",
3891 "| advent09 | 39708256 | 0.06 | 23660 |\n",
3892 "| advent10 | 631808 | 0.01 | 6800 |\n",
3893 "| advent11 | 655812832 | 0.36 | 66664 |\n",
3894 "| advent12 | 1598902400 | 1.09 | 13264 |\n",
3895 "| advent13 | 10281760 | 0.01 | 12300 |\n",
3896 "| advent14 | 258169680 | 0.85 | 15068 |\n",
3897 "| advent15 | 126607950592 | 137.27 | 18101260 |\n",
3898 "| advent16 | 296137053800 | 144.64 | 45628 |\n",
3899 "| advent17 | 77649009464 | 20.67 | 22000 |\n",
3900 "| advent18 | 68244096 | 0.06 | 14060 |\n",
3901 "| advent19 | 1964531122296 | 1134.12 | 14295324 |\n",
3902 "| advent20 | 55860434768 | 15.04 | 13940 |\n",
3903 "| advent21 | 351135824 | 0.40 | 12680 |\n",
3904 "| advent22 | 528445105288 | 0.23 | 15908 |\n",
3905 "| advent23 | 26387446504 | 370.18 | 13628 |\n",
3906 "| advent24 | 3268072336 | 2.74 | 74820 |\n",
3907 "| advent25 | 642496 | 0.01 | 5896 |\n"
3912 "print(performance[['total_alloc', 'elapsed', 'memory']].to_markdown(floatfmt=['0.0f', '0.0f', '.2f', '0.0f']))"
3916 "cell_type": "code",
3917 "execution_count": 232,
3951 "execution_count": 232,
3953 "output_type": "execute_result"
3957 "line_counts = ! find .. -path ../dist-newstyle -prune -o -type f -name \"Main.hs\" -exec wc -l {} \\;\n",
3958 "count_names = [re.search(\"(\\d+) \\.\\./([^/]+)\", l).groups([2, 1]) for l in line_counts if 'advent' in l if 'Main' in l]\n",
3959 "program_counts = pd.Series({n: int(c) for n, c in sorted([(c, n) for n, c in count_names])})\n",
3964 "cell_type": "code",
3965 "execution_count": 243,
3970 "image/png": "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\n",
3972 "<Figure size 432x648 with 1 Axes>"
3976 "needs_background": "light"
3978 "output_type": "display_data"
3982 "program_counts[::-1].plot.barh(figsize=(6, 9))\n",
3983 "plt.savefig('lines_of_code.png')"
3987 "cell_type": "code",
3988 "execution_count": 236,
3993 "output_type": "stream",
3996 "|:---------|----:|\n",
3997 "| advent01 | 22 |\n",
3998 "| advent02 | 93 |\n",
3999 "| advent03 | 51 |\n",
4000 "| advent04 | 57 |\n",
4001 "| advent05 | 105 |\n",
4002 "| advent06 | 30 |\n",
4003 "| advent07 | 137 |\n",
4004 "| advent08 | 76 |\n",
4005 "| advent09 | 97 |\n",
4006 "| advent10 | 76 |\n",
4007 "| advent11 | 148 |\n",
4008 "| advent12 | 155 |\n",
4009 "| advent13 | 61 |\n",
4010 "| advent14 | 107 |\n",
4011 "| advent15 | 91 |\n",
4012 "| advent16 | 274 |\n",
4013 "| advent17 | 171 |\n",
4014 "| advent18 | 72 |\n",
4015 "| advent19 | 221 |\n",
4016 "| advent20 | 56 |\n",
4017 "| advent21 | 118 |\n",
4018 "| advent22 | 269 |\n",
4019 "| advent23 | 215 |\n",
4020 "| advent24 | 224 |\n",
4021 "| advent25 | 52 |\n"
4026 "print(program_counts.to_markdown())"
4030 "cell_type": "code",
4031 "execution_count": 245,
4040 "execution_count": 245,
4042 "output_type": "execute_result"
4046 "program_counts.median()"
4050 "cell_type": "code",
4051 "execution_count": null,
4059 "formats": "ipynb,md"
4062 "display_name": "Python 3 (ipykernel)",
4063 "language": "python",
4067 "codemirror_mode": {
4071 "file_extension": ".py",
4072 "mimetype": "text/x-python",
4074 "nbconvert_exporter": "python",
4075 "pygments_lexer": "ipython3",