{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Fourier Analysis" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction\n", "\n", "This is a tutorial on some Fourier Analysis topics using SymPy and Python.\n", "\n", "This notebook uses ``ipywidgets`` to create some interactive widgets. Refer to the [installation guide](https://ipywidgets.readthedocs.io/en/stable/user_install.html) if needed." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from matplotlib import rcParams\n", "from mpl_toolkits.mplot3d import Axes3D\n", "from sympy import *\n", "from ipywidgets import interact, fixed\n", "from IPython.display import display" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "IPython console for SymPy 1.2 (Python 3.6.8-64-bit) (ground types: gmpy)\n", "\n", "These commands were executed:\n", ">>> from __future__ import division\n", ">>> from sympy import *\n", ">>> x, y, z, t = symbols('x y z t')\n", ">>> k, m, n = symbols('k m n', integer=True)\n", ">>> f, g, h = symbols('f g h', cls=Function)\n", ">>> init_printing()\n", "\n", "Documentation can be found at http://docs.sympy.org/1.2/\n", "\n" ] } ], "source": [ "%matplotlib notebook\n", "init_session()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "plt.style.use(u\"seaborn-notebook\")\n", "plt.rcParams[\"figure.figsize\"] = 6, 4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fourier Series" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### An example\n", "\n", "Let's start with some examples of Fourier series approximation of\n", "common periodic signals, namely:\n", "\n", "- Square;\n", "- Sawtooth;\n", "- Triangle; and\n", "- Circle (semicircle, actually)." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from scipy.special import j1\n", "\n", "def waves(N=10, f=1, wtype='square'):\n", " \"\"\"Plot the Fourier series approximation for a signal\n", " \n", " N is the number of terms to consider in the approximation,\n", " f is the frequency of the signal, and wtype is the type of\n", " signal, the options are ('square','sawtooth','triangle','circ').\n", " \"\"\"\n", " \n", " t = np.linspace(0, 2, 1000)\n", " x = np.zeros_like(t)\n", " \n", " for k in range(1, N+1):\n", " if wtype=='square':\n", " x = x + 4/np.pi*np.sin(2*np.pi*(2*k - 1)*f*t)/(2*k-1)\n", " if wtype=='sawtooth':\n", " x = x + 2*(-1)**(k+1)/np.pi*np.sin(2*np.pi*k*f*t)/k\n", " if wtype=='triangle':\n", " n = k - 1\n", " x = x + 8/np.pi**2*(-1)**n*np.sin(2*np.pi*(2*n + 1)*f*t)/(2*n +1)**2\n", " if wtype=='circ':\n", " n = k - 1\n", " if n == 0:\n", " x = x + 0.25*np.pi\n", " else:\n", " x = x + (-1)**n*j1(n*np.pi)/n*np.cos(2*np.pi*n*f*t)\n", " \n", " plt.subplots(figsize=(6,4))\n", " plt.plot(t, x, linewidth=2, color=\"#e41a1c\")\n", " plt.ylim(-1.5, 1.5)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "1de60b6d38a34615818578fa17fcb006", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(IntSlider(value=10, description='N', max=400, min=1), FloatSlider(value=1.0, description…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "w = interact(waves,\n", " N=(1,400),\n", " f=(1.,10.),\n", " wtype=['square','sawtooth','triangle','circ'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Using Sympy\n", "\n", "In the previous example, we hardcoded the representation of the signal.\n", "This example take advantage of the function ``fourier_series`` that\n", "returns the Fourier series for a given function. To get the approximated\n", "version (with `n` terms) we can use the method ``.truncate(n)``." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def fourier(fun, approx_fun, half_width=pi, n=5):\n", " \"\"\"\n", " Plot the Fourier series approximation using Sympy\n", " \n", " Parameters\n", " ----------\n", " fun : Sympy expression\n", " Original function.\n", " approx_fun : Sympy FourierSeries\n", " Fourier Series representation of ``fun``.\n", " hald_width : Sympy \"number\"\n", " Half-period of the signal.\n", " n : integer\n", " Number of terms to consider.\n", " \"\"\"\n", " fun_np = lambdify((x), fun, \"numpy\")\n", " approx_np = lambdify((x), approx_fun.truncate(n), \"numpy\")\n", " x_np = np.linspace(-float(half_width), float(half_width), 201)\n", " \n", " plt.subplots(figsize=(6,4))\n", " plt.plot(x_np, fun_np(x_np), color=\"#e41a1c\", linewidth=2,\n", " label=\"Function\")\n", " plt.plot(x_np, approx_np(x_np), color=\"black\", linestyle=\"dashed\",\n", " linewidth=2, label=\"Approximation\")\n", " plt.legend(bbox_to_anchor=(0., 1.02, 1., .102), loc=3,\n", " ncol=2, mode=\"expand\", borderaxespad=0.)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "fun = x**2\n", "approx_fun = fourier_series(x**2, (x, -pi, pi))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "259ec980449141d0b8336a6eb79f7444", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(IntSlider(value=5, description='n', max=50, min=1), Output()), _dom_classes=('widget-int…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "interact(fourier,\n", " fun=fixed(fun),\n", " approx_fun=fixed(approx_fun),\n", " half_width=fixed(1),\n", " n=(1, 50));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also represent functions in several variables.\n", "\n", "The next example shows the Fourier representation of a (rotated)\n", "hyperbolic paraboloid." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "def fourier2D_xy(m_terms=5, n_terms=5):\n", " \"\"\"Plot the 2D Fourier approximation for a hyperbolic paraboloid\n", " \n", " m_terms, and n_terms are the number of terms in x and y.\n", " \n", " The values are padded to be between [-0.9 pi, 0.9 pi] to avoid the\n", " discontinuities in the border of the domain.\n", " \"\"\"\n", " Y, X = 0.9*np.pi * np.mgrid[-1:1:21j, -1:1:21j]\n", " XY = np.zeros_like(X)\n", " for cont_x in range(1, m_terms + 1):\n", " for cont_y in range(1, n_terms + 1):\n", " XY = XY + (-1)**(cont_x + cont_y) * \\\n", " np.sin(cont_x*X) * np.sin(cont_y*Y)/(cont_x*cont_y)\n", " \n", " XY = 4*XY\n", " \n", " fig = plt.figure(figsize=(6, 4))\n", " ax = fig.add_subplot(111, projection='3d')\n", " ax.plot_surface(X, Y, XY, cmap=\"Purples_r\", cstride=1, rstride=1, alpha=0.8,\n", " lw=0.2)\n", " ax.plot_wireframe(X, Y, X*Y, cstride=1, rstride=1, color=\"#e41a1c\",\n", " linewidth=1)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "c25e3fca92d649a682d5af094c09aa7e", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(IntSlider(value=5, description='m_terms', max=50, min=1), IntSlider(value=5, description…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "interact(fourier2D_xy,\n", " m_terms=(1, 50),\n", " n_terms=(1, 50));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fourier transforms" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, let's compute the Fourier Tranform of a Gaussian function." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFYAAAAbBAMAAAAUvmV2AAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAInarRM2ZVBDdiWbvuzJCz3LGAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABoklEQVQ4EYWTT0sCQRiHf66rjoa2HQKJOiQEQZjRKSRIqA7e7BOkXQqE8NohGIiCvGjQoVMtdAiMIDzapYuXDmEfoFOHIKI/FFId2mZ2dselVXcO+z7zvL/RYXYW6D9itTsReLrQ+ieBKLIi0lKrXtkAKtTM5MiXVxbYsiIhz98FWbGyu577xQ4VWTJnrQF8KcMcUlhACmVBe3Hd7vkzNsnqWzWM37DxDfUUYXpiyP0Oy4iE4MvkBuWzyCB9lpbBunMimCpa3qR4FklHm8g/4HL7ng2KqC8vImnMCjCfwZJjYuOYOiPwELe2Y3XfwRKLsWvBx+qblMC5gyUe4EjwYjInJfh2FX6+eZQThY4XRLToZccpjGuP4/UhqAcY6XhBfn3ZUkushoFYKaJNA6Mlsvk/qzZ0oZQmqwnOUbBXPl+fonzSdcRTGYBtF3jg5aNryJaVFgZ0PimC3eYfW3etwXd2M1iH3ftP4IYdSNeYKX1tNDgoVR6cAHGdmWPtAjWPnJ1hmq1Yu3K0XPh6lne5XiLQpL1aLh9qu1RvYX+pvROi8wffMFjsgChALwAAAABJRU5ErkJggg==\n", "text/latex": [ "$$\\sqrt{\\pi} e^{- \\pi^{2} y^{2}}$$" ], "text/plain": [ " 2 2\n", " -π ⋅y \n", "√π⋅ℯ " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f = exp(-x**2)\n", "F = fourier_transform(f, x, y)\n", "F" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's compute the Fourier transform of a square function" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "y = symbols(\"y\", positive=True)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEUAAAAwBAMAAAC1TKpoAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMnZUZs0Qu91E7yKJmaurDqYVAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABwUlEQVQ4EeWUPUsjURSGn4lmRk0UP9g2jFqKH9gsWIW0rjC/YJluwWLZRhYUZDoLG2sRFGuFgOKKNiLYWWRBsVRhSbVFVhYXP9h4rjO5mTtk0lp4IJlz3vvcOSe5lxeSsW8Is43K2m5kkPvWzCXrK0el9dzUsw0xlGyvuaSzOZ2FyWmiVuVqQpuP6tyAXsgFOg2T7BpYoyXvx38+7A5OuKJmKvKpS1TscZcjn7wIXyDgM6y4uSdhnCKcD42Vjsl3bDEJnTL0uo/LMizCX2G6prCm8uVh2Ov1+A4dgYj/xlDMAtwJ0yPtcaiC3+MqxaqBfVavKEa2aKYg7WHTt/6EzAGdDzFGesEF9/J9SWYLugOYhl8xRs1s3/MgzDLOTTjzjM+SahT1Uj81E7AjzBWbReg9gY3Sp7VCvVqo3358lG3q1fKu38DX0+syZPslTUT8LC5l7TCxrkp9pn2eraZqdaaOvP81uoqOK/N7URl/6DvWPfJTdL0lzpByVw3mjQt159pH7Y0nfJ/tDTNI+QsMM2jNmGbQmjHNII2Jm0EaEzeDFMYwgxTGMIMUxjCDFEbLygzaRmQGbZnQDNoihGYQY14A3pWgIgxxGTcAAAAASUVORK5CYII=\n", "text/latex": [ "$$\\frac{\\sin{\\left (\\pi y \\right )}}{\\pi y}$$" ], "text/plain": [ "sin(π⋅y)\n", "────────\n", " π⋅y " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "square = Piecewise((0, x<-S(1)/2), (0, x>S(1)/2), (1, True))\n", "T_square = fourier_transform(square, x, y)\n", "T_square = simplify(T_square.rewrite(sin))\n", "T_square" ] }, { "cell_type": "code", "execution_count": 14, "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 images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", " 'ui-helper-clearfix\"/>');\n", " var titletext = $(\n", " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", " 'text-align: center; padding: 3px;\"/>');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('<div/>');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('<canvas/>');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('<canvas/>');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('<div/>')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('<button/>');\n", " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", " 'ui-button-icon-only');\n", " button.attr('role', 'button');\n", " button.attr('aria-disabled', 'false');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", "\n", " var icon_img = $('<span/>');\n", " icon_img.addClass('ui-button-icon-primary ui-icon');\n", " icon_img.addClass(image);\n", " icon_img.addClass('ui-corner-all');\n", "\n", " var tooltip_span = $('<span/>');\n", " tooltip_span.addClass('ui-button-text');\n", " tooltip_span.html(tooltip);\n", "\n", " button.append(icon_img);\n", " button.append(tooltip_span);\n", "\n", " nav_element.append(button);\n", " }\n", "\n", " var fmt_picker_span = $('<span/>');\n", "\n", " var fmt_picker = $('<select/>');\n", " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", " fmt_picker_span.append(fmt_picker);\n", " nav_element.append(fmt_picker_span);\n", " this.format_dropdown = fmt_picker[0];\n", "\n", " for (var ind in mpl.extensions) {\n", " var fmt = mpl.extensions[ind];\n", " var option = $(\n", " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", " fmt_picker.append(option)\n", " }\n", "\n", " // Add hover states to the ui-buttons\n", " $( \".ui-button\" ).hover(\n", " function() { $(this).addClass(\"ui-state-hover\");},\n", " function() { $(this).removeClass(\"ui-state-hover\");}\n", " );\n", "\n", " var status_bar = $('<span class=\"mpl-message\"/>');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "}\n", "\n", "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", " // which will in turn request a refresh of the image.\n", " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", "}\n", "\n", "mpl.figure.prototype.send_message = function(type, properties) {\n", " properties['type'] = type;\n", " properties['figure_id'] = this.id;\n", " this.ws.send(JSON.stringify(properties));\n", "}\n", "\n", "mpl.figure.prototype.send_draw_message = function() {\n", " if (!this.waiting) {\n", " this.waiting = true;\n", " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", " }\n", "}\n", "\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " var format_dropdown = fig.format_dropdown;\n", " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", " fig.ondownload(fig, format);\n", "}\n", "\n", "\n", "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", " var size = msg['size'];\n", " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", " fig._resize_canvas(size[0], size[1]);\n", " fig.send_message(\"refresh\", {});\n", " };\n", "}\n", "\n", "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", " var x0 = msg['x0'] / mpl.ratio;\n", " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", " var x1 = msg['x1'] / mpl.ratio;\n", " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", " x0 = Math.floor(x0) + 0.5;\n", " y0 = Math.floor(y0) + 0.5;\n", " x1 = Math.floor(x1) + 0.5;\n", " y1 = Math.floor(y1) + 0.5;\n", " var min_x = Math.min(x0, x1);\n", " var min_y = Math.min(y0, y1);\n", " var width = Math.abs(x1 - x0);\n", " var height = Math.abs(y1 - y0);\n", "\n", " fig.rubberband_context.clearRect(\n", " 0, 0, fig.canvas.width, 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 but\n", " * transferred with MIME type text/plain:\" errors on\n", " * Chrome. But how to set the MIME type? It doesn't seem\n", " * to be part of the websocket stream */\n", " evt.data.type = \"image/png\";\n", "\n", " /* Free the memory for the previous frames */\n", " if (fig.imageObj.src) {\n", " (window.URL || window.webkitURL).revokeObjectURL(\n", " fig.imageObj.src);\n", " }\n", "\n", " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", " evt.data);\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", " fig.imageObj.src = evt.data;\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", "\n", " var msg = JSON.parse(evt.data);\n", " var msg_type = msg['type'];\n", "\n", " // Call the \"handle_{type}\" callback, which takes\n", " // the figure and JSON message as its only arguments.\n", " try {\n", " var callback = fig[\"handle_\" + msg_type];\n", " } catch (e) {\n", " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", " return;\n", " }\n", "\n", " if (callback) {\n", " try {\n", " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", " callback(fig, msg);\n", " } catch (e) {\n", " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", " }\n", " }\n", " };\n", "}\n", "\n", "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", "mpl.findpos = function(e) {\n", " //this section is from http://www.quirksmode.org/js/events_properties.html\n", " var targ;\n", " if (!e)\n", " e = window.event;\n", " if (e.target)\n", " targ = e.target;\n", " else if (e.srcElement)\n", " targ = e.srcElement;\n", " if (targ.nodeType == 3) // defeat Safari bug\n", " targ = targ.parentNode;\n", "\n", " // jQuery normalizes the pageX and pageY\n", " // pageX,Y are the mouse positions relative to the document\n", " // offset() returns the position of the element relative to the document\n", " var x = e.pageX - $(targ).offset().left;\n", " var y = e.pageY - $(targ).offset().top;\n", "\n", " return {\"x\": x, \"y\": y};\n", "};\n", "\n", "/*\n", " * return a copy of an object with only non-object keys\n", " * we need this to avoid circular references\n", " * http://stackoverflow.com/a/24161582/3208463\n", " */\n", "function simpleKeys (original) {\n", " return Object.keys(original).reduce(function (obj, key) {\n", " if (typeof original[key] !== 'object')\n", " obj[key] = original[key]\n", " return obj;\n", " }, {});\n", "}\n", "\n", "mpl.figure.prototype.mouse_event = function(event, name) {\n", " var canvas_pos = mpl.findpos(event)\n", "\n", " if (name === 'button_press')\n", " {\n", " this.canvas.focus();\n", " this.canvas_div.focus();\n", " }\n", "\n", " var x = canvas_pos.x * mpl.ratio;\n", " var y = canvas_pos.y * mpl.ratio;\n", "\n", " this.send_message(name, {x: x, y: y, button: event.button,\n", " step: event.step,\n", " guiEvent: simpleKeys(event)});\n", "\n", " /* This prevents the web browser from automatically changing to\n", " * the text insertion cursor when the button is pressed. We want\n", " * to control all of the cursor setting manually through the\n", " * 'cursor' event from matplotlib */\n", " event.preventDefault();\n", " return false;\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " // Handle any extra behaviour associated with a key event\n", "}\n", "\n", "mpl.figure.prototype.key_event = function(event, name) {\n", "\n", " // Prevent repeat events\n", " if (name == 'key_press')\n", " {\n", " if (event.which === this._key)\n", " return;\n", " else\n", " this._key = event.which;\n", " }\n", " if (name == 'key_release')\n", " this._key = null;\n", "\n", " var value = '';\n", " if (event.ctrlKey && event.which != 17)\n", " value += \"ctrl+\";\n", " if (event.altKey && event.which != 18)\n", " value += \"alt+\";\n", " if (event.shiftKey && event.which != 16)\n", " value += \"shift+\";\n", "\n", " value += 'k';\n", " value += event.which.toString();\n", "\n", " this._key_event_extra(event, name);\n", "\n", " this.send_message(name, {key: value,\n", " guiEvent: simpleKeys(event)});\n", " return false;\n", "}\n", "\n", "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", " if (name == 'download') {\n", " this.handle_save(this, null);\n", " } else {\n", " this.send_message(\"toolbar_button\", {name: name});\n", " }\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", " this.message.textContent = tooltip;\n", "};\n", "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", "\n", "mpl.extensions = [\"eps\", \"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 comm\n", " // object with the appropriate methods. Currently this is a non binary\n", " // socket, so there is still some room for performance tuning.\n", " var ws = {};\n", "\n", " ws.close = function() {\n", " comm.close()\n", " };\n", " ws.send = function(m) {\n", " //console.log('sending', m);\n", " comm.send(m);\n", " };\n", " // Register the callback with on_msg.\n", " comm.on_msg(function(msg) {\n", " //console.log('receiving', msg['content']['data'], msg);\n", " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", " ws.onmessage(msg['content']['data'])\n", " });\n", " return ws;\n", "}\n", "\n", "mpl.mpl_figure_comm = function(comm, msg) {\n", " // This is the function which gets called when the mpl process\n", " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", "\n", " var id = msg.content.data.id;\n", " // Get hold of the div created by the display call when the Comm\n", " // socket was opened in Python.\n", " var element = $(\"#\" + id);\n", " var ws_proxy = comm_websocket_adapter(comm)\n", "\n", " function ondownload(figure, format) {\n", " window.open(figure.imageObj.src);\n", " }\n", "\n", " var fig = new mpl.figure(id, ws_proxy,\n", " ondownload,\n", " element.get(0));\n", "\n", " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", " // web socket which is closed, not our websocket->open comm proxy.\n", " ws_proxy.onopen();\n", "\n", " fig.parent_element = element.get(0);\n", " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", " if (!fig.cell_info) {\n", " console.error(\"Failed to find cell for figure\", id, fig);\n", " return;\n", " }\n", "\n", " var output_index = fig.cell_info[2]\n", " var cell = fig.cell_info[0];\n", "\n", "};\n", "\n", "mpl.figure.prototype.handle_close = function(fig, msg) {\n", " var width = fig.canvas.width/mpl.ratio\n", " fig.root.unbind('remove')\n", "\n", " // Update the output cell to use the data from the current canvas.\n", " fig.push_to_output();\n", " var dataURL = fig.canvas.toDataURL();\n", " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", " // the notebook keyboard shortcuts fail.\n", " IPython.keyboard_manager.enable()\n", " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", " fig.close_ws(fig, msg);\n", "}\n", "\n", "mpl.figure.prototype.close_ws = function(fig, msg){\n", " fig.send_message('closing', msg);\n", " // fig.ws.close()\n", "}\n", "\n", "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", " // Turn the data on the canvas into data in the output cell.\n", " var width = this.canvas.width/mpl.ratio\n", " var dataURL = this.canvas.toDataURL();\n", " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", "}\n", "\n", "mpl.figure.prototype.updated_canvas_event = function() {\n", " // Tell IPython that the notebook contents must change.\n", " IPython.notebook.set_dirty(true);\n", " this.send_message(\"ack\", {});\n", " var fig = this;\n", " // Wait a second, then push the new image to the DOM so\n", " // that it is saved nicely (might be nice to debounce this).\n", " setTimeout(function () { fig.push_to_output() }, 1000);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('<div/>')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items){\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) { continue; };\n", "\n", " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " 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 for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i<ncells; i++) {\n", " var cell = cells[i];\n", " if (cell.cell_type === 'code'){\n", " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", " var data = cell.output_area.outputs[j];\n", " if (data.data) {\n", " // IPython >= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "<IPython.core.display.Javascript object>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtAAAAHgCAYAAACMxVqsAAAgAElEQVR4nOzdeXxU1f3/8Uto5dtqv1/tt98W+dkG0VQNCFWL4EptCeIutVi7KMpSrVqotTZhV0Aiq7KEVRQREhBB1MlOFiAJJIQESNiXhLAGCGQhhGQy8/n9gZyZyTrLvTND5vV8PObRenPvOZ+BYfKeM+eeowkAAAAAp2m+LgAAAAC4mhCgAQAAABcQoAEAAAAXEKABAAAAFxCgAQAAABcQoAEAAAAXEKABAAAAFxCgAQAAABcQoAEAAAAXEKABAAAAFxCgAQAAABcQoAEAAAAXEKABAAAAFxCgAQAAABcQoAEAAAAXEKABAAAAFxCgAQAAABcQoAEAAAAXEKABAAAAFxCgAQAAABcQoAEAAAAXEKABAAAAFxCgAQAAABcQoAEAAAAXEKABAAAAFxCgAQAAABcQoAEAAAAXEKABAAAAFxCgAQAAABcQoAEAAAAXEKABAAAAFxCgAQAAABcQoAEAAAAXEKABAAAAFxCgAQAAABcQoAEAAAAXEKABAAAAFxCgAQAAABcQoAEAAAAXEKABAAAAFxCgAQAAABcQoAEAAAAXEKABAAAAFxCgAfiV8vJyqaio8HUZAAA0iwANwKe2bdsm77zzjtxzzz3SoUMHCQoKkqCgIOnQoYP8+te/lv/85z+ydetWX5cJAIBCgAbgE3FxcdKrVy8JCgqSdu3aSXBwsPTt21f++Mc/yvPPPy+/+93v5Be/+IW0a9dOgoKCpGfPnhIfH+/rsgEAIEAD8L7+/ftLu3bt5MEHH5TFixfLiRMnmj33+PHjsmDBAnnwwQelXbt28thjj3mxUgAAGiNAA/C6fv36SU5OjsvXZWdnS79+/QyoCAAA5xGgAQAAABcQoAEAAAAXEKAB+Nx9990nn376qVy8eNHXpQAA0CoCNACfu+GGGyQoKEiuv/56eeONN2T79u2+LgkAgGYRoAH43KVLl2T58uXSp08ftWxdr1695OOPP5bq6mpflwcAgAMCNAC/sn//fnnnnXfkZz/7mbRr107++7//W1577TXZtm2br0sDAEBECNAA/JTZbJYvv/xS+vbtq3YnvOeee2TJkiVSV1fn6/IAAAGMAA3ALxUXF8vYsWPlpptuknbt2knHjh3V/+/SpYvk5+f7ukQAQIAiQAPwG2azWb744gvp16+ftG/fXtq1aye//e1v5YsvvhCz2SwWi0VWrVolHTt2lN69e/u6XABAgCJAA/C5PXv2yNtvvy0//elPJSgoSH7yk5/I22+/Lfv372/y/Llz50qHDh28XCUAAJcRoAH4XLt27aRdu3bywAMPyOeffy6XLl1q8fxvv/1WOnfu7KXqAABwRIAG4HNvvPGGFBQU+LoMAACcQoAGAAAAXECABgAAAFxAgAbgdd26dZN169a5fN3atWulW7duBlQEAIDzCNAAvO6VV16R9u3by6233iqTJk2SvLw8sVgsjc6rr6+Xbdu2yYQJE+SWW26R9u3by+DBg31QMQAANgRoAD6Rl5cnzzzzjHzve9+ToKAgufbaayU0NFQeeughefDBByU0NFR++MMfSlBQkLRv316efvpptvMGAPgFAjQAnzpy5IhMnz5dnnjiCencubNce+21cu2110rnzp3lySeflOnTp0txcbGvywQAQCFAA/C6Rx55RNavX6/++7PPPpOioiLfFQQAgAsI0AC8rl27drJixQr130FBQQ7/7Q8qKyvlnXfekbCwMPnJT34imqbJ+PHjnb6+tLRUBg0aJP/7v/8rP/jBD6R3794OHxoAAFcvAjQAr+vUqZNMmjRJ/XfDQO0PioqK5H/+53/k4YcflqFDh7oUoC9duiTdunWTm266SZYvXy5JSUlqvnd6erqxhQMADEeABuB1L774ovzXf/2XPPvss/LKK69Iu3btpE+fPvLKK680+/D26htWq1WsVquIiJw5c8alAB0VFSWapklWVpY6ZjabJTQ0VO69914jygUAeBEBGoDXnT17Vl566SXp1KmTBAUFSVBQkLRr167FR1BQkM/qdTVA9+3bV2677bZGxydPniyapsmxY8d0rhAA4E0EaAA+549TOOy5GqA7duwoAwcObHTcZDKJpmmSmJioc4UAAG8iQAPwuZdfflm2bNni6zKa5WqA/v73vy+vvvpqo+NZWVmiaZpER0e7XENoaKh63BEaKrf17itdnhkuf5m6WnaXnFHTTQAAxiNAA0Ar3AnQr732WqPjVwJ0TEyMyzXYB+iQvi/IzYM/lE7PjRZN0+TB8M9k/e5TLrcJAHAPARoAWuFPUzjOXaiVYZ9tlYenpkqXVxeIpmkS+uYi+cP8TCmvrnW7XQCA8wjQANAKVwN0WFiY3H777Y2OR0ZG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wgBNRERERCQDAzQRERERkQwM0EREREREMjBAExERERHJwABNRERERCQDAzQRERERkQwM0EREREREMjBAExERERHJwABNRERERCQDAzQRERERkQwM0EREREREMjBAExERERHJwABNRERERCQDAzQRERERkQwM0EREREREMjBAExERERHJwABNRERERCQDAzQRERERkQwM0EREREREMjBAExERERHJwABNRERERCQDAzQRERERkQwM0EREREREMjBAExERERHJwABNRERERCQDAzQRERERkQwM0EREREREMjBAExERERHJwABNRERERCQDAzQRERERkQwM0EREREREMjBAExERERHJwABNRERERCQDAzQRERERkQwM0EREREREMjBAExERERHJwABNRERERCQDAzQRERERkQwM0EREREREMjBAExERERHJwABNRERERCQDAzQRERERkQwM0EREREREMjBAExERERHJwABNRERERCQDAzQRERERkQwM0EREREREMjBAExERERHJwABNRERERCQDAzQRERERkQwM0EREREREMjBAExERERHJwABNRERERCQDAzQRERERkQwM0EREREREMjBAExERERHJwABNRERERCQDAzQRERERkQwM0EREREREMjBAExERERHJwABNRERERCQDAzQRERERkQwM0EREREREMjBAExERERHJwABNRERERCQDAzQRERERkQwM0EREREREMjBAExERERHJ8P810afHmKyvFwAAAABJRU5ErkJggg==\" width=\"600\">" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot(T_square);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can explicitly solve the last integral" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "y = symbols(\"y\", nonzero=True)\n", "FT = integrate(exp(-2*pi*I*x*y), (x, -S(1)/2, S(1)/2))" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEUAAAAwBAMAAAC1TKpoAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAMnZUZs0Qu91E7yKJmaurDqYVAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABwUlEQVQ4EeWUPUsjURSGn4lmRk0UP9g2jFqKH9gsWIW0rjC/YJluwWLZRhYUZDoLG2sRFGuFgOKKNiLYWWRBsVRhSbVFVhYXP9h4rjO5mTtk0lp4IJlz3vvcOSe5lxeSsW8Is43K2m5kkPvWzCXrK0el9dzUsw0xlGyvuaSzOZ2FyWmiVuVqQpuP6tyAXsgFOg2T7BpYoyXvx38+7A5OuKJmKvKpS1TscZcjn7wIXyDgM6y4uSdhnCKcD42Vjsl3bDEJnTL0uo/LMizCX2G6prCm8uVh2Ov1+A4dgYj/xlDMAtwJ0yPtcaiC3+MqxaqBfVavKEa2aKYg7WHTt/6EzAGdDzFGesEF9/J9SWYLugOYhl8xRs1s3/MgzDLOTTjzjM+SahT1Uj81E7AjzBWbReg9gY3Sp7VCvVqo3358lG3q1fKu38DX0+syZPslTUT8LC5l7TCxrkp9pn2eraZqdaaOvP81uoqOK/N7URl/6DvWPfJTdL0lzpByVw3mjQt159pH7Y0nfJ/tDTNI+QsMM2jNmGbQmjHNII2Jm0EaEzeDFMYwgxTGMIMUxjCDFEbLygzaRmQGbZnQDNoihGYQY14A3pWgIgxxGTcAAAAASUVORK5CYII=\n", "text/latex": [ "$$\\frac{\\sin{\\left (\\pi y \\right )}}{\\pi y}$$" ], "text/plain": [ "sin(π⋅y)\n", "────────\n", " π⋅y " ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "FT = simplify(FT.rewrite(sin))\n", "FT" ] }, { "cell_type": "code", "execution_count": 17, "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 images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", " 'ui-helper-clearfix\"/>');\n", " var titletext = $(\n", " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", " 'text-align: center; padding: 3px;\"/>');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('<div/>');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('<canvas/>');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('<canvas/>');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('<div/>')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('<button/>');\n", " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", " 'ui-button-icon-only');\n", " button.attr('role', 'button');\n", " button.attr('aria-disabled', 'false');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", "\n", " var icon_img = $('<span/>');\n", " icon_img.addClass('ui-button-icon-primary ui-icon');\n", " icon_img.addClass(image);\n", " icon_img.addClass('ui-corner-all');\n", "\n", " var tooltip_span = $('<span/>');\n", " tooltip_span.addClass('ui-button-text');\n", " tooltip_span.html(tooltip);\n", "\n", " button.append(icon_img);\n", " button.append(tooltip_span);\n", "\n", " nav_element.append(button);\n", " }\n", "\n", " var fmt_picker_span = $('<span/>');\n", "\n", " var fmt_picker = $('<select/>');\n", " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", " fmt_picker_span.append(fmt_picker);\n", " nav_element.append(fmt_picker_span);\n", " this.format_dropdown = fmt_picker[0];\n", "\n", " for (var ind in mpl.extensions) {\n", " var fmt = mpl.extensions[ind];\n", " var option = $(\n", " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", " fmt_picker.append(option)\n", " }\n", "\n", " // Add hover states to the ui-buttons\n", " $( \".ui-button\" ).hover(\n", " function() { $(this).addClass(\"ui-state-hover\");},\n", " function() { $(this).removeClass(\"ui-state-hover\");}\n", " );\n", "\n", " var status_bar = $('<span class=\"mpl-message\"/>');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "}\n", "\n", "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", " // which will in turn request a refresh of the image.\n", " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", "}\n", "\n", "mpl.figure.prototype.send_message = function(type, properties) {\n", " properties['type'] = type;\n", " properties['figure_id'] = this.id;\n", " this.ws.send(JSON.stringify(properties));\n", "}\n", "\n", "mpl.figure.prototype.send_draw_message = function() {\n", " if (!this.waiting) {\n", " this.waiting = true;\n", " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", " }\n", "}\n", "\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " var format_dropdown = fig.format_dropdown;\n", " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", " fig.ondownload(fig, format);\n", "}\n", "\n", "\n", "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", " var size = msg['size'];\n", " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", " fig._resize_canvas(size[0], size[1]);\n", " fig.send_message(\"refresh\", {});\n", " };\n", "}\n", "\n", "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", " var x0 = msg['x0'] / mpl.ratio;\n", " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", " var x1 = msg['x1'] / mpl.ratio;\n", " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", " x0 = Math.floor(x0) + 0.5;\n", " y0 = Math.floor(y0) + 0.5;\n", " x1 = Math.floor(x1) + 0.5;\n", " y1 = Math.floor(y1) + 0.5;\n", " var min_x = Math.min(x0, x1);\n", " var min_y = Math.min(y0, y1);\n", " var width = Math.abs(x1 - x0);\n", " var height = Math.abs(y1 - y0);\n", "\n", " fig.rubberband_context.clearRect(\n", " 0, 0, fig.canvas.width, 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 but\n", " * transferred with MIME type text/plain:\" errors on\n", " * Chrome. But how to set the MIME type? It doesn't seem\n", " * to be part of the websocket stream */\n", " evt.data.type = \"image/png\";\n", "\n", " /* Free the memory for the previous frames */\n", " if (fig.imageObj.src) {\n", " (window.URL || window.webkitURL).revokeObjectURL(\n", " fig.imageObj.src);\n", " }\n", "\n", " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", " evt.data);\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", " fig.imageObj.src = evt.data;\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", "\n", " var msg = JSON.parse(evt.data);\n", " var msg_type = msg['type'];\n", "\n", " // Call the \"handle_{type}\" callback, which takes\n", " // the figure and JSON message as its only arguments.\n", " try {\n", " var callback = fig[\"handle_\" + msg_type];\n", " } catch (e) {\n", " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", " return;\n", " }\n", "\n", " if (callback) {\n", " try {\n", " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", " callback(fig, msg);\n", " } catch (e) {\n", " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", " }\n", " }\n", " };\n", "}\n", "\n", "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", "mpl.findpos = function(e) {\n", " //this section is from http://www.quirksmode.org/js/events_properties.html\n", " var targ;\n", " if (!e)\n", " e = window.event;\n", " if (e.target)\n", " targ = e.target;\n", " else if (e.srcElement)\n", " targ = e.srcElement;\n", " if (targ.nodeType == 3) // defeat Safari bug\n", " targ = targ.parentNode;\n", "\n", " // jQuery normalizes the pageX and pageY\n", " // pageX,Y are the mouse positions relative to the document\n", " // offset() returns the position of the element relative to the document\n", " var x = e.pageX - $(targ).offset().left;\n", " var y = e.pageY - $(targ).offset().top;\n", "\n", " return {\"x\": x, \"y\": y};\n", "};\n", "\n", "/*\n", " * return a copy of an object with only non-object keys\n", " * we need this to avoid circular references\n", " * http://stackoverflow.com/a/24161582/3208463\n", " */\n", "function simpleKeys (original) {\n", " return Object.keys(original).reduce(function (obj, key) {\n", " if (typeof original[key] !== 'object')\n", " obj[key] = original[key]\n", " return obj;\n", " }, {});\n", "}\n", "\n", "mpl.figure.prototype.mouse_event = function(event, name) {\n", " var canvas_pos = mpl.findpos(event)\n", "\n", " if (name === 'button_press')\n", " {\n", " this.canvas.focus();\n", " this.canvas_div.focus();\n", " }\n", "\n", " var x = canvas_pos.x * mpl.ratio;\n", " var y = canvas_pos.y * mpl.ratio;\n", "\n", " this.send_message(name, {x: x, y: y, button: event.button,\n", " step: event.step,\n", " guiEvent: simpleKeys(event)});\n", "\n", " /* This prevents the web browser from automatically changing to\n", " * the text insertion cursor when the button is pressed. We want\n", " * to control all of the cursor setting manually through the\n", " * 'cursor' event from matplotlib */\n", " event.preventDefault();\n", " return false;\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " // Handle any extra behaviour associated with a key event\n", "}\n", "\n", "mpl.figure.prototype.key_event = function(event, name) {\n", "\n", " // Prevent repeat events\n", " if (name == 'key_press')\n", " {\n", " if (event.which === this._key)\n", " return;\n", " else\n", " this._key = event.which;\n", " }\n", " if (name == 'key_release')\n", " this._key = null;\n", "\n", " var value = '';\n", " if (event.ctrlKey && event.which != 17)\n", " value += \"ctrl+\";\n", " if (event.altKey && event.which != 18)\n", " value += \"alt+\";\n", " if (event.shiftKey && event.which != 16)\n", " value += \"shift+\";\n", "\n", " value += 'k';\n", " value += event.which.toString();\n", "\n", " this._key_event_extra(event, name);\n", "\n", " this.send_message(name, {key: value,\n", " guiEvent: simpleKeys(event)});\n", " return false;\n", "}\n", "\n", "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", " if (name == 'download') {\n", " this.handle_save(this, null);\n", " } else {\n", " this.send_message(\"toolbar_button\", {name: name});\n", " }\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", " this.message.textContent = tooltip;\n", "};\n", "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", "\n", "mpl.extensions = [\"eps\", \"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 comm\n", " // object with the appropriate methods. Currently this is a non binary\n", " // socket, so there is still some room for performance tuning.\n", " var ws = {};\n", "\n", " ws.close = function() {\n", " comm.close()\n", " };\n", " ws.send = function(m) {\n", " //console.log('sending', m);\n", " comm.send(m);\n", " };\n", " // Register the callback with on_msg.\n", " comm.on_msg(function(msg) {\n", " //console.log('receiving', msg['content']['data'], msg);\n", " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", " ws.onmessage(msg['content']['data'])\n", " });\n", " return ws;\n", "}\n", "\n", "mpl.mpl_figure_comm = function(comm, msg) {\n", " // This is the function which gets called when the mpl process\n", " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", "\n", " var id = msg.content.data.id;\n", " // Get hold of the div created by the display call when the Comm\n", " // socket was opened in Python.\n", " var element = $(\"#\" + id);\n", " var ws_proxy = comm_websocket_adapter(comm)\n", "\n", " function ondownload(figure, format) {\n", " window.open(figure.imageObj.src);\n", " }\n", "\n", " var fig = new mpl.figure(id, ws_proxy,\n", " ondownload,\n", " element.get(0));\n", "\n", " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", " // web socket which is closed, not our websocket->open comm proxy.\n", " ws_proxy.onopen();\n", "\n", " fig.parent_element = element.get(0);\n", " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", " if (!fig.cell_info) {\n", " console.error(\"Failed to find cell for figure\", id, fig);\n", " return;\n", " }\n", "\n", " var output_index = fig.cell_info[2]\n", " var cell = fig.cell_info[0];\n", "\n", "};\n", "\n", "mpl.figure.prototype.handle_close = function(fig, msg) {\n", " var width = fig.canvas.width/mpl.ratio\n", " fig.root.unbind('remove')\n", "\n", " // Update the output cell to use the data from the current canvas.\n", " fig.push_to_output();\n", " var dataURL = fig.canvas.toDataURL();\n", " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", " // the notebook keyboard shortcuts fail.\n", " IPython.keyboard_manager.enable()\n", " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", " fig.close_ws(fig, msg);\n", "}\n", "\n", "mpl.figure.prototype.close_ws = function(fig, msg){\n", " fig.send_message('closing', msg);\n", " // fig.ws.close()\n", "}\n", "\n", "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", " // Turn the data on the canvas into data in the output cell.\n", " var width = this.canvas.width/mpl.ratio\n", " var dataURL = this.canvas.toDataURL();\n", " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", "}\n", "\n", "mpl.figure.prototype.updated_canvas_event = function() {\n", " // Tell IPython that the notebook contents must change.\n", " IPython.notebook.set_dirty(true);\n", " this.send_message(\"ack\", {});\n", " var fig = this;\n", " // Wait a second, then push the new image to the DOM so\n", " // that it is saved nicely (might be nice to debounce this).\n", " setTimeout(function () { fig.push_to_output() }, 1000);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('<div/>')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items){\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) { continue; };\n", "\n", " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " 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 for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i<ncells; i++) {\n", " var cell = cells[i];\n", " if (cell.cell_type === 'code'){\n", " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", " var data = cell.output_area.outputs[j];\n", " if (data.data) {\n", " // IPython >= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "<IPython.core.display.Javascript object>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtAAAAHgCAYAAACMxVqsAAAgAElEQVR4nOzdeXhU5d3/8UNopT7aVts+LfC0DYu4BAQ3hArVqgRo3epuaxVlqVYtaP3ZhF3ZFVBB9k3EkICIokw2EsKWBMISlhB2yEIChC0hIetk5vv7A3PPTNZZzpkZMu/Xdc116cmc+/5OmCSfOedeNAEAAADgNM3XBQAAAABXEwI0AAAA4AICNAAAAOACAjQAAADgAgI0AAAA4AICNAAAAOACAjQAAADgAgI0AAAA4AICNAAAAOACAjQAAADgAgI0AAAA4AICNAAAAOACAjQAAADgAgI0AAAA4AICNAAAAOACAjQAAADgAgI0AAAA4AICNAAAAOACAjQAAADgAgI0AAAA4AICNAAAAOACAjQAAADgAgI0AAAA4AICNAAAAOACAjQAAADgAgI0AAAA4AICNAAAAOACAjQAAADgAgI0AAAA4AICNAAAAOACAjQAAADgAgI0AAAA4AICNAAAAOACAjQAAADgAgI0AAAA4AICNAAAAOACAjQAAADgAgI0AAAA4AICNAAAAOACAjQAAADgAgI0AAAA4AICNAAAAOACAjQAAADgAgI0AL9SVFQkly5d8nUZAAA0iAANwKd27dol7733ntx9993SqlUrCQoKkqCgIGnVqpXcc8898t///ld27Njh6zIBAFAI0AB8IiYmRnr06CFBQUHSokULCQ4Olj59+sjzzz8vzz33nDz88MPy+9//Xlq0aCFBQUHSvXt3iY2N9XXZAAAQoAF4X//+/aVFixbSu3dvWbhwoZw6darB5+bn58u8efOkd+/e0qJFC/nzn//sxUoBAKiLAA3A6/r27Svbt293+by0tDTp27evARUBAOA8AjQAAADgAgI0AAAA4AICNACf+8Mf/iCff/65lJWV+boUAACaRIAG4HM33nijBAUFyQ033CBvvvmm7Nmzx9clAQDQIAI0AJ+rqKiQiIgIeeCBB9SydT169JBFixZJaWmpr8sDAMABARqAXzly5Ii899578pvf/EZatGghP/vZz+T111+XXbt2+bo0AABEhAANwE+ZzWb5+uuvpU+fPmp3wrvvvlsWL14sVVVVvi4PABDACNAA/FJ2draMHj1afvvb30qLFi2kdevW6r87dOggu3fv9nWJAIAARYAG4DfMZrN89dVX0rdvX2nZsqW0aNFCHnroIfnqq6/EbDaLxWKRlStXSuvWraVnz56+LhcAEKAI0AB87uDBg/Luu+/Kr3/9awkKCpJf/epX8u6778qRI0fqff6sWbOkVatWXq4SAIArCNAAfK5FixbSokUL6dWrl3z55ZdSUVHR6PPXrl0r7dq181J1AAA4IkAD8Lk333xTMjIyfF0GAABOIUADAAAALiBAAwAAAC4gQAPwui5dusiaNWtcPu+bb76RLl26GFARAADOI0AD8LpXX31VWrZsKTfddJNMmDBB0tPTxWKx1HledXW17Nq1S8aNGycdO3aUli1bysCBA31QMQAANgRoAD6Rnp4uTzzxhPzoRz+SoKAgue666yQkJET++Mc/Su/evSUkJET+53/+R4KCgqRly5by+OOPs503AMAvEKAB+FROTo5MmzZNHnnkEWnXrp1cd911ct1110m7du3k0UcflWnTpkl2dravywQAQCFAA/C6Bx98UBITE9X/f/HFF5KVleW7ggAAcAEBGoDXtWjRQpYvX67+PygoyOH//UFxcbG89957EhoaKr/61a9E0zQZO3as0+cXFBTIgAED5Je//KVce+210rNnT4cPDQCAqxcBGoDXtW3bViZMmKD+v3ag9gdZWVny85//XO6//34ZPHiwSwG6oqJCunTpIr/97W8lIiJC1q1bp8Z7b9y40djCAQCGI0AD8LqXXnpJfvKTn8hf//pXefXVV6VFixbywAMPyKuvvtrgw9urb1itVrFarSIicu7cOZcC9OzZs0XTNElNTVXHzGazhISEyL333mtEuQAALyJAA/C68+fPy8svvyxt27aVoKAgCQoKkhYtWjT6CAoK8lm9rgboPn36yC233FLn+KRJk0TTNMnLy9O5QgCANxGgAficPw7hsOdqgG7durU8++yzdY6bTCbRNE3i4+N1qctisYq5uu762QAAYxGgAfjcK6+8Itu2bfN1GQ1yNUD/+Mc/ltdee63O8dTUVNE0TSIjI12uISQkRD1uCwmRm3v9WTr+eZC8vzRGYnZnq+EmAADjEaABoAnuBOjXX3+9zvGaAB0VFeVyDfYB+uY/PS3BbyyWtk+Fi6Zp0jtsqSQeOONymwAA9xCgAaAJ/jSE48LlSnlp0Tb5w+REaf/POaJpmnR/d4k88FGSXCqrdLtdAIDzCNAA0ARXA3RoaKjceuutdY5P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0ERERERECjBAExEREREpwABNRERERKQAAzQRERERkQIM0ERERERECjBAExEREREpwABNRERERKQAAzQRERERkQIM0ERERERECjBAExEREREpwABNRERERKQAAzQRERERkQIM0ERERERECjBAExEREREpwABNRERERKQAAzQRERERkQIM0ERERERECjBAExEREREpwABNRERERKQAAzQRERERkQIM0ERERERECjBAExEREREpwABNRERERKQAAzQRERERkQIM0ERERERECjBAExEREREpwABNRERERKQAAzQRERERkQIM0ERERERECjBAExEREREpwABNRERERKQAAzQRERERkQIM0ERERERECjBAExEREREpwABNRERERKQAAzQRERERkQIM0ERERERECjBAExEREREpwABNRERERKQAAzQRERERkQIM0ERERERECjBAExEREREpwABNRERERKQAAzQRERERkQIM0ERERERECjBAExEREREpwABNRERERKQAAzQRERERkQIM0ERERERECjBAExEREREpwABNRERERKQAAzQRERERkQIM0ERERERECjBAExEREREpwABNRERERKQAAzQRERERkQIM0ERERERECjBAExEREREpwABNRERERKQAAzQRERERkQIM0ERERERECjBAExEREREpwABNRERERKQAAzQRERERkQIM0ERERERECjBAExEREREp8P8BynajyU7j5ngAAAAASUVORK5CYII=\" width=\"600\">" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot(FT);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fast Fourier Transform (FFT)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Spectrogram" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's compute the [spectrogram](https://en.wikipedia.org/wiki/Spectrogram) for an audio file. We will pick an arpeggio in guitar." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "from scipy.io import wavfile" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "rate, signal = wavfile.read(\"nst_arpeggios_c_audio.wav\")\n", "nsamples = signal.shape[0]\n", "time = np.linspace(0, nsamples/rate, nsamples)" ] }, { "cell_type": "code", "execution_count": 20, "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 images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", " 'ui-helper-clearfix\"/>');\n", " var titletext = $(\n", " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", " 'text-align: center; padding: 3px;\"/>');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('<div/>');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('<canvas/>');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('<canvas/>');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('<div/>')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('<button/>');\n", " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", " 'ui-button-icon-only');\n", " button.attr('role', 'button');\n", " button.attr('aria-disabled', 'false');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", "\n", " var icon_img = $('<span/>');\n", " icon_img.addClass('ui-button-icon-primary ui-icon');\n", " icon_img.addClass(image);\n", " icon_img.addClass('ui-corner-all');\n", "\n", " var tooltip_span = $('<span/>');\n", " tooltip_span.addClass('ui-button-text');\n", " tooltip_span.html(tooltip);\n", "\n", " button.append(icon_img);\n", " button.append(tooltip_span);\n", "\n", " nav_element.append(button);\n", " }\n", "\n", " var fmt_picker_span = $('<span/>');\n", "\n", " var fmt_picker = $('<select/>');\n", " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", " fmt_picker_span.append(fmt_picker);\n", " nav_element.append(fmt_picker_span);\n", " this.format_dropdown = fmt_picker[0];\n", "\n", " for (var ind in mpl.extensions) {\n", " var fmt = mpl.extensions[ind];\n", " var option = $(\n", " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", " fmt_picker.append(option)\n", " }\n", "\n", " // Add hover states to the ui-buttons\n", " $( \".ui-button\" ).hover(\n", " function() { $(this).addClass(\"ui-state-hover\");},\n", " function() { $(this).removeClass(\"ui-state-hover\");}\n", " );\n", "\n", " var status_bar = $('<span class=\"mpl-message\"/>');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "}\n", "\n", "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", " // which will in turn request a refresh of the image.\n", " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", "}\n", "\n", "mpl.figure.prototype.send_message = function(type, properties) {\n", " properties['type'] = type;\n", " properties['figure_id'] = this.id;\n", " this.ws.send(JSON.stringify(properties));\n", "}\n", "\n", "mpl.figure.prototype.send_draw_message = function() {\n", " if (!this.waiting) {\n", " this.waiting = true;\n", " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", " }\n", "}\n", "\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " var format_dropdown = fig.format_dropdown;\n", " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", " fig.ondownload(fig, format);\n", "}\n", "\n", "\n", "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", " var size = msg['size'];\n", " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", " fig._resize_canvas(size[0], size[1]);\n", " fig.send_message(\"refresh\", {});\n", " };\n", "}\n", "\n", "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", " var x0 = msg['x0'] / mpl.ratio;\n", " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", " var x1 = msg['x1'] / mpl.ratio;\n", " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", " x0 = Math.floor(x0) + 0.5;\n", " y0 = Math.floor(y0) + 0.5;\n", " x1 = Math.floor(x1) + 0.5;\n", " y1 = Math.floor(y1) + 0.5;\n", " var min_x = Math.min(x0, x1);\n", " var min_y = Math.min(y0, y1);\n", " var width = Math.abs(x1 - x0);\n", " var height = Math.abs(y1 - y0);\n", "\n", " fig.rubberband_context.clearRect(\n", " 0, 0, fig.canvas.width, 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 but\n", " * transferred with MIME type text/plain:\" errors on\n", " * Chrome. But how to set the MIME type? It doesn't seem\n", " * to be part of the websocket stream */\n", " evt.data.type = \"image/png\";\n", "\n", " /* Free the memory for the previous frames */\n", " if (fig.imageObj.src) {\n", " (window.URL || window.webkitURL).revokeObjectURL(\n", " fig.imageObj.src);\n", " }\n", "\n", " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", " evt.data);\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", " fig.imageObj.src = evt.data;\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", "\n", " var msg = JSON.parse(evt.data);\n", " var msg_type = msg['type'];\n", "\n", " // Call the \"handle_{type}\" callback, which takes\n", " // the figure and JSON message as its only arguments.\n", " try {\n", " var callback = fig[\"handle_\" + msg_type];\n", " } catch (e) {\n", " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", " return;\n", " }\n", "\n", " if (callback) {\n", " try {\n", " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", " callback(fig, msg);\n", " } catch (e) {\n", " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", " }\n", " }\n", " };\n", "}\n", "\n", "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", "mpl.findpos = function(e) {\n", " //this section is from http://www.quirksmode.org/js/events_properties.html\n", " var targ;\n", " if (!e)\n", " e = window.event;\n", " if (e.target)\n", " targ = e.target;\n", " else if (e.srcElement)\n", " targ = e.srcElement;\n", " if (targ.nodeType == 3) // defeat Safari bug\n", " targ = targ.parentNode;\n", "\n", " // jQuery normalizes the pageX and pageY\n", " // pageX,Y are the mouse positions relative to the document\n", " // offset() returns the position of the element relative to the document\n", " var x = e.pageX - $(targ).offset().left;\n", " var y = e.pageY - $(targ).offset().top;\n", "\n", " return {\"x\": x, \"y\": y};\n", "};\n", "\n", "/*\n", " * return a copy of an object with only non-object keys\n", " * we need this to avoid circular references\n", " * http://stackoverflow.com/a/24161582/3208463\n", " */\n", "function simpleKeys (original) {\n", " return Object.keys(original).reduce(function (obj, key) {\n", " if (typeof original[key] !== 'object')\n", " obj[key] = original[key]\n", " return obj;\n", " }, {});\n", "}\n", "\n", "mpl.figure.prototype.mouse_event = function(event, name) {\n", " var canvas_pos = mpl.findpos(event)\n", "\n", " if (name === 'button_press')\n", " {\n", " this.canvas.focus();\n", " this.canvas_div.focus();\n", " }\n", "\n", " var x = canvas_pos.x * mpl.ratio;\n", " var y = canvas_pos.y * mpl.ratio;\n", "\n", " this.send_message(name, {x: x, y: y, button: event.button,\n", " step: event.step,\n", " guiEvent: simpleKeys(event)});\n", "\n", " /* This prevents the web browser from automatically changing to\n", " * the text insertion cursor when the button is pressed. We want\n", " * to control all of the cursor setting manually through the\n", " * 'cursor' event from matplotlib */\n", " event.preventDefault();\n", " return false;\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " // Handle any extra behaviour associated with a key event\n", "}\n", "\n", "mpl.figure.prototype.key_event = function(event, name) {\n", "\n", " // Prevent repeat events\n", " if (name == 'key_press')\n", " {\n", " if (event.which === this._key)\n", " return;\n", " else\n", " this._key = event.which;\n", " }\n", " if (name == 'key_release')\n", " this._key = null;\n", "\n", " var value = '';\n", " if (event.ctrlKey && event.which != 17)\n", " value += \"ctrl+\";\n", " if (event.altKey && event.which != 18)\n", " value += \"alt+\";\n", " if (event.shiftKey && event.which != 16)\n", " value += \"shift+\";\n", "\n", " value += 'k';\n", " value += event.which.toString();\n", "\n", " this._key_event_extra(event, name);\n", "\n", " this.send_message(name, {key: value,\n", " guiEvent: simpleKeys(event)});\n", " return false;\n", "}\n", "\n", "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", " if (name == 'download') {\n", " this.handle_save(this, null);\n", " } else {\n", " this.send_message(\"toolbar_button\", {name: name});\n", " }\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", " this.message.textContent = tooltip;\n", "};\n", "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", "\n", "mpl.extensions = [\"eps\", \"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 comm\n", " // object with the appropriate methods. Currently this is a non binary\n", " // socket, so there is still some room for performance tuning.\n", " var ws = {};\n", "\n", " ws.close = function() {\n", " comm.close()\n", " };\n", " ws.send = function(m) {\n", " //console.log('sending', m);\n", " comm.send(m);\n", " };\n", " // Register the callback with on_msg.\n", " comm.on_msg(function(msg) {\n", " //console.log('receiving', msg['content']['data'], msg);\n", " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", " ws.onmessage(msg['content']['data'])\n", " });\n", " return ws;\n", "}\n", "\n", "mpl.mpl_figure_comm = function(comm, msg) {\n", " // This is the function which gets called when the mpl process\n", " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", "\n", " var id = msg.content.data.id;\n", " // Get hold of the div created by the display call when the Comm\n", " // socket was opened in Python.\n", " var element = $(\"#\" + id);\n", " var ws_proxy = comm_websocket_adapter(comm)\n", "\n", " function ondownload(figure, format) {\n", " window.open(figure.imageObj.src);\n", " }\n", "\n", " var fig = new mpl.figure(id, ws_proxy,\n", " ondownload,\n", " element.get(0));\n", "\n", " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", " // web socket which is closed, not our websocket->open comm proxy.\n", " ws_proxy.onopen();\n", "\n", " fig.parent_element = element.get(0);\n", " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", " if (!fig.cell_info) {\n", " console.error(\"Failed to find cell for figure\", id, fig);\n", " return;\n", " }\n", "\n", " var output_index = fig.cell_info[2]\n", " var cell = fig.cell_info[0];\n", "\n", "};\n", "\n", "mpl.figure.prototype.handle_close = function(fig, msg) {\n", " var width = fig.canvas.width/mpl.ratio\n", " fig.root.unbind('remove')\n", "\n", " // Update the output cell to use the data from the current canvas.\n", " fig.push_to_output();\n", " var dataURL = fig.canvas.toDataURL();\n", " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", " // the notebook keyboard shortcuts fail.\n", " IPython.keyboard_manager.enable()\n", " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", " fig.close_ws(fig, msg);\n", "}\n", "\n", "mpl.figure.prototype.close_ws = function(fig, msg){\n", " fig.send_message('closing', msg);\n", " // fig.ws.close()\n", "}\n", "\n", "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", " // Turn the data on the canvas into data in the output cell.\n", " var width = this.canvas.width/mpl.ratio\n", " var dataURL = this.canvas.toDataURL();\n", " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", "}\n", "\n", "mpl.figure.prototype.updated_canvas_event = function() {\n", " // Tell IPython that the notebook contents must change.\n", " IPython.notebook.set_dirty(true);\n", " this.send_message(\"ack\", {});\n", " var fig = this;\n", " // Wait a second, then push the new image to the DOM so\n", " // that it is saved nicely (might be nice to debounce this).\n", " setTimeout(function () { fig.push_to_output() }, 1000);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('<div/>')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items){\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) { continue; };\n", "\n", " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " 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 for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i<ncells; i++) {\n", " var cell = cells[i];\n", " if (cell.cell_type === 'code'){\n", " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", " var data = cell.output_area.outputs[j];\n", " if (data.data) {\n", " // IPython >= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "<IPython.core.display.Javascript object>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "<img src=\"data:image/png;base64,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b39D7969cePGDVNXGSbVVE04zLleNOfvBMve9EtD6pbCwsL7brewsLBRvouAuEFOSkp6oOX69evQaDR49tlnERYWhhs3bijL1KlT0aVLF9y4cQO3b98GwCYc9BBM8WcVU2kt+9pa9hNoPfvaWvbzftRqdZ2dCFNSUiBJjdeJ0JyPN8tuGuZadnMtd33Onj173yfV77//PoDqToR+fn61tmNra8tOhHRvLfHLcy+tZV9by34CrWdfW8t+3k9GRkadf24dO3Zsow5jZ87Hm2U3DXMtu7mWuz5lZWXIysqqtdja2uKxxx5DVlYWCgoKlNdPnjwZPXv2RElJibLu/Pnz6NixIyIjI02xC0ZhgDaRlvjluZfWsq+tZT+B1rOvrWU/H4S1tTV69OiB1atXIzMzE2q1GpIkYePGjY32HuZ8vFl20zDXsptruRviXuNAnzhxAl27doWVlRUyMjKQlpaG119/nROpUP1a05entexra9lPoPXsa2vZzweh0WgQFBSE5557Dh07dkS/fv0afSpvcz7eLLtpmGvZzbXcDXGvAA0Av/zyC8aMGQMLCws8/vjjcHR0xKlTp5q4hA3DAE1EREREZAQGaCIiIiIiIzBAExEREREZgQGaiIiIiMgIDNBEREREREZggCYiIiIiMgIDNBERERGRERigiYiIiIiMwABNRERERGQEBmgiIiIiIiMwQBMRERERGYEBmoiIiIjICAzQTUyj0SA4OBjPP/88OnXqhP79+yMlJcXUxWp0WVlZkCSpzuXgwYOmLl6DlJSUIDw8HNbW1nj66achSRJiY2PrfG1OTg7GjBmDLl26oHv37nBycsLp06ebtsAP4UH31c3Nrc5z3KdPn6YvdAPs2bMHHh4e6NOnDywsLNCrVy84ODjgl19+qfVacz+nzZm51ovmUs+Zc91lrnUR65aWjwG6iVlbW+OJJ57AqlWrkJmZCW9vb0iShE2bNpm6aI1KvrDEx8fj4MGDNRaNRmPq4jXI2bNn0b17d1hZWSnnra6K/MSJE+jWrRtGjhyJ9PR0bN26FX379kWvXr1w5cqVpi94Azzovrq5uaFz5861znFubm7TF7oBPvzwQ4waNQpffvkl9u7diy1btmDo0KFo37499uzZo7yuJZzT5sxc60VzqefMue4y17qIdUvLxwDdhNLT0yFJEpKTk2ust7a2Rq9evaDT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Ozs7PP744ygpKam3/PUF6NDQUEiSpLTlvh8GaCIiokeHAZpajIcJ0MOHD6/12qCgIEiShB9++KHG+uLiYkiShLCwMGXdBx98gM6dO6OwsBBXr16tsaxZswaSJGHXrl31lr++AD137lxIkoTly5dDq9XWux2AAZqIiOhRYoCmFuNhArSzs3Ot18bGxkKSJJw6darO7bi7uyv/fu211+47lN7XX39db/nrC9DXr1/HoEGDIEkSunXrBhsbG8yfPx9nzpypc1sM0ERERI8OAzS1GA/bifD/kgP02bNn77udV155Bd27d8fu3bvvuRQVFdVb/vt1ItTr9di3bx/mzJmD0aNHo0OHDujQoQO++eabWq9lgCYiInp0GKCpxTBlgHZwcIAkSbh27VrDCg/jh7E7d+4cnnzySfz973+v9TMGaCIiokeHAZpaDFMG6NTUVEiSBE9PzxodDmUP0vmvvgB95cqVWusMBgP69OmDJ554otbPGKCJiIgeHQZoajFMGaABQK1WQ5IkvPnmm/jkk0+QlJSEuXPnwt7eHu3bt79v+esL0I6OjvjHP/6BqKgorFq1Cl988QVsbGwgSRJCQkJqvZ4BmoiI6NFhgKYWw9QBGgBSUlLw7rvvonv37ujYsSP+8pe/YNy4cQ89DvTWrVvx/vvvK5O59OjRA0OGDMHq1auh1+trvZ4BmoiI6NFhgCZqJuQAHR4ejqtXr9533Oi6lJeX4+rVq8q41AzQREREjY8BmqiZkAO0vHz00UdGbyMpKanGNhigiYiIGh8DNFEzUVZWVmPYu4KCAqO3UVhYaNTQeURERGQ8BmgiIiIiIiMwQBMRERERGYEBmoiIiIjICAzQRERERERGYIAmIiIiIjICAzQRERERkREYoImIiIiIjMAATURERERkBAZoIiIiIiIjMEATERERERmBAZqIiIiIyAgM0ERERERERmCAJiIiIiIyAgM0EREREZERGKCJiIiIiIzAAE1EREREZAQGaCIiIiIiIzBAExEREREZgQGaiIiIiMgIDNBEREREREZggCYiIiIiMsL/B2X/I1fOlgUaAAAAAElFTkSuQmCC\" width=\"600\">" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "/home/nguarinz/anaconda3/lib/python3.6/site-packages/matplotlib/axes/_axes.py:7609: RuntimeWarning: divide by zero encountered in log10\n", " Z = 10. * np.log10(spec)\n" ] } ], "source": [ "# Create figure\n", "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(6, 2.5))\n", "fig.tight_layout()\n", "\n", "# Time plot\n", "#ax1.set_figure(figsize=(3.5, 2.5))\n", "ax1.plot(time, signal[:, 0]/1000, color=\"#e41a1c\")\n", "ax1.set_title('Raw audio signal')\n", "ax1.set_xlim(0, 20)\n", "ax1.set_xlabel(\"Time [s]\")\n", "ax1.set_ylabel(\"Amplitude\")\n", "\n", "# Spectrogram\n", "Pxx, freqs, bins, im = ax2.specgram(signal[:, 0], Fs=rate,\n", " cmap=\"magma\")\n", "ax2.set_ylim([0, max(freqs)])\n", "ax1.set_xlabel(\"Time [s]\")\n", "ax2.set_ylabel(\"Frequency [kHz]\")\n", "ax2.set_title('Spectrogram');\n", "bound = np.linspace(-40, 40, 51)\n", "cb = fig.colorbar(im, boundaries=bound, ticks=bound[::10])\n", "cb.set_label('Intensity [dB]')\n", "cb.set_clim(-40, 40)\n", "\n", "# Rescale y-axis\n", "scale = 1e3 # KHz\n", "ticks = matplotlib.ticker.FuncFormatter(lambda x, pos: '{0:g}'.format(x/scale))\n", "ax2.yaxis.set_major_formatter(ticks)\n", "plt.tight_layout();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### FFT using ``scipy.fftpack``" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> This section is copied from [Scipy Lecture Notes](http://www.scipy-lectures.org/index.html).\n", "\n", "The ``scipy.fftpack`` module allows to compute fast Fourier transforms. As an illustration, a (noisy) input signal may look like:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "time_step = 0.02\n", "period = 5.\n", "time_vec = np.arange(0, 20, time_step)\n", "sig = np.sin(2 * np.pi / period * time_vec) + \\\n", " 0.5 * np.random.randn(time_vec.size)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The observer doesn’t know the signal frequency, only the sampling time step of the signal sig. The signal is supposed to come from a real function so the Fourier transform will be symmetric. The ``scipy.fftpack.fftfreq()`` function will generate the sampling frequencies and ``scipy.fftpack.fft()`` will compute the fast Fourier transform:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "from scipy import fftpack\n", "sample_freq = fftpack.fftfreq(sig.size, d=time_step)\n", "sig_fft = fftpack.fft(sig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Because the resulting power is symmetric, only the positive part of the spectrum needs to be used for finding the frequency:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "pidxs = np.where(sample_freq > 0)\n", "freqs = sample_freq[pidxs]\n", "power = np.abs(sig_fft)[pidxs]" ] }, { "cell_type": "code", "execution_count": 24, "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 images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", " 'ui-helper-clearfix\"/>');\n", " var titletext = $(\n", " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", " 'text-align: center; padding: 3px;\"/>');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('<div/>');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('<canvas/>');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('<canvas/>');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('<div/>')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('<button/>');\n", " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", " 'ui-button-icon-only');\n", " button.attr('role', 'button');\n", " button.attr('aria-disabled', 'false');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", "\n", " var icon_img = $('<span/>');\n", " icon_img.addClass('ui-button-icon-primary ui-icon');\n", " icon_img.addClass(image);\n", " icon_img.addClass('ui-corner-all');\n", "\n", " var tooltip_span = $('<span/>');\n", " tooltip_span.addClass('ui-button-text');\n", " tooltip_span.html(tooltip);\n", "\n", " button.append(icon_img);\n", " button.append(tooltip_span);\n", "\n", " nav_element.append(button);\n", " }\n", "\n", " var fmt_picker_span = $('<span/>');\n", "\n", " var fmt_picker = $('<select/>');\n", " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", " fmt_picker_span.append(fmt_picker);\n", " nav_element.append(fmt_picker_span);\n", " this.format_dropdown = fmt_picker[0];\n", "\n", " for (var ind in mpl.extensions) {\n", " var fmt = mpl.extensions[ind];\n", " var option = $(\n", " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", " fmt_picker.append(option)\n", " }\n", "\n", " // Add hover states to the ui-buttons\n", " $( \".ui-button\" ).hover(\n", " function() { $(this).addClass(\"ui-state-hover\");},\n", " function() { $(this).removeClass(\"ui-state-hover\");}\n", " );\n", "\n", " var status_bar = $('<span class=\"mpl-message\"/>');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "}\n", "\n", "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", " // which will in turn request a refresh of the image.\n", " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", "}\n", "\n", "mpl.figure.prototype.send_message = function(type, properties) {\n", " properties['type'] = type;\n", " properties['figure_id'] = this.id;\n", " this.ws.send(JSON.stringify(properties));\n", "}\n", "\n", "mpl.figure.prototype.send_draw_message = function() {\n", " if (!this.waiting) {\n", " this.waiting = true;\n", " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", " }\n", "}\n", "\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " var format_dropdown = fig.format_dropdown;\n", " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", " fig.ondownload(fig, format);\n", "}\n", "\n", "\n", "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", " var size = msg['size'];\n", " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", " fig._resize_canvas(size[0], size[1]);\n", " fig.send_message(\"refresh\", {});\n", " };\n", "}\n", "\n", "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", " var x0 = msg['x0'] / mpl.ratio;\n", " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", " var x1 = msg['x1'] / mpl.ratio;\n", " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", " x0 = Math.floor(x0) + 0.5;\n", " y0 = Math.floor(y0) + 0.5;\n", " x1 = Math.floor(x1) + 0.5;\n", " y1 = Math.floor(y1) + 0.5;\n", " var min_x = Math.min(x0, x1);\n", " var min_y = Math.min(y0, y1);\n", " var width = Math.abs(x1 - x0);\n", " var height = Math.abs(y1 - y0);\n", "\n", " fig.rubberband_context.clearRect(\n", " 0, 0, fig.canvas.width, 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 but\n", " * transferred with MIME type text/plain:\" errors on\n", " * Chrome. But how to set the MIME type? It doesn't seem\n", " * to be part of the websocket stream */\n", " evt.data.type = \"image/png\";\n", "\n", " /* Free the memory for the previous frames */\n", " if (fig.imageObj.src) {\n", " (window.URL || window.webkitURL).revokeObjectURL(\n", " fig.imageObj.src);\n", " }\n", "\n", " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", " evt.data);\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", " fig.imageObj.src = evt.data;\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", "\n", " var msg = JSON.parse(evt.data);\n", " var msg_type = msg['type'];\n", "\n", " // Call the \"handle_{type}\" callback, which takes\n", " // the figure and JSON message as its only arguments.\n", " try {\n", " var callback = fig[\"handle_\" + msg_type];\n", " } catch (e) {\n", " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", " return;\n", " }\n", "\n", " if (callback) {\n", " try {\n", " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", " callback(fig, msg);\n", " } catch (e) {\n", " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", " }\n", " }\n", " };\n", "}\n", "\n", "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", "mpl.findpos = function(e) {\n", " //this section is from http://www.quirksmode.org/js/events_properties.html\n", " var targ;\n", " if (!e)\n", " e = window.event;\n", " if (e.target)\n", " targ = e.target;\n", " else if (e.srcElement)\n", " targ = e.srcElement;\n", " if (targ.nodeType == 3) // defeat Safari bug\n", " targ = targ.parentNode;\n", "\n", " // jQuery normalizes the pageX and pageY\n", " // pageX,Y are the mouse positions relative to the document\n", " // offset() returns the position of the element relative to the document\n", " var x = e.pageX - $(targ).offset().left;\n", " var y = e.pageY - $(targ).offset().top;\n", "\n", " return {\"x\": x, \"y\": y};\n", "};\n", "\n", "/*\n", " * return a copy of an object with only non-object keys\n", " * we need this to avoid circular references\n", " * http://stackoverflow.com/a/24161582/3208463\n", " */\n", "function simpleKeys (original) {\n", " return Object.keys(original).reduce(function (obj, key) {\n", " if (typeof original[key] !== 'object')\n", " obj[key] = original[key]\n", " return obj;\n", " }, {});\n", "}\n", "\n", "mpl.figure.prototype.mouse_event = function(event, name) {\n", " var canvas_pos = mpl.findpos(event)\n", "\n", " if (name === 'button_press')\n", " {\n", " this.canvas.focus();\n", " this.canvas_div.focus();\n", " }\n", "\n", " var x = canvas_pos.x * mpl.ratio;\n", " var y = canvas_pos.y * mpl.ratio;\n", "\n", " this.send_message(name, {x: x, y: y, button: event.button,\n", " step: event.step,\n", " guiEvent: simpleKeys(event)});\n", "\n", " /* This prevents the web browser from automatically changing to\n", " * the text insertion cursor when the button is pressed. We want\n", " * to control all of the cursor setting manually through the\n", " * 'cursor' event from matplotlib */\n", " event.preventDefault();\n", " return false;\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " // Handle any extra behaviour associated with a key event\n", "}\n", "\n", "mpl.figure.prototype.key_event = function(event, name) {\n", "\n", " // Prevent repeat events\n", " if (name == 'key_press')\n", " {\n", " if (event.which === this._key)\n", " return;\n", " else\n", " this._key = event.which;\n", " }\n", " if (name == 'key_release')\n", " this._key = null;\n", "\n", " var value = '';\n", " if (event.ctrlKey && event.which != 17)\n", " value += \"ctrl+\";\n", " if (event.altKey && event.which != 18)\n", " value += \"alt+\";\n", " if (event.shiftKey && event.which != 16)\n", " value += \"shift+\";\n", "\n", " value += 'k';\n", " value += event.which.toString();\n", "\n", " this._key_event_extra(event, name);\n", "\n", " this.send_message(name, {key: value,\n", " guiEvent: simpleKeys(event)});\n", " return false;\n", "}\n", "\n", "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", " if (name == 'download') {\n", " this.handle_save(this, null);\n", " } else {\n", " this.send_message(\"toolbar_button\", {name: name});\n", " }\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", " this.message.textContent = tooltip;\n", "};\n", "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", "\n", "mpl.extensions = [\"eps\", \"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 comm\n", " // object with the appropriate methods. Currently this is a non binary\n", " // socket, so there is still some room for performance tuning.\n", " var ws = {};\n", "\n", " ws.close = function() {\n", " comm.close()\n", " };\n", " ws.send = function(m) {\n", " //console.log('sending', m);\n", " comm.send(m);\n", " };\n", " // Register the callback with on_msg.\n", " comm.on_msg(function(msg) {\n", " //console.log('receiving', msg['content']['data'], msg);\n", " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", " ws.onmessage(msg['content']['data'])\n", " });\n", " return ws;\n", "}\n", "\n", "mpl.mpl_figure_comm = function(comm, msg) {\n", " // This is the function which gets called when the mpl process\n", " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", "\n", " var id = msg.content.data.id;\n", " // Get hold of the div created by the display call when the Comm\n", " // socket was opened in Python.\n", " var element = $(\"#\" + id);\n", " var ws_proxy = comm_websocket_adapter(comm)\n", "\n", " function ondownload(figure, format) {\n", " window.open(figure.imageObj.src);\n", " }\n", "\n", " var fig = new mpl.figure(id, ws_proxy,\n", " ondownload,\n", " element.get(0));\n", "\n", " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", " // web socket which is closed, not our websocket->open comm proxy.\n", " ws_proxy.onopen();\n", "\n", " fig.parent_element = element.get(0);\n", " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", " if (!fig.cell_info) {\n", " console.error(\"Failed to find cell for figure\", id, fig);\n", " return;\n", " }\n", "\n", " var output_index = fig.cell_info[2]\n", " var cell = fig.cell_info[0];\n", "\n", "};\n", "\n", "mpl.figure.prototype.handle_close = function(fig, msg) {\n", " var width = fig.canvas.width/mpl.ratio\n", " fig.root.unbind('remove')\n", "\n", " // Update the output cell to use the data from the current canvas.\n", " fig.push_to_output();\n", " var dataURL = fig.canvas.toDataURL();\n", " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", " // the notebook keyboard shortcuts fail.\n", " IPython.keyboard_manager.enable()\n", " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", " fig.close_ws(fig, msg);\n", "}\n", "\n", "mpl.figure.prototype.close_ws = function(fig, msg){\n", " fig.send_message('closing', msg);\n", " // fig.ws.close()\n", "}\n", "\n", "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", " // Turn the data on the canvas into data in the output cell.\n", " var width = this.canvas.width/mpl.ratio\n", " var dataURL = this.canvas.toDataURL();\n", " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", "}\n", "\n", "mpl.figure.prototype.updated_canvas_event = function() {\n", " // Tell IPython that the notebook contents must change.\n", " IPython.notebook.set_dirty(true);\n", " this.send_message(\"ack\", {});\n", " var fig = this;\n", " // Wait a second, then push the new image to the DOM so\n", " // that it is saved nicely (might be nice to debounce this).\n", " setTimeout(function () { fig.push_to_output() }, 1000);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('<div/>')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items){\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) { continue; };\n", "\n", " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " 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 for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i<ncells; i++) {\n", " var cell = cells[i];\n", " if (cell.cell_type === 'code'){\n", " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", " var data = cell.output_area.outputs[j];\n", " if (data.data) {\n", " // IPython >= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "<IPython.core.display.Javascript object>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAtAAAAHgCAYAAACMxVqsAAAgAElEQVR4nOzdd3gU1f4G8NkQktBFEa+IlKBBigjYEAhcjIKCCAioKBgLAVQiKp0LBJAiIiAoRRHi/QGCAiEWsCBJsIFCAigINgwa0nvflH1/f+RmNpMMM2zYObObfT/PM88DyWbON4c9X95sZudIICIiIiKiSyaZXQARERERkTthgCYiIiIicgADNBERERGRAxigiYiIiIgcwABNREREROQABmgiIiIiIgcwQBMREREROYABmoiIiIjIAQzQREREREQOYIAmIiIiInIAAzQRERERkQMYoImIiIiIHMAATURERETkAAZoIiIiIiIHMEATERERETmAAZqIiIiIyAEM0EREREREDmCAJiIiIiJyAAM0EREREZEDGKCJiIiIiBzAAE1ERERE5AAGaCIiIiIiBzBAExERERE5gAGaiIiIiMgBDNBERERERA5ggCYiIiIicgADNBERERGRAxigiYiIiIgcwABNREREROQABmgiIiIiIgcwQBMREREROYABmoiIiIjIAQzQREREREQOYIAmIiIiInIAAzQRERERkQMYoImIiIiIHMAATURERETkAAZoIiIiIiIHMEATERERETmAAZqIiIiIyAEM0EREREREDmCAJiIiIiJyAAM0EREREZEDGKCJiIiIiBzAAE1ERERE5AAGaCIiIiIiBzBAExERERE5gAGaiIiIiMgBDNBERERERA5ggCYiIiIicgADNBERERGRAxigiYiIiIgcwABNREREROQABmgiIiIiIgcwQBMREREROYABmoiIiIjIAQzQAmRlZSEyMhKxsbE4deoUDx48ePDgwYOHyx6xsbGIjIxEVlaW2RHKZTFACxAZGQlJknjw4MGDBw8ePNzmiIyMNDtCuSwGaAFiY2PlJ6LZP1Xy4MGDBw8ePHhoHZUv/MXGxpodoVwWA7QAp06dgiRJOHXqlNmlEBEREWlibtHHAC0An4hERETkLphb9DFAC8AnIhEREbkL5hZ9DNAC8IlIRERE7oK5RR8DtAB8IhIREZG7YG7RxwAtAJ+IRERE5C6YW/QxQAvAJyIRERG5C+YWfQzQAvCJSERERO6CuUUfA7QAfCISERGRu2Bu0ccALQCfiEREROQumFv0MUALwCciERERuQvmFn1uE6Cjo6MhSZLq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\" width=\"600\">" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure()\n", "plt.plot(freqs, power, color=\"#e41a1c\")\n", "plt.xlabel('Frequency [Hz]')\n", "plt.ylabel('plower')\n", "axes = plt.axes([0.3, 0.3, 0.5, 0.5])\n", "plt.title('Peak frequency')\n", "plt.plot(freqs[:8], power[:8], color=\"#e41a1c\")\n", "plt.setp(axes, yticks=[]);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The signal frequency can be found by:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "freq = freqs[power.argmax()]\n", "np.allclose(freq, 1./period) # check that correct freq is found" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now the high-frequency noise will be removed from the Fourier transformed signal:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "sig_fft[np.abs(sample_freq) > freq] = 0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The resulting filtered signal can be computed by the ``scipy.fftpack.ifft()`` function:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "main_sig = fftpack.ifft(sig_fft)" ] }, { "cell_type": "code", "execution_count": 28, "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 images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " fig.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", " 'ui-helper-clearfix\"/>');\n", " var titletext = $(\n", " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", " 'text-align: center; padding: 3px;\"/>');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('<div/>');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('<canvas/>');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('<canvas/>');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('<div/>')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('<button/>');\n", " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", " 'ui-button-icon-only');\n", " button.attr('role', 'button');\n", " button.attr('aria-disabled', 'false');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", "\n", " var icon_img = $('<span/>');\n", " icon_img.addClass('ui-button-icon-primary ui-icon');\n", " icon_img.addClass(image);\n", " icon_img.addClass('ui-corner-all');\n", "\n", " var tooltip_span = $('<span/>');\n", " tooltip_span.addClass('ui-button-text');\n", " tooltip_span.html(tooltip);\n", "\n", " button.append(icon_img);\n", " button.append(tooltip_span);\n", "\n", " nav_element.append(button);\n", " }\n", "\n", " var fmt_picker_span = $('<span/>');\n", "\n", " var fmt_picker = $('<select/>');\n", " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", " fmt_picker_span.append(fmt_picker);\n", " nav_element.append(fmt_picker_span);\n", " this.format_dropdown = fmt_picker[0];\n", "\n", " for (var ind in mpl.extensions) {\n", " var fmt = mpl.extensions[ind];\n", " var option = $(\n", " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", " fmt_picker.append(option)\n", " }\n", "\n", " // Add hover states to the ui-buttons\n", " $( \".ui-button\" ).hover(\n", " function() { $(this).addClass(\"ui-state-hover\");},\n", " function() { $(this).removeClass(\"ui-state-hover\");}\n", " );\n", "\n", " var status_bar = $('<span class=\"mpl-message\"/>');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "}\n", "\n", "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", " // which will in turn request a refresh of the image.\n", " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", "}\n", "\n", "mpl.figure.prototype.send_message = function(type, properties) {\n", " properties['type'] = type;\n", " properties['figure_id'] = this.id;\n", " this.ws.send(JSON.stringify(properties));\n", "}\n", "\n", "mpl.figure.prototype.send_draw_message = function() {\n", " if (!this.waiting) {\n", " this.waiting = true;\n", " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", " }\n", "}\n", "\n", "\n", "mpl.figure.prototype.handle_save = function(fig, msg) {\n", " var format_dropdown = fig.format_dropdown;\n", " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", " fig.ondownload(fig, format);\n", "}\n", "\n", "\n", "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", " var size = msg['size'];\n", " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", " fig._resize_canvas(size[0], size[1]);\n", " fig.send_message(\"refresh\", {});\n", " };\n", "}\n", "\n", "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", " var x0 = msg['x0'] / mpl.ratio;\n", " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", " var x1 = msg['x1'] / mpl.ratio;\n", " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", " x0 = Math.floor(x0) + 0.5;\n", " y0 = Math.floor(y0) + 0.5;\n", " x1 = Math.floor(x1) + 0.5;\n", " y1 = Math.floor(y1) + 0.5;\n", " var min_x = Math.min(x0, x1);\n", " var min_y = Math.min(y0, y1);\n", " var width = Math.abs(x1 - x0);\n", " var height = Math.abs(y1 - y0);\n", "\n", " fig.rubberband_context.clearRect(\n", " 0, 0, fig.canvas.width, 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 but\n", " * transferred with MIME type text/plain:\" errors on\n", " * Chrome. But how to set the MIME type? It doesn't seem\n", " * to be part of the websocket stream */\n", " evt.data.type = \"image/png\";\n", "\n", " /* Free the memory for the previous frames */\n", " if (fig.imageObj.src) {\n", " (window.URL || window.webkitURL).revokeObjectURL(\n", " fig.imageObj.src);\n", " }\n", "\n", " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", " evt.data);\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", " fig.imageObj.src = evt.data;\n", " fig.updated_canvas_event();\n", " fig.waiting = false;\n", " return;\n", " }\n", "\n", " var msg = JSON.parse(evt.data);\n", " var msg_type = msg['type'];\n", "\n", " // Call the \"handle_{type}\" callback, which takes\n", " // the figure and JSON message as its only arguments.\n", " try {\n", " var callback = fig[\"handle_\" + msg_type];\n", " } catch (e) {\n", " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", " return;\n", " }\n", "\n", " if (callback) {\n", " try {\n", " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", " callback(fig, msg);\n", " } catch (e) {\n", " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", " }\n", " }\n", " };\n", "}\n", "\n", "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", "mpl.findpos = function(e) {\n", " //this section is from http://www.quirksmode.org/js/events_properties.html\n", " var targ;\n", " if (!e)\n", " e = window.event;\n", " if (e.target)\n", " targ = e.target;\n", " else if (e.srcElement)\n", " targ = e.srcElement;\n", " if (targ.nodeType == 3) // defeat Safari bug\n", " targ = targ.parentNode;\n", "\n", " // jQuery normalizes the pageX and pageY\n", " // pageX,Y are the mouse positions relative to the document\n", " // offset() returns the position of the element relative to the document\n", " var x = e.pageX - $(targ).offset().left;\n", " var y = e.pageY - $(targ).offset().top;\n", "\n", " return {\"x\": x, \"y\": y};\n", "};\n", "\n", "/*\n", " * return a copy of an object with only non-object keys\n", " * we need this to avoid circular references\n", " * http://stackoverflow.com/a/24161582/3208463\n", " */\n", "function simpleKeys (original) {\n", " return Object.keys(original).reduce(function (obj, key) {\n", " if (typeof original[key] !== 'object')\n", " obj[key] = original[key]\n", " return obj;\n", " }, {});\n", "}\n", "\n", "mpl.figure.prototype.mouse_event = function(event, name) {\n", " var canvas_pos = mpl.findpos(event)\n", "\n", " if (name === 'button_press')\n", " {\n", " this.canvas.focus();\n", " this.canvas_div.focus();\n", " }\n", "\n", " var x = canvas_pos.x * mpl.ratio;\n", " var y = canvas_pos.y * mpl.ratio;\n", "\n", " this.send_message(name, {x: x, y: y, button: event.button,\n", " step: event.step,\n", " guiEvent: simpleKeys(event)});\n", "\n", " /* This prevents the web browser from automatically changing to\n", " * the text insertion cursor when the button is pressed. We want\n", " * to control all of the cursor setting manually through the\n", " * 'cursor' event from matplotlib */\n", " event.preventDefault();\n", " return false;\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " // Handle any extra behaviour associated with a key event\n", "}\n", "\n", "mpl.figure.prototype.key_event = function(event, name) {\n", "\n", " // Prevent repeat events\n", " if (name == 'key_press')\n", " {\n", " if (event.which === this._key)\n", " return;\n", " else\n", " this._key = event.which;\n", " }\n", " if (name == 'key_release')\n", " this._key = null;\n", "\n", " var value = '';\n", " if (event.ctrlKey && event.which != 17)\n", " value += \"ctrl+\";\n", " if (event.altKey && event.which != 18)\n", " value += \"alt+\";\n", " if (event.shiftKey && event.which != 16)\n", " value += \"shift+\";\n", "\n", " value += 'k';\n", " value += event.which.toString();\n", "\n", " this._key_event_extra(event, name);\n", "\n", " this.send_message(name, {key: value,\n", " guiEvent: simpleKeys(event)});\n", " return false;\n", "}\n", "\n", "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", " if (name == 'download') {\n", " this.handle_save(this, null);\n", " } else {\n", " this.send_message(\"toolbar_button\", {name: name});\n", " }\n", "};\n", "\n", "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", " this.message.textContent = tooltip;\n", "};\n", "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", "\n", "mpl.extensions = [\"eps\", \"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 comm\n", " // object with the appropriate methods. Currently this is a non binary\n", " // socket, so there is still some room for performance tuning.\n", " var ws = {};\n", "\n", " ws.close = function() {\n", " comm.close()\n", " };\n", " ws.send = function(m) {\n", " //console.log('sending', m);\n", " comm.send(m);\n", " };\n", " // Register the callback with on_msg.\n", " comm.on_msg(function(msg) {\n", " //console.log('receiving', msg['content']['data'], msg);\n", " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", " ws.onmessage(msg['content']['data'])\n", " });\n", " return ws;\n", "}\n", "\n", "mpl.mpl_figure_comm = function(comm, msg) {\n", " // This is the function which gets called when the mpl process\n", " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", "\n", " var id = msg.content.data.id;\n", " // Get hold of the div created by the display call when the Comm\n", " // socket was opened in Python.\n", " var element = $(\"#\" + id);\n", " var ws_proxy = comm_websocket_adapter(comm)\n", "\n", " function ondownload(figure, format) {\n", " window.open(figure.imageObj.src);\n", " }\n", "\n", " var fig = new mpl.figure(id, ws_proxy,\n", " ondownload,\n", " element.get(0));\n", "\n", " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", " // web socket which is closed, not our websocket->open comm proxy.\n", " ws_proxy.onopen();\n", "\n", " fig.parent_element = element.get(0);\n", " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", " if (!fig.cell_info) {\n", " console.error(\"Failed to find cell for figure\", id, fig);\n", " return;\n", " }\n", "\n", " var output_index = fig.cell_info[2]\n", " var cell = fig.cell_info[0];\n", "\n", "};\n", "\n", "mpl.figure.prototype.handle_close = function(fig, msg) {\n", " var width = fig.canvas.width/mpl.ratio\n", " fig.root.unbind('remove')\n", "\n", " // Update the output cell to use the data from the current canvas.\n", " fig.push_to_output();\n", " var dataURL = fig.canvas.toDataURL();\n", " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", " // the notebook keyboard shortcuts fail.\n", " IPython.keyboard_manager.enable()\n", " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", " fig.close_ws(fig, msg);\n", "}\n", "\n", "mpl.figure.prototype.close_ws = function(fig, msg){\n", " fig.send_message('closing', msg);\n", " // fig.ws.close()\n", "}\n", "\n", "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", " // Turn the data on the canvas into data in the output cell.\n", " var width = this.canvas.width/mpl.ratio\n", " var dataURL = this.canvas.toDataURL();\n", " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", "}\n", "\n", "mpl.figure.prototype.updated_canvas_event = function() {\n", " // Tell IPython that the notebook contents must change.\n", " IPython.notebook.set_dirty(true);\n", " this.send_message(\"ack\", {});\n", " var fig = this;\n", " // Wait a second, then push the new image to the DOM so\n", " // that it is saved nicely (might be nice to debounce this).\n", " setTimeout(function () { fig.push_to_output() }, 1000);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('<div/>')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items){\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) { continue; };\n", "\n", " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", " button.click(method_name, toolbar_event);\n", " button.mouseover(tooltip, toolbar_mouse_event);\n", " nav_element.append(button);\n", " }\n", "\n", " // Add the status bar.\n", " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", " nav_element.append(status_bar);\n", " this.message = status_bar[0];\n", "\n", " // Add the close button to the window.\n", " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", " buttongrp.append(button);\n", " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", " titlebar.prepend(buttongrp);\n", "}\n", "\n", "mpl.figure.prototype._root_extra_style = function(el){\n", " var fig = this\n", " el.on(\"remove\", function(){\n", "\tfig.close_ws(fig, {});\n", " });\n", "}\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(el){\n", " // this is important to make the div 'focusable\n", " el.attr('tabindex', 0)\n", " // reach out to IPython and tell the keyboard manager to turn it's self\n", " // off when our div gets focus\n", "\n", " // location in version 3\n", " if (IPython.notebook.keyboard_manager) {\n", " IPython.notebook.keyboard_manager.register_events(el);\n", " }\n", " else {\n", " // location in version 2\n", " IPython.keyboard_manager.register_events(el);\n", " }\n", "\n", "}\n", "\n", "mpl.figure.prototype._key_event_extra = function(event, name) {\n", " var manager = IPython.notebook.keyboard_manager;\n", " if (!manager)\n", " manager = IPython.keyboard_manager;\n", "\n", " // Check for shift+enter\n", " if (event.shiftKey && event.which == 13) {\n", " this.canvas_div.blur();\n", " event.shiftKey = false;\n", " // Send a \"J\" for go to next cell\n", " 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 for\n", " // our purposes (turning an active figure into a static one), is too late.\n", " var cells = IPython.notebook.get_cells();\n", " var ncells = cells.length;\n", " for (var i=0; i<ncells; i++) {\n", " var cell = cells[i];\n", " if (cell.cell_type === 'code'){\n", " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", " var data = cell.output_area.outputs[j];\n", " if (data.data) {\n", " // IPython >= 3 moved mimebundle to data attribute of output\n", " data = data.data;\n", " }\n", " if (data['text/html'] == html_output) {\n", " return [cell, data, j];\n", " }\n", " }\n", " }\n", " }\n", "}\n", "\n", "// Register the function which deals with the matplotlib target/channel.\n", "// The kernel may be null if the page has been refreshed.\n", "if (IPython.notebook.kernel != null) {\n", " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", "}\n" ], "text/plain": [ "<IPython.core.display.Javascript object>" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "<img src=\"data:image/png;base64,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\" width=\"600\">" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure()\n", "plt.plot(time_vec, sig, color=\"#e41a1c\")\n", "plt.plot(time_vec, np.real(main_sig), linewidth=3, color=\"#377eb8\")\n", "plt.xlabel('Time [s]')\n", "plt.ylabel('Amplitude');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> **``numpy.fft``**\n", "\n", "> Numpy also has an implementation of FFT (``numpy.fft``). However, in general the scipy one should be preferred, as it uses more efficient underlying implementations.\n" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## References\n", "\n", "- Gael Varoquaux et al.[Scipy Lecture Notes](http://www.scipy-lectures.org/index.html), 2017. DOI: http://doi.org/10.5281/zenodo.31521" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "The next cell change the format of the notebook." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "<link href='http://fonts.googleapis.com/css?family=Fenix' rel='stylesheet' type='text/css'>\n", "<link href='http://fonts.googleapis.com/css?family=Alegreya+Sans:100,300,400,500,700,800,900,100italic,300italic,400italic,500italic,700italic,800italic,900italic' rel='stylesheet' type='text/css'>\n", "<link href='http://fonts.googleapis.com/css?family=Source+Code+Pro:300,400' rel='stylesheet' type='text/css'>\n", "<style>\n", "/* Based on Lorena Barba template available at: https://github.com/barbagroup/AeroPython/blob/master/styles/custom.css*/\n", "@font-face {\n", "font-family: \"Computer Modern\";\n", "src: url('http://mirrors.ctan.org/fonts/cm-unicode/fonts/otf/cmunss.otf');\n", "}\n", "div.cell{\n", "width:800px;\n", "margin-left:16% !important;\n", "margin-right:auto;\n", "}\n", "h1 {\n", "font-family: 'Alegreya Sans', sans-serif;\n", "}\n", "h2 {\n", "font-family: 'Fenix', serif;\n", "}\n", "h3{\n", "font-family: 'Fenix', serif;\n", "margin-top:12px;\n", "margin-bottom: 3px;\n", "}\n", "h4{\n", "font-family: 'Fenix', serif;\n", "}\n", "h5 {\n", "font-family: 'Alegreya Sans', sans-serif;\n", "}\t\n", "div.text_cell_render{\n", "font-family: 'Alegreya Sans',Computer Modern, \"Helvetica Neue\", Arial, Helvetica, Geneva, sans-serif;\n", "line-height: 135%;\n", "font-size: 120%;\n", "width:600px;\n", "margin-left:auto;\n", "margin-right:auto;\n", "}\n", ".CodeMirror{\n", "font-family: \"Source Code Pro\";\n", "font-size: 90%;\n", "}\n", "/* .prompt{\n", "display: None;\n", "}*/\n", ".text_cell_render h1 {\n", "font-weight: 200;\n", "font-size: 50pt;\n", "line-height: 100%;\n", "color:#CD2305;\n", "margin-bottom: 0.5em;\n", "margin-top: 0.5em;\n", "display: block;\n", "}\t\n", ".text_cell_render h5 {\n", "font-weight: 300;\n", "font-size: 16pt;\n", "color: #CD2305;\n", "font-style: italic;\n", "margin-bottom: .5em;\n", "margin-top: 0.5em;\n", "display: block;\n", "}\n", ".warning{\n", "color: rgb( 240, 20, 20 )\n", "}\n", "</style>\n", "<script>\n", "MathJax.Hub.Config({\n", "TeX: {\n", "extensions: [\"AMSmath.js\"]\n", "},\n", "tex2jax: {\n", "inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ],\n", "displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ]\n", "},\n", "displayAlign: 'center', // Change this to 'center' to center equations.\n", "\"HTML-CSS\": {\n", "styles: {'.MathJax_Display': {\"margin\": 4}}\n", "}\n", "});\n", "</script>\n", "\n", "\n" ], "text/plain": [ "<IPython.core.display.HTML object>" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.core.display import HTML\n", "def css_styling():\n", " styles = open('./styles/custom_barba.css', 'r').read()\n", " return HTML(styles)\n", "css_styling()" ] } ], "metadata": { "anaconda-cloud": {}, "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.8" } }, "nbformat": 4, "nbformat_minor": 1 }