{
“cells”: [
{

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

“# Polarization”

]

}, {

“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”: [

“Let’s create the data.”

]

}, {

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

“E0 = np.array([1, 2])n”, “E0 = E0 / np.linalg.norm(E0)n”, “n”, “phi = np.array([0, np.pi / 7])n”, “n”, “f = 3n”, “t = np.linspace(0, 2 * np.pi, 50)n”, “n”, “# The Electric Fieldn”, “E = E0[:, np.newaxis] * np.exp(n”, “ 1j * (t + phi[:, np.newaxis])n”, “) # fancy array boardcastingn”, “n”, “# Converting the Electric field into animatable arrows.n”, “X = np.zeros(3) # x location of the arrow tailsn”, “Y = np.zeros(3) # y location of the arrow tailsn”, “n”, “zeros = np.zeros_like(E[0, :]) # paddingn”, “U = np.array([E[0, :], zeros, E[0, :]]).realn”, “V = np.array([zeros, E[1, :], E[1, :]]).real”

]

}, {

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

“Now to animate it.”

]

}, {

“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,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydB3hNWffG3yQSRB29RQ+jlyBCRItu1MHoDINPZ4oyo/cyemfU0YbB6F2CRO81eu8tQkj/P3vP/2aURG5u7rn33HPe8zyebz7ZZa3f2pbXPmevbRcVFRUFPiRAAiRAAiRAAiRAArohYEcBqJtY01ESIAESIAESIAESkAQoALkQSIAESIAESIAESEBnBCgAdRZwuksCJEACJEACJEACFIBcAyRAAiRAAiRAAiSgMwIUgDoLON0lARIgARIgARIgAQpArgESIAESIAESIAES0BkBCkCdBZzukgAJkAAJkAAJkAAFINcACZAACZAACZAACeiMAAWgzgJOd0mABEiABEiABEiAApBrgARIgARIgARIgAR0RoACUGcBp7skQAIkQAIkQAIkQAHINUACJEACJEACJEACOiNAAaizgNNdEiABEiABEiABEqAA5BogARIgARIgARIgAZ0RoADUWcDpLgmQAAmQAAmQAAlQAHINkAAJkAAJkAAJkIDOCFAA6izgdJcESIAESIAESIAEKAC5BkiABEiABEiABEhAZwQoAHUWcLpLAiRAAiRAAiRAAhSAXAMkQAIkQAIkQAIkoDMCFIA6CzjdJQESIAESIAESIAEKQK4BEiABEiABEiABEtAZAQpAnQWc7pIACZAACZAACZAABSDXAAmQAAmQAAmQAAnojAAFoM4CTndJgARIgARIgARIgAKQa4AESIAESIAESIAEdEaAAlBnAae7JEACJEACJEACJEAByDVAAiRAAiRAAiRAAjojQAGos4DTXRIgARIgARIgARKgAOQaIAESIAESIAESIAGdEaAA1FnA6S4JkAAJkAAJkAAJUAByDZAACZAACZAACZCAzghQAOos4HSXBEiABEiABEiABCgAuQZIgARIgARIgARIQGcEKAB1FnC6SwIkQAIkQAIkQAIUgFwDJEACJEACJEACJKAzAhSAOgs43SUBEiABEiABEiABCkCuARIgARIgARIgARLQGQEKQJ0FnO6SAAmQAAmQAAmQAAUg1wAJkAAJkAAJkAAJ6IwABaDOAk53SYAESIAESIAESIACkGuABEiABEiABEiABHRGgAJQZwGnuyRAAiRAAiRAAiRAAcg1QAIkQAIkQAIkQAI6I0ABqLOA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tKTZWGkSIAESIAESIAES0E+AAlA/O6YkARIgARIgARIgAUsSoAC0pNlYaRIgARIgARIgARLQT4ACUD87piQBEiABEiABEiABSxKgALSk2VhpEiABEiABEiABEtBPgAJQPzumJAESIAESIAESIAFLEqAAtKTZWGkSIAESIAESIAES0E+AAlA/O6YkARIgARIgARIgAUsSoAC0pNlYaRIgARIgARIgARLQT4ACUD87piQBEiABEiABEiABSxKgALSk2VhpEiABEiABEiABEtBPgAJQPzumJAESIAESIAESIAFLEqAAtKTZWGkSIAESIAESIAES0E+AAlA/O6YkARIgARIgARIgAUsSoAC0pNlYaRIgARIgARIgARLQT4ACUD87piQBEiABEiCBoBNISEhATEwMQkNDkSFDhqDXx+gKJCYm4vbt2yhWrBhCQkKMLt6y5VEAWtZ0rDgJkAAJkAAJAOfPn0fJkiUdj+LcuXMoUaKE4zloBUABqJUU45EACZAACZCACQncvHkTefPmxfbt25ErVy4T1jCwVbpz5w6eeeYZ3LhxA3ny5AlsYTbKnQLQRsZkU0iABEiABJxH4NatW0r47N+/37ECsFatWhAhnDt3bud1AJ0tpgDUCY7JSIAESIAESMAMBCgA74AC0PueSAHoPTOmIAESIAESIAHTEKAApADU0xkpAPVQYxoSIAESIAESMAkBCkAKQD1dkQJQDzWmIQESIAESIAGTEKAApADU0xUpAPVQYxoSIAESIAESMAkBCkAKQD1dkQJQDzWmIQESIAESIAGTEKAApADU0xUpAPVQM2Eap58Eb0KTsEokQAIGEXD6TRAUgBSAer5qFIB6qKWR5vTp0yhbtix+/vlnVK9e3Y85e86KJ8F7ZsQYJEAC9ibg1JsgjBSAUVFReP311xEdHW2aM/fkIGgeA+P9d5sCUCMzT/crdunSBQsWLMCVK1dQoEABZMqUSWPO/onmOgn+3IYNyN2ggX8yZS4kQAIkYAECIoDkKjRPN0HMnj0bkyZNwsWLF1GlShVMnToVjRo1SrOFX3/9NUaMGIGTJ0+ifPnyGDduHNq1a+eOLyOPY8aMwbx583D9+nXUqVMHs2bNUnkbGfwtAIcMGYLVq1erJsizrEiRInj++efx9ttv47fffqMANNK4ASyLAlAj3EuXLrljfvXVVxg5ciSOHTvm/lv27NmDegWNywHc3L4duRs31tgqRiMBEiAB6xNw+790boIQv925c2eICGzQoAHmzp2Lzz//HIcPH0apUqUegbBnzx4lDj/88EMl+kQQid/ftWuXEnoSJkyYoETh4sWLUbFiRYwdOxY7duxQz4bQ0FDDwAZCAF69ehUfffQRHjx4gH379mH48OFo27YtWrZsSQFomGUDWxAFoA6+8mXv37+/ettMGlJOAW/btg1NmzbFxo0bIW9UR48eRb169bBixQp1Zc+AAQNw4cIFtGrVSo0e5siRQ2Unb5XylvrZZ5+pN1VxLPIW+vLLL6dZWwpAHYZkEhIgAVsQ0CIARbTVrFkTc+bMcbf5iSeeUKJGhE7K0LFjR0i+33//vfuj5s2bI1++fFi+fLny08WKFVPPgsGDB6s48fHxKFy4sBKGvXr1guuZICOJM2bMgEyfVqhQQfl2eRZIOHPmDN566y0lLO/du4cyZcoo/y9CS2sIhACUPEUsu4IIQHmmffrpp8kEoIx8ikgWkSgzUSKmpe0vvviiSvrtt98qvjt37kSWLFnc+cloogycTJw4UWsz04zHKWB9CCkAdXDzVgDWrdBLaxQAAAg7SURBVFsXn3zyiRJ4HTp0QPHixZE1a1Z8/PHHkI4rb5cDBw50O5F//etf+Oabb9T0hDgLeaPs3bs3Nm3apC68Ti1QAOowJJOQAAnYgoAnASjCSvzvypUrk03h9uvXDwcPHsT27dsf4SBC5t1331U/rjBlyhTll0W0nTp1Sk0LHzhwADVq1HDHadOmDfLmzYslS5a4BWDlypXVM0D8ufh3WT934sQJNb0qQknqJ8IqZ86cakRS7rNt7MVMjhECUEY3161bh+nTpycTgJcvX8Z3332H+vXrq3uIRSSK4BORXK1aNcTFxaFhw4ZKJLZo0UJxunbtmmqfjMDK89HXQAGojyAFoA5u3grAH374Ac2aNVMliegbOnSoWlNSrlw59TcRd/KmKCOFf//9t1pDuHXrVvcbosTp0aMHYmNjsWzZMgpAHTZjEhIgAfsS8CQAY2Ji1It3ZGSkEiquMH78eCXUki7ncX0mo1Xi61999VV3fPG/3bp1UyN9u3fvVlPJMosjI4Gu0LNnTyUQ5YXdNQIoQqd79+4qigg8WSN45MgRiDB86qmn8NJLL2HUqFG6DRRoAfjrr7/ijTfeUM+kTp06eZwCFgYijl0jo6NHj1ac5s+fr9oozJcuXYotW7bA0/p6LVAoALVQejQOBaAObt4KwD///BMFCxZUJS1atEgN94vQcwX54sublbxJyptheHi4ehNMGuQNUd4yZQohtcARQB2GZBISIAFbENAqAEW0uaZepeGyfk+EiCzPSRlEAIpQEcHjCl9++aUScjKq5RKAIi6LFi3qjiNCSXYjywu9SwD+9NNPePrpp1UcmTLNnz+/GnV0jYK9+eabyu8/99xzSgyKKPQmBEIArl27Vs1UyRpA+ZFBDNnwIiOXSXcBP3z4UG2C2bBhA+RZJ88q+ZG2TJs2zS16ZQlTRESEmiKXUVLZVNK3b19vmplmXApAfRgpAHVw81YAyhdepgQkpJZW3o5knYRMRYjAkyFxGUaXN9akQb6MstONAlCH0ZiEBEjAtgQ8CcBgTwEnPRpM1o7LOkIRQ02aNFE2EcG4fv16bN68WU2nynSwrJHTGgIhAGVqV55NMk1dqFAhZM6cWVUn5TEwMqonI5zDhg1DpUqV1Lo+GVnNmDFjsjWE7du3xwsvvKCmg0UMyixXUuGsta2pxaMA1EePAlAHt0AKwNu3b6vRQvlSyY41rYEjgFpJMR4JkIDdCHgSgNJe2QQiZ8Ul3dgQFhamRqPS2gQi/lhGtlxB1rDJy3zSTSCyRnDQoEEqighNEUspN4F4EoBJ7SFLhEQMyrSr1hAIAZhyE4irLikFoCxhkhFNEX0S5FIC4SRTwElZy/S5jKjKtLlMkcvGR38FCkB9JCkAdXALpACU6shuK9klJm+B8rYkX0SZbpAFtnLeYGqBAlCHIZmEBEjAFgS0CEDXMTCuHbgybSkv2ocOHULp0qXVtKbMurjEoPhcmaKVaWIRiWvWrFG+OeUxMBJflvbIBg8RQTJ74zoGJrXLAVKOAMouYhFMctqDzBbJdLDsBJb6ag3BFIDSZhm5nDx5sjoKTVjIzmkR3EkFoIg0eZ7JdLLs/PVml7MnDhSAngil/jkFoA5ugRaAcryAHBkgXx7ZaSZvnHJ8gQyxp7UzjAJQhyGZhARIwBYEtAhAaaj4VBEfcrzWk08+CdnV6/KpMh0rwkv8uyusWrVKiT7Xjl8RgzKV6Qqug6DlTMGkB0FL3hK0CECZ6hXBJLc5ye5fOWpG6vXYY49ptk0wBaAIWnk2ybmJMv0rJ10IXxk9TSoApTEyUiprH1MeCaO5oWlEpADUR5ACUB8306WiADSdSVghEiABgwhoFYAGVcfwYvwtAAPVANlBLVPDIqr9GSgA9dGkANTHzXSpKABNZxJWiARIwCACFIC31PSrXDAgS4XMFmSUUI7gef/999X6RtcRaP6qJwWgPpIUgPq4mS4V7wI2nUlYIRIgAYMIiADUchewQdUxvBizjwA+++yz6paQPn36uM9D9CckCkB9NCkA9XEzXSpZP5LWETGmqywrRAIkQAIBICDHqZQoUSIAOZs7S7MLwEDTowDUR5gCUB8306WSrfdyIKlcQO6Pk9VN10BWiARIgATSICCbMWTTgdzIERIS4jhOFIB31BE/MsooG2kYtBGgANTGibFIgARIgARIwJQEKAApAPV0TApAPdSYhgRIgARIgARMQoACkAJQT1ekANRDjWlIgARIgARIwCQEKAApAPV0RQpAPdSYhgRIgARIgARMQoACkAJQT1ekANRDjWlIgARIgARIwCQEKAApAPV0RQpAPdSYhgRIgARIgARMQoACkAJQT1ekANRDjWlIgARIgARIwCQEKAApAPV0RQpAPdSYhgRIgARIgARMQsB1E9T27dtNeRVcoDHJQdDPPPMM5Mo5uRKPQRsBCkBtnBiLBEiABEiABExJgDdB/ccsTr0JRm+npADUS47pSIAESIAESMAEBJx+E5TTb4LR2wUpAPWSYzoSIAESIAESIAESsCgBCkCLGo7VJgESIAESIAESIAG9BCgA9ZJjOhIgARIgARIgARKwKAEKQIsajtUmARIgARIgARIgAb0EKAD1kmM6EiABEiABEiABErAoAQpAixqO1SYBEiABEiABEiABvQQoAPWSYzoSIAESIAESIAESsCgBCkCLGo7VJgESIAESIAESIAG9BCgA9ZJjOhIgARIgARIgARKwKAEKQIsajtUmARIgARIgARIgAb0EKAD1kmM6EiABEiABEiABErAoAQpAixqO1SYBEiABEiABEiABvQT+D64zJ05L9/3iAAAAAElFTkSuQmCC" width="640">”

], “text/plain”: [

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

]

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

}

], “source”: [

“plt.plot(E[0].real, E.real[1])n”, “n”, “timeline = amp.Timeline(t, units="ns", fps=20)n”, “block = amp.blocks.Quiver(X, Y, U, V, t_axis=1, scale_units="xy", scale=1)n”, “anim = amp.Animation([block], timeline)n”, “n”, “block.ax.set_aspect("equal")n”, “block.ax.set_xlim([-1, 1])n”, “block.ax.set_ylim([-1, 1])n”, “n”, “anim.controls()n”, “anim.save_gif("polarization")n”, “plt.show()”

]

}, {

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

“raw_mimetype”: “text/restructuredtext”

}, “source”: [

“.. image:: polarization.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

}