{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Contenido bajo licencia Creative Commons BY 4.0 y código bajo licencia MIT. © Juan Gómez y Nicolás Guarín-Zapata 2020. Este material es parte del curso Modelación Computacional en el programa de Ingeniería Civil de la Universidad EAFIT."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Interpolación de Lagrange en 1D"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Introducción"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "El problema de interpolación o de predecir funciones a partir de un número determinado de datos representativos de la función aparece con bastante frecuencia en la interpretación de datos experimentales. De otro lado, las técnicas de aproximación de funciones por medio de métodos de interpolación son la base para la formulación de los métodos más importantes de la mecánica computacional como lo son los elementos finitos y los elementos de frontera. En este Notebook se discutirán algunos aspectos básicos y fundamentales de la teoría de interpolación. El notebook se describe en términos del desarrollo completo de un problema ejemplo incluyendo su implementación en Python.\n",
    "\n",
    "**Al completar este notebook usted debería estar en la capacidad de:**\n",
    "\n",
    "* Reconocer el problema de interpolación de funciones como uno de aproximación de una función desconocida en términos de valores discretos de la misma función.\n",
    "\n",
    "* Identificar las propiedades fundamentales de los polinomios de interpolación de Lagrange.\n",
    "\n",
    "* Usar polinomios de interpolación de Lagrange para proponer aproximaciones a una función dado un conjunto de $N$ valores conocidos de la misma.\n",
    "\n",
    "* Reconocer la diferencia entre variables primarias y secundarias en un esquema de interpolación."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Interpolación de Lagrange\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "El problema de interpolación consiste en la determinación del valor de una función $f(x)$ en un punto arbitrario $x \\in [x_1, x_n]$, dados valores conocidos de la función al interior de un dominio de solución. De acuerdo con el teorema de interpolación de Lagrange la aproximación $\\hat f(x)$ a la función $f(x)$ se construye como:\n",
    "\n",
    "\\begin{equation}\n",
    "\\hat{f}(x) = \\sum_{I=1}^n L_I(x) f_I\n",
    "\\end{equation}\n",
    "\n",
    "donde $L_I$ es el $I-$ésimo polinomio de orden $n-1$ y $f_1, f_2, \\cdots, f_n$ son los $n$ valores conocidos de la función. El $I-$ésimo polinomio de Lagrange se calcula siguiendo la siguiente expresión:\n",
    "\n",
    "\\begin{equation}\n",
    "{L_I}(x) = \\prod_{J=1, J \\ne I}^{n} \\frac{(x - x_J)}{(x_I - x_J)}\\, .\n",
    "\\end{equation}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Primera derivada"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "En varios problemas de ingeniería es necesario usar técnicas de interpolación para encontrar valores de las derivadas de la variable primaria o principal. Por ejemplo, en problemas de mecánica de sólidos y teoría de elasticidad, en los cuales la variable primaria es el campo de desplazamientos, uno puede estar interesado en determinar las deformaciones unitarias las cuales son derivadas espaciales de los desplazamientos. Considerando que solo se dispone de valores discretos de los desplazamientos se tiene que las derivadas que se requieren se pueden encontrar usando estos valores discretos. Lo anterior equivale a derivar $\\hat{f}(x)$ directamente como sigue:\n",
    "\n",
    "\n",
    "\\begin{equation}\n",
    "\\frac{\\mathrm{d}\\hat{f}}{\\mathrm{d}x}=\\frac{\\mathrm{d}L_I(x)}{\\mathrm{d}x}f_I\n",
    "\\end{equation}\n",
    "\n",
    "Haciendo,\n",
    "\n",
    "$$B_I(x) = \\frac{\\mathrm{d}L_I(x)}{\\mathrm{d}x}\\, ,$$\n",
    "\n",
    "podemos escribir el esquema de interpolación como:\n",
    "\n",
    "\\begin{equation}\n",
    "\\frac{\\mathrm{d}\\hat{f}}{\\mathrm{d}x} = \\sum_{I=1}^n B_I(x) f_I\\, .\n",
    "\\end{equation}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Ejemplo\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Formule un esquema de interpolación para encontrar un valore de la función\n",
    "\n",
    "\\begin{equation}\n",
    "f(x) = x^3 + 4x^2 - 10\n",
    "\\end{equation}\n",
    "\n",
    "en un punto arbitrario $x$ en el intervalo $[ -1, 1]$ asumiendo que se conoce el valor exacto de la función en los puntos $x=-1.0$, $x=+1.0$ y $x=0.0.$\n",
    "\n",
    "En este ejemplo se conoce la función y aparentemente no tiene mucho sentido buscar una aproximación de la misma resolviendo un problema de interpolación. Sin embargo es conveniente seleccionar una función conocida para poder asimilar el problema numérico y sus limitaciones. En este contexto asumiremos que en una aplicación real conocemos los valores de la función en un conjunto de puntos $x=-1.0$, $x=+1.0$ and $x=0.0$ los cuales se denominan puntos nodales o simplemente _nodos_.\n",
    "\n",
    "El proceso de interpolación involucra 2 pasos fundamentales: \n",
    "\n",
    "1. Determinar los polinomios de interpolación $L_I$ usando la productoria.\n",
    "\n",
    "2. Usar la combinación lineal para construir el polinomio interpolante o la aproximación a la función $\\hat f(x)$.\n",
    "\n",
    "Veamos estos pasos entonces.\n",
    "\n",
    "1. Considerando que tenemos 3 puntos _nodales_ necesitamos generar 3 polinomios de interpolación de segundo orden, cada uno de ellos asociado a cada punto nodal. Rotulemos los _nodos_ como $x_0 = -1.0$, $x_1 = +1.0$ y $x_2 = 0.0$. De acuerdo con esta denominación $L_0(x)$, $L_1(x)$ y $L_2(x)$ serán los polinomios de interpolación de segundo orden asociados a los puntos nodales $x_0 = -1.0$, $x_1 = +1.0$ y $x_2 = 0.0$. Usando la fórmula de la productoria tenemos:\n",
    "\n",
    "\\begin{align}\n",
    "&L_0(x) = \\frac{(x - x_1)(x - x_2)}{(x_0 - x_1)(x_0 - x_2)} \\equiv \\frac{1}{2}(x - 1.0)x\\\\\n",
    "&L_1(x) = \\frac{(x-x^0)(x-x^2)}{(x^1-x^0)(x^1-x^2)}\\equiv\\frac12(x+1.0)x\\\\\n",
    "&L_2(x) = \\frac{(x-x^0)(x-x^1)}{(x^2-x^0)(x^2-x^1)}\\equiv-(x+1.0)(x-1.0)\\, .\n",
    "\\end{align}\n",
    "\n",
    "2. Para llegar a la aproximación final de la función realizamos la combinación lineal:\n",
    "\n",
    "\\begin{equation}\n",
    "\\hat{f}(x) = L_0(x)f_0 + L_1(x)f_1 + L_2(x)f_2\n",
    "\\end{equation}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-warning\">\n",
    "\n",
    "**Preguntas**\n",
    "    \n",
    "- Verificar que los polinomios de interpolación $L_0(x)$, $L_1(x)$ y $L_2(x)$ satisfacen la propiedad\n",
    "\n",
    "$$L_I(x_J)= \\delta_{IJ} \\equiv \\begin{cases}\n",
    "1\\quad \\text{si } I=J\\\\\n",
    "0\\quad \\text{si } I\\neq J\n",
    "\\end{cases}\\, .$$\n",
    "\n",
    "- Si la condición $L_I(x_J)=\\delta_{IJ}$ no se satisface por una de las funciones de interpolación encontradas, ¿cuál sería el efecto resultante en la aproximación de la función?\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Algunas notas de interés\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* En el método de los elementos finitos es común denominar a los polinomios de interpolación como _funciones de forma_.\n",
    "\n",
    "* El dominio de calculo es el intervalo de tamaño 2 comprendido entre $x=-1.0$ y $x=+1.0$. Como se discutirá mas adelante, por facilidades en la programación en la implementación de métodos de elementos finitos los dominios de tamaño diferente son transformados al dominio de tamaño 2."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Solución en Python\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "En los siguientes bloques de código mostramos el paso a paso en la construcción del polinomio de interpolación final $f(x)$ usando Python. Para seguir el Notebook se recomienda que de manera simultánea se implementen los bloques de código en un script independiente o que añada comentarios a las instrucciones más relevantes."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Paso 1: Importación de módulos\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "En la escritura de scripts en Python es necesario importar **módulos** o bibliotecas (algunas personas usan la palabra _librería_ como mala traducción de _library_ del inglés) que contienen funciones de Python predefinidas. En este caso importaremos los **módulos**:\n",
    "\n",
    "* `numpy` el cual es una biblioteca de funciones para realizar operaciones con matrices similar a Matlab.\n",
    "* `matplotlib` el cual es una biblioteca de graficación.\n",
    "* `scipy` el cual es una biblioteca fundamental para computación científica.\n",
    "* `sympy` el cual es una biblioteca para realizar matemáticas simbólicas.\n",
    "\n",
    "Python importa los módulos usando la palabra reservada `import` seguida del nombre del módulo y un nombre corto para ser usado como prefijo en referencias posteriores a las funciones contenidas en ese módulo."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib notebook"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy import interpolate\n",
    "import sympy as sym"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "sym.init_printing()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Paso 2: Definición de una función para determinar los polinomios de interpolación de Lagrange\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "En un programa de computador una **función** (o también llamada **subrutina**) es un bloque de código que realiza una tarea específica múltiples veces dentro de un programa o probablemente en diferentes programas. En Python estas funciones se definen por medio de la palabra clave `def` seguida del nombre dado a la función.\n",
    "\n",
    "Conjuntamente con el nombre, encerrado entre paréntesis, la definición de la función debe incluir también una lista de parámetros (o argumentos) a ser usados por la función cuando esta realice tareas especificas.\n",
    "\n",
    "En el ejemplo definiremos una función de Python para generar el polinomio de Lagrange usando la productoria definida previamente. Le daremos a esta función el nombre `lagrange_poly`. Sus parámetros de entrada serán la variable independiente $x$ a ser usada en el polinomio; el orden del polinomio definido por `order`; y el punto `i` asociado al polinomio. La función será usada posteriormente desde el programa principal."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def lagrange_poly(x, order, i, xi=None): \n",
    "    if xi == None:\n",
    "        xi = sym.symbols('x:%d'%(order+1))\n",
    "    index = list(range(order+1))\n",
    "    index.pop(i)\n",
    "    return sym.prod([(x - xi[j])/(xi[i] - xi[j]) for j in index])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Alternativamente a la definición de una función usando la palabra clave `def` Python también permite la definición de funciones en el sentido del Calculo, es decir definición de relaciones que permiten  transformar escalares o vectores en otros escalares o vectores. Esto es posible a través de la opción `lambda`. En este ejemplo usaremos la opción `lambda` para crear la función:\n",
    "\n",
    "\\begin{equation}\n",
    "f(x)=x^3+4x^2-10.\n",
    "\\end{equation}\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-warning\">\n",
    "\n",
    "**Preguntas**\n",
    "\n",
    "Use una terminal o un script independiente para probar el uso de la opción `lambda` en la definición de una función. Intente con diferentes funciones.\n",
    "</div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "fun = lambda x: x**3 + 4.0*x**2 - 10.0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Una vez creada la función $f(x)$ usando la opción `lambda` pasamos a definir un conjunto de puntos de evaluación. El numero de puntos se define por medio de la variable `npts` y usamos la función `linspace` del módulo `numpy` para crear una distribución equidistante de puntos entre $x = -1.0$ y $x = +1.0.$ Simultáneamente, el arreglo nulo `yy` almacenará los valores de la función en los puntos almacenados en `xx`.\n",
    "\n",
    "Note que Python inicia desde la posición 0 el conteo de elementos en arreglos y otras estructuras de datos, de manera que empezamos a contar desde cero para mantener la consistencia con la implementación."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "npts = 200\n",
    "x_pts = np.linspace(-1, 1, npts)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Con la función ahora disponible podemos calcular los valores (conocidos) listos para ser usados en el esquema de interpolación. Estos valores se almacenarán en el arreglo `fd()`. Para calcular cada valor de la función usamos el comando (ya disponible) `fx` correspondiente al nombre que usamos en la declaración de la función usando la opción `lambda`.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-warning\">\n",
    "\n",
    "**Preguntas**\n",
    "\n",
    "Intente usar nombres diferentes en la definición de la función usando la opción `lambda` y ensaye si su código aún funciona.\n",
    "\n",
    "</div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "pts = np.array([-1, 1, 0])\n",
    "fd = fun(pts)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Ahora evalúe la función en los `npts` puntos y grafique la misma:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "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\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>');\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        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=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f982bdebbe0>]"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plt.figure()\n",
    "y_pts = fx(x_pts)\n",
    "plt.plot(x_pts , y_pts)\n",
    "plt.plot(pts, fd, 'ko')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Paso 3: Encontrando los polinomios de interpolación de Lagrange\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Calculemos ahora los polinomios de Lagrange invocando la función `lagrange_poly()`. Crearemos una lista vacía que llamaremos `pol` y cada que determinemos un nuevo polinomio lo adicionaremos a la lista usando para ello el método `.append()`. En ese momento los polinomios almacenados en la lista `pol=[]` existirán en notación simbólica (como si estuviéramos resolviendo el problema a mano) y estarán listos para ser evaluados en valores específicos de $x$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\left[ \\frac{x \\left(x - 1\\right)}{2}, \\  \\frac{x \\left(x + 1\\right)}{2}, \\  1 - x^{2}\\right]$"
      ],
      "text/plain": [
       "⎡x⋅(x - 1)  x⋅(x + 1)       2⎤\n",
       "⎢─────────, ─────────, 1 - x ⎥\n",
       "⎣    2          2            ⎦"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = sym.symbols('x')                                       \n",
    "pol = []                                                \n",
    "pol.append(sym.simplify(lagrange_poly(x, 2, 0, [-1,1,0])))  \n",
    "pol.append(sym.simplify(lagrange_poly(x, 2, 1, [-1,1,0])))\n",
    "pol.append(sym.simplify(lagrange_poly(x, 2, 2, [-1,1,0])))\n",
    "pol"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "<div class=\"alert alert-warning\">\n",
    "\n",
    "**Preguntas**\n",
    "\n",
    "- Grafique los 3 polinomios de Lagrange de orden 2 y verifique que satisfacen la propiedad $L_I(x_J)=\\delta_{IJ}$.\n",
    "\n",
    "- Adicione más puntos al dominio de interpolación y grafique los polinomios resultantes. ¿Cuál es el efecto en los polinomios?\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "El método `subs` del módulo `sympy` substituye el valor de la variable independiente $x$ por el valor almacenado en $xx[i]$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "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\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>');\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        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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mTt3buy7776x3377bSmnCt26dYvf/va30adPn3j++eeje/fucdRRR0WSJPHnP/+51tdSaPVRVn379o1f/vKX0bNnzxgwYED06NEjvvWtb0WSJHHGGWfE5s2bt7zWfVXZokWLYtddd40jjzyy2ucvvfTSaNeuXTz44IPx3HPPRdeuXeNLX/pSJEkSXbt2rdV1pKE2nThZillZ0gBpG0BO2gGP2rnkkkvyPp5++ukaP6e2nTi/+93valy3Y9asWZEkSfz+97/f8tiXv/zlSJKkUoO3QsW88IcffniHzmFH1La8XnrppRqHgkdEtGnTJpo2bbrD57N+/fr47Gc/G/vvv39s2LAh7/fdcccdkSRJ/Od//ucOf2e+GltZVRg/fny1CUGa91ZjLKtHHnlkS3KwvakfW3v++ecjSZI47bTTavWddfW9730vkiSJWbNmVXluxIgRkSRJdO7cucb3f/jhh5EkSY3rdlSsJVGxyPVDDz0USZLEVVddVe3rv/SlL8VXvvKVWlxJ4dW1rKqzatWqOOaYY6JJkyZ5j4LYuHFjnHTSSZEkSbz22ms79H0NpRBlFZEbRfHv//7vkSRJPP7441sed19V1qVLlx3u/FmxYkUcdthhseuuu8aHH364Q9+Xltp04mQpZmVJ4bM2gP+VdsCjdpJk+9tVb31sL+HPykic2pZXoUZMPProo5EkSVx88cU79L7y8vLYf//944tf/OIOf2e+GltZba1iaP7WawileW81trJ6+umno1mzZtGqVatYvHjxDr332GOPjWbNmsW6det2+Hvrykic/NX3iIlVq1ZFmzZtokmTJnHXXXft0LkMGDAgkiSJDh067ND7GkqhRi1F/N902LPPPnv7/JxqAAANLklEQVTLY+6ryr761a/GbrvttsNTgCv+WNHYp+tVMBKHCrVMxQB2XNoBj3RZE2f7CrV2yamnnhpJktRq+spxxx0Xu+666w6/r9AKvc5LRMTf//73SJIkXnnllS2PFeO9VYiy6tu3bzRr1ixat269wx04EbFlZMH8+fN3+L11VR9r4uy5556ZWF+iPtcuWblyZZx88snRpEmTuOeee3b4XCZPnhxJksQFF1yww+9tCIVcP2j16tWRJEn8y7/8y5bH3Ff/58UXX4wkSeKss87a4XMpLS2NJEni+uuv3+H3pqG2a+JkJWZlSYMkbgBJohMn62rbiTNy5MhIkiR++9vfVnmuut2prr766kiSJB588MEqr6/YQWjNmjU7evoN4pBDDok999yz3nYRmjFjRjRp0qRWW7aWlZXFfvvtV+2CtY1BfZfVtn784x9XGfJfrPdWfZbVo48+umWb9W3XM8lX69atY9ddd817ClZ96tOnTyRJEp06daryXMXip++///52P+O73/1uJMnOv9NLfZRVRG7x65NOOil22WWXKgsZ5+uZZ57Z7hSPtNVXWVVnwoQJkSSVp0S6r/7P2WefHUlS/ZTrT3PbbbdFklRdYLuxqu3uVFmJWVnSQKkbgE6crMun8p8zZ05MnTq10rayZWVlUVJSEi1atKg0b33FihVx8MEHR0lJSaXtQqdNm7Ylydx6R49x48ZFkyZN4pxzzqnfC6tHHTp0qHYoebt27SJJknjhhRcqPV5deW2tffv2kSRJPPTQQzV+55IlS6p9/Nprr60yVa0xqY+yqunaR40aFbvsskuVIePFem/V13318MMPR9OmTeOEE06IZcuWbfc7ayrbivUWzjzzzFpcSd0tXbo09t577zj44INjxYoVWx6fM2dOtGjRIr7zne9seWzNmjUxderU+Oijjyp9Rq9evar9bdx6662RJEncd999lR6vSDK3nWp35plnRtOmTWPatGn1dXn1qj7Kavny5XHCCSdE06ZNtxuHIiI2bdoUy5cvr/L46tWro3Xr1pEkSbz55pt1vKrCqI+yqu43s3HjxjjttNOqvX+yfF9t/VnNmzePww8/fMtIkm2tXr262qmbCxcujIMOOih23333VEYF1sandeJkPWZlScNmcECmpR3waHizZ8+Ozp07R+fOnbcsUNy2bdstj40ePbrS6ysaKNtuQTxw4MBo2rRplJSUxK233hp33HFHtGrVKpo2bRoDBw6s8r0VU1tOPvnk6NGjR1x33XXRsmXLOPDAAxv1AoYrVqyIr33ta9G0adNo165d3HfffXHeeedFkiTxq1/9qsrrayqviFxCdOCBB8Z+++233bVHfvazn0Xbtm2jQ4cO0aNHj+jatWt8//vfjyRJ4uijj671aItCq4+y6tatWxx11FHxt7/9Lbp37x533nlnnH/++dGsWbPYe++944033qjyOcV4b9VHWT3//POxyy67xF577RV33XVXPPzww1WO1atXb3n9X//61zj++OOjffv2cdddd0W3bt22rDN00EEHVbuoaUOpmLLRqlWruOOOO+KWW27Z0lE8YcKELa+r6HjedqRSWVlZtGnTJpIkifPOOy/uu+++aNeuXTRt2jTatGlTqVM5IpecHnjggbHnnnvGFVdcEb169dqyLsjll1/eEJdca3Utq+OOOy6SJImf/OQn1d4zr7766pbXLlu2LPbdd98499xz44YbbohevXpFhw4d4otf/GIkSRLt27dvqMuulbqW1UEHHRS/+MUv4tprr41evXpFp06d4sgjj9wyVWjbToos31cVunfvHkmSxE033VTjd02cODE+97nPxQUXXBBdu3aNnj17xiWXXBL77bdfrdZnamgPPfTQljbToYceGkmSbPn/2y4ALWZlRwOkbQA5aQc8Gl5Fg6KmY9tROdvrlBg5cmSceuqp0aJFi2jRokWceuqpMXLkyGq/t7y8PHr06BHf+MY3Yvfdd4+WLVvGWWedVevh7A1p8eLF8cc//jE+//nPx2677RZHHHFE3HDDDdWOttleefXr1y+vkTS9e/eOtm3bbvm+PfbYI1q3bh3XXHNNrFq1qr4uqyDqWlZjxoyJn/zkJ1FSUhJ77rln7LbbbnHYYYfFH//4xxrvlWK9t+paVhVTF7d3bP365557Ln7wgx/EwQcfHM2bN4/dd989vva1r8XFF1/cKLatf+qpp+KEE06IPfbYI/bdd984/fTT46233qr0mu0lkKtWrYp//OMfccghh8Suu+4ahxxySPzjH/+o8Tfz/vvvx1lnnRUtW7aM3XffPb7xjW9Ejx49ahw90JjUpaw+7Z7Z+vXr16+PP/zhD9G6devYb7/9omnTptGyZcv413/91+jfv38DXGnd1aWsLrnkkjjuuOOiZcuW0axZs9h3332jTZs20adPnxrvk6zeVxVat24dzZo1i4ULF9b4PQsWLIhzzz03jjrqqNh3332jWbNmceCBB8ZPf/rTKn9Iaowq4nFNx9bErOwoXLYGsI20Ax4AAEAxSzunAzIk7YAHAABQzNLO6YAMSTvgAQAAFLO0czogQ9IOeAAAAMUs7ZwOyJC0Ax4AAEAxSzunAzIk7YAHAABQzNLO6YAMSTvgAQAAFLO0czogQ9IOeAAAAMUs7ZwOyJC0Ax4AAEAxSzunAzIk7YAHAABQzNLO6YAMSTvgAQAAFLO0czogQ9IOeAAAAMUs7ZwOyJC0Ax4AAEAxSzunAzIk7YAHAABQzNLO6YAMSTvgAQAAFLO0czogQ9IOeAAAAMUs7ZwOyJC0Ax4AAEAxSzunAzIk7YAHAABQzNLO6YAMSTvgAQAAFLO0czogQ9IOeAAAAMUs7ZwOyJC0Ax4AAEAxSzunAzIk7YAHAABQzNLO6YAMSTvgAQAAFLO0czogQ9IOeAAAAMUs7ZwOyJC0Ax4AAEAxSzunAzIk7YAHAABQzNLO6YAMSTvgAQAAFLO0czogQ9IOeAAAAMUs7ZwOyJC0Ax4AAEAxSzunAzIk7YAHAABQzNLO6YAMSTvgAQAAFLO0czogQ9IOeAAAAMUs7ZwOyJC0Ax4AAEAxSzunAzIk7YAHAABQzNLO6YAMSTvgAQAAFLO0czogQ9IOeAAAAMUs7ZwOyJC0Ax4AAEAxSzunAzIk7YAHAABQzNLO6YAMSTvgAQAAFLO0czogQ9IOeAAAAMUs7ZwOyJC0Ax4AAEAxSzunAzIk7YAHAABQzNLO6YAMSTvgAQAAFLO0czoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgRf8fr1B/ID0B1agAAAAASUVORK5CYII=\" width=\"852.75\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure()\n",
    "                      \n",
    "for k in range(3):\n",
    "    for i in range(npts):\n",
    "        yy[i] = pol[k].subs([(x, xx[i])])   \n",
    "    plt.plot(xx, yy)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "### Paso 4: Encontrando el polinomio de interpolación para aproximar la función  $f(x)$\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Construyamos ahora el polinomio de aproximación completo $\\hat f(x)$ de acuerdo con la superposición lineal\n",
    "\n",
    "$$\\hat{f}(x) = L_0(x)f(x_0) + L_1(x) f(x_1) +  L_2(x) f(x_2)\\, ,$$\n",
    "\n",
    "\n",
    "y utilizando la lista (ya disponible) `pol` que almacena los 3 polinomios generados. Solo para efectos de ilustrar primero lo mostramos con `display`. La versión evaluada de $\\hat{f}(x)$ será almacenada en el arreglo `yy[i]`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle 10.0 x^{2} - 3.5 x \\left(x - 1\\right) - 2.5 x \\left(x + 1\\right) - 10.0$"
      ],
      "text/plain": [
       "      2                                       \n",
       "10.0⋅x  - 3.5⋅x⋅(x - 1) - 2.5⋅x⋅(x + 1) - 10.0"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display(pol[0]*fd[0] + pol[1]*fd[1] + pol[2]*fd[2])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "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\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>');\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        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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xRfiJ3FunQBXVccpW4cPO5aJFZLVakWPHj3uOoFjtVoLXTYRUWnFMaUYklI5IjIj2QHP2+XdfXO7R0F35Rw9ehRvvfUWqlWrhooVK6J58+ZYtWpVsdrBDpeIhFJV4OZNIDIS2L7dcTrWsmXA7NmOpVFDhwI//ODYT+dWEyYAAwcCY8YAgYHAL784l2CFhwOXLt3xjpriioiIQLdu3VCzZk2UL18eNWvWRLdu3biEioioABxTiiEtmSMi85Ed8EgfdrhEREREVFwcU4ohO6cjIhORHfBIH3a4RERERFRcHFOKITunIyITkR3wSB92uERERERUXBxTiiE7pyMiE5Ed8EgfdrhEREREVFwcU4ohO6cjIhORHfBIH3a4RERERFRcHFOKITunIyITkR3wSB92uERERERUXBxTiiE7pyMiE5Ed8EgfdrhEREREVFwcU4ohO6cjIhORHfBIH3a4RERERFRcHFOKITunIyITkR3wSB92uERERERUXBxTiiE7pyMiE5Ed8EgfdrhEREREVFwcU4ohO6cjIhORHfBIH3a4RERERFRcHFOKITunIyITkR3wSB92uERERERUXBxTiiE7pyMiE5Ed8EgfdrhEREREVFwcU4ohO6cjIhORHfBIH3a4RERERFRcHFOKITunIyITkR3wSB92uERERERUXBxTiiE7pyMiE5Ed8EgfdrhEREREVFwcU4ohO6cjIhORHfBIH3a4RERERFRcHFOKITunIyITkR3wSB92uERERERUXBxTiiE7pyMiE5Ed8EgfdrhEREREVFwcU4ohO6cjIhORHfBIH3a4RERERFRcHFOKITunIyITkR3wSJ+goCAoioLAwECEhYXxwQcffPDBBx988MFHoR+BgYFQFAVBQUGyh7eliuycjohMRHbAI33yOlw++OCDDz744IMPPvgo7iMwMFD28LZUUYiIPEV2wCN9YmJiEBgYiKCgICn/WsM7gHiteK14rbz9wWvFa8XrJf/Ba+X91yooKAiBgYGIiYmRPbwtVaQlc0RkPrIDHnm3sDCum9aL10o/Xiv9eK3047XSj9eqcHi99OO10o/XqnSRlswRkfnIDnjk3TjA0I/XSj9eK/14rfTjtdKP16pweL3047XSj9eqdJGWzBGR+cgOeOTdOMDQj9dKP14r/Xit9OO10o/XqnB4vfTjtdKP16p0kZbMEZH5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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkOgHCYzerNJ/MU4AAAAASUVORK5CYII=\" width=\"852.75\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f982bea99e8>]"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plt.figure()                                                                      \n",
    "for i in range(npts):\n",
    "    yy[i] = fd[0]*pol[0].subs([(x, xx[i])]) + fd[1]*pol[1].subs([(x, xx[i])]) \\\n",
    "            + fd[2]*pol[2].subs([(x, xx[i])])\n",
    "\n",
    "zz = fx(xx)\n",
    "plt.plot([-1, 1, 0], fd, 'ko')\n",
    "plt.plot(xx, yy , 'r--')\n",
    "plt.plot(xx, zz)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note que debido a la diferencia en orden entre la aproximación $\\hat{f}(x)$ y la función $f(x)$  el polinomio de interpolación no coincide completamente con la función aunque si reproduce los valores correctos en los puntos nodales."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-warning\">\n",
    "\n",
    "**Pregunta**\n",
    "\n",
    "¿Cómo podemos mejorar la aproximación $\\hat{f}(x)$  a la función $f(x)$?\n",
    "</div>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Paso 5: Encontrando las derivadas\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Usemos la opción `lambda` una vez más para definir una nueva función `fdx`correspondiente a la primera derivada:\n",
    "\n",
    "$$f'(x) = 3x^2 + 8x\\, .$$\n",
    "\n",
    "Las derivadas en los puntos nodales se almacenarán en el arreglo `fc`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "fdx = lambda x: 3*x**2+8.0*x\n",
    "fc = np.array([fdx(-1.0), fdx(1.0) ,fdx(0.0)])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "La interpolación de las derivadas se calculan de acuerdo con\n",
    "\n",
    "\\begin{equation}\n",
    "\\hat{f}'(x) = \\frac{\\mathrm{d}L_0(x)}{\\mathrm{d}x} f_0 + \\frac{\\mathrm{d}L_1(x)}{\\mathrm{d}x} f_1 + \\frac{\\mathrm{d}L_2(x)}{\\mathrm{d}x} f_2\\, .\n",
    "\\end{equation}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAALsAAAAyCAYAAAAEL6p6AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFg0lEQVR4Ae1c7VHcMBQ8mBTAkApydABDBQkdkKQCkg5g+AX/GOggoYJM6ACoIAMdhA5IroNk10hG+GzdnaTjLHk1o5P8ZH28fStZkuVbOzk5+TsajTbgXXdxenp65AoUFwK5IADunqOth432Tt4YwUeED06iG3fEigqBLBA4Qyt/OC0dI35pyf6A3nDvJCoqBLJFAFyeoPE1n3Fd6WLJnq1ituFQaB/xS/h3RlmbNMhQeEybPWuyw6Bca5Dgf+A34ZtrD4iG44SH39a5k52PK643RjA0FyQc3QfrgIHw8Fh/3ZOmJCFQFAIie1HmlDI+BER2HzpKKwoBkb0oc0oZHwIiuw8dpRWFgMhelDmljA8Bkd2HjtKKQkBkL8qcUsaHgMjuQ0dpRSGQ9RtUWgJvDb8h4FGBD7yGu4WMpzavEX6vJAP6ER7dxi6B7F+71RteCsieHR5o8xiWst9PME53BHl9cvFJFPebPdnj1FfuVSMAQvPw3jnC6owT24M4P764Q7gHf0NZCqc5ewoUE5QBo+7DN7+uSVBy74vgqdUDt5XAgaM8D7X9dOWxcZE9FkHlj0WAa627lkI4om+A+NstaUEikT0INmVKiAA3E8YgNaczS3Uz5+ymEV9MK3YR8hHDRQR73Fv4R9xzgXAwTpikMzWw3OkozY7o9ffQsbh7R3ZT+DFC/tsACX1t/La55scSnzsaW6RYmCzfrMCYUxsOqOQd5+6jFLjPGtmPUQ+/1LZuCxE2wu5fc5RPuj1kK+pxKEyWbxy+O7kCwckv66Jxn0X2M9uzTI3scTdWhvDKtqQtRDrnYbfw887H2IsPkG9mB8I9/9rqbJPh3rU2eaAsFhNuqxHHpiNGm2hr25OS//5Qb801M/Ia6SvBA/UmtTHKI9HJseb7gijciZGX7KiQ5HMd51Fub3PTpuImf9ecbOr+RQQoOyWB5646ASat+KFcTgm5UAta/6wYjyQ2hg7V1ivCJtFHkEVxkQb2ztldBqAyu2BItsnvlp9jXJiksxqwZGffQlgTHXF2fk6bXzjIgrjoJTsK5YsOPqboqkcvruspBuKHTvrTXYX/Ql9hktjGwJTk5dvSmuimivrfIlLg3jmNQeEkN99gca7IufkefO2Qzh43Qdh8vNT39DGC9rLz8v8t7xFf6PGL+4vDJAaPFPZF/eQRecYFKdczdLTRJny165cK9zXzx6bvUWA9YrM2XLNCvsr9xWs47sBwv507MtUbL9xjd2Ugyseh3b9Na3cQn7uzLhMTlB01Z49BPxSPmDptXtRNLtlpiRXbkAtzTm2iuIj8LP/WN7KTBM0dgKDFk235MkIowpHBLvoYp/OemDMAklwcPRYhe+8xeU08CHSsQ3tnPl1xTxLcO8keq8Rr5AcIG6gn9MTcLvJ7t05fQwenDi782fmCXWF4BOPQlXG9KyETedCJOUOKxz7piDZx/VO/Gg9sWzF4BOrvzZY72blgDDkx9wnE6t2UzGup+RKFhwen3MkedGIORM9yYe2xo00SHhaJljD3OXvX4sau7mOnBS2Q9VeETiw8PObJfWSfUg0G56N8DF+fmJu6aUAC4fFs7OLIDtXaTsw9azy8mPAwNi+K7BjF7Im55vuB4VEcGguPl2YvhuwwbOeJuZcqD+NKeEzbuQiyw7Bzn5ibhqA8ifBot2n2ZIdhufPiPTHXrnqZUuHRbdfctx7HUM17Yq5b9fJSQHTh4TFr1mQ3RKeB2/5caFB77MbG7PjCw4DRDLImO0ayrpcoTT0HcS08/GZe9ycrVQiUg4DIXo4tpckMBET2GQApuRwE7JydX3G7WvFzqLm/4HEzKi4EVo0AuMuPerhQt66KW7JzFe86nvW2n7q5csWFQA4IHKORzR26yX82okblyB77ywAAAABJRU5ErkJggg==\n",
      "text/latex": [
       "$\\displaystyle \\left[ x - \\frac{1}{2}, \\  x + \\frac{1}{2}, \\  - 2 x\\right]$"
      ],
      "text/plain": [
       "[x - 1/2, x + 1/2, -2⋅x]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFoAAAAQCAYAAACWa2gIAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADKUlEQVRYCd2Y7VEUQRBAF4oAKIxAyAAlA8hANAI1Ayz+3T8KMlAjUMwAjMDiMgAjAC+D871xe2vXm71d7jzq1q7q65memZ7pz5m9jel0Wgij0Wgb8i51iuIZ1P4l/OuSN5eU68+ZNAFvwT3wC/wx9L+HLv23ahY4Z/L7Wr+gr6G3wW91fkv7O/yzmOs6+jfQI/CuZc3asTnrKw71GXxO26DpC3P131RKKfwmI/EDvNMMv8FivZmwC60cQttD2r9sTF5RRx3Ak0XEs85gMqg+sv4NaJD0BtZ16p8MjcQD8Dgj+QFen01dmysxP+Dvq0hG9tqwON8EPAbNaM/8WOjUPwx9heRDNroC60Yxmq27XXDYMmFS8tvGW5YNjt2mX6V/qtEY9xo0za1Pv2jrWS+zW9qfoK3AeDjG6G+D3Rgo58elayZZnhzfB72E75lzAR0E9NU/IrpggeEfClqr9NLXHtrulHPCe/UlYXwN6B465RR6IdI2k0TLi30dbY0cEvTSv25olTSyjkBfCUbYTwzQlhYMNyAiu8H8q2MpOqvxzBr3jKwxunX4EGGu/lE6TGWfYaHkHm1vcOuzt/G8p05Ebc444e37ctDnXz3ydaJlK/Gg1aslJ0weczxTzvkqusN4LiPu4IduivmX0Ev/ZGh29fAv6rtzMNPbl4TPPhXLGoE53tgMF2FU2wHh5fSOdm4MlNSsMYp7AzKy8+GnjIRG+estc5mJ6gQqYq7+m0zSGL4jZz4q4I0Z08A5IbAr0CFh1IpJI9bNPP2QrZGFmbE/7EH9duqvoY0yvWKtzIEG7DKGHyUvM4vNknG5RwH1oyIcYpbI05kJaJ/UxoM9BNqpf1yG1q/0uV3XCqWt3b6tI/WN/CnY+Iqk72X2ADV9E9DWoK/BtzLoa1gPlAwM9dKtgHEdrcN1/FoCZ1tY/43an0qmsq8Ci7vKaiiN34hm+v5hZJQ2LhcPAd/1cfEd0PbySxFbjvsfQnx56Rwd6csjOY458fqA9Thg7VI1mvU+aS11BoK6eG4DzECrzkV7If0rQyNw0LCsoVet/NaqN3hC+WZeXL5PuG2/rX4DNR5f2TEF9lkAAAAASUVORK5CYII=\n",
      "text/latex": [
       "$\\displaystyle 8.0 x + 1.0$"
      ],
      "text/plain": [
       "8.0⋅x + 1.0"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "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\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>');\n",
       "    nav_element.attr('style', 'width: 100%');\n",
       "    this.root.append(nav_element);\n",
       "\n",
       "    // Define a callback function for later on.\n",
       "    function toolbar_event(event) {\n",
       "        return fig.toolbar_button_onclick(event['data']);\n",
       "    }\n",
       "    function toolbar_mouse_event(event) {\n",
       "        return fig.toolbar_button_onmouseover(event['data']);\n",
       "    }\n",
       "\n",
       "    for(var toolbar_ind in mpl.toolbar_items){\n",
       "        var name = mpl.toolbar_items[toolbar_ind][0];\n",
       "        var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
       "        var image = mpl.toolbar_items[toolbar_ind][2];\n",
       "        var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
       "\n",
       "        if (!name) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        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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NgAoZDvgoWK6d+/ueps0aVKZx6loEeehhx4q874dGzdulDFGnTt3Ln7t7LPPljHGseAtUnRd+IQJE8o1hvKo6PlasGBBma3gktS2bVvFxsaWezyHDx/WySefrIYNGyonJ8f1+4YPHy5jjLp06VLuz3Qr0s5VkeXLl5eaENj8bUXiuXrvvfeKk4NjXfpR0pQpU2SM0fXXX1+hz6ysa665RsYYbdy4Mehvc+fOlTFGAwcOLPP9qampMsaUed+OontJFN3k+t1335UxRn379i11/9/97nc655xzKvBNvFfZc1WajIwMXXTRRYqJiXHdBZGbm6vLLrtMxhh9++235fq8cPHiXEmFXRR/+9vfZIzRhx9+WPw6vyunl19+udzFn/T0dDVt2lTVq1dXampquT7PlooUcfwUs/zE+6wNAP6P7YCHijHm2I+rLrkdK+H3SydORc+XVx0T77//vowxevLJJ8v1vkAgoIYNG+qMM84o92e6FWnnqqSi1vyS9xCy+duKtHM1adIkxcXFqVWrVtq9e3e53tu6dWvFxcUpOzu73J9bWXTiuBfqjomMjAy1bdtWMTExGjFiRLnGMnXqVBlj1Lt373K9L1y86lqSjlwOe9999xW/xu/KqXnz5qpRo0a5LwEu+seKSL9crwidOChSwVQMAMrPdsCDXdwT59i8undJ+/btZYyp0OUrF198sapXr17u93nN6/u8SNJ//vMfGWO0aNGi4tei8bflxbmaOHGi4uLilJiYWO4CjqTizoLt27eX+72VFYp74tSpU8cX95cI5b1LDh48qCuvvFIxMTEaOXJkuceyatUqGWP0yCOPlPu94eDl/YMyMzNljNGf//zn4tf4XR3x9ddfyxiju+++u9xjmTZtmowxeuGFF8r9Xhsqek8cv8QsPwlL4gYAxlDE8buKFnHmzZsnY4wefPDBoL+V9nSqZ599VsYYvfPOO0H7Fz1BKCsrq7zDD4uzzjpLderUCdlThNavX6+YmJgKPbI1Pz9fJ510Uqk3rI0EoT5XR7v11luDWv6j9bcVynP1/vvvFz9m/ej7mbiVmJio6tWru74EK5TGjx8vY4wGDBgQ9Leim59u2rTpmMe4+uqrZUzVf9JLKM6VVHjz68suu0zVqlULupGxW59++ukxL/GwLVTnqjQrVqyQMc5LIvldHXHffffJmNIvuT6eV199VcYE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\" width=\"852.75\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f982be09c18>]"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dpol = []\n",
    "dpol.append(sym.diff(pol[0],x))     \n",
    "dpol.append(sym.diff(pol[1],x))\n",
    "dpol.append(sym.diff(pol[2],x))\n",
    "display(dpol)\n",
    "display(dpol[0]*fd[0] + dpol[1]*fd[1] + dpol[2]*fd[2])\n",
    "\n",
    "plt.figure()\n",
    "yy= fdx(xx)\n",
    "plt.plot(xx, yy ,'r--')\n",
    "plt.plot([-1, 1, 0], fc, 'ko')\n",
    "\n",
    "for i in range(npts):\n",
    "    yy[i] = fd[0]*dpol[0].subs([(x, xx[i])]) + fd[1]*dpol[1].subs([(x, xx[i])])\\\n",
    "            + fd[2]*dpol[2].subs([(x, xx[i])]) \n",
    "plt.plot(xx, yy)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Glosario de términos\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Fórmula de productoria:** Expresión usada para calcular los polinomios de interpolación de Lagrange.\n",
    "\n",
    "**Función de forma:** Nombre dado a un polinomio de interpolación en el contexto del método de los elementos finitos.\n",
    "\n",
    "**Punto nodal:** (También nodo). Nombre dado a los puntos específicos donde se conoce el valor de una función y usado en la construcción del esquema de interpolación.\n",
    "\n",
    "**Subrutina:** Bloque de código independiente que realiza una tarea de cómputo determinada dentro de un programa principal.\n",
    "\n",
    "**Matriz de interpolación:** Arreglo unidimensional o bidimensional que almacena las funciones de forma en un esquema de interpolación determinado."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Actividad para la Clase"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "El propósito de esta actividad es familiarizar al estudiante con el uso del método de interpolación de Lagrange en un contexto particular de la ingeniería, como el método de los elementos finitos. El método de elementos finitos utiliza dominios de interpolación de tamaño constante (llamados **elementos**) permitiendo el uso de funciones de interpolación fijos y al mismo tiempo favoreciendo la automatización en programas de computador. En una aplicación típica de elementos finitos los valores nodales de una función (por ejemplo el desplazamiento) son determinados tras resolver un sistema de ecuaciones algebraicas. Estos valores nodales son posteriormente usados para encontrar el desplazamiento a lo largo de todo el dominio del problema, y también para realizar cálculos posteriores y obtener información adicional del problema físico.\n",
    "\n",
    "**Siga los pasos que se indican a continuación para implementar, en un notebook independiente, un esquema de interpolación típico del método de elementos finitos. El esquema de interpolación resultante será el correspondiente a un solo elemento**\n",
    "\n",
    "* Asumiendo que un dominio de interpolación constante se define como $x \\in [-1.0, +1.0]$ con puntos nodales correspondientes a $x_0 = -1.0$, $x_1 = +1.0$, $x_2 = 0.0$, $x_3 = -0.25$ y $x_4 = +0.25$ use la función `lagrange_poly()` para generar las funciones de interpolación asociadas a estos 5 puntos nodales. Presente los polinomios resultantes en una gráfica.\n",
    "\n",
    "* Utilice las funciones de interpolación encontradas en el paso anterior, para definir una matriz $[N(x)]$, que se denominará en adelante **Matriz de interpolación**, de manera que la operación de interpolar se pueda realizar usando operaciones matriciales como:\n",
    "\n",
    "  $$\\hat{f}(x) = [N(x)] \\{F\\}\\, ,$$\n",
    "\n",
    "  y en la cual $F$ es un vector que almacena los valores nodales de la función.\n",
    "\n",
    "* En su Notebook imprima la versión simbólica de la matriz de interpolación.\n",
    "\n",
    "* En su Notebook grafique una función $f(x)$ (representando el desplazamiento de una barra) y su versión aproximada $\\hat{f}(x)$  usando el esquema matricial desarrollado en el numeral anterior. El código también debe graficar la primera derivada de la función.\n",
    "\n",
    "* Para realizar la interpolación en el Notebook programe una función o subrutina de Python que reciba como parámetros de entrada las coordenadas $x$ donde se desea calcular una aproximación de la función y el vector de valores nodales de la función de desplazamientos y entregue después de su ejecución el valor interpolado de la función."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Formato del notebook"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "La siguiente celda cambia el formato del Notebook."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "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",
       "\n",
       "<style>\n",
       "\n",
       "/*\n",
       "Template for Notebooks for Modelación computacional.\n",
       "\n",
       "Based on Lorena Barba template available at:\n",
       "\n",
       "    https://github.com/barbagroup/AeroPython/blob/master/styles/custom.css\n",
       "*/\n",
       "\n",
       "/* Fonts */\n",
       "@font-face {\n",
       "font-family: \"Computer Modern\";\n",
       "src: url('http://mirrors.ctan.org/fonts/cm-unicode/fonts/otf/cmunss.otf');\n",
       "}\n",
       "\n",
       "/* Text */\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",
       "\n",
       "<script>\n",
       "/* Equations */\n",
       "\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": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from IPython.core.display import HTML\n",
    "def css_styling():\n",
    "    styles = open('./nb_style.css', 'r').read()\n",
    "    return HTML(styles)\n",
    "css_styling()"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Raw Cell Format",
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.10"
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}