data_observer.ipynb 3.86 MB
Newer Older
Chetan Sharma's avatar
Chetan Sharma committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Small Utility Scripts to Visualize Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib notebook\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import shelve\n",
    "import os\n",
    "\n",
    "from matplotlib import pyplot as plt\n",
    "\n",
    "from objects import Conditions, Data, Prediction, MachineChar, EndMill\n",
    "from ml import LinearModel, UnifiedLinearModel, mean_no_outliers\n",
    "from optimize import Optimizer\n",
    "\n",
    "from IPython.core.display import display, HTML\n",
    "def niceprint(*args):\n",
    "    display(HTML(\"<p>\" + \" \".join([str(i) for i in args]) + \"</p>\"))\n",
    "    \n",
    "tableau20 = [(31, 119, 180), (174, 199, 232), (255, 127, 14), (255, 187, 120), \n",
    "     (44, 160, 44), (152, 223, 138), (214, 39, 40), (255, 152, 150), \n",
    "     (148, 103, 189), (197, 176, 213), (140, 86, 75), (196, 156, 148), \n",
    "     (227, 119, 194), (247, 182, 210), (127, 127, 127), (199, 199, 199), \n",
    "     (188, 189, 34), (219, 219, 141), (23, 190, 207), (158, 218, 229)] \n",
    "  \n",
    "# Scale the RGB values to the [0, 1] range, which is the format matplotlib accepts. \n",
    "for i in range(len(tableau20)): \n",
    "    r, g, b = tableau20[i] \n",
Chetan Sharma's avatar
Chetan Sharma committed
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
    "    tableau20[i] = (r / 255., g / 255., b / 255.) \n",
    "    \n",
    "# sweep graphs'\n",
    "def sweep_graphs(desired_data):\n",
    "    model = UnifiedLinearModel()\n",
    "    # # alternate training scheme\n",
    "    # with shelve.open(os.path.join(\"saved_cuts\", \"db\")) as db:\n",
    "    #     model.ingest_data(db[\"ammp-alu-3_8\"])\n",
    "    model.ingest_data(desired_data)\n",
    "\n",
    "    predictions = model.predict([datum.conditions() for datum in desired_data])\n",
    "\n",
    "    def form_dataframe_data(data):\n",
    "        a = list()\n",
    "        for datum in data:\n",
    "            D, W, f_r, w, endmill, Ts, Fys = datum.unpack()\n",
    "            a.append([D, W, f_r, w, endmill, mean_no_outliers(Ts[:, 1]), mean_no_outliers(Fys[:, 1])])\n",
    "        return pd.DataFrame(a, columns = ['D', 'W', 'f_r','w', 'endmill', 'Ts', 'Fys'])\n",
    "\n",
    "    def form_dataframe_predictions(predictions):\n",
    "        return pd.DataFrame([prediction.unpack() for prediction in predictions], columns = ['D', 'W', 'f_r','w', 'endmill', 'T', 'F'])\n",
    "    \n",
    "    niceprint(\"<h3>Sweep Graphs</h3>\")\n",
    "    df = form_dataframe_data(desired_data)\n",
    "    dfp = form_dataframe_predictions(predictions)\n",
    "    feeds = df.f_r.unique()\n",
    "    fig1, ax1 = plt.subplots()\n",
    "    fig2, ax2 = plt.subplots()\n",
    "    axs = [ax1, ax2]\n",
    "    for i, feed in enumerate(reversed(feeds)):\n",
    "        is_desired = df['f_r'] == feed\n",
    "        axs[0].set_title(\"Torque predicted vs. actual\")\n",
    "        axs[0].set(xlabel = \"WOC (m)\", ylabel = \"Torque (Nm)\")\n",
    "        axs[0].plot(df[is_desired]['W'], df[is_desired]['Ts'], label=\"Actual, feed \" + \"{:.3f} m/s\".format(feed), linestyle='--', color = tableau20[i % 20])\n",
    "        axs[0].plot(dfp[is_desired]['W'], dfp[is_desired]['T'], label=\"Pred., feed \" + \"{:.3f} m/s\".format(feed), color = tableau20[i % 20])\n",
    "        axs[0].legend(loc='center left', bbox_to_anchor=(1, 0.5))\n",
    "        fig1.savefig('generated_assets/sweep_graphs/' + data_name + '_torques.png', dpi = 300, bbox_inches = 'tight')\n",
    "        axs[1].set_title(\"Force predicted vs. actual\")\n",
    "        axs[1].set(xlabel = \"WOC (m)\", ylabel = \"Force (N)\")\n",
    "        axs[1].plot(df[is_desired]['W'], df[is_desired]['Fys'], label=\"Actual, feed \" + \"{:.3f} m/s\".format(feed), linestyle='--', color = tableau20[i % 20])\n",
    "        axs[1].plot(dfp[is_desired]['W'], [a[1] for a in dfp[is_desired]['F']], label=\"Pred., feed \" + \"{:.3f} m/s\".format(feed), color = tableau20[i % 20])\n",
    "        axs[1].legend(loc='center left', bbox_to_anchor=(1, 0.5))\n",
    "        fig2.savefig('generated_assets/sweep_graphs/' + data_name + '_forces.png', dpi = 300, bbox_inches = 'tight')\n",
    "\n",
    "\n",
    "    # find average error\n",
    "    errors_T = list()\n",
    "    errors_Fy = list()\n",
    "    for datum, prediction in zip(desired_data, predictions):\n",
    "        datum_T = mean_no_outliers(datum.Ts[:, 1])\n",
    "        datum_Fy = mean_no_outliers(datum.Fys[:, 1])\n",
    "        errors_T.append((datum_T - prediction.T) / prediction.T)\n",
    "        errors_Fy.append((datum_Fy - prediction.F[1]) / prediction.F[1])\n",
    "        \n",
    "    niceprint(\"Params:\", model.params)\n",
    "    niceprint(\"R<sup>2</sup> value:\", model.score())\n",
    "    niceprint(\"Average error for T:\", np.mean(np.abs(errors_T)))\n",
    "    niceprint(\"Average error for Fy:\", np.mean(np.abs(errors_Fy)))\n",
    "    \n",
    "# analyze ammp runs\n",
    "def ammp_graphs(data, data_name, USE_OLD_RUN = False):\n",
    "    full_name = data_name\n",
    "    model = UnifiedLinearModel()\n",
    "    if USE_OLD_RUN:\n",
    "        with shelve.open(os.path.join(\"saved_cuts\", \"db\")) as db:\n",
    "            model.ingest_data(db[USE_OLD_RUN])\n",
    "            full_name += '_using_' + USE_OLD_RUN\n",
    "\n",
    "    actual_T = [mean_no_outliers(i.Ts[:, 1]) for i in data]\n",
    "    actual_Fy = [mean_no_outliers(i.Fys[:, 1]) for i in data]\n",
    "    pred_T = []\n",
    "    pred_Fy = []\n",
    "\n",
    "    for datum in data:\n",
    "        pred = model.predict_one(datum.conditions())\n",
    "        pred_T.append(pred.T)\n",
    "        pred_Fy.append(pred.F[1])\n",
    "        model.ingest_datum(datum)\n",
    "\n",
    "    niceprint(\"<h3>AMMP Graphs for\", data_name, \"</h3>\")\n",
    "    # fig, ax = plt.subplots(2)\n",
    "    fig, ax = plt.subplots(2)\n",
    "    ax[0].set_title(\"Torques w/ all Data\")\n",
    "    ax[0].set_xlabel(\"Cut Number\")\n",
    "    ax[0].set_ylabel(\"Torque (Nm)\")\n",
    "    ax[0].plot(range(len(data)), actual_T, label = \"Actual\", linestyle='--', color = tableau20[0])\n",
    "    ax[0].plot(range(len(data)), [model.predict_one(d.conditions()).T for d in data], label = \"Predicted\", color = tableau20[4])\n",
    "    ax[0].legend()\n",
    "    ax[0].label_outer()\n",
    "    ax[1].set_title(\"Forces w/ all Data\")\n",
    "    ax[1].set_xlabel(\"Cut Number\")\n",
    "    ax[1].set_ylabel(\"Force (N)\")\n",
    "    ax[1].plot(range(len(data)), actual_Fy, label = \"Actual\", linestyle='--', color = tableau20[0])\n",
    "    ax[1].plot(range(len(data)), [model.predict_one(d.conditions()).F[1] for d in data], label = \"Predicted\", color = tableau20[4])\n",
    "    plt.savefig('generated_assets/ammp_graphs/' + full_name + '_all_data.png', dpi = 300, bbox_inches = 'tight')\n",
    "\n",
    "    fig, ax = plt.subplots(2)\n",
    "    ax[0].set_title(\"Torques w/ Sequential Data\")\n",
    "    ax[0].set_xlabel(\"Cut Number\")\n",
    "    ax[0].set_ylabel(\"Torque (Nm)\")\n",
    "    ax[0].plot(range(len(data)), actual_T, label = \"Actual\", linestyle='--', color = tableau20[0])\n",
    "    ax[0].plot(range(len(data)), pred_T, label = \"Predicted\", color = tableau20[4])\n",
    "    ax[0].legend()\n",
    "    ax[0].label_outer()\n",
    "    ax[1].set_title(\"Forces w/ Sequential Data\")\n",
    "    ax[1].set_xlabel(\"Cut Number\")\n",
    "    ax[1].set_ylabel(\"Force (N)\")\n",
    "    ax[1].plot(range(len(data)), actual_Fy, label = \"Actual\", linestyle='--', color = tableau20[0])\n",
    "    ax[1].plot(range(len(data)), pred_Fy, label = \"Predicted\", color = tableau20[4])\n",
    "    plt.savefig('generated_assets/ammp_graphs/' + full_name + '_seq_data.png', dpi = 300, bbox_inches = 'tight')\n",
    "\n",
    "    errors_T = list()\n",
    "    errors_Fy = list()\n",
    "    for datum, prediction in zip(data, model.predict([d.conditions() for d in data])):\n",
    "        datum_T = mean_no_outliers(datum.Ts[:, 1])\n",
    "        datum_Fy = mean_no_outliers(datum.Fys[:, 1])\n",
    "        errors_T.append((datum_T - prediction.T) / prediction.T)\n",
    "        errors_Fy.append((datum_Fy - prediction.F[1]) / prediction.F[1])\n",
    "\n",
    "    niceprint(\"Model params:\", model.params)\n",
    "    niceprint(\"R<sup>2</sup> value:\", model.score())\n",
    "    niceprint(\"Average error for T:\", np.mean(np.abs(errors_T)))\n",
    "    niceprint(\"Average error for Fy:\", np.mean(np.abs(errors_Fy)))\n",
    "    \n",
    "def data_graphs(data):\n",
    "    plt.figure()\n",
    "    for i, datum in enumerate(data):\n",
    "        plt.title(\"Torques\")\n",
    "        plt.plot(datum.Ts[:, 0], datum.Ts[:, 1], color = tableau20[i % 20])\n",
    "\n",
    "    plt.figure()\n",
    "\n",
    "    for i, datum in enumerate(data):\n",
    "        plt.title(\"Forces\")\n",
    "        plt.plot(datum.Fys[:, 0], datum.Fys[:, 1], color = tableau20[i % 20])\n",
    "\n",
    "    for i, datum in enumerate(data):\n",
    "        niceprint(i, datum)"
Chetan Sharma's avatar
Chetan Sharma committed
179
180
181
182
   ]
  },
  {
   "cell_type": "code",
Chetan Sharma's avatar
Chetan Sharma committed
183
184
185
186
187
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
Chetan Sharma's avatar
Chetan Sharma committed
188
189
   "source": [
    "# get data\n",
Chetan Sharma's avatar
Chetan Sharma committed
190
    "data_name = 'ammp-brass-1_8'\n",
Chetan Sharma's avatar
Chetan Sharma committed
191
    "data = None\n",
Chetan Sharma's avatar
Chetan Sharma committed
192
193
    "with shelve.open(os.path.join(\"saved_cuts\", \"shelve\")) as db:\n",
    "    niceprint(\"<br>\".join(list(db.keys())))\n",
Chetan Sharma's avatar
Chetan Sharma committed
194
195
196
197
198
    "    data = db[data_name]"
   ]
  },
  {
   "cell_type": "code",
Chetan Sharma's avatar
Chetan Sharma committed
199
   "execution_count": 3,
Chetan Sharma's avatar
Chetan Sharma committed
200
201
202
203
   "metadata": {
    "scrolled": false
   },
   "outputs": [
Chetan Sharma's avatar
Chetan Sharma committed
204
205
206
207
208
209
210
211
212
213
214
215
    {
     "data": {
      "text/html": [
       "<p><h3>AMMP Graphs for ammp-4140-1_4 </h3></p>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
Chetan Sharma's avatar
Chetan Sharma committed
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\n",
       "\n",
       "mpl.get_websocket_type = function() {\n",
       "    if (typeof(WebSocket) !== 'undefined') {\n",
       "        return WebSocket;\n",
       "    } else if (typeof(MozWebSocket) !== 'undefined') {\n",
       "        return MozWebSocket;\n",
       "    } else {\n",
       "        alert('Your browser does not have WebSocket support. ' +\n",
       "              'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
       "              'Firefox 4 and 5 are also supported but you ' +\n",
       "              'have to enable WebSockets in about:config.');\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
       "    this.id = figure_id;\n",
       "\n",
       "    this.ws = websocket;\n",
       "\n",
       "    this.supports_binary = (this.ws.binaryType != undefined);\n",
       "\n",
       "    if (!this.supports_binary) {\n",
       "        var warnings = document.getElementById(\"mpl-warnings\");\n",
       "        if (warnings) {\n",
       "            warnings.style.display = 'block';\n",
       "            warnings.textContent = (\n",
       "                \"This browser does not support binary websocket messages. \" +\n",
       "                    \"Performance may be slow.\");\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.imageObj = new Image();\n",
       "\n",
       "    this.context = undefined;\n",
       "    this.message = undefined;\n",
       "    this.canvas = undefined;\n",
       "    this.rubberband_canvas = undefined;\n",
       "    this.rubberband_context = undefined;\n",
       "    this.format_dropdown = undefined;\n",
       "\n",
       "    this.image_mode = 'full';\n",
       "\n",
       "    this.root = $('<div/>');\n",
       "    this._root_extra_style(this.root)\n",
       "    this.root.attr('style', 'display: inline-block');\n",
       "\n",
       "    $(parent_element).append(this.root);\n",
       "\n",
       "    this._init_header(this);\n",
       "    this._init_canvas(this);\n",
       "    this._init_toolbar(this);\n",
       "\n",
       "    var fig = this;\n",
       "\n",
       "    this.waiting = false;\n",
       "\n",
       "    this.ws.onopen =  function () {\n",
       "            fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
       "            fig.send_message(\"send_image_mode\", {});\n",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\n",
       "            fig.send_message(\"refresh\", {});\n",
       "        }\n",
       "\n",
       "    this.imageObj.onload = function() {\n",
       "            if (fig.image_mode == 'full') {\n",
       "                // Full images could contain transparency (where diff images\n",
       "                // almost always do), so we need to clear the canvas so that\n",
       "                // there is no ghosting.\n",
       "                fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
       "            }\n",
       "            fig.context.drawImage(fig.imageObj, 0, 0);\n",
       "        };\n",
       "\n",
       "    this.imageObj.onunload = function() {\n",
       "        fig.ws.close();\n",
       "    }\n",
       "\n",
       "    this.ws.onmessage = this._make_on_message_function(this);\n",
       "\n",
       "    this.ondownload = ondownload;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_header = function() {\n",
       "    var titlebar = $(\n",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\n",
       "    titlebar.append(titletext)\n",
       "    this.root.append(titlebar);\n",
       "    this.header = titletext[0];\n",
       "}\n",
       "\n",
       "\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = $('<div/>');\n",
       "\n",
       "    canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
       "\n",
       "    function canvas_keyboard_event(event) {\n",
       "        return fig.key_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    canvas_div.keydown('key_press', canvas_keyboard_event);\n",
       "    canvas_div.keyup('key_release', canvas_keyboard_event);\n",
       "    this.canvas_div = canvas_div\n",
       "    this._canvas_extra_style(canvas_div)\n",
       "    this.root.append(canvas_div);\n",
       "\n",
       "    var canvas = $('<canvas/>');\n",
       "    canvas.addClass('mpl-canvas');\n",
       "    canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
       "\n",
       "    this.canvas = canvas[0];\n",
       "    this.context = canvas[0].getContext(\"2d\");\n",
       "\n",
       "    var backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\n",
       "    rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
       "\n",
       "    var pass_mouse_events = true;\n",
       "\n",
       "    canvas_div.resizable({\n",
       "        start: function(event, ui) {\n",
       "            pass_mouse_events = false;\n",
       "        },\n",
       "        resize: function(event, ui) {\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "        stop: function(event, ui) {\n",
       "            pass_mouse_events = true;\n",
       "            fig.request_resize(ui.size.width, ui.size.height);\n",
       "        },\n",
       "    });\n",
       "\n",
       "    function mouse_event_fn(event) {\n",
       "        if (pass_mouse_events)\n",
       "            return fig.mouse_event(event, event['data']);\n",
       "    }\n",
       "\n",
       "    rubberband.mousedown('button_press', mouse_event_fn);\n",
       "    rubberband.mouseup('button_release', mouse_event_fn);\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband.mousemove('motion_notify', mouse_event_fn);\n",
       "\n",
       "    rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
       "    rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
       "\n",
       "    canvas_div.on(\"wheel\", function (event) {\n",
       "        event = event.originalEvent;\n",
       "        event['data'] = 'scroll'\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        mouse_event_fn(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.append(canvas);\n",
       "    canvas_div.append(rubberband);\n",
       "\n",
       "    this.rubberband = rubberband;\n",
       "    this.rubberband_canvas = rubberband[0];\n",
       "    this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
       "    this.rubberband_context.strokeStyle = \"#000000\";\n",
       "\n",
       "    this._resize_canvas = function(width, height) {\n",
       "        // Keep the size of the canvas, canvas container, and rubber band\n",
       "        // canvas in synch.\n",
       "        canvas_div.css('width', width)\n",
       "        canvas_div.css('height', height)\n",
       "\n",
       "        canvas.attr('width', width * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
       "\n",
       "        rubberband.attr('width', width);\n",
       "        rubberband.attr('height', height);\n",
       "    }\n",
       "\n",
       "    // Set the figure to an initial 600x600px, this will subsequently be updated\n",
       "    // upon first draw.\n",
       "    this._resize_canvas(600, 600);\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
       "        return false;\n",
       "    });\n",
       "\n",
       "    function set_focus () {\n",
       "        canvas.focus();\n",
       "        canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    window.setTimeout(set_focus, 100);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>');\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items) {\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) {\n",
       "            // put a spacer in here.\n",
       "            continue;\n",
       "        }\n",
       "        var button = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option);\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width / mpl.ratio, fig.canvas.height / mpl.ratio);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>');\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        // select the cell after this one\n",
       "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
       "        IPython.notebook.select(index + 1);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
Chetan Sharma's avatar
Chetan Sharma committed
996
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydB3hURReGv/SeEDpp9B5676A0sVAUUBFEQBQsgCL8oCBIFVSwUQQFREGqooCIIL333qT3UEN6/58z4a4JpGyy2WTv7jc8eTbZnTt35p2T3I9zZs7YJSUlJYGFBEiABEiABEiABEjAZgjYUQDazFxzoCRAAiRAAiRAAiSgCFAA0hBIgARIgARIgARIwMYIUADa2IRzuCRAAiRAAiRAAiRAAUgbIAESIAESIAESIAEbI0ABaGMTzuGSAAmQAAmQAAmQAAUgbYAESIAESIAESIAEbIwABaCNTTiHSwIkQAIkQAIkQAIUgLQBEiABEiABEiABErAxAhSANjbhHC4JkAAJkAAJkAAJUADSBkiABEiABEiABEjAxghQANrYhHO4JEACJEACJEACJEABSBsgARIgARIgARIgARsjQAFoYxPO4ZIACZAACZAACZAABSBtgARIgARIgARIgARsjAAFoI1NOIdLAiRAAiRAAiRAAhSAtAESIAESIAESIAESsDECFIA2NuEcLgmQAAmQAAmQAAlQANIGSIAESIAESIAESMDGCFAA2tiEc7gkQAIkQAIkQAIkQAFIGyABEiABEiABEiABGyNAAWhjE87hkgAJkAAJkAAJkAAFIG2ABEiABEiABEiABGyMAAWgjU04h0sCJEACJEACJEACFIC0ARIgARIgARIgARKwMQIUgDY24RwuCZAACZAACZAACVAA0gZIgARIgARIgARIwMYIUADa2IRzuCRAAiRAAiRAAiRAAUgbIAESIAESIAESIAEbI0ABaGMTzuGSAAmQAAmQAAmQAAUgbYAESIAESIAESIAEbIwABaCNTTiHSwIkQAIkQAIkQAIUgLQBEiABEiABEiABErAxAhSANjbhHC4JkAAJkAAJkAAJUADSBkiABEiABEiABEjAxghQANrYhHO4JEACJEACJEACJEABSBsgARIgARIgARIgARsjQAFoYxPO4doOATs7O6MGu2HDBjRv3tyouqz0OIFKlSrh2WefxaeffmoSnpMnT6JixYpYuHAhXnzxRdXWjBkz0K9fP1y/fh1FixZNt32tnlbBxcUFvr6+kL61adMGvXv3RoECBbLVv8OHD2P58uXo06cPAgICstUGLyIBErA8AhSAljcn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\" width=\"640\">"
Chetan Sharma's avatar
Chetan Sharma committed
997
998
999
1000
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]