{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Visualizing impulse responses of Echo State Networks\n",
    "\n",
    "## Introduction\n",
    "\n",
    "In this notebook, the impact of different hyper-parameters of an ESN are explained. The notebook depends on just a small variety of packages: numpy, matplotlib, IPython and pyrcn."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from collections.abc import Iterable\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib import ticker\n",
    "from mpl_toolkits.axes_grid1 import make_axes_locatable\n",
    "from ipywidgets import interact\n",
    "import ipywidgets as widgets\n",
    "import seaborn as sns\n",
    "\n",
    "sns.set_theme(context=\"talk\")\n",
    "# sns.set(font=\"Times New Roman\")\n",
    "from pyrcn.base.blocks import InputToNode, NodeToNode\n",
    "from input_to_node import SimpleInputToNode\n",
    "from node_to_node import DLRBNodeToNode\n",
    "from sklearn.pipeline import Pipeline\n",
    "\n",
    "%matplotlib notebook"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def build_visualization_widget(plot_func, estimator, params, X):\n",
    "    def visualize(func, estimator, constant_params, X, axs, **interactive_params):\n",
    "        params = constant_params.copy()\n",
    "        params.update(interactive_params)\n",
    "        func(estimator, params, X, axs)\n",
    "    _, axs = plt.subplots(figsize=(3.5, 2.25))\n",
    "    constant_params = dict()\n",
    "    interactive_params = dict()\n",
    "    for key, value in zip(params.keys(), params.values()):\n",
    "        if isinstance(value, Iterable) and not isinstance(value, str):\n",
    "            interactive_params[key] = value\n",
    "        else:\n",
    "            constant_params[key] = value\n",
    "    interact(lambda **interactive_params: visualize(my_custom_plot, \n",
    "                                                    estimator, \n",
    "                                                    constant_params, \n",
    "                                                    X, axs, **interactive_params), **interactive_params)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this notebook, we feed an example impulse through the ESN, treating it as a non-linear filter. The unit impuls starts at n=5."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "/* global mpl */\n",
       "window.mpl = {};\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(\n",
       "            '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",
       "\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 = document.createElement('div');\n",
       "    this.root.setAttribute('style', 'display: inline-block');\n",
       "    this._root_extra_style(this.root);\n",
       "\n",
       "    parent_element.appendChild(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 (fig.ratio !== 1) {\n",
       "            fig.send_message('set_device_pixel_ratio', {\n",
       "                device_pixel_ratio: fig.ratio,\n",
       "            });\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 = document.createElement('div');\n",
       "    titlebar.classList =\n",
       "        'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n",
       "    var titletext = document.createElement('div');\n",
       "    titletext.classList = 'ui-dialog-title';\n",
       "    titletext.setAttribute(\n",
       "        'style',\n",
       "        'width: 100%; text-align: center; padding: 3px;'\n",
       "    );\n",
       "    titlebar.appendChild(titletext);\n",
       "    this.root.appendChild(titlebar);\n",
       "    this.header = titletext;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = (this.canvas_div = document.createElement('div'));\n",
       "    canvas_div.setAttribute(\n",
       "        'style',\n",
       "        'border: 1px solid #ddd;' +\n",
       "            'box-sizing: content-box;' +\n",
       "            'clear: both;' +\n",
       "            'min-height: 1px;' +\n",
       "            'min-width: 1px;' +\n",
       "            'outline: 0;' +\n",
       "            'overflow: hidden;' +\n",
       "            'position: relative;' +\n",
       "            'resize: both;'\n",
       "    );\n",
       "\n",
       "    function on_keyboard_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.key_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    canvas_div.addEventListener(\n",
       "        'keydown',\n",
       "        on_keyboard_event_closure('key_press')\n",
       "    );\n",
       "    canvas_div.addEventListener(\n",
       "        'keyup',\n",
       "        on_keyboard_event_closure('key_release')\n",
       "    );\n",
       "\n",
       "    this._canvas_extra_style(canvas_div);\n",
       "    this.root.appendChild(canvas_div);\n",
       "\n",
       "    var canvas = (this.canvas = document.createElement('canvas'));\n",
       "    canvas.classList.add('mpl-canvas');\n",
       "    canvas.setAttribute('style', 'box-sizing: content-box;');\n",
       "\n",
       "    this.context = canvas.getContext('2d');\n",
       "\n",
       "    var backingStore =\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        this.context.webkitBackingStorePixelRatio ||\n",
       "        this.context.mozBackingStorePixelRatio ||\n",
       "        this.context.msBackingStorePixelRatio ||\n",
       "        this.context.oBackingStorePixelRatio ||\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        1;\n",
       "\n",
       "    this.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n",
       "        'canvas'\n",
       "    ));\n",
       "    rubberband_canvas.setAttribute(\n",
       "        'style',\n",
       "        'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n",
       "    );\n",
       "\n",
       "    // Apply a ponyfill if ResizeObserver is not implemented by browser.\n",
       "    if (this.ResizeObserver === undefined) {\n",
       "        if (window.ResizeObserver !== undefined) {\n",
       "            this.ResizeObserver = window.ResizeObserver;\n",
       "        } else {\n",
       "            var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n",
       "            this.ResizeObserver = obs.ResizeObserver;\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n",
       "        var nentries = entries.length;\n",
       "        for (var i = 0; i < nentries; i++) {\n",
       "            var entry = entries[i];\n",
       "            var width, height;\n",
       "            if (entry.contentBoxSize) {\n",
       "                if (entry.contentBoxSize instanceof Array) {\n",
       "                    // Chrome 84 implements new version of spec.\n",
       "                    width = entry.contentBoxSize[0].inlineSize;\n",
       "                    height = entry.contentBoxSize[0].blockSize;\n",
       "                } else {\n",
       "                    // Firefox implements old version of spec.\n",
       "                    width = entry.contentBoxSize.inlineSize;\n",
       "                    height = entry.contentBoxSize.blockSize;\n",
       "                }\n",
       "            } else {\n",
       "                // Chrome <84 implements even older version of spec.\n",
       "                width = entry.contentRect.width;\n",
       "                height = entry.contentRect.height;\n",
       "            }\n",
       "\n",
       "            // Keep the size of the canvas and rubber band canvas in sync with\n",
       "            // the canvas container.\n",
       "            if (entry.devicePixelContentBoxSize) {\n",
       "                // Chrome 84 implements new version of spec.\n",
       "                canvas.setAttribute(\n",
       "                    'width',\n",
       "                    entry.devicePixelContentBoxSize[0].inlineSize\n",
       "                );\n",
       "                canvas.setAttribute(\n",
       "                    'height',\n",
       "                    entry.devicePixelContentBoxSize[0].blockSize\n",
       "                );\n",
       "            } else {\n",
       "                canvas.setAttribute('width', width * fig.ratio);\n",
       "                canvas.setAttribute('height', height * fig.ratio);\n",
       "            }\n",
       "            canvas.setAttribute(\n",
       "                'style',\n",
       "                'width: ' + width + 'px; height: ' + height + 'px;'\n",
       "            );\n",
       "\n",
       "            rubberband_canvas.setAttribute('width', width);\n",
       "            rubberband_canvas.setAttribute('height', height);\n",
       "\n",
       "            // And update the size in Python. We ignore the initial 0/0 size\n",
       "            // that occurs as the element is placed into the DOM, which should\n",
       "            // otherwise not happen due to the minimum size styling.\n",
       "            if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n",
       "                fig.request_resize(width, height);\n",
       "            }\n",
       "        }\n",
       "    });\n",
       "    this.resizeObserverInstance.observe(canvas_div);\n",
       "\n",
       "    function on_mouse_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.mouse_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousedown',\n",
       "        on_mouse_event_closure('button_press')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseup',\n",
       "        on_mouse_event_closure('button_release')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'dblclick',\n",
       "        on_mouse_event_closure('dblclick')\n",
       "    );\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousemove',\n",
       "        on_mouse_event_closure('motion_notify')\n",
       "    );\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseenter',\n",
       "        on_mouse_event_closure('figure_enter')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseleave',\n",
       "        on_mouse_event_closure('figure_leave')\n",
       "    );\n",
       "\n",
       "    canvas_div.addEventListener('wheel', function (event) {\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        on_mouse_event_closure('scroll')(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.appendChild(canvas);\n",
       "    canvas_div.appendChild(rubberband_canvas);\n",
       "\n",
       "    this.rubberband_context = rubberband_canvas.getContext('2d');\n",
       "    this.rubberband_context.strokeStyle = '#000000';\n",
       "\n",
       "    this._resize_canvas = function (width, height, forward) {\n",
       "        if (forward) {\n",
       "            canvas_div.style.width = width + 'px';\n",
       "            canvas_div.style.height = height + 'px';\n",
       "        }\n",
       "    };\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n",
       "        event.preventDefault();\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 toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'mpl-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'mpl-button-group';\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",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'mpl-button-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        var button = (fig.buttons[name] = document.createElement('button'));\n",
       "        button.classList = 'mpl-widget';\n",
       "        button.setAttribute('role', 'button');\n",
       "        button.setAttribute('aria-disabled', 'false');\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "\n",
       "        var icon_img = document.createElement('img');\n",
       "        icon_img.src = '_images/' + image + '.png';\n",
       "        icon_img.srcset = '_images/' + image + '_large.png 2x';\n",
       "        icon_img.alt = tooltip;\n",
       "        button.appendChild(icon_img);\n",
       "\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    var fmt_picker = document.createElement('select');\n",
       "    fmt_picker.classList = 'mpl-widget';\n",
       "    toolbar.appendChild(fmt_picker);\n",
       "    this.format_dropdown = fmt_picker;\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = document.createElement('option');\n",
       "        option.selected = fmt === mpl.default_extension;\n",
       "        option.innerHTML = fmt;\n",
       "        fmt_picker.appendChild(option);\n",
       "    }\n",
       "\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\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",
       "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",
       "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], msg['forward']);\n",
       "        fig.send_message('refresh', {});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n",
       "    var x0 = msg['x0'] / fig.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n",
       "    var x1 = msg['x1'] / fig.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / fig.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,\n",
       "        0,\n",
       "        fig.canvas.width / fig.ratio,\n",
       "        fig.canvas.height / fig.ratio\n",
       "    );\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",
       "    fig.rubberband_canvas.style.cursor = msg['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.handle_history_buttons = function (fig, msg) {\n",
       "    for (var key in msg) {\n",
       "        if (!(key in fig.buttons)) {\n",
       "            continue;\n",
       "        }\n",
       "        fig.buttons[key].disabled = !msg[key];\n",
       "        fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n",
       "    if (msg['mode'] === 'PAN') {\n",
       "        fig.buttons['Pan'].classList.add('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    } else if (msg['mode'] === 'ZOOM') {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.add('active');\n",
       "    } else {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    }\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",
       "            var img = evt.data;\n",
       "            if (img.type !== 'image/png') {\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",
       "                img.type = 'image/png';\n",
       "            }\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",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                img\n",
       "            );\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        } else if (\n",
       "            typeof evt.data === 'string' &&\n",
       "            evt.data.slice(0, 21) === 'data:image/png;base64'\n",
       "        ) {\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(\n",
       "                \"No handler for the '\" + msg_type + \"' message type: \",\n",
       "                msg\n",
       "            );\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(\n",
       "                    \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n",
       "                    e,\n",
       "                    e.stack,\n",
       "                    msg\n",
       "                );\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "};\n",
       "\n",
       "// from https://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",
       "    }\n",
       "    if (e.target) {\n",
       "        targ = e.target;\n",
       "    } else if (e.srcElement) {\n",
       "        targ = e.srcElement;\n",
       "    }\n",
       "    if (targ.nodeType === 3) {\n",
       "        // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "    }\n",
       "\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    var boundingRect = targ.getBoundingClientRect();\n",
       "    var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n",
       "    var y = e.pageY - (boundingRect.top + document.body.scrollTop);\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",
       " * https://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",
       "        }\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",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * this.ratio;\n",
       "    var y = canvas_pos.y * this.ratio;\n",
       "\n",
       "    this.send_message(name, {\n",
       "        x: x,\n",
       "        y: y,\n",
       "        button: event.button,\n",
       "        step: event.step,\n",
       "        guiEvent: simpleKeys(event),\n",
       "    });\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",
       "    // Prevent repeat events\n",
       "    if (name === 'key_press') {\n",
       "        if (event.key === this._key) {\n",
       "            return;\n",
       "        } else {\n",
       "            this._key = event.key;\n",
       "        }\n",
       "    }\n",
       "    if (name === 'key_release') {\n",
       "        this._key = null;\n",
       "    }\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.key !== 'Control') {\n",
       "        value += 'ctrl+';\n",
       "    }\n",
       "    else if (event.altKey && event.key !== 'Alt') {\n",
       "        value += 'alt+';\n",
       "    }\n",
       "    else if (event.shiftKey && event.key !== 'Shift') {\n",
       "        value += 'shift+';\n",
       "    }\n",
       "\n",
       "    value += 'k' + event.key;\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, { key: value, 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",
       "\n",
       "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n",
       "// prettier-ignore\n",
       "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";/* global mpl */\n",
       "\n",
       "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.binaryType = comm.kernel.ws.binaryType;\n",
       "    ws.readyState = comm.kernel.ws.readyState;\n",
       "    function updateReadyState(_event) {\n",
       "        if (comm.kernel.ws) {\n",
       "            ws.readyState = comm.kernel.ws.readyState;\n",
       "        } else {\n",
       "            ws.readyState = 3; // Closed state.\n",
       "        }\n",
       "    }\n",
       "    comm.kernel.ws.addEventListener('open', updateReadyState);\n",
       "    comm.kernel.ws.addEventListener('close', updateReadyState);\n",
       "    comm.kernel.ws.addEventListener('error', updateReadyState);\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",
       "        var data = msg['content']['data'];\n",
       "        if (data['blob'] !== undefined) {\n",
       "            data = {\n",
       "                data: new Blob(msg['buffers'], { type: data['blob'] }),\n",
       "            };\n",
       "        }\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(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 = document.getElementById(id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm);\n",
       "\n",
       "    function ondownload(figure, _format) {\n",
       "        window.open(figure.canvas.toDataURL());\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy, ondownload, element);\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;\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",
       "    fig.cell_info[0].output_area.element.on(\n",
       "        'cleared',\n",
       "        { fig: fig },\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function (fig, msg) {\n",
       "    var width = fig.canvas.width / fig.ratio;\n",
       "    fig.cell_info[0].output_area.element.off(\n",
       "        'cleared',\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "    fig.resizeObserverInstance.unobserve(fig.canvas_div);\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.innerHTML =\n",
       "        '<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 / this.ratio;\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] =\n",
       "        '<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 () {\n",
       "        fig.push_to_output();\n",
       "    }, 1000);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'btn-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'btn-group';\n",
       "    var button;\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",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'btn-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        button = fig.buttons[name] = document.createElement('button');\n",
       "        button.classList = 'btn btn-default';\n",
       "        button.href = '#';\n",
       "        button.title = name;\n",
       "        button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message pull-right';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = document.createElement('div');\n",
       "    buttongrp.classList = 'btn-group inline pull-right';\n",
       "    button = document.createElement('button');\n",
       "    button.classList = 'btn btn-mini btn-primary';\n",
       "    button.href = '#';\n",
       "    button.title = 'Stop Interaction';\n",
       "    button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n",
       "    button.addEventListener('click', function (_evt) {\n",
       "        fig.handle_close(fig, {});\n",
       "    });\n",
       "    button.addEventListener(\n",
       "        'mouseover',\n",
       "        on_mouseover_closure('Stop Interaction')\n",
       "    );\n",
       "    buttongrp.appendChild(button);\n",
       "    var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n",
       "    titlebar.insertBefore(buttongrp, titlebar.firstChild);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._remove_fig_handler = function (event) {\n",
       "    var fig = event.data.fig;\n",
       "    if (event.target !== this) {\n",
       "        // Ignore bubbled events from children.\n",
       "        return;\n",
       "    }\n",
       "    fig.close_ws(fig, {});\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (el) {\n",
       "    el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (el) {\n",
       "    // this is important to make the div 'focusable\n",
       "    el.setAttribute('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",
       "    } else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function (event, _name) {\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which === 13) {\n",
       "        this.canvas_div.blur();\n",
       "        // select the cell after this one\n",
       "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
       "        IPython.notebook.select(index + 1);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "};\n",
       "\n",
       "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(\n",
       "        'matplotlib',\n",
       "        mpl.mpl_figure_comm\n",
       "    );\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydC/xNVfr/H3flUqnckiKRiAlpShdRrqmoJioVGekikm4ThZAuSDGF0iS3UCkqNaH+BvNjUAqlQbklEpVbrv/zrOboez9r7fM8++zlfPbr1ati7Wc/67M+Z6/3edbe6+Q7HDsIBxSAAlAACkABKAAFoEDaKJAPAJg2Y42OQgEoAAWgABSAAlDAKAAAhBGgABSAAlAACkABKJBmCgAA02zA0V0oAAWgABSAAlAACgAA4QEoAAWgABSAAlAACqSZAgDANBtwdBcKQAEoAAWgABSAAgBAeAAKQAEoAAWgABSAAmmmAAAwzQYc3YUCUAAKQAEoAAWgAAAQHoACUAAKQAEoAAWgQJopAABMswFHd6EAFIACUAAKQAEoAACEB6AAFIACUAAKQAEokGYKAADTbMDRXSgABaAAFIACUAAKAADhASgABaAAFIACUAAKpJkCAMA0G3B0FwpAASgABaAAFIACAEB4AApAASgABaAAFIACaaYAADDNBhzdhQJQAApAASgABaAAABAegAJQAApAASgABaBAmikAAEyzAUd3oQAUgAJQAApAASgAAIQHoAAUgAJQAApAASiQZgoAANNswNFdKAAFoAAUgAJQAAoAAOEBKAAFoAAUgAJQAAqkmQIAwDQbcHQXCkABKAAFoAAUgAIAQHgACkABKAAFoAAUgAJppgAAMM0GHN2FAlAACkABKAAFoAAAEB6AAlAACkABKAAFoECaKQAATLMBR3ehABSAAlAACkABKAAAhAegABSAAlAACkABKJBmCgAA02zA0V0oAAWgABSAAlAACgAA4QEoAAWgABSAAlAACqSZAgDANBtwdBcKQAEoAAWgABSAAgBAeAAKQAEoAAWgABSAAmmmAAAwzQYc3YUCUAAKQAEoAAWgAAAQHoACUAAKQAEoAAWgQJopAABMswFHd6EAFIACUAAKQAEoAACEB6AAFIACUAAKQAEokGYKAADTbMDRXSgABaAAFIACUAAKAADhASgABaAAFIACUAAKpJkCAMA0G3B0FwpAASgABaAAFIACAEB4AApAASgABaAAFIACaaYAADDNBhzdhQJQAApAASgABaAAABAegAJQAApAASgABaBAmikAAEyzAUd3oQAUgAJQAApAASgAAIQH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AQCUVFM+luaEAgAEAMo7NvmImp5PPruj1zMAQG13AAAlFU45ANapU8cAG1f5ypcvn61v/NzegAEDqE2bNvTkk08m7Pu8efOoZ8+exM8DZjyKFi1KjzzySI5VxoRBEzQAACaroO75mpMhAPDoncw1faPreCLkrq2wHIikLtPsV04n32AJOAJLwNWrV6dDhw7l+lze5MmTzVu9zZo1o2HDhiX8rPz44480cuRIev311+nss88+UgFcv349Va5cmZ555hnzdjAOKCChwM49+6ldr/ePhJrYvwUVP6aQRGjEgAJQAApAASigpkDKK4AMY/ySR24vZsQBkN8Ufv755/MUgrd6ad++Pf3yyy80fPhwuuCCC0x73hLmtddeMxVEfpFkxowZVKZMGTVRETh9FAAAps9Yo6dQAApAgaNJgZQD4Pnnn0/87N4nn3xi9uzLesSXgHl7GN7KJa/j/vvvN3D36KOP0i233JKtKS8NT58+nW6//XZ68MEHxcYRS8BiUqoE0lzWwBJw3kOmqb2KWTIERe7aCucc32fduUc+559OuWMJOAJLwK1atTIvafAGzrVq1cp2R3j22Wdp9OjRdMcdd1CPHj3yvCNddNFFZvPoDz/8kE4//fRsbRkOGRIZOhkspQ4AoJSSOnE0b2oAQACgjmuTi6rp+eQyS3y2z7kDABOPr1YLV98AACMAgPGq3MCBA+naa6/N5o34NjBDhgyhli1b5umdc845x2wCPWvWLKpQoUK2th988AF1796d+MWTiRMnivkQACgmpUog1xuDSxIAQACgi1/Caqvpee0++Jw7AFDbHbnHd/UNADACABivyjVs2NC8vJHxiG8EzZs38xJxos2beZl4xYoVuS4B89Lw1KlT6eabbzYvlkgdAEApJXXiuN4YXLIAAAIAXfwSVltNz2v3wefcAYDa7gAASiqc8mcA+SffeINn/im4jJtB85/zki9X8/jFjl69eh3pN780sm7dOvP/vOkzb+7MBy8jc7vixYvTSy+9ROedd96Rc+K/EVywYEF655136IwzzhDTEQAoJqVKIM0JBQAIAFQxbZJBNT2fZGoJT/c5dwBgwuFVa+DqG1QAI1ABZDcsWrSIOnXqZH7/t0aNGmb5dunSpbRlyxazZQs/r1esWLEjxuG3fRs3bmz+P+ty72OPPUZvvPGG+TteEuaNoP/73//S2rVrDSjynoJXX321qAkBgKJyigdzvTG4JAAABAC6+CWstpqe1+6Dz7kDALXdkXt8V98AACMCgDyk/CIIb92ycOFC2r17t4FA/pWQDh06mIpexiMvAOR2/JNw/Izfl19+STt37qQTTjjBvPjBkMn7DkofAEBpRWXjud4YXK4OAAQAuvglrLaantfug8+5AwC13QEAlFQ45UvAkp1JVSwAYKqUt7uu5oQCAAQA2rkw3Faantfuic+5AwC13QEAlFQYACigJgBQQETFEJoTCgAQAKho3cChNT0fOCnLE33OHQBoOcgKzVx9gyXgCC0BK/ghtJAAwNCkDnQh1xuDy0UAgABAF7+E1VbT89p98Dl3AKC2O1ABlFQYFUABNQGAAiIqhtCcUACAAEBF6wYOren5wElZnuhz7gBAy0FWaObqG1QAUQEUsSEAUERGtSCuNwaXRACAAEAXv4TVVtPz2n3wOXcAoLY7UAGUVBgVQAE1AYACIiqG0JxQAIAAQEXrBg6t6fnASVme6HPuAEDLQVZo5uobVABRARSxIQBQREa1IK43BpdEAIAAQBe/hNVW0/PaffA5dwCgtjtQAZRUGBVAATUBgAIiKobQnFAAgABAResGDq3p+cBJWZ7oc+4AQMtBVmjm6htUAFEBFLEhAFBERrUgrjcGl0QAgABAF7+E1VbT89p98Dl3AKC2O1ABlFQYFUABNQGAAiIqhtCcUACAAEBF6wYOren5wElZnuhz7gBAy0FWaObqG1QAUQEUsSEAUERGtSCuNwaXRACAAEAXv4TVVtPz2n3wOXcAoLY7UAGUVBgVQAE1AYACIiqG0JxQAIAAQEXrBg6t6fnASVme6HPuAEDLQVZo5uobVABRARSxIQBQREa1IK43BpdEAIAAQBe/hNVW0/PaffA5dwCgtjtQAZRUGBVAATUBgAIiKobQnFAAgABAResGDq3p+cBJWZ7oc+4AQMtBVmjm6htUAFEBFLEhAFBERrUgrjcGl0QAgABAF7+E1VbT89p98Dl3AKC2O1ABlFQYFUABNQGAAiIqhtCcUACAAEBF6wYOren5wElZnuhz7gBAy0FWaObqG1QAUQEUsSEAUERGtSCuNwaXRACAAEAXv4TVVtPz2n3wOXcAoLY7UAGUVBgVQAE1AYACIiqG0JxQAIAAQEXrBg6t6fnASVme6HPuAEDLQVZo5uobVABRARSxIQBQREa1IK43BpdEAIAAQBe/hNVW0/PaffA5dwCgtjtQAZRUGBVAATUBgAIiKobQnFAAgABAResGDq3p+cBJWZ7oc+4AQMtBVmjm6htUAFEBFLEhAFBERrUgrjcGl0QAgABAF7+E1VbT89p98Dl3AKC2O1ABlFQYFUABNQGAAiIqhtCcUACAAEBF6wYOren5wElZnuhz7gBAy0FWaObqG1QAUQEUsSEAUERGtSCuNwaXRACAAEAXv4TVVtPz2n3wOXcAoLY7UAGUVBgVQAE1AYACIiqG0JxQAIAAQEXrBg6t6fnASVme6HPuAEDLQVZo5uobVABRARSxIQBQREa1IK43BpdEAIAAQBe/hNVW0/PaffA5dwCgtjtQAZRUGBVAATUBgAIiKobQnFAAgABAResGDq3p+cBJWZ7oc+4AQMtBVmjm6htUAFEBFLEhAFBERrUgrjcGl0QAgABAF7+E1VbT89p98Dl3AKC2O1ABlFQYFUABNQGAAiIqhtCcUACAAEBF6wYOren5wElZnuhz7gBAy0FWaObqG1QAUQEUsSEAUERGtSCuNwaXRACAAEAXv4TVVtPz2n3wOXcAoLY7UAGUVBgVQAE1AYACIiqG0JxQAIAAQEXrBg6t6fnASVme6HPuAEDLQVZo5uobVABRARSxIQBQREa1IK43BpdEAIAAQBe/hNVW0/PaffA5dwCgtjtQAZRUGBVAATUBgAIiKobQnFAAgABAResGDq3p+cBJWZ7oc+4AQMtBVmjm6htUAFEBFLEhAFBERrUgrjcGl0QAgABAF7+E1VbT89p98Dl3AKC2O1ABlFQYFUABNQGAAiIqhtCcUACAAEBF6wYOren5wElZnuhz7gBAy0FWaObqG1QAUQEUsSEAUERGtSCuNwaXRACAAEAXv4TVVtPz2n3wOXcAoLY7UAGUVBgVQAE1AYACIiqG0JxQAIAAQEXrBg6t6fnASVme6HPuAEDLQVZo5uobVABRARSxIQBQREa1IK43BpdEAIAAQBe/hNVW0/PaffA5dwCgtjtQAZRUGBVAATUBgAIiKobQnFAAgABAResGDq3p+cBJWZ7oc+4AQMtBVmjm6htUAFEBFLEhAFBERrUgrjcGl0QAgABAF7+E1VbT89p98Dl3AKC2O1ABlFQYFUABNQGAAiIqhtCcUACAAEBF6wYOren5wElZnuhz7gBAy0FWaObqG1QAUQEUsSEAUERGtSCuNwaXRACAAEAXv4TVVtPz2n3wOXcAoLY7UAGUVBgVQAE1AYACIiqG0JxQAIAAQEXrBg6t6fnASVme6HPuAEDLQVZo5uobVABRARSxIQBQREa1IK43BpdEAIAAQBe/hNVW0/PaffA5dwCgtjtQAZRUGBVAATUBgAIiKobQnFAAgABAResGDq3p+cBJWZ7oc+4AQMtBVmjm6htUAFEBFLEhAFBERrUgrjcGl0QAgABAF7+E1VbT89p98Dl3AKC2O1ABlFQYFUABNQGAAiIqhtCcUACAAEBF6wYOren5wElZnuhz7gBAy0FWaObqG1QAUQEUsSEAUERGtSCuNwaXRACAAEAXv4TVVtPz2n3wOXcAoLY7UAGUVBgVQAE1AYACIiqG0JxQAIAAQEXrBg6t6fnASVme6HPuAEDLQVZo5uobVABRARSxIQBQREa1IK43BpdEAIAAQBe/hNVW0/PaffA5dwCgtjtQAZRUGBVAATUBgAIiKobQnFAAgABAResGDq3p+cBJWZ7oc+4AQMtBVmjm6htUAFEBFLEhAFBERrUgrjcGl0QAgABAF7+E1VbT89p98Dl3AKC2O1ABlFQ4MhXAtWvX0ogRI2jx4sW0bds2Klu2LDVv3pw6d+5MxYoVc+rzrl276NVXX6WZM2fS+vXrKX/+/HT22WfTrbfeSk2aNHGKZdMYAGijUuraaE4oAEAAYOqcLTcZRqkPmp/XMPrpc/7plDsqgBGpAC5btszA2e7du6l27doG/pYsWUJbt26lqlWr0oQJE6hEiRJWn90tW7bQbbfdRqtXr6aTTjqJ/vSnPxmgXLp0qTm/V69e1L59e6tYto0AgLZKpaad5k0NAAgATI2roXsUdUcFMHWj4nqfBwBGAAD3799PTZs2pY0bN9KgQYOodevWxkF79+6l++67j2bPnk3t2rWjPn36WDmLK4affvqpqR4+9dRTVKRIEXPev/71L+rSpQsdPnyYZs2aZSBT6gAASimpE8f1xuCSBQAQIOLil7Daanpeuw8+5w4A1HZH7vFdfQMAjAAATps2jR566CFq0KABjRkzJtPobt++nRo1akQMifPnz6eSJUvm6S6uJF5//fV02mmn0YwZM6hw4cKZ2vfu3duA4MMPP2ygU+oAAEopqRPH9cbgkgUAEADo4pew2mp6XrsPPucOANR2BwBQUuGUPwPYrVs386xe3759qW3bttn6xlW7OXPm0NChQ6lFixZ59p0rfgyRjz32GN10002SOuUZCwAYmtSBLqQ5oQAAAYCBTKl8kqbnlVMnn3MHAGq7AwAoqXDKAZCXatesWUOTJk2ic889N1vfBg8eTKNGjTLLt7wknNfBz/YtXLiQ3nrrLapUqRJ9+OGH9MUXX9DBgwfpnHPOoVatWh1ZEpYUEQAoqaZ8LM0JBQAIAJR3bPIRNT2ffHZHr2cAgNruAABKKpxyAKxTpw7xW7tc5Stfvny2vo0dO5YGDBhAbdq0oSeffDLPvl988cXEL4GMHj3aPDPIzxVmPE499VQaOXIknXHGGZIaxpaoD9KOHbsTxsRNOaFEKg00dQcAHr2TuaZvVIyeIShy11ZYDkRSl2n2K6eTb/AMYASeAaxevTodOnSIFixYQKVKlcrmyMmTJxM/u9esWTMaNmxYnp8VriDym8T8rGCFChXob3/7G3H8DRs20LPPPktz586lU045hd59910qXrx4lD53yMVTBXbu2U/ter1/JPuJ/VtQ8WMKedobpA0FoAAUgALpokDKK4A1a9Y0L3kkAkB+aeP555/Pc1x4rz9e7i1dujS9//77mbaOOXDggHnDeNWqVfTII4+YrWJwQIFkFQAAJqsgzocCUAAKQIFUKJByADz//PNjy6c76JNPPqFy5cpl0yC+BMzwxtvE5HXUrVuXdu7cmevzguPHj6d+/fpRw4YNzVKw1IElYCkldeJoLmtgCTjvMdPUXsctf0RF7toK5xzfZ925Rz7nn065Ywk4AkvA/GIGV+WmTJlCtWrVynZH4KVbfqbvjjvuoB49euR5R+Jf+fjuu++of//+ZjuYrAfvD8j7BPJ1+HpSBwBQSkmdOJo3NQAgAFDHtclF1fR8cpklPtvn3AGAicdXq4WrbwCAEQDAnj170vTp02ngwIF07bXXZvNGfBuYIUOGUMuWLfP0TteuXemjjz4i/vc999yTre3UqVPp0Ucfpcsuu4xeeuklMR8CAMWkVAnkemNwSQIACAB08UtYbTU9r90Hn3MHAGq7I/f4rr4BAEYAAHnD5vvvvz/HZdn4RtD8XB8vEef0kkhGO7z55pvmxY/KlSsbqCxYsGAmt9x7771maxjeeLpjx45iTgUAikmpEsj1xuCSBAAQAOjil7Daanpeuw8+5w4A1HYHAFBS4ZQ/A8g/+cYbPPOWLRk3g+Y/5yVf/tk23t+Pf8M3fvBLI+vWrTP/W7FiRSpU6Pe3Lvfs2UNXXnmleeuXN5Xmt4fjEMhLvhzj+OOPpw8++CAhTLqIDAB0USv8tpoTCgAQABi+oxNfUdPzia+eXAufcwcAJjf2yZzt6htUACNQAeQBX7RoEXXq1Mn8/m+NGjXMFi5Lly41e/rxW8L8IkixYsWOeIMBr3Hjxub/GRC5ffz48ssvTSyuHpYpU8Y878fPBfJzhkWLFjVbyfBLIJIHAFBSTflYrjcGlwwAgABAF7+E1VbT89p98Dl3AKC2O3KP7+obAGBEAJCHlAFt+PDh5pc8eC8/hjr+lZAOHTpk27MvLwDkWFu3bjVv+fKy8ebNm03Vj9825hdAqlWrJu5QAKC4pKIBXW8MLhcHAAIAXfwSVltNz2v3wefcAYDa7gAASiqc8iVgyc6kKhYAMFXK211Xc0IBAAIA7VwYbitNz2v3xOfcAYDa7gAASioMABRQEwAoIKJiCM0JBQAIAFS0buDQmp4PnJTliT7nDgC0HGSFZq6+wRJwhJaAFfwQWkgAYGhSB7qQ643B5SIAQACgi1/Caqvpee0++Jw7AFDbHagASiqMCqCAmgBAAREVQ2hOKABAAKCidQOH1vR84KQsT/Q5dwCg5SArNHP1DSqAqACK2BAAKCKjWhDXG4NLIgBAAKCLX8Jqq+l57T74nDsAUNsdqABKKowKoICaAEABERVDaE4oAEAAoKJ1A4fW9HzgpCxP9Dl3AKDlICs0c/UNKoCoAIrYEAAoIqNaENcbg0siAEAAoItfwmqr6XntPvicOwBQ2x2oAEoqjAqggJoAQAERFUNoTigAQACgonUDh9b0fOCkLE/0OXcAoOUgKzRz9Q0qgFkqgOvXr1cYlt9DnnrqqWqxUx0YAJjqEUgdhAAAU6e9tutcJxTtfFziI3cXtWTbQntZPW2jueoOAMwCgGeddRbly5fPVm/rdhxzxYoV1u19awgAjPaIud4YXHoDAAQAuvglrLaantfug8+5owKo7Y7c47v6BgCYAwBqDB8D4MqVKzVCRyImADASw5BrEq43BpfeAAABgC5+Cautpue1++Bz7gBAbXcAACUVzvQMIFcAzznnHHruuefErtGtWzdavnw5ADCmqM83NuSe80cCAAgAFLtZCgbC51VQTMdQ0N5RMKHmrrqjAphDBbBu3bo0fvx4oSEhuvHGG2np0qUAQACgmKdcA7neGFziAwABgC5+Cautpue1++Bz7qgAarsDFUBJhTNVANu3b0/VqlWjXr16iV3jiSeeoFWrVtHrr78uFjNqgbAEHLURyZyP5oQCAAQARtH9mp7X7q/PuQMAtd0BAJRUGNvACKgJABQQUTGE5oQCAAQAKlo3cGhNzwdOyvJEn3MHAFoOskIzV99gCRgbQYvYEAAoIqNaENcbg0siAEAAoItfwmqr6XntPvicOwBQ2x2oAEoqbFUB5Dd4R4wYQUuWLKFffvmFDh48mGsOR/uWLzl1HAAoaUn5WJoTCgAQACjv2OQjano++eyOXs8AALXdAQCUVDghAPLzezfccAPt3buXDh8+nPDaR/uWLwDAXxN6IGoNNCdDAODRO5lr+kb7M4LctRWWA5HUZZr9yunkGywBWywB9+jRg95//30qW7Ys3XbbbVS5cmUqWrRonp6tX79+lDytngsqgOoSJ3UBzZsaABAAmJQ5lU7W9LxSykfC+pw7KoDa7pADbwCgBQA2aNCAduzYQe+99x6dfvrpqRvdCF8ZABjhwYmlpjmhAAABgFF0v6bntfvrc+4AQG13AAAlFU64BMwbQ1epUoXefvttyeseVbEAgNEeTs0JBQAIAIyi+zU9r91fn3MHAGq7AwAoqXBCAGzcuLH5feCPP/5Y8rpHVSwAYLSHU3NCAQACAKPofk3Pa/fX59wBgNruAABKKpwQAPv3708TJkygqVOn0tlnny157aMmFgAw2kOpOaEAAAGAUXS/pue1++tz7gBAbXcAACUVTgiA27dvp2uuuYaKFStGQ4YMIf69YByZFQAARtsRmhMKABAAGEX3a3peu78+5w4A1HYHAFBS4YQAyNC3ceNG8xIILwWXLl2aypQpQ4UKFcoxD24zbtw4yRwjHwsAGO0h0pxQAIAAwCi6X9Pz2v31OXcAoLY7AICSCicEQK74MdTZ7AHIiWEfQDmDSg50srF8vilr5g4ABAAm+9nSOF/T8xr5Zozpc+4AQG13yM2v2AbGYhuY4cOHO4/oPffc43yOzyegAhjt0dOcUACAAMAoul/T89r99Tl3AKC2OwCAkgonrABKXuxojQUAjPbIak4oAEAAYBTdr+l57f76nDsAUNsdAEBJhTMBIFf7ypcvT23atBG7xltvvUWbNm2io7kqCAAUs4tKIM0JBQAIAFQxbZJBNT2fZGoJT/c5dwBgwuFVa+DqGywBZ1kC5uf96tatS+PHjxcbpBtvvJGWLl1KK1euFIsZtUAAwKiNSOZ8XG8MLr0BAAIAXfwSVltNz2v3wefcAYDa7kAFUFLhTBVAAGAwaQGAwXQL6yzNCQUACAAMy8cu19H0vEseQdr6nDsAMMiIy5zj6htUAHOoABYuXJhKlSolMyKxKD/99BPt378fFcCYFq4GFRsEgUDIPWcRAYAAQIGPl3gIfF7FJbUOCO2tpRJt6Ko7ADAHABQdkf8FO9q3hkEFUMM1cjFdbwwuVwYAAgBd/BJWW03Pa/fB59xRAdR2R+7xXX0DAMwCgG+//bba6LVu3VotdqoDAwBTPQKpgxAAYOq013ad64SinY9LfOTuopZsW2gvq6dtNFfdAYAW+wDaip/O7QCA0R591xuDS28AgABAF7+E1VbT89p98Dl3VAC13YEKoKTCCfcB5C1cXA/eSiadDgBgtEdbc0IBAAIAo+h+Tc9r99fn3AGA2u4AAEoqnBAAq1ev7nQ9ft5vxYoVTuf43hgAGO0R1JxQAIAAwCi6X9Pz2v31OXcAoLY7AICSCicEQN4axuZg8CtdurRp+umnn9qcctS0AQBGeyg1JxQAIAAwiu7X9Lx2f33OHQCo7Q4AoKTCCQFw48aNuV5vz549tGXLFvroo49oypQpdMMNN9Bjjz0mmZ8XsQCA0R4mzQkFAAgAjKL7NT2v3V+fcwcAarsDACipcEIAtL3Ya6+9RoMGDaJnn32WWrZsaXvaUdEOABjtYdScUACAAMAoul/T89r99Tl3AKC2OwCAkgqLAeCBAwfooosuokqVKtHEiRMlc4x8LABgtIdIc0IBAAIAo+h+Tc9r99fn3AGA2u4AAEoqLAaAnNS1115L3377LS1evFgyx8jHAgBGe4g0JxQAIAAwiu7X9Lx2f33OHQCo7Q4AoKTCYgD422+/0SWXXEJcCQQA5jxEPt/YkHvOYwoABABK3pClYuHzKqWkexxo766ZxBmuumMjaKGNoPn3fgcOHEgzZsygevXq0bhx4yTG05sYqABGe6hcbwwuvQEAAgBd/BJWW03Pa/fB59xRAdR2ByqAkgonrAA2bNgw1+sdPnyY9u3bRz///DPxf/OBl0DkDCo50MnG8vmmrJk7ABAAmOxnS+N8Tc9r5Jsxps+5AwC13SE3v6ICaFEBtN0HsGDBgtSpUyfq3r176hyQoiujApgi4S0vqzmhAAABgJY2DLWZpue1O+Jz7gBAbXcAACUVTlgBfPvtt/O8XoECBeiEE06g2rVrU8mSJSVz8yYWADDaQ6U5oQAAAYBRdL+m57X763PuAEBtdwAAJRVOCICSFztaYwEAoz2ymhMKABAAGEX3a3peu78+5w4A1HYHAFBSYQCggJoAQAERFUNoTigAQACgonUDh9b0fOCkLE/0OXcAoOUgKzRz9Q2eAbR4h5nlnwAAIABJREFUBlBhnI66kADAaA+p643BpTcAQACgi1/Caqvpee0++Jw7AFDbHagASiqMCqCAmgBAAREVQ2hOKABAAKCidQOH1vR84KQsT/Q5dwCg5SArNHP1DSqAEaoArl27lkaMGGE2kd62bRuVLVuWmjdvTp07d6ZixYolZZennnqKxowZQ/fccw917do1qVg5nQwAFJdUNKDrjcHl4gBAAKCLX8Jqq+l57T74nDsAUNsdqABKKhyJCuCyZcvo1ltvpd27d5u3iRn+lixZQlu3bqWqVavShAkTqESJEoH6PW/ePLr99tvNPoUAwEASmpN8vilr5g4ABAAG/1Tpnanpeb2sf4/sc+6+5++z9q65owIYgQrg/v37qWnTprRx40YaNGgQtW7d2twE9u7dS/fddx/Nnj2b2rVrR3369HG+7/AvlFx11VUGJPkAADpLeOQE1w9X8CvJn6mZOwAQACjv2OQjano++eyOXs8AALXdkXt8V88DACMAgNOmTaOHHnqIGjRoYJZpMx7bt2+nRo0aEUPi/PnznfcZ7NKlC82dO5dq1aplKooAwOAfTtcPV/AryZ+pmTsA8OidzDV9I+/yzBGRu7bCciCSukyzXzmdfAMAjAAAduvWjWbOnEl9+/altm3bZnMkQ9ycOXNo6NCh1KJFC+vPyvjx46lfv37E8Rkkx44dCwC0Vi+9bwwuMgEAAYAufgmrbTpN5GFpansdaG+rlGw7V90BgBEAQH7RY82aNTRp0iQ699xzszli8ODBNGrUKGIQ5CVhm+Obb76ha6+9lmrUqEHjxo0zS8sAQBvl8K3WVSUAIADQ1TNhtHedDMPIyfYaPufOffQ5/3TKHQAYAQCsU6cO7dq1y1T5ypcvn+0eweA2YMAAatOmDT355JMJ7yG//fYbXXfddbRp0yZ65513qEKFCuZ8AGBC6fJskE43BhelAIAAQBe/hNUWn9ewlMZqSeqUznxlV88DACMAgNWrV6dDhw7RggULqFSpUtm8NHnyZOrduzc1a9aMhg0bltBrTzzxhKn68dYv11xzjWmvDYAJk0KDo1aBnXv2U7te7x/p38T+Laj4MYWO2v6iY1AACkABKHB0KJDybWBq1qxpXvJIBID8pvDzzz+fp+qffPIJ3XHHHeZZQX5mMH4AAI8Os0axFwDAKI4KcoICUAAKQIFECqQcAM8//3zasWMHMbyVK1cuW77xJWDeHoaf5cvt4K1eeMuXIkWK0LvvvpvpjWFtAMRG0Ilsltq/d10acMkWS8B5q6Wpvcs4BWmL3IOolvw5PuvOvfc5/3TKHUvAEVgCbtWqFa1atYqmTJlitmvJejz77LM0evRoU9nr0aNHrncXfuOX3/zlJeUqVapkard8+XLzoglvKl2tWjU644wz6M4770z+TvW/CABAMSlVAmne1ACAAEAV0yYZVNPzSaaW8HSfcwcAJhxetQauvgEARgAAe/bsSdOnT6eBAweaN3ezHvFtYIYMGUItW7bM1TwPP/wwvf3221bmql+/Pr3++utWbW0aAQBtVEpdG9cbg0umAEAAoItfwmqr6XntPvicOwBQ2x25x3f1DQAwAgA4Y8YMuv/++6lhw4Y0cuTITKMb3wj64MGDZok4p5dEbOyGJWAblTCRB1EJAAjfBPGN9jmuk6F2Pi7xfc4dAOgy0rJtXX0DAIwAAPJPvvFLG/xTcBk3g+Y/5yXfWbNmUfv27alXr15H3MIvjaxbt878f8WKFalQobzfugQAJv9Bc/1wJX9FuQiauQMAAYByTpWLpOl5uSxzjuRz7gBAbXegAiipcMpfAuHOLFq0iDp16mR+/5c3b+a9+5YuXUpbtmwhfkuYXwQpVqzYkX5v2LCBGjdubP6fAZHb53UAAJO3jM83Zc3cAYAAwOQ/XfIRND0vn23miD7nDgDUdgcAUFLhSAAgd4hfBBk+fDgtXLiQdu/ebaCOfyWkQ4cOVLx48Ux9BgBKWsAuls83Zc3cAYAAQLtPULitND2v3ROfcwcAarsDACipcGQAULJTYcfCSyBhK+52Pc0JBQAIAHRzYzitNT2v3QOfcwcAarsDACipMABQQE0AoICIiiE0JxQAIABQ0bqBQ2t6PnBSlif6nDsA0HKQFZq5+gYvgUTgJRAFH4QeEgAYuuROF3S9MbgEBwACAF38ElZbTc9r98Hn3AGA2u5ABVBSYVQABdQEAAqIqBhCc0IBAAIAFa0bOLSm5wMnZXmiz7kDAC0HWaGZq29QAUQFUMSGAEARGdWCuN4YXBIBAAIAXfwSVltNz2v3wefcAYDa7kAFUFJhVAAF1AQACoioGEJzQgEAAgAVrRs4tKbnAydleaLPuQMALQdZoZmrb1ABRAVQxIYAQBEZ1YK43hhcEgEAAgBd/BJWW03Pa/fB59wBgNruQAVQUmFUAAXUBAAKiKgYQnNCAQACABWtGzi0pucDJ2V5os+5AwAtB1mhmatvUAFEBVDEhgBAERnVgrjeGFwSAQACAF38ElZbTc9r98Hn3AGA2u5ABVBSYVQABdQEAAqIqBhCc0IBAAIAFa0bOLSm5wMnZXmiz7kDAC0HWaGZq29QAUQFUMSGAEARGdWCuN4YXBIBAAIAXfwSVltNz2v3wefcAYDa7kAFUFJhVAAF1AQACoioGEJzQgEAAgAVrRs4tKbnAydleaLPuQMALQdZoZmrb1ABRAVQxIYAQBEZ1YK43hhcEgEAAgBd/BJWW03Pa/fB59wBgNruQAVQUmFUAAXUBAAKiKgYQnNCAQACABWtGzi0pucDJ2V5os+5AwAtB1mhmatvUAFEBVDEhgBAERnVgrjeGFwSAQACAF38ElZbTc9r98Hn3AGA2u5ABVBSYVQABdQEAAqIqBhCc0IBAAIAFa0bOLSm5wMnZXmiz7kDAC0HWaGZq29QAUQFUMSGAEARGdWCuN4YXBIBAAIAXfwSVltNz2v3wefcAYDa7kAFUFJhVAAF1AQACoioGEJzQgEAAgAVrRs4tKbnAydleaLPuQMALQdZoZmrb1ABRAVQxIYAQBEZ1YK43hhcEgEAAgBd/BJWW03Pa/fB59wBgNruQAVQUmFUAAXUBAAKiKgYQnNCAQACABWtGzi0pucDJ2V5os+5AwAtB1mhmatvUAFEBVDEhgBAERnVgrjeGFwSAQACAF38ElZbTc9r98Hn3AGA2u5ABVBSYVQABdQEAAqIqBhCc0IBAAIAFa0bOLSm5wMnZXmiz7kDAC0HWaGZq29QAUQFUMSGAEARGdWCuN4YXBIBAAIAXfwSVltNz2v3wefcAYDa7kAFUFJhVAAF1AQACoioGEJzQgEAAgAVrRs4tKbnAydleaLPuQMALQdZoZmrb1ABRAVQxIYAQBEZ1YK43hhcEgEAAgBd/BJWW03Pa/fB59wBgNruQAVQUmFUAAXUBAAKiKgYQnNCAQACABWtGzi0pucDJ2V5os+5AwAtB1mhmatvUAFEBVDEhgBAERnVgrjeGFwSAQACAF38ElZbTc9r98Hn3AGA2u5ABVBSYVQABdQEAAqIqBhCc0IBAAIAFa0bOLSm5wMnZXmiz7kDAC0HWaGZq29QAUQFUMSGAEARGdWCuN4YXBIBAAIAXfwSVltNz2v3wefcAYDa7kAFUFJhVAAF1AQACoioGEJzQgEAAgAVrRs4tKbnAydleaLPuQMALQdZoZmrb1ABRAVQxIYAQBEZ1YK43hhcEgEAAgBd/BJWW03Pa/fB59wBgNruQAVQUmFUAAXUBAAKiKgYQnNCAQACABWtGzi0pucDJ2V5os+5AwAtB1mhmatvUAFEBVDEhgBAERnVgrjeGFwSAQACAF38ElZbTc9r98Hn3AGA2u5ABVBSYVQABdQEAAqIqBhCc0IBAAIAFa0bOLSm5wMnZXmiz7kDAC0HWaGZq29QAUQFUMSGAEARGdWCuN4YXBIBAAIAXfwSVltNz2v3wefcAYDa7kAFUFJhVAAF1AQACoioGEJzQgEAAgAVrRs4tKbnAydleaLPuQMALQdZoZmrb1ABRAVQxIYAQBEZ1YK43hhcEgEAAgBd/BJWW03Pa/fB59wBgNruQAVQUmFUAAXUBAAKiKgYQnNCAQACABWtGzi0pucDJ2V5os+5AwAtB1mhmatvUAFEBVDEhgBAERnVgrjeGFwSAQACAF38ElZbTc9r98Hn3AGA2u5ABVBSYVQABdQEAAqIqBhCc0IBAAIAFa0bOLSm5wMnZXmiz7kDAC0HWaGZq29QAUQFUMSGAEARGdWCuN4YXBIBAAIAXfwSVltNz2v3wefcAYDa7kAFUFJhVAAF1AQACoioGEJzQgEAAgAVrRs4tKbnAydleaLPuQMALQdZoZmrb1ABRAVQxIYAQBEZ1YK43hhcEgEAAgBd/BJWW03Pa/fB59wBgNruQAVQUmFUAAXUBAAKiKgYQnNCAQACABWtGzi0pucDJ2V5os+5AwAtB1mhmatvUAFEBVDEhgBAERnVgrjeGFwSAQACAF38ElZbTc9r98Hn3AGA2u5ABVBSYVQABdQEAAqIqBhCc0IBAAIAFa0bOLSm5wMnZXmiz7kDAC0HWaGZq29QAUQFUMSGAEARGdWCuN4YXBIBAAIAXfwSVltNz2v3wefcAYDa7kAFUFJhVAAF1AQACoioGEJzQgEAAgAVrRs4tKbnAydleaLPuQMALQdZoZmrb1ABRAVQxIYAQBEZ1YK43hhcEgEAAgBd/BJWW03Pa/fB59wBgNruQAVQUmFUAAXUBAAKiKgYQnNCAQACABWtGzi0pucDJ2V5os+5AwAtB1mhmatvUAFEBVDEhgBAERnVgrjeGFwSAQACAF38ElZbTc9r98Hn3AGA2u5ABVBS4chUANeuXUsjRoygxYsX07Zt26hs2bLUvHlz6ty5MxUrVsypz5988gmNGzeOvvzyS9q5cycdd9xxVLduXerUqRPVqlXLKZZNYwCgjUqpa6M5oQAAAYCpc7bcZBilPmh+XsPop8/5p1PuqABGpAK4bNkyuvXWW2n37t1Uu3ZtA39LliyhrVu3UtWqVWnChAlUokQJq8/ukCFDaOTIkZQvXz6qUaOGibVmzRrzT8GCBWnAgAF0zTXXWMWybQQAtFUqNe00b2oAQABgalwN3aOoOyqAqRsV1/s8ADACALh//35q2rQpbdy4kQYNGkStW7c2Dtq7dy/dd999NHv2bGrXrh316dMnobP+85//0E033UTHHnssjR49murVq3fknEmTJtHjjz9ORYoUoY8++siAodQBAJRSUieO643BJQsAIEDExS9htdX0vHYffM4dAKjtDrmqNwAwAgA4bdo0euihh6hBgwY0ZsyYTKO7fft2atSoETEkzp8/n0qWLJmnux5++GF6++236d5776W77747W1teTv7000/pb3/7m6k4Sh0AQCkldeJoTigAQACgjmuTi6rp+eQyS3y2z7kDABOPr1YLV98AACMAgN26daOZM2dS3759qW3bttm80aVLF5ozZw4NHTqUWrRokad3uErIzxBypS9j9S9+ElcYX331VfMs4AMPPCDmQwCgmJQqgVxvDC5JAAABgC5+Cautpue1++Bz7gBAbXegAiipcMpfAuEXPfj5PF6iPffcc7P1bfDgwTRq1ChiEOQl4WQOXkrmZwt79+5NN998czKhMp0LABSTUiWQ5oQCAAQAqpg2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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "X = np.zeros(shape=(100, ), dtype=int)\n",
    "X[5] = 1\n",
    "\n",
    "fix, axs = plt.subplots()\n",
    "axs.stem(np.arange(100), X)\n",
    "axs.set_xlim([-0.5, 20.5])\n",
    "axs.xaxis.set_major_locator(ticker.MultipleLocator(2))\n",
    "axs.set_xlabel('n')\n",
    "axs.set_ylabel('u[n]')\n",
    "axs.legend((\"Unit impulse\", \"Baseline\"))\n",
    "\n",
    "plt.savefig('input_impulse.pdf', bbox_inches='tight')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this notebook, we record the hidden_layer_state in each time step"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def my_custom_plot(estimator, params, X, axs):\n",
    "    estimator.set_params(**params)\n",
    "    hidden_layer_state = estimator.fit_transform(X)\n",
    "    if axs.images:\n",
    "        axs.images[-1].colorbar.remove()\n",
    "    axs.clear()\n",
    "    im=axs.imshow(hidden_layer_state.T, cmap=\"RdBu\", vmin=-1., vmax=1.)\n",
    "    axs.set_xlabel(\"Time step\")\n",
    "    axs.set_ylabel(\"Neuron index\")\n",
    "    divider = make_axes_locatable(axs)\n",
    "    cax = divider.append_axes(\"right\", size=\"5%\", pad=0.05)\n",
    "    plt.colorbar(mappable=im, cax=cax)\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "At first, show the impact of different input scaling factors.\n",
    "\n",
    "Therefore, we neutralize the other hyper-parameters, i.e., no recurrent connections ($\\rho = 0$), no bias ($\\alpha_{\\mathrm{b}} = 0$) and no leakage ($\\lambda = 1$). \n",
    "\n",
    "Visualizing this, we can see exactly what we might expect. We have chosen an input scaling factor of 0.1. Thus, the reservoir state is non-zero for exactly one sample. We can see that all reservoir states are zero all the times except for $n=5$, when the impulse is fed into the ESN. \n",
    "\n",
    "The absolute values of the reservoir states lie between 0 and 0.1.\n",
    "\n",
    "If we increase the input scaling factor, each reservoir state still has only one non-zero value at $n=5$ as before, just with higher activations up to 0.8. The $\\tanh$ non-linearity is damping the reservoir states so that they cannot reach 1.  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "InputToNode()"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "InputToNode()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "/* global mpl */\n",
       "window.mpl = {};\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(\n",
       "            '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",
       "\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 = document.createElement('div');\n",
       "    this.root.setAttribute('style', 'display: inline-block');\n",
       "    this._root_extra_style(this.root);\n",
       "\n",
       "    parent_element.appendChild(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 (fig.ratio !== 1) {\n",
       "            fig.send_message('set_device_pixel_ratio', {\n",
       "                device_pixel_ratio: fig.ratio,\n",
       "            });\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 = document.createElement('div');\n",
       "    titlebar.classList =\n",
       "        'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n",
       "    var titletext = document.createElement('div');\n",
       "    titletext.classList = 'ui-dialog-title';\n",
       "    titletext.setAttribute(\n",
       "        'style',\n",
       "        'width: 100%; text-align: center; padding: 3px;'\n",
       "    );\n",
       "    titlebar.appendChild(titletext);\n",
       "    this.root.appendChild(titlebar);\n",
       "    this.header = titletext;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = (this.canvas_div = document.createElement('div'));\n",
       "    canvas_div.setAttribute(\n",
       "        'style',\n",
       "        'border: 1px solid #ddd;' +\n",
       "            'box-sizing: content-box;' +\n",
       "            'clear: both;' +\n",
       "            'min-height: 1px;' +\n",
       "            'min-width: 1px;' +\n",
       "            'outline: 0;' +\n",
       "            'overflow: hidden;' +\n",
       "            'position: relative;' +\n",
       "            'resize: both;'\n",
       "    );\n",
       "\n",
       "    function on_keyboard_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.key_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    canvas_div.addEventListener(\n",
       "        'keydown',\n",
       "        on_keyboard_event_closure('key_press')\n",
       "    );\n",
       "    canvas_div.addEventListener(\n",
       "        'keyup',\n",
       "        on_keyboard_event_closure('key_release')\n",
       "    );\n",
       "\n",
       "    this._canvas_extra_style(canvas_div);\n",
       "    this.root.appendChild(canvas_div);\n",
       "\n",
       "    var canvas = (this.canvas = document.createElement('canvas'));\n",
       "    canvas.classList.add('mpl-canvas');\n",
       "    canvas.setAttribute('style', 'box-sizing: content-box;');\n",
       "\n",
       "    this.context = canvas.getContext('2d');\n",
       "\n",
       "    var backingStore =\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        this.context.webkitBackingStorePixelRatio ||\n",
       "        this.context.mozBackingStorePixelRatio ||\n",
       "        this.context.msBackingStorePixelRatio ||\n",
       "        this.context.oBackingStorePixelRatio ||\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        1;\n",
       "\n",
       "    this.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n",
       "        'canvas'\n",
       "    ));\n",
       "    rubberband_canvas.setAttribute(\n",
       "        'style',\n",
       "        'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n",
       "    );\n",
       "\n",
       "    // Apply a ponyfill if ResizeObserver is not implemented by browser.\n",
       "    if (this.ResizeObserver === undefined) {\n",
       "        if (window.ResizeObserver !== undefined) {\n",
       "            this.ResizeObserver = window.ResizeObserver;\n",
       "        } else {\n",
       "            var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n",
       "            this.ResizeObserver = obs.ResizeObserver;\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n",
       "        var nentries = entries.length;\n",
       "        for (var i = 0; i < nentries; i++) {\n",
       "            var entry = entries[i];\n",
       "            var width, height;\n",
       "            if (entry.contentBoxSize) {\n",
       "                if (entry.contentBoxSize instanceof Array) {\n",
       "                    // Chrome 84 implements new version of spec.\n",
       "                    width = entry.contentBoxSize[0].inlineSize;\n",
       "                    height = entry.contentBoxSize[0].blockSize;\n",
       "                } else {\n",
       "                    // Firefox implements old version of spec.\n",
       "                    width = entry.contentBoxSize.inlineSize;\n",
       "                    height = entry.contentBoxSize.blockSize;\n",
       "                }\n",
       "            } else {\n",
       "                // Chrome <84 implements even older version of spec.\n",
       "                width = entry.contentRect.width;\n",
       "                height = entry.contentRect.height;\n",
       "            }\n",
       "\n",
       "            // Keep the size of the canvas and rubber band canvas in sync with\n",
       "            // the canvas container.\n",
       "            if (entry.devicePixelContentBoxSize) {\n",
       "                // Chrome 84 implements new version of spec.\n",
       "                canvas.setAttribute(\n",
       "                    'width',\n",
       "                    entry.devicePixelContentBoxSize[0].inlineSize\n",
       "                );\n",
       "                canvas.setAttribute(\n",
       "                    'height',\n",
       "                    entry.devicePixelContentBoxSize[0].blockSize\n",
       "                );\n",
       "            } else {\n",
       "                canvas.setAttribute('width', width * fig.ratio);\n",
       "                canvas.setAttribute('height', height * fig.ratio);\n",
       "            }\n",
       "            canvas.setAttribute(\n",
       "                'style',\n",
       "                'width: ' + width + 'px; height: ' + height + 'px;'\n",
       "            );\n",
       "\n",
       "            rubberband_canvas.setAttribute('width', width);\n",
       "            rubberband_canvas.setAttribute('height', height);\n",
       "\n",
       "            // And update the size in Python. We ignore the initial 0/0 size\n",
       "            // that occurs as the element is placed into the DOM, which should\n",
       "            // otherwise not happen due to the minimum size styling.\n",
       "            if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n",
       "                fig.request_resize(width, height);\n",
       "            }\n",
       "        }\n",
       "    });\n",
       "    this.resizeObserverInstance.observe(canvas_div);\n",
       "\n",
       "    function on_mouse_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.mouse_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousedown',\n",
       "        on_mouse_event_closure('button_press')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseup',\n",
       "        on_mouse_event_closure('button_release')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'dblclick',\n",
       "        on_mouse_event_closure('dblclick')\n",
       "    );\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousemove',\n",
       "        on_mouse_event_closure('motion_notify')\n",
       "    );\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseenter',\n",
       "        on_mouse_event_closure('figure_enter')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseleave',\n",
       "        on_mouse_event_closure('figure_leave')\n",
       "    );\n",
       "\n",
       "    canvas_div.addEventListener('wheel', function (event) {\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        on_mouse_event_closure('scroll')(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.appendChild(canvas);\n",
       "    canvas_div.appendChild(rubberband_canvas);\n",
       "\n",
       "    this.rubberband_context = rubberband_canvas.getContext('2d');\n",
       "    this.rubberband_context.strokeStyle = '#000000';\n",
       "\n",
       "    this._resize_canvas = function (width, height, forward) {\n",
       "        if (forward) {\n",
       "            canvas_div.style.width = width + 'px';\n",
       "            canvas_div.style.height = height + 'px';\n",
       "        }\n",
       "    };\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n",
       "        event.preventDefault();\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 toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'mpl-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'mpl-button-group';\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",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'mpl-button-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        var button = (fig.buttons[name] = document.createElement('button'));\n",
       "        button.classList = 'mpl-widget';\n",
       "        button.setAttribute('role', 'button');\n",
       "        button.setAttribute('aria-disabled', 'false');\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "\n",
       "        var icon_img = document.createElement('img');\n",
       "        icon_img.src = '_images/' + image + '.png';\n",
       "        icon_img.srcset = '_images/' + image + '_large.png 2x';\n",
       "        icon_img.alt = tooltip;\n",
       "        button.appendChild(icon_img);\n",
       "\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    var fmt_picker = document.createElement('select');\n",
       "    fmt_picker.classList = 'mpl-widget';\n",
       "    toolbar.appendChild(fmt_picker);\n",
       "    this.format_dropdown = fmt_picker;\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = document.createElement('option');\n",
       "        option.selected = fmt === mpl.default_extension;\n",
       "        option.innerHTML = fmt;\n",
       "        fmt_picker.appendChild(option);\n",
       "    }\n",
       "\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\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",
       "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",
       "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], msg['forward']);\n",
       "        fig.send_message('refresh', {});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n",
       "    var x0 = msg['x0'] / fig.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n",
       "    var x1 = msg['x1'] / fig.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / fig.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,\n",
       "        0,\n",
       "        fig.canvas.width / fig.ratio,\n",
       "        fig.canvas.height / fig.ratio\n",
       "    );\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",
       "    fig.rubberband_canvas.style.cursor = msg['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.handle_history_buttons = function (fig, msg) {\n",
       "    for (var key in msg) {\n",
       "        if (!(key in fig.buttons)) {\n",
       "            continue;\n",
       "        }\n",
       "        fig.buttons[key].disabled = !msg[key];\n",
       "        fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n",
       "    if (msg['mode'] === 'PAN') {\n",
       "        fig.buttons['Pan'].classList.add('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    } else if (msg['mode'] === 'ZOOM') {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.add('active');\n",
       "    } else {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    }\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",
       "            var img = evt.data;\n",
       "            if (img.type !== 'image/png') {\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",
       "                img.type = 'image/png';\n",
       "            }\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",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                img\n",
       "            );\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        } else if (\n",
       "            typeof evt.data === 'string' &&\n",
       "            evt.data.slice(0, 21) === 'data:image/png;base64'\n",
       "        ) {\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(\n",
       "                \"No handler for the '\" + msg_type + \"' message type: \",\n",
       "                msg\n",
       "            );\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(\n",
       "                    \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n",
       "                    e,\n",
       "                    e.stack,\n",
       "                    msg\n",
       "                );\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "};\n",
       "\n",
       "// from https://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",
       "    }\n",
       "    if (e.target) {\n",
       "        targ = e.target;\n",
       "    } else if (e.srcElement) {\n",
       "        targ = e.srcElement;\n",
       "    }\n",
       "    if (targ.nodeType === 3) {\n",
       "        // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "    }\n",
       "\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    var boundingRect = targ.getBoundingClientRect();\n",
       "    var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n",
       "    var y = e.pageY - (boundingRect.top + document.body.scrollTop);\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",
       " * https://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",
       "        }\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",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * this.ratio;\n",
       "    var y = canvas_pos.y * this.ratio;\n",
       "\n",
       "    this.send_message(name, {\n",
       "        x: x,\n",
       "        y: y,\n",
       "        button: event.button,\n",
       "        step: event.step,\n",
       "        guiEvent: simpleKeys(event),\n",
       "    });\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",
       "    // Prevent repeat events\n",
       "    if (name === 'key_press') {\n",
       "        if (event.key === this._key) {\n",
       "            return;\n",
       "        } else {\n",
       "            this._key = event.key;\n",
       "        }\n",
       "    }\n",
       "    if (name === 'key_release') {\n",
       "        this._key = null;\n",
       "    }\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.key !== 'Control') {\n",
       "        value += 'ctrl+';\n",
       "    }\n",
       "    else if (event.altKey && event.key !== 'Alt') {\n",
       "        value += 'alt+';\n",
       "    }\n",
       "    else if (event.shiftKey && event.key !== 'Shift') {\n",
       "        value += 'shift+';\n",
       "    }\n",
       "\n",
       "    value += 'k' + event.key;\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, { key: value, 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",
       "\n",
       "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n",
       "// prettier-ignore\n",
       "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";/* global mpl */\n",
       "\n",
       "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.binaryType = comm.kernel.ws.binaryType;\n",
       "    ws.readyState = comm.kernel.ws.readyState;\n",
       "    function updateReadyState(_event) {\n",
       "        if (comm.kernel.ws) {\n",
       "            ws.readyState = comm.kernel.ws.readyState;\n",
       "        } else {\n",
       "            ws.readyState = 3; // Closed state.\n",
       "        }\n",
       "    }\n",
       "    comm.kernel.ws.addEventListener('open', updateReadyState);\n",
       "    comm.kernel.ws.addEventListener('close', updateReadyState);\n",
       "    comm.kernel.ws.addEventListener('error', updateReadyState);\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",
       "        var data = msg['content']['data'];\n",
       "        if (data['blob'] !== undefined) {\n",
       "            data = {\n",
       "                data: new Blob(msg['buffers'], { type: data['blob'] }),\n",
       "            };\n",
       "        }\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(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 = document.getElementById(id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm);\n",
       "\n",
       "    function ondownload(figure, _format) {\n",
       "        window.open(figure.canvas.toDataURL());\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy, ondownload, element);\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;\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",
       "    fig.cell_info[0].output_area.element.on(\n",
       "        'cleared',\n",
       "        { fig: fig },\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function (fig, msg) {\n",
       "    var width = fig.canvas.width / fig.ratio;\n",
       "    fig.cell_info[0].output_area.element.off(\n",
       "        'cleared',\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "    fig.resizeObserverInstance.unobserve(fig.canvas_div);\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.innerHTML =\n",
       "        '<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 / this.ratio;\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] =\n",
       "        '<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 () {\n",
       "        fig.push_to_output();\n",
       "    }, 1000);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'btn-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'btn-group';\n",
       "    var button;\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",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'btn-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        button = fig.buttons[name] = document.createElement('button');\n",
       "        button.classList = 'btn btn-default';\n",
       "        button.href = '#';\n",
       "        button.title = name;\n",
       "        button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message pull-right';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = document.createElement('div');\n",
       "    buttongrp.classList = 'btn-group inline pull-right';\n",
       "    button = document.createElement('button');\n",
       "    button.classList = 'btn btn-mini btn-primary';\n",
       "    button.href = '#';\n",
       "    button.title = 'Stop Interaction';\n",
       "    button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n",
       "    button.addEventListener('click', function (_evt) {\n",
       "        fig.handle_close(fig, {});\n",
       "    });\n",
       "    button.addEventListener(\n",
       "        'mouseover',\n",
       "        on_mouseover_closure('Stop Interaction')\n",
       "    );\n",
       "    buttongrp.appendChild(button);\n",
       "    var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n",
       "    titlebar.insertBefore(buttongrp, titlebar.firstChild);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._remove_fig_handler = function (event) {\n",
       "    var fig = event.data.fig;\n",
       "    if (event.target !== this) {\n",
       "        // Ignore bubbled events from children.\n",
       "        return;\n",
       "    }\n",
       "    fig.close_ws(fig, {});\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (el) {\n",
       "    el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (el) {\n",
       "    // this is important to make the div 'focusable\n",
       "    el.setAttribute('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",
       "    } else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function (event, _name) {\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which === 13) {\n",
       "        this.canvas_div.blur();\n",
       "        // select the cell after this one\n",
       "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
       "        IPython.notebook.select(index + 1);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "};\n",
       "\n",
       "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(\n",
       "        'matplotlib',\n",
       "        mpl.mpl_figure_comm\n",
       "    );\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAV4AAADhCAYAAACAwN0OAAAgAElEQVR4Xu2dB5wURfbHfzszm3eBJS4ZEZCMoIgKCIoeCCbk5DCgcqLiCYcSDH9BQCWcEiQdAkZUDjGhoIeBYDhAkCCSJCOZXdgFNofZf1dz4w27M92v4/TMvvr89e/tvHr16vuqf1NTXV0dVSIVcGECTIAJMAHbCESx8NrGmhtiAkyACcgEWHh5IDABJsAEbCbAwmszcG6OCTABJsDCy2OACTABJmAzARZem4Fzc0yACTABFl4eA0yACTABmwmw8NoMnJtjAkyACbDw8hhgAkyACdhMgIXXZuDcHBNgAkyAhZfHABNgAkzAZgIsvDYD5+aYABNgAiy8PAaYABNgAjYTYOG1GTg3xwSYABNg4eUxwASYABOwmQALr83AuTkmwASYAAsvjwEmwASYgM0EWHhtBs7NMQEmwARYeHkMMAEmwARsJsDCazNwbo4JMAEmwMLLY4AJMAEmYDMBFl6bgXNzTIAJMAEWXh4DTIAJMAGbCbDw2gycm2MCTIAJsPDyGGACTIAJ2EyAhddm4NwcE2ACTICFl8cAE2ACTMBmAiy8NgPn5pgAE2ACLLw8BpgAE2ACNhNg4bUZODfHBJgAE2Dh5THABJgAE7CZAAuvzcC5OSbABJgACy+PASbABJiAzQRYeG0Gzs0xASbABFh4eQwwASbABGwmwMJrM3BujgkwASbAwstjgAkwASZgMwEWXpuBc3NMgAkwARZeHgNMgAkwAZsJsPDaDJybYwJMgAmw8PIYYAJMgAnYTICF12bg3BwTYAJMgIWXxwATYAJMwAQCBw8exB133IG77roLzz33nKJHFl4TgLMLJsAEyjeB9PR03H///di3b5/8/20R3gMHDmD27NnYuHEjTp8+jdTUVNx888145JFHkJiYWL4zwr1nAkwgogns3LkTQ4cOxaFDh+R+2iK8W7duxQMPPICcnBy0adNGFt1NmzYhLS0NTZo0wcKFC5GcnBzR4LlzTIAJlD8CZ8+exbx587BgwQIUFBSgTp06OHLkiPXCW1hYiO7du+Po0aOYNGkSevfuLdPPy8vDk08+iZUrV+Luu+/G2LFjy19WuMdMgAlENIGZM2di1qxZ8mRzzJgx2L59u/y/LZ/xLlmyBE8//TQ6duyIN9988yLIGRkZuOGGGyDEec2aNahQoUJEJ4E7xwSYQPki8OGHH+L8+fO45557EBcXB58QWy68Yl1j+fLlGDduHPr161eG+qBBg7Bq1SpMmzYNPXv2LF9Z4d4yASZQrgjYJrziBtr+/fuxaNEitG3btgzkKVOmyGsgQoDF0gMXJsAEmECoCJw5cwbbtm3Dq6++Sg6hb9++ASeVgRzYJrzt2rVDdna2PKutVatWmVjEovP48eNx5513YuLEieTOsiETYAJMwAoCQnj79OlDdj148GAMGTKEZG+b8DZr1gxerxdr165F5cqVywS3ePFijB49Gj169MD06dNJwbMRE2ACTIBCICevALsOHKeYouklNZEQFyPvsx05ciSpjjBy5Iy3ZcuW8s0zNeEVOx9mzJhB7iwbMgEmwATUCGzedRgdB7yiZiZ//p+3RqJt07okW71Gts14O3TogMzMTKxevRo1a9YMutQgtpmJ7WZmltzcXJK7ZXsyMHb+enhi3Jg08Cp0bWDe7oooKYISUhQ0IyP+jNSlRXexlVp7gT5Xq6MWR3x8vGxCzb2aPyOfG+1L6baN+DNSVw8DtfbMzH1sbCxcLlfAMDf/dgTXPUxbr/1+/hNoe1kdPd0l17FNeG+99Vbs3r0bYltF69atywQ4efJkzJ8/H48++iiGDRtG7gDFsPTFF2wwfLE3A6Pmb5CE14UpD1+F6+qZJ7yUOH02Zg5GLe3626pdMEqx6m3TzHrBhJfaLzNj0eKLc6+F1sW2SsK7ZfdRdBk0m+T8u9cex+VNapNs9RrZJrwjRozA0qVLMWHChIAL1r7tZFOnTkWvXr309idgPeqs59e0XMz+4QBiPS4M6dwQjVJiTI3DKmdOFxOj/dbTPyfNeI32X6m+HjZWxmO2by39UxTePcdw/eNzSeGtmv0oLm9cdgMAqTLRyDbhXbZsGYYPH46uXbti7tyLAfgeoCguLpaXIgLdfCP2x5DwHjhbgM93nkKMJLy3XFYNdZOjL/KnZRBQ4rVyduPzrSVmJVstfuyYDavFo1V41fypfU7Jt9ovCrPaKK+5Vxbe4+g29OIHt4LlbMX0v0rCW3Y5VGuOlextE17xaLB4MEI8Muz/EIX4u1haWLFiBfr3749Ro0aZ2T/ZF3XGeyyrCBuPnUO024W2NZNQI8FjeizCof8FZoX4armAtdhSYVjhk9q2z06r8Gr1r9eec6+XnHo9JeH9Ze8J3Dj8XXUnksW3U/qjTaNUkq1eI9uEVwS4YcMGDBw4UD6foUWLFvJBEZs3b8apU6cgdj2IvbxWnFBGFd6z+V6k5RTJLKsnelBBWustb8Vu0TSzPX9fThVeJ48nM3NB6aeZ7QlfMQo3137ZdxLdn1pECQtfvdwPbS6tQbK1w8iU83jFDTZxOMT69evlU8qE+Iqn2gYMGICkpCRL+kEV3kIvkF8s/UsqsdKsN7r86a4l/EPhlIU3FNRD26bSjHfr/jT0ePYjUoDLJ/4ZrRtWI9naYWSK8NoRaOk2KMIrvjGjT+5C3tovAJcbsdfehqKqDU3dAhaKvpfXNll4y1/mFYX3QDp6jvqMBOXLl25H60uqkmztMIoI4Q22pioAurd9g20TZyM63oOmzwxDUaNrZa6l998aXZel1le6SUL1IeKn2gZqzwkx+AY3tR/CPpDwUuub1edAF6XdMRhpzywORmLQknsl4f314Gn0GvslSSe/GNsTrRpUIdnaYRQRwltaiPwHVyDh9Ylu6cFj5vpUsOTZ0YYVA0fErfSFZUW/Svuk7OOlxsG5p4+SUOZeUXgPncGtL35D6sjS0TehVf2yxxqQKltgFDHCG2wmoiS8FvB0pEuqGJUOXm89qyDwUoN2snpzqLee9giVaygJ77ZDGbh94kpSk589ewNa1k8h2dphFPHC6/plOX4dPxuuaDdajRmOoiadNa/xOmUQUoTRqbGaMZhDIbxO5Un9qW8G91D6UBTe3zPQ+x+rSeF9+nRXtKzHwkuCpWREvbmG/yzC94NnyWu8HWePhLdtL83CazhYdmAKAS3C61TBNAVEOXKiJLzbD2eiz+TvSDQ+HtEFLepWItnaYRTxM96SlW9j2YCZiJOeXPvTwmdQ0qEPC68dI8uCNrQIrwXNs8sQEFAT3r7TfiBFtfjJziy8JFIqRtQZr/vMIXh/Wy9tJ3PB1fRqFFeszcJrRgJC4IOFNwTQQ9ykkvDuOHIWf5nxIynCD/7eCc3rVCTZ2mEU0TNeAXBHeh5m/3jhkJy/dbzE0kNynPrz1qlxaR3gThZepzJ2alzU3CsK79GzuGf2f0iuFj7eEc1rs/CSYBld4xX1fzx8Hi98th1u6am1SXe2QpsaF850taKE+yC3ggnVJ4UdCy+VZnjZKeVeSXh3SsJ732trSZ19b9A1aMbCS2KlaERZahAODp8vxHcHM+COikKXBimolUQ7JIciBMZ7od2D3rjU6ql9rj1S82voEV49/dJTx/zelvWoNy61emqf29G3YG0oCq90+NX989eRwlvw8NVoVis0Z3EHCjDilxp8h+RIuosa0iE5SXxYA2mgOtFIj/A6sR8cE52AkvDuOn4OD74h3b8hlLcfugpNa7LwElApm1BnvOm5xTiYmQeXpLyXVIpFSpzbcNtOdmDG7MUMHxRGWtth4VWmqpVnwJmY9EczX2cVLGJqrIrCe+IcHnr7Z8pQwxsPXommqSy8JFhKRlThFUsNa37PhNsVhU71KiFVmvVyCU8CLLzhmTcjUSsJ728nzmPguzThfb3/lbgsNdlIKKbWjfilhhPZ0kHox8/La7xX1ExGtYTInvGaOjoc5oyF12EJsSEcJeHdffI8Hv3XZlIUc+9uiyY1WHhJsIzOeMXPGc/pgyj69XvpmDI33C2vQ3FKXVt+ShnuYIQ7oP7U9MfAwhsZg0JL7hWF91QW/rZ4CwnKP/tejibVrTkbnBRAKaOInvGKBHuXv4Z3BryGOGmp4e7FTwMd+4Wt8GoZsP551ltPz4ASdaxqrzwLr16meus5JfdKwrsnLQtDP95KCnV6n9ZoXI2FlwTLjBlv9PFtyPxysXRIjvTan+59UVijadgKr1Foei9CtXp6PvfVUaurd8arxa9RruFQXy8PtXp6PteSeyXh3ZeeheFLtpHwT7mjJS6tysJLgmVUeEX9X07m4pUVexAf48ZT3RqjcZi83t0woAh0UJ5nvBGYTlKXlIR3f3o2nl22neRn4i0t0LBqIsnWDqOwXWrIy82VZ66lv3HF/xbFtyXmg+1pePaVZfDExGPaU93Rq9H/joYL9G2t9g3uS0owO2p9O5Jr1nKDkT4ZqVuakU94qblXYsy5p41AI/kzUtcXnZLwHjidjef/vZPUkRduboZLqrDwkmCZMeNdvi8To6W9fh7pPN5XBlyJTnWdc2fTMIQQOTDjgtITOs949VAzt47duVcS3oNncvDi17+ROjj6T5ehQeUEkq0dRmE746Xu4117JAsvLN0hzXjdmHBbc7SqZt1ZDXYkrDy3wcJb/rKvJLy/Z+RgorSMSCnPSsuM9VJYeCmsFG2owvv7uUKsPnhGeq27S9NZDXoCtHs2oCfGcK7jZOHl3FszspSE93BGLiav3ktqeETXRqib4pxJV0TPeMXF4M44jJL90l4/SXijLm2H4go1y+2uBtIIVTAyS1z0ro87WXiNsnV6/VDlXkl4j2TmYsYP+0no/t65IepUYuElwTK6xisGi2f/Ohx55y2442JQ64GHUVirNQuvYfqhccDCGxruoWxVSXiPns3FnDUHSeE9dm0D1K7IwkuCZYrw7l2Dg/Pnwy3t4633yGMorNeOhdcw/dA4YOENDfdQtqokvMfO5eH1nw6RwhvYoT5qVYgj2dphFPlLDbtWY/+c+fIDFA0HD0Zhg/a2C69ZP9PsGBB62jDSPy11w1F4tfRPD/tQ1zHSP0pdJeE9cT4Pb/98mITgwSvrIjWZhZcES8uMN9i+TLckvPtmzZWXGkIlvIY7yw5kAsGEl3IBM8LwJKAkvCfP5+P9LUdIHbv38jqokRxLsrXDiGe8dlAOwzbMEjOz/CgJbxjidXTIZuXMDD9KwnsqKx+Lfz1GYtm3VS1UT2LhJcFSMvI9vSRslO6SixlvoKUGyqDwtwn235SOiLqiBDpgWi0Os2LwxanWXqD+6I0h2K8QXxtaD9wu/eSaUu79+1E6DgoDvX0uzY9z/z8iPhbBroVAY09JeNOy8/HJthOUSxB3tkxFtUQWXhIsJSPKPl6R6OjfN+HUxwvhivGgap/7UZja3NY1XspFbhhGOXEQbmu8nHvjA1NJeNOzC/D5Tprw3tYsFVUTY4wHZJKHiF9q8KTtRcGGr6R9vG7EtO+BoioNbBXeQDMgrTM9o7m2WwCsai/chJdzb3TkAkrCezqnAF/uOkVqpGfT6qiSwMJLgmXGjNd95hC8v0kvxJMeoHA1vRrFFWuHVHgNd9wmB1TxpNqphU3xE+7Cq8bAKZ9TckFd5qH0Sak9JeE9Iwnv13vSKE3gT42roTILL4mVopH/UkOwdTTx96iiPEQV5Mq+vLGJKHHHyGvColg986QOYP+O6qljRn2j7ZoRg9qoCCS8WnOp1V4tpmCf6+Gpp44Z3I22a0YMwTgqCW9GbgFW7k0npeiGRlWREs8zXhIsJSP/m2s+u0ADqFhS10LvBYmNlt5C4fZf4Q/SQLCbQqWFmmqn1lmqHyN2kRBDoJtrSrlX63Ogz40w1iNgZrcXaTHExMZKP1ZdAVOZmVuI7w+cJqX5ukuqoFJ8NMnWDqOIWeP1DTj/gfeHxnqLLrB0eVRnudSBG6g9s0XAigFA7Z8VbSv5pAiQ2j5eo32j1ufcmzs6lHKvNOM9mye9QVw6AItSrm1QGRXjWHgprBRtAu1qKJ1AeamhIAeu3AzpP1zwxlVESUyCqvhSZ0JG7AwDUHAQiIPVyyqlw6GKmBYOSmu8VrSn9YvUyhionCIt90rCe04S3vWHM0lorqpbCRVYeEmsNAtvoIvflXsWrixpAV4S3uKkqiiJq/CH8DrhQjFbvJ3aJ+MZD/7kmh7fTuVkJC4jdfUwtKOOkvCezy/CpiM04W1XpxKSYz12hExqI6yXGtQGmvhcHAvp3btR0l03ohpfqetYSLV27JjtkbIpZvjSP3bPbqmxGbXzn/FS+0m1Cxab1vpa7Y0y8a8fyrbN7Ie/LyXhzZKEd+vxs6SmW9esiCQWXhIrU2a8nlO7kb/uS0R5ohFz1c0oqtowYoXJOFVne+DtZM7OjxXRKQlvdkERdpw4T2q2eWoyEqWHqJxSwnrGqwZRzABc2afhPnv0wlKDtIfXm5DCwqsGzqGfs/A6NDEWhqUkvDmS8O5OyyK13qRaEhJYeEmsDM94hYPsQi/O5ntlXylxbsR7/tjrYDyIMPEQKT9BWXi1D7hwz72S8OYWFmNvOk14G1VNQrz0wlunlIie8fqENzOvGFFRUZYLb7gPcqcMymBxOFl4OffWjB414RWveKcU8Wp3Fl4KKRUb6iE5ntMHUbRrnXxzzdX82rB9ZDgUF7ZVber162ThNWFIB3Whl5eRmKxqU6tfJeHNk2a8hzJowls/JRFxPOM1MiQu1A305Fppr/Ia7+Yv8MtLc+COcaH1uJEoatLZ0BpvoIGjdTAZ7702D8Hic3rcpXup9OSaNiL6rDn3+rgZqaUmvEcyc0ju61RKYOElkSLMeNWEQ95OVs7eQKHGxAz2Ph9qQkSNhWqnZzuZmf11ui8qRzP6YVfulYQ3v6gYx4jCW0sS3lgPr/Eazj11qSH6xA6cX/GJ/LLL+Ov/jKJqjeS2nbzX1c4LKNCvBL1s9MStpY4ZSw1a2jM8SHU4CGV8RtrWU5dSR0l4CyThPXHuwgFYaiW1QjxiTBbeAwcOYPbs2di4cSNOnz6N1NRU3HzzzXjkkUeQmJioGFLAm2ufffYZPvroI+zatQtC4KpUqYJrrrlGdtiwYcOLHD799NNYsmRJ0EbuvfdePP/882pcNH9OFV55H+/65dI+3hjSebyUwaA52P9WsNK33piM1rOzT2YIr1J/reyLlb6N5lBvfTv6pCa8adILLymlmvSiSzOFd+vWrXjggQeQk5ODNm3ayKK7adMmpKWloUmTJli4cCGSk5ODhnaR8JaUlGDEiBFYtmwZoqOj0bJlS1SuXFkW4KNHj8ovG5wzZ44swr5yyy23YM+ePejVq1fAU4Q6deqEO+64g8JGk41PeEXyRQn2Wh27zuPVMwj11NEEyQHGWtaX1XiUFl6l3NvZdbW4A8Wip46dfTKjLTNyryS8hcXFOJ1FE94qSXGIdpuz1FBYWIju3bvLmjhp0iT07t1bxpWXl4cnn3wSK1euxN13342xY8fShFfMdJ966ilUr14db7zxhqzcohRLHZwxYwZee+01VK1aFd988w0SEhLk2fAVV1whi/OPP/5oRq7IPqgzXve548Cx3+RdDd5aTeFNquboZQYyAA2GkXKRWz3j1YA0bEzDPffKwutFZjZNeCslCuENfLyk1mSKX/jil37Hjh3x5ptvXlQ9IyMDN9xwA4Q4r1mzBhUqVAjo/qIZb//+/bF+/Xr84x//KDNLFbPhW2+9VZ7dinWNG2+8EZs3b0a/fv1w/fXXy6JsZ6EKrzggx33mMKKkb7uilHoR9eRauF9UWseLFuGNdDaR3j/f2FAS3qJiL87l0IS3QkIcPCYJ79ChQ7F8+XKMGzdO1r/SZdCgQVi1ahWmTZuGnj17qgvv448/DrFgPHfuXNStW7dMhSFDhuDrr7/GmDFjcM899+C9997Diy++CPH3wYMHa72ODNlThdesYyGVglW7w2uoo36VnXCx+WIIRSxahNcs5mp+OPdqhIx9riS8xZLwZuXlkxpIiouF2yThFTfQ9u/fj0WLFqFt27Zl2p8yZQrmzZsHIcBi6SFQIT+5JpYbbrrpJnldQ8xuxSz32WefxSeffIInnngCe/fulReXxd09Idq33XYbHnzwQflldVYUqvCiuAAu6dU/JdKTa+IsXsph6FbEGwqfoRBHM/oZLG4nCq8Z/bXCR6TkXlF4vV7kEoU3XghvkDdZaOXfrl07ZGdny7PaWrVqlam+YMECjB8/HnfeeScmTpxoTHjfffddvPTSS0hJSZEbFBeBENfffvtNdiwCaNGiBdLT07F9+3YUFBTg8ssvx1tvvSWvB5tdSgtvsIGWIT0ufCyrQG6+bnIsKsTS1nnMGrhm+NEyyzSjPbNzZZY/tTdQmNWOWQzN8FPec68kvF5JePMlnaGU2JgY+eb/vn37MHLkSEoV2aZv375llhOaNWsG0fbatWvl+1uly+LFizF69Gj06NED06dP1y+8ogGxlUyIqRDfu+66C/n5+RDKX1RUJE+nxee+dyOJabhYfhCz4L/85S944YUXyB1lQybABJgAhYDXW4wCaScBpcTExUn65Ma2bdvQp08fShXZRiyhCi3zL2K3l7h5pia8YueD2JQQqKguNYjZrVhKEFslxLquWN/1lXPnzuHUqVNo1OjCQwn+xddBj8eDn376CUlJSeTOsiETYAJMQI2AV1r+LMylnU4WHZ8El3SD3YwZb4cOHZCZmYnVq1ejZs2aZcL0LTWIbWZiu5lm4RXLC2KNQqzvih0Pzz33nHzKF7V06dIFJ06ckG/CtW/fnlqNZEdd43Vn/A7v7o3S2m4UXJddJb2Bola5205GAhoGRrzGGwZJMjlExaWG4iIUZp8jtRidWEESXnMOQhe7u3bv3o0PP/wQrVu3LtP+5MmTMX/+fDz66KMYNmwYXXjF8oFYHvjggw9koRWVxVKC1iK2WogtZ+IOnxBhMwtVeD171+Dw22/BJR2CXPehQSio3YaF18xEWOir9BopC6+FsB3m2pd7ReEtKkRRlvQiW0LxJKVI99XNecuweMhs6dKlmDBhQsBlC992sqlTp8oPlpFmvGJJQWwrEw9ExEnrImJPr1gkLl1+/vlnWfHFwxbDhw8P6Nw34xVB+h7GIDAimQQTXv+LVfy3eOdayf4t0ozXhahL2+l65xopID8jM26qaG1Tq72RGKl1qXbU2NWE1+z2qHH52zkhBrW4jcRIrUu1U4tVWXgLUHQuXc2F/LmnQlVJeGNItmpG4sleoXldu3aVt976F98DFGKVQCxFBLr5JuwvWuMVxmJmK0RXVBBOA02lRUXxoIVYfhAXww8//FDmueR169bJzzKL3Q7iETotSxRqHRefU2e8eg98ocQQLjZmXQTU/lrVnprwUuMrT3ZW5SIYQ7PbUxLekkJJeDNPkNLpqZSKqGhzhFdMTsWDEWJrrf9DFOLvYnVgxYoVsjaOGjUqaGwXCe+sWbMwc+ZMefuX2BLRuHHjoBXFdorbb79dXusQ+3tffvnlP7aNiafbHn74YRw/fjzodJxES8GIup2sWFLeAvEvqcS4oyD9n+OLXZvyHQ+iVIB2bScLJRfO/cX0lYU3H0VnjpHS5alcSxJe854p2LBhAwYOHChvOhDbaOvUqSMvq4rNBmLXg7jBpnRC2R/Ce/bsWXnqLE7badCgAVq1ahW0Q0JwO3fuLG8Xu//+++WHJsQJZuKUHiGIYhlCbLcQn4kbclYUyoxXtCveuXa+4MI71yrGln3nmtnf0Eb76rR4jPbHzPpaZrwUjhQbM+NX8+W0eNTiteNzZeHNQ3H6YVIY7qp1JeGNI9lSjcSkU0xWxa9/oZtCfMVTbQMGDFDdxfWH8IqDb6iP/Yon1sRTaaKIY9DEkoRYzxA7GMTFIRT/vvvuQ7du3ah90GynJLy+Sa2Y52ZJwpueUyw2NaBKvBuJ0dJa739b81+GsGLQl/bp366emY1SjGbGr7edYFwFbsHaKHeK8FodA3Wgcu4vzrfe3CsKr/REanHaQVJK3NUaIComnmRrh5HqPl47gtDTBmXGK5LtOn8SruO7pf+QTidLbYxi6XQyLcWooBmtryVWrbZOiY0aB0V4tTJQsqfGFcyH0fpm9qW0L6fEphaHmvB6T+4lYXLVaMTCSyKlYkQVXvzwPlYNmoXoeA+um/sUvFfcWu62k6kNbjPy4e/DqvbsFl6zuYTCn1W5sOvLRlF483PgFZMqQnHVbIKoWPOPLiA0HdAk4me8URuWYN2IGbLwtp88EsUtbwpL4bX7AtI7oKysV16FtzznXll4s1FydCdpyEXVbiYJr/LreEiOTDKKGOENtmYalZ8FV/ZpacHJBW9iFXjFCWVSKc+D2aSxE9SNVWzN2tVgVXxWcw0H/2azVRTevCyUHNlGwhJVpyWi4pxzbEFEC6/IyNl8L07lFMlCWz3RgwrSa94pP5OMDKBgXwKi3dI39Hx/U7vZ5vtczS5Q3wLVVeufUjv+n6nZle5zsC89tXhEPb3CS/Gt1ifS1R3kC1345txfYKB1/CoKb+55eA9IxwEQiuuSKxAVH/wdaAQXppqErfDmSdvW1B6OEEmOKspDVN75CwM/Lhlez8VbSpQEjSLQPhuli5ty4ZuaVZOcmRW3WWx8wkvJvZa8aOmnVuHQ4tuktJnixqy4jeZeUXhzzqF4zzpSf92Nr0ZUQuDX8JAcmGwUtsJLvbnm2b8OR965cFZDnQeloy0tPKvBrMFqco4jZlnFyWu8nHuzR+0Ff4rCm30Wxbto73p0N+2EqMSK1gSpw2vEC6972zfY8fI/4ZFurl028kkUNbpWdaasg6NilVBelNS2qXZmsdHTnpOFV8uvI7MYqvmhMqbaqbVH/VxLe8rCm4mibatJzXpadpWEtxLJ1g6jiBRe/+WDqLUfYs3w2fDEedBh2gh42/QwRepC5bwAABTwSURBVHi1DB7Kz161ZGv9iavmL5Sf62En4qUIr17fWnjoaUNPHaVxY8Sflr6abas1bsVDcrLOoOiXb0khetrcCFdS2bdFkCpbYBSRwus/YLF6Ab4aIG0nk4S324JnUNL+DlOE14JcWOZS62A3GohV7VGE12jskVbfqlzYNcNXFN7zp1G4cTkpZdFX9IAruQrJ1g6jiBdecSykd+9GRElncdp1LKQdiSuPbbDwlr+sKwqvdCRk4fqlJCjRV90Kl3Q0pFNKRAuvgLz2SBbGfrYdbo8LE+9oiTY1nPO8tl2DwO5Zj1X9YuHVTjbcc68ovGfTULD2UxKUmGt6w1VR23EBJMc6jSJeeD/amY7/m/Yt3NIBGdOHdcGfGhpbYNc7kPXW05lXuZrVbVrtv3Tf9QqviFMUte2Haqz19ldvPbV4lD63uk2r/fv6pii8maeQ/+OHJEyxne6Cq1J1kq0dRhEvvB9sT8P/Tfk3PEJ4R96EHpf+T3itHjxW+9czQILFZGesetvSK7yBOOmNgcrcav/UOPztwjH3ysJ7EvmrF5JQxHa9RxLeGiRbO4zKhfA++8oyWXinPdUdvRql2MGV27CAgJnCa0F47NICAorCm3ECed8uILUad+P9cKWkkmztMIp44V26+wyem7ceHukc3imDrsb19a1/esXIbMe/rhE/RgaPnpmRkVipdcNBeKl9UZuFG/ETSblXEt7iM8eR99UbpO7GdX8I7splX8VOqmyBUcQL70/HsjFu6Q755tqE25qjVbXIvrkWqgvWgrFZxmU4CK8dHIK1EYm5VxTe08eQ88U8EvKEXo/AXaUWydYOo4gX3l/TcjH7hwOIlYR3SOeGaJRizgvv1JJj90Vgd3u+/utpV08d0V64CK/e/qmNKacJrp5+aq2jKLzpR5H12RwStqTbH4O7am2SrR1GES+80pt/kF/sle/wx7hdEIeT6bm7rXXAaEmeEd+hqqulf2bZ6hFeI3yMfLlQ+2wkvlDVpfbNDDsl4S1KO4LzH80iNZP858HwVKtDsrXDKKKFVwxMT/p+FG5ZJT9A4W7dBcWV6+sSXjuSwW0oE9AjvMw0vAkoCu+pw8hc9Cqpg5X6PQFP9bokWzuMIl54o49vQ+aXi+GK9iC5Rz8UVW8SlsJrZHZj1kAKFIOdcWkRXjvjMouv05YS/OMJVe6VhLfwxGFkvDeZhD/lvhGITmXhJcFSMqIeC+na/AW2jBOnk7nRaswwFDftGpbCaxhYBDjQIrwR0F3ugkRAUXiP/470t/9B4lT1wacRXbMeydYOo4if8Ub99DHWPTU77N+5ZsdgcHobLLxOz5D58SkJb8GxQ0ibP4HUaLWH/w8xteqTbO0wihjhDfZTyJWVBveZw4hyu1GUUg/ehJSwm/Fa8bNZi08ttlYOWq2v/nFK3EaYWNEHLT612BrpZ7C6isJ79CBOznmR1GyNx0YjpnYDkq0dRhEjvMFgncguwpYT0gsvpRHUNjUZ1RLcuriGegDqCvq/leyO3ar2QjXjtao/RnJKrWt37Ga3pyS8+UcO4vjMMSQUNYeMQ2wdFl4SLCUjyhqvqJ+eW4x9GXlwSyPi0pQ4pMTRhNfsAWS4wzY6CNb30n9Xu+FiNkO7hNfsuG1MneGmnJZ7ReE9fABHpz5H6nPtYeMRW/cSkq0dRhE94xWDKFDRs4+XkozyfMFS+Bi1sUt49cTJuddDTb2OkvDm/b4fR15+Rt2JZFHnqUmIq9eQZGuHUcQLb1S+tMyQkwG4XPDGS+u7MQkB13jD9cKxKm7fl5ZVX1JaB7eIJy7+wuPe1F871DasYkhtX6+dVXE7KfeKwntoHw6NH0nCV/+5VxBX/1KSrR1GYS+8SoNPfOZJ24uCDV9JwutGTPseKKrSQPHmmr8/ysCmDFKKHz3J1hqrnjbsrKPGqfSMV81exE6x8fVRK0/OvXmjI1ielIQ39+BeHBw3jBREgzFTEd+gEcnWDqOwF14lSCKZvn28bulZ4dYvDOd9vHaMKovacPJSg0VdLvduFYX3wF7sGzWUxOjSl6Yj/hIWXhIsJaO83FzFJQPfbMS9azX2zpgjP7nW6MknUNigPXnGazhIHQ70zLq0Lgeo3RQrHbbar4pg7fvqqdUX7QXyUbqeT3gpuff50zvj1ZE6w1U49/9D6GOhJLw5+/dgzzN/J3FvPGkGEho2JtnaYRSRM17/C96VfRqezCMySzv38Wq54AP91LUj+eHWBmXGq4e72Rz0xKCnjtlxO9GfovDu24Pfhj9OCvuyKbORcCkLLwmWnhmvfx3frBcl0hFlokRJR5MFmV2pBaQ0e3PyRRNsHZKyPqnGxMrPAzFVm/FaFQ/n3iqygf36515JeLP37MbOoY+Rgms2fQ4SGzch2dphFDEz3mA/n/WeTmaWmKr9zKYuE5gVjx2Dyoo2RP+D7Wowm41Z/jj3xkeCovDu3o1tjz9KaqTl7LlIbMLCS4KlZETZUiTP6lYvwFcDZiA6zoNuC55BSfs7wu6RYaOwzBISahxWtUdZaqDGWF7srMpFMH5mt6ckvFm//YatjzxMSmXrefORdNllJFs7jCJmxhsIlhgEro1LsWnsP+VDcsrDrgazB74dg5DaBguvMqlIzL2S8J7ftQtbBjxEGj6Xv/UGkps2JdnaYRTRwisAnskrxuGzBeL5CdSrEIuKsRfWeSO1ROLF5+uTFuGNRA5qYzYS+6wovDt3YWP/AWpY5M+vePctJDdj4SXBUjKiLDWI+l/szcDoNzZIr3d3Y/JD7XFdPevfMmy4c+wgIAEtwssII4OAkvCe27ETP/d7gNTRKxe9gwrNm5Fs7TCK+BnvsawirDtyFtHS8WRX1amAGgkeO7hyGxYQYOG1AKrDXSoK7/ad+OnP95F60OGj91ChBQsvCZbWGW/pn1rif3tOH0TRjv/Ijwy7m3dEcUpd22+uhfonYLD2Qx2X1kGgJLxO7Uuo4wr33CsJ79ltO7D29ntJw+iaz95HxZbNSbZ2GEX0jFcW3lO7kb9+ubSFVzqroUMv1bMaqNBDfUFR4yxtR42baqc3Dj31nDLjdSIbCk9q3FQ7SptGbRSFd+sO/NirH6mJTl8sQsXWLLwkWFpnvIHsvdJGWf/HR8WB6GrFSQNPLdby9Lkdwsu5d9aIUhLezK3b8X33v5ACvu6rD1CpdQuSrR1GET3jFQBP5hThF+kNFO6oKLRJTUJV6aWXgQpfcHYMN2NtWCW8nHtjebGytpLwZvyyHSv+1JfUfLevFyOlDQsvCZYZM9684hJkFXjlV/8kRbsQI15FIZVAF1ugNWK1J8sofoK1Z/QLgNq2YdgEB2aLVyB/ZgkvhRulPxQ/nHvC4Cll4s9VSXjPSMK7/Ma7SA30+PZDVGbhJbFSNKJsJxMJdJ89ChzeId9cK6nbAt7kGrbfXDPeW2MeKCJirAV7apslvPZE64xWwj33SsKbvmU7lnX7Mwn0LSs+QtXLecZLgqVlxhts9qG0q8HKQenvO9h/G4YQxg70sNf6lmElPHrap+Lm3CuT0sJeSXjTJOH99Po+pLT0XvUxqrHwklhpmvEGE94/Xv0jefMmVoFXevWP0aJl4Ohty4429MZmtJ7evpkpvHr7oDd2Le3Z0YaWeMy01do3JeE9tWUbFnehCW/f7z5G9ctbmtkVQ74i/uaa2NVQJP4lFY+00EvZ1WCIKFe2jAAvNViG1rGOlYT35OZteP+6O0mx3/v9J6jRloWXBEvLUkMwW+neGgrEv6Qibqz9996a4fa1fnMbbdDu9ozGa0V9pwiv3bmwuz0rcqfXp5LwnpCE9+1OvUmuH/zxU6Q6RHhzcnIQ8TNeIbpiZ4Mo8R6X9OgwKU9s5EACThFeB6KJ2JCUhPfYpm14veMdpL4P/M8S1GoX2hlvSUkJli9fjqlTp0a+8BZKL58oKL7wBoo4SXhDMePVOmOh2lPtSCPToJGIRRS17XdGmnGK8GrhrsVWsKHaU+2M8KbWtTL3SsJ7VBLe1669nRTmoDWfoXaIhffIkSPo1q0bPB5PeAtvsBtq/k+qie1kJQd/RZRb2k5Wv7Wu7WRq7ZAyz0aGCfgLr105sasdw3Ai1IGS8B7Z9CtmXk0T3iHrPkOddq1CSunkyZN49dVX8cgjj4S38KpRFBeNZ/cPODDvdbhjPKg/6HEU1mtn6axMLSb+XD8Bp8x49feAa2oloCS8hzf+iqkdbiO5HPbT56h7RWiF1z/QsF3j9Xr/+wJLFexReeeRn5Yu/YaLQmy1aiiJTSQlio2cR8AlTrOXCjX3zusBR6SVQJR03Yp/ApWCnFyc2LmX5DK1WSPEJMRj3759GDlyJKmOMOrbty/69St7EE///v2xfv16kp8NGzagQoWLzwEPW+El9ZiNmAATYAJ+BLZt24Y+fWh7f0W1wYMHY8iQIWUY/v3vf8eWLVtIbL/88kskJSVdZMvCS0LHRkyACYQ7gTNnzkAIr1hnpZZgM15q/WB2LLxGCXJ9JsAEmIBGAiy8GoGxORNgAkzAKAEWXqMEuT4TYAJMQCMBFl6NwNicCTABJmCUAAuvUYJcnwkwASagkQALr0ZgbM4EmAATMEqAhdcoQa7PBJgAE9BIgIVXIzA2ZwJMgAkYJcDCa5Qg12cCTIAJaCTAwqsRGJszASbABIwSYOE1SpDrMwEmwAQ0EmDh1QiMzZkAE2ACRgmw8BolyPWZABNgAhoJsPBqBMbmTIAJMAGjBFh4jRLk+kyACTABjQTCRngPHDiA2bNnY+PGjTh9+jRSU1Nx8803y+8vSkzkt0pozLvjzNetW4cHHnggaFwJCQnYvHnzRZ+LA6YXLFiA/fv3o7i4GE2bNsX999+P7t27O65/HBAT8CcQFsK7detW+aIU76Nv06aNLLqbNm1CWloamjRpgoULFyI5OZkzG8YE3njjDbz88sto1aoVGjRoUKYn4t1b48eP/+PvwlbUEYLcoUMHFBQUyK9iKSwsxN/+9jcMHTo0jGlw6JFOwPHCKy4kMYM5evQoJk2ahN69e8s5ycvLw5NPPomVK1fi7rvvxtixYyM9VxHdv2HDhuGLL77A66+/js6dOyv2dc2aNRgwYABq166N9957D7Vq1ZLtd+3ahQcffBAZGRlYvHix/CXNhQk4kYDjhXfJkiV4+umn0bFjR7z55psXMRQX2A033CDPcsTFWPqFck4EzjEFJiC+XA8ePAix5JCSkqKISSwn/PTTT5g8eTJuvfXWi2wXLVqEMWPGoEePHpg+fTrjZgKOJOB44RU/GZcvX45x48YFfNvnoEGDsGrVKkybNg09e/Z0JGQOSplAVlYWrrzySnnmKn7BKBVhe9VVV0G8cViIb+n1ffFerWuvvRbiVfDifoDvzcScAybgJAKOF15xA03cPBEzmbZt25ZhN2XKFMybNw9CgMXSA5fwIyBef33ffffJgtm+fXv8+9//xu+//y6/mVX8TazZXnLJJXLHfvnlF/mV22Id+KuvvgrY2U6dOsnr/+LzQOvF4UeII440Ao4X3nbt2iE7O1ue1frW8vyTIO5qi5sud955JyZOnBhp+SkX/Xn77bf/yJ24iSbE1+12Y/v27UhPT5dvoL322mvyTbSvv/5aft22+G+R+0BF3AfYsWOHvP4rfHFhAk4j4HjhbdasGbxeL9auXYvKlSuX4SduoowePZrX9Jw2sjTEM3LkSHz++ecQX7IzZsxAtWrV5Npip4K4ofr+++/Luf/mm2/w7bffymv+Xbt2xdy5cwO20q9fP3nrmfgl1KVLFw2RsCkTsIeA44W3ZcuW8s0zNeEVN2fERcsl/AgIgRW7VoTgiuUF/yL25/bp0wc7d+6Ub5qJbYMjRowgCa+YJV9//fXhB4QjjngCjhde8ZMyMzMTq1evRs2aNcskxLfUIH5eitkRl8gj8Oqrr2LOnDnyctJNN92Exx57DFdffTXeeecdxaUGMTbE+OHCBJxGwPHCK7YL7d69Gx9++CFat25dhp/YUjR//nw8+uijEHtBuUQegQ8++ADPP/+8/KTiww8/LAvwpZdeCvHkWqAith6KtWGxG8Z3Uy7yqHCPwpmA44VX/KxcunQpJkyYIP/kLF1828mmTp2KXr16hXMuymXsYpnhpZdekh8Df+GFF1ClSpUyHHwz3r/+9a944okn5LVgsU3s559/hrgZ519828ni4uLk7WTiJh0XJuA0Ao4X3mXLlmH48OEB1/R8D1CIdUCxFBHo5pvTgHM8ZQmIh2DEGu+LL74obxXzL0KYb7nlFhw6dAhi98M111yDhx56CD/++KP8gIR4UMK//Otf/5KfYuQ1fx5pTibgeOEVjwaLByPEhen/EIX4u1haWLFiBfr3749Ro0Y5mTPHpkBAPCb8yiuvoFKlSvK6rTjsRhSRY5FX8YtHPDTx7rvvyn//7rvv5MORxJq/sK9fv778d/9Hhj/++GOIG7NcmIATCTheeAU0scF+4MCB8oXYokUL1KlTR94udOrUKfniEjdR+IQyJw4vWkxFRUXyoTZiq5jH45EflBGPDYuDkMRabcOGDeUc+7aZCa/iS1gcjiSWGsSNNvGrRzzJJnbAiF9IQpi5MAGnEggL4RXwxA22WbNmySdQiVPKhPiKmy3isJTSW5CcCpvjCk6gpKQEH330kfyPyLUQ0rp168o5Fmu74iEK/yLsP/nkE4ilhb1798oC3LhxY3k8dOvWjVEzAUcTCBvhdTRFDo4JMAEmoIEAC68GWGzKBJgAEzCDAAuvGRTZBxNgAkxAAwEWXg2w2JQJMAEmYAYBFl4zKLIPJsAEmIAGAiy8GmCxKRNgAkzADAIsvGZQZB9MgAkwAQ0EWHg1wGJTJsAEmIAZBFh4zaDIPpgAE2ACGgiw8GqAxaZMgAkwATMIsPCaQdFBPsRjtM8++6zmiHyH0Fx22WVy3bfeekt+0WR5KOLxY/FCVXHGLxcmYAcBFl47KNvYhji5S7zypnQ5fvw4xD8xMTEBT+1q3ry5/O668ia8W7dulY+jFCeciUP1uTABOwiw8NpB2QFtzJw5Uz5kqHbt2li5cmXQiPbt2yd/Jt7oHB8f74DIrQ3hmWeewaeffgrxphMWXmtZs/f/EWDhLSejgSq85QTHH91k4S1vGXdGf1l4nZEHy6Ng4Q2MmIXX8qHHDQQg8P9kJjl35NlrmwAAAABJRU5ErkJggg==\" width=\"350\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "b3adf0ee523044ce91195148d8885489",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "interactive(children=(FloatSlider(value=1.0, description='input_scaling', max=2.0, min=0.1), Output()), _dom_c…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "params = {'hidden_layer_size': 50,\n",
    "          'input_activation': 'identity',\n",
    "          'input_scaling': (0.1, 2.0, 0.1),\n",
    "          'bias_scaling':  0.0}\n",
    "build_visualization_widget(plot_func=my_custom_plot, estimator=InputToNode(), \n",
    "                           params=params, X=X.reshape(-1, 1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "/* global mpl */\n",
       "window.mpl = {};\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(\n",
       "            '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",
       "\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 = document.createElement('div');\n",
       "    this.root.setAttribute('style', 'display: inline-block');\n",
       "    this._root_extra_style(this.root);\n",
       "\n",
       "    parent_element.appendChild(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 (fig.ratio !== 1) {\n",
       "            fig.send_message('set_device_pixel_ratio', {\n",
       "                device_pixel_ratio: fig.ratio,\n",
       "            });\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 = document.createElement('div');\n",
       "    titlebar.classList =\n",
       "        'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n",
       "    var titletext = document.createElement('div');\n",
       "    titletext.classList = 'ui-dialog-title';\n",
       "    titletext.setAttribute(\n",
       "        'style',\n",
       "        'width: 100%; text-align: center; padding: 3px;'\n",
       "    );\n",
       "    titlebar.appendChild(titletext);\n",
       "    this.root.appendChild(titlebar);\n",
       "    this.header = titletext;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = (this.canvas_div = document.createElement('div'));\n",
       "    canvas_div.setAttribute(\n",
       "        'style',\n",
       "        'border: 1px solid #ddd;' +\n",
       "            'box-sizing: content-box;' +\n",
       "            'clear: both;' +\n",
       "            'min-height: 1px;' +\n",
       "            'min-width: 1px;' +\n",
       "            'outline: 0;' +\n",
       "            'overflow: hidden;' +\n",
       "            'position: relative;' +\n",
       "            'resize: both;'\n",
       "    );\n",
       "\n",
       "    function on_keyboard_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.key_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    canvas_div.addEventListener(\n",
       "        'keydown',\n",
       "        on_keyboard_event_closure('key_press')\n",
       "    );\n",
       "    canvas_div.addEventListener(\n",
       "        'keyup',\n",
       "        on_keyboard_event_closure('key_release')\n",
       "    );\n",
       "\n",
       "    this._canvas_extra_style(canvas_div);\n",
       "    this.root.appendChild(canvas_div);\n",
       "\n",
       "    var canvas = (this.canvas = document.createElement('canvas'));\n",
       "    canvas.classList.add('mpl-canvas');\n",
       "    canvas.setAttribute('style', 'box-sizing: content-box;');\n",
       "\n",
       "    this.context = canvas.getContext('2d');\n",
       "\n",
       "    var backingStore =\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        this.context.webkitBackingStorePixelRatio ||\n",
       "        this.context.mozBackingStorePixelRatio ||\n",
       "        this.context.msBackingStorePixelRatio ||\n",
       "        this.context.oBackingStorePixelRatio ||\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        1;\n",
       "\n",
       "    this.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n",
       "        'canvas'\n",
       "    ));\n",
       "    rubberband_canvas.setAttribute(\n",
       "        'style',\n",
       "        'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n",
       "    );\n",
       "\n",
       "    // Apply a ponyfill if ResizeObserver is not implemented by browser.\n",
       "    if (this.ResizeObserver === undefined) {\n",
       "        if (window.ResizeObserver !== undefined) {\n",
       "            this.ResizeObserver = window.ResizeObserver;\n",
       "        } else {\n",
       "            var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n",
       "            this.ResizeObserver = obs.ResizeObserver;\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n",
       "        var nentries = entries.length;\n",
       "        for (var i = 0; i < nentries; i++) {\n",
       "            var entry = entries[i];\n",
       "            var width, height;\n",
       "            if (entry.contentBoxSize) {\n",
       "                if (entry.contentBoxSize instanceof Array) {\n",
       "                    // Chrome 84 implements new version of spec.\n",
       "                    width = entry.contentBoxSize[0].inlineSize;\n",
       "                    height = entry.contentBoxSize[0].blockSize;\n",
       "                } else {\n",
       "                    // Firefox implements old version of spec.\n",
       "                    width = entry.contentBoxSize.inlineSize;\n",
       "                    height = entry.contentBoxSize.blockSize;\n",
       "                }\n",
       "            } else {\n",
       "                // Chrome <84 implements even older version of spec.\n",
       "                width = entry.contentRect.width;\n",
       "                height = entry.contentRect.height;\n",
       "            }\n",
       "\n",
       "            // Keep the size of the canvas and rubber band canvas in sync with\n",
       "            // the canvas container.\n",
       "            if (entry.devicePixelContentBoxSize) {\n",
       "                // Chrome 84 implements new version of spec.\n",
       "                canvas.setAttribute(\n",
       "                    'width',\n",
       "                    entry.devicePixelContentBoxSize[0].inlineSize\n",
       "                );\n",
       "                canvas.setAttribute(\n",
       "                    'height',\n",
       "                    entry.devicePixelContentBoxSize[0].blockSize\n",
       "                );\n",
       "            } else {\n",
       "                canvas.setAttribute('width', width * fig.ratio);\n",
       "                canvas.setAttribute('height', height * fig.ratio);\n",
       "            }\n",
       "            canvas.setAttribute(\n",
       "                'style',\n",
       "                'width: ' + width + 'px; height: ' + height + 'px;'\n",
       "            );\n",
       "\n",
       "            rubberband_canvas.setAttribute('width', width);\n",
       "            rubberband_canvas.setAttribute('height', height);\n",
       "\n",
       "            // And update the size in Python. We ignore the initial 0/0 size\n",
       "            // that occurs as the element is placed into the DOM, which should\n",
       "            // otherwise not happen due to the minimum size styling.\n",
       "            if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n",
       "                fig.request_resize(width, height);\n",
       "            }\n",
       "        }\n",
       "    });\n",
       "    this.resizeObserverInstance.observe(canvas_div);\n",
       "\n",
       "    function on_mouse_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.mouse_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousedown',\n",
       "        on_mouse_event_closure('button_press')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseup',\n",
       "        on_mouse_event_closure('button_release')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'dblclick',\n",
       "        on_mouse_event_closure('dblclick')\n",
       "    );\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousemove',\n",
       "        on_mouse_event_closure('motion_notify')\n",
       "    );\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseenter',\n",
       "        on_mouse_event_closure('figure_enter')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseleave',\n",
       "        on_mouse_event_closure('figure_leave')\n",
       "    );\n",
       "\n",
       "    canvas_div.addEventListener('wheel', function (event) {\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        on_mouse_event_closure('scroll')(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.appendChild(canvas);\n",
       "    canvas_div.appendChild(rubberband_canvas);\n",
       "\n",
       "    this.rubberband_context = rubberband_canvas.getContext('2d');\n",
       "    this.rubberband_context.strokeStyle = '#000000';\n",
       "\n",
       "    this._resize_canvas = function (width, height, forward) {\n",
       "        if (forward) {\n",
       "            canvas_div.style.width = width + 'px';\n",
       "            canvas_div.style.height = height + 'px';\n",
       "        }\n",
       "    };\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n",
       "        event.preventDefault();\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 toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'mpl-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'mpl-button-group';\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",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'mpl-button-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        var button = (fig.buttons[name] = document.createElement('button'));\n",
       "        button.classList = 'mpl-widget';\n",
       "        button.setAttribute('role', 'button');\n",
       "        button.setAttribute('aria-disabled', 'false');\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "\n",
       "        var icon_img = document.createElement('img');\n",
       "        icon_img.src = '_images/' + image + '.png';\n",
       "        icon_img.srcset = '_images/' + image + '_large.png 2x';\n",
       "        icon_img.alt = tooltip;\n",
       "        button.appendChild(icon_img);\n",
       "\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    var fmt_picker = document.createElement('select');\n",
       "    fmt_picker.classList = 'mpl-widget';\n",
       "    toolbar.appendChild(fmt_picker);\n",
       "    this.format_dropdown = fmt_picker;\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = document.createElement('option');\n",
       "        option.selected = fmt === mpl.default_extension;\n",
       "        option.innerHTML = fmt;\n",
       "        fmt_picker.appendChild(option);\n",
       "    }\n",
       "\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\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",
       "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",
       "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], msg['forward']);\n",
       "        fig.send_message('refresh', {});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n",
       "    var x0 = msg['x0'] / fig.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n",
       "    var x1 = msg['x1'] / fig.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / fig.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,\n",
       "        0,\n",
       "        fig.canvas.width / fig.ratio,\n",
       "        fig.canvas.height / fig.ratio\n",
       "    );\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",
       "    fig.rubberband_canvas.style.cursor = msg['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.handle_history_buttons = function (fig, msg) {\n",
       "    for (var key in msg) {\n",
       "        if (!(key in fig.buttons)) {\n",
       "            continue;\n",
       "        }\n",
       "        fig.buttons[key].disabled = !msg[key];\n",
       "        fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n",
       "    if (msg['mode'] === 'PAN') {\n",
       "        fig.buttons['Pan'].classList.add('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    } else if (msg['mode'] === 'ZOOM') {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.add('active');\n",
       "    } else {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    }\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",
       "            var img = evt.data;\n",
       "            if (img.type !== 'image/png') {\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",
       "                img.type = 'image/png';\n",
       "            }\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",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                img\n",
       "            );\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        } else if (\n",
       "            typeof evt.data === 'string' &&\n",
       "            evt.data.slice(0, 21) === 'data:image/png;base64'\n",
       "        ) {\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(\n",
       "                \"No handler for the '\" + msg_type + \"' message type: \",\n",
       "                msg\n",
       "            );\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(\n",
       "                    \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n",
       "                    e,\n",
       "                    e.stack,\n",
       "                    msg\n",
       "                );\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "};\n",
       "\n",
       "// from https://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",
       "    }\n",
       "    if (e.target) {\n",
       "        targ = e.target;\n",
       "    } else if (e.srcElement) {\n",
       "        targ = e.srcElement;\n",
       "    }\n",
       "    if (targ.nodeType === 3) {\n",
       "        // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "    }\n",
       "\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    var boundingRect = targ.getBoundingClientRect();\n",
       "    var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n",
       "    var y = e.pageY - (boundingRect.top + document.body.scrollTop);\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",
       " * https://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",
       "        }\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",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * this.ratio;\n",
       "    var y = canvas_pos.y * this.ratio;\n",
       "\n",
       "    this.send_message(name, {\n",
       "        x: x,\n",
       "        y: y,\n",
       "        button: event.button,\n",
       "        step: event.step,\n",
       "        guiEvent: simpleKeys(event),\n",
       "    });\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",
       "    // Prevent repeat events\n",
       "    if (name === 'key_press') {\n",
       "        if (event.key === this._key) {\n",
       "            return;\n",
       "        } else {\n",
       "            this._key = event.key;\n",
       "        }\n",
       "    }\n",
       "    if (name === 'key_release') {\n",
       "        this._key = null;\n",
       "    }\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.key !== 'Control') {\n",
       "        value += 'ctrl+';\n",
       "    }\n",
       "    else if (event.altKey && event.key !== 'Alt') {\n",
       "        value += 'alt+';\n",
       "    }\n",
       "    else if (event.shiftKey && event.key !== 'Shift') {\n",
       "        value += 'shift+';\n",
       "    }\n",
       "\n",
       "    value += 'k' + event.key;\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, { key: value, 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",
       "\n",
       "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n",
       "// prettier-ignore\n",
       "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";/* global mpl */\n",
       "\n",
       "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.binaryType = comm.kernel.ws.binaryType;\n",
       "    ws.readyState = comm.kernel.ws.readyState;\n",
       "    function updateReadyState(_event) {\n",
       "        if (comm.kernel.ws) {\n",
       "            ws.readyState = comm.kernel.ws.readyState;\n",
       "        } else {\n",
       "            ws.readyState = 3; // Closed state.\n",
       "        }\n",
       "    }\n",
       "    comm.kernel.ws.addEventListener('open', updateReadyState);\n",
       "    comm.kernel.ws.addEventListener('close', updateReadyState);\n",
       "    comm.kernel.ws.addEventListener('error', updateReadyState);\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",
       "        var data = msg['content']['data'];\n",
       "        if (data['blob'] !== undefined) {\n",
       "            data = {\n",
       "                data: new Blob(msg['buffers'], { type: data['blob'] }),\n",
       "            };\n",
       "        }\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(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 = document.getElementById(id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm);\n",
       "\n",
       "    function ondownload(figure, _format) {\n",
       "        window.open(figure.canvas.toDataURL());\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy, ondownload, element);\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;\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",
       "    fig.cell_info[0].output_area.element.on(\n",
       "        'cleared',\n",
       "        { fig: fig },\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function (fig, msg) {\n",
       "    var width = fig.canvas.width / fig.ratio;\n",
       "    fig.cell_info[0].output_area.element.off(\n",
       "        'cleared',\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "    fig.resizeObserverInstance.unobserve(fig.canvas_div);\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.innerHTML =\n",
       "        '<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 / this.ratio;\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] =\n",
       "        '<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 () {\n",
       "        fig.push_to_output();\n",
       "    }, 1000);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'btn-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'btn-group';\n",
       "    var button;\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",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'btn-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        button = fig.buttons[name] = document.createElement('button');\n",
       "        button.classList = 'btn btn-default';\n",
       "        button.href = '#';\n",
       "        button.title = name;\n",
       "        button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message pull-right';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = document.createElement('div');\n",
       "    buttongrp.classList = 'btn-group inline pull-right';\n",
       "    button = document.createElement('button');\n",
       "    button.classList = 'btn btn-mini btn-primary';\n",
       "    button.href = '#';\n",
       "    button.title = 'Stop Interaction';\n",
       "    button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n",
       "    button.addEventListener('click', function (_evt) {\n",
       "        fig.handle_close(fig, {});\n",
       "    });\n",
       "    button.addEventListener(\n",
       "        'mouseover',\n",
       "        on_mouseover_closure('Stop Interaction')\n",
       "    );\n",
       "    buttongrp.appendChild(button);\n",
       "    var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n",
       "    titlebar.insertBefore(buttongrp, titlebar.firstChild);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._remove_fig_handler = function (event) {\n",
       "    var fig = event.data.fig;\n",
       "    if (event.target !== this) {\n",
       "        // Ignore bubbled events from children.\n",
       "        return;\n",
       "    }\n",
       "    fig.close_ws(fig, {});\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (el) {\n",
       "    el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (el) {\n",
       "    // this is important to make the div 'focusable\n",
       "    el.setAttribute('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",
       "    } else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function (event, _name) {\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which === 13) {\n",
       "        this.canvas_div.blur();\n",
       "        // select the cell after this one\n",
       "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
       "        IPython.notebook.select(index + 1);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "};\n",
       "\n",
       "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(\n",
       "        'matplotlib',\n",
       "        mpl.mpl_figure_comm\n",
       "    );\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=\"350\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e9e7bd42e9eb4fc194fcec98035f4b2b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "interactive(children=(FloatSlider(value=0.25, description='bias_scaling', max=0.5, step=0.05), Output()), _dom…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "params = {'hidden_layer_size': 50,\n",
    "          'input_activation': 'identity',\n",
    "          'input_scaling': 1.0,\n",
    "          'bias_scaling':  (0.0, 0.5, 0.05)}\n",
    "build_visualization_widget(plot_func=my_custom_plot, estimator=InputToNode(), \n",
    "                           params=params, X=X.reshape(-1, 1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's keep the input scaling factor fixed to 1.0 for the next experiments. Echo State Networks have two ways to\n",
    "incorporate past information.\n",
    "\n",
    "Next, let us analyze the spectral radius. Therefore, we set it to 0.3 in the following example.\n",
    "\n",
    "We can observe that the impulse responses are starting at n=5 and decaying until reaching zero after a short time. Obviously, the reservoir states are decaying rather fast, because the recurrent connections are small compared to the input scaling. \n",
    "\n",
    "If we increase the spectral radius close to 1.0, the values are still bounded between [0.8, 0.8], but the reservoir states are active over a longer time now.\n",
    "\n",
    "If we further increase the spectral radius, we can see that the reservoir states are decaying very slowly, and they are oscillating with a resonance frequency. For many tasks, it is indeed necessary to preserve the echo state property of reservoir and keep 𝜌<1. However in some cases, such as time-series prediction, the spectral radius can be larger than 1. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pipeline(steps=[('i2n', InputToNode()), ('n2n', NodeToNode())])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Pipeline([(\"i2n\", InputToNode()), (\"n2n\", NodeToNode())])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "/* global mpl */\n",
       "window.mpl = {};\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(\n",
       "            '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",
       "\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 = document.createElement('div');\n",
       "    this.root.setAttribute('style', 'display: inline-block');\n",
       "    this._root_extra_style(this.root);\n",
       "\n",
       "    parent_element.appendChild(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 (fig.ratio !== 1) {\n",
       "            fig.send_message('set_device_pixel_ratio', {\n",
       "                device_pixel_ratio: fig.ratio,\n",
       "            });\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 = document.createElement('div');\n",
       "    titlebar.classList =\n",
       "        'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n",
       "    var titletext = document.createElement('div');\n",
       "    titletext.classList = 'ui-dialog-title';\n",
       "    titletext.setAttribute(\n",
       "        'style',\n",
       "        'width: 100%; text-align: center; padding: 3px;'\n",
       "    );\n",
       "    titlebar.appendChild(titletext);\n",
       "    this.root.appendChild(titlebar);\n",
       "    this.header = titletext;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = (this.canvas_div = document.createElement('div'));\n",
       "    canvas_div.setAttribute(\n",
       "        'style',\n",
       "        'border: 1px solid #ddd;' +\n",
       "            'box-sizing: content-box;' +\n",
       "            'clear: both;' +\n",
       "            'min-height: 1px;' +\n",
       "            'min-width: 1px;' +\n",
       "            'outline: 0;' +\n",
       "            'overflow: hidden;' +\n",
       "            'position: relative;' +\n",
       "            'resize: both;'\n",
       "    );\n",
       "\n",
       "    function on_keyboard_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.key_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    canvas_div.addEventListener(\n",
       "        'keydown',\n",
       "        on_keyboard_event_closure('key_press')\n",
       "    );\n",
       "    canvas_div.addEventListener(\n",
       "        'keyup',\n",
       "        on_keyboard_event_closure('key_release')\n",
       "    );\n",
       "\n",
       "    this._canvas_extra_style(canvas_div);\n",
       "    this.root.appendChild(canvas_div);\n",
       "\n",
       "    var canvas = (this.canvas = document.createElement('canvas'));\n",
       "    canvas.classList.add('mpl-canvas');\n",
       "    canvas.setAttribute('style', 'box-sizing: content-box;');\n",
       "\n",
       "    this.context = canvas.getContext('2d');\n",
       "\n",
       "    var backingStore =\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        this.context.webkitBackingStorePixelRatio ||\n",
       "        this.context.mozBackingStorePixelRatio ||\n",
       "        this.context.msBackingStorePixelRatio ||\n",
       "        this.context.oBackingStorePixelRatio ||\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        1;\n",
       "\n",
       "    this.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n",
       "        'canvas'\n",
       "    ));\n",
       "    rubberband_canvas.setAttribute(\n",
       "        'style',\n",
       "        'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n",
       "    );\n",
       "\n",
       "    // Apply a ponyfill if ResizeObserver is not implemented by browser.\n",
       "    if (this.ResizeObserver === undefined) {\n",
       "        if (window.ResizeObserver !== undefined) {\n",
       "            this.ResizeObserver = window.ResizeObserver;\n",
       "        } else {\n",
       "            var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n",
       "            this.ResizeObserver = obs.ResizeObserver;\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n",
       "        var nentries = entries.length;\n",
       "        for (var i = 0; i < nentries; i++) {\n",
       "            var entry = entries[i];\n",
       "            var width, height;\n",
       "            if (entry.contentBoxSize) {\n",
       "                if (entry.contentBoxSize instanceof Array) {\n",
       "                    // Chrome 84 implements new version of spec.\n",
       "                    width = entry.contentBoxSize[0].inlineSize;\n",
       "                    height = entry.contentBoxSize[0].blockSize;\n",
       "                } else {\n",
       "                    // Firefox implements old version of spec.\n",
       "                    width = entry.contentBoxSize.inlineSize;\n",
       "                    height = entry.contentBoxSize.blockSize;\n",
       "                }\n",
       "            } else {\n",
       "                // Chrome <84 implements even older version of spec.\n",
       "                width = entry.contentRect.width;\n",
       "                height = entry.contentRect.height;\n",
       "            }\n",
       "\n",
       "            // Keep the size of the canvas and rubber band canvas in sync with\n",
       "            // the canvas container.\n",
       "            if (entry.devicePixelContentBoxSize) {\n",
       "                // Chrome 84 implements new version of spec.\n",
       "                canvas.setAttribute(\n",
       "                    'width',\n",
       "                    entry.devicePixelContentBoxSize[0].inlineSize\n",
       "                );\n",
       "                canvas.setAttribute(\n",
       "                    'height',\n",
       "                    entry.devicePixelContentBoxSize[0].blockSize\n",
       "                );\n",
       "            } else {\n",
       "                canvas.setAttribute('width', width * fig.ratio);\n",
       "                canvas.setAttribute('height', height * fig.ratio);\n",
       "            }\n",
       "            canvas.setAttribute(\n",
       "                'style',\n",
       "                'width: ' + width + 'px; height: ' + height + 'px;'\n",
       "            );\n",
       "\n",
       "            rubberband_canvas.setAttribute('width', width);\n",
       "            rubberband_canvas.setAttribute('height', height);\n",
       "\n",
       "            // And update the size in Python. We ignore the initial 0/0 size\n",
       "            // that occurs as the element is placed into the DOM, which should\n",
       "            // otherwise not happen due to the minimum size styling.\n",
       "            if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n",
       "                fig.request_resize(width, height);\n",
       "            }\n",
       "        }\n",
       "    });\n",
       "    this.resizeObserverInstance.observe(canvas_div);\n",
       "\n",
       "    function on_mouse_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.mouse_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousedown',\n",
       "        on_mouse_event_closure('button_press')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseup',\n",
       "        on_mouse_event_closure('button_release')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'dblclick',\n",
       "        on_mouse_event_closure('dblclick')\n",
       "    );\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousemove',\n",
       "        on_mouse_event_closure('motion_notify')\n",
       "    );\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseenter',\n",
       "        on_mouse_event_closure('figure_enter')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseleave',\n",
       "        on_mouse_event_closure('figure_leave')\n",
       "    );\n",
       "\n",
       "    canvas_div.addEventListener('wheel', function (event) {\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        on_mouse_event_closure('scroll')(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.appendChild(canvas);\n",
       "    canvas_div.appendChild(rubberband_canvas);\n",
       "\n",
       "    this.rubberband_context = rubberband_canvas.getContext('2d');\n",
       "    this.rubberband_context.strokeStyle = '#000000';\n",
       "\n",
       "    this._resize_canvas = function (width, height, forward) {\n",
       "        if (forward) {\n",
       "            canvas_div.style.width = width + 'px';\n",
       "            canvas_div.style.height = height + 'px';\n",
       "        }\n",
       "    };\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n",
       "        event.preventDefault();\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 toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'mpl-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'mpl-button-group';\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",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'mpl-button-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        var button = (fig.buttons[name] = document.createElement('button'));\n",
       "        button.classList = 'mpl-widget';\n",
       "        button.setAttribute('role', 'button');\n",
       "        button.setAttribute('aria-disabled', 'false');\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "\n",
       "        var icon_img = document.createElement('img');\n",
       "        icon_img.src = '_images/' + image + '.png';\n",
       "        icon_img.srcset = '_images/' + image + '_large.png 2x';\n",
       "        icon_img.alt = tooltip;\n",
       "        button.appendChild(icon_img);\n",
       "\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    var fmt_picker = document.createElement('select');\n",
       "    fmt_picker.classList = 'mpl-widget';\n",
       "    toolbar.appendChild(fmt_picker);\n",
       "    this.format_dropdown = fmt_picker;\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = document.createElement('option');\n",
       "        option.selected = fmt === mpl.default_extension;\n",
       "        option.innerHTML = fmt;\n",
       "        fmt_picker.appendChild(option);\n",
       "    }\n",
       "\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\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",
       "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",
       "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], msg['forward']);\n",
       "        fig.send_message('refresh', {});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n",
       "    var x0 = msg['x0'] / fig.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n",
       "    var x1 = msg['x1'] / fig.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / fig.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,\n",
       "        0,\n",
       "        fig.canvas.width / fig.ratio,\n",
       "        fig.canvas.height / fig.ratio\n",
       "    );\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",
       "    fig.rubberband_canvas.style.cursor = msg['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.handle_history_buttons = function (fig, msg) {\n",
       "    for (var key in msg) {\n",
       "        if (!(key in fig.buttons)) {\n",
       "            continue;\n",
       "        }\n",
       "        fig.buttons[key].disabled = !msg[key];\n",
       "        fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n",
       "    if (msg['mode'] === 'PAN') {\n",
       "        fig.buttons['Pan'].classList.add('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    } else if (msg['mode'] === 'ZOOM') {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.add('active');\n",
       "    } else {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    }\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",
       "            var img = evt.data;\n",
       "            if (img.type !== 'image/png') {\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",
       "                img.type = 'image/png';\n",
       "            }\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",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                img\n",
       "            );\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        } else if (\n",
       "            typeof evt.data === 'string' &&\n",
       "            evt.data.slice(0, 21) === 'data:image/png;base64'\n",
       "        ) {\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(\n",
       "                \"No handler for the '\" + msg_type + \"' message type: \",\n",
       "                msg\n",
       "            );\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(\n",
       "                    \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n",
       "                    e,\n",
       "                    e.stack,\n",
       "                    msg\n",
       "                );\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "};\n",
       "\n",
       "// from https://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",
       "    }\n",
       "    if (e.target) {\n",
       "        targ = e.target;\n",
       "    } else if (e.srcElement) {\n",
       "        targ = e.srcElement;\n",
       "    }\n",
       "    if (targ.nodeType === 3) {\n",
       "        // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "    }\n",
       "\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    var boundingRect = targ.getBoundingClientRect();\n",
       "    var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n",
       "    var y = e.pageY - (boundingRect.top + document.body.scrollTop);\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",
       " * https://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",
       "        }\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",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * this.ratio;\n",
       "    var y = canvas_pos.y * this.ratio;\n",
       "\n",
       "    this.send_message(name, {\n",
       "        x: x,\n",
       "        y: y,\n",
       "        button: event.button,\n",
       "        step: event.step,\n",
       "        guiEvent: simpleKeys(event),\n",
       "    });\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",
       "    // Prevent repeat events\n",
       "    if (name === 'key_press') {\n",
       "        if (event.key === this._key) {\n",
       "            return;\n",
       "        } else {\n",
       "            this._key = event.key;\n",
       "        }\n",
       "    }\n",
       "    if (name === 'key_release') {\n",
       "        this._key = null;\n",
       "    }\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.key !== 'Control') {\n",
       "        value += 'ctrl+';\n",
       "    }\n",
       "    else if (event.altKey && event.key !== 'Alt') {\n",
       "        value += 'alt+';\n",
       "    }\n",
       "    else if (event.shiftKey && event.key !== 'Shift') {\n",
       "        value += 'shift+';\n",
       "    }\n",
       "\n",
       "    value += 'k' + event.key;\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, { key: value, 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",
       "\n",
       "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n",
       "// prettier-ignore\n",
       "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";/* global mpl */\n",
       "\n",
       "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.binaryType = comm.kernel.ws.binaryType;\n",
       "    ws.readyState = comm.kernel.ws.readyState;\n",
       "    function updateReadyState(_event) {\n",
       "        if (comm.kernel.ws) {\n",
       "            ws.readyState = comm.kernel.ws.readyState;\n",
       "        } else {\n",
       "            ws.readyState = 3; // Closed state.\n",
       "        }\n",
       "    }\n",
       "    comm.kernel.ws.addEventListener('open', updateReadyState);\n",
       "    comm.kernel.ws.addEventListener('close', updateReadyState);\n",
       "    comm.kernel.ws.addEventListener('error', updateReadyState);\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",
       "        var data = msg['content']['data'];\n",
       "        if (data['blob'] !== undefined) {\n",
       "            data = {\n",
       "                data: new Blob(msg['buffers'], { type: data['blob'] }),\n",
       "            };\n",
       "        }\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(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 = document.getElementById(id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm);\n",
       "\n",
       "    function ondownload(figure, _format) {\n",
       "        window.open(figure.canvas.toDataURL());\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy, ondownload, element);\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;\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",
       "    fig.cell_info[0].output_area.element.on(\n",
       "        'cleared',\n",
       "        { fig: fig },\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function (fig, msg) {\n",
       "    var width = fig.canvas.width / fig.ratio;\n",
       "    fig.cell_info[0].output_area.element.off(\n",
       "        'cleared',\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "    fig.resizeObserverInstance.unobserve(fig.canvas_div);\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.innerHTML =\n",
       "        '<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 / this.ratio;\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] =\n",
       "        '<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 () {\n",
       "        fig.push_to_output();\n",
       "    }, 1000);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'btn-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'btn-group';\n",
       "    var button;\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",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'btn-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        button = fig.buttons[name] = document.createElement('button');\n",
       "        button.classList = 'btn btn-default';\n",
       "        button.href = '#';\n",
       "        button.title = name;\n",
       "        button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message pull-right';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = document.createElement('div');\n",
       "    buttongrp.classList = 'btn-group inline pull-right';\n",
       "    button = document.createElement('button');\n",
       "    button.classList = 'btn btn-mini btn-primary';\n",
       "    button.href = '#';\n",
       "    button.title = 'Stop Interaction';\n",
       "    button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n",
       "    button.addEventListener('click', function (_evt) {\n",
       "        fig.handle_close(fig, {});\n",
       "    });\n",
       "    button.addEventListener(\n",
       "        'mouseover',\n",
       "        on_mouseover_closure('Stop Interaction')\n",
       "    );\n",
       "    buttongrp.appendChild(button);\n",
       "    var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n",
       "    titlebar.insertBefore(buttongrp, titlebar.firstChild);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._remove_fig_handler = function (event) {\n",
       "    var fig = event.data.fig;\n",
       "    if (event.target !== this) {\n",
       "        // Ignore bubbled events from children.\n",
       "        return;\n",
       "    }\n",
       "    fig.close_ws(fig, {});\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (el) {\n",
       "    el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (el) {\n",
       "    // this is important to make the div 'focusable\n",
       "    el.setAttribute('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",
       "    } else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function (event, _name) {\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which === 13) {\n",
       "        this.canvas_div.blur();\n",
       "        // select the cell after this one\n",
       "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
       "        IPython.notebook.select(index + 1);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "};\n",
       "\n",
       "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(\n",
       "        'matplotlib',\n",
       "        mpl.mpl_figure_comm\n",
       "    );\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=\"350\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "1f94a98f04e34296ac7ac7f10a5e6a31",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "interactive(children=(FloatSlider(value=1.0, description='n2n__spectral_radius', max=2.0), Output()), _dom_cla…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "params = {'i2n__hidden_layer_size': 50,\n",
    "          'n2n__hidden_layer_size': 50,\n",
    "          'i2n__input_activation': 'identity',\n",
    "          'i2n__input_scaling': 1.0,\n",
    "          'i2n__bias_scaling':  0.0,\n",
    "          'n2n__spectral_radius': (0.0, 2.0, 0.1),\n",
    "          'n2n__leakage': 1.0,\n",
    "          'n2n__k_rec': 10,\n",
    "          'n2n__reservoir_activation': 'tanh',\n",
    "          'n2n__bidirectional': False\n",
    "         }\n",
    "build_visualization_widget(plot_func=my_custom_plot, estimator=Pipeline([(\"i2n\", InputToNode()),\n",
    "                                                                         (\"n2n\", NodeToNode())]),\n",
    "                           params=params, X=X.reshape(-1, 1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For some use cases, the reservoir should behave more non-linear. Therefore, we can play around with the bias. Here, we\n",
    "will show the impact of the bias scaling factor just for one example and increase it to 0.2.\n",
    "\n",
    "The spectral radius is decreased to 0.9 in order to fulfil the Echo State Property.\n",
    "\n",
    "Two impacts of the bias scaling can be mainly observed: (1) The absolute value of the stable states of the reservoir neurons is approximately distributed from 0 to 0.2 and each neuron has its own stable state. When new information from the input is passed to the reservoir neurons, this is the excitation point. (2) Before the impulse arrives in the reservoir (𝑛=5), the states are approaching their stable state. Due to the spectral radius, each reservoir neuron is connected to other neurons and thus feeds the constant bias through the network, until each neuron has reached its final state."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "/* global mpl */\n",
       "window.mpl = {};\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(\n",
       "            '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",
       "\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 = document.createElement('div');\n",
       "    this.root.setAttribute('style', 'display: inline-block');\n",
       "    this._root_extra_style(this.root);\n",
       "\n",
       "    parent_element.appendChild(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 (fig.ratio !== 1) {\n",
       "            fig.send_message('set_device_pixel_ratio', {\n",
       "                device_pixel_ratio: fig.ratio,\n",
       "            });\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 = document.createElement('div');\n",
       "    titlebar.classList =\n",
       "        'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n",
       "    var titletext = document.createElement('div');\n",
       "    titletext.classList = 'ui-dialog-title';\n",
       "    titletext.setAttribute(\n",
       "        'style',\n",
       "        'width: 100%; text-align: center; padding: 3px;'\n",
       "    );\n",
       "    titlebar.appendChild(titletext);\n",
       "    this.root.appendChild(titlebar);\n",
       "    this.header = titletext;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = (this.canvas_div = document.createElement('div'));\n",
       "    canvas_div.setAttribute(\n",
       "        'style',\n",
       "        'border: 1px solid #ddd;' +\n",
       "            'box-sizing: content-box;' +\n",
       "            'clear: both;' +\n",
       "            'min-height: 1px;' +\n",
       "            'min-width: 1px;' +\n",
       "            'outline: 0;' +\n",
       "            'overflow: hidden;' +\n",
       "            'position: relative;' +\n",
       "            'resize: both;'\n",
       "    );\n",
       "\n",
       "    function on_keyboard_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.key_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    canvas_div.addEventListener(\n",
       "        'keydown',\n",
       "        on_keyboard_event_closure('key_press')\n",
       "    );\n",
       "    canvas_div.addEventListener(\n",
       "        'keyup',\n",
       "        on_keyboard_event_closure('key_release')\n",
       "    );\n",
       "\n",
       "    this._canvas_extra_style(canvas_div);\n",
       "    this.root.appendChild(canvas_div);\n",
       "\n",
       "    var canvas = (this.canvas = document.createElement('canvas'));\n",
       "    canvas.classList.add('mpl-canvas');\n",
       "    canvas.setAttribute('style', 'box-sizing: content-box;');\n",
       "\n",
       "    this.context = canvas.getContext('2d');\n",
       "\n",
       "    var backingStore =\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        this.context.webkitBackingStorePixelRatio ||\n",
       "        this.context.mozBackingStorePixelRatio ||\n",
       "        this.context.msBackingStorePixelRatio ||\n",
       "        this.context.oBackingStorePixelRatio ||\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        1;\n",
       "\n",
       "    this.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n",
       "        'canvas'\n",
       "    ));\n",
       "    rubberband_canvas.setAttribute(\n",
       "        'style',\n",
       "        'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n",
       "    );\n",
       "\n",
       "    // Apply a ponyfill if ResizeObserver is not implemented by browser.\n",
       "    if (this.ResizeObserver === undefined) {\n",
       "        if (window.ResizeObserver !== undefined) {\n",
       "            this.ResizeObserver = window.ResizeObserver;\n",
       "        } else {\n",
       "            var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n",
       "            this.ResizeObserver = obs.ResizeObserver;\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n",
       "        var nentries = entries.length;\n",
       "        for (var i = 0; i < nentries; i++) {\n",
       "            var entry = entries[i];\n",
       "            var width, height;\n",
       "            if (entry.contentBoxSize) {\n",
       "                if (entry.contentBoxSize instanceof Array) {\n",
       "                    // Chrome 84 implements new version of spec.\n",
       "                    width = entry.contentBoxSize[0].inlineSize;\n",
       "                    height = entry.contentBoxSize[0].blockSize;\n",
       "                } else {\n",
       "                    // Firefox implements old version of spec.\n",
       "                    width = entry.contentBoxSize.inlineSize;\n",
       "                    height = entry.contentBoxSize.blockSize;\n",
       "                }\n",
       "            } else {\n",
       "                // Chrome <84 implements even older version of spec.\n",
       "                width = entry.contentRect.width;\n",
       "                height = entry.contentRect.height;\n",
       "            }\n",
       "\n",
       "            // Keep the size of the canvas and rubber band canvas in sync with\n",
       "            // the canvas container.\n",
       "            if (entry.devicePixelContentBoxSize) {\n",
       "                // Chrome 84 implements new version of spec.\n",
       "                canvas.setAttribute(\n",
       "                    'width',\n",
       "                    entry.devicePixelContentBoxSize[0].inlineSize\n",
       "                );\n",
       "                canvas.setAttribute(\n",
       "                    'height',\n",
       "                    entry.devicePixelContentBoxSize[0].blockSize\n",
       "                );\n",
       "            } else {\n",
       "                canvas.setAttribute('width', width * fig.ratio);\n",
       "                canvas.setAttribute('height', height * fig.ratio);\n",
       "            }\n",
       "            canvas.setAttribute(\n",
       "                'style',\n",
       "                'width: ' + width + 'px; height: ' + height + 'px;'\n",
       "            );\n",
       "\n",
       "            rubberband_canvas.setAttribute('width', width);\n",
       "            rubberband_canvas.setAttribute('height', height);\n",
       "\n",
       "            // And update the size in Python. We ignore the initial 0/0 size\n",
       "            // that occurs as the element is placed into the DOM, which should\n",
       "            // otherwise not happen due to the minimum size styling.\n",
       "            if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n",
       "                fig.request_resize(width, height);\n",
       "            }\n",
       "        }\n",
       "    });\n",
       "    this.resizeObserverInstance.observe(canvas_div);\n",
       "\n",
       "    function on_mouse_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.mouse_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousedown',\n",
       "        on_mouse_event_closure('button_press')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseup',\n",
       "        on_mouse_event_closure('button_release')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'dblclick',\n",
       "        on_mouse_event_closure('dblclick')\n",
       "    );\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousemove',\n",
       "        on_mouse_event_closure('motion_notify')\n",
       "    );\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseenter',\n",
       "        on_mouse_event_closure('figure_enter')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseleave',\n",
       "        on_mouse_event_closure('figure_leave')\n",
       "    );\n",
       "\n",
       "    canvas_div.addEventListener('wheel', function (event) {\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        on_mouse_event_closure('scroll')(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.appendChild(canvas);\n",
       "    canvas_div.appendChild(rubberband_canvas);\n",
       "\n",
       "    this.rubberband_context = rubberband_canvas.getContext('2d');\n",
       "    this.rubberband_context.strokeStyle = '#000000';\n",
       "\n",
       "    this._resize_canvas = function (width, height, forward) {\n",
       "        if (forward) {\n",
       "            canvas_div.style.width = width + 'px';\n",
       "            canvas_div.style.height = height + 'px';\n",
       "        }\n",
       "    };\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n",
       "        event.preventDefault();\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 toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'mpl-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'mpl-button-group';\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",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'mpl-button-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        var button = (fig.buttons[name] = document.createElement('button'));\n",
       "        button.classList = 'mpl-widget';\n",
       "        button.setAttribute('role', 'button');\n",
       "        button.setAttribute('aria-disabled', 'false');\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "\n",
       "        var icon_img = document.createElement('img');\n",
       "        icon_img.src = '_images/' + image + '.png';\n",
       "        icon_img.srcset = '_images/' + image + '_large.png 2x';\n",
       "        icon_img.alt = tooltip;\n",
       "        button.appendChild(icon_img);\n",
       "\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    var fmt_picker = document.createElement('select');\n",
       "    fmt_picker.classList = 'mpl-widget';\n",
       "    toolbar.appendChild(fmt_picker);\n",
       "    this.format_dropdown = fmt_picker;\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = document.createElement('option');\n",
       "        option.selected = fmt === mpl.default_extension;\n",
       "        option.innerHTML = fmt;\n",
       "        fmt_picker.appendChild(option);\n",
       "    }\n",
       "\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\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",
       "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",
       "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], msg['forward']);\n",
       "        fig.send_message('refresh', {});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n",
       "    var x0 = msg['x0'] / fig.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n",
       "    var x1 = msg['x1'] / fig.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / fig.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,\n",
       "        0,\n",
       "        fig.canvas.width / fig.ratio,\n",
       "        fig.canvas.height / fig.ratio\n",
       "    );\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",
       "    fig.rubberband_canvas.style.cursor = msg['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.handle_history_buttons = function (fig, msg) {\n",
       "    for (var key in msg) {\n",
       "        if (!(key in fig.buttons)) {\n",
       "            continue;\n",
       "        }\n",
       "        fig.buttons[key].disabled = !msg[key];\n",
       "        fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n",
       "    if (msg['mode'] === 'PAN') {\n",
       "        fig.buttons['Pan'].classList.add('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    } else if (msg['mode'] === 'ZOOM') {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.add('active');\n",
       "    } else {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    }\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",
       "            var img = evt.data;\n",
       "            if (img.type !== 'image/png') {\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",
       "                img.type = 'image/png';\n",
       "            }\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",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                img\n",
       "            );\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        } else if (\n",
       "            typeof evt.data === 'string' &&\n",
       "            evt.data.slice(0, 21) === 'data:image/png;base64'\n",
       "        ) {\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(\n",
       "                \"No handler for the '\" + msg_type + \"' message type: \",\n",
       "                msg\n",
       "            );\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(\n",
       "                    \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n",
       "                    e,\n",
       "                    e.stack,\n",
       "                    msg\n",
       "                );\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "};\n",
       "\n",
       "// from https://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",
       "    }\n",
       "    if (e.target) {\n",
       "        targ = e.target;\n",
       "    } else if (e.srcElement) {\n",
       "        targ = e.srcElement;\n",
       "    }\n",
       "    if (targ.nodeType === 3) {\n",
       "        // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "    }\n",
       "\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    var boundingRect = targ.getBoundingClientRect();\n",
       "    var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n",
       "    var y = e.pageY - (boundingRect.top + document.body.scrollTop);\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",
       " * https://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",
       "        }\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",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * this.ratio;\n",
       "    var y = canvas_pos.y * this.ratio;\n",
       "\n",
       "    this.send_message(name, {\n",
       "        x: x,\n",
       "        y: y,\n",
       "        button: event.button,\n",
       "        step: event.step,\n",
       "        guiEvent: simpleKeys(event),\n",
       "    });\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",
       "    // Prevent repeat events\n",
       "    if (name === 'key_press') {\n",
       "        if (event.key === this._key) {\n",
       "            return;\n",
       "        } else {\n",
       "            this._key = event.key;\n",
       "        }\n",
       "    }\n",
       "    if (name === 'key_release') {\n",
       "        this._key = null;\n",
       "    }\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.key !== 'Control') {\n",
       "        value += 'ctrl+';\n",
       "    }\n",
       "    else if (event.altKey && event.key !== 'Alt') {\n",
       "        value += 'alt+';\n",
       "    }\n",
       "    else if (event.shiftKey && event.key !== 'Shift') {\n",
       "        value += 'shift+';\n",
       "    }\n",
       "\n",
       "    value += 'k' + event.key;\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, { key: value, 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",
       "\n",
       "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n",
       "// prettier-ignore\n",
       "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";/* global mpl */\n",
       "\n",
       "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.binaryType = comm.kernel.ws.binaryType;\n",
       "    ws.readyState = comm.kernel.ws.readyState;\n",
       "    function updateReadyState(_event) {\n",
       "        if (comm.kernel.ws) {\n",
       "            ws.readyState = comm.kernel.ws.readyState;\n",
       "        } else {\n",
       "            ws.readyState = 3; // Closed state.\n",
       "        }\n",
       "    }\n",
       "    comm.kernel.ws.addEventListener('open', updateReadyState);\n",
       "    comm.kernel.ws.addEventListener('close', updateReadyState);\n",
       "    comm.kernel.ws.addEventListener('error', updateReadyState);\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",
       "        var data = msg['content']['data'];\n",
       "        if (data['blob'] !== undefined) {\n",
       "            data = {\n",
       "                data: new Blob(msg['buffers'], { type: data['blob'] }),\n",
       "            };\n",
       "        }\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(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 = document.getElementById(id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm);\n",
       "\n",
       "    function ondownload(figure, _format) {\n",
       "        window.open(figure.canvas.toDataURL());\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy, ondownload, element);\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;\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",
       "    fig.cell_info[0].output_area.element.on(\n",
       "        'cleared',\n",
       "        { fig: fig },\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function (fig, msg) {\n",
       "    var width = fig.canvas.width / fig.ratio;\n",
       "    fig.cell_info[0].output_area.element.off(\n",
       "        'cleared',\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "    fig.resizeObserverInstance.unobserve(fig.canvas_div);\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.innerHTML =\n",
       "        '<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 / this.ratio;\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] =\n",
       "        '<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 () {\n",
       "        fig.push_to_output();\n",
       "    }, 1000);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'btn-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'btn-group';\n",
       "    var button;\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",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'btn-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        button = fig.buttons[name] = document.createElement('button');\n",
       "        button.classList = 'btn btn-default';\n",
       "        button.href = '#';\n",
       "        button.title = name;\n",
       "        button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message pull-right';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = document.createElement('div');\n",
       "    buttongrp.classList = 'btn-group inline pull-right';\n",
       "    button = document.createElement('button');\n",
       "    button.classList = 'btn btn-mini btn-primary';\n",
       "    button.href = '#';\n",
       "    button.title = 'Stop Interaction';\n",
       "    button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n",
       "    button.addEventListener('click', function (_evt) {\n",
       "        fig.handle_close(fig, {});\n",
       "    });\n",
       "    button.addEventListener(\n",
       "        'mouseover',\n",
       "        on_mouseover_closure('Stop Interaction')\n",
       "    );\n",
       "    buttongrp.appendChild(button);\n",
       "    var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n",
       "    titlebar.insertBefore(buttongrp, titlebar.firstChild);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._remove_fig_handler = function (event) {\n",
       "    var fig = event.data.fig;\n",
       "    if (event.target !== this) {\n",
       "        // Ignore bubbled events from children.\n",
       "        return;\n",
       "    }\n",
       "    fig.close_ws(fig, {});\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (el) {\n",
       "    el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (el) {\n",
       "    // this is important to make the div 'focusable\n",
       "    el.setAttribute('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",
       "    } else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function (event, _name) {\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which === 13) {\n",
       "        this.canvas_div.blur();\n",
       "        // select the cell after this one\n",
       "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
       "        IPython.notebook.select(index + 1);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "};\n",
       "\n",
       "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(\n",
       "        'matplotlib',\n",
       "        mpl.mpl_figure_comm\n",
       "    );\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=\"350\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "96ee02d997dc40ed838114a2b6a2d72b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "interactive(children=(FloatSlider(value=0.5, description='i2n__bias_scaling', max=1.0), Output()), _dom_classe…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "params = {'i2n__hidden_layer_size': 50,\n",
    "          'n2n__hidden_layer_size': 50,\n",
    "          'i2n__input_activation': 'identity',\n",
    "          'i2n__input_scaling': 1.0,\n",
    "          'i2n__bias_scaling':  (0.0, 1.0, 0.1),\n",
    "          'n2n__spectral_radius': 0.9,\n",
    "          'n2n__leakage': 1.0,\n",
    "          'n2n__k_rec': 10,\n",
    "          'n2n__reservoir_activation': 'tanh',\n",
    "          'n2n__bidirectional': False\n",
    "         }\n",
    "\n",
    "build_visualization_widget(plot_func=my_custom_plot, estimator=Pipeline([(\"i2n\", InputToNode()),\n",
    "                                                                         (\"n2n\", NodeToNode())]),\n",
    "                           params=params, X=X.reshape(-1, 1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, let us observe the impact of the leakage. Leaky integration is the other way to incorporate past information\n",
    "into the reservoir. This works by keeping the previous reservoir states over a longer time.\n",
    "\n",
    "The leakage behaves in the same way for all nodes in the reservoir and acts like a low-pass filter. The magnitude is strongly damped, and all reservoir states are decaying exponentially over a longer time. Due to the spectral radius, all neurons have individual decaying times."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If we would like to incorporate future information into the reservoir, we can pass our input samples for- and backward\n",
    "through the reservoir. Therefore, we set bidirectional to True.\n",
    "\n",
    "We can see the clear effect of usind bidirectional ESNs:\n",
    "\n",
    "Because of the additional backward-pass, the number of reservoir states is doubled, and we can see that they decay in both, forward and backward direction. This is especially useful for some classification tasks."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "/* global mpl */\n",
       "window.mpl = {};\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(\n",
       "            '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",
       "\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 = document.createElement('div');\n",
       "    this.root.setAttribute('style', 'display: inline-block');\n",
       "    this._root_extra_style(this.root);\n",
       "\n",
       "    parent_element.appendChild(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 (fig.ratio !== 1) {\n",
       "            fig.send_message('set_device_pixel_ratio', {\n",
       "                device_pixel_ratio: fig.ratio,\n",
       "            });\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 = document.createElement('div');\n",
       "    titlebar.classList =\n",
       "        'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n",
       "    var titletext = document.createElement('div');\n",
       "    titletext.classList = 'ui-dialog-title';\n",
       "    titletext.setAttribute(\n",
       "        'style',\n",
       "        'width: 100%; text-align: center; padding: 3px;'\n",
       "    );\n",
       "    titlebar.appendChild(titletext);\n",
       "    this.root.appendChild(titlebar);\n",
       "    this.header = titletext;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = (this.canvas_div = document.createElement('div'));\n",
       "    canvas_div.setAttribute(\n",
       "        'style',\n",
       "        'border: 1px solid #ddd;' +\n",
       "            'box-sizing: content-box;' +\n",
       "            'clear: both;' +\n",
       "            'min-height: 1px;' +\n",
       "            'min-width: 1px;' +\n",
       "            'outline: 0;' +\n",
       "            'overflow: hidden;' +\n",
       "            'position: relative;' +\n",
       "            'resize: both;'\n",
       "    );\n",
       "\n",
       "    function on_keyboard_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.key_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    canvas_div.addEventListener(\n",
       "        'keydown',\n",
       "        on_keyboard_event_closure('key_press')\n",
       "    );\n",
       "    canvas_div.addEventListener(\n",
       "        'keyup',\n",
       "        on_keyboard_event_closure('key_release')\n",
       "    );\n",
       "\n",
       "    this._canvas_extra_style(canvas_div);\n",
       "    this.root.appendChild(canvas_div);\n",
       "\n",
       "    var canvas = (this.canvas = document.createElement('canvas'));\n",
       "    canvas.classList.add('mpl-canvas');\n",
       "    canvas.setAttribute('style', 'box-sizing: content-box;');\n",
       "\n",
       "    this.context = canvas.getContext('2d');\n",
       "\n",
       "    var backingStore =\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        this.context.webkitBackingStorePixelRatio ||\n",
       "        this.context.mozBackingStorePixelRatio ||\n",
       "        this.context.msBackingStorePixelRatio ||\n",
       "        this.context.oBackingStorePixelRatio ||\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        1;\n",
       "\n",
       "    this.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n",
       "        'canvas'\n",
       "    ));\n",
       "    rubberband_canvas.setAttribute(\n",
       "        'style',\n",
       "        'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n",
       "    );\n",
       "\n",
       "    // Apply a ponyfill if ResizeObserver is not implemented by browser.\n",
       "    if (this.ResizeObserver === undefined) {\n",
       "        if (window.ResizeObserver !== undefined) {\n",
       "            this.ResizeObserver = window.ResizeObserver;\n",
       "        } else {\n",
       "            var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n",
       "            this.ResizeObserver = obs.ResizeObserver;\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n",
       "        var nentries = entries.length;\n",
       "        for (var i = 0; i < nentries; i++) {\n",
       "            var entry = entries[i];\n",
       "            var width, height;\n",
       "            if (entry.contentBoxSize) {\n",
       "                if (entry.contentBoxSize instanceof Array) {\n",
       "                    // Chrome 84 implements new version of spec.\n",
       "                    width = entry.contentBoxSize[0].inlineSize;\n",
       "                    height = entry.contentBoxSize[0].blockSize;\n",
       "                } else {\n",
       "                    // Firefox implements old version of spec.\n",
       "                    width = entry.contentBoxSize.inlineSize;\n",
       "                    height = entry.contentBoxSize.blockSize;\n",
       "                }\n",
       "            } else {\n",
       "                // Chrome <84 implements even older version of spec.\n",
       "                width = entry.contentRect.width;\n",
       "                height = entry.contentRect.height;\n",
       "            }\n",
       "\n",
       "            // Keep the size of the canvas and rubber band canvas in sync with\n",
       "            // the canvas container.\n",
       "            if (entry.devicePixelContentBoxSize) {\n",
       "                // Chrome 84 implements new version of spec.\n",
       "                canvas.setAttribute(\n",
       "                    'width',\n",
       "                    entry.devicePixelContentBoxSize[0].inlineSize\n",
       "                );\n",
       "                canvas.setAttribute(\n",
       "                    'height',\n",
       "                    entry.devicePixelContentBoxSize[0].blockSize\n",
       "                );\n",
       "            } else {\n",
       "                canvas.setAttribute('width', width * fig.ratio);\n",
       "                canvas.setAttribute('height', height * fig.ratio);\n",
       "            }\n",
       "            canvas.setAttribute(\n",
       "                'style',\n",
       "                'width: ' + width + 'px; height: ' + height + 'px;'\n",
       "            );\n",
       "\n",
       "            rubberband_canvas.setAttribute('width', width);\n",
       "            rubberband_canvas.setAttribute('height', height);\n",
       "\n",
       "            // And update the size in Python. We ignore the initial 0/0 size\n",
       "            // that occurs as the element is placed into the DOM, which should\n",
       "            // otherwise not happen due to the minimum size styling.\n",
       "            if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n",
       "                fig.request_resize(width, height);\n",
       "            }\n",
       "        }\n",
       "    });\n",
       "    this.resizeObserverInstance.observe(canvas_div);\n",
       "\n",
       "    function on_mouse_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.mouse_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousedown',\n",
       "        on_mouse_event_closure('button_press')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseup',\n",
       "        on_mouse_event_closure('button_release')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'dblclick',\n",
       "        on_mouse_event_closure('dblclick')\n",
       "    );\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousemove',\n",
       "        on_mouse_event_closure('motion_notify')\n",
       "    );\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseenter',\n",
       "        on_mouse_event_closure('figure_enter')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseleave',\n",
       "        on_mouse_event_closure('figure_leave')\n",
       "    );\n",
       "\n",
       "    canvas_div.addEventListener('wheel', function (event) {\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        on_mouse_event_closure('scroll')(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.appendChild(canvas);\n",
       "    canvas_div.appendChild(rubberband_canvas);\n",
       "\n",
       "    this.rubberband_context = rubberband_canvas.getContext('2d');\n",
       "    this.rubberband_context.strokeStyle = '#000000';\n",
       "\n",
       "    this._resize_canvas = function (width, height, forward) {\n",
       "        if (forward) {\n",
       "            canvas_div.style.width = width + 'px';\n",
       "            canvas_div.style.height = height + 'px';\n",
       "        }\n",
       "    };\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n",
       "        event.preventDefault();\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 toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'mpl-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'mpl-button-group';\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",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'mpl-button-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        var button = (fig.buttons[name] = document.createElement('button'));\n",
       "        button.classList = 'mpl-widget';\n",
       "        button.setAttribute('role', 'button');\n",
       "        button.setAttribute('aria-disabled', 'false');\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "\n",
       "        var icon_img = document.createElement('img');\n",
       "        icon_img.src = '_images/' + image + '.png';\n",
       "        icon_img.srcset = '_images/' + image + '_large.png 2x';\n",
       "        icon_img.alt = tooltip;\n",
       "        button.appendChild(icon_img);\n",
       "\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    var fmt_picker = document.createElement('select');\n",
       "    fmt_picker.classList = 'mpl-widget';\n",
       "    toolbar.appendChild(fmt_picker);\n",
       "    this.format_dropdown = fmt_picker;\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = document.createElement('option');\n",
       "        option.selected = fmt === mpl.default_extension;\n",
       "        option.innerHTML = fmt;\n",
       "        fmt_picker.appendChild(option);\n",
       "    }\n",
       "\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\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",
       "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",
       "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], msg['forward']);\n",
       "        fig.send_message('refresh', {});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n",
       "    var x0 = msg['x0'] / fig.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n",
       "    var x1 = msg['x1'] / fig.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / fig.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,\n",
       "        0,\n",
       "        fig.canvas.width / fig.ratio,\n",
       "        fig.canvas.height / fig.ratio\n",
       "    );\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",
       "    fig.rubberband_canvas.style.cursor = msg['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.handle_history_buttons = function (fig, msg) {\n",
       "    for (var key in msg) {\n",
       "        if (!(key in fig.buttons)) {\n",
       "            continue;\n",
       "        }\n",
       "        fig.buttons[key].disabled = !msg[key];\n",
       "        fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n",
       "    if (msg['mode'] === 'PAN') {\n",
       "        fig.buttons['Pan'].classList.add('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    } else if (msg['mode'] === 'ZOOM') {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.add('active');\n",
       "    } else {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    }\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",
       "            var img = evt.data;\n",
       "            if (img.type !== 'image/png') {\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",
       "                img.type = 'image/png';\n",
       "            }\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",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                img\n",
       "            );\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        } else if (\n",
       "            typeof evt.data === 'string' &&\n",
       "            evt.data.slice(0, 21) === 'data:image/png;base64'\n",
       "        ) {\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(\n",
       "                \"No handler for the '\" + msg_type + \"' message type: \",\n",
       "                msg\n",
       "            );\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(\n",
       "                    \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n",
       "                    e,\n",
       "                    e.stack,\n",
       "                    msg\n",
       "                );\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "};\n",
       "\n",
       "// from https://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",
       "    }\n",
       "    if (e.target) {\n",
       "        targ = e.target;\n",
       "    } else if (e.srcElement) {\n",
       "        targ = e.srcElement;\n",
       "    }\n",
       "    if (targ.nodeType === 3) {\n",
       "        // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "    }\n",
       "\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    var boundingRect = targ.getBoundingClientRect();\n",
       "    var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n",
       "    var y = e.pageY - (boundingRect.top + document.body.scrollTop);\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",
       " * https://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",
       "        }\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",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * this.ratio;\n",
       "    var y = canvas_pos.y * this.ratio;\n",
       "\n",
       "    this.send_message(name, {\n",
       "        x: x,\n",
       "        y: y,\n",
       "        button: event.button,\n",
       "        step: event.step,\n",
       "        guiEvent: simpleKeys(event),\n",
       "    });\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",
       "    // Prevent repeat events\n",
       "    if (name === 'key_press') {\n",
       "        if (event.key === this._key) {\n",
       "            return;\n",
       "        } else {\n",
       "            this._key = event.key;\n",
       "        }\n",
       "    }\n",
       "    if (name === 'key_release') {\n",
       "        this._key = null;\n",
       "    }\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.key !== 'Control') {\n",
       "        value += 'ctrl+';\n",
       "    }\n",
       "    else if (event.altKey && event.key !== 'Alt') {\n",
       "        value += 'alt+';\n",
       "    }\n",
       "    else if (event.shiftKey && event.key !== 'Shift') {\n",
       "        value += 'shift+';\n",
       "    }\n",
       "\n",
       "    value += 'k' + event.key;\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, { key: value, 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",
       "\n",
       "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n",
       "// prettier-ignore\n",
       "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";/* global mpl */\n",
       "\n",
       "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.binaryType = comm.kernel.ws.binaryType;\n",
       "    ws.readyState = comm.kernel.ws.readyState;\n",
       "    function updateReadyState(_event) {\n",
       "        if (comm.kernel.ws) {\n",
       "            ws.readyState = comm.kernel.ws.readyState;\n",
       "        } else {\n",
       "            ws.readyState = 3; // Closed state.\n",
       "        }\n",
       "    }\n",
       "    comm.kernel.ws.addEventListener('open', updateReadyState);\n",
       "    comm.kernel.ws.addEventListener('close', updateReadyState);\n",
       "    comm.kernel.ws.addEventListener('error', updateReadyState);\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",
       "        var data = msg['content']['data'];\n",
       "        if (data['blob'] !== undefined) {\n",
       "            data = {\n",
       "                data: new Blob(msg['buffers'], { type: data['blob'] }),\n",
       "            };\n",
       "        }\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(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 = document.getElementById(id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm);\n",
       "\n",
       "    function ondownload(figure, _format) {\n",
       "        window.open(figure.canvas.toDataURL());\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy, ondownload, element);\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;\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",
       "    fig.cell_info[0].output_area.element.on(\n",
       "        'cleared',\n",
       "        { fig: fig },\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function (fig, msg) {\n",
       "    var width = fig.canvas.width / fig.ratio;\n",
       "    fig.cell_info[0].output_area.element.off(\n",
       "        'cleared',\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "    fig.resizeObserverInstance.unobserve(fig.canvas_div);\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.innerHTML =\n",
       "        '<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 / this.ratio;\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] =\n",
       "        '<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 () {\n",
       "        fig.push_to_output();\n",
       "    }, 1000);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'btn-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'btn-group';\n",
       "    var button;\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",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'btn-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        button = fig.buttons[name] = document.createElement('button');\n",
       "        button.classList = 'btn btn-default';\n",
       "        button.href = '#';\n",
       "        button.title = name;\n",
       "        button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message pull-right';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = document.createElement('div');\n",
       "    buttongrp.classList = 'btn-group inline pull-right';\n",
       "    button = document.createElement('button');\n",
       "    button.classList = 'btn btn-mini btn-primary';\n",
       "    button.href = '#';\n",
       "    button.title = 'Stop Interaction';\n",
       "    button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n",
       "    button.addEventListener('click', function (_evt) {\n",
       "        fig.handle_close(fig, {});\n",
       "    });\n",
       "    button.addEventListener(\n",
       "        'mouseover',\n",
       "        on_mouseover_closure('Stop Interaction')\n",
       "    );\n",
       "    buttongrp.appendChild(button);\n",
       "    var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n",
       "    titlebar.insertBefore(buttongrp, titlebar.firstChild);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._remove_fig_handler = function (event) {\n",
       "    var fig = event.data.fig;\n",
       "    if (event.target !== this) {\n",
       "        // Ignore bubbled events from children.\n",
       "        return;\n",
       "    }\n",
       "    fig.close_ws(fig, {});\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (el) {\n",
       "    el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (el) {\n",
       "    // this is important to make the div 'focusable\n",
       "    el.setAttribute('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",
       "    } else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function (event, _name) {\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which === 13) {\n",
       "        this.canvas_div.blur();\n",
       "        // select the cell after this one\n",
       "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
       "        IPython.notebook.select(index + 1);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "};\n",
       "\n",
       "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(\n",
       "        'matplotlib',\n",
       "        mpl.mpl_figure_comm\n",
       "    );\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=\"350\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "fa8385292acd4124a3dcc9069aa1c9a3",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "interactive(children=(Dropdown(description='n2n__bidirectional', options=(False, True), value=False), Output()…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "params = {'i2n__hidden_layer_size': 50,\n",
    "          'n2n__hidden_layer_size': 50,\n",
    "          'i2n__input_activation': 'identity',\n",
    "          'i2n__input_scaling': 1.0,\n",
    "          'i2n__bias_scaling':  0.0,\n",
    "          'n2n__spectral_radius': 0.9,\n",
    "          'n2n__leakage': 1.0,\n",
    "          'n2n__k_rec': 10,\n",
    "          'n2n__reservoir_activation': 'tanh',\n",
    "          'n2n__bidirectional': [False, True]\n",
    "         }\n",
    "\n",
    "build_visualization_widget(plot_func=my_custom_plot, estimator=Pipeline([(\"i2n\", InputToNode()),\n",
    "                                                                         (\"n2n\", NodeToNode())]),\n",
    "                           params=params, X=X.reshape(-1, 1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Try to play around with all these hyper-parameters!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "/* global mpl */\n",
       "window.mpl = {};\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(\n",
       "            '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",
       "\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 = document.createElement('div');\n",
       "    this.root.setAttribute('style', 'display: inline-block');\n",
       "    this._root_extra_style(this.root);\n",
       "\n",
       "    parent_element.appendChild(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 (fig.ratio !== 1) {\n",
       "            fig.send_message('set_device_pixel_ratio', {\n",
       "                device_pixel_ratio: fig.ratio,\n",
       "            });\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 = document.createElement('div');\n",
       "    titlebar.classList =\n",
       "        'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n",
       "    var titletext = document.createElement('div');\n",
       "    titletext.classList = 'ui-dialog-title';\n",
       "    titletext.setAttribute(\n",
       "        'style',\n",
       "        'width: 100%; text-align: center; padding: 3px;'\n",
       "    );\n",
       "    titlebar.appendChild(titletext);\n",
       "    this.root.appendChild(titlebar);\n",
       "    this.header = titletext;\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n",
       "\n",
       "mpl.figure.prototype._init_canvas = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var canvas_div = (this.canvas_div = document.createElement('div'));\n",
       "    canvas_div.setAttribute(\n",
       "        'style',\n",
       "        'border: 1px solid #ddd;' +\n",
       "            'box-sizing: content-box;' +\n",
       "            'clear: both;' +\n",
       "            'min-height: 1px;' +\n",
       "            'min-width: 1px;' +\n",
       "            'outline: 0;' +\n",
       "            'overflow: hidden;' +\n",
       "            'position: relative;' +\n",
       "            'resize: both;'\n",
       "    );\n",
       "\n",
       "    function on_keyboard_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.key_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    canvas_div.addEventListener(\n",
       "        'keydown',\n",
       "        on_keyboard_event_closure('key_press')\n",
       "    );\n",
       "    canvas_div.addEventListener(\n",
       "        'keyup',\n",
       "        on_keyboard_event_closure('key_release')\n",
       "    );\n",
       "\n",
       "    this._canvas_extra_style(canvas_div);\n",
       "    this.root.appendChild(canvas_div);\n",
       "\n",
       "    var canvas = (this.canvas = document.createElement('canvas'));\n",
       "    canvas.classList.add('mpl-canvas');\n",
       "    canvas.setAttribute('style', 'box-sizing: content-box;');\n",
       "\n",
       "    this.context = canvas.getContext('2d');\n",
       "\n",
       "    var backingStore =\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        this.context.webkitBackingStorePixelRatio ||\n",
       "        this.context.mozBackingStorePixelRatio ||\n",
       "        this.context.msBackingStorePixelRatio ||\n",
       "        this.context.oBackingStorePixelRatio ||\n",
       "        this.context.backingStorePixelRatio ||\n",
       "        1;\n",
       "\n",
       "    this.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n",
       "        'canvas'\n",
       "    ));\n",
       "    rubberband_canvas.setAttribute(\n",
       "        'style',\n",
       "        'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n",
       "    );\n",
       "\n",
       "    // Apply a ponyfill if ResizeObserver is not implemented by browser.\n",
       "    if (this.ResizeObserver === undefined) {\n",
       "        if (window.ResizeObserver !== undefined) {\n",
       "            this.ResizeObserver = window.ResizeObserver;\n",
       "        } else {\n",
       "            var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n",
       "            this.ResizeObserver = obs.ResizeObserver;\n",
       "        }\n",
       "    }\n",
       "\n",
       "    this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n",
       "        var nentries = entries.length;\n",
       "        for (var i = 0; i < nentries; i++) {\n",
       "            var entry = entries[i];\n",
       "            var width, height;\n",
       "            if (entry.contentBoxSize) {\n",
       "                if (entry.contentBoxSize instanceof Array) {\n",
       "                    // Chrome 84 implements new version of spec.\n",
       "                    width = entry.contentBoxSize[0].inlineSize;\n",
       "                    height = entry.contentBoxSize[0].blockSize;\n",
       "                } else {\n",
       "                    // Firefox implements old version of spec.\n",
       "                    width = entry.contentBoxSize.inlineSize;\n",
       "                    height = entry.contentBoxSize.blockSize;\n",
       "                }\n",
       "            } else {\n",
       "                // Chrome <84 implements even older version of spec.\n",
       "                width = entry.contentRect.width;\n",
       "                height = entry.contentRect.height;\n",
       "            }\n",
       "\n",
       "            // Keep the size of the canvas and rubber band canvas in sync with\n",
       "            // the canvas container.\n",
       "            if (entry.devicePixelContentBoxSize) {\n",
       "                // Chrome 84 implements new version of spec.\n",
       "                canvas.setAttribute(\n",
       "                    'width',\n",
       "                    entry.devicePixelContentBoxSize[0].inlineSize\n",
       "                );\n",
       "                canvas.setAttribute(\n",
       "                    'height',\n",
       "                    entry.devicePixelContentBoxSize[0].blockSize\n",
       "                );\n",
       "            } else {\n",
       "                canvas.setAttribute('width', width * fig.ratio);\n",
       "                canvas.setAttribute('height', height * fig.ratio);\n",
       "            }\n",
       "            canvas.setAttribute(\n",
       "                'style',\n",
       "                'width: ' + width + 'px; height: ' + height + 'px;'\n",
       "            );\n",
       "\n",
       "            rubberband_canvas.setAttribute('width', width);\n",
       "            rubberband_canvas.setAttribute('height', height);\n",
       "\n",
       "            // And update the size in Python. We ignore the initial 0/0 size\n",
       "            // that occurs as the element is placed into the DOM, which should\n",
       "            // otherwise not happen due to the minimum size styling.\n",
       "            if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n",
       "                fig.request_resize(width, height);\n",
       "            }\n",
       "        }\n",
       "    });\n",
       "    this.resizeObserverInstance.observe(canvas_div);\n",
       "\n",
       "    function on_mouse_event_closure(name) {\n",
       "        return function (event) {\n",
       "            return fig.mouse_event(event, name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousedown',\n",
       "        on_mouse_event_closure('button_press')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseup',\n",
       "        on_mouse_event_closure('button_release')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'dblclick',\n",
       "        on_mouse_event_closure('dblclick')\n",
       "    );\n",
       "    // Throttle sequential mouse events to 1 every 20ms.\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mousemove',\n",
       "        on_mouse_event_closure('motion_notify')\n",
       "    );\n",
       "\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseenter',\n",
       "        on_mouse_event_closure('figure_enter')\n",
       "    );\n",
       "    rubberband_canvas.addEventListener(\n",
       "        'mouseleave',\n",
       "        on_mouse_event_closure('figure_leave')\n",
       "    );\n",
       "\n",
       "    canvas_div.addEventListener('wheel', function (event) {\n",
       "        if (event.deltaY < 0) {\n",
       "            event.step = 1;\n",
       "        } else {\n",
       "            event.step = -1;\n",
       "        }\n",
       "        on_mouse_event_closure('scroll')(event);\n",
       "    });\n",
       "\n",
       "    canvas_div.appendChild(canvas);\n",
       "    canvas_div.appendChild(rubberband_canvas);\n",
       "\n",
       "    this.rubberband_context = rubberband_canvas.getContext('2d');\n",
       "    this.rubberband_context.strokeStyle = '#000000';\n",
       "\n",
       "    this._resize_canvas = function (width, height, forward) {\n",
       "        if (forward) {\n",
       "            canvas_div.style.width = width + 'px';\n",
       "            canvas_div.style.height = height + 'px';\n",
       "        }\n",
       "    };\n",
       "\n",
       "    // Disable right mouse context menu.\n",
       "    this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n",
       "        event.preventDefault();\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 toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'mpl-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'mpl-button-group';\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",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'mpl-button-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        var button = (fig.buttons[name] = document.createElement('button'));\n",
       "        button.classList = 'mpl-widget';\n",
       "        button.setAttribute('role', 'button');\n",
       "        button.setAttribute('aria-disabled', 'false');\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "\n",
       "        var icon_img = document.createElement('img');\n",
       "        icon_img.src = '_images/' + image + '.png';\n",
       "        icon_img.srcset = '_images/' + image + '_large.png 2x';\n",
       "        icon_img.alt = tooltip;\n",
       "        button.appendChild(icon_img);\n",
       "\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    var fmt_picker = document.createElement('select');\n",
       "    fmt_picker.classList = 'mpl-widget';\n",
       "    toolbar.appendChild(fmt_picker);\n",
       "    this.format_dropdown = fmt_picker;\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = document.createElement('option');\n",
       "        option.selected = fmt === mpl.default_extension;\n",
       "        option.innerHTML = fmt;\n",
       "        fmt_picker.appendChild(option);\n",
       "    }\n",
       "\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\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",
       "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",
       "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], msg['forward']);\n",
       "        fig.send_message('refresh', {});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n",
       "    var x0 = msg['x0'] / fig.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n",
       "    var x1 = msg['x1'] / fig.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / fig.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,\n",
       "        0,\n",
       "        fig.canvas.width / fig.ratio,\n",
       "        fig.canvas.height / fig.ratio\n",
       "    );\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",
       "    fig.rubberband_canvas.style.cursor = msg['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.handle_history_buttons = function (fig, msg) {\n",
       "    for (var key in msg) {\n",
       "        if (!(key in fig.buttons)) {\n",
       "            continue;\n",
       "        }\n",
       "        fig.buttons[key].disabled = !msg[key];\n",
       "        fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n",
       "    if (msg['mode'] === 'PAN') {\n",
       "        fig.buttons['Pan'].classList.add('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    } else if (msg['mode'] === 'ZOOM') {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.add('active');\n",
       "    } else {\n",
       "        fig.buttons['Pan'].classList.remove('active');\n",
       "        fig.buttons['Zoom'].classList.remove('active');\n",
       "    }\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",
       "            var img = evt.data;\n",
       "            if (img.type !== 'image/png') {\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",
       "                img.type = 'image/png';\n",
       "            }\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",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                img\n",
       "            );\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        } else if (\n",
       "            typeof evt.data === 'string' &&\n",
       "            evt.data.slice(0, 21) === 'data:image/png;base64'\n",
       "        ) {\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(\n",
       "                \"No handler for the '\" + msg_type + \"' message type: \",\n",
       "                msg\n",
       "            );\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(\n",
       "                    \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n",
       "                    e,\n",
       "                    e.stack,\n",
       "                    msg\n",
       "                );\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "};\n",
       "\n",
       "// from https://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",
       "    }\n",
       "    if (e.target) {\n",
       "        targ = e.target;\n",
       "    } else if (e.srcElement) {\n",
       "        targ = e.srcElement;\n",
       "    }\n",
       "    if (targ.nodeType === 3) {\n",
       "        // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "    }\n",
       "\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    var boundingRect = targ.getBoundingClientRect();\n",
       "    var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n",
       "    var y = e.pageY - (boundingRect.top + document.body.scrollTop);\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",
       " * https://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",
       "        }\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",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * this.ratio;\n",
       "    var y = canvas_pos.y * this.ratio;\n",
       "\n",
       "    this.send_message(name, {\n",
       "        x: x,\n",
       "        y: y,\n",
       "        button: event.button,\n",
       "        step: event.step,\n",
       "        guiEvent: simpleKeys(event),\n",
       "    });\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",
       "    // Prevent repeat events\n",
       "    if (name === 'key_press') {\n",
       "        if (event.key === this._key) {\n",
       "            return;\n",
       "        } else {\n",
       "            this._key = event.key;\n",
       "        }\n",
       "    }\n",
       "    if (name === 'key_release') {\n",
       "        this._key = null;\n",
       "    }\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.key !== 'Control') {\n",
       "        value += 'ctrl+';\n",
       "    }\n",
       "    else if (event.altKey && event.key !== 'Alt') {\n",
       "        value += 'alt+';\n",
       "    }\n",
       "    else if (event.shiftKey && event.key !== 'Shift') {\n",
       "        value += 'shift+';\n",
       "    }\n",
       "\n",
       "    value += 'k' + event.key;\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, { key: value, 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",
       "\n",
       "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n",
       "// prettier-ignore\n",
       "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";/* global mpl */\n",
       "\n",
       "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.binaryType = comm.kernel.ws.binaryType;\n",
       "    ws.readyState = comm.kernel.ws.readyState;\n",
       "    function updateReadyState(_event) {\n",
       "        if (comm.kernel.ws) {\n",
       "            ws.readyState = comm.kernel.ws.readyState;\n",
       "        } else {\n",
       "            ws.readyState = 3; // Closed state.\n",
       "        }\n",
       "    }\n",
       "    comm.kernel.ws.addEventListener('open', updateReadyState);\n",
       "    comm.kernel.ws.addEventListener('close', updateReadyState);\n",
       "    comm.kernel.ws.addEventListener('error', updateReadyState);\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",
       "        var data = msg['content']['data'];\n",
       "        if (data['blob'] !== undefined) {\n",
       "            data = {\n",
       "                data: new Blob(msg['buffers'], { type: data['blob'] }),\n",
       "            };\n",
       "        }\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(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 = document.getElementById(id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm);\n",
       "\n",
       "    function ondownload(figure, _format) {\n",
       "        window.open(figure.canvas.toDataURL());\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy, ondownload, element);\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;\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",
       "    fig.cell_info[0].output_area.element.on(\n",
       "        'cleared',\n",
       "        { fig: fig },\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function (fig, msg) {\n",
       "    var width = fig.canvas.width / fig.ratio;\n",
       "    fig.cell_info[0].output_area.element.off(\n",
       "        'cleared',\n",
       "        fig._remove_fig_handler\n",
       "    );\n",
       "    fig.resizeObserverInstance.unobserve(fig.canvas_div);\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.innerHTML =\n",
       "        '<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 / this.ratio;\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] =\n",
       "        '<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 () {\n",
       "        fig.push_to_output();\n",
       "    }, 1000);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function () {\n",
       "    var fig = this;\n",
       "\n",
       "    var toolbar = document.createElement('div');\n",
       "    toolbar.classList = 'btn-toolbar';\n",
       "    this.root.appendChild(toolbar);\n",
       "\n",
       "    function on_click_closure(name) {\n",
       "        return function (_event) {\n",
       "            return fig.toolbar_button_onclick(name);\n",
       "        };\n",
       "    }\n",
       "\n",
       "    function on_mouseover_closure(tooltip) {\n",
       "        return function (event) {\n",
       "            if (!event.currentTarget.disabled) {\n",
       "                return fig.toolbar_button_onmouseover(tooltip);\n",
       "            }\n",
       "        };\n",
       "    }\n",
       "\n",
       "    fig.buttons = {};\n",
       "    var buttonGroup = document.createElement('div');\n",
       "    buttonGroup.classList = 'btn-group';\n",
       "    var button;\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",
       "            /* Instead of a spacer, we start a new button group. */\n",
       "            if (buttonGroup.hasChildNodes()) {\n",
       "                toolbar.appendChild(buttonGroup);\n",
       "            }\n",
       "            buttonGroup = document.createElement('div');\n",
       "            buttonGroup.classList = 'btn-group';\n",
       "            continue;\n",
       "        }\n",
       "\n",
       "        button = fig.buttons[name] = document.createElement('button');\n",
       "        button.classList = 'btn btn-default';\n",
       "        button.href = '#';\n",
       "        button.title = name;\n",
       "        button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n",
       "        button.addEventListener('click', on_click_closure(method_name));\n",
       "        button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n",
       "        buttonGroup.appendChild(button);\n",
       "    }\n",
       "\n",
       "    if (buttonGroup.hasChildNodes()) {\n",
       "        toolbar.appendChild(buttonGroup);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = document.createElement('span');\n",
       "    status_bar.classList = 'mpl-message pull-right';\n",
       "    toolbar.appendChild(status_bar);\n",
       "    this.message = status_bar;\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = document.createElement('div');\n",
       "    buttongrp.classList = 'btn-group inline pull-right';\n",
       "    button = document.createElement('button');\n",
       "    button.classList = 'btn btn-mini btn-primary';\n",
       "    button.href = '#';\n",
       "    button.title = 'Stop Interaction';\n",
       "    button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n",
       "    button.addEventListener('click', function (_evt) {\n",
       "        fig.handle_close(fig, {});\n",
       "    });\n",
       "    button.addEventListener(\n",
       "        'mouseover',\n",
       "        on_mouseover_closure('Stop Interaction')\n",
       "    );\n",
       "    buttongrp.appendChild(button);\n",
       "    var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n",
       "    titlebar.insertBefore(buttongrp, titlebar.firstChild);\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._remove_fig_handler = function (event) {\n",
       "    var fig = event.data.fig;\n",
       "    if (event.target !== this) {\n",
       "        // Ignore bubbled events from children.\n",
       "        return;\n",
       "    }\n",
       "    fig.close_ws(fig, {});\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function (el) {\n",
       "    el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function (el) {\n",
       "    // this is important to make the div 'focusable\n",
       "    el.setAttribute('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",
       "    } else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function (event, _name) {\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which === 13) {\n",
       "        this.canvas_div.blur();\n",
       "        // select the cell after this one\n",
       "        var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n",
       "        IPython.notebook.select(index + 1);\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_save = function (fig, _msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "};\n",
       "\n",
       "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(\n",
       "        'matplotlib',\n",
       "        mpl.mpl_figure_comm\n",
       "    );\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArAAAAJ2CAYAAACn9bEfAAAgAElEQVR4Xux9dYCdxdX+uS7rHicOlECKe/FixV2CFC1StND+gBYoUlqkWCnWDy/aIimFUqTFimuQAAnxZF2vy+/O++ayd+aczd69ezebDc/88fF1MnLeZ+ad99lzzzPHkc4UQgECQAAIAAEgAASAABAAAiMEAQcI7AhZKZgJBIAAEAACQAAIAAEgYCEAAouNAASAABAAAkAACAABIDCiEACBHVHLBWOBABAAAkAACAABIAAEQGCxB4AAEAACQAAIAAEgAARGFAIgsCNquWAsEAACQAAIAAEgAASAAAgs9gAQAAJAAAgAASAABIDAiEIABHZELReMBQJAAAgAASAABIAAEACBxR4AAkAACAABIAAEgAAQGFEIgMCOqOWCsUAACAABIAAEgAAQAAIgsNgDQAAIAAEgAASAABAAAiMKARDYEbVcMBYIAAEgAASAABAAAkAABBZ7AAgAASAABIAAEAACQGBEIQACO6KWC8YCASAABIAAEAACQAAIgMBiDwABIAAEgAAQAAJAAAiMKARAYEfUcsFYIAAEgAAQAAJAAAgAARBY7AEgAASAABAAAkAACACBEYUACOyIWi4YCwSAABAAAkAACAABIAACiz0ABIAAEAACQAAIAAEgMKIQAIEdUcsFY4EAEAACQAAIAAEgAARAYLEHgAAQAAJAAAgAASAABEYUAiCwI2q5YCwQAAJAAAgAASAABIAACCz2ABAAAkAACAABIAAEgMCIQgAEdkQtF4wFAkAACAABIAAEgAAQAIHFHgACQAAIAAEgAASAABAYUQiAwI6o5YKxQAAIAAEgAASAABAAAiCw2ANAAAgAASAABIAAEAACIwoBENgRtVwwFggAASAABIAAEAACQAAEFnsACAABIAAEgAAQAAJAYEQhAAI7opYLxgIBIAAEgAAQAAJAAAiAwGIPAAEgAASAABAAAkAACIwoBEBgR9RywVggAASAABAAAkAACAABEFjsASAABIAAEAACQAAIAIERhQAI7IhaLhgLBIAAEAACQAAIAAEgAAKLPQAEgAAQAAJAAAgAASAwohAAgR1RywVjgQAQAAJAAAgAASAABEBgsQeAABAAAkAACAABIAAERhQCILAjarlgLBAAAkAACAABIAAEgAAILPYAEAACQAAIAAEgAASAwIhCAAR2RC0XjAUCQAAIAAEgAASAABAAgcUeAAJAAAgAASAABIAAEBhRCIDAjqjlgrFAAAgAASAABIAAEAACILDYA0AACAABIAAEgAAQAAIjCgEQ2BG1XDAWCAABIAAEgAAQAAJAAAQWewAIAAEgAASAABAAAkBgRCEAAjuilgvGAgEgAASAABAAAkAACIDAYg8AASAABIAAEAACQAAIjCgEQGBH1HLBWCAABIAAEAACQAAIAAEQWOwBIAAEgAAQAAJAAAgAgRGFAAjsiFouGAsEgAAQAAJAAAgAASAAAos9AASAABAAAkAACAABIDCiEACBHVHLBWOBABAAAkAACAABIAAEQGCxB4AAEAACQAAIAAEgAARGFAIgsCNquWAsEAACQAAIAAEgAASAAAgs9gAQAAJAAAgAASAABIDAiEIABHZELReMBQJAAAgAASAABIAAEACBxR4AAkAACAABIAAEgAAQGFEIgMCOqOWCsUAACAABIAAEgAAQAAIgsNgDQAAIAAEgAASAABAAAiMKARDYEbVcMBYIAAEgAASAABAAAkAABBZ7AAgAASAABIAAEAACQGBEIQACO6KWC8YCASAABIAAEAACQAAIgMBiDwABIAAEgAAQAAJAAAiMKARAYEfUcsFYIAAEgAAQAAJAAAgAARBY7AEgAASAABAAAkAACACBEYUACOyIWi4YCwSAABAAAkAACAABIAACiz0ABIAAEAACQAAIAAEgMKIQAIEdUcsFY4EAEAACQAAIAAEgAARAYLEHgAAQAAJAAAgAASCwliLw7bff0v7770+HHHIIXXTRRQN6yhUrVtCf/vQneuONN2j58uVUW1tLO++8M51++ulUXV0tjvXJJ59YfT799FPq7Oyk8ePH03777UfHHXcceTyeAc2/qsYgsEWDEgMBASAABIAAEAACQGDNQaC5uZmOOeYY+uabb6z/DoTALly4kI488khqamqi6dOn06RJk+izzz6jRYsWUUNDAz3yyCM0evRo7WFffPFF+vnPf06pVIo222wzKi8vp3feeYc6Ojpo6623pjvvvLNoJBYE1thn8+fPp1tvvZXee+89amlpoVGjRtGee+5JJ598MpWUlKw5uxKWAAEgAASAABAAAkCgDwQ+//xzOuuss2jBggVWi4ES2COOOILef/99OvPMM+mMM86wxkgmk3T55ZfTww8/TD/60Y8sQpot7e3tlnc2FovRHXfcQdtss431T6pecaiPPvqIzj//fDrppJOKsmYgsDkwfvzxx3TsscdSKBSimTNnWuRVLV72r4+HHnqIysrKigI8BgECQAAIAAEgAASAQLERUN5ORSDvu+8+i0yOGzeOFi9ePCACq7ymRx99NE2ePJn+8Y9/kNPp/M7MeDxOP/7xj2np0qXWv02dOtX6t1tuuYVuvvlmOvTQQ+m3v/2t9ljKA7zXXntRXV0d/fe//9XGK/T5QWBXIqcWZPfdd6clS5bQ7373OzrggAOsf4lEInTOOefQSy+9ROqvkUsvvbRQrNEPCAABIAAEgAAQAAJDioAikYpMKifcb37zG5ozZ471vwfigf39739Pd999t+U5Pe+885i9V1xxBd1///3Wv6k2qhx88MGk4l/vuusu2n777VmfffbZh+bOnUuPPvqo5SQcbAGBXYngk08+SRdeeCFtu+229Je//EXDta2tzXKLK5KrAplVTAcKEAACQAAIAAEgAATWNAQee+wx6urqsuJX/X6/5RUdKIE98cQT6dVXX6XrrruOfvKTn7BHVCEEihyrf1NtVFGkVDn9VL/6+nrW59xzz7U8tso7q7y0gy0gsCsRVHEizz33HF122WV0+OGHM1xPPfVUevnll+mGG26w3OAoQAAIAAEgAASAABBY0xEohMBmvaUPPPAAbb755uwRlVjrtNNOoy233NIKVVBxrur/V6EGKvZWKldffTXdc889WkztYLADgV2JnhJqzZs3zwpM3njjjRmm6i8MFVOiiKwKKUABAkAACAABIAAEgMBgEWhtbbWunPrjH/+Y91DKgyk526QBCiGwu+66q3XbwOOPP04bbrghG/b111+nn/70p9a/qTbLli2jHXfckYLBIH3wwQficygH4J///Gc64YQT6IILLsj7WftqCAK7EplNNtmEenp6LC/rmDFjGF7qL4wrr7ySDjzwQFJ/RaAAASAABIAAEAACQKAYCCgCe9BBB+U9lLoVQN0OkE8phMAqTZC6P7Y/ArvBBhvQ3/72N1L3xapbCfIhsIr4qpDNwRYQ2JUIrr/++ta9ZW+++aZ4Oa8KOr7kkktojz32oBtvvHGwuKM/EAACQAAIAAEgMEIQCEWi9MX85UW3dr1Joyjo91n3tP7iF7/Ie/yh9sAqZ50Sfz344IPW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\" width=\"688\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "85a99564ee8d4277bbaff43034841d18",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "interactive(children=(FloatSlider(value=0.5, description='i2n__input_scaling', max=1.0, min=0.1), FloatSlider(…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "params = {'i2n__hidden_layer_size': 50,\n",
    "          'n2n__hidden_layer_size': 50,\n",
    "          'i2n__input_activation': 'identity',\n",
    "          'i2n__input_scaling': (0.1, 1.0, 0.1),\n",
    "          'i2n__bias_scaling':  (0.0, 0.5, 0.1),\n",
    "          'n2n__spectral_radius': (0.0, 1.5, 0.1),\n",
    "          'n2n__leakage': (0.1, 1.0, 0.1),\n",
    "          'n2n__k_rec': 10,\n",
    "          'n2n__reservoir_activation': ['tanh', 'relu', 'identity'],\n",
    "          'n2n__bidirectional': [False, True]\n",
    "         }\n",
    "\n",
    "build_visualization_widget(plot_func=my_custom_plot, estimator=Pipeline([(\"i2n\", InputToNode()),\n",
    "                                                                         (\"n2n\", NodeToNode())]),\n",
    "                           params=params, X=X.reshape(-1, 1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.10.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}