~cgb-cs/appscale/appscale-main

« back to all changes in this revision

Viewing changes to AppController/coverage/-home-cgb-clients-main-main-cgb-research-Neptune-ssa_helper_rb.html

  • Committer: Chris Bunch
  • Date: 2012-02-26 03:20:57 UTC
  • Revision ID: cgb@cs.ucsb.edu-20120226032057-ad0cy0zgx4we4exc
adding in repo over app engine support, and tests for most of datastore repo on appscale and s3

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
        <tbody>
29
29
          <tr>
30
30
            <td class="left_align"><a href="-home-cgb-clients-main-main-cgb-research-Neptune-ssa_helper_rb.html">/home/cgb/clients/main/main-cgb-research/Neptune/ssa_helper.rb</a></td>
31
 
            <td class='right_align'><tt>274</tt></td>
32
 
            <td class='right_align'><tt>195</tt></td>
33
 
            <td class="left_align"><div class="percent_graph_legend"><tt class=''>13.50%</tt></div>
 
31
            <td class='right_align'><tt>282</tt></td>
 
32
            <td class='right_align'><tt>198</tt></td>
 
33
            <td class="left_align"><div class="percent_graph_legend"><tt class=''>16.31%</tt></div>
34
34
          <div class="percent_graph">
35
 
            <div class="covered" style="width:14px"></div>
36
 
            <div class="uncovered" style="width:86px"></div>
 
35
            <div class="covered" style="width:16px"></div>
 
36
            <div class="uncovered" style="width:84px"></div>
37
37
          </div></td>
38
 
            <td class="left_align"><div class="percent_graph_legend"><tt class=''>9.23%</tt></div>
 
38
            <td class="left_align"><div class="percent_graph_legend"><tt class=''>10.61%</tt></div>
39
39
          <div class="percent_graph">
40
 
            <div class="covered" style="width:9px"></div>
41
 
            <div class="uncovered" style="width:91px"></div>
 
40
            <div class="covered" style="width:11px"></div>
 
41
            <div class="uncovered" style="width:89px"></div>
42
42
          </div></td>
43
43
          </tr>
44
44
        </tbody>
69
69
          
70
70
          
71
71
          <tr class="inferred">
72
 
            <td><pre><a name="line3">3</a> # baz</pre></td>
 
72
            <td><pre><a name="line3">3</a> </pre></td>
73
73
          </tr>
74
74
        
75
75
          
81
81
          
82
82
          
83
83
          <tr class="marked">
84
 
            <td><pre><a name="line5">5</a> require 'djinn'</pre></td>
85
 
          </tr>
86
 
        
87
 
          
88
 
          
89
 
          <tr class="inferred">
90
 
            <td><pre><a name="line6">6</a> </pre></td>
91
 
          </tr>
92
 
        
93
 
          
94
 
          
95
 
          <tr class="marked">
96
 
            <td><pre><a name="line7">7</a> MULTICORE = true</pre></td>
97
 
          </tr>
98
 
        
99
 
          
100
 
          
101
 
          <tr class="marked">
102
 
            <td><pre><a name="line8">8</a> SSA_HOME = &quot;/usr/local/StochKit2.0/&quot;</pre></td>
103
 
          </tr>
104
 
        
105
 
          
106
 
          
107
 
          <tr class="inferred">
108
 
            <td><pre><a name="line9">9</a> </pre></td>
109
 
          </tr>
110
 
        
111
 
          
112
 
          
113
 
          <tr class="marked">
114
 
            <td><pre><a name="line10">10</a> IS_FILE = true</pre></td>
115
 
          </tr>
116
 
        
117
 
          
118
 
          
119
 
          <tr class="marked">
120
 
            <td><pre><a name="line11">11</a> NOT_A_FILE = false</pre></td>
 
84
            <td><pre><a name="line5">5</a> $:.unshift File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;AppController&quot;)</pre></td>
 
85
          </tr>
 
86
        
 
87
          
 
88
          
 
89
          <tr class="marked">
 
90
            <td><pre><a name="line6">6</a> require 'djinn'</pre></td>
 
91
          </tr>
 
92
        
 
93
          
 
94
          
 
95
          <tr class="inferred">
 
96
            <td><pre><a name="line7">7</a> </pre></td>
 
97
          </tr>
 
98
        
 
99
          
 
100
          
 
101
          <tr class="inferred">
 
102
            <td><pre><a name="line8">8</a> </pre></td>
 
103
          </tr>
 
104
        
 
105
          
 
106
          
 
107
          <tr class="marked">
 
108
            <td><pre><a name="line9">9</a> $:.unshift File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;AppController&quot;, &quot;lib&quot;)</pre></td>
 
109
          </tr>
 
110
        
 
111
          
 
112
          
 
113
          <tr class="marked">
 
114
            <td><pre><a name="line10">10</a> require 'datastore_factory'</pre></td>
 
115
          </tr>
 
116
        
 
117
          
 
118
          
 
119
          <tr class="inferred">
 
120
            <td><pre><a name="line11">11</a> </pre></td>
121
121
          </tr>
122
122
        
123
123
          
129
129
          
130
130
          
131
131
          <tr class="marked">
132
 
            <td><pre><a name="line13">13</a> public </pre></td>
133
 
          </tr>
134
 
        
135
 
          
136
 
          
137
 
          <tr class="inferred">
138
 
            <td><pre><a name="line14">14</a> </pre></td>
139
 
          </tr>
140
 
        
141
 
          
142
 
          
143
 
          <tr class="marked">
144
 
            <td><pre><a name="line15">15</a> def neptune_ssa_run_job(nodes, job_data, secret)</pre></td>
145
 
          </tr>
146
 
        
147
 
          
148
 
          
149
 
          <tr class="uncovered">
150
 
            <td><pre><a name="line16">16</a>   return BAD_SECRET_MSG unless valid_secret?(secret)</pre></td>
151
 
          </tr>
152
 
        
153
 
          
154
 
          
155
 
          <tr class="uncovered">
156
 
            <td><pre><a name="line17">17</a>   Djinn.log_debug(&quot;ssa - run&quot;)</pre></td>
157
 
          </tr>
158
 
        
159
 
          
160
 
          
161
 
          <tr class="uncovered">
162
 
            <td><pre><a name="line18">18</a> </pre></td>
163
 
          </tr>
164
 
        
165
 
          
166
 
          
167
 
          <tr class="uncovered">
168
 
            <td><pre><a name="line19">19</a>   Thread.new {</pre></td>
169
 
          </tr>
170
 
        
171
 
          
172
 
          
173
 
          <tr class="uncovered">
174
 
            <td><pre><a name="line20">20</a>     start_time = Time.now</pre></td>
175
 
          </tr>
176
 
        
177
 
          
178
 
          
179
 
          <tr class="uncovered">
180
 
            <td><pre><a name="line21">21</a>     total_compute_time = 0</pre></td>
181
 
          </tr>
182
 
        
183
 
          
184
 
          
185
 
          <tr class="uncovered">
186
 
            <td><pre><a name="line22">22</a>     total_storage_time = 0</pre></td>
187
 
          </tr>
188
 
        
189
 
          
190
 
          
191
 
          <tr class="uncovered">
192
 
            <td><pre><a name="line23">23</a>     total_slowest_path = 0</pre></td>
193
 
          </tr>
194
 
        
195
 
          
196
 
          
197
 
          <tr class="uncovered">
198
 
            <td><pre><a name="line24">24</a>     c_times = []</pre></td>
199
 
          </tr>
200
 
        
201
 
          
202
 
          
203
 
          <tr class="uncovered">
204
 
            <td><pre><a name="line25">25</a>     s_times = []</pre></td>
205
 
          </tr>
206
 
        
207
 
          
208
 
          
209
 
          <tr class="uncovered">
210
 
            <td><pre><a name="line26">26</a> </pre></td>
211
 
          </tr>
212
 
        
213
 
          
214
 
          
215
 
          <tr class="uncovered">
216
 
            <td><pre><a name="line27">27</a>     Djinn.log_debug(&quot;job data is #{job_data.inspect}&quot;)</pre></td>
217
 
          </tr>
218
 
        
219
 
          
220
 
          
221
 
          <tr class="uncovered">
222
 
            <td><pre><a name="line28">28</a>     keyname = @creds['keyname']</pre></td>
223
 
          </tr>
224
 
        
225
 
          
226
 
          
227
 
          <tr class="uncovered">
228
 
            <td><pre><a name="line29">29</a> </pre></td>
229
 
          </tr>
230
 
        
231
 
          
232
 
          
233
 
          <tr class="uncovered">
234
 
            <td><pre><a name="line30">30</a>     nodes = Djinn.convert_location_array_to_class(nodes, keyname)</pre></td>
235
 
          </tr>
236
 
        
237
 
          
238
 
          
239
 
          <tr class="uncovered">
240
 
            <td><pre><a name="line31">31</a> </pre></td>
241
 
          </tr>
242
 
        
243
 
          
244
 
          
245
 
          <tr class="uncovered">
246
 
            <td><pre><a name="line32">32</a>     sims = neptune_get_ssa_num_simulations(nodes, job_data)</pre></td>
247
 
          </tr>
248
 
        
249
 
          
250
 
          
251
 
          <tr class="uncovered">
252
 
            <td><pre><a name="line33">33</a> </pre></td>
253
 
          </tr>
254
 
        
255
 
          
256
 
          
257
 
          <tr class="uncovered">
258
 
            <td><pre><a name="line34">34</a>     working_dir = &quot;/tmp/ssa-#{rand(10000)}&quot;</pre></td>
259
 
          </tr>
260
 
        
261
 
          
262
 
          
263
 
          <tr class="uncovered">
264
 
            <td><pre><a name="line35">35</a>     FileUtils.mkdir_p(working_dir)</pre></td>
265
 
          </tr>
266
 
        
267
 
          
268
 
          
269
 
          <tr class="uncovered">
270
 
            <td><pre><a name="line36">36</a> </pre></td>
271
 
          </tr>
272
 
        
273
 
          
274
 
          
275
 
          <tr class="uncovered">
276
 
            <td><pre><a name="line37">37</a>     tar = working_dir + &quot;/&quot; + File.basename(job_data['@tar'])</pre></td>
 
132
            <td><pre><a name="line13">13</a> MULTICORE = true</pre></td>
 
133
          </tr>
 
134
        
 
135
          
 
136
          
 
137
          <tr class="marked">
 
138
            <td><pre><a name="line14">14</a> SSA_HOME = &quot;/usr/local/StochKit2.0/&quot;</pre></td>
 
139
          </tr>
 
140
        
 
141
          
 
142
          
 
143
          <tr class="inferred">
 
144
            <td><pre><a name="line15">15</a> </pre></td>
 
145
          </tr>
 
146
        
 
147
          
 
148
          
 
149
          <tr class="inferred">
 
150
            <td><pre><a name="line16">16</a> </pre></td>
 
151
          </tr>
 
152
        
 
153
          
 
154
          
 
155
          <tr class="marked">
 
156
            <td><pre><a name="line17">17</a> IS_FILE = true</pre></td>
 
157
          </tr>
 
158
        
 
159
          
 
160
          
 
161
          <tr class="marked">
 
162
            <td><pre><a name="line18">18</a> NOT_A_FILE = false</pre></td>
 
163
          </tr>
 
164
        
 
165
          
 
166
          
 
167
          <tr class="inferred">
 
168
            <td><pre><a name="line19">19</a> </pre></td>
 
169
          </tr>
 
170
        
 
171
          
 
172
          
 
173
          <tr class="inferred">
 
174
            <td><pre><a name="line20">20</a> </pre></td>
 
175
          </tr>
 
176
        
 
177
          
 
178
          
 
179
          <tr class="marked">
 
180
            <td><pre><a name="line21">21</a> public </pre></td>
 
181
          </tr>
 
182
        
 
183
          
 
184
          
 
185
          <tr class="inferred">
 
186
            <td><pre><a name="line22">22</a> </pre></td>
 
187
          </tr>
 
188
        
 
189
          
 
190
          
 
191
          <tr class="inferred">
 
192
            <td><pre><a name="line23">23</a> </pre></td>
 
193
          </tr>
 
194
        
 
195
          
 
196
          
 
197
          <tr class="marked">
 
198
            <td><pre><a name="line24">24</a> def neptune_ssa_run_job(nodes, job_data, secret)</pre></td>
 
199
          </tr>
 
200
        
 
201
          
 
202
          
 
203
          <tr class="uncovered">
 
204
            <td><pre><a name="line25">25</a>   return BAD_SECRET_MSG unless valid_secret?(secret)</pre></td>
 
205
          </tr>
 
206
        
 
207
          
 
208
          
 
209
          <tr class="uncovered">
 
210
            <td><pre><a name="line26">26</a>   Djinn.log_debug(&quot;ssa - run&quot;)</pre></td>
 
211
          </tr>
 
212
        
 
213
          
 
214
          
 
215
          <tr class="uncovered">
 
216
            <td><pre><a name="line27">27</a> </pre></td>
 
217
          </tr>
 
218
        
 
219
          
 
220
          
 
221
          <tr class="uncovered">
 
222
            <td><pre><a name="line28">28</a>   Thread.new {</pre></td>
 
223
          </tr>
 
224
        
 
225
          
 
226
          
 
227
          <tr class="uncovered">
 
228
            <td><pre><a name="line29">29</a>     start_time = Time.now</pre></td>
 
229
          </tr>
 
230
        
 
231
          
 
232
          
 
233
          <tr class="uncovered">
 
234
            <td><pre><a name="line30">30</a>     total_compute_time = 0</pre></td>
 
235
          </tr>
 
236
        
 
237
          
 
238
          
 
239
          <tr class="uncovered">
 
240
            <td><pre><a name="line31">31</a>     total_storage_time = 0</pre></td>
 
241
          </tr>
 
242
        
 
243
          
 
244
          
 
245
          <tr class="uncovered">
 
246
            <td><pre><a name="line32">32</a>     total_slowest_path = 0</pre></td>
 
247
          </tr>
 
248
        
 
249
          
 
250
          
 
251
          <tr class="uncovered">
 
252
            <td><pre><a name="line33">33</a>     c_times = []</pre></td>
 
253
          </tr>
 
254
        
 
255
          
 
256
          
 
257
          <tr class="uncovered">
 
258
            <td><pre><a name="line34">34</a>     s_times = []</pre></td>
 
259
          </tr>
 
260
        
 
261
          
 
262
          
 
263
          <tr class="uncovered">
 
264
            <td><pre><a name="line35">35</a> </pre></td>
 
265
          </tr>
 
266
        
 
267
          
 
268
          
 
269
          <tr class="uncovered">
 
270
            <td><pre><a name="line36">36</a>     Djinn.log_debug(&quot;job data is #{job_data.inspect}&quot;)</pre></td>
 
271
          </tr>
 
272
        
 
273
          
 
274
          
 
275
          <tr class="uncovered">
 
276
            <td><pre><a name="line37">37</a>     keyname = @creds['keyname']</pre></td>
277
277
          </tr>
278
278
        
279
279
          
285
285
          
286
286
          
287
287
          <tr class="uncovered">
288
 
            <td><pre><a name="line39">39</a>     Djinn.log_debug(&quot;tar is #{job_data['@tar']}&quot;)</pre></td>
289
 
          </tr>
290
 
        
291
 
          
292
 
          
293
 
          <tr class="uncovered">
294
 
            <td><pre><a name="line40">40</a>     Djinn.log_debug(&quot;working dir is #{working_dir}&quot;)</pre></td>
295
 
          </tr>
296
 
        
297
 
          
298
 
          
299
 
          <tr class="uncovered">
300
 
            <td><pre><a name="line41">41</a> </pre></td>
301
 
          </tr>
302
 
        
303
 
          
304
 
          
305
 
          <tr class="uncovered">
306
 
            <td><pre><a name="line42">42</a>     remote = job_data['@tar']</pre></td>
307
 
          </tr>
308
 
        
309
 
          
310
 
          
311
 
          <tr class="uncovered">
312
 
            <td><pre><a name="line43">43</a>     storage = job_data['@storage']</pre></td>
313
 
          </tr>
314
 
        
315
 
          
316
 
          
317
 
          <tr class="uncovered">
318
 
            <td><pre><a name="line44">44</a>     creds = Djinn.neptune_parse_creds(storage, job_data)</pre></td>
 
288
            <td><pre><a name="line39">39</a>     nodes = Djinn.convert_location_array_to_class(nodes, keyname)</pre></td>
 
289
          </tr>
 
290
        
 
291
          
 
292
          
 
293
          <tr class="uncovered">
 
294
            <td><pre><a name="line40">40</a> </pre></td>
 
295
          </tr>
 
296
        
 
297
          
 
298
          
 
299
          <tr class="uncovered">
 
300
            <td><pre><a name="line41">41</a>     sims = neptune_get_ssa_num_simulations(nodes, job_data)</pre></td>
 
301
          </tr>
 
302
        
 
303
          
 
304
          
 
305
          <tr class="uncovered">
 
306
            <td><pre><a name="line42">42</a> </pre></td>
 
307
          </tr>
 
308
        
 
309
          
 
310
          
 
311
          <tr class="uncovered">
 
312
            <td><pre><a name="line43">43</a>     working_dir = &quot;/tmp/ssa-#{rand(10000)}&quot;</pre></td>
 
313
          </tr>
 
314
        
 
315
          
 
316
          
 
317
          <tr class="uncovered">
 
318
            <td><pre><a name="line44">44</a>     FileUtils.mkdir_p(working_dir)</pre></td>
319
319
          </tr>
320
320
        
321
321
          
327
327
          
328
328
          
329
329
          <tr class="uncovered">
330
 
            <td><pre><a name="line46">46</a>     Repo.get_output(remote, storage, creds, tar)</pre></td>
331
 
          </tr>
332
 
        
333
 
          
334
 
          
335
 
          <tr class="uncovered">
336
 
            <td><pre><a name="line47">47</a>     neptune_uncompress_file(tar)</pre></td>
337
 
          </tr>
338
 
        
339
 
          
340
 
          
341
 
          <tr class="uncovered">
342
 
            <td><pre><a name="line48">48</a> </pre></td>
343
 
          </tr>
344
 
        
345
 
          
346
 
          
347
 
          <tr class="uncovered">
348
 
            <td><pre><a name="line49">49</a>     num_sims = job_data[&quot;@trajectories&quot;] || job_data[&quot;@simulations&quot;]</pre></td>
349
 
          </tr>
350
 
        
351
 
          
352
 
          
353
 
          <tr class="uncovered">
354
 
            <td><pre><a name="line50">50</a>     #seeds = neptune_get_ssa_seed_vals(num_sims)</pre></td>
355
 
          </tr>
356
 
        
357
 
          
358
 
          
359
 
          <tr class="uncovered">
360
 
            <td><pre><a name="line51">51</a>     #Djinn.log_debug(&quot;seeds are #{seeds.join(', ')}&quot;)</pre></td>
361
 
          </tr>
362
 
        
363
 
          
364
 
          
365
 
          <tr class="uncovered">
366
 
            <td><pre><a name="line52">52</a> </pre></td>
367
 
          </tr>
368
 
        
369
 
          
370
 
          
371
 
          <tr class="uncovered">
372
 
            <td><pre><a name="line53">53</a>     param_num = job_data['@param_num']</pre></td>
373
 
          </tr>
374
 
        
375
 
          
376
 
          
377
 
          <tr class="uncovered">
378
 
            <td><pre><a name="line54">54</a> </pre></td>
379
 
          </tr>
380
 
        
381
 
          
382
 
          
383
 
          <tr class="uncovered">
384
 
            <td><pre><a name="line55">55</a>     threads = []</pre></td>
385
 
          </tr>
386
 
        
387
 
          
388
 
          
389
 
          <tr class="uncovered">
390
 
            <td><pre><a name="line56">56</a>     node_times = []</pre></td>
391
 
          </tr>
392
 
        
393
 
          
394
 
          
395
 
          <tr class="uncovered">
396
 
            <td><pre><a name="line57">57</a>     at = 0 </pre></td>
397
 
          </tr>
398
 
        
399
 
          
400
 
          
401
 
          <tr class="uncovered">
402
 
            <td><pre><a name="line58">58</a>     nodes.each_with_index { |node, i|</pre></td>
403
 
          </tr>
404
 
        
405
 
          
406
 
          
407
 
          <tr class="uncovered">
408
 
            <td><pre><a name="line59">59</a>       threads &lt;&lt; Thread.new {</pre></td>
409
 
          </tr>
410
 
        
411
 
          
412
 
          
413
 
          <tr class="uncovered">
414
 
            <td><pre><a name="line60">60</a>         node_times[i] = 0</pre></td>
415
 
          </tr>
416
 
        
417
 
          
418
 
          
419
 
          <tr class="uncovered">
420
 
            <td><pre><a name="line61">61</a> </pre></td>
421
 
          </tr>
422
 
        
423
 
          
424
 
          
425
 
          <tr class="uncovered">
426
 
            <td><pre><a name="line62">62</a>         ip = node.private_ip</pre></td>
427
 
          </tr>
428
 
        
429
 
          
430
 
          
431
 
          <tr class="uncovered">
432
 
            <td><pre><a name="line63">63</a>         ssh_key = node.ssh_key</pre></td>
433
 
          </tr>
434
 
        
435
 
          
436
 
          
437
 
          <tr class="uncovered">
438
 
            <td><pre><a name="line64">64</a>         start = at</pre></td>
439
 
          </tr>
440
 
        
441
 
          
442
 
          
443
 
          <tr class="uncovered">
444
 
            <td><pre><a name="line65">65</a>         fin = at + sims[i]</pre></td>
445
 
          </tr>
446
 
        
447
 
          
448
 
          
449
 
          <tr class="uncovered">
450
 
            <td><pre><a name="line66">66</a>         at = fin</pre></td>
451
 
          </tr>
452
 
        
453
 
          
454
 
          
455
 
          <tr class="uncovered">
456
 
            <td><pre><a name="line67">67</a>         fin -= 1 </pre></td>
457
 
          </tr>
458
 
        
459
 
          
460
 
          
461
 
          <tr class="uncovered">
462
 
            <td><pre><a name="line68">68</a>         Djinn.log_debug(&quot;This node will run trajectories #{start} to #{fin}&quot;)</pre></td>
 
330
            <td><pre><a name="line46">46</a>     tar = working_dir + &quot;/&quot; + File.basename(job_data['@tar'])</pre></td>
 
331
          </tr>
 
332
        
 
333
          
 
334
          
 
335
          <tr class="uncovered">
 
336
            <td><pre><a name="line47">47</a> </pre></td>
 
337
          </tr>
 
338
        
 
339
          
 
340
          
 
341
          <tr class="uncovered">
 
342
            <td><pre><a name="line48">48</a>     Djinn.log_debug(&quot;tar is #{job_data['@tar']}&quot;)</pre></td>
 
343
          </tr>
 
344
        
 
345
          
 
346
          
 
347
          <tr class="uncovered">
 
348
            <td><pre><a name="line49">49</a>     Djinn.log_debug(&quot;working dir is #{working_dir}&quot;)</pre></td>
 
349
          </tr>
 
350
        
 
351
          
 
352
          
 
353
          <tr class="uncovered">
 
354
            <td><pre><a name="line50">50</a> </pre></td>
 
355
          </tr>
 
356
        
 
357
          
 
358
          
 
359
          <tr class="uncovered">
 
360
            <td><pre><a name="line51">51</a>     remote = job_data['@tar']</pre></td>
 
361
          </tr>
 
362
        
 
363
          
 
364
          
 
365
          <tr class="uncovered">
 
366
            <td><pre><a name="line52">52</a>     storage = job_data['@storage']</pre></td>
 
367
          </tr>
 
368
        
 
369
          
 
370
          
 
371
          <tr class="uncovered">
 
372
            <td><pre><a name="line53">53</a> </pre></td>
 
373
          </tr>
 
374
        
 
375
          
 
376
          
 
377
          <tr class="uncovered">
 
378
            <td><pre><a name="line54">54</a>     datastore = DatastoreFactory.get_datastore(storage, job_data)</pre></td>
 
379
          </tr>
 
380
        
 
381
          
 
382
          
 
383
          <tr class="uncovered">
 
384
            <td><pre><a name="line55">55</a>     datastore.get_output_and_save_to_fs(remote, tar)</pre></td>
 
385
          </tr>
 
386
        
 
387
          
 
388
          
 
389
          <tr class="uncovered">
 
390
            <td><pre><a name="line56">56</a> </pre></td>
 
391
          </tr>
 
392
        
 
393
          
 
394
          
 
395
          <tr class="uncovered">
 
396
            <td><pre><a name="line57">57</a>     neptune_uncompress_file(tar)</pre></td>
 
397
          </tr>
 
398
        
 
399
          
 
400
          
 
401
          <tr class="uncovered">
 
402
            <td><pre><a name="line58">58</a> </pre></td>
 
403
          </tr>
 
404
        
 
405
          
 
406
          
 
407
          <tr class="uncovered">
 
408
            <td><pre><a name="line59">59</a>     num_sims = job_data[&quot;@trajectories&quot;] || job_data[&quot;@simulations&quot;]</pre></td>
 
409
          </tr>
 
410
        
 
411
          
 
412
          
 
413
          <tr class="uncovered">
 
414
            <td><pre><a name="line60">60</a> </pre></td>
 
415
          </tr>
 
416
        
 
417
          
 
418
          
 
419
          <tr class="uncovered">
 
420
            <td><pre><a name="line61">61</a>     param_num = job_data['@param_num']</pre></td>
 
421
          </tr>
 
422
        
 
423
          
 
424
          
 
425
          <tr class="uncovered">
 
426
            <td><pre><a name="line62">62</a> </pre></td>
 
427
          </tr>
 
428
        
 
429
          
 
430
          
 
431
          <tr class="uncovered">
 
432
            <td><pre><a name="line63">63</a>     threads = []</pre></td>
 
433
          </tr>
 
434
        
 
435
          
 
436
          
 
437
          <tr class="uncovered">
 
438
            <td><pre><a name="line64">64</a>     node_times = []</pre></td>
 
439
          </tr>
 
440
        
 
441
          
 
442
          
 
443
          <tr class="uncovered">
 
444
            <td><pre><a name="line65">65</a>     at = 0 </pre></td>
 
445
          </tr>
 
446
        
 
447
          
 
448
          
 
449
          <tr class="uncovered">
 
450
            <td><pre><a name="line66">66</a>     nodes.each_with_index { |node, i|</pre></td>
 
451
          </tr>
 
452
        
 
453
          
 
454
          
 
455
          <tr class="uncovered">
 
456
            <td><pre><a name="line67">67</a>       threads &lt;&lt; Thread.new {</pre></td>
 
457
          </tr>
 
458
        
 
459
          
 
460
          
 
461
          <tr class="uncovered">
 
462
            <td><pre><a name="line68">68</a>         node_times[i] = 0</pre></td>
463
463
          </tr>
464
464
        
465
465
          
471
471
          
472
472
          
473
473
          <tr class="uncovered">
474
 
            <td><pre><a name="line70">70</a>         code_path = &quot;#{working_dir}/code/run.sh&quot;</pre></td>
475
 
          </tr>
476
 
        
477
 
          
478
 
          
479
 
          <tr class="uncovered">
480
 
            <td><pre><a name="line71">71</a>         Djinn.log_run(&quot;chmod +x #{code_path}&quot;)</pre></td>
481
 
          </tr>
482
 
        
483
 
          
484
 
          
485
 
          <tr class="uncovered">
486
 
            <td><pre><a name="line72">72</a>         exec = &quot;bash #{code_path}&quot;</pre></td>
487
 
          </tr>
488
 
        
489
 
          
490
 
          
491
 
          <tr class="uncovered">
492
 
            <td><pre><a name="line73">73</a> </pre></td>
493
 
          </tr>
494
 
        
495
 
          
496
 
          
497
 
          <tr class="uncovered">
498
 
            <td><pre><a name="line74">74</a>         input = &quot;#{working_dir}/code/#{job_data['@input']}&quot;</pre></td>
499
 
          </tr>
500
 
        
501
 
          
502
 
          
503
 
          <tr class="uncovered">
504
 
            <td><pre><a name="line75">75</a> </pre></td>
505
 
          </tr>
506
 
        
507
 
          
508
 
          
509
 
          <tr class="uncovered">
510
 
            <td><pre><a name="line76">76</a>         unless ip == HelperFunctions.local_ip</pre></td>
511
 
          </tr>
512
 
        
513
 
          
514
 
          
515
 
          <tr class="uncovered">
516
 
            <td><pre><a name="line77">77</a>           Djinn.log_run(&quot;scp -r -i #{ssh_key} -o StrictHostkeyChecking=no #{working_dir} root@#{ip}:#{working_dir}&quot;)</pre></td>
517
 
          </tr>
518
 
        
519
 
          
520
 
          
521
 
          <tr class="uncovered">
522
 
            <td><pre><a name="line78">78</a>         end</pre></td>
523
 
          </tr>
524
 
        
525
 
          
526
 
          
527
 
          <tr class="uncovered">
528
 
            <td><pre><a name="line79">79</a> </pre></td>
529
 
          </tr>
530
 
        
531
 
          
532
 
          
533
 
          <tr class="uncovered">
534
 
            <td><pre><a name="line80">80</a>         trajectories = fin - start + 1 </pre></td>
 
474
            <td><pre><a name="line70">70</a>         ip = node.private_ip</pre></td>
 
475
          </tr>
 
476
        
 
477
          
 
478
          
 
479
          <tr class="uncovered">
 
480
            <td><pre><a name="line71">71</a>         ssh_key = node.ssh_key</pre></td>
 
481
          </tr>
 
482
        
 
483
          
 
484
          
 
485
          <tr class="uncovered">
 
486
            <td><pre><a name="line72">72</a>         start = at</pre></td>
 
487
          </tr>
 
488
        
 
489
          
 
490
          
 
491
          <tr class="uncovered">
 
492
            <td><pre><a name="line73">73</a>         fin = at + sims[i]</pre></td>
 
493
          </tr>
 
494
        
 
495
          
 
496
          
 
497
          <tr class="uncovered">
 
498
            <td><pre><a name="line74">74</a>         at = fin</pre></td>
 
499
          </tr>
 
500
        
 
501
          
 
502
          
 
503
          <tr class="uncovered">
 
504
            <td><pre><a name="line75">75</a>         fin -= 1 </pre></td>
 
505
          </tr>
 
506
        
 
507
          
 
508
          
 
509
          <tr class="uncovered">
 
510
            <td><pre><a name="line76">76</a>         Djinn.log_debug(&quot;This node will run trajectories #{start} to #{fin}&quot;)</pre></td>
 
511
          </tr>
 
512
        
 
513
          
 
514
          
 
515
          <tr class="uncovered">
 
516
            <td><pre><a name="line77">77</a> </pre></td>
 
517
          </tr>
 
518
        
 
519
          
 
520
          
 
521
          <tr class="uncovered">
 
522
            <td><pre><a name="line78">78</a>         code_path = &quot;#{working_dir}/code/run.sh&quot;</pre></td>
 
523
          </tr>
 
524
        
 
525
          
 
526
          
 
527
          <tr class="uncovered">
 
528
            <td><pre><a name="line79">79</a>         Djinn.log_run(&quot;chmod +x #{code_path}&quot;)</pre></td>
 
529
          </tr>
 
530
        
 
531
          
 
532
          
 
533
          <tr class="uncovered">
 
534
            <td><pre><a name="line80">80</a>         exec = &quot;bash #{code_path}&quot;</pre></td>
535
535
          </tr>
536
536
        
537
537
          
543
543
          
544
544
          
545
545
          <tr class="uncovered">
546
 
            <td><pre><a name="line82">82</a>         if MULTICORE</pre></td>
547
 
          </tr>
548
 
        
549
 
          
550
 
          
551
 
          <tr class="uncovered">
552
 
            <td><pre><a name="line83">83</a>           cores = HelperFunctions.get_num_cpus()</pre></td>
553
 
          </tr>
554
 
        
555
 
          
556
 
          
557
 
          <tr class="uncovered">
558
 
            <td><pre><a name="line84">84</a>         else</pre></td>
559
 
          </tr>
560
 
        
561
 
          
562
 
          
563
 
          <tr class="uncovered">
564
 
            <td><pre><a name="line85">85</a>           cores = 1</pre></td>
 
546
            <td><pre><a name="line82">82</a>         input = &quot;#{working_dir}/code/#{job_data['@input']}&quot;</pre></td>
 
547
          </tr>
 
548
        
 
549
          
 
550
          
 
551
          <tr class="uncovered">
 
552
            <td><pre><a name="line83">83</a> </pre></td>
 
553
          </tr>
 
554
        
 
555
          
 
556
          
 
557
          <tr class="uncovered">
 
558
            <td><pre><a name="line84">84</a>         unless ip == HelperFunctions.local_ip</pre></td>
 
559
          </tr>
 
560
        
 
561
          
 
562
          
 
563
          <tr class="uncovered">
 
564
            <td><pre><a name="line85">85</a>           Djinn.log_run(&quot;scp -r -i #{ssh_key} -o StrictHostkeyChecking=no #{working_dir} root@#{ip}:#{working_dir}&quot;)</pre></td>
565
565
          </tr>
566
566
        
567
567
          
579
579
          
580
580
          
581
581
          <tr class="uncovered">
582
 
            <td><pre><a name="line88">88</a>         done = 0</pre></td>
583
 
          </tr>
584
 
        
585
 
          
586
 
          
587
 
          <tr class="uncovered">
588
 
            <td><pre><a name="line89">89</a>         loop {</pre></td>
589
 
          </tr>
590
 
        
591
 
          
592
 
          
593
 
          <tr class="uncovered">
594
 
            <td><pre><a name="line90">90</a>           trajectories_left = trajectories - done</pre></td>
595
 
          </tr>
596
 
        
597
 
          
598
 
          
599
 
          <tr class="uncovered">
600
 
            <td><pre><a name="line91">91</a>           Djinn.log_debug(&quot;Need to run #{trajectories_left} more trajectories on #{cores} cores&quot;)</pre></td>
601
 
          </tr>
602
 
        
603
 
          
604
 
          
605
 
          <tr class="uncovered">
606
 
            <td><pre><a name="line92">92</a>           break if trajectories_left.zero?</pre></td>
607
 
          </tr>
608
 
        
609
 
          
610
 
          
611
 
          <tr class="uncovered">
612
 
            <td><pre><a name="line93">93</a>           need_to_run = [trajectories_left, cores].min</pre></td>
613
 
          </tr>
614
 
        
615
 
          
616
 
          
617
 
          <tr class="uncovered">
618
 
            <td><pre><a name="line94">94</a> </pre></td>
619
 
          </tr>
620
 
        
621
 
          
622
 
          
623
 
          <tr class="uncovered">
624
 
            <td><pre><a name="line95">95</a>           Djinn.log_debug(&quot;Running #{need_to_run} trajectories&quot;)</pre></td>
625
 
          </tr>
626
 
        
627
 
          
628
 
          
629
 
          <tr class="uncovered">
630
 
            <td><pre><a name="line96">96</a>           core_threads = []</pre></td>
631
 
          </tr>
632
 
        
633
 
          
634
 
          
635
 
          <tr class="uncovered">
636
 
            <td><pre><a name="line97">97</a>           current_times = []</pre></td>
637
 
          </tr>
638
 
        
639
 
          
640
 
          
641
 
          <tr class="uncovered">
642
 
            <td><pre><a name="line98">98</a>           need_to_run.times { |j|</pre></td>
643
 
          </tr>
644
 
        
645
 
          
646
 
          
647
 
          <tr class="uncovered">
648
 
            <td><pre><a name="line99">99</a>             core_threads &lt;&lt; Thread.new {</pre></td>
649
 
          </tr>
650
 
        
651
 
          
652
 
          
653
 
          <tr class="uncovered">
654
 
            <td><pre><a name="line100">100</a>               my_trajectory = start+done+j</pre></td>
655
 
          </tr>
656
 
        
657
 
          
658
 
          
659
 
          <tr class="uncovered">
660
 
            <td><pre><a name="line101">101</a>               Djinn.log_debug(&quot;Thread #{j} is running trajectory #{my_trajectory}&quot;)</pre></td>
661
 
          </tr>
662
 
        
663
 
          
664
 
          
665
 
          <tr class="uncovered">
666
 
            <td><pre><a name="line102">102</a>               output = File.expand_path(&quot;#{working_dir}/output-#{my_trajectory}&quot;)</pre></td>
667
 
          </tr>
668
 
        
669
 
          
670
 
          
671
 
          <tr class="uncovered">
672
 
            <td><pre><a name="line103">103</a> </pre></td>
673
 
          </tr>
674
 
        
675
 
          
676
 
          
677
 
          <tr class="uncovered">
678
 
            <td><pre><a name="line104">104</a>               # run the computation, remembering to place StochKit in the user's PATH</pre></td>
679
 
          </tr>
680
 
        
681
 
          
682
 
          
683
 
          <tr class="uncovered">
684
 
            <td><pre><a name="line105">105</a>               path = &quot;PATH=$PATH:#{SSA_HOME}&quot;</pre></td>
685
 
          </tr>
686
 
        
687
 
          
688
 
          
689
 
          <tr class="uncovered">
690
 
            <td><pre><a name="line106">106</a>               run_command = &quot;#{path} #{exec} #{input} #{output} #{my_trajectory} #{param_num}&quot;</pre></td>
691
 
          </tr>
692
 
        
693
 
          
694
 
          
695
 
          <tr class="uncovered">
696
 
            <td><pre><a name="line107">107</a> </pre></td>
697
 
          </tr>
698
 
        
699
 
          
700
 
          
701
 
          <tr class="uncovered">
702
 
            <td><pre><a name="line108">108</a>               start_compute = Time.now</pre></td>
703
 
          </tr>
704
 
        
705
 
          
706
 
          
707
 
          <tr class="uncovered">
708
 
            <td><pre><a name="line109">109</a>               Djinn.log_run(&quot;ssh -i #{ssh_key} -o StrictHostkeyChecking=no root@#{ip} '#{run_command}'&quot;)</pre></td>
709
 
          </tr>
710
 
        
711
 
          
712
 
          
713
 
          <tr class="uncovered">
714
 
            <td><pre><a name="line110">110</a>               end_compute = Time.now</pre></td>
715
 
          </tr>
716
 
        
717
 
          
718
 
          
719
 
          <tr class="uncovered">
720
 
            <td><pre><a name="line111">111</a>               c_time = end_compute - start_compute</pre></td>
721
 
          </tr>
722
 
        
723
 
          
724
 
          
725
 
          <tr class="uncovered">
726
 
            <td><pre><a name="line112">112</a>               total_compute_time += c_time</pre></td>
727
 
          </tr>
728
 
        
729
 
          
730
 
          
731
 
          <tr class="uncovered">
732
 
            <td><pre><a name="line113">113</a>               c_times &lt;&lt; c_time</pre></td>
733
 
          </tr>
734
 
        
735
 
          
736
 
          
737
 
          <tr class="uncovered">
738
 
            <td><pre><a name="line114">114</a> </pre></td>
739
 
          </tr>
740
 
        
741
 
          
742
 
          
743
 
          <tr class="uncovered">
744
 
            <td><pre><a name="line115">115</a>               # copy the output back to this box - in the future we can do merges here</pre></td>
745
 
          </tr>
746
 
        
747
 
          
748
 
          
749
 
          <tr class="uncovered">
750
 
            <td><pre><a name="line116">116</a>               # or in the future we can just have the node upload to s3</pre></td>
751
 
          </tr>
752
 
        
753
 
          
754
 
          
755
 
          <tr class="uncovered">
756
 
            <td><pre><a name="line117">117</a>               start_storage = Time.now</pre></td>
757
 
          </tr>
758
 
        
759
 
          
760
 
          
761
 
          <tr class="uncovered">
762
 
            <td><pre><a name="line118">118</a>               unless HelperFunctions.local_ip == ip</pre></td>
763
 
          </tr>
764
 
        
765
 
          
766
 
          
767
 
          <tr class="uncovered">
768
 
            <td><pre><a name="line119">119</a>                 remote_cp_command = &quot;scp -r -i #{ssh_key} -o StrictHostkeyChecking=no root@#{ip}:#{output} #{output}&quot;</pre></td>
769
 
          </tr>
770
 
        
771
 
          
772
 
          
773
 
          <tr class="uncovered">
774
 
            <td><pre><a name="line120">120</a>                 Djinn.log_run(remote_cp_command)</pre></td>
775
 
          </tr>
776
 
        
777
 
          
778
 
          
779
 
          <tr class="uncovered">
780
 
            <td><pre><a name="line121">121</a> </pre></td>
781
 
          </tr>
782
 
        
783
 
          
784
 
          
785
 
          <tr class="uncovered">
786
 
            <td><pre><a name="line122">122</a>               end</pre></td>
787
 
          </tr>
788
 
        
789
 
          
790
 
          
791
 
          <tr class="uncovered">
792
 
            <td><pre><a name="line123">123</a> </pre></td>
793
 
          </tr>
794
 
        
795
 
          
796
 
          
797
 
          <tr class="uncovered">
798
 
            <td><pre><a name="line124">124</a>               remote_location = &quot;#{job_data['@output']}/output-#{my_trajectory}&quot;</pre></td>
799
 
          </tr>
800
 
        
801
 
          
802
 
          
803
 
          <tr class="uncovered">
804
 
            <td><pre><a name="line125">125</a>               Repo.set_output(remote_location, output, storage, creds, IS_FILE)</pre></td>
805
 
          </tr>
806
 
        
807
 
          
808
 
          
809
 
          <tr class="uncovered">
810
 
            <td><pre><a name="line126">126</a>               end_storage = Time.now</pre></td>
811
 
          </tr>
812
 
        
813
 
          
814
 
          
815
 
          <tr class="uncovered">
816
 
            <td><pre><a name="line127">127</a>               s_time = end_storage - start_storage</pre></td>
817
 
          </tr>
818
 
        
819
 
          
820
 
          
821
 
          <tr class="uncovered">
822
 
            <td><pre><a name="line128">128</a>               total_storage_time += s_time</pre></td>
823
 
          </tr>
824
 
        
825
 
          
826
 
          
827
 
          <tr class="uncovered">
828
 
            <td><pre><a name="line129">129</a>               s_times &lt;&lt; s_time</pre></td>
829
 
          </tr>
830
 
        
831
 
          
832
 
          
833
 
          <tr class="uncovered">
834
 
            <td><pre><a name="line130">130</a> </pre></td>
835
 
          </tr>
836
 
        
837
 
          
838
 
          
839
 
          <tr class="uncovered">
840
 
            <td><pre><a name="line131">131</a>               node_times[i] += (c_time + s_time)</pre></td>
841
 
          </tr>
842
 
        
843
 
          
844
 
          
845
 
          <tr class="uncovered">
846
 
            <td><pre><a name="line132">132</a> </pre></td>
847
 
          </tr>
848
 
        
849
 
          
850
 
          
851
 
          <tr class="uncovered">
852
 
            <td><pre><a name="line133">133</a>               # remove our output - we can't want the disk to fill up</pre></td>
853
 
          </tr>
854
 
        
855
 
          
856
 
          
857
 
          <tr class="uncovered">
858
 
            <td><pre><a name="line134">134</a>               remove_cmd = &quot;rm -rf #{output}&quot;</pre></td>
859
 
          </tr>
860
 
        
861
 
          
862
 
          
863
 
          <tr class="uncovered">
864
 
            <td><pre><a name="line135">135</a>               Djinn.log_run(&quot;ssh -i #{ssh_key} -o StrictHostkeyChecking=no root@#{ip} '#{remove_cmd}'&quot;)</pre></td>
865
 
          </tr>
866
 
        
867
 
          
868
 
          
869
 
          <tr class="uncovered">
870
 
            <td><pre><a name="line136">136</a>               Djinn.log_run(remove_cmd)</pre></td>
871
 
          </tr>
872
 
        
873
 
          
874
 
          
875
 
          <tr class="uncovered">
876
 
            <td><pre><a name="line137">137</a>             }</pre></td>
877
 
          </tr>
878
 
        
879
 
          
880
 
          
881
 
          <tr class="uncovered">
882
 
            <td><pre><a name="line138">138</a>           }</pre></td>
883
 
          </tr>
884
 
        
885
 
          
886
 
          
887
 
          <tr class="uncovered">
888
 
            <td><pre><a name="line139">139</a> </pre></td>
889
 
          </tr>
890
 
        
891
 
          
892
 
          
893
 
          <tr class="uncovered">
894
 
            <td><pre><a name="line140">140</a>           core_threads.each { |c| c.join }</pre></td>
895
 
          </tr>
896
 
        
897
 
          
898
 
          
899
 
          <tr class="uncovered">
900
 
            <td><pre><a name="line141">141</a> </pre></td>
901
 
          </tr>
902
 
        
903
 
          
904
 
          
905
 
          <tr class="uncovered">
906
 
            <td><pre><a name="line142">142</a>           done += need_to_run</pre></td>
907
 
          </tr>
908
 
        
909
 
          
910
 
          
911
 
          <tr class="uncovered">
912
 
            <td><pre><a name="line143">143</a>           Djinn.log_debug(&quot;Done running #{need_to_run} trajectories, #{trajectories - done} to go&quot;)</pre></td>
913
 
          </tr>
914
 
        
915
 
          
916
 
          
917
 
          <tr class="uncovered">
918
 
            <td><pre><a name="line144">144</a>         }</pre></td>
919
 
          </tr>
920
 
        
921
 
          
922
 
          
923
 
          <tr class="uncovered">
924
 
            <td><pre><a name="line145">145</a>       }</pre></td>
925
 
          </tr>
926
 
        
927
 
          
928
 
          
929
 
          <tr class="uncovered">
930
 
            <td><pre><a name="line146">146</a>     }</pre></td>
 
582
            <td><pre><a name="line88">88</a>         trajectories = fin - start + 1 </pre></td>
 
583
          </tr>
 
584
        
 
585
          
 
586
          
 
587
          <tr class="uncovered">
 
588
            <td><pre><a name="line89">89</a> </pre></td>
 
589
          </tr>
 
590
        
 
591
          
 
592
          
 
593
          <tr class="uncovered">
 
594
            <td><pre><a name="line90">90</a>         if MULTICORE</pre></td>
 
595
          </tr>
 
596
        
 
597
          
 
598
          
 
599
          <tr class="uncovered">
 
600
            <td><pre><a name="line91">91</a>           cores = HelperFunctions.get_num_cpus()</pre></td>
 
601
          </tr>
 
602
        
 
603
          
 
604
          
 
605
          <tr class="uncovered">
 
606
            <td><pre><a name="line92">92</a>         else</pre></td>
 
607
          </tr>
 
608
        
 
609
          
 
610
          
 
611
          <tr class="uncovered">
 
612
            <td><pre><a name="line93">93</a>           cores = 1</pre></td>
 
613
          </tr>
 
614
        
 
615
          
 
616
          
 
617
          <tr class="uncovered">
 
618
            <td><pre><a name="line94">94</a>         end</pre></td>
 
619
          </tr>
 
620
        
 
621
          
 
622
          
 
623
          <tr class="uncovered">
 
624
            <td><pre><a name="line95">95</a> </pre></td>
 
625
          </tr>
 
626
        
 
627
          
 
628
          
 
629
          <tr class="uncovered">
 
630
            <td><pre><a name="line96">96</a>         done = 0</pre></td>
 
631
          </tr>
 
632
        
 
633
          
 
634
          
 
635
          <tr class="uncovered">
 
636
            <td><pre><a name="line97">97</a>         loop {</pre></td>
 
637
          </tr>
 
638
        
 
639
          
 
640
          
 
641
          <tr class="uncovered">
 
642
            <td><pre><a name="line98">98</a>           trajectories_left = trajectories - done</pre></td>
 
643
          </tr>
 
644
        
 
645
          
 
646
          
 
647
          <tr class="uncovered">
 
648
            <td><pre><a name="line99">99</a>           Djinn.log_debug(&quot;Need to run #{trajectories_left} more trajectories on #{cores} cores&quot;)</pre></td>
 
649
          </tr>
 
650
        
 
651
          
 
652
          
 
653
          <tr class="uncovered">
 
654
            <td><pre><a name="line100">100</a>           break if trajectories_left.zero?</pre></td>
 
655
          </tr>
 
656
        
 
657
          
 
658
          
 
659
          <tr class="uncovered">
 
660
            <td><pre><a name="line101">101</a>           need_to_run = [trajectories_left, cores].min</pre></td>
 
661
          </tr>
 
662
        
 
663
          
 
664
          
 
665
          <tr class="uncovered">
 
666
            <td><pre><a name="line102">102</a> </pre></td>
 
667
          </tr>
 
668
        
 
669
          
 
670
          
 
671
          <tr class="uncovered">
 
672
            <td><pre><a name="line103">103</a>           Djinn.log_debug(&quot;Running #{need_to_run} trajectories&quot;)</pre></td>
 
673
          </tr>
 
674
        
 
675
          
 
676
          
 
677
          <tr class="uncovered">
 
678
            <td><pre><a name="line104">104</a>           core_threads = []</pre></td>
 
679
          </tr>
 
680
        
 
681
          
 
682
          
 
683
          <tr class="uncovered">
 
684
            <td><pre><a name="line105">105</a>           current_times = []</pre></td>
 
685
          </tr>
 
686
        
 
687
          
 
688
          
 
689
          <tr class="uncovered">
 
690
            <td><pre><a name="line106">106</a>           need_to_run.times { |j|</pre></td>
 
691
          </tr>
 
692
        
 
693
          
 
694
          
 
695
          <tr class="uncovered">
 
696
            <td><pre><a name="line107">107</a>             core_threads &lt;&lt; Thread.new {</pre></td>
 
697
          </tr>
 
698
        
 
699
          
 
700
          
 
701
          <tr class="uncovered">
 
702
            <td><pre><a name="line108">108</a>               my_trajectory = start+done+j</pre></td>
 
703
          </tr>
 
704
        
 
705
          
 
706
          
 
707
          <tr class="uncovered">
 
708
            <td><pre><a name="line109">109</a>               Djinn.log_debug(&quot;Thread #{j} is running trajectory #{my_trajectory}&quot;)</pre></td>
 
709
          </tr>
 
710
        
 
711
          
 
712
          
 
713
          <tr class="uncovered">
 
714
            <td><pre><a name="line110">110</a>               output = File.expand_path(&quot;#{working_dir}/output-#{my_trajectory}&quot;)</pre></td>
 
715
          </tr>
 
716
        
 
717
          
 
718
          
 
719
          <tr class="uncovered">
 
720
            <td><pre><a name="line111">111</a> </pre></td>
 
721
          </tr>
 
722
        
 
723
          
 
724
          
 
725
          <tr class="uncovered">
 
726
            <td><pre><a name="line112">112</a>               # run the computation, remembering to place StochKit in the user's PATH</pre></td>
 
727
          </tr>
 
728
        
 
729
          
 
730
          
 
731
          <tr class="uncovered">
 
732
            <td><pre><a name="line113">113</a>               path = &quot;PATH=$PATH:#{SSA_HOME}&quot;</pre></td>
 
733
          </tr>
 
734
        
 
735
          
 
736
          
 
737
          <tr class="uncovered">
 
738
            <td><pre><a name="line114">114</a>               run_command = &quot;#{path} #{exec} #{input} #{output} #{my_trajectory} #{param_num}&quot;</pre></td>
 
739
          </tr>
 
740
        
 
741
          
 
742
          
 
743
          <tr class="uncovered">
 
744
            <td><pre><a name="line115">115</a> </pre></td>
 
745
          </tr>
 
746
        
 
747
          
 
748
          
 
749
          <tr class="uncovered">
 
750
            <td><pre><a name="line116">116</a>               start_compute = Time.now</pre></td>
 
751
          </tr>
 
752
        
 
753
          
 
754
          
 
755
          <tr class="uncovered">
 
756
            <td><pre><a name="line117">117</a>               Djinn.log_run(&quot;ssh -i #{ssh_key} -o StrictHostkeyChecking=no root@#{ip} '#{run_command}'&quot;)</pre></td>
 
757
          </tr>
 
758
        
 
759
          
 
760
          
 
761
          <tr class="uncovered">
 
762
            <td><pre><a name="line118">118</a>               end_compute = Time.now</pre></td>
 
763
          </tr>
 
764
        
 
765
          
 
766
          
 
767
          <tr class="uncovered">
 
768
            <td><pre><a name="line119">119</a>               c_time = end_compute - start_compute</pre></td>
 
769
          </tr>
 
770
        
 
771
          
 
772
          
 
773
          <tr class="uncovered">
 
774
            <td><pre><a name="line120">120</a>               total_compute_time += c_time</pre></td>
 
775
          </tr>
 
776
        
 
777
          
 
778
          
 
779
          <tr class="uncovered">
 
780
            <td><pre><a name="line121">121</a>               c_times &lt;&lt; c_time</pre></td>
 
781
          </tr>
 
782
        
 
783
          
 
784
          
 
785
          <tr class="uncovered">
 
786
            <td><pre><a name="line122">122</a> </pre></td>
 
787
          </tr>
 
788
        
 
789
          
 
790
          
 
791
          <tr class="uncovered">
 
792
            <td><pre><a name="line123">123</a>               # copy the output back to this box - in the future we can do merges here</pre></td>
 
793
          </tr>
 
794
        
 
795
          
 
796
          
 
797
          <tr class="uncovered">
 
798
            <td><pre><a name="line124">124</a>               # or in the future we can just have the node upload to s3</pre></td>
 
799
          </tr>
 
800
        
 
801
          
 
802
          
 
803
          <tr class="uncovered">
 
804
            <td><pre><a name="line125">125</a>               start_storage = Time.now</pre></td>
 
805
          </tr>
 
806
        
 
807
          
 
808
          
 
809
          <tr class="uncovered">
 
810
            <td><pre><a name="line126">126</a>               unless HelperFunctions.local_ip == ip</pre></td>
 
811
          </tr>
 
812
        
 
813
          
 
814
          
 
815
          <tr class="uncovered">
 
816
            <td><pre><a name="line127">127</a>                 remote_cp_command = &quot;scp -r -i #{ssh_key} -o StrictHostkeyChecking=no root@#{ip}:#{output} #{output}&quot;</pre></td>
 
817
          </tr>
 
818
        
 
819
          
 
820
          
 
821
          <tr class="uncovered">
 
822
            <td><pre><a name="line128">128</a>                 Djinn.log_run(remote_cp_command)</pre></td>
 
823
          </tr>
 
824
        
 
825
          
 
826
          
 
827
          <tr class="uncovered">
 
828
            <td><pre><a name="line129">129</a> </pre></td>
 
829
          </tr>
 
830
        
 
831
          
 
832
          
 
833
          <tr class="uncovered">
 
834
            <td><pre><a name="line130">130</a>               end</pre></td>
 
835
          </tr>
 
836
        
 
837
          
 
838
          
 
839
          <tr class="uncovered">
 
840
            <td><pre><a name="line131">131</a> </pre></td>
 
841
          </tr>
 
842
        
 
843
          
 
844
          
 
845
          <tr class="uncovered">
 
846
            <td><pre><a name="line132">132</a>               remote_location = &quot;#{job_data['@output']}/output-#{my_trajectory}&quot;</pre></td>
 
847
          </tr>
 
848
        
 
849
          
 
850
          
 
851
          <tr class="uncovered">
 
852
            <td><pre><a name="line133">133</a>               datastore.write_remote_file_from_local_file(remote_location, output)</pre></td>
 
853
          </tr>
 
854
        
 
855
          
 
856
          
 
857
          <tr class="uncovered">
 
858
            <td><pre><a name="line134">134</a>               end_storage = Time.now</pre></td>
 
859
          </tr>
 
860
        
 
861
          
 
862
          
 
863
          <tr class="uncovered">
 
864
            <td><pre><a name="line135">135</a>               s_time = end_storage - start_storage</pre></td>
 
865
          </tr>
 
866
        
 
867
          
 
868
          
 
869
          <tr class="uncovered">
 
870
            <td><pre><a name="line136">136</a>               total_storage_time += s_time</pre></td>
 
871
          </tr>
 
872
        
 
873
          
 
874
          
 
875
          <tr class="uncovered">
 
876
            <td><pre><a name="line137">137</a>               s_times &lt;&lt; s_time</pre></td>
 
877
          </tr>
 
878
        
 
879
          
 
880
          
 
881
          <tr class="uncovered">
 
882
            <td><pre><a name="line138">138</a> </pre></td>
 
883
          </tr>
 
884
        
 
885
          
 
886
          
 
887
          <tr class="uncovered">
 
888
            <td><pre><a name="line139">139</a>               node_times[i] += (c_time + s_time)</pre></td>
 
889
          </tr>
 
890
        
 
891
          
 
892
          
 
893
          <tr class="uncovered">
 
894
            <td><pre><a name="line140">140</a> </pre></td>
 
895
          </tr>
 
896
        
 
897
          
 
898
          
 
899
          <tr class="uncovered">
 
900
            <td><pre><a name="line141">141</a>               # remove our output - we can't want the disk to fill up</pre></td>
 
901
          </tr>
 
902
        
 
903
          
 
904
          
 
905
          <tr class="uncovered">
 
906
            <td><pre><a name="line142">142</a>               remove_cmd = &quot;rm -rf #{output}&quot;</pre></td>
 
907
          </tr>
 
908
        
 
909
          
 
910
          
 
911
          <tr class="uncovered">
 
912
            <td><pre><a name="line143">143</a>               Djinn.log_run(&quot;ssh -i #{ssh_key} -o StrictHostkeyChecking=no root@#{ip} '#{remove_cmd}'&quot;)</pre></td>
 
913
          </tr>
 
914
        
 
915
          
 
916
          
 
917
          <tr class="uncovered">
 
918
            <td><pre><a name="line144">144</a>               Djinn.log_run(remove_cmd)</pre></td>
 
919
          </tr>
 
920
        
 
921
          
 
922
          
 
923
          <tr class="uncovered">
 
924
            <td><pre><a name="line145">145</a>             }</pre></td>
 
925
          </tr>
 
926
        
 
927
          
 
928
          
 
929
          <tr class="uncovered">
 
930
            <td><pre><a name="line146">146</a>           }</pre></td>
931
931
          </tr>
932
932
        
933
933
          
939
939
          
940
940
          
941
941
          <tr class="uncovered">
942
 
            <td><pre><a name="line148">148</a>     Djinn.log_debug(&quot;ssa - joining threads&quot;)</pre></td>
 
942
            <td><pre><a name="line148">148</a>           core_threads.each { |c| c.join }</pre></td>
943
943
          </tr>
944
944
        
945
945
          
951
951
          
952
952
          
953
953
          <tr class="uncovered">
954
 
            <td><pre><a name="line150">150</a>     threads.each { |t| t.join }</pre></td>
955
 
          </tr>
956
 
        
957
 
          
958
 
          
959
 
          <tr class="uncovered">
960
 
            <td><pre><a name="line151">151</a> </pre></td>
961
 
          </tr>
962
 
        
963
 
          
964
 
          
965
 
          <tr class="uncovered">
966
 
            <td><pre><a name="line152">152</a>     # clean up after ourselves</pre></td>
967
 
          </tr>
968
 
        
969
 
          
970
 
          
971
 
          <tr class="uncovered">
972
 
            <td><pre><a name="line153">153</a>     Djinn.log_run(&quot;rm -rf #{working_dir}&quot;)</pre></td>
973
 
          </tr>
974
 
        
975
 
          
976
 
          
977
 
          <tr class="uncovered">
978
 
            <td><pre><a name="line154">154</a> </pre></td>
979
 
          </tr>
980
 
        
981
 
          
982
 
          
983
 
          <tr class="uncovered">
984
 
            <td><pre><a name="line155">155</a>     fin_time = Time.now</pre></td>
985
 
          </tr>
986
 
        
987
 
          
988
 
          
989
 
          <tr class="uncovered">
990
 
            <td><pre><a name="line156">156</a>     total = fin_time - start_time</pre></td>
991
 
          </tr>
992
 
        
993
 
          
994
 
          
995
 
          <tr class="uncovered">
996
 
            <td><pre><a name="line157">157</a>     total_slowest_path = node_times.max</pre></td>
997
 
          </tr>
998
 
        
999
 
          
1000
 
          
1001
 
          <tr class="uncovered">
1002
 
            <td><pre><a name="line158">158</a>     total_overhead_time = total - total_slowest_path</pre></td>
 
954
            <td><pre><a name="line150">150</a>           done += need_to_run</pre></td>
 
955
          </tr>
 
956
        
 
957
          
 
958
          
 
959
          <tr class="uncovered">
 
960
            <td><pre><a name="line151">151</a>           Djinn.log_debug(&quot;Done running #{need_to_run} trajectories, #{trajectories - done} to go&quot;)</pre></td>
 
961
          </tr>
 
962
        
 
963
          
 
964
          
 
965
          <tr class="uncovered">
 
966
            <td><pre><a name="line152">152</a>         }</pre></td>
 
967
          </tr>
 
968
        
 
969
          
 
970
          
 
971
          <tr class="uncovered">
 
972
            <td><pre><a name="line153">153</a>       }</pre></td>
 
973
          </tr>
 
974
        
 
975
          
 
976
          
 
977
          <tr class="uncovered">
 
978
            <td><pre><a name="line154">154</a>     }</pre></td>
 
979
          </tr>
 
980
        
 
981
          
 
982
          
 
983
          <tr class="uncovered">
 
984
            <td><pre><a name="line155">155</a> </pre></td>
 
985
          </tr>
 
986
        
 
987
          
 
988
          
 
989
          <tr class="uncovered">
 
990
            <td><pre><a name="line156">156</a>     Djinn.log_debug(&quot;ssa - joining threads&quot;)</pre></td>
 
991
          </tr>
 
992
        
 
993
          
 
994
          
 
995
          <tr class="uncovered">
 
996
            <td><pre><a name="line157">157</a> </pre></td>
 
997
          </tr>
 
998
        
 
999
          
 
1000
          
 
1001
          <tr class="uncovered">
 
1002
            <td><pre><a name="line158">158</a>     threads.each { |t| t.join }</pre></td>
1003
1003
          </tr>
1004
1004
        
1005
1005
          
1011
1011
          
1012
1012
          
1013
1013
          <tr class="uncovered">
1014
 
            <td><pre><a name="line160">160</a>     timing_info = &lt;&lt;BAZ</pre></td>
1015
 
          </tr>
1016
 
        
1017
 
          
1018
 
          
1019
 
          <tr class="uncovered">
1020
 
            <td><pre><a name="line161">161</a>     TIMING: total execution time is #{total} seconds.</pre></td>
1021
 
          </tr>
1022
 
        
1023
 
          
1024
 
          
1025
 
          <tr class="uncovered">
1026
 
            <td><pre><a name="line162">162</a>     TIMING: total compute time is #{total_compute_time} seconds.</pre></td>
1027
 
          </tr>
1028
 
        
1029
 
          
1030
 
          
1031
 
          <tr class="uncovered">
1032
 
            <td><pre><a name="line163">163</a>     TIMING: total storage time is #{total_storage_time} seconds.</pre></td>
1033
 
          </tr>
1034
 
        
1035
 
          
1036
 
          
1037
 
          <tr class="uncovered">
1038
 
            <td><pre><a name="line164">164</a>     TIMING: slowest path time is #{total_slowest_path} seconds.</pre></td>
1039
 
          </tr>
1040
 
        
1041
 
          
1042
 
          
1043
 
          <tr class="uncovered">
1044
 
            <td><pre><a name="line165">165</a>     TIMING: overhead time is #{total_overhead_time} seconds.</pre></td>
1045
 
          </tr>
1046
 
        
1047
 
          
1048
 
          
1049
 
          <tr class="uncovered">
1050
 
            <td><pre><a name="line166">166</a>     TIMING: average compute time is #{average(c_times)} seconds.</pre></td>
1051
 
          </tr>
1052
 
        
1053
 
          
1054
 
          
1055
 
          <tr class="uncovered">
1056
 
            <td><pre><a name="line167">167</a>     TIMING: stddev compute time is #{standard_deviation(c_times)} seconds.</pre></td>
1057
 
          </tr>
1058
 
        
1059
 
          
1060
 
          
1061
 
          <tr class="uncovered">
1062
 
            <td><pre><a name="line168">168</a>     TIMING: average storage time is #{average(s_times)} seconds.</pre></td>
1063
 
          </tr>
1064
 
        
1065
 
          
1066
 
          
1067
 
          <tr class="uncovered">
1068
 
            <td><pre><a name="line169">169</a>     TIMING: stddev storage time is #{standard_deviation(s_times)} seconds.</pre></td>
1069
 
          </tr>
1070
 
        
1071
 
          
1072
 
          
1073
 
          <tr class="uncovered">
1074
 
            <td><pre><a name="line170">170</a>     RAW_DATA: node times are: [#{node_times.join(', ')}]</pre></td>
1075
 
          </tr>
1076
 
        
1077
 
          
1078
 
          
1079
 
          <tr class="uncovered">
1080
 
            <td><pre><a name="line171">171</a>     RAW_DATA: compute times are: [#{c_times.join(', ')}]</pre></td>
1081
 
          </tr>
1082
 
        
1083
 
          
1084
 
          
1085
 
          <tr class="uncovered">
1086
 
            <td><pre><a name="line172">172</a>     RAW_DATA: storage times are: [#{s_times.join(', ')}]</pre></td>
1087
 
          </tr>
1088
 
        
1089
 
          
1090
 
          
1091
 
          <tr class="uncovered">
1092
 
            <td><pre><a name="line173">173</a> BAZ</pre></td>
1093
 
          </tr>
1094
 
        
1095
 
          
1096
 
          
1097
 
          <tr class="uncovered">
1098
 
            <td><pre><a name="line174">174</a> </pre></td>
1099
 
          </tr>
1100
 
        
1101
 
          
1102
 
          
1103
 
          <tr class="uncovered">
1104
 
            <td><pre><a name="line175">175</a>     Djinn.log_debug(timing_info)</pre></td>
1105
 
          </tr>
1106
 
        
1107
 
          
1108
 
          
1109
 
          <tr class="uncovered">
1110
 
            <td><pre><a name="line176">176</a> </pre></td>
1111
 
          </tr>
1112
 
        
1113
 
          
1114
 
          
1115
 
          <tr class="uncovered">
1116
 
            <td><pre><a name="line177">177</a>     remote_location = &quot;#{job_data['@output']}/timing_info.txt&quot;</pre></td>
1117
 
          </tr>
1118
 
        
1119
 
          
1120
 
          
1121
 
          <tr class="uncovered">
1122
 
            <td><pre><a name="line178">178</a>     Repo.set_output(remote_location, timing_info, storage, creds, NOT_A_FILE)</pre></td>
1123
 
          </tr>
1124
 
        
1125
 
          
1126
 
          
1127
 
          <tr class="uncovered">
1128
 
            <td><pre><a name="line179">179</a> </pre></td>
1129
 
          </tr>
1130
 
        
1131
 
          
1132
 
          
1133
 
          <tr class="uncovered">
1134
 
            <td><pre><a name="line180">180</a>     remove_lock_file(job_data)</pre></td>
1135
 
          </tr>
1136
 
        
1137
 
          
1138
 
          
1139
 
          <tr class="uncovered">
1140
 
            <td><pre><a name="line181">181</a>   }</pre></td>
 
1014
            <td><pre><a name="line160">160</a>     # clean up after ourselves</pre></td>
 
1015
          </tr>
 
1016
        
 
1017
          
 
1018
          
 
1019
          <tr class="uncovered">
 
1020
            <td><pre><a name="line161">161</a>     Djinn.log_run(&quot;rm -rf #{working_dir}&quot;)</pre></td>
 
1021
          </tr>
 
1022
        
 
1023
          
 
1024
          
 
1025
          <tr class="uncovered">
 
1026
            <td><pre><a name="line162">162</a> </pre></td>
 
1027
          </tr>
 
1028
        
 
1029
          
 
1030
          
 
1031
          <tr class="uncovered">
 
1032
            <td><pre><a name="line163">163</a>     fin_time = Time.now</pre></td>
 
1033
          </tr>
 
1034
        
 
1035
          
 
1036
          
 
1037
          <tr class="uncovered">
 
1038
            <td><pre><a name="line164">164</a>     total = fin_time - start_time</pre></td>
 
1039
          </tr>
 
1040
        
 
1041
          
 
1042
          
 
1043
          <tr class="uncovered">
 
1044
            <td><pre><a name="line165">165</a>     total_slowest_path = node_times.max</pre></td>
 
1045
          </tr>
 
1046
        
 
1047
          
 
1048
          
 
1049
          <tr class="uncovered">
 
1050
            <td><pre><a name="line166">166</a>     total_overhead_time = total - total_slowest_path</pre></td>
 
1051
          </tr>
 
1052
        
 
1053
          
 
1054
          
 
1055
          <tr class="uncovered">
 
1056
            <td><pre><a name="line167">167</a> </pre></td>
 
1057
          </tr>
 
1058
        
 
1059
          
 
1060
          
 
1061
          <tr class="uncovered">
 
1062
            <td><pre><a name="line168">168</a>     timing_info = &lt;&lt;BAZ</pre></td>
 
1063
          </tr>
 
1064
        
 
1065
          
 
1066
          
 
1067
          <tr class="uncovered">
 
1068
            <td><pre><a name="line169">169</a>     TIMING: total execution time is #{total} seconds.</pre></td>
 
1069
          </tr>
 
1070
        
 
1071
          
 
1072
          
 
1073
          <tr class="uncovered">
 
1074
            <td><pre><a name="line170">170</a>     TIMING: total compute time is #{total_compute_time} seconds.</pre></td>
 
1075
          </tr>
 
1076
        
 
1077
          
 
1078
          
 
1079
          <tr class="uncovered">
 
1080
            <td><pre><a name="line171">171</a>     TIMING: total storage time is #{total_storage_time} seconds.</pre></td>
 
1081
          </tr>
 
1082
        
 
1083
          
 
1084
          
 
1085
          <tr class="uncovered">
 
1086
            <td><pre><a name="line172">172</a>     TIMING: slowest path time is #{total_slowest_path} seconds.</pre></td>
 
1087
          </tr>
 
1088
        
 
1089
          
 
1090
          
 
1091
          <tr class="uncovered">
 
1092
            <td><pre><a name="line173">173</a>     TIMING: overhead time is #{total_overhead_time} seconds.</pre></td>
 
1093
          </tr>
 
1094
        
 
1095
          
 
1096
          
 
1097
          <tr class="uncovered">
 
1098
            <td><pre><a name="line174">174</a>     TIMING: average compute time is #{average(c_times)} seconds.</pre></td>
 
1099
          </tr>
 
1100
        
 
1101
          
 
1102
          
 
1103
          <tr class="uncovered">
 
1104
            <td><pre><a name="line175">175</a>     TIMING: stddev compute time is #{standard_deviation(c_times)} seconds.</pre></td>
 
1105
          </tr>
 
1106
        
 
1107
          
 
1108
          
 
1109
          <tr class="uncovered">
 
1110
            <td><pre><a name="line176">176</a>     TIMING: average storage time is #{average(s_times)} seconds.</pre></td>
 
1111
          </tr>
 
1112
        
 
1113
          
 
1114
          
 
1115
          <tr class="uncovered">
 
1116
            <td><pre><a name="line177">177</a>     TIMING: stddev storage time is #{standard_deviation(s_times)} seconds.</pre></td>
 
1117
          </tr>
 
1118
        
 
1119
          
 
1120
          
 
1121
          <tr class="uncovered">
 
1122
            <td><pre><a name="line178">178</a>     RAW_DATA: node times are: [#{node_times.join(', ')}]</pre></td>
 
1123
          </tr>
 
1124
        
 
1125
          
 
1126
          
 
1127
          <tr class="uncovered">
 
1128
            <td><pre><a name="line179">179</a>     RAW_DATA: compute times are: [#{c_times.join(', ')}]</pre></td>
 
1129
          </tr>
 
1130
        
 
1131
          
 
1132
          
 
1133
          <tr class="uncovered">
 
1134
            <td><pre><a name="line180">180</a>     RAW_DATA: storage times are: [#{s_times.join(', ')}]</pre></td>
 
1135
          </tr>
 
1136
        
 
1137
          
 
1138
          
 
1139
          <tr class="uncovered">
 
1140
            <td><pre><a name="line181">181</a> BAZ</pre></td>
1141
1141
          </tr>
1142
1142
        
1143
1143
          
1149
1149
          
1150
1150
          
1151
1151
          <tr class="uncovered">
1152
 
            <td><pre><a name="line183">183</a>   return &quot;OK&quot;</pre></td>
1153
 
          </tr>
1154
 
        
1155
 
          
1156
 
          
1157
 
          <tr class="uncovered">
1158
 
            <td><pre><a name="line184">184</a> end</pre></td>
1159
 
          </tr>
1160
 
        
1161
 
          
1162
 
          
1163
 
          <tr class="inferred">
1164
 
            <td><pre><a name="line185">185</a> </pre></td>
1165
 
          </tr>
1166
 
        
1167
 
          
1168
 
          
1169
 
          <tr class="marked">
1170
 
            <td><pre><a name="line186">186</a> private</pre></td>
1171
 
          </tr>
1172
 
        
1173
 
          
1174
 
          
1175
 
          <tr class="inferred">
 
1152
            <td><pre><a name="line183">183</a>     Djinn.log_debug(timing_info)</pre></td>
 
1153
          </tr>
 
1154
        
 
1155
          
 
1156
          
 
1157
          <tr class="uncovered">
 
1158
            <td><pre><a name="line184">184</a> </pre></td>
 
1159
          </tr>
 
1160
        
 
1161
          
 
1162
          
 
1163
          <tr class="uncovered">
 
1164
            <td><pre><a name="line185">185</a>     remote_location = &quot;#{job_data['@output']}/timing_info.txt&quot;</pre></td>
 
1165
          </tr>
 
1166
        
 
1167
          
 
1168
          
 
1169
          <tr class="uncovered">
 
1170
            <td><pre><a name="line186">186</a>     datastore.write_remote_file_from_string(remote_location, timing_info)</pre></td>
 
1171
          </tr>
 
1172
        
 
1173
          
 
1174
          
 
1175
          <tr class="uncovered">
1176
1176
            <td><pre><a name="line187">187</a> </pre></td>
1177
1177
          </tr>
1178
1178
        
1179
1179
          
1180
1180
          
1181
 
          <tr class="marked">
1182
 
            <td><pre><a name="line188">188</a> def neptune_ssa_get_output(job_data)</pre></td>
1183
 
          </tr>
1184
 
        
1185
 
          
1186
 
          
1187
 
          <tr class="uncovered">
1188
 
            <td><pre><a name="line189">189</a>   return SSA_HOME</pre></td>
1189
 
          </tr>
1190
 
        
1191
 
          
1192
 
          
1193
 
          <tr class="uncovered">
1194
 
            <td><pre><a name="line190">190</a> end</pre></td>
 
1181
          <tr class="uncovered">
 
1182
            <td><pre><a name="line188">188</a>     remove_lock_file(job_data)</pre></td>
 
1183
          </tr>
 
1184
        
 
1185
          
 
1186
          
 
1187
          <tr class="uncovered">
 
1188
            <td><pre><a name="line189">189</a>   }</pre></td>
 
1189
          </tr>
 
1190
        
 
1191
          
 
1192
          
 
1193
          <tr class="uncovered">
 
1194
            <td><pre><a name="line190">190</a> </pre></td>
 
1195
          </tr>
 
1196
        
 
1197
          
 
1198
          
 
1199
          <tr class="uncovered">
 
1200
            <td><pre><a name="line191">191</a>   return &quot;OK&quot;</pre></td>
 
1201
          </tr>
 
1202
        
 
1203
          
 
1204
          
 
1205
          <tr class="uncovered">
 
1206
            <td><pre><a name="line192">192</a> end</pre></td>
1195
1207
          </tr>
1196
1208
        
1197
1209
          
1198
1210
          
1199
1211
          <tr class="inferred">
1200
 
            <td><pre><a name="line191">191</a> </pre></td>
 
1212
            <td><pre><a name="line193">193</a> </pre></td>
1201
1213
          </tr>
1202
1214
        
1203
1215
          
1204
1216
          
1205
1217
          <tr class="marked">
1206
 
            <td><pre><a name="line192">192</a> def start_ssa_master()</pre></td>
1207
 
          </tr>
1208
 
        
1209
 
          
1210
 
          
1211
 
          <tr class="uncovered">
1212
 
            <td><pre><a name="line193">193</a>   Djinn.log_debug(&quot;#{my_node.private_ip} is starting ssa master&quot;)</pre></td>
1213
 
          </tr>
1214
 
        
1215
 
          
1216
 
          
1217
 
          <tr class="uncovered">
1218
 
            <td><pre><a name="line194">194</a> end</pre></td>
 
1218
            <td><pre><a name="line194">194</a> private</pre></td>
1219
1219
          </tr>
1220
1220
        
1221
1221
          
1227
1227
          
1228
1228
          
1229
1229
          <tr class="marked">
1230
 
            <td><pre><a name="line196">196</a> def start_ssa_slave()</pre></td>
 
1230
            <td><pre><a name="line196">196</a> def neptune_ssa_get_output(job_data)</pre></td>
1231
1231
          </tr>
1232
1232
        
1233
1233
          
1234
1234
          
1235
1235
          <tr class="uncovered">
1236
 
            <td><pre><a name="line197">197</a>   Djinn.log_debug(&quot;#{my_node.private_ip} is starting ssa slave&quot;)</pre></td>
 
1236
            <td><pre><a name="line197">197</a>   return SSA_HOME</pre></td>
1237
1237
          </tr>
1238
1238
        
1239
1239
          
1251
1251
          
1252
1252
          
1253
1253
          <tr class="marked">
1254
 
            <td><pre><a name="line200">200</a> def stop_ssa_master()</pre></td>
 
1254
            <td><pre><a name="line200">200</a> def start_ssa_master()</pre></td>
1255
1255
          </tr>
1256
1256
        
1257
1257
          
1258
1258
          
1259
1259
          <tr class="uncovered">
1260
 
            <td><pre><a name="line201">201</a>   Djinn.log_debug(&quot;#{my_node.private_ip} is stopping ssa master&quot;)</pre></td>
 
1260
            <td><pre><a name="line201">201</a>   Djinn.log_debug(&quot;#{my_node.private_ip} is starting ssa master&quot;)</pre></td>
1261
1261
          </tr>
1262
1262
        
1263
1263
          
1275
1275
          
1276
1276
          
1277
1277
          <tr class="marked">
1278
 
            <td><pre><a name="line204">204</a> def stop_ssa_slave()</pre></td>
 
1278
            <td><pre><a name="line204">204</a> def start_ssa_slave()</pre></td>
1279
1279
          </tr>
1280
1280
        
1281
1281
          
1282
1282
          
1283
1283
          <tr class="uncovered">
1284
 
            <td><pre><a name="line205">205</a>   Djinn.log_debug(&quot;#{my_node.private_ip} is stopping ssa slave&quot;)</pre></td>
 
1284
            <td><pre><a name="line205">205</a>   Djinn.log_debug(&quot;#{my_node.private_ip} is starting ssa slave&quot;)</pre></td>
1285
1285
          </tr>
1286
1286
        
1287
1287
          
1299
1299
          
1300
1300
          
1301
1301
          <tr class="marked">
1302
 
            <td><pre><a name="line208">208</a> def neptune_get_ssa_seed_vals(num_vals)</pre></td>
1303
 
          </tr>
1304
 
        
1305
 
          
1306
 
          
1307
 
          <tr class="uncovered">
1308
 
            <td><pre><a name="line209">209</a>   random_numbers = []</pre></td>
1309
 
          </tr>
1310
 
        
1311
 
          
1312
 
          
1313
 
          <tr class="uncovered">
1314
 
            <td><pre><a name="line210">210</a>   loop {</pre></td>
1315
 
          </tr>
1316
 
        
1317
 
          
1318
 
          
1319
 
          <tr class="uncovered">
1320
 
            <td><pre><a name="line211">211</a>     possible_rand = rand(32000)</pre></td>
1321
 
          </tr>
1322
 
        
1323
 
          
1324
 
          
1325
 
          <tr class="uncovered">
1326
 
            <td><pre><a name="line212">212</a>     unless random_numbers.include?(possible_rand)</pre></td>
1327
 
          </tr>
1328
 
        
1329
 
          
1330
 
          
1331
 
          <tr class="uncovered">
1332
 
            <td><pre><a name="line213">213</a>       random_numbers &lt;&lt; possible_rand</pre></td>
1333
 
          </tr>
1334
 
        
1335
 
          
1336
 
          
1337
 
          <tr class="uncovered">
1338
 
            <td><pre><a name="line214">214</a>     end</pre></td>
1339
 
          </tr>
1340
 
        
1341
 
          
1342
 
          
1343
 
          <tr class="uncovered">
1344
 
            <td><pre><a name="line215">215</a>     break if num_vals == random_numbers.length</pre></td>
1345
 
          </tr>
1346
 
        
1347
 
          
1348
 
          
1349
 
          <tr class="uncovered">
1350
 
            <td><pre><a name="line216">216</a>   }</pre></td>
1351
 
          </tr>
1352
 
        
1353
 
          
1354
 
          
1355
 
          <tr class="uncovered">
1356
 
            <td><pre><a name="line217">217</a> </pre></td>
1357
 
          </tr>
1358
 
        
1359
 
          
1360
 
          
1361
 
          <tr class="uncovered">
1362
 
            <td><pre><a name="line218">218</a>   return random_numbers</pre></td>
1363
 
          </tr>
1364
 
        
1365
 
          
1366
 
          
1367
 
          <tr class="uncovered">
1368
 
            <td><pre><a name="line219">219</a> end</pre></td>
1369
 
          </tr>
1370
 
        
1371
 
          
1372
 
          
1373
 
          <tr class="inferred">
1374
 
            <td><pre><a name="line220">220</a> </pre></td>
1375
 
          </tr>
1376
 
        
1377
 
          
1378
 
          
1379
 
          <tr class="marked">
1380
 
            <td><pre><a name="line221">221</a> def neptune_get_ssa_num_simulations(nodes, job_data)</pre></td>
1381
 
          </tr>
1382
 
        
1383
 
          
1384
 
          
1385
 
          <tr class="uncovered">
1386
 
            <td><pre><a name="line222">222</a>   num_nodes = nodes.length</pre></td>
1387
 
          </tr>
1388
 
        
1389
 
          
1390
 
          
1391
 
          <tr class="uncovered">
1392
 
            <td><pre><a name="line223">223</a>   num_sims = job_data[&quot;@trajectories&quot;] || job_data[&quot;@simulations&quot;]</pre></td>
1393
 
          </tr>
1394
 
        
1395
 
          
1396
 
          
1397
 
          <tr class="uncovered">
1398
 
            <td><pre><a name="line224">224</a>   sims_per_node = num_sims / num_nodes</pre></td>
 
1302
            <td><pre><a name="line208">208</a> def stop_ssa_master()</pre></td>
 
1303
          </tr>
 
1304
        
 
1305
          
 
1306
          
 
1307
          <tr class="uncovered">
 
1308
            <td><pre><a name="line209">209</a>   Djinn.log_debug(&quot;#{my_node.private_ip} is stopping ssa master&quot;)</pre></td>
 
1309
          </tr>
 
1310
        
 
1311
          
 
1312
          
 
1313
          <tr class="uncovered">
 
1314
            <td><pre><a name="line210">210</a> end</pre></td>
 
1315
          </tr>
 
1316
        
 
1317
          
 
1318
          
 
1319
          <tr class="inferred">
 
1320
            <td><pre><a name="line211">211</a> </pre></td>
 
1321
          </tr>
 
1322
        
 
1323
          
 
1324
          
 
1325
          <tr class="marked">
 
1326
            <td><pre><a name="line212">212</a> def stop_ssa_slave()</pre></td>
 
1327
          </tr>
 
1328
        
 
1329
          
 
1330
          
 
1331
          <tr class="uncovered">
 
1332
            <td><pre><a name="line213">213</a>   Djinn.log_debug(&quot;#{my_node.private_ip} is stopping ssa slave&quot;)</pre></td>
 
1333
          </tr>
 
1334
        
 
1335
          
 
1336
          
 
1337
          <tr class="uncovered">
 
1338
            <td><pre><a name="line214">214</a> end</pre></td>
 
1339
          </tr>
 
1340
        
 
1341
          
 
1342
          
 
1343
          <tr class="inferred">
 
1344
            <td><pre><a name="line215">215</a> </pre></td>
 
1345
          </tr>
 
1346
        
 
1347
          
 
1348
          
 
1349
          <tr class="marked">
 
1350
            <td><pre><a name="line216">216</a> def neptune_get_ssa_seed_vals(num_vals)</pre></td>
 
1351
          </tr>
 
1352
        
 
1353
          
 
1354
          
 
1355
          <tr class="uncovered">
 
1356
            <td><pre><a name="line217">217</a>   random_numbers = []</pre></td>
 
1357
          </tr>
 
1358
        
 
1359
          
 
1360
          
 
1361
          <tr class="uncovered">
 
1362
            <td><pre><a name="line218">218</a>   loop {</pre></td>
 
1363
          </tr>
 
1364
        
 
1365
          
 
1366
          
 
1367
          <tr class="uncovered">
 
1368
            <td><pre><a name="line219">219</a>     possible_rand = rand(32000)</pre></td>
 
1369
          </tr>
 
1370
        
 
1371
          
 
1372
          
 
1373
          <tr class="uncovered">
 
1374
            <td><pre><a name="line220">220</a>     unless random_numbers.include?(possible_rand)</pre></td>
 
1375
          </tr>
 
1376
        
 
1377
          
 
1378
          
 
1379
          <tr class="uncovered">
 
1380
            <td><pre><a name="line221">221</a>       random_numbers &lt;&lt; possible_rand</pre></td>
 
1381
          </tr>
 
1382
        
 
1383
          
 
1384
          
 
1385
          <tr class="uncovered">
 
1386
            <td><pre><a name="line222">222</a>     end</pre></td>
 
1387
          </tr>
 
1388
        
 
1389
          
 
1390
          
 
1391
          <tr class="uncovered">
 
1392
            <td><pre><a name="line223">223</a>     break if num_vals == random_numbers.length</pre></td>
 
1393
          </tr>
 
1394
        
 
1395
          
 
1396
          
 
1397
          <tr class="uncovered">
 
1398
            <td><pre><a name="line224">224</a>   }</pre></td>
1399
1399
          </tr>
1400
1400
        
1401
1401
          
1407
1407
          
1408
1408
          
1409
1409
          <tr class="uncovered">
1410
 
            <td><pre><a name="line226">226</a>   Djinn.log_debug(&quot;num nodes = #{num_nodes}&quot;)</pre></td>
1411
 
          </tr>
1412
 
        
1413
 
          
1414
 
          
1415
 
          <tr class="uncovered">
1416
 
            <td><pre><a name="line227">227</a>   Djinn.log_debug(&quot;num_sims = #{num_sims}&quot;)</pre></td>
1417
 
          </tr>
1418
 
        
1419
 
          
1420
 
          
1421
 
          <tr class="uncovered">
1422
 
            <td><pre><a name="line228">228</a>   Djinn.log_debug(&quot;sims_per_node = #{sims_per_node}&quot;)</pre></td>
1423
 
          </tr>
1424
 
        
1425
 
          
1426
 
          
1427
 
          <tr class="uncovered">
1428
 
            <td><pre><a name="line229">229</a> </pre></td>
1429
 
          </tr>
1430
 
        
1431
 
          
1432
 
          
1433
 
          <tr class="uncovered">
1434
 
            <td><pre><a name="line230">230</a>   # set up how many simulations each node</pre></td>
1435
 
          </tr>
1436
 
        
1437
 
          
1438
 
          
1439
 
          <tr class="uncovered">
1440
 
            <td><pre><a name="line231">231</a>   # should run by divying it up equally</pre></td>
1441
 
          </tr>
1442
 
        
1443
 
          
1444
 
          
1445
 
          <tr class="uncovered">
1446
 
            <td><pre><a name="line232">232</a>   # any remainder can be assigned to an</pre></td>
1447
 
          </tr>
1448
 
        
1449
 
          
1450
 
          
1451
 
          <tr class="uncovered">
1452
 
            <td><pre><a name="line233">233</a>   # arbitrary node</pre></td>
1453
 
          </tr>
1454
 
        
1455
 
          
1456
 
          
1457
 
          <tr class="uncovered">
1458
 
            <td><pre><a name="line234">234</a> </pre></td>
1459
 
          </tr>
1460
 
        
1461
 
          
1462
 
          
1463
 
          <tr class="uncovered">
1464
 
            <td><pre><a name="line235">235</a>   sims = [sims_per_node] * num_nodes</pre></td>
1465
 
          </tr>
1466
 
        
1467
 
          
1468
 
          
1469
 
          <tr class="uncovered">
1470
 
            <td><pre><a name="line236">236</a>   remainder = num_sims % num_nodes</pre></td>
1471
 
          </tr>
1472
 
        
1473
 
          
1474
 
          
1475
 
          <tr class="uncovered">
1476
 
            <td><pre><a name="line237">237</a>   sims[-1] += remainder</pre></td>
1477
 
          </tr>
1478
 
        
1479
 
          
1480
 
          
1481
 
          <tr class="uncovered">
1482
 
            <td><pre><a name="line238">238</a> </pre></td>
1483
 
          </tr>
1484
 
        
1485
 
          
1486
 
          
1487
 
          <tr class="uncovered">
1488
 
            <td><pre><a name="line239">239</a>   Djinn.log_debug(&quot;sims = #{sims.join(', ')}&quot;)</pre></td>
1489
 
          </tr>
1490
 
        
1491
 
          
1492
 
          
1493
 
          <tr class="uncovered">
1494
 
            <td><pre><a name="line240">240</a>   Djinn.log_debug(&quot;remainder = #{remainder}&quot;)</pre></td>
1495
 
          </tr>
1496
 
        
1497
 
          
1498
 
          
1499
 
          <tr class="uncovered">
1500
 
            <td><pre><a name="line241">241</a> </pre></td>
1501
 
          </tr>
1502
 
        
1503
 
          
1504
 
          
1505
 
          <tr class="uncovered">
1506
 
            <td><pre><a name="line242">242</a>   return sims</pre></td>
1507
 
          </tr>
1508
 
        
1509
 
          
1510
 
          
1511
 
          <tr class="uncovered">
1512
 
            <td><pre><a name="line243">243</a> end</pre></td>
1513
 
          </tr>
1514
 
        
1515
 
          
1516
 
          
1517
 
          <tr class="inferred">
1518
 
            <td><pre><a name="line244">244</a> </pre></td>
1519
 
          </tr>
1520
 
        
1521
 
          
1522
 
          
1523
 
          <tr class="marked">
1524
 
            <td><pre><a name="line245">245</a> def average(population)</pre></td>
1525
 
          </tr>
1526
 
        
1527
 
          
1528
 
          
1529
 
          <tr class="uncovered">
1530
 
            <td><pre><a name="line246">246</a>   total = 0.0</pre></td>
1531
 
          </tr>
1532
 
        
1533
 
          
1534
 
          
1535
 
          <tr class="uncovered">
1536
 
            <td><pre><a name="line247">247</a>   n = 0</pre></td>
1537
 
          </tr>
1538
 
        
1539
 
          
1540
 
          
1541
 
          <tr class="uncovered">
1542
 
            <td><pre><a name="line248">248</a> </pre></td>
1543
 
          </tr>
1544
 
        
1545
 
          
1546
 
          
1547
 
          <tr class="uncovered">
1548
 
            <td><pre><a name="line249">249</a>   population.each { |val|</pre></td>
1549
 
          </tr>
1550
 
        
1551
 
          
1552
 
          
1553
 
          <tr class="uncovered">
1554
 
            <td><pre><a name="line250">250</a>     total += val</pre></td>
1555
 
          </tr>
1556
 
        
1557
 
          
1558
 
          
1559
 
          <tr class="uncovered">
1560
 
            <td><pre><a name="line251">251</a>     n += 1</pre></td>
1561
 
          </tr>
1562
 
        
1563
 
          
1564
 
          
1565
 
          <tr class="uncovered">
1566
 
            <td><pre><a name="line252">252</a>   }</pre></td>
1567
 
          </tr>
1568
 
        
1569
 
          
1570
 
          
1571
 
          <tr class="uncovered">
1572
 
            <td><pre><a name="line253">253</a> </pre></td>
1573
 
          </tr>
1574
 
        
1575
 
          
1576
 
          
1577
 
          <tr class="uncovered">
1578
 
            <td><pre><a name="line254">254</a>   return total / n</pre></td>
1579
 
          </tr>
1580
 
        
1581
 
          
1582
 
          
1583
 
          <tr class="uncovered">
1584
 
            <td><pre><a name="line255">255</a> end</pre></td>
1585
 
          </tr>
1586
 
        
1587
 
          
1588
 
          
1589
 
          <tr class="inferred">
 
1410
            <td><pre><a name="line226">226</a>   return random_numbers</pre></td>
 
1411
          </tr>
 
1412
        
 
1413
          
 
1414
          
 
1415
          <tr class="uncovered">
 
1416
            <td><pre><a name="line227">227</a> end</pre></td>
 
1417
          </tr>
 
1418
        
 
1419
          
 
1420
          
 
1421
          <tr class="inferred">
 
1422
            <td><pre><a name="line228">228</a> </pre></td>
 
1423
          </tr>
 
1424
        
 
1425
          
 
1426
          
 
1427
          <tr class="marked">
 
1428
            <td><pre><a name="line229">229</a> def neptune_get_ssa_num_simulations(nodes, job_data)</pre></td>
 
1429
          </tr>
 
1430
        
 
1431
          
 
1432
          
 
1433
          <tr class="uncovered">
 
1434
            <td><pre><a name="line230">230</a>   num_nodes = nodes.length</pre></td>
 
1435
          </tr>
 
1436
        
 
1437
          
 
1438
          
 
1439
          <tr class="uncovered">
 
1440
            <td><pre><a name="line231">231</a>   num_sims = job_data[&quot;@trajectories&quot;] || job_data[&quot;@simulations&quot;]</pre></td>
 
1441
          </tr>
 
1442
        
 
1443
          
 
1444
          
 
1445
          <tr class="uncovered">
 
1446
            <td><pre><a name="line232">232</a>   sims_per_node = num_sims / num_nodes</pre></td>
 
1447
          </tr>
 
1448
        
 
1449
          
 
1450
          
 
1451
          <tr class="uncovered">
 
1452
            <td><pre><a name="line233">233</a> </pre></td>
 
1453
          </tr>
 
1454
        
 
1455
          
 
1456
          
 
1457
          <tr class="uncovered">
 
1458
            <td><pre><a name="line234">234</a>   Djinn.log_debug(&quot;num nodes = #{num_nodes}&quot;)</pre></td>
 
1459
          </tr>
 
1460
        
 
1461
          
 
1462
          
 
1463
          <tr class="uncovered">
 
1464
            <td><pre><a name="line235">235</a>   Djinn.log_debug(&quot;num_sims = #{num_sims}&quot;)</pre></td>
 
1465
          </tr>
 
1466
        
 
1467
          
 
1468
          
 
1469
          <tr class="uncovered">
 
1470
            <td><pre><a name="line236">236</a>   Djinn.log_debug(&quot;sims_per_node = #{sims_per_node}&quot;)</pre></td>
 
1471
          </tr>
 
1472
        
 
1473
          
 
1474
          
 
1475
          <tr class="uncovered">
 
1476
            <td><pre><a name="line237">237</a> </pre></td>
 
1477
          </tr>
 
1478
        
 
1479
          
 
1480
          
 
1481
          <tr class="uncovered">
 
1482
            <td><pre><a name="line238">238</a>   # set up how many simulations each node</pre></td>
 
1483
          </tr>
 
1484
        
 
1485
          
 
1486
          
 
1487
          <tr class="uncovered">
 
1488
            <td><pre><a name="line239">239</a>   # should run by divying it up equally</pre></td>
 
1489
          </tr>
 
1490
        
 
1491
          
 
1492
          
 
1493
          <tr class="uncovered">
 
1494
            <td><pre><a name="line240">240</a>   # any remainder can be assigned to an</pre></td>
 
1495
          </tr>
 
1496
        
 
1497
          
 
1498
          
 
1499
          <tr class="uncovered">
 
1500
            <td><pre><a name="line241">241</a>   # arbitrary node</pre></td>
 
1501
          </tr>
 
1502
        
 
1503
          
 
1504
          
 
1505
          <tr class="uncovered">
 
1506
            <td><pre><a name="line242">242</a> </pre></td>
 
1507
          </tr>
 
1508
        
 
1509
          
 
1510
          
 
1511
          <tr class="uncovered">
 
1512
            <td><pre><a name="line243">243</a>   sims = [sims_per_node] * num_nodes</pre></td>
 
1513
          </tr>
 
1514
        
 
1515
          
 
1516
          
 
1517
          <tr class="uncovered">
 
1518
            <td><pre><a name="line244">244</a>   remainder = num_sims % num_nodes</pre></td>
 
1519
          </tr>
 
1520
        
 
1521
          
 
1522
          
 
1523
          <tr class="uncovered">
 
1524
            <td><pre><a name="line245">245</a>   sims[-1] += remainder</pre></td>
 
1525
          </tr>
 
1526
        
 
1527
          
 
1528
          
 
1529
          <tr class="uncovered">
 
1530
            <td><pre><a name="line246">246</a> </pre></td>
 
1531
          </tr>
 
1532
        
 
1533
          
 
1534
          
 
1535
          <tr class="uncovered">
 
1536
            <td><pre><a name="line247">247</a>   Djinn.log_debug(&quot;sims = #{sims.join(', ')}&quot;)</pre></td>
 
1537
          </tr>
 
1538
        
 
1539
          
 
1540
          
 
1541
          <tr class="uncovered">
 
1542
            <td><pre><a name="line248">248</a>   Djinn.log_debug(&quot;remainder = #{remainder}&quot;)</pre></td>
 
1543
          </tr>
 
1544
        
 
1545
          
 
1546
          
 
1547
          <tr class="uncovered">
 
1548
            <td><pre><a name="line249">249</a> </pre></td>
 
1549
          </tr>
 
1550
        
 
1551
          
 
1552
          
 
1553
          <tr class="uncovered">
 
1554
            <td><pre><a name="line250">250</a>   return sims</pre></td>
 
1555
          </tr>
 
1556
        
 
1557
          
 
1558
          
 
1559
          <tr class="uncovered">
 
1560
            <td><pre><a name="line251">251</a> end</pre></td>
 
1561
          </tr>
 
1562
        
 
1563
          
 
1564
          
 
1565
          <tr class="inferred">
 
1566
            <td><pre><a name="line252">252</a> </pre></td>
 
1567
          </tr>
 
1568
        
 
1569
          
 
1570
          
 
1571
          <tr class="marked">
 
1572
            <td><pre><a name="line253">253</a> def average(population)</pre></td>
 
1573
          </tr>
 
1574
        
 
1575
          
 
1576
          
 
1577
          <tr class="uncovered">
 
1578
            <td><pre><a name="line254">254</a>   total = 0.0</pre></td>
 
1579
          </tr>
 
1580
        
 
1581
          
 
1582
          
 
1583
          <tr class="uncovered">
 
1584
            <td><pre><a name="line255">255</a>   n = 0</pre></td>
 
1585
          </tr>
 
1586
        
 
1587
          
 
1588
          
 
1589
          <tr class="uncovered">
1590
1590
            <td><pre><a name="line256">256</a> </pre></td>
1591
1591
          </tr>
1592
1592
        
1593
1593
          
1594
1594
          
 
1595
          <tr class="uncovered">
 
1596
            <td><pre><a name="line257">257</a>   population.each { |val|</pre></td>
 
1597
          </tr>
 
1598
        
 
1599
          
 
1600
          
 
1601
          <tr class="uncovered">
 
1602
            <td><pre><a name="line258">258</a>     total += val</pre></td>
 
1603
          </tr>
 
1604
        
 
1605
          
 
1606
          
 
1607
          <tr class="uncovered">
 
1608
            <td><pre><a name="line259">259</a>     n += 1</pre></td>
 
1609
          </tr>
 
1610
        
 
1611
          
 
1612
          
 
1613
          <tr class="uncovered">
 
1614
            <td><pre><a name="line260">260</a>   }</pre></td>
 
1615
          </tr>
 
1616
        
 
1617
          
 
1618
          
 
1619
          <tr class="uncovered">
 
1620
            <td><pre><a name="line261">261</a> </pre></td>
 
1621
          </tr>
 
1622
        
 
1623
          
 
1624
          
 
1625
          <tr class="uncovered">
 
1626
            <td><pre><a name="line262">262</a>   return total / n</pre></td>
 
1627
          </tr>
 
1628
        
 
1629
          
 
1630
          
 
1631
          <tr class="uncovered">
 
1632
            <td><pre><a name="line263">263</a> end</pre></td>
 
1633
          </tr>
 
1634
        
 
1635
          
 
1636
          
 
1637
          <tr class="inferred">
 
1638
            <td><pre><a name="line264">264</a> </pre></td>
 
1639
          </tr>
 
1640
        
 
1641
          
 
1642
          
1595
1643
          <tr class="marked">
1596
 
            <td><pre><a name="line257">257</a> def variance(population)</pre></td>
1597
 
          </tr>
1598
 
        
1599
 
          
1600
 
          
1601
 
          <tr class="uncovered">
1602
 
            <td><pre><a name="line258">258</a>   n    = 0</pre></td>
1603
 
          </tr>
1604
 
        
1605
 
          
1606
 
          
1607
 
          <tr class="uncovered">
1608
 
            <td><pre><a name="line259">259</a>   mean = 0.0</pre></td>
1609
 
          </tr>
1610
 
        
1611
 
          
1612
 
          
1613
 
          <tr class="uncovered">
1614
 
            <td><pre><a name="line260">260</a> </pre></td>
1615
 
          </tr>
1616
 
        
1617
 
          
1618
 
          
1619
 
          <tr class="uncovered">
1620
 
            <td><pre><a name="line261">261</a>   sum = population.reduce(0.0) do |sum, x|</pre></td>
1621
 
          </tr>
1622
 
        
1623
 
          
1624
 
          
1625
 
          <tr class="uncovered">
1626
 
            <td><pre><a name="line262">262</a>     n     += 1</pre></td>
1627
 
          </tr>
1628
 
        
1629
 
          
1630
 
          
1631
 
          <tr class="uncovered">
1632
 
            <td><pre><a name="line263">263</a>     delta  = x - mean</pre></td>
1633
 
          </tr>
1634
 
        
1635
 
          
1636
 
          
1637
 
          <tr class="uncovered">
1638
 
            <td><pre><a name="line264">264</a>     mean  += delta / n</pre></td>
1639
 
          </tr>
1640
 
        
1641
 
          
1642
 
          
1643
 
          <tr class="uncovered">
1644
 
            <td><pre><a name="line265">265</a> </pre></td>
1645
 
          </tr>
1646
 
        
1647
 
          
1648
 
          
1649
 
          <tr class="uncovered">
1650
 
            <td><pre><a name="line266">266</a>     sum + delta * (x - mean)</pre></td>
1651
 
          </tr>
1652
 
        
1653
 
          
1654
 
          
1655
 
          <tr class="uncovered">
1656
 
            <td><pre><a name="line267">267</a>   end</pre></td>
 
1644
            <td><pre><a name="line265">265</a> def variance(population)</pre></td>
 
1645
          </tr>
 
1646
        
 
1647
          
 
1648
          
 
1649
          <tr class="uncovered">
 
1650
            <td><pre><a name="line266">266</a>   n    = 0</pre></td>
 
1651
          </tr>
 
1652
        
 
1653
          
 
1654
          
 
1655
          <tr class="uncovered">
 
1656
            <td><pre><a name="line267">267</a>   mean = 0.0</pre></td>
1657
1657
          </tr>
1658
1658
        
1659
1659
          
1665
1665
          
1666
1666
          
1667
1667
          <tr class="uncovered">
1668
 
            <td><pre><a name="line269">269</a>   sum / n</pre></td>
1669
 
          </tr>
1670
 
        
1671
 
          
1672
 
          
1673
 
          <tr class="uncovered">
1674
 
            <td><pre><a name="line270">270</a> end</pre></td>
 
1668
            <td><pre><a name="line269">269</a>   sum = population.reduce(0.0) do |sum, x|</pre></td>
 
1669
          </tr>
 
1670
        
 
1671
          
 
1672
          
 
1673
          <tr class="uncovered">
 
1674
            <td><pre><a name="line270">270</a>     n     += 1</pre></td>
 
1675
          </tr>
 
1676
        
 
1677
          
 
1678
          
 
1679
          <tr class="uncovered">
 
1680
            <td><pre><a name="line271">271</a>     delta  = x - mean</pre></td>
 
1681
          </tr>
 
1682
        
 
1683
          
 
1684
          
 
1685
          <tr class="uncovered">
 
1686
            <td><pre><a name="line272">272</a>     mean  += delta / n</pre></td>
 
1687
          </tr>
 
1688
        
 
1689
          
 
1690
          
 
1691
          <tr class="uncovered">
 
1692
            <td><pre><a name="line273">273</a> </pre></td>
 
1693
          </tr>
 
1694
        
 
1695
          
 
1696
          
 
1697
          <tr class="uncovered">
 
1698
            <td><pre><a name="line274">274</a>     sum + delta * (x - mean)</pre></td>
 
1699
          </tr>
 
1700
        
 
1701
          
 
1702
          
 
1703
          <tr class="uncovered">
 
1704
            <td><pre><a name="line275">275</a>   end</pre></td>
 
1705
          </tr>
 
1706
        
 
1707
          
 
1708
          
 
1709
          <tr class="uncovered">
 
1710
            <td><pre><a name="line276">276</a> </pre></td>
 
1711
          </tr>
 
1712
        
 
1713
          
 
1714
          
 
1715
          <tr class="uncovered">
 
1716
            <td><pre><a name="line277">277</a>   sum / n</pre></td>
 
1717
          </tr>
 
1718
        
 
1719
          
 
1720
          
 
1721
          <tr class="uncovered">
 
1722
            <td><pre><a name="line278">278</a> end</pre></td>
1675
1723
          </tr>
1676
1724
        
1677
1725
          
1678
1726
          
1679
1727
          <tr class="inferred">
1680
 
            <td><pre><a name="line271">271</a> </pre></td>
 
1728
            <td><pre><a name="line279">279</a> </pre></td>
1681
1729
          </tr>
1682
1730
        
1683
1731
          
1684
1732
          
1685
1733
          <tr class="marked">
1686
 
            <td><pre><a name="line272">272</a> def standard_deviation(population)</pre></td>
1687
 
          </tr>
1688
 
        
1689
 
          
1690
 
          
1691
 
          <tr class="uncovered">
1692
 
            <td><pre><a name="line273">273</a>   Math.sqrt(variance(population))</pre></td>
1693
 
          </tr>
1694
 
        
1695
 
          
1696
 
          
1697
 
          <tr class="uncovered">
1698
 
            <td><pre><a name="line274">274</a> end</pre></td>
 
1734
            <td><pre><a name="line280">280</a> def standard_deviation(population)</pre></td>
 
1735
          </tr>
 
1736
        
 
1737
          
 
1738
          
 
1739
          <tr class="uncovered">
 
1740
            <td><pre><a name="line281">281</a>   Math.sqrt(variance(population))</pre></td>
 
1741
          </tr>
 
1742
        
 
1743
          
 
1744
          
 
1745
          <tr class="uncovered">
 
1746
            <td><pre><a name="line282">282</a> end</pre></td>
1699
1747
          </tr>
1700
1748
        
1701
1749
      </tbody>
1702
1750
    </table>
1703
1751
 
1704
 
    <p>Generated on Mon Feb 20 14:30:58 -0800 2012 with <a href="http://github.com/relevance/rcov">rcov 0.9.8</a></p>
 
1752
    <p>Generated on Sat Feb 25 19:19:09 -0800 2012 with <a href="http://github.com/relevance/rcov">rcov 0.9.8</a></p>
1705
1753
 
1706
1754
  </body>
1707
1755
</html>