{
“cells”: [
{

“cell_type”: “markdown”, “metadata”: {}, “source”: [

“# Getting Startedn”, “n”, “Animatplot is built on the concept of blocks. We’ll start by animating a Line block.n”, “n”, “First we need some imports.”

]

}, {

“cell_type”: “raw”, “metadata”: {

“raw_mimetype”: “text/restructuredtext”

}, “source”: [

“.. Note::n”, “ n”, “ Interactivity is not available in the static docs. Run the code locally to get interactivity.”

]

}, {

“cell_type”: “markdown”, “metadata”: {}, “source”: [

“## Basic Animation”

]

}, {

“cell_type”: “code”, “execution_count”: 1, “metadata”: {}, “outputs”: [], “source”: [

“%matplotlib notebookn”, “import numpy as npn”, “import matplotlib.pyplot as pltn”, “import animatplot as amp”

]

}, {

“cell_type”: “markdown”, “metadata”: {}, “source”: [

“We will animate the function:n”, “n”, “$y = \sin(2\pi(x+t))$ over the range $x=[0,1]$, and $t=[0,1]$n”, “n”, “Let’s generate the data:”

]

}, {

“cell_type”: “code”, “execution_count”: 2, “metadata”: {}, “outputs”: [], “source”: [

“x = np.linspace(0, 1, 50)n”, “t = np.linspace(0, 1, 20)n”, “n”, “X, T = np.meshgrid(x, t)n”, “Y = np.sin(2 * np.pi * (X + T))”

]

}, {

“cell_type”: “markdown”, “metadata”: {}, “source”: [

“In order to tell animatplot how to animate the data, we must pass it into a block. By default, the Line block will consider each of the rows in a 2D array to be a line at a different point in time.n”, “n”, “We then pass a list of all our blocks into an Animation, and show the animation.”

]

}, {

“cell_type”: “code”, “execution_count”: 3, “metadata”: {}, “outputs”: [

{
“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 imagesn”, “ // almost always do), so we need to clear the canvas so thatn”, “ // 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_divn”, “ 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 bandn”, “ // 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 updatedn”, “ // 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-buttonsn”, “ $( ".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, fig.canvas.height);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 butn”, “ * transferred with MIME type text/plain:" errors onn”, “ * Chrome. But how to set the MIME type? It doesn’t seemn”, “ * 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 takesn”, “ // 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-canvasn”, “mpl.findpos = function(e) {n”, “ //this section is from http://www.quirksmode.org/js/events_properties.htmln”, “ 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 bugn”, “ targ = targ.parentNode;n”, “n”, “ // jQuery normalizes the pageX and pageYn”, “ // pageX,Y are the mouse positions relative to the documentn”, “ // offset() returns the position of the element relative to the documentn”, “ 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 keysn”, “ * we need this to avoid circular referencesn”, “ * http://stackoverflow.com/a/24161582/3208463n”, “ /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 ton”, “ * the text insertion cursor when the button is pressed. We wantn”, “ * to control all of the cursor setting manually through then”, “ * ‘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 eventn”, “}n”, “n”, “mpl.figure.prototype.key_event = function(event, name) {n”, “n”, “ // Prevent repeat eventsn”, “ if (name == ‘key_press’)n”, “ {n”, “ if (event.which === this._key)n”, “ return;n”, “ elsen”, “ 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", "jpeg", "pdf", "png", "ps", "raw", "svg", "tif"];n”, “n”, “mpl.default_extension = "png";var comm_websocket_adapter = function(comm) {n”, “ // Create a "websocket"-like object which calls the given IPython commn”, “ // object with the appropriate methods. Currently this is a non binaryn”, “ // 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 processn”, “ // 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 Commn”, “ // 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 realn”, “ // 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.ration”, “ 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.ration”, “ 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 son”, “ // 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 = thisn”, “ 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 ‘focusablen”, “ el.attr(‘tabindex’, 0)n”, “ // reach out to IPython and tell the keyboard manager to turn it’s selfn”, “ // off when our div gets focusn”, “n”, “ // location in version 3n”, “ if (IPython.notebook.keyboard_manager) {n”, “ IPython.notebook.keyboard_manager.register_events(el);n”, “ }n”, “ else {n”, “ // location in version 2n”, “ 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+entern”, “ if (event.shiftKey && event.which == 13) {n”, “ this.canvas_div.blur();n”, “ event.shiftKey = false;n”, “ // Send a "J" for go to next celln”, “ event.which = 74;n”, “ event.keyCode = 74;n”, “ manager.command_mode();n”, “ manager.handle_keydown(event);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 forn”, “ // 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 outputn”, “ 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”: [

“<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydCXgOV/vG7+yRSGLfQ+zEHoQkREKVtlpbqyultqqWoqj+v7ZU0VJr7dT61dpaSumCJIi1iC0S+5bYSSTInv91xpfUEvLmPXnfd+ade67L1SXnOXPO79yT5zYz5xmbzMzMTPAgARIgARIgARIgARLQDQEbGkDdrDUnSgIkQAIkQAIkQAIKARpACoEESIAESIAESIAEdEaABlBnC87pkgAJkAAJkAAJkAANIDVAAiRAAiRAAiRAAjojQAOoswXndEmABEiABEiABEiABpAaIAESIAESIAESIAGdEaAB1NmCc7okQAIkQAIkQAIkQANIDZAACZAACZAACZCAzgjQAOpswTldEiABEiABEiABEqABpAZIgARIgARIgARIQGcEaAB1tuCcLgmQAAmQAAmQAAnQAFIDJEACJEACJEACJKAzAjSAOltwTpcESIAESIAESIAEaACpARIgARIgARIgARLQGQEaQJ0tOKdLAiRAAiRAAiRAAjSA1AAJkAAJkAAJkAAJ6IwADaDOFpzTJQESIAESIAESIAEaQGqABEiABEiABEiABHRGgAZQZwvO6ZIACZAACZAACZAADSA1QAIkQAIkQAIkQAI6I0ADqLMF53RJgARIgARIgARIgAaQGiABEiABEiABEiABnRGgAdTZgnO6JEACJEACJEACJEADSA2QAAmQAAmQAAmQgM4I0ADqbME5XRIgARIgARIgARKgAaQGSIAESIAESIAESEBnBGgAdbbgnC4JkAAJkAAJkAAJ0ABSAyRAAiRAAiRAAiSgMwI0gDpbcE6XBEiABEiABEiABGgAqQESIAESIAESIAES0BkBGkCdLTinSwIkQAIkQAIkQAI0gNQACZAACZAACZAACeiMAA2gzhac0yUBEiABEiABEiABGkBqgARIgARIgARIgAR0RoAGUGcLzumSAAmQAAmQAAmQAA0gNUACJEACJEACJEACOiNAA6izBed0SYAESIAESIAESIAGkBogARIgARIgARIgAZ0RoAHU2YJzuiRAAiRAAiRAAiRAA0gNkAAJkAAJkAAJkIDOCNAA6mzBOV0SIAESIAESIAESoAGkBkiABEiABEiABEhAZwRoAHW24JwuCZAACZAACZAACdAAUgMkQAIkQAIk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" width="640">”

], “text/plain”: [

“<IPython.core.display.HTML object>”

]

}, “metadata”: {}, “output_type”: “display_data”

}

], “source”: [

“block = amp.blocks.Line(X, Y)n”, “anim = amp.Animation([block])n”, “n”, “anim.save_gif("images/line1") # save animation for docsn”, “plt.show()”

]

}, {

“cell_type”: “raw”, “metadata”: {

“raw_mimetype”: “text/restructuredtext”

}, “source”: [

“.. image:: images/line1.gif”

]

}, {

“cell_type”: “markdown”, “metadata”: {}, “source”: [

“## Adding Interactivityn”, “n”, “We’ll use the same data to make a new animation with interactive controls.”

]

}, {

“cell_type”: “code”, “execution_count”: 4, “metadata”: {

“scrolled”: false

}, “outputs”: [

{
“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 imagesn”, “ // almost always do), so we need to clear the canvas so thatn”, “ // 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_divn”, “ 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 bandn”, “ // 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 updatedn”, “ // 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-buttonsn”, “ $( ".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, fig.canvas.height);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 butn”, “ * transferred with MIME type text/plain:" errors onn”, “ * Chrome. But how to set the MIME type? It doesn’t seemn”, “ * 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 takesn”, “ // 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-canvasn”, “mpl.findpos = function(e) {n”, “ //this section is from http://www.quirksmode.org/js/events_properties.htmln”, “ 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 bugn”, “ targ = targ.parentNode;n”, “n”, “ // jQuery normalizes the pageX and pageYn”, “ // pageX,Y are the mouse positions relative to the documentn”, “ // offset() returns the position of the element relative to the documentn”, “ 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 keysn”, “ * we need this to avoid circular referencesn”, “ * http://stackoverflow.com/a/24161582/3208463n”, “ /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 ton”, “ * the text insertion cursor when the button is pressed. We wantn”, “ * to control all of the cursor setting manually through then”, “ * ‘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 eventn”, “}n”, “n”, “mpl.figure.prototype.key_event = function(event, name) {n”, “n”, “ // Prevent repeat eventsn”, “ if (name == ‘key_press’)n”, “ {n”, “ if (event.which === this._key)n”, “ return;n”, “ elsen”, “ 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", "jpeg", "pdf", "png", "ps", "raw", "svg", "tif"];n”, “n”, “mpl.default_extension = "png";var comm_websocket_adapter = function(comm) {n”, “ // Create a "websocket"-like object which calls the given IPython commn”, “ // object with the appropriate methods. Currently this is a non binaryn”, “ // 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 processn”, “ // 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 Commn”, “ // 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 realn”, “ // 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.ration”, “ 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.ration”, “ 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 son”, “ // 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 = thisn”, “ 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 ‘focusablen”, “ el.attr(‘tabindex’, 0)n”, “ // reach out to IPython and tell the keyboard manager to turn it’s selfn”, “ // off when our div gets focusn”, “n”, “ // location in version 3n”, “ if (IPython.notebook.keyboard_manager) {n”, “ IPython.notebook.keyboard_manager.register_events(el);n”, “ }n”, “ else {n”, “ // location in version 2n”, “ 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+entern”, “ if (event.shiftKey && event.which == 13) {n”, “ this.canvas_div.blur();n”, “ event.shiftKey = false;n”, “ // Send a "J" for go to next celln”, “ event.which = 74;n”, “ event.keyCode = 74;n”, “ manager.command_mode();n”, “ manager.handle_keydown(event);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 forn”, “ // 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 outputn”, “ 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”: [

“<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydCXhOR/vG7+wRsthiiUgsscS+JYJEQinaWr/upZSipaha2n5daIvWUpTaa22Vj1bR2lokIZaiKCJB7GInEbIv/2uOf1Iq5E3mXc55z32uy/X5mnnmzPzmPnluc2bm2OTk5OSAFwmQAAmQAAmQAAmQgG4I2NAA6mas2VESIAESIAESIAESUAjQAFIIJEACJEACJEACJKAzAjSAOhtwdpcESIAESIAESIAEaACpARIgARIgARIgARLQGQEaQJ0NOLtLAiRAAiRAAiRAAjSA1AAJkAAJkAAJkAAJ6IwADaDOBpzdJQESIAESIAESIAEaQGqABEiABEiABEiABHRGgAZQZwPO7pIACZAACZAACZAADSA1QAIkQAIkQAIkQAI6I0ADqLMBZ3dJgARIgARIgARIgAaQGiABEiABEiABEiABnRGgAdTZgLO7JEACJEACJEACJEADSA2QAAmQAAmQAAmQgM4I0ADqbMDZXRIgARIgARIgARKgAaQGSIAESIAESIAESEBnBGgAdTbg7C4JkAAJkAAJkAAJ0ABSAyRAAiRAAiRAAiSgMwI0gDobcHaXBEiABEiABEiABGgAqQESIAESIAESIAES0BkBGkCdDTi7SwIkQAIkQAIkQAI0gNQACZAACZAACZAACeiMAA2gzgac3SUBEiABEiABEiABGkBqgARIgARIgARIgAR0RoAGUGcDzu6SAAmQAAmQAAmQAA0gNUACJEACJEACJEACOiNAA6izAWd3SYAESIAESIAESIAGkBogARIgARIgARIgAZ0RoAHU2YCzuyRAAiRAAiRAAiRAA0gNkAAJkAAJkAAJkIDOCNAA6mzA2V0SIAESIAESIAESoAGkBkiABEiABEiABEhAZwRoAHU24OwuCZAACZAACZAACdAAUgMkQAIkQAIkQAIkoDMCNIA6G3B2lwRIgARIgARIgARoAKkBEiABEiABEiABEtAZARpAnQ04u0sCJEACJEACJEACNIDUAAmQAAmQAAmQAAnojAANoM4GnN0lARIgARIgARIgARpAaoAESIAESIAESIAEdEaABlBnA87ukgAJkAAJkAAJkAANIDVAAiRAAiRAAiRAAjojQAOoswFnd0mABEiABEiABEiABpAaIAESIAES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" width="640">”

], “text/plain”: [

“<IPython.core.display.HTML object>”

]

}, “metadata”: {}, “output_type”: “display_data”

}

], “source”: [

“block = amp.blocks.Line(X, Y)n”, “anim = amp.Animation([block])n”, “n”, “anim.controls() # creates a timeline_slider and a play/pause togglen”, “anim.save_gif("images/line2") # save animation for docsn”, “plt.show()”

]

}, {

“cell_type”: “raw”, “metadata”: {

“raw_mimetype”: “text/restructuredtext”

}, “source”: [

“.. image:: images/line2.gif”

]

}, {

“cell_type”: “markdown”, “metadata”: {}, “source”: [

“## Displaying the Timen”, “n”, “The above animation didn’t display the time properly because we didn’t tell animatplot what the values of time are. Instead it displayed the frame number. We can simply pass our values of time into our call to `Animation`.”

]

}, {

“cell_type”: “code”, “execution_count”: 5, “metadata”: {}, “outputs”: [

{
“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 imagesn”, “ // almost always do), so we need to clear the canvas so thatn”, “ // 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_divn”, “ 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 bandn”, “ // 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 updatedn”, “ // 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-buttonsn”, “ $( ".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, fig.canvas.height);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 butn”, “ * transferred with MIME type text/plain:" errors onn”, “ * Chrome. But how to set the MIME type? It doesn’t seemn”, “ * 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 takesn”, “ // 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-canvasn”, “mpl.findpos = function(e) {n”, “ //this section is from http://www.quirksmode.org/js/events_properties.htmln”, “ 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 bugn”, “ targ = targ.parentNode;n”, “n”, “ // jQuery normalizes the pageX and pageYn”, “ // pageX,Y are the mouse positions relative to the documentn”, “ // offset() returns the position of the element relative to the documentn”, “ 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 keysn”, “ * we need this to avoid circular referencesn”, “ * http://stackoverflow.com/a/24161582/3208463n”, “ /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 ton”, “ * the text insertion cursor when the button is pressed. We wantn”, “ * to control all of the cursor setting manually through then”, “ * ‘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 eventn”, “}n”, “n”, “mpl.figure.prototype.key_event = function(event, name) {n”, “n”, “ // Prevent repeat eventsn”, “ if (name == ‘key_press’)n”, “ {n”, “ if (event.which === this._key)n”, “ return;n”, “ elsen”, “ 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", "jpeg", "pdf", "png", "ps", "raw", "svg", "tif"];n”, “n”, “mpl.default_extension = "png";var comm_websocket_adapter = function(comm) {n”, “ // Create a "websocket"-like object which calls the given IPython commn”, “ // object with the appropriate methods. Currently this is a non binaryn”, “ // 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 processn”, “ // 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 Commn”, “ // 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 realn”, “ // 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.ration”, “ 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.ration”, “ 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 son”, “ // 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 = thisn”, “ 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 ‘focusablen”, “ el.attr(‘tabindex’, 0)n”, “ // reach out to IPython and tell the keyboard manager to turn it’s selfn”, “ // off when our div gets focusn”, “n”, “ // location in version 3n”, “ if (IPython.notebook.keyboard_manager) {n”, “ IPython.notebook.keyboard_manager.register_events(el);n”, “ }n”, “ else {n”, “ // location in version 2n”, “ 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+entern”, “ if (event.shiftKey && event.which == 13) {n”, “ this.canvas_div.blur();n”, “ event.shiftKey = false;n”, “ // Send a "J" for go to next celln”, “ event.which = 74;n”, “ event.keyCode = 74;n”, “ manager.command_mode();n”, “ manager.handle_keydown(event);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 forn”, “ // 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 outputn”, “ 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”: [

“<img src="data:image/png;base64,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" width="640">”

], “text/plain”: [

“<IPython.core.display.HTML object>”

]

}, “metadata”: {}, “output_type”: “display_data”

}

], “source”: [

“block = amp.blocks.Line(X, Y)n”, “anim = amp.Animation([block], t) # pass in the time valuesn”, “n”, “anim.controls()n”, “anim.save_gif("images/line3") # save animation for docsn”, “plt.show()”

]

}, {

“cell_type”: “raw”, “metadata”: {

“raw_mimetype”: “text/restructuredtext”

}, “source”: [

“.. image:: images/line3.gif”

]

}, {

“cell_type”: “markdown”, “metadata”: {}, “source”: [

“## Controlling Timen”, “n”, “Simply passing in the values of time into the call to `Animation` doesn’t give us much control. Instead we use a `Timeline`.”

]

}, {

“cell_type”: “code”, “execution_count”: 6, “metadata”: {}, “outputs”: [], “source”: [

“timeline = amp.Timeline(t, units="s", fps=20)”

]

}, {

“cell_type”: “markdown”, “metadata”: {}, “source”: [

“The `units` argument will set text to be displayed next to the time number.n”, “n”, “The `fps` argument gives you control over how fast the animation will play.”

]

}, {

“cell_type”: “code”, “execution_count”: 7, “metadata”: {}, “outputs”: [

{
“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 imagesn”, “ // almost always do), so we need to clear the canvas so thatn”, “ // 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_divn”, “ 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 bandn”, “ // 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 updatedn”, “ // 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-buttonsn”, “ $( ".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, fig.canvas.height);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 butn”, “ * transferred with MIME type text/plain:" errors onn”, “ * Chrome. But how to set the MIME type? It doesn’t seemn”, “ * 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 takesn”, “ // 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-canvasn”, “mpl.findpos = function(e) {n”, “ //this section is from http://www.quirksmode.org/js/events_properties.htmln”, “ 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 bugn”, “ targ = targ.parentNode;n”, “n”, “ // jQuery normalizes the pageX and pageYn”, “ // pageX,Y are the mouse positions relative to the documentn”, “ // offset() returns the position of the element relative to the documentn”, “ 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 keysn”, “ * we need this to avoid circular referencesn”, “ * http://stackoverflow.com/a/24161582/3208463n”, “ /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 ton”, “ * the text insertion cursor when the button is pressed. We wantn”, “ * to control all of the cursor setting manually through then”, “ * ‘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 eventn”, “}n”, “n”, “mpl.figure.prototype.key_event = function(event, name) {n”, “n”, “ // Prevent repeat eventsn”, “ if (name == ‘key_press’)n”, “ {n”, “ if (event.which === this._key)n”, “ return;n”, “ elsen”, “ 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", "jpeg", "pdf", "png", "ps", "raw", "svg", "tif"];n”, “n”, “mpl.default_extension = "png";var comm_websocket_adapter = function(comm) {n”, “ // Create a "websocket"-like object which calls the given IPython commn”, “ // object with the appropriate methods. Currently this is a non binaryn”, “ // 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 processn”, “ // 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 Commn”, “ // 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 realn”, “ // 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.ration”, “ 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.ration”, “ 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 son”, “ // 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 = thisn”, “ 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 ‘focusablen”, “ el.attr(‘tabindex’, 0)n”, “ // reach out to IPython and tell the keyboard manager to turn it’s selfn”, “ // off when our div gets focusn”, “n”, “ // location in version 3n”, “ if (IPython.notebook.keyboard_manager) {n”, “ IPython.notebook.keyboard_manager.register_events(el);n”, “ }n”, “ else {n”, “ // location in version 2n”, “ 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+entern”, “ if (event.shiftKey && event.which == 13) {n”, “ this.canvas_div.blur();n”, “ event.shiftKey = false;n”, “ // Send a "J" for go to next celln”, “ event.which = 74;n”, “ event.keyCode = 74;n”, “ manager.command_mode();n”, “ manager.handle_keydown(event);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 forn”, “ // 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 outputn”, “ 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”: [

“<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydB1QVR/vGHzoizYqKKBYs2FFBVBA0Gk2zpZpoNJYYTawxJvmnWBJNNIq9x5pojIkmGnsBVKzBEgXBig27gijS+Z/ZfBALyoW5l7t777PneD6/MO/szG+e9X2Y3ZmxyM7OzgYvEiABEiABEiABEiABsyFgQQNoNmPNjpIACZAACZAACZCAQoAGkEIgARIgARIgARIgATMjQANoZgPO7pIACZAACZAACZAADSA1QAIkQAIkQAIkQAJmRoAG0MwGnN0lARIgARIgARIgARpAaoAESIAESIAESIAEzIwADaCZDTi7SwIkQAIkQAIkQAI0gNQACZAACZAACZAACZgZARpAMxtwdpcESIAESIAESIAEaACpARIgARIgARIgARIwMwI0gGY24OwuCZAACZAACZAACdAAUgMkQAIkQAIkQAIkYGYEaADNbMDZXRIgARIgARIgARKgAaQGSIAESIAESIAESMDMCNAAmtmAs7skQAIkQAIkQAIkQANIDZAACZAACZAACZCAmRGgATSzAWd3SYAESIAESIAESIAGkBogARIgARIgARIgATMjQANoZgPO7pIACZAACZAACZAADSA1QAIkQAIkQAIkQAJmRoAG0MwGnN0lARIgARIgARIgARpAaoAESIAESIAESIAEzIwADaCZDTi7SwIkQAIkQAIkQAI0gNQACZAACZAACZAACZgZARpAMxtwdpcESIAESIAESIAEaACpARIgARIgARIgARIwMwI0gGY24OwuCZAACZAACZAACdAAUgMkQAIkQAIkQAIkYGYEaADNbMDZXRIgARIgARIgARKgAaQGSIAESIAESIAESMDMCNAAmtmAs7skQAIkQAIkQAIkQANIDZAACZAACZAACZCAmRGgATSzAWd3SYAESIAESIAESIAGkBogARIgARIgARIgATMjQANoZgPO7pIACZAACZAACZAADSA1QAIkQAIkQAIkQAJmRoAG0MwGnN0lARIgARIgARIgARpAaoAESIAESIAESIAEzIwADaCZDTi7SwIkQAIkQAIkQAI0gNQACZAACZAACZAACZgZARpAMxtwdpcESIAESIAESIAEaACpARIgARIgARIgARIwMwI0gGY24OwuCZAACZAACZAACdAAUgMkQAIkQAIkQAIkYGYEaADNbMDZXRIgARIgARIgARKgAaQGSIAESIAESIAESMDMCNAAmtmAs7skQAIkQAIkQAIkQANIDZAACZAACZAACZCAmRGgATSzAWd3SYAESIAESIAESIAGkBogARIgARIgARIgATMjQANoZgPO7pIACZAACZAACZAADSA1QAIkQAIkQAIkQAJmRoAG0MwGnN0lARIgARIgARIgARpAaoAESIAESIAESIAEzIwADaCZDTi7SwIkQAIkQAIkQAI0gNQACZAACZAACZAACZgZARpAiQHPyspCfHw8nJycYGFhIVETQ0mABEiABEiABIqKQHZ2NpKSklChQgVYWloW1W1VdR8aQInhuHTpEjw8PCRqYCgJkAAJkAAJkICxCFy8eBEVK1Y01u2Nel8aQAn8iYmJcHV1hRCQs7OzRE0MJQESIAESIAESKCoCd+/eVSZwEhIS4OLiUlS3VdV9aAAlhkMISAhHGEEaQAmQDCUBEiABEiCBIiTA/A3QAEoIjgKSgMdQEiABEiABEjASAeZvGkAp6VFAUvgYTAIkQAIkQAJGIcD8TQMoJTwKSAofg0mABEiABEjAKASYv2kApYRHAUnhYzAJkAAJkAAJGIUA8zcNoJTwKCApfAwmARIgARIgAaMQYP6mAZQSHgUkhY/BJEACJEACJGAUAszfNIBSwqOApPAxmARIgARIgASMQoD5WyMGcOfOnZg4cSIiIyNx5coVrFmzBp06dXqmaMLDwzFs2DBERUUpR7188skn6N+//yMxs2bNUuoVddapUwdTpkxBQECAzmKkgHRGxYIkQAIkQAIkoBoCzN8aMYAbN25EREQEfHx80LVr13wN4Llz51C3bl307dsX77//vhI7YMAArFixQokX18qVK9G9e3cIE9iiRQvMnTsXCxYsQHR0NCpVqqSTSCkgnTCxEAmQAAmQAAmoigDzt0YM4MOqsbCwyNcAjhw5EmvXrsWJEydyQ8Xs39GjR7F3717lv/n5+SmGcvbs2bllateurcwsjh8/XiehUkA6YWIhEiABEiABElAVAeZvEzWAgYGBaNSoEaZOnZorOPHa+PXXX0dycjKys7Ph4OCAVatWoXPnzrllBg8ejCNHjkC8Ps7rSk1NhfiTc+WcJcij4FT1XLMxJEACgPLv3Lmb93H0UgJOXEmCpYUFnOytUdzWCo72NnC0s4KjnQ2K21kp/138vYyTHawsLciPBEyeAA2giRrAGjVqoGfPnvj8889zRbxnzx7lVW98fLzyD6O7u7vyarh58+a5ZcaNG4clS5YgNjY2T/GPGjUKo0ePfuJnNIAm/28FO0gCqidw814qjl5MwJH//RF/v5uSUaB2lypui+dqu+H5um5oXq007G2sChTPwiSgFQI0gCZsAHv16oXPPvssV4vC7LVs2VJZ8JGVlaUYQGEK/f39c8t8++23WLZsGWJiYjgDqJWnmO0kATMlIH6R3X7iOtYcuYwjFxJwOeHBEyRsrS1Rt4Iz6rm7wNLSAvdTM3A/NRNJyv9m4F5KBu6J//3fn8ys7Nw6xExhUK2yaOfthuBaZeFsb2OmpNltUyRAA2iiBtBQr4AffwgoIFP8Z4F9IgF1E8jIzML6Y1cwK/QMYq8l5TbWwgKoXsYRDTxc0fB/f2qWc4KNlaVOHUrPzML+s7exJfoqtkRdw9W7KblxNlYWyozg83XK4fk6bijlaKdTnSxEAmolwPxtogZQLAJZt26dsqI35/rggw+U7/seXgTSuHFjZRVwzuXt7Y2OHTtyEYhan1i2iwTMmEBKeiZ+i7yEeTvP4sLtZIWEo501uvlVQlCNMqhX0QVOepqly8rKxj+XE7E56qry5+yN+7nki9lY4YOgaugXWJWviM1Yj1rvOg2gRgzgvXv3cPr0aUVvYnHH5MmTERwcjJIlSypbtohXvZcvX8bSpUuVMjnbwIgtYMRWMML0iVXAeW0DM2fOHOU18Lx58zB//nxl38DKlSvrpG0KSCdMLEQCJCBBQLye/XnfeSzYfQ43kv5dhFayuC3ea+GJ7v6ecClm+Fezp68nYXPUNfz1zxWcuHJXaYO7azF82qEWXqpfHmJ3Bl4koCUCzN8aMYBhYWGK4Xv8evfdd7F48WJlwUdcXBxEuZxLrOQdOnRo7kbQYlYwr42gJ0yYoHwXKPYNDAkJgXh9rOtFAelKiuVIgAQKSuDO/TQsijiHxXvichdzVHCxR9/AqnizaSUUsy36BRriu0NhAsdvOIH4xH9fETf1LIGvXqqjzEDyIgGtEGD+1ogBVKugKCC1jgzbRQLaJrDz5A0M+/UoxMpecVUtUxwftKqGjg3dIRZ2GPt6kJapvIqeHX4aKelZEBOAr/pUxIj2NVHWyd7YzeP9SSBfAszfNID5iuRZBSggKXwMJgESeIxAWkYWJm2JxdydZ5WfVC/riOFta6BdnXKq3J/vSuIDfL8xBn8ciVfaK1YOD2xdHe+1qMLvA6luVRNg/qYBlBIoBSSFj8EkQAIPEYi7eR+DfjmMfy4lKv+1e7PK+L8Xa2vCSB26cAej10Ur+xCKq3IpB8zs5oO67nwtTJGrkwDzNw2glDIpICl8DCYBEvgfgTWHL+GLNcdxPy1TWdTxfdf6aF+3nKb4iJXDaw5fxvebYnA9KRVitfDk1xugQ73ymuoHG2seBJi/aQCllE4BSeFjMAmYPQGxwverP45j9eHLCgvfKiUx5Y2GqOBaTLNsEh+k48Plh7Dr1E2lD0Oe88Kg1l7KRtS8SEAtBJi/aQCltEgBSeFjMAmYNYF/LiVg0IrDiLuVDOGNhjxXAwODq6vyW7+CDpTYrHrchhgsjDinhL5Qrxx+eK0BHGytC1oVy5OAQQgwf9MASgmLApLCx2ASMEsCYiuVhRFx+G7jCaRnZkNs7TL1rUZo6lnS5Hj8evAi/u+PY0o/vcs7Y/67TZT9A3mRgLEJMH/TAEppkAKSwsdgEjA7AsL8/bAlFjNDzyh971C3HL7rUh8uDobfzNlYsA/G3Ub/ZZG4dT8NpR1tMbd7YzSubHpm11h8ed/CEWD+pgEsnHL+F0UBSeFjMAmYFQFh/r5ZfwI/7v73tehnHWopx6mZwykal+4ko+/SSOUUEVsrS3zbuS5ea+JhVuPPzqqLAPM3DaCUIikgKXwMJgGzISBWyH619jh+2ndB6fPYjnWUY9zM6bqfmoHhvx7FpqirSrd7t6yCz1+obRLfPJrTOJpKX5m/aQCltEwBSeFjMAmYBYHMrGx8vvoYVv59UTkx47su9fBG00pm0ffHOymM8JTtpzBt+ynlR1183PHDqw24Qtgs1WDcTjN/0wBKKZACksLHYBIweQJiNezHq44qJ2WIlb6TXm+Azo0qmny/8+vg2qPxGLryCIQ5fte/Mka9UscsXoXnx4U/LzoCzN80gFJqo4Ck8DGYBEyaQHpmFgb/chgbjl2FtaUFpr7ZCC/W56bIOYMuNr8W5x1nZwMDg6thxPO1TFoP7Jy6CDB/0wBKKZICksLHYBIwWQKpGZkY+PNhbDtxTVn0MPNtH7T1djPZ/ha2Yz/tO48v/jiuhI9sXwsfBFUrbFWMI4ECEWD+pgEskGAeL0wBSeFjMAmYJIGU9Ez0WxaJnSdvwM7aUtn2JKhmWZPsqz46NSf8DL7bGKNUZY6LY/TBkHUUnADzNw1gwVXzUAQFJIWPwSRgcgSE+Xtv8UHsOXNLOQv3x3eboHn10ibXT3136IfNsZgRelqpVpwf3MWH30nqmzHre5QA8zcNoNQzQQFJ4WMwCZgUAbHP30crDuOvf67A0c4ai3o1NcnTPQwxaILd6HXRWLwnTtkWZmY3H7SvW84Qt2KdJKAQYP6mAZR6FCggKXwMJgGTIjB12ymEbDupLPhY1tsP/tVKmVT/DN0ZsUXMiN/+we+HLinfTf7YswkCvMoY+ras30wJMH/TAEpJnwKSwsdgEjAZAn/9E48Plx9W+vN9V/Pd5092QMW2OWIWdePxq8or9GW9fdHEBM9IluXEeHkCzN80gFIqooCk8DGYBEyCwNGLCXh97l6kZmShT8sq+OIlb5Pol7E6IVZQi2PjxCIaJztrrOjXDHXdXYzVHN7XRAkwf9MASkmbApLCx2AS0DyBK4kP0HFGBK4npaJ1rbKY36MJjzbTw6g+SMvEuwsP4EDcbVRwsce6j1qilKOdHmpmFSTwLwHmbxpAqWeBApLCx2AS0DSB5LQMvDZnL6Li76KmmxN++8AfTvY2mu6Tmhp/NyVdMdfnbt5Hi+qlsPQ9P5prNQ2QxtvC/E0DKCVhCkgKH4NJQLMExIKFAT8fwqaoqyhV3BZ/DGwBj5IOmu2PWhseezUJnWZG4EF6JgYEVcMn7XlaiFrHSmvtYv6mAZTSLAUkhY/BJKBZAjn71onVqsv7+nGhggFHUpwbPGjFvwtsxKbaz9fh9jAGxG02VTN/0wBKiZ0CksLHYBLQJAFxhu3QlUeVtk96rQG6NuamxYYeyDHrorEw4pyyv+LaD1ugahlHQ9+S9Zs4AeZvGkApiVNAUvgYTAKaIxB5/g7emrcPaZlZyrm14vxaXoYnkJ6Zhbfn71cWhdRwc8SaAS1Q3M7a8DfmHUyWAPM3DaCUuCkgKXwMJgFNEbicIFb87sbNe2lo5+2GOe80hqWlhab6oOXGXk9KwUvTdisrrl+qXx7T32oECwvy1/KYGrPtzN8aMoCzZs3CxIkTceXKFdSpUwdTpkxBQEBAnvoJCgpCeHj4Ez974YUXsH79euW/9+zZE0uWLHmkjJ+fH/bt26ezJikgnVGxIAlomoDYoPit+ftwMO4OvMs7Y1V/f85AGWFED8bdVmZgM7Ky8eVL3ujdsooRWsFbmgIB5m+NGMCVK1eie/fuECawRYsWmDt3LhYsWIDo6GhUqlTpCS3evn0baWlpuf/91q1baNCggRIjjF+OAbx27RoWLVqUW87W1hYlS5bUWdsUkM6oWJAENE1g2vZTmLz1pPIN2oZBAahUiit+jTWgiyLOKecGizODV/RtBt8quv+bbaw2877qI8D8rREDKGbmfHx8MHv27FwV1a5dG506dcL48ePzVZaYLfzqq6+U2cPixYvnGsCEhAT88ccf+cY/rQAFVGh0DCQBzRAQ3/2Jkz4ys7Ix+fUG6OLDRR/GHLzs7GwMWXkEfx6JRxknO6z/qCXKOtsbs0m8twYJMH9rwACKmTwHBwesWrUKnTt3zpXZ4MGDceTIkTxf9T6uxXr16sHf3x/z5s3L/ZGYCRTmT8z6ubq6olWrVvj2229RtmzZp0o5NTUV4k/OJQTk4eGBxMREODs7a/ARYJNJgASeRSApJR0vTNuFi7cf4JUGFTD1zYb87kwFkhGbcHeZtQcxV5PQpHIJLO/bDLbWlipoGZugFQI0gBowgPHx8XB3d0dERASaN2+eq61x48Yp3/DFxsY+U28HDhyAmEHcv38/fH19c8uK18qOjo6oXLkyzp07hy+//BIZGRmIjIyEnV3eRw6NGjUKo0ePfuJ+NIBaeeTZThIoGIFhvx7B6kOX4e5aDBuHBMCZJ30UDKABS8fdvI+XZ+xGUkoGerXwxNcv1zHg3Vi1qRGgAdSQAdyzZ48yi5dzidm6ZcuWISYm5pm6fP/99yFijx079sxy4vWwMIO//PILunTpkmdZzgCa2j8B7A8JPJ1AzgbEYqHvr+/7c7NnFYpla/Q19F36t9Kyn/v4oUX10ipsJZukRgI0gBowgDKvgJOTk1G+fHmMGTMG4pVxfpeXlxf69OmDkSNH5ldU+TkFpBMmFiIBzRG4dCcZHabuUmaXBrXxwrC2NTTXB3Np8Jd/HMeyfec5S2suA66nfjJ/a8AAirEWr3AbN26srALOuby9vdGxY8dnLgJZvHgx+vfvj8uXL6NUqVLPlI1YKSxeNYvvBHv06KGTxCggnTCxEAloisDDW740quSKVe/7w9qK35epdRDvp2Yo32mev5WM15tUxIRXG6i1qWyXiggwf2vEAOZsAzNnzpzcxRzz589HVFSU8tpWGDZh3h5fESz2CRT/XbzWffi6d+8exPd8Xbt2VWYI4+Li8Pnnn+PChQs4ceIEnJycdJIpBaQTJhYiAU0R4JYvmhoupbFif0CxUjs7G/jx3SZoU9tNe51gi4uUAPO3RgygUIWY/ZswYYKylUvdunUREhKCwMBARTBi42dPT0+IGb+c6+TJk6hZsya2bNmCtm3bPiKsBw8eKFvIHD58GGIrGGECg4ODMXbsWGVVr64XBaQrKZYjAW0Q4JYv2hinvFr57fpozN91TtkaZsuQQJQobqvdzrDlBifA/K0hA2hwNRTiBhRQIaAxhARUSoBbvqh0YHRsVkp6Jl6ctgtnbtxXtuyZ9lYjHSNZzBwJMH/TAErpngKSwsdgElAVgWErj2D1YW75oqpBKWBjjlxMQNfZe5RNu2e97YMX6pUvYA0sbi4EmL9pAKW0TgFJ4WMwCaiGwLqj8fhoxWFwyxfVDEmhG/LD5ljMCD2NksVtsXlIoPJKmBcJPE6A+ZsGUOqpoICk8DGYBFRB4Pb9NDw3ORzifwe1ro5h7Wqqol1sROEIpGVk4ZUZu5VTQtp5u2Fu98Y8vaVwKE06ivmbBlBK4BSQFD4Gk4AqCHy86ih+i7yEmm5OWPdRSx4ppopRkWtEdPxddJy5G+mZ2Qh5owE6N+L5zXJETS+a+ZsGUErVFJAUPgaTgNEJ7Dl9E90W7IeFBfBb/+ZoXLmE0dvEBuiHwIwdp/DDlpNwsrfG1qGtUM7FXj8VsxaTIMD8TQMoJWQKSAofg0nAqATEqtH2U3Yi7lYyujerjLGd6hq1Pby5fgmIDb3FgpCjlxLRqkYZLO7VlK+C9YtY07Uxf9MASgmYApLCx2ASMCqBnMUCbs522DqsFZztbYzaHt5c/wROX0/CC9N2Q3wXOL5LPbzlW0n/N2GNmiTA/E0DKCVcCkgKH4NJwGgEYq8mKXvGZWRlY847jdG+bjmjtYU3NiyBBbvO4pv1J1Dc1grbhrdCeZdihr0ha9cEAeZvGkApoVJAUvgYTAJGIZCVlY1X5+zBoQsJaOvthvk9mhilHbxp0RAQewK+9r/xfrF+eczs5lM0N+ZdVE2A+ZsGUEqgFJAUPgaTgFEILNt3Hl/+cZwzQkahb5ybRsUn4uXpu5GVDSx9zxeBNcoYpyG8q2oIMH/TAEqJkQKSwsdgEihyAlcTU9B2cjiSUjMw+pU6eLe5Z5G3gTc0DoFRa6OweE8cqpQujk1DAmBnbWWchvCuqiDA/E0DKCVECkgKH4NJoMgJ9F8WiU1RV9HQwxW/f9AcVuLoD15mQeBuSjraTArHjaRUfNyuBj5s7WUW/WYn8ybA/E0DKPVsUEBS+BhMAkVKYEvUVfRbFglrSwtlw+fa5Z2L9P68mfEJ/HnkMgb/cgR21pbYNqwVPEo6GL9RbIFRCDB/0wBKCY8CksLHYBIoMgJJKeloO3knrt5NwQdB1TCyfa0iuzdvpB4C2dnZ6DZ/P/aevYXnapfFgnebqqdxbEmREmD+pgGUEhwFJIWPwSRQZARyvv+qXMoBm4cEwt6G338VGXyV3UjsDdh+yr9bAC3o0QTPebuprIVsTlEQYP6mAZTSGQUkhY/BJFAkBA5fuIMus/cgOxv4qbcfWnqVLpL78ibqJfDdxhjMCT+DiiWKKcfEFbPlLwTqHS3DtIz5mwZQSlkUkBQ+BpOAwQmIPeDE9h/RV+6iSyN3TH6jocHvyRuon0ByWgaemxSO+MQUfNS6Ooa3q6n+RrOFeiXA/E0DKCUoCkgKH4NJwOAElu+/gM/XHIOzvTVCPw5CKUc7g9+TN9AGgU3Hr6D/T4dga2WpbAtTtYyjNhrOVuqFAPM3DaCUkCggKXwMJgGDEhDbfgRPDMOt+2n46iVvvNeyikHvx8q1RUAsCOm1+CDCYm8gwKu0skG0hQW3BdLWKBa+tczfNICFVw8ACkgKH4NJwKAEvl0fjfm7zqFaGbHxbyBsrCwNej9Wrj0C52/dR9uQnUjLyFKOiBNHxfEyDwLM3zSAUkqngKTwMZgEDEbg3M37aBcSjvTMbCzq1RTBNcsa7F6sWNsEQraexNTtp1DO2R7bhreCo521tjvE1utEgPmbBlAnoTytEAUkhY/BJGAwAn2WHMS2E9cRVLMMFvfyNdh9WLH2CaSkZ6JdyE5cuJ2MvgFV8H8vemu/U+xBvgSYv2kA8xXJswpQQFL4GEwCBiGw8+QN9Fh4QDnxQ7z6rV6WH/cbBLQJVRoaex29Fh1UjgbcNDgAXm5OJtQ7diUvAszfNIBSTwYFJIWPwSSgdwIZmVnoMHUXTl2/h14tPPH1y3X0fg9WaJoE+i39G1uiryG4Zhks4qyxaQ7yQ71i/qYBlBI5BSSFj8EkoHcCS/bE4eu1USjhYIOwj4Ph4mCj93uwQtMkIL4bbTs5XDkhhBuGm+YYP9wr5m8aQCmVU0BS+BhMAnolkJCchqAfwpCQnI6xneqie7PKeq2flZk+gZwjA2uVc8L6QQHKK2FepkmA+VtDBnDWrFmYOHEirly5gjp16mDKlCkICAjIU5mLFy9Gr169nvjZgwcPYG9vn/vfC1JnXjeigEzzHwb2SpsEcpJ3TTeRvFvCmtu+aHMgjdjqO/fT0GpiKO6mZGDCq/XxehMPI7aGtzYkAeZvjRjAlStXonv37hCGrUWLFpg7dy4WLFiA6OhoVKpU6QmNCAM4ePBgxMbGPvKzcuXK5f7/gtZJA2jIR5F1k4AcgVPXktB+6i6Io99+7uOHFtV53q8cUfONnr/zLL7dcAJlnewQNiIIDrbcFsYU1UADqBED6OfnBx8fH8yePTtXh7Vr10anTp0wfvz4PA3gkCFDkJCQ8FTdFrROGkBT/CeAfTIFAuJEB7Hqd9epm2jr7Yb5PZqYQrfYByMRSM3IxHOTw3Hx9gMMec4LQ56rYaSW8LaGJEADqAEDmJaWBgcHB6xatQqdO3fO1YOY4Tty5AjCw8PzNIB9+vSBu7s7MjMz0bBhQ4wdOxaNGjVSyhamThpAQz6KrJsECk9g+4lr6L3kb9hYWWDr0FbwLF288JUxkgQA/PVPPD5cfhjFbKwQPiIIZZ3/+3SIgEyDAA2gBgxgfHy8YuQiIiLQvHnzXOWNGzcOS5YseeI1ryiwb98+nD59GvXq1VOOa5s6dSo2bNiAo0ePwsvLC4WpU9Sbmpqq/Mm5RN0eHh5ITEyEs7OzaTwV7AUJaIiAOMLr+Sk7IVZwvh9YFZ+9UFtDrWdT1UpAzCp3nb0Hhy4k4I0mHvj+1fpqbSrbVUgCNIAaMoB79uyBv79/7lB/++23WLZsGWJiYvId/qysLOUVcmBgIKZNm5ZrAAta56hRozB69Ogn7kcDmO8QsAAJGITAgl1n8c36EyjtaIvQj4PgZM9tXwwC2gwrjTx/RzGBFhbAhkEBqF2ev+SbkgxoADVgAPX1urZv3764dOkSNm7cWOhXwJwBNKXHn33ROgGxYjNwYiiSUjLwfdd6eKPpkwvCtN5Htt+4BAb+fAjrj11BgFdpLOvtZ9zG8O56JUADqAEDKEZcLNho3Lixsgo45/L29kbHjh3zXATyuErEdL6vr6/ySnjhwoXKj2XrFHVQQHp9HlkZCRSIwDd/RWPB7nPgnm0FwsbCBSBw4VaysiAkLTMLi3s1RVDNsgWIZlE1E2D+1ogBzNmyZc6cOcpr4Hnz5mH+/PmIiopC5cqV0aNHD+U7wZwVweI1bbNmzZTv/cQgi9e+4nWx+I5QGEFx5erzn1EAACAASURBVFenLsKlgHShxDIkoH8ClxMeIHhimJKYF/VqimAmZv1DZo0KgW/XR2P+rnOo4eaovArm/pKmIQzmb40YQCE3Mfs3YcIEZSPounXrIiQkRPmmT1xBQUHw9PSE2P9PXEOHDsXq1atx9epVuLi4KKt/xfd7D39DmF+dukicAtKFEsuQgP4JfLzqKH6LvAS/KiXxS79msBAfavEiAQMQSExOR6sfQpUTZsZ3qYe3fPmpgQEwF3mVzN8aMoBFrg4dbkgB6QCJRUhAzwROik2fp+xEVjawekBz+FQqoec7sDoSeJTAwt3nMOavaJR2/HdzaEc7bg6tdY0wf9MASmmYApLCx2ASKBSBPkv+xrYT1/B8HTfM7c5NnwsFkUEFIiC2G2oXEo64W8n4qHV1DG9Xs0DxLKw+AszfNIBSqqSApPAxmAQKTODvuNt4dc5eWFoAW4YGonpZpwLXwQASKAyBTcevov9PkbC3sVS2HCrvUqww1TBGJQSYv2kApaRIAUnhYzAJFIiAWM3/+ty9OBh3h5vzFogcC+uDgNDfG3P34UDcbepPH0CNXAfzNw2glAQpICl8DCaBAhHIOfLNztpS+Q6LMzAFwsfCeiCQszm0laWFMgNdrYyjHmplFcYgwPxNAyilOwpICh+DSUBnAplZ2Xhh6i7EXkvikW86U2NBQxDos+Qgtp24jpfql8eMbj6GuAXrLAICzN80gFIyo4Ck8DGYBHQm8HvkJQxfdRTO9tbY+UkwXB1sdY5lQRLQJ4ETV+6iw9RdSpXrB7VEnQou+qyedRURAeZvGkApqVFAUvgYTAI6EUjNyETrH8IhNn8e2b4WPgiqplMcC5GAoQgMWnEYa4/Go3WtsljYs6mhbsN6DUiA+ZsGUEpeFJAUPgaTgE4Eftx9DmP/ioabsx3CPg5GMVsrneJYiAQMReDczfvKEXHi04Tf+vujiWdJQ92K9RqIAPM3DaCUtCggKXwMJoF8CSSlpKPVxDDcvp/GUxjypcUCRUngs9X/YMWBi/CtUhIreRpNUaLXy72Yv2kApYREAUnhYzAJ5Etg8pZYTNtxGlXLFMeWIYE8hzVfYixQVATiEx4g6IcwiE2il77ni8AaZYrq1ryPHggwf9MASsmIApLCx2ASeCaBG0mpaDUxFMlpmZj9tg861CtPYiSgKgLi0wTxiUI9dxes/bAFz6RW1eg8uzHM3zSAUnKlgKTwMZgEnkngqz+PY+ne82jg4Yo/BjRncqVeVEfg1r1UBE4Ixf20TMx5xwft6/KXFNUN0lMaxPxNAyilVQpICh+DSeCpBC7cSkbrSWHIyMrG8r5+aF6tNGmRgCoJ5HymUL2sIzYPCYTYJJqX+gkwf9MASqmUApLCx2ASeCqBj1cdxW+RlxDgVRrLevuRFAmolsDdlHQEfB+KxAfpmPRaA3RtXFG1bWXD/iPA/E0DKPU8UEBS+BhMAnkSEFtstJkUhqxs4I+BLdDQw5WkSEDVBOaEn8F3G2NQsUQx7BgeBFtrS1W3l40DmL9pAKWeAwpICh+DSSBPAkNXHsGaw5fRplZZ/MhNdqkSDRB4kJaJwImhEAuXxnasg+7+nhpotXk3kfmbBlDqCaCApPAxmASeIHD6ehLahuxEdjbw10ctUdedx2xRJtogsGxvHL78MwplnOywcwQ3LFf7qDF/0wBKaZQCksLHYBJ4gsCHyw/hr3+uoJ23G+b1aEJCJKAZAmI/QLFw6dKdB/i0Qy30b8UjC9U8eMzfNIBS+qSApPAxmAQeIRBz9S46TN2lzP5tHByA2uWdSYgENEXg98hLGL7qKFyK2WDXyGA429toqv3m1FjmbxpAKb1TQFL4GEwCjxD44KdIbDx+FS/WK4+Zb/uQDglojoA4G/j5KTtx+vo9DGpdHcPa1dRcH8ylwczfNIBSWqeApPAxmARyCUTFJ+LFabthYQFlL7Uabk6kQwKaJLDx2BV88PMhONpZY/fIYLg62GqyH6beaOZvGkApjVNAUvgYTAK5BPou/Rtbo6/hlQYVMO2tRiRDApolkJWVjRem7ULM1SR81Lo6hnMWUJVjyfxNAyglTApICh+DSUAh8M+lBLwyIwLiAIUtQ1tBnKjAiwS0TGDT8Svo/xNnAdU8hszfNIBS+qSApPAxmAQUAr0WHUBo7A10aeSOyW80JBUS0DwBMQv44vTdOHHlLj4Mro6Pn+e3gGobVOZvGkApTVJAUvgYTAI4dOEOuszao5yfun1YK3iWLk4qJGASBDYdv4r+P0Uq3wLu+iQYJYrzW0A1DSzzNw2glB4pICl8DCYBdP9xP3aduonXm1TEhFcbkAgJmAwBzgKqeyiZvzVkAGfNmoWJEyfiypUrqFOnDqZMmYKAgIA8FTZ//nwsXboUx48fV37euHFjjBs3Dr6+vrnle/bsiSVLljwS7+fnh3379umsWgpIZ1QsSAJPEDgYdxuvzdkLa0sLhH4cBI+SDqREAiZFgLOA6h1O5m+NGMCVK1eie/fuECawRYsWmDt3LhYsWIDo6GhUqlTpCYW9/fbbSrnmzZvD3t4eEyZMwOrVqxEVFQV3d3elvDCA165dw6JFi3LjbW1tUbJkSZ0VSwHpjIoFSeAJAt3m78OeM7fwlm8ljO9Sj4RIwOQIZGdnK9sbRV+5i4HB1TDi+Vom10etdoj5WyMGUMzM+fj4YPbs2blaq127Njp16oTx48fnq7/MzEyUKFECM2bMQI8ePXINYEJCAv744498459WgAIqNDoGmjmBvcL4zd8HGysLhI0IhrtrMTMnwu6bKoHNUVfx/rJIFLe1wu6RrfktoEoGmvlbAwYwLS0NDg4OWLVqFTp37pwrncGDB+PIkSMIDw/PV05JSUkoW7asUsdLL72UawCF+ROzfq6urmjVqhW+/fZbpZyuFwWkKymWI4H/CIhZkTfm7sOBuNvo3qwyxnaqSzwkYLIEOAuozqFl/taAAYyPj1de20ZERCivdHMu8U2f+IYvNjY2X3UNHDgQmzdvVr4JFK+ExSVeKzs6OqJy5co4d+4cvvzyS2RkZCAyMhJ2dnZ51pmamgrxJ+cSAvLw8EBiYiKcnXluab4DwQIkAGD3qZt458f9sLW2xM4RwSjn8u8zyYsETJXAlqir6MdZQFUNLw2ghgzgnj174O/vnysgMVu3bNkyxMTEPFNU4vu/7777DmFhYahfv/5Ty4rFJcIM/vLLL+jSpUue5UaNGoXRo0c/8TMaQFU912yMigmI2ZDX5+7Fwbg76NncE6NeqaPi1rJpJKAfAg/PAg4IqoZP2vNbQP2QLXwtNIAaMIAyr4B/+OEHfPPNN9i2bRuaNGmSr1K8vLzQp08fjBw5kjOA+dJiARIoOIGcb//E7J/YG83NmbN/BafICC0SeHgWcNfI1ijJfQGNOow0gBowgEIhYhGI2MpFrALOuby9vdGxY8enLgIRW8YI8yde/TZr1ixfod26dUt51Txv3rzchSL5BVFA+RHiz0ngUQJvzduHvWdvoYd/ZYzpyG//qA/zISBmAV+avhtR8XfBWUDjjzvzt0YMYM42MHPmzFFeAwuTJvb6E9u6iNe2YmWvMG85K4LFa1/xTd/y5cuV7WByLvHNn/hz7949iNe5Xbt2Rfny5REXF4fPP/8cFy5cwIkTJ+Dk5KSTOikgnTCxEAkoBA6cu628/hUrf8NHBKMCV/5SGWZGYGv0NfRd+reyIpizgMYdfOZvjRhAIRMx+yeMnfhWr27duggJCUFgYKCioKCgIHh6emLx4sXK/xd/P3/+/BPq+vrrrxXj9+DBA2ULmcOHD0NsBSNMYHBwMMaOHass6tD1ooB0JcVyJIDcUz+6+VXCuM7c94+aMD8CD88CfhBUDSP5LaDRRMD8rSEDaDSVPOPGFJAaR4VtUiOByPN30HX2Hp76ocbBYZuKlEDOLKDD//YF5LeARYo/92bM3zSAUsqjgKTwMdiMCPRcdABhsTfwRhMPfP/q01fjmxESdtVMCYhZwJdn7Mbxy3fRv1U1fNqBK4KNIQXmbxpAKd1RQFL4GGwmBI5eTEDHmRGwsrTAjuGtULlUcTPpObtJAnkT2BZ9DX2W/g0xCxjB00GMIhPmbxpAKeFRQFL4GGwmBHovPojtMdfR1aciJr3ewEx6zW6SwNMJPPwt4Eetq2N4u5rEVcQEmL9pAKUkRwFJ4WOwGRA4fjlR2frC0gLYNqwVqpZxNINes4skkD+BTcevoP9Ph+BkZ43dn7aGSzGb/INYQm8EmL9pAKXERAFJ4WOwGRDot/RvbIm+hk4NK2DKm43MoMfsIgnoRiArKxsdpu5C7LUkDGtbA4PaeOkWyFJ6IcD8TQMoJSQKSAofg02cQHT8XbwwbRcsLICtQwNRvaxu+2uaOBZ2jwRyCaw9Go9BKw7D1cEGu0e2hqOdNekUEQHmbxpAKalRQFL4GGziBAb8HIkNx67ipfrlMaObj4n3lt0jgYITyMzKRtuQcJy9cV/ZE1DsDciraAgwf9MASimNApLCx2ATJhB7NQnPT9mp9HDzkEDULMfZPxMebnZNgsDvkZcwfNVRlCpui10jg+Fgy1lACZw6hzJ/0wDqLJa8ClJAUvgYbMIEPlpxGOuOxqND3XKY/U5jE+4pu0YCcgQyMrPQelI4LtxOxhcv1kafgKpyFTJaJwLM3zSAOgnlaYUoICl8DDZRAqev31Nea2VnA+sHtUSdCi4m2lN2iwT0Q+CXAxfw6epjKOtkh52fBMPexko/FbOWpxJg/qYBlHo8KCApfAw2UQJDVx7BmsOX0dbbDfN7NDHRXrJbJKA/AmkZWQiaGIr4xBSM6VgHPfw99Vc5a8qTAPM3DaDUo0EBSeFjsAkSOHfzPtpMCkNWNrDuw5aoV5GzfyY4zOySAQgs3RuHr/6MQgUXe4SNCIattaUB7sIqcwgwf9MASj0NFJAUPgabIIERq45iVeQltKlVFj/2bGqCPWSXSMAwBFLSMxE4IRTXk1Ixvks9vOVbyTA3Yq0KAeZvGkCpR4ECksLHYBMjcPF2MoJ/CENGVjbWDGiORpVKmFgP2R0SMCyBBbvO4pv1J+BRshh2DA+CjRVnAQ1FnPmbBlBKWxSQFD4GmxiB/1tzDD/vv4AAr9JY1tvPxHrH7pCA4Qk8SMtEy+934Nb9NPzwWgO82rii4W9qpndg/qYBlJI+BSSFj8EmROBqYory+iotMwsr+zWDX9VSJtQ7doUEio7A7LAz+H5TDKqWLo6tw1rBShykzUvvBJi/aQClREUBSeFjsAkRGLMuGgsjzsHXsyR+7e9vQj1jV0igaAncS81QZgETktMx9c2G6NjQvWgbYCZ3Y/6mAZSSOgUkhY/BJkLg5r1UJWGlpGdh6Xu+CKxRxkR6xm6QgHEITNt+CpO3nkQNN0dsGhwIS84C6n0gmL9pAKVERQFJ4WOwiRAQr6vEa6sGFV3wx8AWsLDgKysTGVp2w0gEEh+ko+V3O5CUmoHZb/ugQ73yRmqJ6d6W+ZsGUErdFJAUPgabAIGE5DS0+G4H7qdlYkGPJnjO280EesUukIDxCUzaEovpO07Du7yzcqIOf7HS75gwf9MASimKApLCx2ATIDBl20lM2XYKtcs7YwOTlAmMKLugFgJ37qcpn1aIX65+fLcJ2tTmL1f6HBvmbxpAKT1RQFL4GKxxAkkp6Wj5fSjE66qZ3XzwYn2+ptL4kLL5KiMwfuMJzA0/i4YersrempwF1N8AMX/TAEqpiQKSwsdgjRPI2a6iWpni2DKU21VofDjZfBUSuJH07wKr1Iws/NTbDy29SquwldpsEvM3DaCUcikgKXwM1jCBhzesnfx6A3Tx4Ya1Gh5ONl3FBEatjcLiPXFoVrUkfunHLZb0NVTM3zSAUlqigKTwMVjDBBbuPocxf0UrR1aFDg+CNY+s0vBosulqJnAl8YGyyXp6ZjZW9fdHU8+Sam6uZtrG/E0DKCVWCkgKH4M1SiA1499D66/d5aH1Gh1CNltjBD5b/Q9WHLiIVjXKYMl7vhprvTqby/ytMQM4a9YsTJw4EVeuXEGdOnUwZcoUBAQEPFVdv//+O7788kucOXMG1apVw7fffovOnTvnls/Ozsbo0aMxb9483LlzB35+fpg5c6ZSty4XBaQLJZYxNQI/7z+P/1tzHOVd7BE2Igh21lam1kX2hwRUReDCrWQETwpDZlY21n7YAvUruqqqfVpsDPO3hgzgypUr0b17dwgT2KJFC8ydOxcLFixAdHQ0KlWq9IT+9u7dq5jDsWPHKqZvzZo1+Oqrr7B7927F6Inr+++/V0zh4sWLUaNGDXzzzTfYuXMnYmNj4eTklK+mKaB8EbGAiRFIz8xC8A9huHTnAUa97I2eLaqYWA/ZHRJQJ4FhK49g9eHLaOfthnk9mqizkRpqFfO3hgygMG0+Pj6YPXt2rsRq166NTp06Yfz48U/I7o033oAY4I0bN+b+rH379ihRogRWrFgBMftXoUIFDBkyBCNHjlTKpKamws3NTTGG77//fr5SpoDyRcQCJkbgt8hL+HjVUZR2tMXuka1hb8PZPxMbYnZHpQROX09C25CdyM4GNg0JQK1yziptqTaaxfytEQOYlpYGBwcHrFq16pFXuIMHD8aRI0cQHh7+hOLErODQoUOVPzlXSEiI8tr4/PnzOHv2rPJa+NChQ2jUqFFumY4dO8LV1RVLlizJV8UUUL6IWMCECIjXT20nh+Pszfv4rEMtvN+qmgn1jl0hAfUTGPjzIaw/dgUvN6iA6W/9l7fU33L1tZD5WyMGMD4+Hu7u7oiIiEDz5s1zlTRu3DjFqIlXto9ftra2yqvdbt265f5o+fLl6NWrlzLTt2fPHuVV8uXLl5WZwJyrX79+ikHcvHnzE3WKOPEn5xIC8vDwQGJiIpyd+duY+h5xtkifBNYdjcdHKw7D1cFGmf1ztLPWZ/WsiwRIIB8C0fF38cK0XRDHbW8f1gpVyziSWSEJ0ABqzAAK0+bv/98+SOL7vWXLliEmJiZPAyjM4VtvvZX7s59//hm9e/dGSkpKrgEU5rJ8+f9OMOjbty8uXryITZs2PVHnqFGjlEUjj180gIV8AhmmGQJZWdnoMHUXYq8lYVjbGhjUxkszbWdDScCUCPRZchDbTlzHa40rYuJrDUypa0XaFxpAjRhAtbwC5gxgkT6fvJmKCGyOuor3l0XCyc4auz9tDZdiNipqHZtCAuZD4PCFO+g8aw+sLS0Q+nEQPEo6mE/n9dhTGkCNGEAx5mIRSOPGjZVVwDmXt7c3xDd7T1sEkpSUhA0bNuSW79Chg/J938OLQMQ3gp988olSRhjNsmXLchGIHh8yVqV9AmLB1CszInDsciI+DK6Oj5+vqf1OsQckoGEC7yzYj92nb+KdZpXwTad6Gu6J8ZpOA6ghA5izDcycOXOU18Bi77758+cjKioKlStXRo8ePZTvBHPMoHhdHBgYqGzzIkzin3/+iS+++OKJbWBE+UWLFsHLywvim8KwsDBuA2O8Z5J3ViGBsNjr6LnoIIrZWCHi09YoWdxWha1kk0jAfAjsO3sLb87bB1srS+waGQw3Z3vz6byeekoDqCEDKMZczP5NmDBB2Qi6bt26EKt6hckTV1BQEDw9PZWFHznXb7/9ppi+nBW/wgx26dIl9+c5G0GLPQUf3gha1K3LRQHpQolltExAPCOvztmLyPN30DegCv7vRW8td4dtJwGTICCey9fn7sXBuDvo3bIKvnyJz2VBB5b5W2MGsKADbOjyFJChCbN+YxPYc+Ymus3fD1trS+z+JBhlOdNg7CHh/UlAIRB+8gbeXXgA9jaWiBjZGqUc7UimAASYv2kACyCXJ4tSQFL4GKwBAt3m78OeM7fQw78yxnTUbWZcA91iE0lA8wTELGDHmRH451IiBgRVwyfta2m+T0XZAeZvGkApvVFAUvgYrHICkedvo+vsvbCxskDYiGC4uxZTeYvZPBIwLwJboq6i37JIZU9OMQvo4sDV+boqgPmbBlBXreRZjgKSwsdglRPotegAQmNv4M2mHviua32Vt5bNIwHzIyD25xQbQ8dcTcLQ52pg8HPcn1NXFTB/0wDqqhUaQClSDNYageOXE/HS9N2wtICy11jlUsW11gW2lwTMgkDOCT1ib87dI4PhZM9ZQF0GngaQBlAXnTy1DAUkhY/BKibw/rK/sTnqGjo3ckfIGw1V3FI2jQTMm4ByRndIOM7euI9P2tfEgKDq5g1Ex94zf9MA6iiVvItRQFL4GKxSArFXk/D8lJ3KeaNbhgTCy81JpS1ls0iABASB3yMvYfiqo8oenWIW0MGW53TnpwzmbxrA/DTyzJ9TQFL4GKxSAoNWHMbao/F4oV45zHq7sUpbyWaRAAnkEMjIzELrSeG4cDsZX7xYG30CqhJOPgSYv2kApR4SCkgKH4NVSODsjXt4bnI4srKB9YNaok4FFxW2kk0iARJ4nMAvBy7g09XHUNbJDjs/CYa9jRUhPYMA8zcNoNQDQgFJ4WOwCgmMWHUUqyIvoU2tsvixZ1MVtpBNIgESyItAWkYWgiaGIj4xBWM61kEPf0+CogF8pgYsssVukrwKRYAGsFDYGKRSAhdvJyP4hzBkZGVjzYDmaFSphEpbymaRAAnkRWDp3jh89WcUKrjYK3t3ihN8eOVNgPmbM4BSzwYFJIWPwSoj8H9rjuHn/RcQ4FUay3r7qax1bA4JkEB+BFLSMxE4IRTXk1LxXZd6eNO3Un4hZvtz5m8aQCnxU0BS+BisIgJXE1OUxJGWmYWV/ZrBr2opFbWOTSEBEtCVwIJdZ/HN+hOoVNIBO4a3grUVZwHzYsf8TQOo6zOVZzkKSAofg1VEYMy6aCyMOAdfz5L4tb+/ilrGppAACRSEQHJaBlp+H4rb99Mw6bUG6Nq4YkHCzaYs8zcNoJTYKSApfAxWCYEbSakImLADKelZWPqeLwJrlFFJy9gMEiCBwhCYFXYaEzbFomrp4tg6rBWsxJE+vB4hwPxNAyj1SFBAUvgYrBIC4zecwNydZ9HAwxV/DGgOC7EDNC8SIAHNEriXmoEW3+1A4oN0THurEV5pUEGzfTFUw5m/aQCltEUBSeFjsAoI3LqXqrwuepCeiYU9m6B1LTcVtIpNIAESkCUwddsphGw7iZpuTtg4OACWnAXkDOBjouI2MBJPGQ2gBDyGqoLA95tiMDvsDOq5u2Dthy04+6eKUWEjSECeQGJyOlp8vwNiNnDOO43Rvm45+UpNqAbmb84ASsmZApLCx2AjE7hzPw0tv9+B+2mZmN+jCdp6c/bPyEPC25OAXglM3ByDmaFnUKeCM/76qCV/wXuILvM3DaDUw0YBSeFjsJEJTNoSi+k7TsO7vLNy7Bu//TPygPD2JKBnAmIlsPglLzmNn3g8jpb5mwZQ6nGjgKTwMdiIBMTrIZEYkvh6yIijwFuTgOEJjNtwAvN2nkVDD1flhB/+ovcvc+ZvGkCpp48CksLHYCMSCNl6ElO3n0Ktck7YMIgfiBtxKHhrEjAogetJKQj4PhSpGVn4qbcfWnqVNuj9tFI58zcNoJRWKSApfAw2EoG7KenKFhFJKRmY2c0HL9Yvb6SW8LYkQAJFQWDU2igs3hOHpp4l8Ov7/pwF5AygIjuuApZ4+mgAJeAx1GgEpm0/hclbT8KrrCM2Dwnk9hBGGwnemASKhoBy1OPEUKRlZOHnPn5oUZ2zgMzfNIBSTx8FJIWPwUYgkJQivv0L5QaxRmDPW5KAMQlwFvBR+szfNIBSzyMFJIWPwUYgMDP0NCZujkW1MsWxZSiPiDLCEPCWJGAUAsos4IRQpGVmYXkfPzQ381lA5m8aQKkHkQKSwsfgIiZwP1UcEr8Dd5LTMeWNhujUyL2IW8DbkQAJGJPA138ex5K95+HrWRIr329m1t8CMn9rwADeuXMHgwYNwtq1a5Xn5pVXXsH06dPh6uqa53N0+/ZtfP3119iyZQsuXryI0qVLo1OnThg7dixcXFxyY/JaCj979mz0799f5+eTAtIZFQuqgMCc8DP4bmMMqogD4ocGwtrKUgWtYhNIgASKigBnAf8jzfytAQPYoUMHXLp0CfPmzVNGrl+/fvD09MS6devyfGaOHz+uGMCePXvC29sb58+fV0xd/fr18dtvvz1iABctWoT27dvn/jdhEIsVK6bzs0gB6YyKBY1MIDktQ9kK4tb9NEx6rQG6Nq5o5Bbx9iRAAsYgwFnAf6kzf6vcAJ44cUIxcfv27YOfn58yaOLv/v7+iImJQc2aNXV6flatWoV33nkH9+/fh7W1tRIjZgDXrFmjzA4W9qKACkuOcUVNYMGus/hm/QlUKumAHcNbcfavqAeA9yMBlRDgLCANYI4UVb0NzMKFCzFs2DAkJCQ88uiI178hISHo1auXTo/UggUL8Nlnn+HGjRuPzAC6u7sjJSUFVapUQe/evZXZRUtL3V+L0QDqhJ+FjEzgQVomAiaE4ua9VEzoWh+vN/Uwcot4exIgAWMSyJ0FrFISK/uZ57eAzN8qnwEcN24cFi9ejJMnTz7yrNSoUUMxf8LU5XfdunULPj4+6N69O7755pvc4uLvbdq0UV75bt++HV999ZVS3xdffPHUKlNTUyH+5FxCQB4eHkhMTISzs3N+TeHPScAoBBbuPocxf0WjYoliCP04CDb89s8o48CbkoBaCFxJfIBWE8L+XRHc1w/Nq5nfvoA0gEYygKNGjcLo0aOf+SwcPHhQWcixZMkSxMbGPlLWy8tLmbH79NNPn1mHGOB27dqhRIkSyiISGxubp5afNGkSxowZo5i5p11PazcNoFr+WWM7HieQkp6pbP1wPSkV47vUw1u+lQiJBEiABPDVn8exVKwINtNZQBpAIxnAmzdvQvx51iUWeixfvrzQr4CTkpLw/PPPw8HBAX/99Rfs7e2feb+IiAi0bNkSV69ehZubW55lOQPIe7CyxwAAIABJREFUfzW1RmBRxDmMXheNCi72CBsRDFtr3T9x0Fpf2V4SIAHdCZj7LCANoJEMoK4SzVkEsn//fvj6+iph4u/NmjV75iIQMbDC/NnZ2WHDhg2KCczvmjFjBkaMGKF8byjidLkoIF0osYyxCDz87d+4zvXQzY+zf8YaC96XBNRI4OFZQHFGsDldzN8qN4BCjGIbmPj4eMydO1fRplioUbly5dxtYC5fvqx8y7d06VLFJIqZv7Zt2yI5OVlZ5Vu8ePFcTZcpUwZWVlZKrJjpE6uJxTeAoaGhGD58uLJ1zNSpU3V+BiggnVGxoBEIzNt5BuM2xMCjZDHsGM5v/4wwBLwlCaiawMOzgCv6NoN/tVKqbq8+G8f8rQEDKDZ2fnwjaDFbl7MRdFxcnLKKV5i4oKAghIWFITg4OE+dnDt3TtlDcNOmTcqCj9OnTyMrKwtVq1ZFnz59MHDgwNxtYnQRGgWkCyWWMQaBe6kZyrd/t++nYeKr9fFaE678NcY48J4koHYCObOAfuJbQDOaBWT+1oABVPPDQwGpeXTMu205Z/5WLS3O/OWpH+atBvaeBJ5OwFxnAZm/aQCl/l2ggKTwMdhABO6mpCunfiQ+SMfUNxuiY0Oe+Wsg1KyWBEyCwJd/HMeyfedhTrOAzN80gFIPLwUkhY/BBiIwZdtJTNl2Cl5lHbFpSCCsLC0MdCdWSwIkYAoE4hMeIGjiv/sCmsu3gMzfNIBSzy4FJIWPwQYgkJCcpsz+JaVmYGY3H7xYv7wB7sIqSYAETI1Aziygr6f4FtD0Twdh/qYBlHqGKSApfAw2AIGJm2MwM/QMapVzwoZBAbDk7J8BKLNKEjA9Asq3gGIWMCMLS97zRasaZUyvkw/1iPmbBlBK4BSQFD4G65nArXupypm/yWmZmNe9MdrVKafnO7A6EiABUyYw9q9o/Lj7HOpXdMGfA1vAwsJ0Px9h/qYBlHqWKSApfAzWM4HxG05g7s6zqOfugrUfmvY/3npGx+pIgAQA3LyXqmwfJX6JnPNOY7Sva7q/RDJ/0wBKPfQUkBQ+BuuRwPWkFOUf7pT0LCzq2RTBtcrqsXZWRQIkYC4EJm2JxfQdp01+ERnzNw2g1DNNAUnhY7AeCYxeF4VFEXFoVMkVqz9obtKvbvSIjVWRAAk8RkBsHxXw/Q7cTclAyBsN0LlRRZNkxPxNAyglbApICh+D9UTg4Y+3f+rth5ZepfVUM6shARIwRwI5G8lXKumA7cNbwcbK0uQwMH/TAEqJmgKSwsdgPRH44o9j+GnfBfiKo5z6mf72DXrCxmpIgASeQiA57d+jJG/eS8O4zvXQza+SybFi/qYBlBI1BSSFj8F6IHDpTjKCfwhDemY2funXDM2qms9h7nrAxypIgASeQmBRxDmMXheNcs72CBsRBHsbK5NixfxNAyglaApICh+D9UDg09//wS8HL6JF9VL4uU8zPdTIKkiABEgASM3IRPDEMMQnpuCLF2ujT0BVk8LC/E0DKCVoCkgKH4MlCZy/dR+tJ4UjMysbv3/QHI0rl5CskeEkQAIk8B+BXw5cwKerj6FUcVvs/CQYxe2sTQYP8zcNoJSYKSApfAyWJDD4l8P480g8gmqWweJevpK1MZwESIAEHiWQnpmFtpPDEXcrGR+3q4EPW3uZDCLmbxpAKTFTQFL4GCxB4PjlRLw0fbdSw18ftURddxeJ2hhKAiRAAnkT+PPIZQz+5Qic7K2x+5PWcHGwMQlUzN80gFJCpoCk8DFYgkCPhQew8+QNdGxYAVPfbCRRE0NJgARI4OkEsrKy8cK0XYi5moQBQdXwSftaJoGL+ZsGUErIFJAUPgYXkkDE6Zt4e8F+2FhZYPuwIFQq5VDImhhGAiRAAvkT2BJ1Ff2WRaKYjZXyLWAZJ7v8g1RegvmbBlBKohSQFD4GF4KA+G2848wIHLuciJ7NPTHqlTqFqIUhJEACJKA7gezsbHSatQdHLyagVwtPfP2y9v/dYf6mAdT9CcijJAUkhY/BhSDw1z/x+HD5YTjaWSN8RBBKOWr/N/FCYGAICZBAERPYfeom3vlxP2ytLBE6IgjursWKuAX6vR3zNw2glKIoICl8DC4gAbEi77nJ4Th/KxnD2tbAoDamsyKvgChYnARIoIgJiFnAt+bvw76zt/FmUw9817V+EbdAv7dj/qYBlFIUBSSFj8EFJLBsbxy+/DMKpR3tlNk/U9qTq4AoWJwESMAIBCLP30bX2XthaQFsHhIILzcnI7RCP7dk/qYBlFISBSSFj8EFIHA/NQOtJv57NufYjnXQ3d+zANEsSgIkQAL6IdBv6d/YEn0NbWqVxY89m+qnUiPUwvxNAyglOwpICh+DC0Bg6rZTCNl2Ep6lHLB1WCvYWFkWIJpFSYAESEA/BM7euId2ITuRkZWN5X390Lxaaf1UXMS1MH/TAEpJjgKSwsdgHQncvJeKVhNCcT8tEzO6NcJL9SvoGMliJEACJKB/Al//eRxL9p5HXXdnrB3YEpbinbDGLuZvGkApyVJAUvgYrCOBUWujsHhPHOpXdMEfA1po8h9bHbvKYiRAAhogcOteKoImhiEpNQMhbzRA50YVNdDqR5vI/E0DKCVaCkgKH4N1IHDhVjLaTA5DemY2lvfxQ/Pq2nzdokNXWYQESEBDBGaFncaETbGo4GKPHR8Hwd7GSkOtB5i/aQClBEsBSeFjsA4EBv9yGH8eiUdgjTJY+p6vDhEsQgIkQAKGJ5CSnonWP4QhPjEFI9vXwgdB1Qx/Uz3egflbAwbwzp07GDRoENauXasM/SuvvILp06fD1dX1qVIICgpCeHj4Iz9/44038Msvv+T+t8LU+/gNKSA9Po2s6gkCxy8n4qXpu5X/vn5QS9Sp4EJKJEACJKAaAqsPXcKwX4/Cyc4aYRrbmJ75WwMGsEOHDrh06RLmzZuniL5fv37w9PTEunXrnmkAa9SogTFjxuSWKVasGFxc/kughamXBlA1/+6YRUO6/7gfu07dRKeGFTDlzUZm0Wd2kgRIQDsExNGUL8/Yjaj4u5o7mpIGUOUG8MSJE/D29sa+ffvg5+enPBXi7/7+/oiJiUHNmjXzfFLEDGDDhg0xZcqUPH9e2HppALXzD5PWW5pz7JKNlQV2DA+CR0kHrXeJ7ScBEjBBAntO30S3BfthbWmBLUMDUbWMoyZ6SQOocgO4cOFCDBs2DAkJCY8ISrz+DQkJQa9evZ5qAKOioiCOrnFzc4OY7fv666/h5PTvruWFrTc1NRXiT84lBOTh4YHExEQ4OztrQvRspPoJZGZlK69+T1zR3m/V6qfLFpIACeibwHuLD2JHzHU8X8cNc7s30Xf1BqmPBlDlBnDcuHFYvHgxTp48+YgAxOtdYf4+++yzPIUxf/58VKlSBeXKlcPx48eVctWrV8fWrVuV8oWtd9SoURg9evQT96QBNMjzabaV/rz/PP5vzXE424vvaoJRsrit2bJgx0mABNRP4NS1JDw/ZSeysoFV/f3R1LOk6htNA2gkA/g0I/WwYg4ePIgtW7ZgyZIliI2NfURMXl5e6N27Nz799FOdRBYZGYkmTZpA/K+Pj49iAAtTL2cAdcLNQhIEEpPTEfRDKO4kp+Prl73Rq0UVidoYSgIkQAJFQ+Cz1cew4sAFNPRwxZoBzWFhoe7NoWkAjWQAb968CfHnWZdY6LF8+fJCvQJ+vF7xKtjOzg7Lli2DWA1c2FfAj9dLARXNPyzmdJfR66KwKCIOXmUdsWFwAI98M6fBZ19JQMMErielKJtDJ2vkxCLmbyMZQF01nrNYY//+/fD1/XcPNPH3Zs2aPXMRyOP1i9fA9erVU7aGCQwMhL7qpYB0HUmW04WAeI3SfuouiG8Al/X2RYBXGV3CWIYESIAEVEFg2vZTmLz1JDxKFsO2Ya1gZ63ezaGZv1VuAIWixQKO+Ph4zJ07VxG42AamcuXKudvAXL58GW3atMHSpUsVk3jmzBn8/PPPeOGFF1C6dGlER0dj+PDhENvAiNfKVlb/CjK/enV5miggXSixjC4ExCx1j4UHlG1f2nq7YX4PbXxIrUvfWIYESMA8CCSnZSizgNeTUvHFi7XRJ6CqajvO/K0BA3j79u0nNoKeMWNG7kbQcXFxyoKP0NBQiO1fLl68iHfeeUdZ/HHv3j1lle6LL76orAIuWfK/D1Pzq1cX1VJAulBiGV0IbIu+hj5L/4atlSW2DgtE5VLFdQljGRIgARJQFYFfD17EJ7//A5diNgj9OEi1i9iYvzVgAFWl7McaQwGpeXS007bUjEw8H7ITcbeSleOUxLFKvEiABEhAiwQe3sbqLV8PjO9SX5XdYP6mAZQSJgUkhY/B/yMwJ/wMvtsYg7JOdsqh6o521mRDAiRAApolcDDuNl6bsxdiIfDqD5qjUaUSqusL8zcNoJQoKSApfAwGIFbOBU8Mw/20TEx6rQG6Nq5ILiRAAiSgeQLDfj2C1Ycuo567C/4Y2AJWluraFob5mwZQ6iGjgKTwMRjAx6uO4rfIS2gg9s76oDksVfaPJAeJBEiABApD4EZSKlr/EIak1Ax827ku3varXJhqDBbD/E0DKCUuCkgKn9kHH72YgI4zIxQOYuNUNb4mMftBIgASIIFCE1gccQ6j1kWrckEI8zcNYKGFLQIpICl8Zh0stn3pMnsPDl9IQBcfd0x+vaFZ82DnSYAETI9ARmYWXp4RoZxr/mZTD3zXVT0LQpi/aQClnjgKSAqfWQevOXwJQ1ceRXFbK2WrhLLO9mbNg50nARIwTQJ/x93Gq3P2qu5NB/M3DaDUE0cBSeEz2+D7qRloPSkM1+6m4pP2NTEgqLrZsmDHSYAETJ/A8F+P4vdDl1S1IIT5mwZQ6smjgKTwmW3wxM0xmBl6BpVLOWDL0EBVH5dktoPEjpMACeiNgLIgZFIYklIy8E2nuninmfEXhDB/0wBKCZwCksJnlsHivN8Xpu1CemY25nVvjHZ1ypklB3aaBEjAvAg8vCBkx/BWKOVoZ1QAzN80gFICpICk8JldcFZWNl6buxeR5+/gudpllfN+LcROqbxIgARIwMQJPLwg5I0mHvj+VeMuCGH+pgGUeuQoICl8Zhe8bG8cvvwzSjnpQ5z3W96lmNkxYIdJgATMl8DDC0JWD2gOHyOeEML8TQMo9SRSQFL4zCo4PuEB2oXsxL3UDIzpWAc9/D3Nqv/sLAmQAAkIAjmb39d1d8afA1sa7YQQ5m8aQKknkgKSwmc2wWLPv75L/8a2E9fhU8kVv/XniR9mM/jsKAmQwCMEbt5LRbA4ISQlA2M71UV3Iy0IYf6mAZR6NCkgKXxmE7z+nysYuPwQbKwssGFQALzcnMym7+woCZAACTxOYMmeOHy9NgrO9tbY8XEQShthQQjzNw2g1JNJAUnhM4vgxOR0tJkcDvFb7+A2XhjatoZZ9JudJAESIIGnERALQl6ZEYHoK3fxQr1ymPV24yKHxfxNAyglOgpICp9ZBI/87R+s/Psiqpd1xPpBLbnnn1mMOjtJAiSQH4HjlxOVs9Azs7Ixo1sjvFS/Qn4hev058zcNoJSgKCApfCYfvOf0TXRbsF/p52/9/dHEs6TJ95kdJAESIAFdCUzeehLTtp9CCQcbbBnaCmWcim5vQOZvGkBddZpnOQpICp9JB6ekZ+L5KTtx/lay8pGz+NiZFwmQAAmQwH8E0jKylFnAE1fuon2dcpj9jk+R7Y3K/E0DKPUsUkBS+Ew6+PtNMZgddgblnO2VPf+c7G1Mur/sHAmQAAkUhkBUfCI6zohARlY2pr3VCK80KJpXwczfNICF0WtuDAUkhc9kg8U/aOIDZ/Ftizjto623m8n2lR0jARIgAVkCIVtPYur2U3BVXgUHoqyTvWyV+cYzf9MA5iuSZxWggKTwmWSwWN3WedYeHLuciBfrlcfMt31Msp/sFAmQAAnoi4B4Fdxp5r+rgtt5u2Fu98YGfxXM/E0DKKVfCkgKn0kGL9h1Ft+sP6Hsb7VteKsi+U3WJEGyUyRAAmZFIDr+Ll6ZsVt5FTz1zYbo2NDdoP1n/qYBlBIYBSSFz+SCT1+/h5em70JKeha+71oPbzStZHJ9ZIdIgARIwFAEpm47hZBtJ4vkVTDzNw2glI4pICl8JhUsVv2KV79iNVvL6qWxrLevwV9hmBRAdoYESMDsCaRn/vsqOCr+rvLt9DwDvgpm/qYBlHrgKCApfCYVPHpdFBZFxKFkcVtsGhyAss6G/4jZpACyMyRAAiQAIObqXbw8fTfSM7MR8kYDdG5U0SBcmL9pAKWERQFJ4TOZ4B0x1/De4r+V/izs2QSta3HVr8kMLjtCAiRQ5ASmbz+FSVtPwqWYDbaKVcEG+IWa+VsDBvDOnTsYNGgQ1q5dq4jwlVdewfTp0+Hq6pqnKOPi4lClSpU8f/brr7/itddeU35mYWHxRJnZs2ejf//+OovdkAI6ejEB9dxdYGn5ZDt1biALGpzA9bspaD91F27fT0OvFp74+uU6Br8nb0ACJEACpkxAvAru8r/dFJ6rXVbZTiuvnC3DwJD5W6ZdRRlrkZ2dnV2UNyzovTp06IBLly5h3rx5Smi/fv3g6emJdevW5VlVZmYmbty48cjPROyECRNw9epVODo65hrARYsWoX379rllXVxcUKxYMZ2baCgBzQw9jR+2xOKT52vhg6BqOreHBYuWQFZWNnosPIDdp2+idnln/DGwOc/6Ldoh4N1IgARMlEDs1STlVXBaZhYmv94AXXz0+yrYUPlbS8OhagN44sQJeHt7Y9++ffDz81O4ir/7+/sjJiYGNWvW1Il1o0aN4OPjgx9//DG3vPhtYs2aNejUqZNOdeRVyFACWnHgAj5bfQxi8u/nPs3gX61UodvIQMMRmBN+Bt9tjEExGyus+6glqpf995cLXiRAAiRAAvIEciZDPgqujmHtdMv3ut7VUPlb1/uroZyqDeDChQsxbNgwJCQkPMJKvP4NCQlBr1698mUYGRmJJk2aICIiAs2bN3/EALq7uyMlJUV5Zdy7d29ldtHS0vKpdaampkL8ybmEgDw8PJCYmAhnZ+d826JrATEp+/Gqf/D7oUso7WiHDYNaGuQbCF3bw3JPEjhyMQGvzt6j7FnFLV+oEBIgARLQPwGxsb7YVL9RpRJ6r5wGUOXfAI4bNw6LFy/GyZMnHxn8GjVqKObvs88+y1cUAwYMQFhYGKKjox8p+80336BNmzbKK9/t27fjq6++Uur74osvnlrnqFGjMHr06Cd+rm8DKG7wIE1sKxKBmKtJ8PUsiZ/7+sHG6unmNF8QLKA3Akkp6Xhx2m5cuJ2snPYxo1sjvX+forfGsiISIAESIIEnCNAAGskAPs1IPTxCBw8exJYtW7BkyRLExsY+MnheXl7KjN2nn376TFk/ePAA5cuXx5dffonhw4c/s+ykSZMwZswYZTbvaVdRzQDm3P/czft4ZfpuJKVmoF9gVXz+Qm0+xiogMHTlEaw5fBnursWwYXCAslKNFwmQAAmQgHYI0AAayQDevHkT4s+zLrHQY/ny5VKvgJctW6YYxcuXL6NMmTLPvJ94RdyyZUtloYibm27beBSFgDYdv4L+Px1S2j7nncZoX7ecdp4wE2zp6kOXMOzXo8r3mb++748mniVNsJfsEgmQAAmYNoGiyN9qJ6jqbwBzFoHs378fvr6+Ckvx92bNmum0CCQoKAilS5fGb7/9lu84zJgxAyNGjFC+N7Szs8u3vChQVAL6dn005u86Byc7a6z9qCWqlC6uU/tYSL8E4m7ex4vTduF+WiaGta2BQW289HsD1kYCJEACJFAkBIoqfxdJZwp5E1UbQNEnsQ1MfHw85s6dq3RRLNSoXLly7jYwYnZPfMu3dOnSXJMoyp0+fRriW8ENGzY8stWL+JnYQkbM9InVxOIbwNDQUOUVcc+ePTF16lSdURaVgMSeSN3m78PBuDuoVc4Jawa0QDFbK53byYLyBNIysvDqnD3451IifKuUxIq+zWDFPRrlwbIGEiABEjACgaLK30boms63VL0BvH379hMbQYvZupyNoHM2fhYmTsz45Vyff/45xCvg8+fPP7Gyd9OmTcqCD2ESs7KyULVqVfTp0wcDBw6EtbW1zvCKUkDX7qYos08376Xh1cYVMfHV+lx4oPNIyRV8eFW2+N5v4+AAVHDVfb9IubszmgRIgARIQN8EijJ/67vt+qpP9QZQXx01RD1FLaA9Z27inQX7kZUNfNelHt70rWSIbrHOxwiIvagmbo5VZvx+fLcJgmqWJSMSIAESIAENEyjq/K1GVDSAEqNiDAHlmBFba0us/qA56rq7SPSAofkRWHc0Hh+tOKwUG9upLro3q5xfCH9OAiRAAiSgcgLGyN9qQ0IDKDEixhCQOH6s79K/sT3mOjxKFsNfHwbAxYHbkPx/e/cBJkWR93H8zxIFdkGUtIAkSQuS5AiChDs8QUSCvCr6ggQBz4DAnQQT8EoUFRRPBRHhMJ6IhFNBUQmCooKA5JxR5IAlCSvhff7lzd6yLMxM9YTumW89zz4KTPV0f6p2+jdVXd0OmvGSVZfvPCwdX/tG9Pq/bg3LylOtU8LxNmwTAQQQQCDCAtE4f0f4EP2+HQHQL9GlXxCtDpR68je59aXFsvvQr9K4YmGZ1LmO6IggJXQCuw+dlLZ/XyL/PpEmzasUlQmdrmfRR+h42RICCCAQVYFonb+jetCZ3pwA6KA1otmB1uxNNatST/12Tm6rkSzj7qwpCaxKddCa/62a+utvcvsrS2XLgeNSNTnJ3O8vX+7AFweFZCfYCAIIIIBA2ASief4O20EFuWECYJBgGV8e7Q705cYD0mPq9+Z5tPc2KC1DbqvKymAH7alV9ZY7Xd/4Tr7aclCKJeWRmQ82lGIF8jjcKtURQAABBNwkEO3ztxssCIAOWsENHWjWyr3S572Vcv68SJ/mFaRP84oOjii+q+rtXh778Ed559vdkjdXdjPyxyKb+O4THD0CCMSmgBvO39GWJQA6aAG3dKBpX++QJ2etNUcypHWKdGlY1sFRxW/ViYu2yoiPN5jHvE3sVEeapwT2SMD4FePIEUAAAW8KuOX8HU09AqADfTd1oBfmb5ax8zeZo9HrAdvWKuHgyOKv6tw1P8lf3lpuRlKfujVFujUiRMdfL+CIEUAgXgTcdP6OljkB0IG8mzqQTl8OnbNOpizdITkSsslrnetIs8rcsDiQ5l2+85DcM2mZWVDTuUFpGcq1lIGw8RoEEEDAswJuOn9HC5EA6EDebR1I7xHY758rZebKfZInZ4JM615P/lCmkIMjjP2qS7YcNPdVPJl2VppULGye9JEjO7fUif2W5wgRQCCeBdx2/o5GWxAAHai7sQPpKtZe05bLFxsOSGKeHGYhQ5XiSQ6OMnarfrbuZ3nwrRWSdvac3FjhanOvv7y5uN1L7LY4R4YAAgj8LuDG83ek24YA6EDcrR3o17Sz0un1ZfL9zsNSODG3TL+/gZS+Kp+DI429qrp6ut8/V8nZc+elRdVi8kLHmpI7R/bYO1COCAEEEEDgIgG3nr8j2VQEQAfabu5AejPjOyd8LRt+OiYlCl4hb3T9g1QsmujgaGOn6lvLdsoTM9eYBR/ta5eQZ26vzrRv7DQvR4IAAgj4FXDz+dvvzofoBQRAB5Bu70AHjp6SuyZ+I9sOnpDE3DnkpXtqm+vc4rlMWLhVRn6ywRDogo8hravyBJV47hAcOwIIxKWA28/fkWgUAqADZS90oMMn0qTXm8vl2+2HzLNs9WkhneqXdnDU3qyqq6Sf/2yTjP9iizmAB5qWl0dvrsSTU7zZnOw1Aggg4EjAC+dvRwcYQGUCYABIl3qJVzpQ2plzMmjGj/LBij3mULo2LCNPtEoxgTAeiq6O/r9//X6LHC39W1SSB5peGw+HzjEigAACCGQh4JXzdzgbjwDoQNdLHUhHwF5esFXGzNtojviPlYvIix1rSf7csb3q9czZczJwxo8yffnv4ffpNlWlU4MyDlqdqggggAACXhfw0vk7XNYEQAeyXuxAH63eb+4VePrMOalcLFEmd/mDJBe8woGCe6v+lHpKHp2+ShZvPmhGO8d0qC7ta5d07w6zZwgggAACERHw4vk71DAEQAeiXu1AK3cfkfumfi8Hj582t4mZ1LmO1ChV0IGE+6p+/ON+M+2tq6H1ptjj7qwlLaoVc9+OskcIIIAAAhEX8Or5O5RQBEAHml7uQHsOnzQhUG8TowHp+Ttqyi3XFXeg4Y6qx079JoNnr5UZK/aaHbquRAEZd1dNKV84vzt2kL1AAAEEEIi6gJfP36HCIwA6kPR6B9Kw9PA7P8iCjb8YhdtqJMvjrapI0aQ8DlSiV1VXOuv09p7Dv4qub9GFHo80ryA5ebRb9BqFd0YAAQRcKOD183coSAmADhRjoQPpIonRczfI619tl3PnRfLlyi59b6oo995QxjPBSVc5j52/SV5duNXc3LlUoStk7B01pQ7PQXbQu6mKAAIIxK5ALJy/nbYOAdCBYCx1oDV7U+XJWWvkh11HjEjFovnl/9pUk/rlrnIgFP6qWw4ck0feXSlr9x01b/Y/15eUwbdVjfnVzeGX5R0QQACB2BWIpfO3bSsRAG3lYvBh0nq/PL1dyqi5G+TQiTQj07Zmsjx2SxUp4rJp4dSTv8mby3bKi59vNiuar8ybU0a2v05aVPP+dYwOuiRVEUAAAQQCECAAihAAA+gol3pJrHagIyfT5NlPN8pby3aZKVW9V6CZFm5QOurPzN3175Myecl2+ef3u+Vk2lnTNI0rFpZnO1R3XUh10LWoigACCCAQRoFYPX8HQ0YADEYr02tjvQOt3nNEnpy1Vlbt/u+08P/WLy0tqxU3t4+JVNGbWC/feVgmLd4u89b9ZEKpFr2PYc/G5aRdrRI80i1SjcH7IIAAAjEgEOvn70CayPUBcPhUlK4WAAAb00lEQVTw4fLRRx/JypUrJVeuXHLkyO9h5HJFA8PQoUNl4sSJcvjwYalXr578/e9/l6pVq6ZX07/v3bu3zJ492/zdbbfdJuPHj5eCBQO/H148dCCdFtbRNl0ocvjkb8ZKV9jeUP5qaV2juLSoWlwK5M3pr0ms/l0XqMxd+5MJfnrvQl9pWqmw3NeonDS89iqCn5UslRBAAIH4FoiH87e/FnZ9ABw8eLAJZXv27JHXX389oAA4evRo0eA4ZcoUqVixogwbNkwWLVokGzdulMTERGPSsmVLs00NiVp69uwpZcqUkTlz5vgzS//3eOpAOi2s1wfOWb0/fURQIXJmzyaNKxSW1jWSpXlKUUeLLzS47089Jev2HZUf96aa99t75FfjnStHgrSvVUK6NSorFYv+3oYUBBBAAAEEbATi6fx9KR/XB0DfjmuY69Onj98AqCEiOTnZvHbAgAGm+unTp6Vo0aKiwbBXr16yfv16SUlJkW+++caMDmrR/2/QoIFs2LBBKlWqFFB/itcOpNfhzVm9T+as2mduJO0ruXMkSLNKRaR8kXxSKF9uKZQvp/nvVflyyZX5cpn/5smZ/fc2OXNWNv98XNbvPyrr9x+TdftTzX/1yR0ZS6F8uaRT/dKiU8+RnHYOqAPwIgQQQAABTwrE6/k7Y2PFXADctm2blC9fXlasWCG1atVKP9Y2bdqYkcSpU6fK5MmTpV+/fheFSf33sWPHSteuXbPs0Bok9cdXtAOVKlVKUlNTJSkpyZO/BE53evPPx8yooIbB7QdP+N3cFTmzS8G8OeWXY6fljN54MFPJkZDNPLUjJTlJGpS7Sm6rmZweGv1unBcggAACCCAQgAAB0EOrgAMdAVy6dKk0bNhQ9u7da0YCfUWneHfu3Cnz5s2TESNGmOnhTZs2XdBNdLpYw9+gQYOy7D5Dhgwx1xZmLvEcAH0WOvKq9+JbuOkXOXD0lBw6+ZscOnFa/n08TQ6fTDO3lfnt7IWBr8AVOSWleJJUMT+J5r8ViuaX3Dl+HyWkIIAAAgggEA4BAmCUAuClglTGRv7uu++kTp066X8VbADct2+fFC/+33vC9ejRQ3bv3i1z5841AVBHAvWawIylQoUK0r17dxk4cGCW/Y0RQPtfQw2Ix0+fMUFQF5MUScwtxQvkYRGHPSk1EUAAAQQsBQiAUQqABw8eFP25XNEFGXny/PeZtIEGwHBOAWfeXzqQ5W8e1RBAAAEEEIiiAOfvKAVAmzYPNAD6FoH07dtX+vfvb94qLS1NihQpctEikGXLlkndunXNa/T/69evzyIQm8ahDgIIIIAAAh4SIAB6IADu2rVLDh06ZO7XN2bMGFm8eLHpYtdee63kz5/f/H/lypVl5MiR0q5dO/NnXe2rf37jjTdEp3V1ynfBggUX3QZGp4knTJhg6ug1gqVLl+Y2MB76BWZXEUAAAQQQsBEgAHogAHbp0sVcr5e5fPnll9K0aVPz19myZTNhT1+rxXcjaA13GW8EXa1atfTNaKjMfCPol156iRtB2/wmUQcBBBBAAAEPCRAAPRAA3dyf6EBubh32DQEEEEAAgawFOH8TAB39btCBHPFRGQEEEEAAgagIcP4mADrqeHQgR3xURgABBBBAICoCnL8JgI46Hh3IER+VEUAAAQQQiIoA528CoKOORwdyxEdlBBBAAAEEoiLA+ZsA6Kjj0YEc8VEZAQQQQACBqAhw/iYAOup4dCBHfFRGAAEEEEAgKgKcvwmAjjoeHcgRH5URQAABBBCIigDnbwKgo46Xmppqbhy9e/duSUpKcrQtKiOAAAIIIIBAZAQ0AJYqVUqOHDkiBQoUiMybuuxdsp3Xx2ZQrAT27NljOhAFAQQQQAABBLwnoAM4JUuW9N6Oh2CPCYAOEM+dOyf6POHExETzOLpQFt+3E0YXQ6l68bZwDq+vb+s44xwZgci8C/3Z+8469nXs2DFJTk6WhISEyByQy96FAOiyBsl4wtRhaZ1mZno5fI3EdSDhs824ZZxxjoxAZN6F/oxzZATC+y4EwPD6Wm+dDxhruqAq4hwUl/WLcbamC6oizkFxWb8YZ2u6oCriHBRX0C8mAAZNFpkKdHycIyMQmXehP+McGYHIvAv9GefICIT3XQiA4fW13vrp06dl5MiRMmjQIMmdO7f1dqh4eQGcI9NDcMY5MgKReRf6M86REQjvuxAAw+vL1hFAAAEEEEAAAdcJEABd1yTsEAIIIIAAAgggEF4BAmB4fdk6AggggAACCCDgOgECoOuahB1CAAEEEEAAAQTCK0AADK8vW0cAAQQQQAABBFwnQACMUpO8/PLLMmbMGNm/f79UrVpVxo0bJzfeeOMl9+aDDz6QJ598UrZu3Srly5eX4cOHS7t27aK0995622CsX3vtNfnHP/4ha9asMQd5/fXXy4gRI6Ru3breOugo7G0wzhl3791335WOHTtKmzZtZObMmVHYc2+9ZbDO+qzTxx9/XGbMmCGHDx+WsmXLynPPPSe33HKLtw48wnsbrLN+hr/yyiuya9cuufrqq6VDhw7mTg558uSJ8J575+0WLVpkzoPLly8358IPP/xQ2rZte9kDWLhwofTr10/Wrl1rnuLRv39/uf/++71z0C7aUwJgFBrjvffek06dOol+wDRs2FAmTJggkyZNknXr1sk111xz0R59/fXXJhw+/fTTJvTpL8lTTz0lX331ldSrVy8KR+CdtwzW+p577jFtcsMNN5gP7meeecacOPXDpkSJEt458AjvabDOvt3buXOn8S5XrpwUKlSIAOin3YJ1TktLM75FihSRxx57zDzzVB8vqY+vrFGjRoR7iXfeLljnt956S7p37y6TJ082nx2bNm2SLl26yJ133iljx471zoFHeE8/+eQTWbJkidSuXVtuv/12vwFw+/btUq1aNenRo4f06tXL1H3ggQfknXfeMfUpwQkQAIPzCsmrNbRph9dvi75SpUoV881HvzFmLvohojce1V8WX2nRooVceeWVpuNTLi0QrHXmLZ09e9Y4v/TSS9K5c2eoLyFg46y2TZo0ka5du8rixYtFR6oYAbx8FwvW+dVXXzUjLBs2bJCcOXPSfwMUCNb5oYcekvXr18vnn3+e/g5//etf5dtvvzV9m+Jf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" width="640">”

], “text/plain”: [

“<IPython.core.display.HTML object>”

]

}, “metadata”: {}, “output_type”: “display_data”

}

], “source”: [

“block = amp.blocks.Line(X, Y)n”, “anim = amp.Animation([block], timeline) # pass in the timeline insteadn”, “n”, “anim.controls()n”, “anim.save_gif("images/line4") # save animation for docsn”, “plt.show()”

]

}, {

“cell_type”: “raw”, “metadata”: {

“raw_mimetype”: “text/restructuredtext”

}, “source”: [

“.. image:: images/line4.gif”

]

}, {

“cell_type”: “markdown”, “metadata”: {}, “source”: [

“## Built on Matplotlibn”, “n”, “Since animatplot is build on matplotlib, we can use all of our matplotlib tools.”

]

}, {

“cell_type”: “code”, “execution_count”: 8, “metadata”: {

“scrolled”: false

}, “outputs”: [

{
“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 imagesn”, “ // almost always do), so we need to clear the canvas so thatn”, “ // 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_divn”, “ 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 bandn”, “ // 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 updatedn”, “ // 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-buttonsn”, “ $( ".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, fig.canvas.height);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 butn”, “ * transferred with MIME type text/plain:" errors onn”, “ * Chrome. But how to set the MIME type? It doesn’t seemn”, “ * 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 takesn”, “ // 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-canvasn”, “mpl.findpos = function(e) {n”, “ //this section is from http://www.quirksmode.org/js/events_properties.htmln”, “ 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 bugn”, “ targ = targ.parentNode;n”, “n”, “ // jQuery normalizes the pageX and pageYn”, “ // pageX,Y are the mouse positions relative to the documentn”, “ // offset() returns the position of the element relative to the documentn”, “ 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 keysn”, “ * we need this to avoid circular referencesn”, “ * http://stackoverflow.com/a/24161582/3208463n”, “ /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 ton”, “ * the text insertion cursor when the button is pressed. We wantn”, “ * to control all of the cursor setting manually through then”, “ * ‘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 eventn”, “}n”, “n”, “mpl.figure.prototype.key_event = function(event, name) {n”, “n”, “ // Prevent repeat eventsn”, “ if (name == ‘key_press’)n”, “ {n”, “ if (event.which === this._key)n”, “ return;n”, “ elsen”, “ 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", "jpeg", "pdf", "png", "ps", "raw", "svg", "tif"];n”, “n”, “mpl.default_extension = "png";var comm_websocket_adapter = function(comm) {n”, “ // Create a "websocket"-like object which calls the given IPython commn”, “ // object with the appropriate methods. Currently this is a non binaryn”, “ // 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 processn”, “ // 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 Commn”, “ // 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 realn”, “ // 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.ration”, “ 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.ration”, “ 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 son”, “ // 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 = thisn”, “ 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 ‘focusablen”, “ el.attr(‘tabindex’, 0)n”, “ // reach out to IPython and tell the keyboard manager to turn it’s selfn”, “ // off when our div gets focusn”, “n”, “ // location in version 3n”, “ if (IPython.notebook.keyboard_manager) {n”, “ IPython.notebook.keyboard_manager.register_events(el);n”, “ }n”, “ else {n”, “ // location in version 2n”, “ 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+entern”, “ if (event.shiftKey && event.which == 13) {n”, “ this.canvas_div.blur();n”, “ event.shiftKey = false;n”, “ // Send a "J" for go to next celln”, “ event.which = 74;n”, “ event.keyCode = 74;n”, “ manager.command_mode();n”, “ manager.handle_keydown(event);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 forn”, “ // 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 outputn”, “ 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”: [

“<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydB3hUxdfGX1SqNBEpUgJCQEJRivQSwAKodP2rdENHAUFp0quCCggCCUgXQVAUlKZIUZpIU7oIoQX9pArSy/ecO2xI2SS7O1vu3fvO8/CI5M7cmd+czbx7Zs6ZVHfu3LkDFhIgARIgARIgARIgAdsQSEUBaJu55kBJgARIgARIgARIwCBAAUhDIAESIAESIAESIAGbEaAAtNmEc7gkQAIkQAIkQAIkQAFIGyABEiABEiABEiABmxGgALTZhHO4JEACJEACJEACJEABSBsgARIgARIgARIgAZsRoAC02YRzuCRAAiRAAiRAAiRAAUgbIAESIAESIAESIAGbEaAAtNmEc7gkQAIkQAIkQAIkQAFIGyABEiABEiABEiABmxGgALTZhHO4JEACJEACJEACJEABSBsgARIgARIgARIgAZsRoAC02YRzuCRAAiRAAiRAAiRAAUgbIAESIAESIAESIAGbEaAAtNmEc7gkQAIkQAIkQAIkQAFIGyABEiABEiABEiABmxGgALTZhHO4JEACJEACJEACJEABSBsgARIgARIgARIgAZsRoAC02YRzuCRAAiRAAiRAAiRAAUgbIAESIAESIAESIAGbEaAAtNmEc7gkQAIkQAIkQAIkQAFIGyABEiABEiABEiABmxGgALTZhHO4JEACJEACJEACJEABSBsgARIgARIgARIgAZsRoAC02YRzuCRAAiRAAiRAAiRAAUgbIAESIAESIAESIAGbEaAAtNmEc7gkQAIkQAIkQAIkQAFIGyABEiABEiABEiABmxGgALTZhHO4JEACJEACJEACJEABSBsgARIgARIgARIgAZsRoAC02YRzuCRAAiRAAiRAAiRAAUgbIAESIAESIAESIAGbEaAAtNmEc7gkQAIkQAIkQAIkQAFIGyABEiABEiABEiABmxGgALTZhHO4JEACJEACJEACJEABSBsgARIgARIgARIgAZsRoAC02YRzuCRgBgJbtmzBe++9h23btuHvv/9G1qxZ8dhjj6Fy5cr48MMPY7sYHh5u/H3t2rV+6/atW7fw8MMPo1KlSli+fHm8944dOxY9evTAK6+8gs8//zzez4YNG4aBAwdi165dKFWqlN/6yxeRAAmQgCcEKAA9ocY6JEACHhP4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gAVwMKZNm2aXX3656QRzzjnn2Lhx42z8+PG2atUqq1Klyj4tWrJkiQuH9913nwt9+iO5++677b333rMzzzyzAL5BfHYZ1vqyyy5zx+Tss892J+6HHnrI/XDqZHPsscfG54tnuKVhnYPmff311877hBNOsCOPPJIAmM9xC+u8Y8cO53vUUUdZ//793TtP9XpJvb7ytNNOy3Avic/uwjo/99xzdvXVV9vTTz/tzh1r1661bt26WadOnezhhx+OzxfPcEtfe+01e//99+2MM86w9u3b5xsAv/rqK8vKyrJrr73WrrvuOle3V69e9vzzz7v6lHACBMBwXin5tEKbOryuFoNSo0YNd+WjK8bcRScRPXhUfyxBufDCC+2II45wHZ+yf4Gw1rm3tGvXLuf86KOP2hVXXAH1fgR8nGXbpEkTu/LKK+3dd981jVQxAvjfXSys8+OPP+5GWNasWWMHH3ww/TdBgbDOffr0sdWrV9v8+fOz93DzzTfbBx984Po2JX+BIkWK5BsAb7/9dps1a5azDopG/z799FPTQAklnAABMJxX0p/WFflhhx1mL7744l5TuP369bPly5ebhrdzF40K3njjje6foOiqUlMOGkGh5C3gY517S3pZuEZPdLxatWoFdR4Cvs733HOPffbZZ+6kr9ESAuB/dy8fZ03zamRV55xXXnnFypcvb5deeqnph7RYsWL05xT1Zy1jUBB588033XKRDRs2WMuWLa1r1652xx134JyAQCIBsHHjxla7dm0bPXp09hZ1/ujYsaP99ddfXOQk4JzzIwTAkGDJfnzLli1uKlFD15oqCIrWmU2cONG++OKLfXZxyCGH2IQJE9yJOyhTpkxxIyd6Ij0lbwEf69xb6t27t73xxhtuTSBreVLnrP6vkW1d9Gi9FAEw/79in/5cvXp127hxo2lpg6bKvvzyS1Of1gWnlpFQ9hXwcdZWxowZYxr127Nnj+3cudN69uzplvlQEhNIJACedNJJ7lyh5QxBWbx4sVvmoON2zDHHJLYzPuUECIAZ7gjByUWd9qyzzsreu27qmDRpkpuqyV0UABUOtVA+KMGak+3bt2f4G8Rndz7WOb+d1v8NHTrUFi5caKeeemp8vniGWxrWWaOq8tSP40UXXeRaSwDM/6CFddYW9YOpc4TWTgUjfiNHjsy+AS3/vRa+T/g46xzRuXNnu//+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gMCKey9I4FPp+4gCkF6Flt+bIMaOHWvDhg2zrVu3Wq1atWzUqFHWqFGj/TZM//2xxx6zTZs2ufN6hw4dbMiQIVaiRAlXR++fHThwoM2cOdN++OEHq127to0ePdrq1auXvi+bx5ZTHQDvuOMO951U9FtWoUIFa9GihV1//fX2+eefEwAzenTTtzMCYIK23333XfYnp02bZnfffbd98cUX2f/u0EMPLdBX0AQngPO7DLW1VbIS/FZ8DAEEEEheYOPQlslvJIktBOe//3oThM7bl19+uSkEnnPOOTZu3DgbP368rVq1yqpUqbLP3p977jm7+uqr7emnn7azzz7b1q5da926dbNOnTrZww8/7D6v/71ixQoXEitWrGiTJ092/03bPPbYY5P4RuGqpiMA/vTTTy7s7ty50z766CMbMGCAtW3b1i6++GICYLjDE9lPEwA9Ds2ECRPshhtucFebOUvuKeCFCxdas2bN7PXXXzddUa1Zs8bOOussmzp1qntlz0033WTffvuttWzZ0o0eHnbYYW5zWs+iq9THH3/cXamedNJJ7ipTV5/7KwRAjwNJFQQQSIlAHALgmWeeaWeccYYLa0GpUaOGCzUKOrlLnz59bPXq1TZ//vzs/3TzzTfbBx98YO+++679/fffVqpUKXvllVfcOTwoWv7TqlUru//++92/UuBUKNT0tF7XphHH6dOnp8Q92Eg6AqC2qbYHRQFQv2kjRozYKwD+8ssvdt9997mQqACuMH3dddc5A5WXX37Z+crskEMOyd6eRhM1cPLQQw8lbcEUsB8hAdDDLWwAbNCggQ0fPtwFvI4dO7orw+LFi9vQoUNNHbddu3Z266232u233+5ac9ddd9mMGTPc9MSJJ55o77zzjvXo0cPeeOMN98LrvAoB0ONAUgUBBFIiEPUAuGPHDnf+ffHFF935Nij9+vWz5cuX26JFi/Zx0IW6zrtvvvmm1a9f3zZs2OCCnpb76IJe07967+y8efPsvPPOy66vi3yd3xWWFIp0/p80aZIbRfz5559dEOrbt29K3DMZABVoZ8+ebY888sheAfD777+3OXPmuO9XsmRJ970V+J5//nk77bTTbPv27dawYUMXEi+66CLXZDk0btzYjcDKJ9lCAPQTJAB6uIUNgDlPEAp9d955p61fv95OOOEEt3edZDR6qJHCP//80601efvtt91oYVCuueYa++uvv2zKlCkEQI9jRhUEEEifQNQD4JYtW9yF9/vvv++CSlAeeOABmzhx4l7LeXIqjRkzxjTqp1kZTYX27Nlzr1ExbUujWjovH3300S706AYJXbhriZAu5K+88krTTXoaLUxXSfcI4GeffWbXXnut+03q0qVLvlPA3bt3t2rVqmUPagwaNMjNdj355JOOQOYKxW+99Zblt74+ETMCYCJK+36GAOjhFjYAanFw+fLl3Z6eeeYZ09SCgl5Q7rnnHndl9fHHH7s7q3S1efjhh+/VMl3BaoGx7sDKqzAC6HEgqYIAAikRiEsAXLx48V4X1oMHD3ZBRMtzcheNZHXu3NlN5Wr6eN26daYRQwUhLclR0YX8VVdd5WZpihUr5qaYtWRH53KtA9QoodYbainPhRde6P7RCGSw3Ccl+GaWjgA4a9YsN5Kp4Kt/NMp57733OoecdwHv2rXLnnjiCZs7d667EUa/VfqnefPm7oYYFVloCdOCBQtcUG7Tpo27qaR3794pISAA+jESAD3cwgZArZEoW7as21NedXV1pHUSmopQwNOQuE4+uRcR649Rd7oRAD0OGlUQQCBtAlEPgD5TwFqrp3Ox1mMHRTd5aHRLgaNo0aLZ/14X9AphxxxzjLsxRP/91Vdfdf9d4Unnc00lv/TSS66eLvSD34RUHJR0BEBN7eq3SXcBH3XUUXbwwQe7puZ+DIxG9TSV279/fzv55JPduj6NrCoQ51xDeMkll9gFF1zgpoMVBjXLJa9UFAKgnyIB0MMtnQFQV4waLdQfle5YS7QwApioFJ9DAIFUC0Q9AOr7ahRPz4rLGUpq1qzpRqPyuglEn9Uo1oMPPpjNpSlejfgpcCjg5C662NezYHVjg4Ji7qKgqOCnO5IViFJV0hEAc98EErQ1dwDUEqYjjzzShT4VvZRAa/00BZzTWtPkmvrViOjXX3/tbnxMVSEA+kkSAD3c0hkA1RzdbaU7gHW3la6W9IeoqQstsNUC5LwKAdDjQFIFAQRSIhCHABg8BkbnVq1l07SlLrRXrlxpVatWddOamnUJwqBGv0aOHOk+F0wBaw2ggqG2paIb87Q+UCNfmhrVzXyaqXnvvffciJlujtDNI7rh4YgjjnDTpFoCpDV1eg5hqkpBBkAFP41uykp3OWuZ02uvvebMcgZAhTT9nmlEVAFZj5NJVSEA+kkSAD3c0h0AdULR4mP98ejkoStGrS3RELtOJARAj4NGFQQQSJtAHAKgvrzOqQofWpOXlZXlHs8SnFObNm1qxx13nFumo6KgEqwR1A0Mmplp3bq1+3fB9O0LL7zgburTTR4aBWvfvr377wpCKgqCuqBX4NPdsLo5RE950NMgUlkKMgDqcWj6bVqyZImb/tV3k69ms3IGQH3f2267zd1xnfuRMMlaEAD9BAmAfm6Rq8UIYOQOCQ1CoNAIxCUAHqgHJNUBMF1OuiNaU8MKxaksBEA/TQKgn1vkahEAI3dIaBAChUaAAFiwhzrqAVCjhHoEzy233OJujgkegZYqNQKgnyQB0M8tcrV4F3DkDgkNQqDQCMTlXcAH6gGJegA899xz3VtCevXq5V6vl+pCAPQTJQD6uUWultag7O8RMZFrLA1CAAEE0iCg161VqlQpDVuO9iajHgDTrUcA9BMmAPq5Ra6Wbr3X0+71tPlUPFk9cl+QBiGAAAL7EdCNc7rpoGLFins9n6+wgBEAt7m7szXKqNfzURITIAAm5sSnEEAAAQQQiKQAAZAA6NMxCYA+atRBAAEEEEAgIgIEQAKgT1ckAPqoUQcBBBBAAIGICBAACYA+XZEA6KNGHQQQQAABBCIiQAAkAPp0RQKgjxp1EEAAAQQQiIgAAZAA6NMVCYA+atRBAAEEEEAgIgIEQAKgT1ckAPqoUQcBBBBAAIGICBAACYA+XZEA6KNGHQQQQAABBCIiELwJatGiRVayZMmItCpzzdCDoJs0aWJ65VyZMmUyt+OY74kAGPMDSPMRQAABBAq3AG+C+r/jX1jfBOPb+wmAvnLUQwABBBBAIAIChf1NUIX9TTC+XZAA6CtHPQQQQAABBBBAIKYCBMCYHjiajQACCCCAAAII+AoQAH3lqIcAAggggAACCMRUgAAY0wNHsxFAAAEEEEAAAV8BAqCvHPUQQAABBBBAAIGYChAAY3rgaDYCCCCAAAIIIOArQAD0laMeAggggAACCCAQUwECYEwPHM1GAAEEEEAAAQR8BQiAvnLUQwABBBBAAAEEYipAAIzpgaPZCCCAAAIIIICArwAB0FeOeggggAACCCCAQEwFCIAxPXA0GwEEEEAAAQQQ8BX4H/h5IAO5aBCDAAAAAElFTkSuQmCC" width="640">”

], “text/plain”: [

“<IPython.core.display.HTML object>”

]

}, “metadata”: {}, “output_type”: “display_data”

}

], “source”: [

“block = amp.blocks.Line(X, Y, marker=".", linestyle="-", color="r")n”, “anim = amp.Animation([block], timeline)n”, “n”, “# standard matplotlib stuffn”, “plt.title("Sine Wave")n”, “plt.xlabel("x")n”, “plt.ylabel("y")n”, “n”, “anim.controls()n”, “anim.save_gif("images/line5") # save animation for docsn”, “plt.show()”

]

}, {

“cell_type”: “raw”, “metadata”: {

“raw_mimetype”: “text/restructuredtext”

}, “source”: [

“.. image:: images/line5.gif”

]

}

], “metadata”: {

“celltoolbar”: “Raw Cell Format”, “kernelspec”: {

“display_name”: “Python 3”, “language”: “python”, “name”: “python3”

}, “language_info”: {

“codemirror_mode”: {

“name”: “ipython”, “version”: 3

}, “file_extension”: “.py”, “mimetype”: “text/x-python”, “name”: “python”, “nbconvert_exporter”: “python”, “pygments_lexer”: “ipython3”, “version”: “3.6.6”

}

}, “nbformat”: 4, “nbformat_minor”: 2

}