From ba3790f7497031ddfe1116cf775990e2cbba222a Mon Sep 17 00:00:00 2001 From: eric-brandao Date: Fri, 9 Aug 2024 15:26:31 -0300 Subject: [PATCH] necessary changes in deconvolution with regularization, and other minor stuff --- examples/RoomIR_notebook_demo.ipynb | 19891 ++++++++++++++++++++++++++ examples/deconv_methods.py | 75 + examples/rec_measurement.py | 2 +- examples/reverberation_time.py | 4 +- examples/xt.hdf5 | Bin 0 -> 2105344 bytes examples/yt.hdf5 | Bin 0 -> 4202496 bytes pytta/classes/analysis.py | 6 +- pytta/classes/signal.py | 144 +- 8 files changed, 20105 insertions(+), 17 deletions(-) create mode 100644 examples/RoomIR_notebook_demo.ipynb create mode 100644 examples/deconv_methods.py create mode 100644 examples/xt.hdf5 create mode 100644 examples/yt.hdf5 diff --git a/examples/RoomIR_notebook_demo.ipynb b/examples/RoomIR_notebook_demo.ipynb new file mode 100644 index 0000000..3f12c29 --- /dev/null +++ b/examples/RoomIR_notebook_demo.ipynb @@ -0,0 +1,19891 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "3ccb328c", + "metadata": {}, + "source": [ + "# Pytta notebook demonstration\n", + "\n", + "We will perform some measurements using the Pytta package (https://pytta.readthedocs.io/pyttadoc/index.html)\n", + "\n", + "Pytta is an open-source code for measurements, recordings, and signal analysis. It is based on the ITA-toolbox for Matlab from RWTH University (https://www.ita-toolbox.org/)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "e3416604", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "import pytta\n", + "#import PyTTa.pytta\n", + "import numpy as np # arrays\n", + "import matplotlib.pyplot as plt # plots\n", + "plt.rcParams.update({'font.size': 11})\n", + "%matplotlib notebook" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "7d7dd9cb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'D:\\\\Work\\\\dev\\\\PyTTa\\\\pytta\\\\__init__.py'" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pytta.__file__" + ] + }, + { + "cell_type": "markdown", + "id": "0c864826", + "metadata": {}, + "source": [ + "# List devices\n", + "\n", + "The first thing we will do is to choose which audio device we want to use to measure. \n", + "\n", + "Pytta supports the Audio devices listed with Port Audio. Note that devices such as BK or NI data acquisition are not audio interfaces and, therefore, are not natively supported by Pytta. However, when measuring with such devices, one can use Pytta as a data container for signal processing.\n", + "\n", + "Let us choose the input and output devices with a particular driver. The best is the proprietary ASIO driver for each audio device, usually the driver with the smallest latency. For Impulse Response (IR) estimation, if synchronization between recording and excitation is strictly necessary you should record the excitation signal, $x(t)$. The output, $y(t)$, should always be measured." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "5ec1f1df", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0 Microsoft Sound Mapper - Input, MME (2 in, 0 out)\n", + "> 1 Linha (3- USB AUDIO CODEC), MME (2 in, 0 out)\n", + " 2 Microfone (Realtek(R) Audio), MME (2 in, 0 out)\n", + " 3 Microsoft Sound Mapper - Output, MME (0 in, 2 out)\n", + "< 4 Alto-falantes (3- USB AUDIO CO, MME (0 in, 2 out)\n", + " 5 SMT22A550 (NVIDIA High Definiti, MME (0 in, 2 out)\n", + " 6 Speakers/Headphones (Realtek(R), MME (0 in, 2 out)\n", + " 7 Driver de captura de som primário, Windows DirectSound (2 in, 0 out)\n", + " 8 Linha (3- USB AUDIO CODEC), Windows DirectSound (2 in, 0 out)\n", + " 9 Microfone (Realtek(R) Audio), Windows DirectSound (2 in, 0 out)\n", + " 10 Driver de som primário, Windows DirectSound (0 in, 2 out)\n", + " 11 Alto-falantes (3- USB AUDIO CODEC), Windows DirectSound (0 in, 2 out)\n", + " 12 SMT22A550 (NVIDIA High Definition Audio), Windows DirectSound (0 in, 2 out)\n", + " 13 Speakers/Headphones (Realtek(R) Audio), Windows DirectSound (0 in, 2 out)\n", + " 14 ASIO4ALL v2, ASIO (2 in, 2 out)\n", + " 15 Realtek ASIO, ASIO (2 in, 2 out)\n", + " 16 SMT22A550 (NVIDIA High Definition Audio), Windows WASAPI (0 in, 2 out)\n", + " 17 Speakers/Headphones (Realtek(R) Audio), Windows WASAPI (0 in, 2 out)\n", + " 18 Alto-falantes (3- USB AUDIO CODEC), Windows WASAPI (0 in, 2 out)\n", + " 19 Linha (3- USB AUDIO CODEC), Windows WASAPI (2 in, 0 out)\n", + " 20 Microfone (Realtek(R) Audio), Windows WASAPI (2 in, 0 out)\n", + " 21 Output (NVIDIA High Definition Audio), Windows WDM-KS (0 in, 2 out)\n", + " 22 Speakers 1 (Realtek HD Audio output with SST), Windows WDM-KS (0 in, 2 out)\n", + " 23 Speakers 2 (Realtek HD Audio output with SST), Windows WDM-KS (0 in, 8 out)\n", + " 24 Alto-falante (Realtek HD Audio output with SST), Windows WDM-KS (2 in, 0 out)\n", + " 25 Microfone (Realtek HD Audio Mic input), Windows WDM-KS (2 in, 0 out)\n", + " 26 Mixagem estéreo (Realtek HD Audio Stereo input), Windows WDM-KS (2 in, 0 out)\n", + " 27 Linha (), Windows WDM-KS (2 in, 0 out)\n", + " 28 Output (@System32\\drivers\\bthhfenum.sys,#4;%1 Hands-Free HF Audio%0\r\n", + ";(Galaxy Tab A (2016) with S Pen)), Windows WDM-KS (0 in, 1 out)\n", + " 29 Input (@System32\\drivers\\bthhfenum.sys,#4;%1 Hands-Free HF Audio%0\r\n", + ";(Galaxy Tab A (2016) with S Pen)), Windows WDM-KS (1 in, 0 out)\n", + " 30 Alto-falantes (USB AUDIO CODEC), Windows WDM-KS (0 in, 2 out)\n", + " 31 Linha (USB AUDIO CODEC), Windows WDM-KS (2 in, 0 out)\n" + ] + } + ], + "source": [ + "print(pytta.list_devices())" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "fb9bf847", + "metadata": {}, + "outputs": [], + "source": [ + "device = [8, 11]" + ] + }, + { + "cell_type": "markdown", + "id": "0fa69309", + "metadata": {}, + "source": [ + "# Configure the measurement\n", + "\n", + "We need to define some basic properties:\n", + "\n", + " - fs: (int) : the sampling rate supported by your audio interface.\n", + " - start_margin / stop_margin: (float): Your excitation signal, $x(t)$, can have a small silence at its start and end. The silence at its end is essential to ensure that the system's natural decay is recorded.\n", + " - fft_degree: (int) - if this is specified, the excitation and recorded signals will have $2^{\\text{fft_degree}}$ samples. The time vector of the signal will be between $0$ [s] $(2^{\\text{fft_degree}}-1)/fs$ [s]. You can also specify the time duration of the signals (then, fft_degree will be computed for you)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "f9cdca00", + "metadata": {}, + "outputs": [], + "source": [ + "fs = 44100 # sample rate of your audio device\n", + "start_margin = 0.1\n", + "stop_margin = 1\n", + "fft_degree = 19 # N_samples = 2**fft_degree" + ] + }, + { + "cell_type": "markdown", + "id": "e3be2ad5", + "metadata": {}, + "source": [ + "# Excitation signal - Sweep\n", + "\n", + "Let us generate the excitation signal with Pytta. This signal will be a logarithmic sine sweep, but other options are available. We define a start frequency and an end frequency. \n", + "\n", + "When measuring, try to consider the characteristics of your sound source. There is no point in asking a source to generate frequencies outside the range in which it is efficient." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "1e75ce9c", + "metadata": {}, + "outputs": [], + "source": [ + "freq_min = 100\n", + "freq_max = 10000\n", + "method = 'logarithmic'\n", + "\n", + "xt = pytta.generate.sweep(freqMin = freq_min, freqMax = freq_max, samplingRate = fs, fftDegree = fft_degree, \n", + " startMargin = start_margin, stopMargin = stop_margin, method = method, windowing='hann')" + ] + }, + { + "cell_type": "markdown", + "id": "e03a8440", + "metadata": {}, + "source": [ + "# Visualize and listen to $x(t)$\n", + "\n", + "Note that the excitation signal sweep has a fade-in, a fade-out, and a small silence at the beginning and end. This serves as a buffer in your measurement, so you do not send some step function to your sound source.\n", + "\n", + "Note that the $x(t)$ spectrum has relevant components before **freq_min** and after **freq_max**. The programming so that the sweep amplitude is $1.0$ between **freq_min** and **freq_max** (in time dommain). Thus, the fade-in and fade-out place a few extra relevant components.\n", + "\n", + "Note also that the magnitude of the $x(t)$ spectrum has minimum values in the order of $-125$ dB, $-200$ dB, which is equivalent to numbers in the order of:\n", + "\n", + "- $10^{-7}$, $10^{-10}$ " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "e1b4d4a7", + "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('tabindex', '0');\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", + " 'z-index: 2;'\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(\n", + " 'style',\n", + " 'box-sizing: content-box;' +\n", + " 'pointer-events: none;' +\n", + " 'position: relative;' +\n", + " 'z-index: 0;'\n", + " );\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;' +\n", + " 'left: 0;' +\n", + " 'pointer-events: none;' +\n", + " 'position: absolute;' +\n", + " 'top: 0;' +\n", + " '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", + " /* This rescales the canvas back to display pixels, so that it\n", + " * appears correct on HiDPI screens. */\n", + " canvas.style.width = width + 'px';\n", + " canvas.style.height = height + 'px';\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", + " /* User Agent sniffing is bad, but WebKit is busted:\n", + " * https://bugs.webkit.org/show_bug.cgi?id=144526\n", + " * https://bugs.webkit.org/show_bug.cgi?id=181818\n", + " * The worst that happens here is that they get an extra browser\n", + " * selection when dragging, if this check fails to catch them.\n", + " */\n", + " var UA = navigator.userAgent;\n", + " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n", + " if(isWebKit) {\n", + " return function (event) {\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We\n", + " * want to control all of the cursor setting manually through\n", + " * the 'cursor' event from matplotlib */\n", + " event.preventDefault()\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " } else {\n", + " return function (event) {\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " }\n", + " }\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mousedown',\n", + " on_mouse_event_closure('button_press')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'mouseup',\n", + " on_mouse_event_closure('button_release')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'dblclick',\n", + " on_mouse_event_closure('dblclick')\n", + " );\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " canvas_div.addEventListener(\n", + " 'mousemove',\n", + " on_mouse_event_closure('motion_notify')\n", + " );\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mouseenter',\n", + " on_mouse_event_closure('figure_enter')\n", + " );\n", + " canvas_div.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", + " canvas_div.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.canvas_div.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", + "function getModifiers(event) {\n", + " var mods = [];\n", + " if (event.ctrlKey) {\n", + " mods.push('ctrl');\n", + " }\n", + " if (event.altKey) {\n", + " mods.push('alt');\n", + " }\n", + " if (event.shiftKey) {\n", + " mods.push('shift');\n", + " }\n", + " if (event.metaKey) {\n", + " mods.push('meta');\n", + " }\n", + " return mods;\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", + " if (name === 'button_press') {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " // from https://stackoverflow.com/q/1114465\n", + " var boundingRect = this.canvas.getBoundingClientRect();\n", + " var x = (event.clientX - boundingRect.left) * this.ratio;\n", + " var y = (event.clientY - boundingRect.top) * this.ratio;\n", + "\n", + " this.send_message(name, {\n", + " x: x,\n", + " y: y,\n", + " button: event.button,\n", + " step: event.step,\n", + " modifiers: getModifiers(event),\n", + " guiEvent: simpleKeys(event),\n", + " });\n", + "\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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"
\");\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", + " '';\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", + " '';\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 = '';\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 = '';\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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "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('tabindex', '0');\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", + " 'z-index: 2;'\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(\n", + " 'style',\n", + " 'box-sizing: content-box;' +\n", + " 'pointer-events: none;' +\n", + " 'position: relative;' +\n", + " 'z-index: 0;'\n", + " );\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;' +\n", + " 'left: 0;' +\n", + " 'pointer-events: none;' +\n", + " 'position: absolute;' +\n", + " 'top: 0;' +\n", + " '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", + " /* This rescales the canvas back to display pixels, so that it\n", + " * appears correct on HiDPI screens. */\n", + " canvas.style.width = width + 'px';\n", + " canvas.style.height = height + 'px';\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", + " /* User Agent sniffing is bad, but WebKit is busted:\n", + " * https://bugs.webkit.org/show_bug.cgi?id=144526\n", + " * https://bugs.webkit.org/show_bug.cgi?id=181818\n", + " * The worst that happens here is that they get an extra browser\n", + " * selection when dragging, if this check fails to catch them.\n", + " */\n", + " var UA = navigator.userAgent;\n", + " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n", + " if(isWebKit) {\n", + " return function (event) {\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We\n", + " * want to control all of the cursor setting manually through\n", + " * the 'cursor' event from matplotlib */\n", + " event.preventDefault()\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " } else {\n", + " return function (event) {\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " }\n", + " }\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mousedown',\n", + " on_mouse_event_closure('button_press')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'mouseup',\n", + " on_mouse_event_closure('button_release')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'dblclick',\n", + " on_mouse_event_closure('dblclick')\n", + " );\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " canvas_div.addEventListener(\n", + " 'mousemove',\n", + " on_mouse_event_closure('motion_notify')\n", + " );\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mouseenter',\n", + " on_mouse_event_closure('figure_enter')\n", + " );\n", + " canvas_div.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", + " canvas_div.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.canvas_div.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", + "function getModifiers(event) {\n", + " var mods = [];\n", + " if (event.ctrlKey) {\n", + " mods.push('ctrl');\n", + " }\n", + " if (event.altKey) {\n", + " mods.push('alt');\n", + " }\n", + " if (event.shiftKey) {\n", + " mods.push('shift');\n", + " }\n", + " if (event.metaKey) {\n", + " mods.push('meta');\n", + " }\n", + " return mods;\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", + " if (name === 'button_press') {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " // from https://stackoverflow.com/q/1114465\n", + " var boundingRect = this.canvas.getBoundingClientRect();\n", + " var x = (event.clientX - boundingRect.left) * this.ratio;\n", + " var y = (event.clientY - boundingRect.top) * this.ratio;\n", + "\n", + " this.send_message(name, {\n", + " x: x,\n", + " y: y,\n", + " button: event.button,\n", + " step: event.step,\n", + " modifiers: getModifiers(event),\n", + " guiEvent: simpleKeys(event),\n", + " });\n", + "\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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"
\");\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", + " '';\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", + " '';\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 = '';\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 = '';\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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "xt.plot_time();\n", + "xt.plot_freq(xLim = [10, fs/2]);" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "834553fc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.010000000000000009" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "0.3468-0.3368" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "d70f6288", + "metadata": {}, + "outputs": [], + "source": [ + "xt.play(device = 11)" + ] + }, + { + "cell_type": "markdown", + "id": "0ca62010", + "metadata": {}, + "source": [ + "# SignalObj\n", + "\n", + "Inside Pytta, information about a signal stays inside a signal object (SignalObj). With such information, we can plot the $x(t)$ spectrum." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "4cfeea7e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "SignalObj(SignalArray=ndarray, domain='time', samplingRate=44100, freqMin=89.08987181403393, freqMax=11224.62048309373, comment='No comments.')" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "xt" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "ae3865db", + "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('tabindex', '0');\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", + " 'z-index: 2;'\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(\n", + " 'style',\n", + " 'box-sizing: content-box;' +\n", + " 'pointer-events: none;' +\n", + " 'position: relative;' +\n", + " 'z-index: 0;'\n", + " );\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;' +\n", + " 'left: 0;' +\n", + " 'pointer-events: none;' +\n", + " 'position: absolute;' +\n", + " 'top: 0;' +\n", + " '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", + " /* This rescales the canvas back to display pixels, so that it\n", + " * appears correct on HiDPI screens. */\n", + " canvas.style.width = width + 'px';\n", + " canvas.style.height = height + 'px';\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", + " /* User Agent sniffing is bad, but WebKit is busted:\n", + " * https://bugs.webkit.org/show_bug.cgi?id=144526\n", + " * https://bugs.webkit.org/show_bug.cgi?id=181818\n", + " * The worst that happens here is that they get an extra browser\n", + " * selection when dragging, if this check fails to catch them.\n", + " */\n", + " var UA = navigator.userAgent;\n", + " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n", + " if(isWebKit) {\n", + " return function (event) {\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We\n", + " * want to control all of the cursor setting manually through\n", + " * the 'cursor' event from matplotlib */\n", + " event.preventDefault()\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " } else {\n", + " return function (event) {\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " }\n", + " }\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mousedown',\n", + " on_mouse_event_closure('button_press')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'mouseup',\n", + " on_mouse_event_closure('button_release')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'dblclick',\n", + " on_mouse_event_closure('dblclick')\n", + " );\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " canvas_div.addEventListener(\n", + " 'mousemove',\n", + " on_mouse_event_closure('motion_notify')\n", + " );\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mouseenter',\n", + " on_mouse_event_closure('figure_enter')\n", + " );\n", + " canvas_div.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", + " canvas_div.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.canvas_div.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", + "function getModifiers(event) {\n", + " var mods = [];\n", + " if (event.ctrlKey) {\n", + " mods.push('ctrl');\n", + " }\n", + " if (event.altKey) {\n", + " mods.push('alt');\n", + " }\n", + " if (event.shiftKey) {\n", + " mods.push('shift');\n", + " }\n", + " if (event.metaKey) {\n", + " mods.push('meta');\n", + " }\n", + " return mods;\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", + " if (name === 'button_press') {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " // from https://stackoverflow.com/q/1114465\n", + " var boundingRect = this.canvas.getBoundingClientRect();\n", + " var x = (event.clientX - boundingRect.left) * this.ratio;\n", + " var y = (event.clientY - boundingRect.top) * this.ratio;\n", + "\n", + " this.send_message(name, {\n", + " x: x,\n", + " y: y,\n", + " button: event.button,\n", + " step: event.step,\n", + " modifiers: getModifiers(event),\n", + " guiEvent: simpleKeys(event),\n", + " });\n", + "\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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"
\");\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", + " '';\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", + " '';\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 = '';\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 = '';\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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize = (8, 4))\n", + "plt.semilogx(xt.freqVector, 20*np.log10(np.abs(xt.freqSignal)))\n", + "plt.xlabel('Frequency (Hz)')\n", + "plt.ylabel('Magnitude (dB)')\n", + "plt.xlim((20, 20000))\n", + "plt.grid()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "8ad52582", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "fft_degree: 19 / number of samples: 524288\n", + "Shape of time dommain data: (524288, 1) - shape changes if your signal obj has more channels\n", + "Shape of frequency dommain data: (262145, 1)\n" + ] + } + ], + "source": [ + "print('fft_degree: {} / number of samples: {}'.format(fft_degree, 2**fft_degree))\n", + "print('Shape of time dommain data: {} - shape changes if your signal obj has more channels'.format(xt.timeSignal.shape))\n", + "print('Shape of frequency dommain data: {}'.format(xt.freqSignal.shape))" + ] + }, + { + "cell_type": "markdown", + "id": "2ef69059", + "metadata": {}, + "source": [ + "# Generate a measurement object\n", + "\n", + "Now, we generate a Pytta object that controls the measurement. We will work on a **'playrec'** object that performs playback and record simultaneously. You need to select the input and output channels. Pytta supports as many channels as you have in your audio interface.\n", + "\n", + "There are other measurement object types, so check the documentation." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "be1bf79a", + "metadata": {}, + "outputs": [], + "source": [ + "pytta_meas = pytta.generate.measurement('playrec', excitation = xt, samplingRate = xt.samplingRate,\n", + " freqMin = freq_min, freqMax = freq_max,\n", + " device = device, inChannels=[1], outChannels=[1])" + ] + }, + { + "cell_type": "markdown", + "id": "32ad5553", + "metadata": {}, + "source": [ + "# Execute the measurement\n", + "\n", + "Now, we measure. Note that $x(t)$ is not contaminated by noise, but $y(t)$ is, which can be written in the form\n", + "\n", + "\\begin{equation}\n", + "y_m(t) = y(t) + n(t)\n", + "\\end{equation}\n", + "where the measured signal, $y_m(t)$ is the sum of the true value $y(t)$ plus a noise term $n(t)$." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "b1a6b882", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "max output level (excitation) on channel [1]: -0.45 dBFS - ref.: 1 [FS]\n", + "max input level (excitation) on channel [1]: -23.33 dBFS - ref.: 1 [FS]\n" + ] + } + ], + "source": [ + "yt = pytta_meas.run()" + ] + }, + { + "cell_type": "markdown", + "id": "cdb2179f", + "metadata": {}, + "source": [ + "# Visualize and listen to $y(t)$" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "e49c0aeb", + "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('tabindex', '0');\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", + " 'z-index: 2;'\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(\n", + " 'style',\n", + " 'box-sizing: content-box;' +\n", + " 'pointer-events: none;' +\n", + " 'position: relative;' +\n", + " 'z-index: 0;'\n", + " );\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;' +\n", + " 'left: 0;' +\n", + " 'pointer-events: none;' +\n", + " 'position: absolute;' +\n", + " 'top: 0;' +\n", + " '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", + " /* This rescales the canvas back to display pixels, so that it\n", + " * appears correct on HiDPI screens. */\n", + " canvas.style.width = width + 'px';\n", + " canvas.style.height = height + 'px';\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", + " /* User Agent sniffing is bad, but WebKit is busted:\n", + " * https://bugs.webkit.org/show_bug.cgi?id=144526\n", + " * https://bugs.webkit.org/show_bug.cgi?id=181818\n", + " * The worst that happens here is that they get an extra browser\n", + " * selection when dragging, if this check fails to catch them.\n", + " */\n", + " var UA = navigator.userAgent;\n", + " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n", + " if(isWebKit) {\n", + " return function (event) {\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We\n", + " * want to control all of the cursor setting manually through\n", + " * the 'cursor' event from matplotlib */\n", + " event.preventDefault()\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " } else {\n", + " return function (event) {\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " }\n", + " }\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mousedown',\n", + " on_mouse_event_closure('button_press')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'mouseup',\n", + " on_mouse_event_closure('button_release')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'dblclick',\n", + " on_mouse_event_closure('dblclick')\n", + " );\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " canvas_div.addEventListener(\n", + " 'mousemove',\n", + " on_mouse_event_closure('motion_notify')\n", + " );\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mouseenter',\n", + " on_mouse_event_closure('figure_enter')\n", + " );\n", + " canvas_div.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", + " canvas_div.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.canvas_div.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", + "function getModifiers(event) {\n", + " var mods = [];\n", + " if (event.ctrlKey) {\n", + " mods.push('ctrl');\n", + " }\n", + " if (event.altKey) {\n", + " mods.push('alt');\n", + " }\n", + " if (event.shiftKey) {\n", + " mods.push('shift');\n", + " }\n", + " if (event.metaKey) {\n", + " mods.push('meta');\n", + " }\n", + " return mods;\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", + " if (name === 'button_press') {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " // from https://stackoverflow.com/q/1114465\n", + " var boundingRect = this.canvas.getBoundingClientRect();\n", + " var x = (event.clientX - boundingRect.left) * this.ratio;\n", + " var y = (event.clientY - boundingRect.top) * this.ratio;\n", + "\n", + " this.send_message(name, {\n", + " x: x,\n", + " y: y,\n", + " button: event.button,\n", + " step: event.step,\n", + " modifiers: getModifiers(event),\n", + " guiEvent: simpleKeys(event),\n", + " });\n", + "\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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"
\");\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", + " '';\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", + " '';\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 = '';\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 = '';\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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "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('tabindex', '0');\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", + " 'z-index: 2;'\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(\n", + " 'style',\n", + " 'box-sizing: content-box;' +\n", + " 'pointer-events: none;' +\n", + " 'position: relative;' +\n", + " 'z-index: 0;'\n", + " );\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;' +\n", + " 'left: 0;' +\n", + " 'pointer-events: none;' +\n", + " 'position: absolute;' +\n", + " 'top: 0;' +\n", + " '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", + " /* This rescales the canvas back to display pixels, so that it\n", + " * appears correct on HiDPI screens. */\n", + " canvas.style.width = width + 'px';\n", + " canvas.style.height = height + 'px';\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", + " /* User Agent sniffing is bad, but WebKit is busted:\n", + " * https://bugs.webkit.org/show_bug.cgi?id=144526\n", + " * https://bugs.webkit.org/show_bug.cgi?id=181818\n", + " * The worst that happens here is that they get an extra browser\n", + " * selection when dragging, if this check fails to catch them.\n", + " */\n", + " var UA = navigator.userAgent;\n", + " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n", + " if(isWebKit) {\n", + " return function (event) {\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We\n", + " * want to control all of the cursor setting manually through\n", + " * the 'cursor' event from matplotlib */\n", + " event.preventDefault()\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " } else {\n", + " return function (event) {\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " }\n", + " }\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mousedown',\n", + " on_mouse_event_closure('button_press')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'mouseup',\n", + " on_mouse_event_closure('button_release')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'dblclick',\n", + " on_mouse_event_closure('dblclick')\n", + " );\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " canvas_div.addEventListener(\n", + " 'mousemove',\n", + " on_mouse_event_closure('motion_notify')\n", + " );\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mouseenter',\n", + " on_mouse_event_closure('figure_enter')\n", + " );\n", + " canvas_div.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", + " canvas_div.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.canvas_div.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", + "function getModifiers(event) {\n", + " var mods = [];\n", + " if (event.ctrlKey) {\n", + " mods.push('ctrl');\n", + " }\n", + " if (event.altKey) {\n", + " mods.push('alt');\n", + " }\n", + " if (event.shiftKey) {\n", + " mods.push('shift');\n", + " }\n", + " if (event.metaKey) {\n", + " mods.push('meta');\n", + " }\n", + " return mods;\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", + " if (name === 'button_press') {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " // from https://stackoverflow.com/q/1114465\n", + " var boundingRect = this.canvas.getBoundingClientRect();\n", + " var x = (event.clientX - boundingRect.left) * this.ratio;\n", + " var y = (event.clientY - boundingRect.top) * this.ratio;\n", + "\n", + " this.send_message(name, {\n", + " x: x,\n", + " y: y,\n", + " button: event.button,\n", + " step: event.step,\n", + " modifiers: getModifiers(event),\n", + " guiEvent: simpleKeys(event),\n", + " });\n", + "\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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"
\");\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", + " '';\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", + " '';\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 = '';\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 = '';\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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "yt.plot_time();\n", + "yt.plot_freq(xLim = [20, 20000]);" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "f2023347", + "metadata": {}, + "outputs": [], + "source": [ + "yt.play()" + ] + }, + { + "cell_type": "markdown", + "id": "fd945f37", + "metadata": {}, + "source": [ + "# You can save your measurement and load it for analysis" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "c22d773a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Saved inside the hdf5 file 1 PyTTa object of 1 object provided.\n", + "Saved inside the hdf5 file 1 PyTTa object of 1 object provided.\n" + ] + } + ], + "source": [ + "pytta.save('yt.hdf5', yt)\n", + "pytta.save('xt.hdf5', xt)" + ] + }, + { + "cell_type": "markdown", + "id": "d7c71f13", + "metadata": {}, + "source": [ + "# Loading Pytta objects" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "e4dd2a6b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Imported 1 PyTTa object-like group of 1 group inside the hdf5 file.\n", + "Imported 1 PyTTa object-like group of 1 group inside the hdf5 file.\n" + ] + } + ], + "source": [ + "xt_dict = pytta.load('xt.hdf5')\n", + "xt = xt_dict[list(xt_dict.keys())[0]] # this is a signal object\n", + "\n", + "yt_dict = pytta.load('yt.hdf5')\n", + "yt = yt_dict[list(yt_dict.keys())[0]] # this is a signal object" + ] + }, + { + "cell_type": "markdown", + "id": "a94dc619", + "metadata": {}, + "source": [ + "# Splitting\n", + "\n", + "We should split the recording if more than one channel was recorded (e.g., reference channel)." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "6f471720", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[SignalObj(SignalArray=ndarray, domain='time', samplingRate=44100, freqMin=89.08987181403393, freqMax=11224.62048309373, comment='SignalObj from a PlayRec measurement')]" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "yt_split = yt.split()\n", + "yt_split" + ] + }, + { + "cell_type": "markdown", + "id": "b4495a59", + "metadata": {}, + "source": [ + "# Let us compute the impulse response\n", + "\n", + "First, we can try the naive solution.\n", + "\n", + "\\begin{equation}\n", + "H(\\text{j}\\omega) = \\frac{Y_m(\\text{j}\\omega)}{X(\\text{j}\\omega)} = \\frac{Y(\\text{j}\\omega)+N(\\text{j}\\omega)}{X(\\text{j}\\omega)} = H(\\text{j}\\omega) + \\frac{N(\\text{j}\\omega)}{X(\\text{j}\\omega)}\n", + "\\end{equation}\n", + "\n", + "### Spoiler alert\n", + "\n", + "That is very disappointing as noise dominates $y(t)$. " + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "6c3b0d63", + "metadata": {}, + "outputs": [], + "source": [ + "ht_noreg = pytta.ImpulsiveResponse(excitation = xt, recording = yt_split[0], \n", + " samplingRate = xt.samplingRate, regularization = False)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "91ad6f35", + "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('tabindex', '0');\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", + " 'z-index: 2;'\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(\n", + " 'style',\n", + " 'box-sizing: content-box;' +\n", + " 'pointer-events: none;' +\n", + " 'position: relative;' +\n", + " 'z-index: 0;'\n", + " );\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;' +\n", + " 'left: 0;' +\n", + " 'pointer-events: none;' +\n", + " 'position: absolute;' +\n", + " 'top: 0;' +\n", + " '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", + " /* This rescales the canvas back to display pixels, so that it\n", + " * appears correct on HiDPI screens. */\n", + " canvas.style.width = width + 'px';\n", + " canvas.style.height = height + 'px';\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", + " /* User Agent sniffing is bad, but WebKit is busted:\n", + " * https://bugs.webkit.org/show_bug.cgi?id=144526\n", + " * https://bugs.webkit.org/show_bug.cgi?id=181818\n", + " * The worst that happens here is that they get an extra browser\n", + " * selection when dragging, if this check fails to catch them.\n", + " */\n", + " var UA = navigator.userAgent;\n", + " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n", + " if(isWebKit) {\n", + " return function (event) {\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We\n", + " * want to control all of the cursor setting manually through\n", + " * the 'cursor' event from matplotlib */\n", + " event.preventDefault()\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " } else {\n", + " return function (event) {\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " }\n", + " }\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mousedown',\n", + " on_mouse_event_closure('button_press')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'mouseup',\n", + " on_mouse_event_closure('button_release')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'dblclick',\n", + " on_mouse_event_closure('dblclick')\n", + " );\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " canvas_div.addEventListener(\n", + " 'mousemove',\n", + " on_mouse_event_closure('motion_notify')\n", + " );\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mouseenter',\n", + " on_mouse_event_closure('figure_enter')\n", + " );\n", + " canvas_div.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", + " canvas_div.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.canvas_div.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", + "function getModifiers(event) {\n", + " var mods = [];\n", + " if (event.ctrlKey) {\n", + " mods.push('ctrl');\n", + " }\n", + " if (event.altKey) {\n", + " mods.push('alt');\n", + " }\n", + " if (event.shiftKey) {\n", + " mods.push('shift');\n", + " }\n", + " if (event.metaKey) {\n", + " mods.push('meta');\n", + " }\n", + " return mods;\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", + " if (name === 'button_press') {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " // from https://stackoverflow.com/q/1114465\n", + " var boundingRect = this.canvas.getBoundingClientRect();\n", + " var x = (event.clientX - boundingRect.left) * this.ratio;\n", + " var y = (event.clientY - boundingRect.top) * this.ratio;\n", + "\n", + " this.send_message(name, {\n", + " x: x,\n", + " y: y,\n", + " button: event.button,\n", + " step: event.step,\n", + " modifiers: getModifiers(event),\n", + " guiEvent: simpleKeys(event),\n", + " });\n", + "\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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"
\");\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", + " '';\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", + " '';\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 = '';\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 = '';\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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "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('tabindex', '0');\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", + " 'z-index: 2;'\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(\n", + " 'style',\n", + " 'box-sizing: content-box;' +\n", + " 'pointer-events: none;' +\n", + " 'position: relative;' +\n", + " 'z-index: 0;'\n", + " );\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;' +\n", + " 'left: 0;' +\n", + " 'pointer-events: none;' +\n", + " 'position: absolute;' +\n", + " 'top: 0;' +\n", + " '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", + " /* This rescales the canvas back to display pixels, so that it\n", + " * appears correct on HiDPI screens. */\n", + " canvas.style.width = width + 'px';\n", + " canvas.style.height = height + 'px';\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", + " /* User Agent sniffing is bad, but WebKit is busted:\n", + " * https://bugs.webkit.org/show_bug.cgi?id=144526\n", + " * https://bugs.webkit.org/show_bug.cgi?id=181818\n", + " * The worst that happens here is that they get an extra browser\n", + " * selection when dragging, if this check fails to catch them.\n", + " */\n", + " var UA = navigator.userAgent;\n", + " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n", + " if(isWebKit) {\n", + " return function (event) {\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We\n", + " * want to control all of the cursor setting manually through\n", + " * the 'cursor' event from matplotlib */\n", + " event.preventDefault()\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " } else {\n", + " return function (event) {\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " }\n", + " }\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mousedown',\n", + " on_mouse_event_closure('button_press')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'mouseup',\n", + " on_mouse_event_closure('button_release')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'dblclick',\n", + " on_mouse_event_closure('dblclick')\n", + " );\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " canvas_div.addEventListener(\n", + " 'mousemove',\n", + " on_mouse_event_closure('motion_notify')\n", + " );\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mouseenter',\n", + " on_mouse_event_closure('figure_enter')\n", + " );\n", + " canvas_div.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", + " canvas_div.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.canvas_div.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", + "function getModifiers(event) {\n", + " var mods = [];\n", + " if (event.ctrlKey) {\n", + " mods.push('ctrl');\n", + " }\n", + " if (event.altKey) {\n", + " mods.push('alt');\n", + " }\n", + " if (event.shiftKey) {\n", + " mods.push('shift');\n", + " }\n", + " if (event.metaKey) {\n", + " mods.push('meta');\n", + " }\n", + " return mods;\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", + " if (name === 'button_press') {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " // from https://stackoverflow.com/q/1114465\n", + " var boundingRect = this.canvas.getBoundingClientRect();\n", + " var x = (event.clientX - boundingRect.left) * this.ratio;\n", + " var y = (event.clientY - boundingRect.top) * this.ratio;\n", + "\n", + " this.send_message(name, {\n", + " x: x,\n", + " y: y,\n", + " button: event.button,\n", + " step: event.step,\n", + " modifiers: getModifiers(event),\n", + " guiEvent: simpleKeys(event),\n", + " });\n", + "\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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"
\");\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", + " '';\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", + " '';\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 = '';\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 = '';\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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ht_noreg.plot_time();\n", + "ht_noreg.plot_freq(xLim = [20, 20000]);" + ] + }, + { + "attachments": { + "regu.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "id": "19c341a6", + "metadata": {}, + "source": [ + "# We can do better\n", + "\n", + "The idea is to change how we compute the FRF and the associated IR. Consider the following:\n", + "\n", + "\\begin{equation}\n", + "H(\\text{j}\\omega) = Y_m(\\text{j}\\omega) C(\\text{j}\\omega)\n", + "\\end{equation}\n", + "with $C(\\text{j}\\omega)$ given by\n", + "\n", + "\\begin{equation}\n", + "C(\\text{j}\\omega) = \\frac{X^{*}(\\text{j}\\omega)}{X^{*}(\\text{j}\\omega)X(\\text{j}\\omega)+\\epsilon(\\text{j}\\omega)}\n", + "\\end{equation}\n", + "and $\\epsilon(\\text{j}\\omega)$ is a regularizing function [so we don't devide $Y_m(\\text{j}\\omega)$ by low magnitude values of $X(\\text{j}\\omega)$]. If $\\epsilon(\\text{j}\\omega) = 0$, then $H(\\text{j}\\omega) = Y_m(\\text{j}\\omega) C(\\text{j}\\omega)$ is the naive solution, which only happens inside the **freq_min** and **freq_max limits**. Here is how $\\epsilon(\\text{j}\\omega)$ looks like:\n", + "\n", + "![regu.png](attachment:regu.png)\n", + "\n", + "- In the frequency range where $X(\\text{j}\\omega)$ has a high magnitude, $\\epsilon(\\text{j}\\omega)$ has a minimum magnitude (in the order of the computer's numerical precision). In this case $C(\\text{j}\\omega) \\approx \\frac{1}{X(\\text{j}\\omega)}$.\n", + "\n", + "- In the frequency range where $X(\\text{j}\\omega)$ has low magnitude and noise tends to dominate, $\\epsilon(\\text{j}\\omega)$ has maximum magnitude. In this case $C(\\text{j}\\omega) \\approx \\frac{1}{\\epsilon(\\text{j}\\omega)}$ and the noise term is restricted to $\\approx N(\\text{j}\\omega)/\\epsilon(\\text{j}\\omega)$. In this range $Y(\\text{j}\\omega) \\rightarrow 0$.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "b4f8593c", + "metadata": {}, + "outputs": [], + "source": [ + "ht = pytta.ImpulsiveResponse(excitation = xt, recording = yt_split[0], \n", + " samplingRate = xt.samplingRate, regularization = True,\n", + " freq_limits = [freq_min, freq_max], method = 'linear') #[freq_min, freq_max]" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "a001e1c7", + "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('tabindex', '0');\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", + " 'z-index: 2;'\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(\n", + " 'style',\n", + " 'box-sizing: content-box;' +\n", + " 'pointer-events: none;' +\n", + " 'position: relative;' +\n", + " 'z-index: 0;'\n", + " );\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;' +\n", + " 'left: 0;' +\n", + " 'pointer-events: none;' +\n", + " 'position: absolute;' +\n", + " 'top: 0;' +\n", + " '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", + " /* This rescales the canvas back to display pixels, so that it\n", + " * appears correct on HiDPI screens. */\n", + " canvas.style.width = width + 'px';\n", + " canvas.style.height = height + 'px';\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", + " /* User Agent sniffing is bad, but WebKit is busted:\n", + " * https://bugs.webkit.org/show_bug.cgi?id=144526\n", + " * https://bugs.webkit.org/show_bug.cgi?id=181818\n", + " * The worst that happens here is that they get an extra browser\n", + " * selection when dragging, if this check fails to catch them.\n", + " */\n", + " var UA = navigator.userAgent;\n", + " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n", + " if(isWebKit) {\n", + " return function (event) {\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We\n", + " * want to control all of the cursor setting manually through\n", + " * the 'cursor' event from matplotlib */\n", + " event.preventDefault()\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " } else {\n", + " return function (event) {\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " }\n", + " }\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mousedown',\n", + " on_mouse_event_closure('button_press')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'mouseup',\n", + " on_mouse_event_closure('button_release')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'dblclick',\n", + " on_mouse_event_closure('dblclick')\n", + " );\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " canvas_div.addEventListener(\n", + " 'mousemove',\n", + " on_mouse_event_closure('motion_notify')\n", + " );\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mouseenter',\n", + " on_mouse_event_closure('figure_enter')\n", + " );\n", + " canvas_div.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", + " canvas_div.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.canvas_div.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", + "function getModifiers(event) {\n", + " var mods = [];\n", + " if (event.ctrlKey) {\n", + " mods.push('ctrl');\n", + " }\n", + " if (event.altKey) {\n", + " mods.push('alt');\n", + " }\n", + " if (event.shiftKey) {\n", + " mods.push('shift');\n", + " }\n", + " if (event.metaKey) {\n", + " mods.push('meta');\n", + " }\n", + " return mods;\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", + " if (name === 'button_press') {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " // from https://stackoverflow.com/q/1114465\n", + " var boundingRect = this.canvas.getBoundingClientRect();\n", + " var x = (event.clientX - boundingRect.left) * this.ratio;\n", + " var y = (event.clientY - boundingRect.top) * this.ratio;\n", + "\n", + " this.send_message(name, {\n", + " x: x,\n", + " y: y,\n", + " button: event.button,\n", + " step: event.step,\n", + " modifiers: getModifiers(event),\n", + " guiEvent: simpleKeys(event),\n", + " });\n", + "\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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"
\");\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", + " '';\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", + " '';\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 = '';\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 = '';\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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "f_min = 100\n", + "f_max = 10000\n", + "\n", + "#pytta.classes.signal._make_pk_spectra\n", + "data = pytta.classes.signal._make_pk_spectra(xt.freqSignal)\n", + "outputFreqSignal = pytta.classes.signal._make_pk_spectra(yt.freqSignal)\n", + "\n", + "freqVector = xt.freqVector\n", + "b = data * 0 + 10**(-200/20) # inside signal freq range\n", + "a = data * 0 + 1 # outside signal freq range\n", + "eps = ht._crossfade_spectruns(a, b, [f_min/np.sqrt(2), f_min], freqVector)\n", + "eps = ht._crossfade_spectruns(eps, a, [f_max, f_max*np.sqrt(2)], freqVector)\n", + "\n", + "#eps = eps * float(np.max(np.abs(data)))**2 * 1/2\n", + "\n", + "plt.figure(figsize = (8, 4))\n", + "plt.semilogx(freqVector, 20*np.log10(np.abs(xt.freqSignal)), label = r\"$X(j\\omega)$\")\n", + "plt.semilogx(freqVector, 20*np.log10(np.abs(eps)), label = r\"$\\epsilon(j\\omega)$\")\n", + "plt.legend()\n", + "\n", + "plt.xlabel('Frequency (Hz)')\n", + "plt.ylabel('Magnitude (dB)')\n", + "plt.xlim((20, 20000))\n", + "plt.ylim((-250, 10))\n", + "plt.grid()\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "d70eda19", + "metadata": { + "scrolled": false + }, + "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('tabindex', '0');\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", + " 'z-index: 2;'\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(\n", + " 'style',\n", + " 'box-sizing: content-box;' +\n", + " 'pointer-events: none;' +\n", + " 'position: relative;' +\n", + " 'z-index: 0;'\n", + " );\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;' +\n", + " 'left: 0;' +\n", + " 'pointer-events: none;' +\n", + " 'position: absolute;' +\n", + " 'top: 0;' +\n", + " '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", + " /* This rescales the canvas back to display pixels, so that it\n", + " * appears correct on HiDPI screens. */\n", + " canvas.style.width = width + 'px';\n", + " canvas.style.height = height + 'px';\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", + " /* User Agent sniffing is bad, but WebKit is busted:\n", + " * https://bugs.webkit.org/show_bug.cgi?id=144526\n", + " * https://bugs.webkit.org/show_bug.cgi?id=181818\n", + " * The worst that happens here is that they get an extra browser\n", + " * selection when dragging, if this check fails to catch them.\n", + " */\n", + " var UA = navigator.userAgent;\n", + " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n", + " if(isWebKit) {\n", + " return function (event) {\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We\n", + " * want to control all of the cursor setting manually through\n", + " * the 'cursor' event from matplotlib */\n", + " event.preventDefault()\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " } else {\n", + " return function (event) {\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " }\n", + " }\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mousedown',\n", + " on_mouse_event_closure('button_press')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'mouseup',\n", + " on_mouse_event_closure('button_release')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'dblclick',\n", + " on_mouse_event_closure('dblclick')\n", + " );\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " canvas_div.addEventListener(\n", + " 'mousemove',\n", + " on_mouse_event_closure('motion_notify')\n", + " );\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mouseenter',\n", + " on_mouse_event_closure('figure_enter')\n", + " );\n", + " canvas_div.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", + " canvas_div.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.canvas_div.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", + "function getModifiers(event) {\n", + " var mods = [];\n", + " if (event.ctrlKey) {\n", + " mods.push('ctrl');\n", + " }\n", + " if (event.altKey) {\n", + " mods.push('alt');\n", + " }\n", + " if (event.shiftKey) {\n", + " mods.push('shift');\n", + " }\n", + " if (event.metaKey) {\n", + " mods.push('meta');\n", + " }\n", + " return mods;\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", + " if (name === 'button_press') {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " // from https://stackoverflow.com/q/1114465\n", + " var boundingRect = this.canvas.getBoundingClientRect();\n", + " var x = (event.clientX - boundingRect.left) * this.ratio;\n", + " var y = (event.clientY - boundingRect.top) * this.ratio;\n", + "\n", + " this.send_message(name, {\n", + " x: x,\n", + " y: y,\n", + " button: event.button,\n", + " step: event.step,\n", + " modifiers: getModifiers(event),\n", + " guiEvent: simpleKeys(event),\n", + " });\n", + "\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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"
\");\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", + " '';\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", + " '';\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 = '';\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 = '';\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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "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('tabindex', '0');\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", + " 'z-index: 2;'\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(\n", + " 'style',\n", + " 'box-sizing: content-box;' +\n", + " 'pointer-events: none;' +\n", + " 'position: relative;' +\n", + " 'z-index: 0;'\n", + " );\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;' +\n", + " 'left: 0;' +\n", + " 'pointer-events: none;' +\n", + " 'position: absolute;' +\n", + " 'top: 0;' +\n", + " '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", + " /* This rescales the canvas back to display pixels, so that it\n", + " * appears correct on HiDPI screens. */\n", + " canvas.style.width = width + 'px';\n", + " canvas.style.height = height + 'px';\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", + " /* User Agent sniffing is bad, but WebKit is busted:\n", + " * https://bugs.webkit.org/show_bug.cgi?id=144526\n", + " * https://bugs.webkit.org/show_bug.cgi?id=181818\n", + " * The worst that happens here is that they get an extra browser\n", + " * selection when dragging, if this check fails to catch them.\n", + " */\n", + " var UA = navigator.userAgent;\n", + " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n", + " if(isWebKit) {\n", + " return function (event) {\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We\n", + " * want to control all of the cursor setting manually through\n", + " * the 'cursor' event from matplotlib */\n", + " event.preventDefault()\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " } else {\n", + " return function (event) {\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " }\n", + " }\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mousedown',\n", + " on_mouse_event_closure('button_press')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'mouseup',\n", + " on_mouse_event_closure('button_release')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'dblclick',\n", + " on_mouse_event_closure('dblclick')\n", + " );\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " canvas_div.addEventListener(\n", + " 'mousemove',\n", + " on_mouse_event_closure('motion_notify')\n", + " );\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mouseenter',\n", + " on_mouse_event_closure('figure_enter')\n", + " );\n", + " canvas_div.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", + " canvas_div.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.canvas_div.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", + "function getModifiers(event) {\n", + " var mods = [];\n", + " if (event.ctrlKey) {\n", + " mods.push('ctrl');\n", + " }\n", + " if (event.altKey) {\n", + " mods.push('alt');\n", + " }\n", + " if (event.shiftKey) {\n", + " mods.push('shift');\n", + " }\n", + " if (event.metaKey) {\n", + " mods.push('meta');\n", + " }\n", + " return mods;\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", + " if (name === 'button_press') {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " // from https://stackoverflow.com/q/1114465\n", + " var boundingRect = this.canvas.getBoundingClientRect();\n", + " var x = (event.clientX - boundingRect.left) * this.ratio;\n", + " var y = (event.clientY - boundingRect.top) * this.ratio;\n", + "\n", + " this.send_message(name, {\n", + " x: x,\n", + " y: y,\n", + " button: event.button,\n", + " step: event.step,\n", + " modifiers: getModifiers(event),\n", + " guiEvent: simpleKeys(event),\n", + " });\n", + "\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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"
\");\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", + " '';\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", + " '';\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 = '';\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 = '';\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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ht.plot_time(xLim = [0, 2]);\n", + "ht.plot_freq(xLim = [20, 20000]);" + ] + }, + { + "cell_type": "markdown", + "id": "fbe0935a", + "metadata": {}, + "source": [ + "# plot $h(t)$ in dB (normalized version)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "30ed04cd", + "metadata": { + "scrolled": false + }, + "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('tabindex', '0');\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", + " 'z-index: 2;'\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(\n", + " 'style',\n", + " 'box-sizing: content-box;' +\n", + " 'pointer-events: none;' +\n", + " 'position: relative;' +\n", + " 'z-index: 0;'\n", + " );\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;' +\n", + " 'left: 0;' +\n", + " 'pointer-events: none;' +\n", + " 'position: absolute;' +\n", + " 'top: 0;' +\n", + " '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", + " /* This rescales the canvas back to display pixels, so that it\n", + " * appears correct on HiDPI screens. */\n", + " canvas.style.width = width + 'px';\n", + " canvas.style.height = height + 'px';\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", + " /* User Agent sniffing is bad, but WebKit is busted:\n", + " * https://bugs.webkit.org/show_bug.cgi?id=144526\n", + " * https://bugs.webkit.org/show_bug.cgi?id=181818\n", + " * The worst that happens here is that they get an extra browser\n", + " * selection when dragging, if this check fails to catch them.\n", + " */\n", + " var UA = navigator.userAgent;\n", + " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n", + " if(isWebKit) {\n", + " return function (event) {\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We\n", + " * want to control all of the cursor setting manually through\n", + " * the 'cursor' event from matplotlib */\n", + " event.preventDefault()\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " } else {\n", + " return function (event) {\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " }\n", + " }\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mousedown',\n", + " on_mouse_event_closure('button_press')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'mouseup',\n", + " on_mouse_event_closure('button_release')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'dblclick',\n", + " on_mouse_event_closure('dblclick')\n", + " );\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " canvas_div.addEventListener(\n", + " 'mousemove',\n", + " on_mouse_event_closure('motion_notify')\n", + " );\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mouseenter',\n", + " on_mouse_event_closure('figure_enter')\n", + " );\n", + " canvas_div.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", + " canvas_div.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.canvas_div.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", + "function getModifiers(event) {\n", + " var mods = [];\n", + " if (event.ctrlKey) {\n", + " mods.push('ctrl');\n", + " }\n", + " if (event.altKey) {\n", + " mods.push('alt');\n", + " }\n", + " if (event.shiftKey) {\n", + " mods.push('shift');\n", + " }\n", + " if (event.metaKey) {\n", + " mods.push('meta');\n", + " }\n", + " return mods;\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", + " if (name === 'button_press') {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " // from https://stackoverflow.com/q/1114465\n", + " var boundingRect = this.canvas.getBoundingClientRect();\n", + " var x = (event.clientX - boundingRect.left) * this.ratio;\n", + " var y = (event.clientY - boundingRect.top) * this.ratio;\n", + "\n", + " this.send_message(name, {\n", + " x: x,\n", + " y: y,\n", + " button: event.button,\n", + " step: event.step,\n", + " modifiers: getModifiers(event),\n", + " guiEvent: simpleKeys(event),\n", + " });\n", + "\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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"
\");\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", + " '';\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", + " '';\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 = '';\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 = '';\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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize = (8, 4))\n", + "plt.plot(ht.IR.timeVector, 20*np.log10(np.abs(ht.IR.timeSignal)/np.amax(np.abs(ht.IR.timeSignal))), alpha = 0.8)\n", + "plt.xlabel('Time (s)')\n", + "plt.ylabel('Magnitude (dB)')\n", + "plt.xlim((-0.1, ht.IR.timeVector[-1]))\n", + "plt.ylim((-80, 10))\n", + "plt.grid()\n", + "plt.tight_layout()\n", + "#ht.plot_time_dB(xLim = (0.18, 1), yLim = [-120, -60]);" + ] + }, + { + "cell_type": "markdown", + "id": "76f64843", + "metadata": {}, + "source": [ + "# Room acoustics analysis\n", + "\n", + "This part still need some work. \n", + "\n", + "- First we crop the IR to remove the non-linear part" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "337ecc59", + "metadata": {}, + "outputs": [], + "source": [ + "ht.IR.crop(startTime = 0, endTime = 1.5)" + ] + }, + { + "cell_type": "markdown", + "id": "63f21fa9", + "metadata": {}, + "source": [ + "# Room IR analysis\n", + "\n", + "Now, we pass the IR to the RoomAnalysis class and it will filter the IR in fractional octave bands, compute the Energy Decay Curves and some room acoustical parameters." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "ad83f956", + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "RT = pytta.RoomAnalysis(ht, nthOct=3, minFreq=float(100), maxFreq=float(10000), plotLundeby = False, bypassLundeby = False)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "6fa13ca7", + "metadata": {}, + "outputs": [], + "source": [ + "#RT.listEDC" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "5eec8944", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(57444, 21)\n", + "(57444,)\n", + "[ 100. 125. 160. 200. 250. 315. 400. 500. 630. 800.\n", + " 1000. 1250. 1600. 2000. 2500. 3150. 4000. 5000. 6300. 8000.\n", + " 10000.]\n" + ] + } + ], + "source": [ + "print(RT.fhSignal.timeSignal.shape)\n", + "print(RT.fhSignal.timeVector.shape)\n", + "print(RT.bands)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "1e148bf4", + "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('tabindex', '0');\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", + " 'z-index: 2;'\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(\n", + " 'style',\n", + " 'box-sizing: content-box;' +\n", + " 'pointer-events: none;' +\n", + " 'position: relative;' +\n", + " 'z-index: 0;'\n", + " );\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;' +\n", + " 'left: 0;' +\n", + " 'pointer-events: none;' +\n", + " 'position: absolute;' +\n", + " 'top: 0;' +\n", + " '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", + " /* This rescales the canvas back to display pixels, so that it\n", + " * appears correct on HiDPI screens. */\n", + " canvas.style.width = width + 'px';\n", + " canvas.style.height = height + 'px';\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", + " /* User Agent sniffing is bad, but WebKit is busted:\n", + " * https://bugs.webkit.org/show_bug.cgi?id=144526\n", + " * https://bugs.webkit.org/show_bug.cgi?id=181818\n", + " * The worst that happens here is that they get an extra browser\n", + " * selection when dragging, if this check fails to catch them.\n", + " */\n", + " var UA = navigator.userAgent;\n", + " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n", + " if(isWebKit) {\n", + " return function (event) {\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We\n", + " * want to control all of the cursor setting manually through\n", + " * the 'cursor' event from matplotlib */\n", + " event.preventDefault()\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " } else {\n", + " return function (event) {\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " }\n", + " }\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mousedown',\n", + " on_mouse_event_closure('button_press')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'mouseup',\n", + " on_mouse_event_closure('button_release')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'dblclick',\n", + " on_mouse_event_closure('dblclick')\n", + " );\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " canvas_div.addEventListener(\n", + " 'mousemove',\n", + " on_mouse_event_closure('motion_notify')\n", + " );\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mouseenter',\n", + " on_mouse_event_closure('figure_enter')\n", + " );\n", + " canvas_div.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", + " canvas_div.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.canvas_div.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", + "function getModifiers(event) {\n", + " var mods = [];\n", + " if (event.ctrlKey) {\n", + " mods.push('ctrl');\n", + " }\n", + " if (event.altKey) {\n", + " mods.push('alt');\n", + " }\n", + " if (event.shiftKey) {\n", + " mods.push('shift');\n", + " }\n", + " if (event.metaKey) {\n", + " mods.push('meta');\n", + " }\n", + " return mods;\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", + " if (name === 'button_press') {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " // from https://stackoverflow.com/q/1114465\n", + " var boundingRect = this.canvas.getBoundingClientRect();\n", + " var x = (event.clientX - boundingRect.left) * this.ratio;\n", + " var y = (event.clientY - boundingRect.top) * this.ratio;\n", + "\n", + " this.send_message(name, {\n", + " x: x,\n", + " y: y,\n", + " button: event.button,\n", + " step: event.step,\n", + " modifiers: getModifiers(event),\n", + " guiEvent: simpleKeys(event),\n", + " });\n", + "\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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"
\");\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", + " '';\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", + " '';\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 = '';\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 = '';\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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "f, ax = plt.subplots(4, 5, figsize = (10, 6), sharex = True, sharey = True)\n", + "\n", + "counter = 0\n", + "for row in range(4):\n", + " for col in range(5):\n", + " ht2 = (np.abs(RT.fhSignal.timeSignal[:, counter])/np.amax(np.abs(RT.fhSignal.timeSignal[:, counter])))**2\n", + " ax[row, col].plot(RT.fhSignal.timeVector, 10*np.log10(ht2), alpha = 0.8, \n", + " label = r'{} Hz'.format(int(RT.bands[counter])))\n", + " ax[row, col].plot(RT.listEDC[counter][1], 10*np.log10(RT.listEDC[counter][0]), 'k')\n", + " ax[row, col].legend()\n", + " ax[row, col].set_xlim((0, 1))\n", + " ax[row, col].set_ylim((-60, 10))\n", + " counter += 1\n", + " ax[3, col].set_xlabel('Time (s)')\n", + " ax[row, 0].set_ylabel('Magnitude (dB)')\n", + "\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "98a4ba1c", + "metadata": { + "scrolled": false + }, + "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('tabindex', '0');\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", + " 'z-index: 2;'\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(\n", + " 'style',\n", + " 'box-sizing: content-box;' +\n", + " 'pointer-events: none;' +\n", + " 'position: relative;' +\n", + " 'z-index: 0;'\n", + " );\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;' +\n", + " 'left: 0;' +\n", + " 'pointer-events: none;' +\n", + " 'position: absolute;' +\n", + " 'top: 0;' +\n", + " '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", + " /* This rescales the canvas back to display pixels, so that it\n", + " * appears correct on HiDPI screens. */\n", + " canvas.style.width = width + 'px';\n", + " canvas.style.height = height + 'px';\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", + " /* User Agent sniffing is bad, but WebKit is busted:\n", + " * https://bugs.webkit.org/show_bug.cgi?id=144526\n", + " * https://bugs.webkit.org/show_bug.cgi?id=181818\n", + " * The worst that happens here is that they get an extra browser\n", + " * selection when dragging, if this check fails to catch them.\n", + " */\n", + " var UA = navigator.userAgent;\n", + " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n", + " if(isWebKit) {\n", + " return function (event) {\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We\n", + " * want to control all of the cursor setting manually through\n", + " * the 'cursor' event from matplotlib */\n", + " event.preventDefault()\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " } else {\n", + " return function (event) {\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " }\n", + " }\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mousedown',\n", + " on_mouse_event_closure('button_press')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'mouseup',\n", + " on_mouse_event_closure('button_release')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'dblclick',\n", + " on_mouse_event_closure('dblclick')\n", + " );\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " canvas_div.addEventListener(\n", + " 'mousemove',\n", + " on_mouse_event_closure('motion_notify')\n", + " );\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mouseenter',\n", + " on_mouse_event_closure('figure_enter')\n", + " );\n", + " canvas_div.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", + " canvas_div.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.canvas_div.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", + "function getModifiers(event) {\n", + " var mods = [];\n", + " if (event.ctrlKey) {\n", + " mods.push('ctrl');\n", + " }\n", + " if (event.altKey) {\n", + " mods.push('alt');\n", + " }\n", + " if (event.shiftKey) {\n", + " mods.push('shift');\n", + " }\n", + " if (event.metaKey) {\n", + " mods.push('meta');\n", + " }\n", + " return mods;\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", + " if (name === 'button_press') {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " // from https://stackoverflow.com/q/1114465\n", + " var boundingRect = this.canvas.getBoundingClientRect();\n", + " var x = (event.clientX - boundingRect.left) * this.ratio;\n", + " var y = (event.clientY - boundingRect.top) * this.ratio;\n", + "\n", + " this.send_message(name, {\n", + " x: x,\n", + " y: y,\n", + " button: event.button,\n", + " step: event.step,\n", + " modifiers: getModifiers(event),\n", + " guiEvent: simpleKeys(event),\n", + " });\n", + "\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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"
\");\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", + " '';\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", + " '';\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 = '';\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 = '';\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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "index = 10\n", + "ht2 = (np.abs(RT.fhSignal.timeSignal[:, index])/np.amax(np.abs(RT.fhSignal.timeSignal[:, index])))**2\n", + "\n", + "plt.figure()\n", + "plt.plot(RT.fhSignal.timeVector, 10*np.log10(ht2), alpha = 0.8)\n", + "plt.plot(RT.listEDC[index][1], 10*np.log10(RT.listEDC[index][0]), 'k')\n", + "plt.xlabel('Time (s)')\n", + "plt.ylabel('Magnitude (dB)')\n", + "plt.xlim((0, 1.5))\n", + "plt.ylim((-80, 10))\n", + "plt.grid()\n", + "plt.tight_layout()" + ] + }, + { + "cell_type": "markdown", + "id": "a8d0f0e5", + "metadata": {}, + "source": [ + "# $T_{30}$, EDT, $C_{80}$, $T_s$" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "4a96fb3b", + "metadata": { + "scrolled": false + }, + "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('tabindex', '0');\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", + " 'z-index: 2;'\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(\n", + " 'style',\n", + " 'box-sizing: content-box;' +\n", + " 'pointer-events: none;' +\n", + " 'position: relative;' +\n", + " 'z-index: 0;'\n", + " );\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;' +\n", + " 'left: 0;' +\n", + " 'pointer-events: none;' +\n", + " 'position: absolute;' +\n", + " 'top: 0;' +\n", + " '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", + " /* This rescales the canvas back to display pixels, so that it\n", + " * appears correct on HiDPI screens. */\n", + " canvas.style.width = width + 'px';\n", + " canvas.style.height = height + 'px';\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", + " /* User Agent sniffing is bad, but WebKit is busted:\n", + " * https://bugs.webkit.org/show_bug.cgi?id=144526\n", + " * https://bugs.webkit.org/show_bug.cgi?id=181818\n", + " * The worst that happens here is that they get an extra browser\n", + " * selection when dragging, if this check fails to catch them.\n", + " */\n", + " var UA = navigator.userAgent;\n", + " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n", + " if(isWebKit) {\n", + " return function (event) {\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We\n", + " * want to control all of the cursor setting manually through\n", + " * the 'cursor' event from matplotlib */\n", + " event.preventDefault()\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " } else {\n", + " return function (event) {\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " }\n", + " }\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mousedown',\n", + " on_mouse_event_closure('button_press')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'mouseup',\n", + " on_mouse_event_closure('button_release')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'dblclick',\n", + " on_mouse_event_closure('dblclick')\n", + " );\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " canvas_div.addEventListener(\n", + " 'mousemove',\n", + " on_mouse_event_closure('motion_notify')\n", + " );\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mouseenter',\n", + " on_mouse_event_closure('figure_enter')\n", + " );\n", + " canvas_div.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", + " canvas_div.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.canvas_div.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", + "function getModifiers(event) {\n", + " var mods = [];\n", + " if (event.ctrlKey) {\n", + " mods.push('ctrl');\n", + " }\n", + " if (event.altKey) {\n", + " mods.push('alt');\n", + " }\n", + " if (event.shiftKey) {\n", + " mods.push('shift');\n", + " }\n", + " if (event.metaKey) {\n", + " mods.push('meta');\n", + " }\n", + " return mods;\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", + " if (name === 'button_press') {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " // from https://stackoverflow.com/q/1114465\n", + " var boundingRect = this.canvas.getBoundingClientRect();\n", + " var x = (event.clientX - boundingRect.left) * this.ratio;\n", + " var y = (event.clientY - boundingRect.top) * this.ratio;\n", + "\n", + " this.send_message(name, {\n", + " x: x,\n", + " y: y,\n", + " button: event.button,\n", + " step: event.step,\n", + " modifiers: getModifiers(event),\n", + " guiEvent: simpleKeys(event),\n", + " });\n", + "\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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"
\");\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", + " '';\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", + " '';\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 = '';\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 = '';\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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "RT.plot_T30(yLim = (0, 1.2));" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "9ec75228", + "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('tabindex', '0');\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", + " 'z-index: 2;'\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(\n", + " 'style',\n", + " 'box-sizing: content-box;' +\n", + " 'pointer-events: none;' +\n", + " 'position: relative;' +\n", + " 'z-index: 0;'\n", + " );\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;' +\n", + " 'left: 0;' +\n", + " 'pointer-events: none;' +\n", + " 'position: absolute;' +\n", + " 'top: 0;' +\n", + " '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", + " /* This rescales the canvas back to display pixels, so that it\n", + " * appears correct on HiDPI screens. */\n", + " canvas.style.width = width + 'px';\n", + " canvas.style.height = height + 'px';\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", + " /* User Agent sniffing is bad, but WebKit is busted:\n", + " * https://bugs.webkit.org/show_bug.cgi?id=144526\n", + " * https://bugs.webkit.org/show_bug.cgi?id=181818\n", + " * The worst that happens here is that they get an extra browser\n", + " * selection when dragging, if this check fails to catch them.\n", + " */\n", + " var UA = navigator.userAgent;\n", + " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n", + " if(isWebKit) {\n", + " return function (event) {\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We\n", + " * want to control all of the cursor setting manually through\n", + " * the 'cursor' event from matplotlib */\n", + " event.preventDefault()\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " } else {\n", + " return function (event) {\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " }\n", + " }\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mousedown',\n", + " on_mouse_event_closure('button_press')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'mouseup',\n", + " on_mouse_event_closure('button_release')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'dblclick',\n", + " on_mouse_event_closure('dblclick')\n", + " );\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " canvas_div.addEventListener(\n", + " 'mousemove',\n", + " on_mouse_event_closure('motion_notify')\n", + " );\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mouseenter',\n", + " on_mouse_event_closure('figure_enter')\n", + " );\n", + " canvas_div.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", + " canvas_div.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.canvas_div.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", + "function getModifiers(event) {\n", + " var mods = [];\n", + " if (event.ctrlKey) {\n", + " mods.push('ctrl');\n", + " }\n", + " if (event.altKey) {\n", + " mods.push('alt');\n", + " }\n", + " if (event.shiftKey) {\n", + " mods.push('shift');\n", + " }\n", + " if (event.metaKey) {\n", + " mods.push('meta');\n", + " }\n", + " return mods;\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", + " if (name === 'button_press') {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " // from https://stackoverflow.com/q/1114465\n", + " var boundingRect = this.canvas.getBoundingClientRect();\n", + " var x = (event.clientX - boundingRect.left) * this.ratio;\n", + " var y = (event.clientY - boundingRect.top) * this.ratio;\n", + "\n", + " this.send_message(name, {\n", + " x: x,\n", + " y: y,\n", + " button: event.button,\n", + " step: event.step,\n", + " modifiers: getModifiers(event),\n", + " guiEvent: simpleKeys(event),\n", + " });\n", + "\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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"
\");\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", + " '';\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", + " '';\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 = '';\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 = '';\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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "RT.plot_EDT(yLim = (0, 1.2));" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "663d5765", + "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('tabindex', '0');\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", + " 'z-index: 2;'\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(\n", + " 'style',\n", + " 'box-sizing: content-box;' +\n", + " 'pointer-events: none;' +\n", + " 'position: relative;' +\n", + " 'z-index: 0;'\n", + " );\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;' +\n", + " 'left: 0;' +\n", + " 'pointer-events: none;' +\n", + " 'position: absolute;' +\n", + " 'top: 0;' +\n", + " '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", + " /* This rescales the canvas back to display pixels, so that it\n", + " * appears correct on HiDPI screens. */\n", + " canvas.style.width = width + 'px';\n", + " canvas.style.height = height + 'px';\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", + " /* User Agent sniffing is bad, but WebKit is busted:\n", + " * https://bugs.webkit.org/show_bug.cgi?id=144526\n", + " * https://bugs.webkit.org/show_bug.cgi?id=181818\n", + " * The worst that happens here is that they get an extra browser\n", + " * selection when dragging, if this check fails to catch them.\n", + " */\n", + " var UA = navigator.userAgent;\n", + " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n", + " if(isWebKit) {\n", + " return function (event) {\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We\n", + " * want to control all of the cursor setting manually through\n", + " * the 'cursor' event from matplotlib */\n", + " event.preventDefault()\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " } else {\n", + " return function (event) {\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " }\n", + " }\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mousedown',\n", + " on_mouse_event_closure('button_press')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'mouseup',\n", + " on_mouse_event_closure('button_release')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'dblclick',\n", + " on_mouse_event_closure('dblclick')\n", + " );\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " canvas_div.addEventListener(\n", + " 'mousemove',\n", + " on_mouse_event_closure('motion_notify')\n", + " );\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mouseenter',\n", + " on_mouse_event_closure('figure_enter')\n", + " );\n", + " canvas_div.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", + " canvas_div.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.canvas_div.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", + "function getModifiers(event) {\n", + " var mods = [];\n", + " if (event.ctrlKey) {\n", + " mods.push('ctrl');\n", + " }\n", + " if (event.altKey) {\n", + " mods.push('alt');\n", + " }\n", + " if (event.shiftKey) {\n", + " mods.push('shift');\n", + " }\n", + " if (event.metaKey) {\n", + " mods.push('meta');\n", + " }\n", + " return mods;\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", + " if (name === 'button_press') {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " // from https://stackoverflow.com/q/1114465\n", + " var boundingRect = this.canvas.getBoundingClientRect();\n", + " var x = (event.clientX - boundingRect.left) * this.ratio;\n", + " var y = (event.clientY - boundingRect.top) * this.ratio;\n", + "\n", + " this.send_message(name, {\n", + " x: x,\n", + " y: y,\n", + " button: event.button,\n", + " step: event.step,\n", + " modifiers: getModifiers(event),\n", + " guiEvent: simpleKeys(event),\n", + " });\n", + "\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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"
\");\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", + " '';\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", + " '';\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 = '';\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 = '';\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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "RT.plot_C80(yLim = (-4, 15));" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "9ca27bc8", + "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('tabindex', '0');\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", + " 'z-index: 2;'\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(\n", + " 'style',\n", + " 'box-sizing: content-box;' +\n", + " 'pointer-events: none;' +\n", + " 'position: relative;' +\n", + " 'z-index: 0;'\n", + " );\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;' +\n", + " 'left: 0;' +\n", + " 'pointer-events: none;' +\n", + " 'position: absolute;' +\n", + " 'top: 0;' +\n", + " '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", + " /* This rescales the canvas back to display pixels, so that it\n", + " * appears correct on HiDPI screens. */\n", + " canvas.style.width = width + 'px';\n", + " canvas.style.height = height + 'px';\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", + " /* User Agent sniffing is bad, but WebKit is busted:\n", + " * https://bugs.webkit.org/show_bug.cgi?id=144526\n", + " * https://bugs.webkit.org/show_bug.cgi?id=181818\n", + " * The worst that happens here is that they get an extra browser\n", + " * selection when dragging, if this check fails to catch them.\n", + " */\n", + " var UA = navigator.userAgent;\n", + " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n", + " if(isWebKit) {\n", + " return function (event) {\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We\n", + " * want to control all of the cursor setting manually through\n", + " * the 'cursor' event from matplotlib */\n", + " event.preventDefault()\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " } else {\n", + " return function (event) {\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " }\n", + " }\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mousedown',\n", + " on_mouse_event_closure('button_press')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'mouseup',\n", + " on_mouse_event_closure('button_release')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'dblclick',\n", + " on_mouse_event_closure('dblclick')\n", + " );\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " canvas_div.addEventListener(\n", + " 'mousemove',\n", + " on_mouse_event_closure('motion_notify')\n", + " );\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mouseenter',\n", + " on_mouse_event_closure('figure_enter')\n", + " );\n", + " canvas_div.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", + " canvas_div.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.canvas_div.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", + "function getModifiers(event) {\n", + " var mods = [];\n", + " if (event.ctrlKey) {\n", + " mods.push('ctrl');\n", + " }\n", + " if (event.altKey) {\n", + " mods.push('alt');\n", + " }\n", + " if (event.shiftKey) {\n", + " mods.push('shift');\n", + " }\n", + " if (event.metaKey) {\n", + " mods.push('meta');\n", + " }\n", + " return mods;\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", + " if (name === 'button_press') {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " // from https://stackoverflow.com/q/1114465\n", + " var boundingRect = this.canvas.getBoundingClientRect();\n", + " var x = (event.clientX - boundingRect.left) * this.ratio;\n", + " var y = (event.clientY - boundingRect.top) * this.ratio;\n", + "\n", + " this.send_message(name, {\n", + " x: x,\n", + " y: y,\n", + " button: event.button,\n", + " step: event.step,\n", + " modifiers: getModifiers(event),\n", + " guiEvent: simpleKeys(event),\n", + " });\n", + "\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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"
\");\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", + " '';\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", + " '';\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 = '';\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 = '';\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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "RT.plot_Ts(yLim = (0, 0.12));" + ] + }, + { + "cell_type": "markdown", + "id": "899a3dd9", + "metadata": {}, + "source": [ + "# Recording\n", + "\n", + "Let us demonstrate a recording with Pytta." + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "2f5da0d6", + "metadata": {}, + "outputs": [], + "source": [ + "pytta_rec = pytta.generate.measurement('rec', samplingRate = fs, device = device, \n", + " inChannels=[1], lengthDomain = 'time', timeLength = 10)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "dfe34f31", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "max input level (excitation) on channel [1]: -41.78 dBFS - ref.: 1 [FS]\n" + ] + } + ], + "source": [ + "rec = pytta_rec.run()" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "895c68cd", + "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('tabindex', '0');\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", + " 'z-index: 2;'\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(\n", + " 'style',\n", + " 'box-sizing: content-box;' +\n", + " 'pointer-events: none;' +\n", + " 'position: relative;' +\n", + " 'z-index: 0;'\n", + " );\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;' +\n", + " 'left: 0;' +\n", + " 'pointer-events: none;' +\n", + " 'position: absolute;' +\n", + " 'top: 0;' +\n", + " '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", + " /* This rescales the canvas back to display pixels, so that it\n", + " * appears correct on HiDPI screens. */\n", + " canvas.style.width = width + 'px';\n", + " canvas.style.height = height + 'px';\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", + " /* User Agent sniffing is bad, but WebKit is busted:\n", + " * https://bugs.webkit.org/show_bug.cgi?id=144526\n", + " * https://bugs.webkit.org/show_bug.cgi?id=181818\n", + " * The worst that happens here is that they get an extra browser\n", + " * selection when dragging, if this check fails to catch them.\n", + " */\n", + " var UA = navigator.userAgent;\n", + " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n", + " if(isWebKit) {\n", + " return function (event) {\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We\n", + " * want to control all of the cursor setting manually through\n", + " * the 'cursor' event from matplotlib */\n", + " event.preventDefault()\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " } else {\n", + " return function (event) {\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " }\n", + " }\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mousedown',\n", + " on_mouse_event_closure('button_press')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'mouseup',\n", + " on_mouse_event_closure('button_release')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'dblclick',\n", + " on_mouse_event_closure('dblclick')\n", + " );\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " canvas_div.addEventListener(\n", + " 'mousemove',\n", + " on_mouse_event_closure('motion_notify')\n", + " );\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mouseenter',\n", + " on_mouse_event_closure('figure_enter')\n", + " );\n", + " canvas_div.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", + " canvas_div.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.canvas_div.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", + "function getModifiers(event) {\n", + " var mods = [];\n", + " if (event.ctrlKey) {\n", + " mods.push('ctrl');\n", + " }\n", + " if (event.altKey) {\n", + " mods.push('alt');\n", + " }\n", + " if (event.shiftKey) {\n", + " mods.push('shift');\n", + " }\n", + " if (event.metaKey) {\n", + " mods.push('meta');\n", + " }\n", + " return mods;\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", + " if (name === 'button_press') {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " // from https://stackoverflow.com/q/1114465\n", + " var boundingRect = this.canvas.getBoundingClientRect();\n", + " var x = (event.clientX - boundingRect.left) * this.ratio;\n", + " var y = (event.clientY - boundingRect.top) * this.ratio;\n", + "\n", + " this.send_message(name, {\n", + " x: x,\n", + " y: y,\n", + " button: event.button,\n", + " step: event.step,\n", + " modifiers: getModifiers(event),\n", + " guiEvent: simpleKeys(event),\n", + " });\n", + "\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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"
\");\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", + " '';\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", + " '';\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 = '';\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 = '';\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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "rec.plot_time();" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "04770edd", + "metadata": { + "scrolled": false + }, + "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('tabindex', '0');\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", + " 'z-index: 2;'\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(\n", + " 'style',\n", + " 'box-sizing: content-box;' +\n", + " 'pointer-events: none;' +\n", + " 'position: relative;' +\n", + " 'z-index: 0;'\n", + " );\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;' +\n", + " 'left: 0;' +\n", + " 'pointer-events: none;' +\n", + " 'position: absolute;' +\n", + " 'top: 0;' +\n", + " '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", + " /* This rescales the canvas back to display pixels, so that it\n", + " * appears correct on HiDPI screens. */\n", + " canvas.style.width = width + 'px';\n", + " canvas.style.height = height + 'px';\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", + " /* User Agent sniffing is bad, but WebKit is busted:\n", + " * https://bugs.webkit.org/show_bug.cgi?id=144526\n", + " * https://bugs.webkit.org/show_bug.cgi?id=181818\n", + " * The worst that happens here is that they get an extra browser\n", + " * selection when dragging, if this check fails to catch them.\n", + " */\n", + " var UA = navigator.userAgent;\n", + " var isWebKit = /AppleWebKit/.test(UA) && !/Chrome/.test(UA);\n", + " if(isWebKit) {\n", + " return function (event) {\n", + " /* This prevents the web browser from automatically changing to\n", + " * the text insertion cursor when the button is pressed. We\n", + " * want to control all of the cursor setting manually through\n", + " * the 'cursor' event from matplotlib */\n", + " event.preventDefault()\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " } else {\n", + " return function (event) {\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " }\n", + " }\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mousedown',\n", + " on_mouse_event_closure('button_press')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'mouseup',\n", + " on_mouse_event_closure('button_release')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'dblclick',\n", + " on_mouse_event_closure('dblclick')\n", + " );\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " canvas_div.addEventListener(\n", + " 'mousemove',\n", + " on_mouse_event_closure('motion_notify')\n", + " );\n", + "\n", + " canvas_div.addEventListener(\n", + " 'mouseenter',\n", + " on_mouse_event_closure('figure_enter')\n", + " );\n", + " canvas_div.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", + " canvas_div.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.canvas_div.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", + "function getModifiers(event) {\n", + " var mods = [];\n", + " if (event.ctrlKey) {\n", + " mods.push('ctrl');\n", + " }\n", + " if (event.altKey) {\n", + " mods.push('alt');\n", + " }\n", + " if (event.shiftKey) {\n", + " mods.push('shift');\n", + " }\n", + " if (event.metaKey) {\n", + " mods.push('meta');\n", + " }\n", + " return mods;\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", + " if (name === 'button_press') {\n", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " // from https://stackoverflow.com/q/1114465\n", + " var boundingRect = this.canvas.getBoundingClientRect();\n", + " var x = (event.clientX - boundingRect.left) * this.ratio;\n", + " var y = (event.clientY - boundingRect.top) * this.ratio;\n", + "\n", + " this.send_message(name, {\n", + " x: x,\n", + " y: y,\n", + " button: event.button,\n", + " step: event.step,\n", + " modifiers: getModifiers(event),\n", + " guiEvent: simpleKeys(event),\n", + " });\n", + "\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\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o\", \"download\"]];\n", + "\n", + "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\", \"webp\"];\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(\"
\");\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", + " '';\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", + " '';\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 = '';\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 = '';\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": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "[
]" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rec.plot_spectrogram(winSize = 4096, overlap = 0.5, yLim = [80, 8000])" + ] + }, + { + "cell_type": "markdown", + "id": "749b8bcd", + "metadata": {}, + "source": [ + "# Listen with headphones" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "cf1c3fcd", + "metadata": {}, + "outputs": [], + "source": [ + "rec.play(device = 11)" + ] + } + ], + "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.11.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/examples/deconv_methods.py b/examples/deconv_methods.py new file mode 100644 index 0000000..2ece380 --- /dev/null +++ b/examples/deconv_methods.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed Aug 7 08:44:21 2024 + +@author: Eric Brandao + +Deconvolution - some methods +""" + +import pytta +import numpy as np +import matplotlib.pyplot as plt + +#%% Loading measured files +xt_dict = pytta.load('xt.hdf5') +xt = xt_dict[list(xt_dict.keys())[0]] # this is a signal object + +yt_dict = pytta.load('yt.hdf5') +yt = yt_dict[list(yt_dict.keys())[0]] # this is a signal object +yt_split = yt.split() +#%% Deconv - regularized sweep as it is in class +ht = pytta.ImpulsiveResponse(excitation = xt, recording = yt_split[0], + samplingRate = xt.samplingRate, regularization = True, + freq_limits = [100, 10000], method = 'linear') + +#%% Testing methods +ht_naive = ht._naive_deconv(xt, yt_split[0]) +ht_regu = ht._regularized_deconv(xt, yt_split[0], freq_limits = [100, 10000]) +ht_regu_zp = ht._regularized_zp_deconv(xt, yt_split[0], freq_limits = [100, 10000], num_zeros = None) +ht_welch_h1 = ht._welch_h1_deconv(xt, yt_split[0],winType = 'hann', + winSize = 2**16, overlap = 0.6) + +#%% Plots +plt.figure(figsize = (8, 4)) +plt.plot(ht.IR.timeVector, 20*np.log10(np.abs(ht.IR.timeSignal)/np.amax(np.abs(ht.IR.timeSignal))), + alpha = 1, label = 'original') +# plt.plot(ht_regu.timeVector, 20*np.log10(np.abs(ht_regu.timeSignal)/np.amax(np.abs(ht_regu.timeSignal))), +# alpha = 0.4, label = 'regularized') +# plt.plot(ht_regu_zp.timeVector, 20*np.log10(np.abs(ht_regu_zp.timeSignal)/np.amax(np.abs(ht_regu_zp.timeSignal))), +# alpha = 0.8, label = 'regularized') +plt.plot(ht_welch_h1.timeVector, 20*np.log10(np.abs(ht_welch_h1.timeSignal)/np.amax(np.abs(ht_welch_h1.timeSignal))), + alpha = 0.8, label = 'H1') + +# plt.plot(ht_naive.timeVector, 20*np.log10(np.abs(ht_naive.timeSignal)/np.amax(np.abs(ht_naive.timeSignal))), +# alpha = 0.4, label = 'naive') +plt.legend() +plt.xlabel('Time (s)') +plt.ylabel('Magnitude (dB)') +#plt.xlim((-0.1, ht.IR.timeVector[-1])) +plt.ylim((-80, 10)) +plt.grid() +plt.tight_layout() + +#%% +plt.figure(figsize = (8, 4)) +plt.semilogx(ht.IR.freqVector, 20*np.log10(np.abs(ht.IR.freqSignal)), + alpha = 1, label = 'original') +# plt.plot(ht_regu.timeVector, 20*np.log10(np.abs(ht_regu.timeSignal)/np.amax(np.abs(ht_regu.timeSignal))), +# alpha = 0.4, label = 'regularized') +plt.plot(ht_regu_zp.freqVector, 20*np.log10(np.abs(ht_regu_zp.freqSignal)), + alpha = 0.8, label = 'regularized w/ zp') +plt.plot(ht_welch_h1.freqVector, 20*np.log10(np.abs(ht_welch_h1.freqSignal)), + alpha = 0.8, label = 'H1') + +# plt.plot(ht_naive.timeVector, 20*np.log10(np.abs(ht_naive.timeSignal)/np.amax(np.abs(ht_naive.timeSignal))), +# alpha = 0.4, label = 'naive') +plt.legend() +plt.xlabel('Time (s)') +plt.ylabel('Magnitude (dB)') +plt.xlim((100, 10000)) +plt.ylim((-80, 10)) +plt.grid() +plt.tight_layout() + + diff --git a/examples/rec_measurement.py b/examples/rec_measurement.py index 960d814..49f04f0 100644 --- a/examples/rec_measurement.py +++ b/examples/rec_measurement.py @@ -15,7 +15,7 @@ measurementParams = { 'lengthDomain': 'time', - 'timeLength': 3, + 'timeLength': 10, 'samplingRate': 48000, 'freqMin': 20, 'freqMax': 20000, diff --git a/examples/reverberation_time.py b/examples/reverberation_time.py index d24e035..7f47924 100644 --- a/examples/reverberation_time.py +++ b/examples/reverberation_time.py @@ -20,7 +20,7 @@ myRT = pytta.RoomAnalysis(myIRsignal, nthOct=3, - minFreq=float(2e1), - maxFreq=float(2e4)) + minFreq=float(100), + maxFreq=float(10000)) fig = myRT.plot_T30() fig.show() \ No newline at end of file diff --git a/examples/xt.hdf5 b/examples/xt.hdf5 new file mode 100644 index 0000000000000000000000000000000000000000..056d52f5993e71bb61ad72bafb572094d43da41f GIT binary patch literal 2105344 zcmeFY2T&Hz*5D0D4x)faP>D(q$>Eu2`iy}fih>9zm=F*XIfxMj5fdsPiin_?P>hJg zXS$mpX3Pl{3?M;NOc*eJ=wILa)~#>rR&8z7*6uPC(>>kiobLWjhw0O>!PUt{NnT4{ z?AIkLD<&z{?|1a??dP9MOjq}J(tkbw5t#ia6#o;h{}UdT_$MMRCMEVOPvcK|zd!bM z`}|4xqv$=^*;%Yd@~{2B;UB60G9de33B8g3mk78zkDm0ay}o}MZTu&^@TZ^sc@ztX zj5H4oSQH*K-#-Vov>39A9ef&O={w@Buabo{z{Q7GBBmbw0f0TQJ|5ph7`}qCapVt5F zM}I)XE(iAoQPvzx{C3|0Jlt>rI~a9|M2pi+_y|>EGimC^R4@rbpyIja#{2 zX8v^IUrX4(#;x2xcIF3!hX;rLGWGlVPxkiwlKNxs*Esx_y?^F`nBOeCmqrHvHuoRv z_uuE0-|>Ic{)hLmjvffdztgPoA4@%-4R*S77la1u&I=9? zjt+pXYLUb`^}*z&G8Sv z2@7Ikjf3X@3Sj!5#2zi<@I_%@Wu_Y*5EcwZj`PiRt&GfcgCgeqe)<((6uux9j9k2W zqK+=VM1ulC7X&)a4-N_emw?ci;9ueq(Q_7r_tZHCrdyg@n(6+%%{0@Eh+YsJ9vcw5 zAR_$VGfifi^nA_ybNvk?BNhio_ay!8#)^OP-6ML62@C5n6=VJ@N#;-b-}e6M=YNuZ z2MK-u`%`bcmq0IpUIM)YdI|Ir=q1ogpqD@|fnEZ=1bPYluO;B+?%^cf+S4j=v41=z;u3#J{zLfh(_g30-{(F(CnUe( z{dINz%O5*XR&3y^KZK-u-q5dn35kCU%KkY~=_4+t`$yzok>3eR{wDu#3IDxcxoZAz zsmA~Dh5kK%`1f(BC?@#bwqNHDzx?|#0b!A$3&Q73?(u5<%J?7o^_`CWgXCZOvcLV7 zbEAW!CN2o?>3<{t%mt&wY!$?8fBtdc{px$auJ*Mhi>jQbjQao84_NXa^$$jU5Ak?; zwnu-|Z+pLHo?quDf1G9i(ZBiIzxHRc`ZXo}%U}A>IZSA9_`KNpP7z@NJ&ozP{*(Xp z_w@G1-Y*~Bzv?Cb50|;IPQmk{ga10~{u7^HWr~T}{I~Y~(!KXy0=)!!3G@=^CD2Qtmq0IpUIM)YdI|Ir=q1ogpqD@|fnEZ=1bPYd z66ht+OQ4rPFM(bHy##s*^b+VL&`Y3~Krew_0=)!!3G@=^CD2Qtmq0IpUIM)YdI|Ir z=q1ogpqD@|fnEZ=1bPYd66ht+OQ4rPFM(bHy##s*^b+VL&`Y3~Krew_0=)!!3G@=^ zCGdYPfzI*q7IH4%Ev1j$v8uC*x6ZfuWNnq~Vthwzu}Z-+dwhp>( z=bM|u;l48*e4mFp#H6isC`nrHaM5_HgA$YD(6=<-!D;U)2hDHTq3!$yhYwPB9F~_o zb=ck5=@7m2o5Oc!DS=9gqF}zFnqbZ)Z9(8!13~fk;erD(wt^@l5O`|32*SsC2ws%= z3Lei16il5IDwwh?P7o56AZV&h79=^O2!t2Y1f5GW1*^y92yQv-6O=n07Dz;%5F}I- z3qI-c0@M6z!Clu2fOwf}%$af)QQKg5^VB2n5mZ1YhoV3rtRkF>_Z)GK;3l zG8!Wl83mhujGT=cbBWVn`b-(b%v++%95`sm%x^SiX6cMz%tNf0g7cu<|mN9ql ztz=x!Co(e()-X-0)-u~0)-&cz3KP72GxPRMDznjTE7Njd8&mQvlQ}tgC$lDh7t{7B zm)YQw$7pWd$Bcb&fTs%Zy(66(%F(8q;6x1~c;1O{Qwh zZN}lk9mZw!JtpmVJyWjufC-%SkTKuaz*OIBWXO+4%sKTZOuWuhW}QY8vtGQJ(SOj) zeA)YqDe-M#K7DUtg40`>gDP#z%)~avrm>B=I<%d+H?5uNTHelFU*FECCbl#4=Cm_Q ztlOEl9c|32%{?-jZOoR`RwlHwh0(NcVaCpV#vEGN%)D6H#9W;Fl=)!ygc`H zky)hJz(~hEU{;^4XAXS1%M2fIhqZtauI+)YQB_D6>pU)2LlhDjc?NH2$Z{ACAosw9KC z=9$V2xwes6H)1XGE;NzJ(pt($4vt`CpUz=Y=1yZ`j(adCOPmxb9 z-~BS1R+I8E_Vdeg_>A)ATc^t%gKn3LE%;Dw8m&-aw{TE}UCxM#Qkjtz+_6a&o*M!y zLUzYiBrZy-a4y?aAyCV#P};PoV$qO-3Z2VE6{YF8qB-hZ#l(>76+7Y|R0JM=Rx$BK zXT^Kx?ut(j#YGErWkgz$ilSSW`irJp4iqiP8zkz~(ibJ}F%rESF+$YmoV6%soqRToABw~@ABo~Mo{EUtGtma6Hc^2@hp6@aOOfo;*P^=@--$F&d=O=A{w&g* z|5X$OKSX=hit*(y#Q7%^`|#bzB>6U3X?}Bn41c9mmfs{R&mWnhz$@-mUAyt^J8sZp<@t#ymK&L z^=b%j)TYCqd!WlFT+ri%h5G#6bOW9VGvr;y4CR~p4ddU|596n18}Z%V#ypla;n$Ry z@Pg^4Jl}1~ccl&IFY21{It6BYgUJZKecuS)NX?v2iZ|zpw)a=!2w3%8PuacULrY zG*;}ktEpIx@++dmHdgSG(<>IQ)vM6zcdh*W2;1^cH)lDVtK2F`7%#;%92w1=UAdC^ z`81c&!I;@q_mFW>`O18BRuY;G8Y~>DFhc040>UQCiNYCkX9^XH!h}w$D}^VV)(LNJ zNEMdW?+}Vv!$E?(nF!Y)-z#!=}X}c-w(nt zu^&SJDSg;;CuCTGoFcm_xF0+Jj2cVzHQDh=gV}q}^jPz;!&uEDrtEAb3$`xOh8=d> zfwgr&EZsSZP5J7?2F@7A%HxTwtJY-pY1|Yx_r^4Kq^Uohn!H!+FlO4Bc7rQ4kmo=TehrR5vmkna~v$ymQvfrc*v6asbv)}0vcE`43Y-+f>Yc4v?o{KAC#m&pu>c{15dy0tlwZ`n*n}ppFR>=;RsAf~sYS@DswXA3M zS$5HY^X$6~7uXY@F0vbDU1sOgI@WyPRhG`b#(pol&R+d+gB@UXi!GmXo6SzU!{!y= zWecz0V^2P-XIH@)WwfzQkJ{LTA?<9EcRPy` z+S#nV?QC*+JNvG-oxO6dot35SY}%1_)^}4o>k-t>&b4S~)8DkQRrzgfn`ayQ`E4uP zzP6P;(yx`ZPHkZqOSG_|3!ky_=bKq)jb>JTRudbO^_2BK|AZ~>c+75)c+6hw`-oko z+{kW|Y+&U(AFvNE-)E(F*R#oU?y#UCYHTKHJE9{l` zmsuUpOYDVx7ubvK=U5|yvuum!8CHH#HM?t5C7YW?*nvBFw*Qt2He+!ao9|P?dK#Z* z^IjLSIY&>ho->ZIm&A{-YB`5k;qZg3+sS>bw{adjCo`8#>CR^BJ+s*9d$zN~nzpiT zT50UVv76cF3pcVGlh(1<)7P*!wi8wA91YirAW3gaUr{7=p0tMbS7(VGnE~a zJBeM=HID7WII`Lyi2c0Lj=h;>&OX~_#Li!(%kJ{kWO-c`R;FH_r7QceqfI{xo9&+q z+YKHF>)&1ya(j82Z!;~QZ4w3cmdxOF`ADG9?$=r>BSrQ z&EONK1oQbm;k@~j#r*x@34HUhHN2Sl2LAhr&HR3gtvo)N$*WrI;-io6;rE*!;KTC| z^SgDA^Ix-0@$Sl{d_aFEMW6U9$G`F#Pk!>Y(h_*IrX1;aB^O z@wWg|d_>C(H(nWmmoK-#3kKg|WDEyek$<8ix;_9*@s8xM8;+6R@s^J04-`foIuH z!a4Sy_?G2l+^O${>lMB6icW8Q;k*yd&zgcI1E%6@y1uyUo-dxg)(?xDO~dCdOvAY| zrsLSQ=@>1Tft#Pszet#0_L%XlpF))jZ8jm0a5x!~$kPPoe25yuyd#^UNd z9G7r7_Bz6`Ls;w^$Y7Hk2mJQ39TvT{!CRE9@e&yyKDU{H)STy#47~UScohKdvh0 z$4@Ha?NpBOZ_Xa%OG5VWxX(`Bam!YIjlw3LEKlaA(s*7wG?I4_58{1S`tY}!$MQmJ zA+NU3jBiO9!aHR3<1nbmJL`lRTlK_%P1CkvO=gW@ zpB?gKH9ya0b=@Ob_kvYy{F-$vvQK5VJkMkY?cU9%dF8Viawpij$`bb3BElvOKg)VN zsbk+}+-8+s8d#5y&8+W%7wk2U_w4k~U)US&;^=^m6k66Piwt>16qno&jhU#1rmJY6 z^xN8~B0~oq@Gw9IvPMXOn4;m~=Ezsu8U@wbp}`9nG))fB%LAj(LDmUPxiS{r_H#pT zp17kGfs@gMM?T2P+YgD=&OjSS%ti;&f{@Oux#;?sg=j;17}B{PiGnp_k;UZ2$TMjf z+H))(eV&_uHoi|p@0KSaEwN==>|9!Fm9jw7=F z1hRHNi4ML!iDb4Eq6r44(A-m}kgK2wwUiYhE6dYJZ|`YzSiTtXp~cAKd@=IXDnVC* zOVIv;5_G+#1i5LIBDt}ps847qve;0Hl6RM)A4f}3+Nn}xf3g&{9VkV)TT9X8C8g-6 zPbtb9UW&}SOV9yYf_^S9K?1817_u}Q_~yG}7mD?W|hk2;O?&laJl;N$r=V8VD%5~WaH|$u$#UmvH1qk zY?RducA9|;JLZc8t5l}R=1uGQ&b@qJ7=QYhaB;&*VewZ3VSQRUqjF_?`7EWziq7ou zBIl(UqPw-#BF6lUi25n>J_W=07DG?jWB(>J&dw zk??cxU*N+J-R7Szdcq5xUh?nzf99QDi{pyhGFZJr2@lLs#Y^KgarX=z>?ItE9S01@ z$*(N&of>=mdK<#2L1S>VxhwYkFcH5f^TOSW{II~nAJ1u?gPE-haTFVgFFsm?zb{{o z=WIy8v7Sj-L47TjySE;@ZA-x?CvL&2ebVvN;tcE?kcmIY?Zk>FcH#JmyYaC0Jlqn$ zAMfg$kBzbqOHv;4QH56yvslsBqXK+=} zSzMlX9$&h95#N`p!)Hfa#nJB9arL~Lc>B`Z_-4{wJZ)_~?w|MoKZt3-*|Q#DyU|Z@ znsyW3@~RoDm$hKUC2e?$<#YV-aR*LZ`x1{Z?8Fz#Ut`AUEuMGo9Ttx4!r3Q2;7GMk zI6v|;HaydfZ!3Jod&hsnv8%pg=Ex8H@X}AbKT?boeH0^G7mE|-y*SBTAVEqWNRVYN zeaO>eeMpm%B#B)hNzyANiA6stGIqKYxsfMDELUlDNV?B%!BHo9{}H-LoY~@iTF9El`}i zdmu&zPZT2uqJLtekw5T-pWpDN;;(q=%r7|e%V*r4@(C~P{}Fqnbm5rpclh=6xA=0= zYpnX?6}|y4alhye+>qUlN0+zaiI<*X#T!j{bKMjCsOP8ez6LyE#RELvtsXB?zKhRZ zxP_e;-@x+P*YL37I(&T0C0umwJRU#lEZ%Uk1}CdkVebfn6{|$JR=ON-b1cCbaYgvS zo|8DS@)+KCrvUplg16V!cF5<0wCFN~GAEHv38&Gxx! z#0DsiWAFJcWPj8rvsNjYtoxWlZ0`3mb}qiazK*}ot{UCJPM7}5wzNp0b*_C;*%5U# zKv4%dhZ>>QOBN`{NPwhPk3whfyP{?0p6L84KQ!S=06MI`5UrdZjY4-VL-HYsC?z== z$>nZ9-luxjyP9;Aacw&?y1x@$e3XmEKiP|xH6BE!cMFi|rQ>LP#VIs>e+jZ!Ux6~` z5fm`G8U+kEi{>|9K(0sY(Dl&k=#J5CWYlmEWo>wfzFIs+2G^R<)48ok?$dJ=vFa6i z_VW$mmUN*>?Vr#qkFTiX#1FJZLLAHrBtYmU347b6z&%k0Ob5t;{sDQ=HCKfGruy@2E&K3Ljcz3K&VI;B0Kbe zQ8R#22Sd2+Jrt5dhC$hKBbc6S471mpK=~R|n7nK_=q@k=70(f%ZEX(26)nL2u?37c zY6*QJt>DNAYfyh?4Z;i?kY{aS=|fwHkF^6iX?svfvxig_2Z-7103~7qa0?Z{@aqDY zXvRQ(0t1#;7E&{8{fi6?wwH$W3nf7>O9DPqF<|L; zBU^`HVc`LfB)`Wg^HX?a)AL*~UgTn1@AoVA8$Z6FDq^DYo z9_*?_J2ZK;Zc{0`-E|5boqQaz`G?V|*ZUD`u?NWoXCt@t?Z~P)4Ru^eK}Q~~MSEKl zkwo26^sOQSZQBuyY=ftxF$SK<pe$<9hz7#O!~Y^c<*Bl)92y2ih#zAq9E&M zqM!9cc&lS>{FAgLd}_^BKEbhoce_-{cl+Gs(^_8g3RoPElUBl#o*J0$GU(Zhm}3VE zA?}WI##ML{?khF}2acMDx%grCL0fQ&%=lA9K<~@ z74N7o#BpAwc-KW9*9xm~asD}MqEv@l!*1Y$3wN>I;08QC zk63^GS8V7bM)aB_Nc%!5GV`?z@sE%v*Eyv4R4N3F!VPwfr6Y_J~a58=42oibPf*9PjBEIizNSBN~d8jTRT|1Ho7 z#=wV2o|-~@?R|;KX+IKRG@ZQII)fB{m`M(L_>*IKvq^D#06Ah5L{`k4L)140lX=JI zk{Rdck!Sbjlg>vA$byE2#QAy%i4uj9$Jt?IWmGsB%|#Fm@ksKqB9dI4A4SrYqKVDn zXi^}EAuTk9Gzw!$^08QQOLY;!k&B4KnVt=gLL8y4ain~C9ML-vN8VP)5&b)H9#mhKQE5RTgH)?SBr>B-XhXGb`g2@ES9J)jwMk)V#wEJF{J2a zG|BXeCWlT&k#?~tGHq-m`MElRJUAUrI`4-O?n5ZKCKXEZ6+*~)>4ik_X+9BaoJS1H z=aOUVgUKHEIYe4Mh_s6Wh)2L|;`DtMxv^y?5mTQ*8n;d(F;ae{E^I3KblHde)bS?o z7EC6M1wCvZyOX;L6N$LF8wqe3Mp@h3B1b!%e52;svP> zv0(Ncyv6VuKGJXjUtV8>ZA>sWpe6X>*pqnoxx=_nxDR_D*oCk3*^UGJwqT!w>+tKg z1l%zu7SB8|7uRK8qKd3m*w|<$`KV5^!UFkRfUaviEzVZ4c4l0GFy_kmVKDJpS@UJ#d0qj+0WWv z+51L{XuugQq~vdchJ1BE2QyvJ4@)1k_F@p)=^u^8ElogeRqK$qbSi>znP}36T*RI` zfR6q=irno^qw8};=xIhZGQ$^8z~gJk?E78B4tRvXs0BT;eu=I+yhkFtFUUAk4DysD zVNlQ781qIR;-~k8{x$tU#&7@#5;b7?eQh{wrUO~a^g;j3P|%e&fe=SCc(}|0#vQYU z)O&WY_L~4?wGq6w9ti`S#(=lGGpzG;g$)zkz;=u~1Y3B*M>TIa^KJ?hT=0W6nKQs@ zhCgi5420;bbD(C~Jn$Q`5Y#I|;qLedSb8f88Yjm>^MyEAXtxx+vX(>q+jt1pO@O|R ziBK?mHJB_-g7{5qU}ttRgzjGp9r^2^&%yO@Gw~lMY=TY4B`mD%j?3f#(&QLE-u)*!wsIPPcD_u`f2j z+_v?g*|-ko)vbkTCCTu0#~Sd8O@h$ztHDz%5!5fNg7F^l;C*QsOkkFPOU@#g@je>z zxkzAFhJk(2LMVJN56*m=11WNWV9?JW4k^q4n{U3*^3(_JPjp2JO3K*5Pin0Z;6p1E>fhUSdJ9y^d;lgs*pwP>O{&# zo1ELNL)N}CApJ)h6Z?&3q~?kxNm8&QE{+U&5DP>xZ!|ex>r6H@jU$oW6N$ClWRlx| z3Q1I%MouWqB3<7Ch(T*GQ98eXB<=|#o)J;R-F^{q>smrI3sw*p(*z>?nn=9PCz0h_ zlF6<~>&R}U4J7RBM$)x-6B#^o3%OaBN`8i?lQe}460vU^S#Og`F3=rB(`hGJcqW@1 zL^-75WG>k{Xb%~jlt)~f_Y!f~PwdkUkUI?rNuB;7q7ZnPBxDzmL3KySm5)bBlGbrz z;c$XfPdG_TrWcZFfv1R5U=gXGcACgfC?=QeN{E6+DXD%}N*hC9$rfq-p{sS8EBGX-i1dE=-iZ@Wf^kPoC$B zh*fh1>91Qsws@D5V+my>`amgZtt=r*w~EP|#?xf`lOiJdu&4c33dyXplVtkN6T~Uz zI5BWOM#PkllGf`5kh7C+6D@~G! zr(GfmTC|cZh*?JN&xs=qjmV)$zakvCxAHgok<2A^Cgt?CT{0E$m=m~ zKbrP;7vT>#d*AWF2RfL6ycGA!+2(DE*|x8E1o%MJ@&|7 zhE2qRvCUWyJaq+w*W?-C!^KKCFy=L{7jTA;u-(DWe&oZCnD|BHGN8XGRN71E+o8lN zSj}T!xaP6pl2=&mi`{JEcvUp;vh z0&U8!K;qT4XlC;@q%ZyuUDs?y9cFLQTjm?G$?F5HI&yGxS6?VsRRiC3nh^VO2wa_Q z2*b{q05{A6?j_hl@f`*-4MzeO<^+)^$3bU@J1o=jhIp9$t(S+FxT zyQj1ao!JEK?h;v@Kf1C zMf7thJo6l8$ag@yO9!|w?SS=rJ0P{P1N?7w!25;{aOwH=xzPdIxC3_NbUI0PZ14np(SeK7lE9&}IJ z4YfaZ!Ts!=;Ayb~9Pu`|IC?95sZ51;_M72C{zllTydL7Ck|DirHFWlTa|JangO?$T zpzu`$JP%w5*DlY29AkgjywndGs2805JQ0$OTw$8q7)Y3dz#+yS$YM+Ij5YgMtSfRmJp!GZpo;8|y=5EnFnfOKI(BWeA^T2op0H+$lW4cBi>u>to5vg#Vf`5rL{m(TEX`9UACWq7zB7nuEifP^pG}C-YRjIzk^`wq26Fa?BiR%+ zo?L94M64aBlK8zdiT~#yk~(%FsooMvj$i57qe;e-^I3`H^N}?qwtO8KSiO+aUOMp?8~@CHa)sS+H~tl z=ClW7MM?u%dHNAay!nJIXm29gAD)qwpIb@XyLR%Tse_!k_>#2dcM{>UH{`J6JEGC2 zi^P5}(=I_zC-tFf znv(SKVM!`)BSp8ANzovCX_|Oanm*N+p)1m4==jev)Mc71T~I1Zk15Jgg_&}6^#81$x0iff@@GXtaw0J?O4L=_CaznxH_l#wgG! z)(Z5UwgL_LDNm~!~{$O(&gq|WONDG%)=$;)06r}z#cyQrN! z3uq-T9G?*z?Iv=y?J>Ds&`5j(9+K$3_le-tT~a;nHZiQfL6*(9Mjqa+BeTa|BKjxJ z6HquyF3zeUO@}MV{^yvO=!wV{k23NmwwQ#bpCY;kPY{#BqvT-GVN!hTAX&6~ACXXjN$0n?!8^YmgGw8q87POoZEd1dJ zhfle|@>yPxA~_x6_XomP;X*iiDGKZ-FNJ;c6M!150p|znKz>sSGz(H;|C6ntmy`)s zy4g@rmJ74S?S)}?4#2%>hr#8+QJCO$66o0?h_)()(U}z>-i0A$d=-@JJOjQ@&w;z% zB?$Ao0%;qrL+Ytp;C$mQq_p1$^r-=?zdwetUz)(Lvjs-qZ-)la3y{g^gxvveVdbzc zNPhYe(zkX)0`mo`cb6rvWIIFq+IUjEo&IhS-21C@i;%+tW+tmTw>s)m%Y3@Mo zn6U;o`v32?pBpOB=N8S>=Z-Ab=c=~qbEo&| za|uWFxnalkxx7RATxYgEr?gI=`xc_liN@)3F1kJGul2a|Wj*>!^te^ldR+e&T`oFJ zm&>=+<&NFZ;nvO5;e;QDa2Mi-aMnKtb1N4Q=1x5Csi*fK?sB;{S3N+RJ07CNZ5L^B zDn;Vf;XDd7(O&-!Opd5+A@V)K%m93skwct}2|WSATBRlz!YuFJ*4}xV~JY zK#9Air^q2m1L-x326bH2nAm7Q!!( zz2FnDo4dgL;M<;e-3cp;UckV^?XY}n3tWh5f*~%CAy>Hp=3lLc-K+0Fkl9VBzkC(+ z0xmZ+w+7+eGvCr*HW=Mi`?^blP1-VZ*@_dx#6UC?rJ z2XHh4?$@Tm(=#csnqLQPN0T7VbQSo#j)U6#a2Vn_7x>PZ@M)C~m`hCrex(z9f60R9 zBpXmGFolDk^dJ~%Leb)W@Tx!tUgdvBfzMx{Z`u#gs*xAaDeqF`H{$@}rfx+hE(z$2 z*9u}jl5eB{_F zyn@||&+j>a=Sq~}b%7W0w91EANuv|D+li6(8FFNIf(qG}r%h6@A$fai1XPtx9x zB%i;y67!S_N*CEw#O&00y6OOwc2?e%2hicQ3-K8=W5Y$xjyc9M*` zT=Gt3ABpnHCyzHDA#yb*NM+CZc~!lPNIUSvZc-%~9(aaSgq|nIA}*7A3$GEmS+|JF zxO?R6@Q38R)MFBQuZc+JwUSN#9i)ChClS@WCDL<0kkp@_$?()~WQx2P{cv8K&PeD( z<9gOPi>J~wdV?%AF_WibE-KK&vz6%BcYUei%6_!Dj|#0wQl%@tt5MA;bsGO@Al>1t zNqzFQ=s~eTbdmR9TC#Tt^=a3kj>dX4B0!&B$}pggm4>vgc_^JCZbWYkG^Q3tCN$8( zl+LsqPWzjh(WpTqXq1dO?eoH%4mxi^3wK%4qWM;Ipt&`@^TL`w*=s{BCfU-mkG3>? zyB&2iv!^b+J@pymKqIRiXsSR!j~)_GzAr;7!Wi1~?+$dHs*uV}6Vk*iA-!}}NFRL@ z(h7Z+`i^30sSiu91+sMCJeCfh!_s-aES=)S(k>&Gj_Jcv?yitN&lA#7K|<;>SV+HK zWvKrWhQ?|#6cq_*#TWs7b;*G~9PdEa)!5SyR`%3rryVu;Y)fCc+tQ7>HdO4HHTBlF zrkj1OXwh0rdhwVAy?@D^zIZZ%O20Ov)*pt`rSDDYv*#vsdA%_mUui`Bb`PV)i-yv< z&W3cUk^%j4MUQr^)uk~49h%%Um^vg6qT6+~>G5Jsx@EKmbw007o16#G9&b67GgqNS zJNnU8U;5HjQy5-|*jl19C6S!@zJw%< zjv!AK2NUt{u0TB0#mVcVukb6a`*`KD zTD;-%N&KPjE?nTe77uwEi1qXsY(7yLqpO#AtutY~-0T!ljpp&*k15wo~6>s;oGdZQX}EFjb24TP(xvP48J7^A)(&B}!a7Rp#Pr`g2BA zs@&DG0i0jKKfs!;O~Ec{7J| zr+=7nHCg6d!f;FOeyJ5F654ReWwzYe;r866EC){Ehk%QlF66!xvfP>5eD&Zt`SK|NLZ5#oCJ_8D5&@Lu@a9a3H>dH&o6FVo;ffg_ZrUUtE@h?<=NRC_B~16>Mos7mZG5{a z=*>k$d2>TeygA={UYz_2FAfd#;@%#f%ni4i%)L12$vF)5pxmw(fW02Ci}B)Mt$0 z^oNh;oZgP)HlE$h}Q5kMZxD>a@v=2A*i5T}~$agT0`V1On@8QLp zPPjj$qsOn&0`*g$z~rEZzz5w0SHBxz=~M?t4bQ`yFV!G8k3qDd3{H(Hf+_EgL37q2 z$gtlBdoSmJtM3jt*N_fAew)Dd>RQ;%Cc;6-#V|x76bw$!2AioqP}eyQLYHxn@x>Zy zB8*_!18qQTKiIfc60TOiMaL#SK&2OJ&vS+)Zb@w$;*2x4^tesNWY?&RN=pT$H?e96y-LVhnZxCV2WjArkybkPTEKcmTlt`Pb zCTVzYNKzhHl2DAu$1GQ}C&HUN8abPo$%T@imll(GHHk!i*E(Vlv6+N(8KgjVCrQ1s zn>21ZKqk2yA^F`WNp^k-c`<<}Q(jh)oomjKm;rTU-|idana(}Zoz+10$Tg82QEepe z`b)BG*gMi1{fXq4d?WBljBef1ho07zrmK(3(#N(6^jN79t+Vb&^$JwzCd~o#P0~PW z)vie`T?WycxkKoePF=c*F`%LGL+MJ95k2(Agx2Yp(VJt<>F)WKbl_@hs=v*a=I^$r z8}+x zLUa(7jhREAE(oUll(}?0GmnDGe0t@{d^-H#0_yI+keVom(4yiH`q(3s9(oc=#pZ?4 zrlv6J5G_1`f*t#bzU4v@6C^- z1s;)9G(3{ZeUG5q&P33et0HKiWdzN?8%|B4!|6+jaQc3I7#$@UM(@RjQqhAD+G!U; zm#ke#XVxvC`(+kT55asof7U$uap_ztmJ&=ir_Z5>HV4tEs{-l4xdAlCaW);R?oSIJ z&7@5^GwAb4)9KAGe)LGTFO9dHN~d8T>dtx7`K6O-nV~0j+u%WMo=v2Qb`z*m{CJwm zyV969E>wJwbB~-O4V^lghR+*G=Z6E02xaMx0ET{?=s@>c+0heC;7uRO^Zy zO&Tmih4Uooj3eSy`RaFaTKJhXXTKv4I$x4{`!=E#^OQW@|B!@SyhFY;Un5uFUnIue zXUO<2LYB0Yk*>N^MEvMc@@&;X^2BWqLCQM`y0n!Hi{C^>8?Pn#J64gg*P}_-mtewb z_>q&w6UY;@ktATKHK|bni zymb-hCXAQlVq9goQKRL#bXz6PQNJH&Ew9S4F9&dNL4zBxTbs)Z8^RHLJDAylnc0vl5tz-wq37?PD>>9HCDA3K5M=QVIgd_8FCZ3J)Y&2VqA z3mjgu4W4pbAX)Iw{tC3Xd%$OFPXP3UK^rd^%J+gLy57(l z?hRQZ-cY>72ZjrLV3)*I7};_aa_(IPzwWDWR@WCUZ})|$P+utF`a!)hdF>4g4taysxEDD3dBJ&cFJP~Gf;zt^Ec$u{ZkJw$ zWxR~%oPsAkC*a4n<1qO2C^Tsvft2Hi;B4Um*!puH zxX;`Ri4MC#Z>Kwmo!9|e&$`0A6Wbthrwh=fn;}7GBWxX7$5YPM0A6&0h`FmF;q40e zcYYZ>lW_o@m!esIAwsd>|i73 zR@ozthS)96KED&3bsx+*8=Z%2_8+@!yzht(eDV_bIn#ZQN6tihjrEGjvC2RKkKX$6}Yqs6&J?rT3iIrN@!#-R4 zlhs){!XBEzhm|3MI65wj?{|r#L!}hT=*XhXMS0YyRYFB2HLP_}$LTRz_`X30zYFN& zbYnwY?KB5B9pdpsulcwu*aFoetx+kQ!THy1arK!+Xt&iKd#skBp7ct5)wUYz9oVxGCpY+qCp^20T4ewdPR4aLt~ z$1~P9uw(cJTIc$shkF3tlMcj$f{g1@3dcvuyR)}f*JR4@!X zj)mdXH(~hDA{;k{h2w=!;V5Gofr@7%(C={sZtai2D6L2|S`~>JCn9lwXe5fJM&f8u zByuVu@#XVK%;4>tiX+h>EfS}MN22(tNZjlgiG$j_^Met{R~&)o&PO1aMc|q*;aC_R zjz=uR@e;4!uA^a?%pZnN14D7CY$%$Agy0R~5Og{lj6q$zaW4tNi%EfKH4=b6%L33X z!XMwfzJWjFZs5b^*HPo*HFQYv!@1SI*!kruy8rXRGHD+aRP#nNO)qrO@I-ObD|k-n z5-R>Yk0YgL(dz1H?6oWw4#Q2h|jO52Zt`g?KW&Mu4+-ib$cyJAZ5R@^AK z1>+ZP#5-r#;o&4_oKvwH`C3GW*#(mX(Q# z;KdpO*y?N_R(bnbR%P{Gc7@4Cc8`z)tNoujYaO7=?qL*Jx6eXsrAQBVvsn$dZ*>~? zpUZWwSkY?kXo4g+uqU$Q*iFGF35)mHym~oo^YJNg#3Ma9?DIs9)JQq!-0V*rk|Dr2 z5;>l~R-2LAHlK0$yqFQ*x1I_4w428*&oKPEe3*ip0ZiS~2Lu zh%wpBWnQ~KWgPa_GPB&98QG2RnCyk0nD|+}jNjxhM!0^A+4+JWa?*sL+*=IxZIFV~ zI`;v%CO|%bTHP^ggf=xu=l(k>`*fV*T-|feEB?h@_GT3xmbbLTMp!`wuQyq zMUb!M0L@pHgGbXU2-I+f#+~b6_T7ze@V_l^Y-k%yQ`iB92D>0?!Co-5H~>|14uiw= zV{moy1Z-_N4Vm}PfzyGDpr?HWuI=-LU&UVVOvnfNS6l_RKwl88^n;eMYfxrz1M=7U zL*khLxEK)#^V5TXeG&{}&q6?=Iur_?hrt*d4)qTsK<{=W3|)!>lPx!)#^e?h@kPU6 zbu{b`ybX#=W8lYl40NZ*!l?5dnEvw)ED5*^2WP~=_0%|sFp3Aiw0PL0kpP0h3E=f7 z0bZ<6gm(`UA&V~wY*r+JM{p9HsYwFW$t2islnkzGl41B*GMHXZ2GQtbxR{U(*AtV$ zI5rvf2PK2exnxLkNrrd}UK`0|*!(sLl;V@%@U|q_DxU;jDiT5JP$D!*CIaVv0<5r1 z0D+2l*kd0L7s}&ciA5Y#-@6Nv5_du2z#Zr=i-o{xu^_TF2HfIqL)_bFsFsR`ZtGhx zWyejJ+m7{ z8k{)f2U&W)5ckdp)(3b)yO|e+WqN?a=SwgmdjYEEorMO6Q?S7KILJF5fgrnsP@%sM zUQgK#-(T$j%{$xS?nW2z5#0pC57&Xl3TM!GzY1pTUJkY&?ICO9A_yucAgsfIg_kU0 z|BLyMENcpCj>a(RGaC-%%z|6ZT97d?0~)8Of~Bk?h$~KmQ*u)wSxg+B4hw;B7eCDP z9b;D5{9@>*@630v4~&6aE7KX>z#NpTW{iAF8Q<*aC~)pQ z@3HZ?G2h1J%=;%*D%B--PZ@L5cAnwBPmAZ0nNPV*(cRo(Ut#tySDB3%Fkpu?7Gv0@c+RGd+(eH|+B_)^cxt$2FK6|diP z$G=8<@mBExA?13qkUPzn0(fr_593Jz<0l#Y~A$bEW z1N?F4lt4UpHVF593P#Npp%|PIhKWKExO8(Qp1dE0vVAvE);Jn>@41cR(J@&0G!_fL z-9Z$I!jdQ&rilYy?gjdE(KGDQ&92seVm^805dM6VzFHsa`@A6 zc5ynM-JgMK(=t&iKNAqIu9S$WUBZ#?p_a#J2g z%+5p3&s?m?%f;CTbMcs3F2+>kV7hw_CXQv})qrf=AeW755fAZ=_(Kf2kcCS>WTMEz zOl-WJf!W{EF~u|;OOB`E-?UWR(fR-d1Rr3R_I(s(QqW`dJ#^ZXj90fLq3-%bv|XBj z@66&+L^%#${Jw+pYhuxn_w4jtZ)2@`G%kB{6VtCpA)i?!ZhRe%^h6lii-zL(&0ri* z58};}0Blh8$By9Zcxc=Y{oQ?W`BNWc)xGi02~U*tzKjCXF5u6oGdN}HN!)(nDC)Hx z#Oo&eFzv!Fd{pd)jeT3uSZOm3ELe{Y%bjuSx>dN1r%#++z64*H+u;Kh2GxF9;`WO9 znCNeU)0P?Ghktr#m#K|AoHg*o4^_PHqlj~5r=jgFDU?tY<5>)*pv}Z28`ChvO5E;a zN7jB~YX#ca!ITEJo~dG6YLGp#s(_vPJcCtQki?G1M6-s&!L0l$Uv?QU9vn;E*?$}- zb}cV$^pfmscIyEJ_DvB#8$Z^@-Eis=H|~8P*Z0J7u8q!6iT{~7C5!G#+i-q z7&gkooC_)-HeDUA7S4qIEA_ym)eypWn83lV`Ovi43ZiNlxNNo%);iE*Zm`~A7wmA`2O&of!NXHL{&@5hOuC+fx+RxjpNuCQ81{l!tv(Q5 z=nDbC*C5UH2D~x|fYJUy5XcUOmc5~{TQwY_o=3pCLs1YYaSIIYMT3fY3^?%cBVoy1 zkg13RKdS`zk(vk=vdQ3h;vVSKroesm2T-v;6%J;lLGZV9n691)LMyVs=Ga5X4$21S z=NXNI{Y8)(Q3x>wk3qby z00cW9L2!3IJnGH^&(2(!sLO!`h1pW7^PrM(8a@XfhaY#C|&E-%pX%BJd?V#!%2Yk#eLExGhT>5Vg=t>!Y#iCj8 z>6j+$xv2)f^A+J~wJgZCNW!!Z5#Z|(0K=RyMk#8Lu{ivd5wLpC^bI#MhqJ1f(GAE* z4COP*0cp%_#dt>Kb|lj_&7aW}^I+`W?`Ncv*D)7e2;(hcz^J9lGnX#?<5WjAai+zk za-!y3xq-U$bYUSI!*#nZ}Fv-Lb?Yehdoi zUx;3d957d5C2r_&LaT)JsIh4a)(N|!Y^FPAIqbs&Zx7+L9mnxV`)RayzJPm*ui%OR zFI@A;2Q%OJqV1n+_)F3sv(y7|twAvUH#Zao=Z0gOUL-QAJZuz>M$&T|bE{)dy* zI}wk$Hi@|6UlJA;-@}f>_c2E`6{nS^;je8O2){G2-TNVyiRED9^<3oR%SZF0k8s!P z0zA8*5Vr>wp-5XX?$jzlS643fMY1?ihUoEy;x2(Qj8`Z}EzJsS(|U^Ks?V@e{5f_E zKF5i=N>oUx!s*AWQFML{zU-^PopCRaT~dp$KGtHwxtFLk9hfj^BV9@YyW*#A+fiU>Gj5Sw zkJFW%&{Jgvmdeasyzr5Ah~Xo|J#jBrd&50h)OkpKL2bk_{h#zg<|7FiN^|DjhF7|xPYu4t_3-gLv;RAY+=Vwusgpxd2NL-@C(@Uqr;HH`Isznbv zosHqYih1BR#}d|tF|fCHA-IsGFmPiPe15S8#-?n7U-P#?h|5k0J+~JM0}erTREV~Cv&i5h7IThID>EOi41Uub_a8Wb|K7GiAJq7vj-J<}uEG&eC z@ghih_ypE(;zH~Q3p>IoM9nM%t@LvEss9v);+}zuWF;&=Rt0BYR722=7jSt`EiAbI z5>np%2dr2<95HTyG>1lT+tdVCU7JB<+bekQ^cse(-@q!h7N{F+ffM)^jJ;anmsJ~Z zyW8M$&^s{Je-BTK-h(A+2cMF5xNF=29#I{j{i_4K?K|OCNGELnuM-*sx}evn3$j*r zf%MKUkU881*}SdWy$iUGT`=3U3+9S;!GF!2Aabh{-mUJ0RpTA7J-!2EEIVND^LE&? zyd9=JeGf;>-h)^4J8=Bf1|5sqz{0;3wmp9fTZUV}T(bp+nKzK;{2JD}yaGO#W_aS% z1Oc2z@KA4n#GyKvc={hC-gpVoi)-QMpBi{_w;K34RnT1j92RbU2HV;zz-(hVynbE^ z8;mLNQaoTmM+p=eJb@jDi(t`%$8e(M5%BZpgOFA(L|A4+nL`#Nug(CcRcX+^=mG4S zmjWZo$x!e&0kZ##1OB)>P_a7(q;#WUv^@%vLL)%SCJe&bgF*6QAY{q-Lsq`nUS90SnM{~EP)Nt)yjB~G?QDSFYHDT8UEn`PR zcd}oDF7k30{n@jHH(3|`WHvk^oAnzmVef6IVmDWBJ#H*n|O0K73j7(JeaqK;DpZf=gk zf6mePw<-p;t?uHUq2=C!4YJ(re@nyurFHZ&9?Q71znW!{lx6@k4w&3bu6MZ=o)HF#7{aF8YWHYd&HA zhR^uc=?k8>{fgITb>r}4H)7p4tc(1PnvOmA;9n1JN$$nDOdn4d??X+eA81(p1FbCj zaZyY^F8tY#repvmyaw<^;Q$``IDox^gJ`cZi08Ej(R=0~x+)H$^yC1BzZ>Aij0aHW z%m7Nw8^Dea{doO)KT2x%d6cx725>5&VSTetf{KbzL|or4tVx>p(5jcHH*$9U4Wn;hp)d$i8U7 zyPMwN%C=Y7wze6!ls96lZUY|nszaT|mnf%Fiz_$O;Kv(P*qi?xFE&5Ll%8_*7%4@K ze~5QRxG2&41h2j-LiNXw@n_H@RN9t@543aeNmmvgxRrqoi_=i-`+b~q?H+EKo`k7s z@n}BxE~;n6;1%s?JQ*H^YNO#8z9kg@<_F<^;Q$m~a~*%&^hNT@8`Y#d(f0BM>}WcL z>(q~8*Vg@572=Mo3%B9prj5AhvomsfSKycKCFs{i(4FTudzx&91Luv=#6b^VNNAx% zl`2|YlE*mxsp$Js1T7EpqtKKgcAL&OR@U+zTSV&E9-DG@p>YAbSw5Am8jN8Lp9irs z!adm&nR{3(-IZ)rI4?i^mm<3?e3;v4P{Dng7sNH$Y{Jz!=wEV}U)d&pkt_#7E^##b z^EpjX-#B;gNHYfy8ZZjxOPDQVuFOR71!jAZKVvK%&D6T3Fn2QZn2ABktTB1XjP7Y= zHbs49UOxHFZ13TNC8tE7=C2eaotB5oeX1bkss%zddZ0XK4vhHEhb^7f&~I!9hfg}d zwVYM(^V3?`DYFHF=edEwiapS``49wcKLKT%&Vk+1E3i}18~6o%q4nD}sIKvctdtkwwvCEGgYY|yD0-?JF{SeTMm@9JcF_LN(iZ_2C4QJu(kgsxc#jI{-Fk#)zbuz zUcZ8yMQ4CG+ zz3}y0ADlAj2kAotaR1IA%r5^40q=f6NzZS{?EeE!-9r%b>MvX_9EQH25$M=73J%I+ zpjtZyj;F@qz03qWNt}Ro-G5-4@DJLgCgH)+Nx1uL65fgMkx^YfGRu~aY+cJo?z-`j zFMIij`F=hUw2O~?-^@o=F5@Hl^Z1CSBCp-oNl>{t32Ii8U{e1NTwMM^eCq`8t)76Z z1>-PRb{s@^jDcdxD7d~KfnKo@s4y6Ye)1R2EgOP;4u7D=>Nlin{sQUoK@h7QfP10+ z(6{Ud4F2r}8q>qWy6^B4yWx!OR}d)t4EJY#f>S;p;PTr}Xx8a~fZgxmacmnLsC)~> z-EZK@zYtc_~C6Mi`Lh!u+&i zxMEcZy`_&Jn&d%ZK{m|P&I0S}=^*_10i;-^fVp21ys3$YRFS(-&54062X4XT&`5C3 z4uj$6!4UN(0G4)LhXtQ}!K2d~LU>y9?tt@9z3n9M>l}uS?R!8z$PK(rw!rtQwQzgG zDtPh23q+Z{zHc}NA#t2B zxfLA!54kp>`ZZ59NQ*}7uQOo`65MZF`9vrGCJtlYk*y4 zruZ(z64f^l+$e94W;H8u=h?LwuC@hFJ$A##4tr6w?l8_+c?y&90_sJ0;@&bJ?D^)0 zK|GGBJ39zNNhscTj6l21Hxahp#xtAl;ImacEs>Li%GxQ|ERc%IZRuE+k%bwjaJWFxDbOoM^dWNs3Rq@u|8g&0ziyPL};Wr+q;~Q_nOLnhu z;pG-wkll(lZ{DHBpLUcH>%#PDAF)^VGotWU6dLTt^!o1@mC}pZM}J`FoB^EnaS-PQ z{z7eoKlp|_gjS1((X4a?^G(L^e$+UQ{FuNyoJj=2N0+qn(Je>$>6w50H0+uHy(cb6 zQ?CiqTmJ;g4}|FC9U-d!M~JFA2-CW7VY;|Qn4VG+p)O7$^sl!FU6d_C znO7q8<8KjaI#rbFX^GM@V^KP3CQ3Vbn>+9Lnx-gSDJ4qteu>cHCK2kMB|@`3MQFk* z5o#_kLQgdd)2+e6bihuSn)UPgyD3B)&4uWKhADLY?kUv#mmqzAL6EK<7oZ_$d1LM6 zr;#rFboWy}I$e*CdWlS8{-X(ew|*SOdq#29sSzv~{EKVdhtQ(>H=fk~g(@coktyiM z!QMVxuF{Jx*5A?EsT;?)e8IvkpU~U!1D>+##Cyu^XwcV&nuTvM?#vrx4PW8y*NwR1 zY(4&v`VZq{Uf}r|)p+~nbDS>x6g3Z(VObTT=5#J@*;9-m4<2KCM?UVC&P7La9@kx$ zfw>1#@%XtEl;iQ+Cl}-K`tduM#M7G%>~Es|tO!(@2*K)?fq3!O4P3v)4=*YD;GAe) z+`7R75na8G21$k&W_68VFzXgv2UGt`Q9tH zvq4t2tb*!H)}ddJRXF{E8$KG$ee_X>EA(SdN$^;V&AD=W&I#cJPFBV{j`#yfX8#`p z#*Zvx{`l-=QaZgE$+0lzf=nV~rJ2J-&gM-E!~Ylu-S>>Saxc@vH^#K~Pl5i;lCT-& zpme$#)SQ|L>d$AxE*Vo;wAK>bg9#igvj?GG-Z~_;9>R3D!s`X@;B0dMvdxb}wB9)= zmhu4C-`=3V)emIw2K1=}LDbPu=)?#}5xE82Wic>u^)A>JC&0EZ$uL*)0R$PO!y3CR z*yxl4XEx?Tz=p?gY*jIj193rRCWXk!GH`5u3c3lEFubz{5~sg}$=W*jd9o2U$-V-a zls7Oor65>0RIC7?v2fb2c#Z4&!R#L?0l_XI= zC`sf-CCFZH38Fqlf`ErOsr@BJ{@Wo&mRE}sdjnBYeN}|Cwg?kXU13sjScs%QoI>E6 zAh|w6kc6%fAg(9*$-hWGGUzr5SpgH^kUj=Y+!5GY@fTF_5AbLG0`t&8sN35QpUwIp z?Du!*OX~*tbzeZ^*GDk8)&*;1Iv_Xr9qbWkh2Vp4z`mv#GSwTQYhN7*q}75+M>S8M zuLScsPr=Ed40yUKY~EG^L0gKTWOV@uTjxRe^lb1M%7DqrR4@oj0mC&(peGRzOSrL+ zxjPzsM55qlVi;&G2nNeCe{i$E2IWtE;5x?>3S7=Zjp+$U8an_H#qRL);8swU<9V>N zSAmS3Jw#RkF!mO(`^j9`GfN+CU(*DaE@collZ8K*#NaCBhnYjan10t!j3L|1giL+L zw5%&&%0g2Zv5F|>P_HlJsCJ0?vw9`7^t2K4JVcUtPu_BTR^R4~-I>R^q_~_{FEzGg z@bxOLgy;kA0-dki^Ko))+ygUKBy%lmntqa9Reyu+cz&CeDoSIOlZ#onR?VXOTeijG z8~ajVg#EE&3TiWw_+T0@XXS$$PS4Orr^AN0QQr(3+pKZ-wS|~tupBo%b4I?6n{j!E z8@}7N4>va+#XX#}m>PQpKmPT`d3ShPoV7o8H3s3=U14}-AQI1=j>e2%vDkYc9%b8- z@W-P2xFsbG4JR|v!Z`;w#^$5j`^RXg^aMkfvbgtnDf)+1V14RyR4A-QQ*JHt71i;4 zo{gv#@rvhpZNaq;ZFqiKJDzXqL{tBd=wbc^ZCko={m~x0GuDSgmj-a*ub=3?{SR8= zUrd=cih(ZUSQq^dXYb~t6KDD9>#G9vet;l#3!FlS{DkQCi^9}@zX(0zEK2#z#OS=K z;&k+bI9;79LAB3I(xcW=RPT=zU6eMJ7HyEGS0(e+1^=K>|k*^r$CI#zY?Vfe~3`v7oky7!t}D75apAbLJcGZ zsqiE}P3YmH689$2XV(NiRUX5yrNbz?Z3q|k{leVigLvZm4@}(Hi`$F8;dAM)_?L&X zaKL+qdbgNeT#Z?dEDQs2?ed|QQhPvnoh4lw|~#E{&fZ3Pbo!_gDk4(Jwd_N z$JpbOkE1#{xPi??{Z(mryEz3L)+XUtO&k*ISgcOGg%$j~xGj&b=4Axp0Pl`pc!sSh@^Z5-3Z`_e>*utmTNFh&&msl_#$Q6iD_WMRMi0BC(89 zBF(nSWW_sW5_wF8q)w=iD?X}3T0o6#IIl*Qe^Vo0ou?DM{OLqcY6dy$I)iwm&mamv zW)O1&b<)0ForndhlgGL0q^nMyT>GL`=C$4J zs!ks9uD!y$$1~o&{CW3ml$=50@}`rYPSZ)#S2eQetQuK1sY<#%REh403K2c1LZV(N zlSWHrQW>d4E__oYKh1gLzpOyka^=a&-*UuomK+&fJ&lwfmnDHgGQ>SenmFZ5C2oaM z+R_{lCIKB9hf0`x0K zVT#-^G_Lsr`F=m4@?k&BebEb2@4kUg*B2;g`v{daozV91Jt$pog@g@nAXc>*<~G-Z zx6e!9>es-Or_aG>eFeC^r|{f`3+?qq(8wu(+W1`fJCX&SE7Bn>@;+>Ql?0Pg@lXJ< z@L(^`Lv*9ut%dra% zS+M1=x3GTJSJ>{FQ1-&fBvw=L5i6MYj9qE}hSh28W*@B^Wh1``;kvt1aqem*EE(3o zkURQFtW44UKPwD#S%_|(%W>bUmfkvqvAw4-&HOT!Kk-KQWUVsV3#n^tB#q%m1o7IuCGzI<}JD#yvGxsojAMpBf3g`#hyjq@!rus+!Z>2{P%z1 z#+)I9>=6u08b?F_N&GdBpVr3+(3o*SYP(5@=4J`g)^QPNKWKonAVtLEk88(&QXX`o>O+9)6)kx2~E=<0@xTLu+k1c~6^8 z6V;)v?mG0tV;veLFpHkDpG7Zv&!YDq&!Rs+%%UzLy0lAMmwH(0(gjO&DgSa^`oUh8 zzOm7zo%*_TLQ0p;>6t}Om(HS1L9^)6wXJ`5A4Gc1It>}x@K`-lL2&c{#Js7&I0opH?29>J@ML%4q8CoXE~$CD3w zQT*UHG|~Qo67?Uj{CEdm5q*byBU|vk!YkYr*nlsGU!u564chax;fMScc-Wp|j#mlZ z%P+*U@A7fucs3rF%fvrgsVJv^4@YMu;9Ipj_)#nx?FS;zyeQ3h+YG!bpdeab_f)XuySc!0vDYc!b`AC7G$``dnJpr;S_=v@OezI!6AhGM8LMD$0lat*dB+x~SSX7CVopU6~ zXpj`?|1y=BSjmu#tFpwYdK!`D;oloZfy5qGB+G8{aIa9A7&WSp#h+D))Sw!<@Mk*l z_&I|}b*mGV*Bay|SCgEN)gpx_W|BniwA$eG6NUn$&5miScawXV^Ja}eA!hRbOOEqH> zYh_G|9F0l9He(|1ZcLorjLD+)#-!WMnAqtW6Gs7KBKz8i_$L|>?k?W78b-va(U25f zG9;hW4aw^w0}`>^fM_(&CLZf&lj8sMNh8rG^{IN~iI^U_xl@-M%AZ9Rjq4C?Mu#Yz z(Izt=%p_~-wMh1$CRrq*NmOQN5Nkbkl0SO}3D%iT-YBV&7(rF?>8mm+f2u_6Vid{I zeF|jrTzMkZKaIpbkR{VL%MedNX)<)5$8#4+63e&ZM0cMU*)||T`i~2fAH7q^p&f$c zLLEObw%{X%rV|kQbp&$4h9H0LFDNVP2f?MikW}6cRi>XIF{%qT{ovs!rxheUUW0pK zBP{>?AM}g90MD6~U^uS=v@9tv=c)uU^$H2NFNKJ@P3`I)uiU}ei~ zz-zo%>fA6est<(l{ntTs+y`z*d%&2=8E8~G441`r!T$a&Fr~&B@b*#=aV6lWY7Qd2 z-$24CZ3vQA1(GQPvpFJg>BboIIk1~K<@1V>JyOoxUzN?w(7waC_Frdm_Z(!tbu4CJ zr8*Z7D;Y)Vg$EFp^MAENQrg+%dme_cCkVCec8i*qS;)? zWcPVd_5rt%_3Ho3imHsTv!@HA<$Y=77^on9FcVj)8{x5_1(^REFnR4#e39miMMGQg zuhlM8IC&W36VIT|GY`Cd7y481n77i3%@cP-|X1_J$;*-IoXWZGI*` zyqJSqpFBc#pa}1(vsk&P3`O0Zq4CLT&i zvzx~Ud(m&&0OmaUh38lN#k|*}XtLoSe*DBo??nqx2m2|spihXl2J+B7Iuhwh5zVOfwa-FHEcUUt=|p`6(?Qr3W8X*Zxtk_~CQ zs}TixW4gW6n40aHLmy4fp>5%FY1|AG`ZwN$wyT)ZRRN}y`E5$m*3F{KDE-GPdVoE=`Gv&bm_wR)X`=>%`lu#x5>??yMLO|iYhaD z{-znd?qWuNDVfod7xU<+GxO*Pm3ee;zA3F*Y)WsxG@+fVOlab>x%A`wxim9&4iy+R zroE2F^u%2wdgp^7J)vPp$JZLrMV_;%^F4iPTB=8Tnslju$1JM$QHMTg*QT7tne-E@ zMY9q$>AlMu^tH1(byA-}wLYrRO$n-0V1o)ZnW9Vw(-rCZN%y@Mrz;nW(G&MX=#L2@+T_I3jqeIj!;gG4Xvsew_Z!6k^}m>Q?ibSM z{WvDti~gh=Zy)%C8~i(QFzy}RPHn+U51R31Y&~*)Yw^PFDzvhBiiRSk=v!Ta=e-Nj zdR{*MYk7zxXVP(pmongamNc!zdMf`c=^07 z6MOL3rEM76zZSDMF2{uhw#bTF;O#ZWxPn*vW917KlpB-g#Sw%t?bm@;wPi)-HuW(-F*Kuy@ z$S`RKEtz>)ZcM_-tIS|PG!q$@$%LktGJOx5nf&x_ruWV` z(li%dr&xi+u|;stbQS1--vH{j-9QQsz?GJhFtYbD2%hl)<$2eEuR9RDZiRuH?M-n1 z5Ccw^k6LNvJ&)~UqHgNdN|mh)wH+I|ZNM+v9F<&gzBa=mE$$_Zw_h4TF~AI2bogf^s=Oxe_Tz^4x^T9bFNk z`$d#k$BUD4XGxMaAw}Nu_z>9f_+ZO4vSzq_6Zd=8#GuTY^fz0RoDOSpu*;fg zwpx?_s;$ZC9BZN!Y)$faT9XxXtV!p96*-e`MW(t~kxT(AvNq9@h*(&XmlYNy&B1~s zmYb8}`Q~Kg?gFy+-+UszVLthG&x}a)%p(`|=Ml2alK}Q<|rSoFb2b#b^ zvktso)WFR{&*2Hrv#b-wf|x=vB!oNyEq{lr?t(y3G~E5mi>1#E zfpc#DVC?S;5?P)Q7k(D@;$dF-ZFfi++zgVVj=XkDpz*s6Z;qOR(jz_43YY<9o8{n? zrWl;06U+>gZ_Jm7X68i?Woj)mnC^==8I8wY%-8zOOtqc~^ZkS{b7x;M=TqSdj*!MQ z8|6X)?y`T8+@%TKTvS(Q`??+2w9Mn|P<{}*IWUPmzrB!MH@lYY?&)ObrTk%)4TNy; zqBP#CRKaXX9gJ8$2OB&s@!P|NxUG35W({mW7r`CaBXJPh#ZF_<_!azj{3=Gf-oPIF zV0@w%fz|xc*xGyt^AZwKZufnx(8@r+*V(A)^9VQT72~gRmRHxO91nCn$0pYoSn`?| zcU;trIuBaVobNq;Tiu015ub5g?Keyw?Zc88KXLzpAv|X{ijVF7;jk({9i1vjtH-C% z6`zFZ{%4|8JVBf)pOT~(?WWS{qB8Vzr7WeMax`+D0(E?^NLxLXsn!ftDxIfBL&*#p z@=TqMF4Cmz6D|5|wl?Jp)1g}jX3;7KJ!*POpI&R9O^at3(xP=n^puY=eU~GxcX+Q_B0S);L^yfxG74iuEDPT*lF1Mvs*KO$&)|PJgW=mrv?5MYn z9i2Mgj@nq;Q85cUde*>>`pVnUd4FuFSFJ5Q5o1e5Ty5z>Ra-i%me5D1c=wVc^kW*( zKyzL{#SB%R&rsnM-aoBMa_E|aHWW*(sg#s8wRf_jC;cty-4Y90`_Y_=3!2lNDhp_b z?tJQRXhx6g&7*Ourc^`7gz|lzLs#)|Uop&x?%Qlgom32HXT3hv@zkSp^mM5dkIOc0 z<#E^^ExP7}CN&vUr`G#sQ13TtRE?-o<#=Tp{8y2NE>)oO!sY0VW?7mcEkiRGO{Gc4 zBx%Y`aavslKB4u& zPSoUa&M7f(aJp6##@+o7%cX0u^z1WUEr(JxG~lB6=|W6>oQKe#g`yg1Xvg#TYVYQK zw_S|E7XK*J2@gf7@Bpm$_ruIfURYXp4%gg1f*~7r;ct;GDDcn`Etf4p#a3(7*kOWA z?X&RFS~avUl|k`Y!YC>9mpzx)#qL~N%QkgCW}8nYvd8}fuzTJgVpo;fvDwjz?9vyn zx&G@sxjUCUC~@n~vx!*d!|7^y%lT@m%*dWx#589eVZ;XlnRh-(%o^Du#_iTiW?23s zGxf$WvtmRT7NyEUx6^cZ{8Jb7gG`}Fg99Ja>_NxSnWtg7@VqN~cpjEx@S^qtbO(CF z(X4AwTp0-0+QJ~Z`zAd65zAZO5}@Z(3Pd)ig9A4kp2t3d<`czWW`~d}TmgT|E1~mr zEf{O?{F?X*_}8_9LI=-#G~G zvGZKIySux?02>1_za|1IsHhl-jf%{3Z4_Hk6axbTMX^Oic<1;2F^ApRJX5R`KFR?9C_Amo)ebljW@0mr1^*IF6aks}MX4)Rbp zp#VqEDnZ$76<|%(U}2v+?4GR&3i8@;exDAkwbO%=)B50VX9$w}jNpK*35Zpig8Dr( zxT9wQa;28=@Q4*m;p#}EiY?6cu!Ak>_VBUN0WxYF;nNBySXAQ-GF2|HHk}7w+!-+9 zMh&xf1irNal;*lZqp}<1UT}lk>F#iS)E&Z>dO*C0Cp@e6guXAH;2P@%(kHyYN5mVR zgn7gDb>1-TiZ`@>_l5=qAGl}f1M#jtVB+lqKJGryX3ITS^MQylZ>YQD4SL(Wfj`9? zEEK%q&?PUZ$@hYe$zI^K*%KTzJYn574~UiVfDQB9!FRw77C5*8sd0t>t^rgE0|+=1 zaL!;re=!g4G`N6It23-S-~{X*N4Q__0B@`9VIs{AOq^_?O4tT|UbljyTrEArSb+AB z8T?#n3cmU#V0g+1_PQCuqx1T3(?t*J+jJmMP8pH$Dy_eL2#WQI4t6aCQke0uzHMaCZlA{ zt8XM??g&v8{XjHUyy1B47vxypQ*z?ULvly8mw05~BA&Z@h-CjIG9Y-4jOcZdxy(s& zA>b(C3p+?Eg7%VFw-)lzw24$mH4ua04J6>~8ltv(IT;9FLRvV_aKXk3(lDA!j)o=^ zr)?4B_%mO!SB{V^?lwd=+mJLaR3j(W%aD&-g~>+v%^Yxe#aQdyU|a-FGLIi_XY_Zk zU^4FJGJ1hL22V>eUCx(zX9nYVKYysYESn|PbxpCk>u<$q*X%(43;b(u<=U6p7T(WR^GEa*~Q?!F-AMQ^|al>yxvS#D{Z5Hy>`;O`K|Q!vNn2r>k;a@uY+12 zJVOKbo~0p;m+0R`J#3qGnRQ>V?x-{W4o%Q-V?aKH~ zl^^`0rs{mC86bey%O<1zdSQHdKosRr3^!eqK;Ju(D0f>LpLb8g4X5N#W~T!BE>S|| z6csG9Rzv%7bqqhRiHGKEqn(W|-s0w>+$9G1UegHOP8egXn<=VXGQ(M}78rNT5)Z0b zW7+~6%z9{xyAAD8y3_$1+8xnk&?K+52p~U%K@~^cEyqeH}v&!$Ad;5 z9DeGFU+;Kg=VmW_72%DULOy79$Ok=xeR0DpUz9KL!%Lt2a7(T~{`bHiw>bwO-57u$ z2Ln*wBoMQ50&#akAih2qh+5ABG5UKTE*%fV{oHYhd)&vJdwxC;2O7D@xq;YY8i=Rg z1Ym1j0M_#YaP32XT$k^UJHPtjl~O+xe(j4nA-?#LyM~?IwXEW<=|r6u>fH9k7ZV;h zs^@{_?(P^D<%Xw|U2$tNpi~q=O?L(#>haKLk_*nh2qA?AA;;EzTQ3m($JSr*#3xkwXfi#iJ2RmIt( z%E(ht!eny={LRRrj`uYDdXT_y34wFD-pi(wDHD5g9YLi>|~n9FIWWWpxl7Q-=G zyz>{mFZqp%lzpOZmxpMlRjO%1=2n3ac&ikgfGU$BI|(XK!xV!1fkZ zu>zX{*sMcpY~}ocuC=QdcZIk&oq2KVj?3CPYk7yNhj~M;y38q;aAuLhLdHvcGc)<` zL1z2Qi_Fh+kD0fdzcTxe2$D6@Qbf8yh3sPW$w?7w(iOlEy&7MVbuxl{dX`LV#_~w( z)EVUYl!c_Sb}8wbSV2yft|h(wo4C~VE#z3kb~5~NHY_@Bf}_%G>ioglL6 z{O~(X5UQJnVD$qL5D*rF%a#(*86gRmN~ED@$uu~;UJeo)6ySKh5;U(>0fA~YxRR#< zz5ZGtrKy$9zz~F;jN$%}3HYx!gHUS=xOdeO*jQ^Adu9W(6YW6njy=5R zIYLLX6U_SU466P-*tm{?8@C9Y5_APGOE<_0cjvf05739_@TMmW8vljCxL!C&c!ooFOgI>)g@bKsI1EOH0}sN%StA@?d=CSwvteLb9R~Lu z!oXrM6qp+Bv(!Uj*?|zaW*!24t-)|aJ{Xeb1i|b3fe@@82s;Y{U}&#Dm^}7_asfZM zs^tq#_C9da)f?8kdBFxpPk5r|0dqv%VcsiO7&!*;d^Uj;M{d2qunTx>c805tPM~(j z0YXykq5O?4)Mwbh-99U@^{|AyyUhV7OhGct1o|3`z_i~0bY=A6zMC#Y=4r#}T1`;d zt`6%DseAEI>?{;BP7_hjXZj`hdi0SgKXp9N>Xa;NRH4t@_X(|k~qAS+>cyHB8z4a58Zqs zbSs${7e^4__a*mM^2jVPE7Dc1N32JbNI~RO^7{xs*C&2rx(+{JIy{m2dZU%84_eD? zTVBS@&vR$=m}$&)i7UKd-3Xq^*~88w6Z&215=Xl-0z_EdRSxXj%h{~h*a|k}zn$!J zl}>i!_B*V*>Jad-_k7k0GTnF?{9wjUeAsFhR_HLA{~L2oOl znEL{n=ev}y99luOm#n3473%1wU0dj&(GI$%bq@_vYom`>9HBo(I%s5I7d_E@j`j{+ zrp3nBDWu(@lh-_;^AA6!xmTWZo`To(zrOd>|K06g8jx4D3T+IZd;`>zh@d|f009FX+_L8Qs(9=Rh;gjj-#HMc$jEowWThG zE9;}!m;r9MZ-n>um~hyh8LC)X;Lo>~XtvoJ_cOK_``8Y(x!U*ruOptC?~I9~E_frC zK~Bz&SIu0}a*-RV-f+j+Q$3OA?ZxqY-nh5k2W^k};+qS8c&Nu87k39>WM?4CwFKdr z>R@z=4#B0Gp}6sRC??j0VXs>_$1jFsdsPHZOpe57%OcThA`(ptqj1g5D9qH4#sd}6 znA{PKm7k*Vmr4viBr&KE6NASyWAI>34DzMM;NhSc?6izQEzuZ!{U91e8l!P_cr?zM z6pdF~qOgV+g~xj$F*Z07XLU!Qf_(&%#&G=cEezc~!qBWX6!Clr@_!4)3B_PMYa4{2 z-htQ|6o8@u{un^~aFu~CKIG~rdE$lFTRm}Yo(DE+x#OQ(u1L9=^tU9zGdp-FZ|s7q z`e4T_0;+=wjI?ZM6BO ziLXc0v1yR2k$04FU56r$Z;;2wd9vu~D1(s`lE_V>*f&cI7jqc752xvMtrWyna{Rb9 zc7p0x{h{)!f6%6lpXtBUqo3tH#$gkBNpqcYd-(Bq4)(=Qg?RP5e4>QmT7 z-~H{NHj9qX!ifX)VZ|Pb1KVkq#}+Exyori^`;Rul3M#a838$f+M@@f~(Ykmp+wf>S z9sd_hIaZ5Kn(06-T1==%w+6lYavH7pDNJWg9%YwFJ!icnudpxp53?(WH?waV7qFXy zLfF;c)Y&-or(M}AE4$hx6V4b)iSf2p?BTsXD8TKbvSl_b%VZ3vuVCIb?PTtr?_@fj z-DT3hyl3vr*M{;*S#lrYJ~j0`JIG6`c0Pijgv!zeBc`+2xS*I9gUGF{8}ak z3eP#+rj-=Tnj-`As4Tetk%ty@C0LQ50uL9eK}C}WkmFjQab5@hcI&~ZO9sH4F@n;) zCg8N%4CduofB|C#Y9cn^*JBGC7u&;I8%HpE>;xg)yyrZX0gjpiIaOD9w$TkV1U=w# zo+q5;X0X59+?JE-3tyZ3VAVZ;&>IhccJ&}ov1?$0(Zy3{Auye_*;1f%P8RCiXk3SI_J|%$Ptpu35I{}7D65y#t0t^qvgVKNTkZT?f zPtV7}yudgJz7`8n@W0;`1M0#tFcKdP({@F{hL@2rQ$7-|Km@E$4u@yuVH{5x3Z`>I zz^g16q!WW+D=!d!$OM4VfFJno@P*VkA6O*p4fKE~=z4p=r3Y?sJjoRV9uv42%)pe> zF7RH-8D^C^!ez9FVL>|>ceR0O)2+a*$pV_u3_Ks2fbTmaxG-V>H$UmYqSrbwdQS`d zJ2hZKy&8NhR)Gpe3ETt~pyGlo=yCt!=_XQK4U~X{nPOlmEeZ;|g}~BU5E@SLahUEn zIg;_4JoDo`E;=J5?8^{QJ~l|a^9G25Y(Keute157-Xh}nt`fzFi$s&te&yPoCQkLo z$ipuO$!hn#WXFn~B%x<35#--Y-dL?8{_$L9)SRVciOB+TKfHo0D9Ry9a}$X3f)FmR z!GlcCav;>tgnZZ4Acua*kQL{Jh@1EiMy2Kn)Bo)P(-D1ud4Fg%ThXTI7W8$yWHsNHCANHj{32I)^pfj5p`^-$RRfBL^oR$_ne*kZIsnJ zCqjex<>(fk7A-3=qxOwXG_cEyD%}sG{DVof=v^K?`(g$?@^&FjdRRm2&#$5id)Cv{ zi|Xl-m?mnkw~O|^-$!BZA!?pB9#!-Tw&GdL1^I`j5BA1;PmaGsB|t2qx-^9{Z#~}4Mw8u<0v%jj>ZjpW6)iatHZ>7Fb|vC-^CXtqb9Nyg7A$vAgU68_Lj z!qmn@yeN=}hUp2o@kBgIj>q9nmpF_mjzx#M7z{iX&2f)W=zb#-oqHm%t}7ffc7KJlF6+4TRF-BVvJ#NWipk6A_b(02jU%=4W7if47OSej$qO*dIQnTtd zD%8gHY&W;lpm&Wl^v_1xBFOQM!pmunz+(F1a~1u0qloTnN~0SxqG-69AFaO5qgZB1 zTP1X9|8@oX-9(I&fx4ZUNM0aI0 zxOdJlBD{mlMc#tLvdm4M4@1sXF)eD`o|MQ#%;d#am?wK*Fw-yoVZ7dpl92*=QvXJq zG;_Y}%!@9>Pv4ic&yOVEucwmvQbnZQw~9>fTts|&YRRH|T$axLjpXm`Mza0lc2aqG z4{_YsMmCllC2sDg$Tu-cQmN1hV8@A?=DAbe4HQlC&3Cw|axVjW6h)@B>A&0QlS(2=(JZFdh>EQmvuDeh7mf zdJ)hX6$uw+M}f;GuEy<(0sj55V81I4)@+D}@mUE_6_yC!HIg9fRT7-rk_;2RDIohH z1%6kj!XAkXIsp>a$T_8e1(J?W}& zN>myC>{Wo}u5z&SwhV}KdLGg*0WOhZpw%q`(`6wre0} zq$}9Sg#Fc=%Pe;5k=#2ZW@=$v>LAhD3SP1Sob=(7A zAN9h=Nj}&=?u*wp`QsMtK(yN(giF;zuySQ6{{0k&e|;h_w=NPb`lHZwS`4mmi^Yk| zIQ(y3JesUbz)PzWF>GlPo-0d6k%$yjF-paeZ>d;yEDaCkq+_jA2L3sif&U;AS6t4- zdbcdpKEfSx*|@GK8w)$L@!;QV4719?$b=j`QI&&bt8#GJh8+C4CI{L1IruC+2jg6F z&_W~!Gp=UiuldPRmCk9u!qsd`c^n6P2$RviV)h_tT*a`cs9I(d1 z4kzi_V7ery|M_B$0oP1XWUDbMXBuJ?r@uYauY*O)weXvT2BzFp#k-lxnEOou-Dk_; zg5NR-oL+e63kmG;7sI|b5qvK!ga(NM*uIbRqQ3Y`L(+fJa}Pe#=i~$Z(fFGBeHfs+ zmi_d0UN5byzez82U7_0_oTpW9y6Dzn4x<=4Oh=yVr=8uq=;ZxPRCP%`4U1k+zi6(a z!GlX_q1yubtF4?q70agQlH;h)o-Kij(q=q%v%xxM4Poo>iTolj(5EUIPN zxLHu?7?%l4A293BerDz;OePtjG9;8}kS1MIvYX$DV4oN9ZV4wFGgFA5N+J1rsgfif zT|^T8){>pff8=H5CeD|!g@`=bL4yCak^rT4a@h1ZF?Z-BvmDP7#_}?;R=-X}`R|fh zkNb%E{-0-OI8&rr<4P0j}0o5Eo?w z(@X4N=0XSXsC9z#H7@XQ4g-Zb0GWPn(5mGD>YqK~$Z>D*E%Alx8vbB(IRJdpgFyOw zFif8l3h|?1a3nthGVex0xkXN(_dy2y7S4dHX6c~gn+DP`sn8ss0*}L! z;Wi|}YOO@j7>$Qb7vf-IaV!)##lY~ZC|J8V5(*R}VD-*0n4%pD-|K=Ql`ja=(gHy2 zq#w-S_l4sg-Y~%7#A16nUi6wPbPp0(_MHd&|2TusFGraD-X4;AZ9(*eHEdaB3FZmr zFraA)SDzYz=z0U7j2;NR(1w3=G~wb@b*O4k0iLQ7m~EDaqA9YVGE*Aj`#E0NK^&x3 zi^8?XLeQ)u2<@4C;7tAz^*z5xDBoA27&^@DZF@sDTzyXZzxR`uviHdkqgy1^_9`j0 zy+A6AS#nbTBw7CZFmb-OpD66wMJfuL$QILj@@jA$Y237u$iPzKd|@6@{aZ?k^)pGI zR}A?V=TDYpFhniGlH|te5J?|-F2qKZILVJP2QEEj4Dv28{QUcv4eQo0Y1X++x~&a! zG-izV!G1l@(_*_zrLSODe?(hXFA-z4f?ZkNs2OaX;U@NS^C9-i)E?G*`XD=WbDTZ6 zMx5##Qldsz^r_+_8|wMOl}>&hM33~w(`K4OjkZmv_f9UPCzY4ck(sNh;q?u4sxsF@ zr*5a)n)cA0y=_#I{}|nBm0L+cTCWwyZLc?-ef$cFM_I^9&ybo2^_SQ!m;}@9F8f6@Awq4YLzm2N~)pJ z3Jnzbr-hiKi&j1Q$kR2#3o}e`FEzt!;}$4oZ;kPpwzz6JSMzo|qQfa?oPCam4(GU) zd?#J8qs1M)YdrCNvNtX_^F;}cQ%hfFX zv8b0Chi?wWW8L=z)Z^y3#fiz-ydVYhH>YA>OBz1dm5vFG85p-D6ECD^;TpSaJT#V# zDyMSrYECY;i{;_PmOPwfnU6__^YN~30jFCnz|TVkxZ1f8%@-8nt&@dVI9Q1MlZ$Yj zQW45)7vWmPlfuDO+rKX)aeY)K;i zGE2ZiFXAw0MJ&EFh{1)OQRwI%i5%OCURGgvu090!{0PD+zJbWM)*oAL_~K+f4nH;a z!W=&j+??!&Z}R|43m6Q_aKXATC(N;Tz{k>dICan(RSsIBMv*x>=yLP>8n2pN6Qu>>xEUe@2n_kXpFjr9F<<=~Mm7^yHMYbnoD4I&u6M6`y;M zYB{&k|3|@xp~E%$ zbSyxLeijj@@8|wwOZ#84H%zXuiRA~`szd8pzN;ndc0Ffy`7A;9%4B`B0g-rQOSX%; zbNjVINK#NDu}aA!C0R2`$DwNCs$Wa^>ei6m;~Pm|$`;~vdI#AuWiMG4(N0coI8Gk* zaG9o~Tvn-SH=*`7$O7+sWP89Pa@T8sT(NykY!p9`%OjtO-I<@<&WSPNBF_i??*!oX zaUu9qB?>l<;t)MD72KMo;f{|iym%)Mp^KE@?=)37zfBz$X=s6RgANo-(T9i%LpXlV z7>Z5IAbqw4l%KVNh5u}z*vcL>6CI&yo--tE;=z#?04ZoQVZiCmseDCcw+PiLhHK8C0WE zz+q`B=YLECl?&-`>2?P6-OU8gt64B{EF1o=&jGXSTv%b22f{;n&{&@jE*v5@aIXNW zQwl+0pb)l%7lCkR5k$)s!=lV$Sk_t$Y0rv5LbL>y8IkzY>|p;D8)&Juf@-jU)Q_f+yxthLm>YuKc|8aS(t(Lvno#1e4s4eSh#4qB z<#Ks28k`1P_%1wNG!=Ba#lS^S6g-`UAdBAfZ*|XWvtb9-nTavni z73T79<`(y{McH3j-aaAPq$o?<7HZLx&&{cnBaaH#_|Z>Sqp5;GChfH>qgCPa>A_=5 zX_mt(DtVmSlVQ|A-_|vA8P>b$+PF5#*M5{1{ys(LxgdR6aft@(yhgJw-=WV3`e@;& zr}XrfSG00yh$h@0q0>(MppmtIXI?diq#dZ;0{yCRmff={wI@Ac$Gxe_^)RzQ!IGoOi_6 z!_IhKg2BJKfHSP!P}bf9Sqm?W(eS}5f`0gOz#p$34n*Tw!JJn=6zvAX@aPH-$JCEP zvy;)t$HZdK$vCVqNWh_$iKz5C3BOsVVCIZeOl(WTp1yQ!{*{5(#j?;{HXDCP<=}n3 zTzvQ@7r$U0%C62w```i$5h%onwnB9FE5flyMYuk>7{5IzMrDr@41QRO<6Wf~v#Asl(@JrwRwvE#Mg7Jcywj46yLV*a;SHHMQI&z) zBh#@(Ck^G^rl3f3GOi3r!Xv{8xN;FU%Sy!Iu2nHOg)bUQ^CR)Ym2h0I8itiwA$Wr0 zJX87taLputjMwnR$2Q(*Ogu4-xMQQOD~@P#QK14njDO;U`wlqZ;xaoFGPl8y7nV48 zr8%~ln&S9HBU~40fJ-0i;-5Hel)0^e!wlz*Y*EH?uFpx2k;84fWzcU}5|^1s;M|NU z7_?Cs)u|xLz2L*PKmVwd{wUq)`IR1u9;QnY-_X+N=k&a1KfP+uOCLP{MX7p_g%#*{Y+z}gH6~W$Dyv^ zwX?b|{2J{18cleLE!TN3MAVoMry`hQi>1t$Iop|rvuBuzzYmx*reB%kdxc1ttt_cN zrA0Q_T9Es#JhEBZpXisxklss~Way?)HdCJs~$+uP!k+= z5zplVJAXmgq9+VWe?(zVs0&1JR(%7C1p96URw0Iw62Ve*(NsBY8%5nXL)J)jGH z#s)BJhY@5;nnKNVb2xF^5_)xP;Bt{26tp|Q?$=HbJBc4G3?hsopy5s=d@YU!KfYL~t&M}Nf(cMIBN4v!CxMh* z3Un+^g?pFNAa*<*tc^1v!aoZRCTD|1P7d7QYD-mQ9vC>~!!_vwh<#Q7mzxSfG@=L; z{}#dfx?-56UjirhmB22|Qm|iH3VB1N;NVgQTNjpb^{Wh2-;{xsP&wRDDu*%6ayYC~ z4xdEJ;pB%h5Ia`}AD5Rws&^S=|11T8#!_IcNMFEHF=5rim9xSWLg@lzk;I=r*QQ)8CLH~ zL70j&9DL;fD|Xs}V5|)|3tEAHt2sounL_1VBj}AcfEE3^a5_vI zmY&sssRn8=bEz^sf2;td#&Y0WCIhPuOG4T^armG(1w!40;aH|1@D}ocw(&pG?){4t zM1LWzaUVEc=WFuFWq_2ZJR%oH?h^ge*U5)jmq~`{S@P<^X~NDrM!X~slH1$%kfU5y zultS$(ks7#oL#btBz{;*#x~6-<344i;9~~)Q4>u9<@|_NgA380W=^Iq(Il&eWk^KO zWMUCK!YKW?$J|#E$Ms0X?*AD5iuB~!* zY@<>k`@41>`|e*GYmtA2O~3w%Rn(bar`td0cfs31uTxaqU-ie8OR2eTur6+^mnGYDTzny$OCE=lpx=mUyDe8Xrj5 z;m#-r9NXZ87q7VBGj83AxtuH3nR2=fCr@-^yfN6`7e(~^F-kO$^UDRH$I%cxK9l3@ zEF(~6AQJB_ipE7Mu{dR497dZYVEE2N{2-BxQ;Sn@@A*`0<>sTmz8Sb-b|%MRWnl=1 zO-5bG!StS7%s-olDf{!$uC@SQ#1(RNwFp-~EW)a##W+pB1j9N@(A2#Yx3Sz|T80My zm7(qHGCXHqj#mrH(Qj)x!r5}%+gFZ@UzX$T=jFKiZaK0i%Q1CrInGKfM2gAQg>9@AOE# zaVQ+~zjA$naR_?G1mWST09?P$5BZyYP$Gwfnh(UpoOXkj=4<6fk=M*dt;oA5027lBVXyt;bD5>=^Ogu{BxSRwVy7^@16W}5)arR7Jr%r>)|^;PzsWA6(M1cnEV&BW zEt^f}HOJC7>H+k`28K3`ThPcPEFGUBOi%6q%63|FJ>sD=EYaT1Zd>+_i&p$n-uJO@ya7KeCT&$Nv+l)z%&r*+nBSAS8Qn!MnNz?1 zF}jDvi48Z~Me!Sw-X=RTX5~Q?&V-T*r(}}YRzNhTRgoI|#pL9Z<>cC&wWMI$Wrxt$Ce(l>G^G*Byb;hAkFcJo7`ywDIHVS;lqCsL)EYxYo!_8fs&O{{% z#%hw``kNH^=bQ!$7pH^U*$lA$k_m3|*^pw90}FV$u#U-tTI+m>RVje)zX~AqN+D#d zDgrIfVpup*43%q2fKRIwWLisMw`Lg}UtI|=Z ziovnF2u6gsxzV{0W~3EB{M>wyT$u+uR_B8Hk{noHoDJeZS+GST6GGmkgX4}g$O%n_ z;cv#?550G6;MpuII4ElYX?smU$;KFd9yb7G zb3JHn(gs#Y6BcBvfizWyItfLvijo82O)|i{AqhYJi9?LR6j<&j42QTn_qCD_K8gP$ z*OY&eYbsv|BlUrlj}DT~-e)9d_d{|$|1RO_ad`UuOQd!-5()X!-8R z#0{EB$EJExIJS-~O;}0dk8wLdMdlKlZN;QmFO3ZCh#;}kyh-V7NAjl6n3S5TkqecQ zWE0Cr$gj7I8MhlQ`}$!f!Eh7vZM2-p+33Q2*ArxZrZ(`#I`+AIk`(RAo_(xq&`O#$ zY4&BO@hxQk9N5A>3O>oYzProf%uj5^m>}KNAwymAH0h#g=Jfn=7wR48M`IsFQ_qA< z8g-|PK5||_*96qij<2ies`VS_DdR@^qH{Yv?A}Umo;yef9gfp&yE^F(;d69bYBzN` zbb}gxyGJEW`{}m0=d^mx8=AXrnDTG=O2;;jQqkIRT4=|Q5}K3ooPY?XJ)eSCPDtR* z#ZnmRKMf5;<HE!_S|#s{sEypO2xvdHD2EF1p{# z!8K>I@fJ7N$MukldQpdgA4i?qz^ipjDy)(R?n)t1vrcFy}+{1ZPGN+W9 z45ibIlqg!z<3s-#JJXBRrgYIQb^2abnjQ-mpk~uPu$!mfVim6)W3?3PS)a~I*3iL? z?b#>F8XNEGS~76&%;O*LTqH{O@kE2fnaBMe%%w~joy-hcftGPj*-nd6LP3b2?F3-ubv^PX$&M=9r{YqZe zj*^PG<0R3F9}cTc1}Om%h+N%PKpmr4IMcX~N1l z9q4$c2eu`KFgR=sEooe?$_)#+X<-ecwYG5dp*=iScY>${7vNvRz@-j=h4 zeD{Ka?>_K#$PeE3a-M?|LD0D(1hS$y%u+4_u3U|T(28i-E*%ToIUNdPn!w$Q6Jb;_ z8Aj%%fK6X29Mw&Scur%YvNaP1IV^C`t857Skpq2ya>4jJ$ECf<2f_0NP*GP1^OK7} zS-BYCYB9VlD1kA)Qdq*xZ{;FoaJI4x@}87Ij!iinpH~jSXUf59xE$i8D&UGi1yovB zK)z)KG;39Wf=~tAds+_n_m+cZ4mZ~+mP0dJ22Y~OpyEX-;y^s?)rf<}+87{jqF|q6Bz#{G4mMq(u<&Cre47>oEfyT^>*@zOK0aXJ z;RSbXJpfeQV8w3&x3BZSyv`ZUMLEJ=F?--UWyAFoR#5xh9DXb@g-CH@xV*vuiYDnn zL6J7RxT68z&D5Z~S{dfvPylCXInW7`f#hmQkZKo)wo7SiNoqFWkD=G}598+7f6dZ__3#AnL0v!3Vu+ryub8j+a!!`62Kp|Lb#+*6rcEt;{!EG4Ei9A zDo12dxkLf=^psKIo+{p~)IeQ%j?dYzi@FX5xV+N{1?)_*Y>zn}n`(u7i)_&1f*l%5 zI$~9rGyYr7!^Tqtt)IH$o?q_xRM-noN%)|es2_g)?T;#)H*VpXU=&#uiVb1ms45AoQTr%lknoZWJFFc`Kd7t-Cm~S9<@y5`Y}u|&BiUuaBx8;pEk&=qpf)Lxm+ca*7%7Ukr*SMPtj6NEH1Wj^R#W zxRL7z-faxR+@k?#a>);aZusE49xs%q9{6pK8*W(&Xd2IOb(!-5zIMdvTkY|NALoz! zXoae^7F>p!8RqUV#s!*&c)Csx9R+nzJx`O%AW*}DN-EftrHD2A=`!WrHY zc%WbkZdfjiQQHMk@h~3>mH(sjX8xkDi@wmcu^;Fy``7e`$N-JL^^kh6xJwnCuT$-T zOSH2Jsr{7Gba?GiYCE-!W-r=J`#(0(q0o9d%(MTha4G6*!V&kr1r_e@mvK+&{T$(w^TuUmInOh{L!9my70`&0CrO& zsB|_3+k@tCTHXrY%(Q{V8+KgIiX$i|JHx)sJn-x$aAVjN3`9J@PRR?NX!vm25Im=Ax%3H)bB>Y`k67XTQUyZw#9Q<*@bl z4KDvqhd;KNpqZHkMqG^$Y|4R_y}9sfPab^d__vkw3*cx>AtdS+!Gggekg6{RA&y^* zdBoMW>{1whTMF8VWl(pa3_R7#LBFsZ91oVm%opYGOr!#ebt*uIo7=|!cj$4CB`Tog zZ8^L;UJi?AltY*iH|O0h1Fjc^@n5BIys{LI4VM6aWC@p>T?|LZia?ied|gE$lx!)0 zl#}@|csUQmdUD~_*&L`mkPZFIvp^v+6I``3AnQpQY+k`}jHW4&cOeNZgA*b6Mm#)n zje|kX->__QG(3oogm+uR;eKBzoDdFyX44>O_YQzRQGT4Z#Robfy&%EU1NIrY0p;el zllOUWXsa`H$2o$kggxBsuz|nPR&ep7IRwlxh4u*}kl}LU>OSg1a*Q^tKBWOZ(rVD2 z#^s&vQvl`nvXG-K1HZz#eDOKrFk_o2962cjS9=8D^@B+quKbs5IPrsA-aSIRmk*K5 z)K_GN$y0Lu{R6@_-6qXGJ*4~f1+uD&C7uE&iO=H0k{v)@?^EbUoJo-sR3`&E9;Q$4b0d%QjqY zW2IWIu%n#*q)=@V-SS(4(`BpBD~(1pIN5>fD|*qo?r{35AeBZ67E`OWb7m%AbZ-AyB zdQH1~KhVP;ztEoFzv#Kqe^loO9}2t`#Qr{%y)b=gwbWy9rA|CYmfoLB2c zfeOA*RL701CSHisLI00>C{$^Py}yldL%A7hzO=vuUu#ZNX^SzV_W00^^A}We`6(wE z{P_}awxBy6SMkJJLvMU+?2GHP{c(*X=R^AvgukzZ{2xhY8CBKyeSHK0K~hpeK|n&f zVtiJ~{3BtdxR>dLOSbZ{!CHX2Cj>~X zg}8pJ5UYL*@l2=)6)QzJjKLz_$8q-O~A`$@hG)47Vkcc z#w6n?+>;T3H`a$?-{}w>%WiPf-v*#|pC4+x_rVp9CbB$&7ba{6d@JHGoAGPj54vJ? zy)#xNIO5OapXp)n|7<#w3l=#>rKTIev2# zzW%3-isp*g5Gap>*|Mm>GI^sG4#V70L)1q32krd(nQnXjj=pc|p>pLI$WMBAV&Tn+>#X(m@(@bT>6qtEHPtHq!67hStb4)>+5`nyEgW9-do7 z^Pi;9V7qXtKHZznJn2Z?-;Jj#8l!2G%Sifg&oA-Q8&AXo@6U<1{M{=K9I;$1sgWw4 zsW@KTH~6si_U5?OkTwPPnf3)d{>2{N(=rQg>;$zvsFW51tk9(#eiBl(Il4IcYJ_ESrYXpjq zOki?8+tuD%fP1bL#NK5r6|jfc8b|o`#TlOQ+@N>12mCnB!Mo=Gdxm?1g8n3snBWU} z*8X5(8VF-Fg2DACySa6QL19e@q6|2V zGI+r>%5~@2KDR^!x`f^1-U#9QLLn$=2q9pT0P2+l;4_U68r`K}YElY|@=L&FTQTd4 zD1ytc3qky&0G$5hGl4J<-agF*z#NELmko{yS@2aY6SkjAhtQlfQ2CPrKNly1u1pfF zn4SQc&*Pwhi-k3-qCw+!BqT5&&SWkOW@m)J>KQ@Mwln~oSNOrdg+9P5n+S4oUQlie zaN!>hKDW7p;XLLsVV<8+_Z>i$>5!EpZGatP;Hb6*EMIF1qG2YmB!3+AT^tKH^z^~E zPzUB5(SofX)Zv`rD8@fkhRc%`U|^jbT-?w6C8wld@T>$xFZoR-%^o0XxqU>#yO-3c zz9bUekI04Pv-w-T_m$ll8@hxkl3vK@`wfd-WX5&xtc9x9fS$;jx(rdM~b=Ng%al{}e{-gJw_}1u+;_>>& z#6LA}imyw*7pqQ|q9j$79`PJY_vl#B?Dy`hXV#zkl*ZD&G1*jbUPu*^=F&x?#WcZo zCEfjcJsnxOh1#=@U3#yM#+2048g{qm&1j+bzMQ3_(=OAxvp1;4=x!RE^N=>}c}~?H zyrD{xpJ;^sH(D{_7j@8-z{|=~n8N&VS3Zuwmz^VVQN0o_UZ9F+!qrhxQw#mNMx*~y zJ$&al7Ul07VmaeD+sc~a=QZY7t7?g(mszt&hb{Ioex+=a6XuO@#lA3ioWGKXLuUy3 zyz@j4xrumQ-v`mu57kWraIbCy1r53A#cphkxAO5|M*$iztxu}12m_ce z@>O67w#${`_m)zO&EVs!K|XF-B*4<)LQMQmh;a{vnC>7#;T#d;NQ-bY+r##=ee49= z%TBZX?37Iz9vxeTJ0zJFc~6AXc8D-DMTFrBBJ`~nV!%Wprd<=@N?!p!I?l%^<}Vp6 zEXDhcCHVVeF&60+qXQ|z^r%Aon^b_K`(dHjr5B9lR)Lt{;Ey6} zUwl7i5*Hh_U7S3H-Pew3pi=KB?AKI5T}~0}ljQNXNEVNk563CXhv5R9A-YKA z2lXCg9gW@ZsK@ReYLNGYs*Slv3$Jw2nFZHq&EGa^v5eB`a?P}7ZUb%maDYw@-%Udg z*3f!(AO7sOhVmm4+9M_jaJ7922^8t`@CZD@W(M z{tzd7J`|_(P^@IVOZ-}MiTKXv7%}YA7i-sFZIv75*gAQwlgB{T65d&*pS(%2j$G~5 zV$P{>9oI3Zo-?et%I&In%@xBivdvzZOcVM?d6-jtPrJ?fB2>8BkB-|IWzMueASgNfK z($6%ZVB2U|8LI~&(qp0gpdrWw7y~n*!mI*w7{~Hg%X6$@W4A3B@f<*TvlFncC#lxgQ4$UD7-uz4%?X>AUiKb{LJ*Yn`boqTZX zE`T2w3qkWx5iDI;3=_jkz+Jf%vd)&miCjLI{^LVKg#ZHOm=9!z5Y{~vG9H=;Zp>%% z3`Ov`PXs|~Ww6J*4Bj!#QOBkX9LAJ^t3(-Cbc;Z~Mg))IM6g?01UY+!VB#)>cV`4} z%3Z)%(R`?4^YVCNDGY5dfmsiV!9%tfd`ydAuX`aBdlkS=k9>$XXLDCR7iK@rX8!&x zh|A6dk$MJ{Hm5;acq+s`N``{uBskcS0QPS2pk5UVd2ga&qE!^oya@PO6$U>}hrsKu zAb9vZ06zEl0X+7BS63&(zr$W|U@?GX4C9uK_5kNDR|sSI{PpIJV0h6EbP{Y}`wL6B zooN9N?wi6bKNEOyXdGC{8Nl6SeURCw1CQTn!9o)aFo+)o_sW$Sn?(U!&dPyxw+uXe zE(K+8Bw#%2YV2$oAnvt&drRoC>Q(eZJnKDGWGwvVo%C(eetKiz2=!Qel6EPGDR0?% zs{i{6)ywRl&&7ABy3%8s8u^muSM<_HtY0qs_5eNn>NjopCV`v!q%iZP48Fc8heO8| zaP~T7^voZHW1Kax@3$7NKBa?qOZ9Pwt^r=gacGugf;AsaarjgVbp2t8TBYnZ^Uw~% z!4dN|JLB$NSA1>bfy%`kO4I^wzQ6(sFD7F6fDbwh`C;&{0G$0H2oHCK;MpT#xNTkp z+W1CctV9g{t&c_J$apMcJK3lyNqGNTGB)I=;?j;Z^ta5wXEQUAU>1gc&qhhZT=a)L zRE@~T(AWa}5?Y8K-HXscrx;ItD8@22PhyKoF5Ra1##wBRRhpLJGUYN%ddGgQS%fvyM5t~l!pXOUc&wh>O2&c=VDt@ z4jwVf#)-X|xUMDx5Bad2?0G7#6{cYMKoYJfNyLly4H02JZ zm&2N=6E@Jl#s}%#`MarlcMTnFu#vvcWL%$`Wwf}noF4f-l`8uc(vyplX?Alcz4z3U zcK)%a$|@!_Mn{Wg>dDcsR^P>^H6Dn!eG!Yz&hHRETE0lUXiKE{ysC~^X4v`G_&TFj z@BSGc8mrgv^d3oY_Y2&(hL1un(7uv8mD9j&Tiwo0sqf{Io=K9D7b@iFqcJ4oh9$w1 z?qo!zKbf5$OHypJ$-DPLlD%avSyHo@ROPND|4cWK+~-?J$+{h+*?k}ByyH z6w5(ev;s_aREC=hqrmI2I_%n`1vheZphjOG-d-OIE6T<}mZ}N(v&^uzJ?kzwZV4Z( zY~VnR9bA@j1QW)n+TQ5OJcsVUcjI7T34q&1FA$uZ2qUlgz{lHu@T)5Tv@QpMDf9ZP zt`39K84)1I{Ex4DqQRvy7GAMu_k&vrAd#K~p3jqEQEV!-Vj6VnWx!FE(e`W1f`#w0 zA&&V%j}jiu%6AY8kRlSnh(QP zYN&XyvOg^REC8qy6$iH=0 z$xYoh@^!PAoK-?+f9Ls zRjT8a&$;7a9nja}?RB_yMU=9*aYxTIl=l= zPK=|fhiqv%tAVJQ6-;+TC(?FRTD zc*^{ajK!-hNvY?;HhTK^Rce{vNqJZ9(sg5=(A#-E^w92i^xW;w6n}iDVTwa^RmCtY zTrwP0X3JtcyN75;Dx$fa3TBQ_!>xBUu)bCs%Tjc)jrrhao;AR-TqDLK8IS8L&Hj)3 zKWw`dj?uEkJqzt|@>@qN@^-=eb#54Z&jY`!5%lx%M8jfl%w9SP2R8fS$?g8QoIQKv zRtBR)Stu5TgyUSjNXD6Dn&PGyY?u^>{8#aqJR=darIL|9F9nOfq@q`BIzFw>K>OdB zXzIakOr<$^qB0jPkLIBi%||Qd<==d)5V@^IDED76_A?*GXXXLvZ!X1wG(OYU_}IQ! zfa_(LKXJMckFZ|mW%K+ig3ec5e}-A;TVfDlw^A1E^GExzYGokitt~j2)Az% zp=_iGUH<;h-zY>`8zD9x6CiJb01sF4QL(=ib0(G|U0i}j;$p0QU4$M|MJS_I$adKR zOjgK8sqeX{(v^c7c4cF2UKV&g zMyjHuwGvkNkHo1-Bd{-58ug1LF{a}$EpPovwV02np!fs5Vf&iazI{qEl=mm{uD3hcqkUEMDcCdC3fpwEKbyn5l;)% z6JPy(vGsecMQeysmPfnlDqh0rf4u4guH5KSA?G`)k}F}eYoNZJi~88h%~qBoc801% zV!~K5-qMOZG4dcessZF@e=O;~noZm*Ma02;9=R^DgvfQSBo&)Ckk1KQ$z#=>;U=p=r<`D zkbsy0DUkgn14&Qi!1Rg&cpX%R1&c<(`8W-DV5ki{Uh2TtYJJ!fVgOYG<6zqc6WD5D z26;`am%!Z$9v!y5tq?4h6~UC8V(4@%0lOb1u$+17yV=c3 z`ZFKY<_O@&UjghF3BmZj5HjuA-Ze)Aqr@VZ^+^ObVven$>$+@1|Lva(>c4r86PrNd9=+rRKF1qx;)!;k(%Sd@_f z=I7bpfiX-Jv!Y@44t6)Z9S*mChr&Cp5IAoZ1T(Ayz|7o_dFp-O*^oCF-SdR5Is(ci zJQy%_hrRb)z-z7(^y)f*xZW0?yI8}2O%q_dl{u7e84sR+Sw=115PA-b0rhXXaME!! zd@j~x_ct}T)TRQ*dlcc`A9+Yp909qS(lAb&@x4v{lH&?LN%ZS4p_5G2slLlNI-1y0kq4of*1^(f^z*njDkIoN7gUHd_TtsYZbX!b$YmZ!r6PoXHL5V>(+zvc^HZ!>NjOQ$ z4^`y@uuD1!`QL-_^21QPa3UOo7Dl3{Uo@`x8-tn$;_y;H0xo@=h~7EL`21N4hK8r% zf5+0%M?RBv^k(bg*mJ>|2p?P4Zg|1SfJ7~ku7Ln^lNQn0Ee3FE92 zQL{20-}c4gD-wgon~nW(nzk?UhfTt*PrY#TF~AYC zI9%fHflbV_cyg07*158tq8oPjBGCqgk1cUVtOXieG{vQsCfL1f99lmai_PZxxVcyd zf9z#Fx%brZvg9bNFjmHVqJS&H7V7))o2k7 zTQrOEPL|T2_tUB0mq^ytIEgk4In$VLW^~7M9h!Jifv)u(66btR0ph1{tnYq>hcU{=k&%H>>m z&B?DAMttj8AM9m)67gUHS@*(?)I9Sehq_|OuhUtitx`yQvgVSMwTnqZ!AiopZy-A) zw~{&Mc96-__Yq^$BgFRF3F4m9N?v_CN4ln8AqVy3E-2j6oqi z-UuQunf%{7d-5j>=qR&-<9#;JlVK0!sv~SSV?6y?ZZL4s1L|a$Ug+ToGjhElb@3!9 zV!5aVd;DS9?m)=g6bxVHg@RscI9#@ggoguBz&jcPU8!-fbXWpR+>{8P#wA19jua59 zr9t!bbO>V%E51P%$S}Q7vN8uETXW&{ojj=T$%iek3ZUkGA?!a>1Pxn?VSio;EHW(x z-h)y&HYPsCjR7uN(vu#9WMpxeq0M3ck5Wz}lE!B*p3*+4bWiIeq*M8OnZ6 z&X0IV^0u>10?QlZ*r7{AZ5#txtT;_HJ{}_?);a9BW-n>!+D3AeHk0+9>&WiH<>c3j zh2%rnO!9SV3Awf|jqr9v5V_qG$*-+WPNTRetab@(bTe331$peUjxsd`0gyVSqdrg~R#S*MWox>ky1zBh=km);ON zKYAxltd*kimsA;3Z!8r_SkoaT9=ml1QcHz+c3a4yd+(RgfIIW(j^-tF#`;xMlv_#7 z?W!r)zmtX^+D|2ukJ4|$n&_n(F&$&mMypR;r9HNtbj$X;G;{b9`XZ@^p54oOSbIKG z2aO+8({+f>+&c{E{^59Fk1VQhk;ksZirB(5qP_lVSfHmaJW>~R&0;;K4Fy4y2$fz&@vwbTng}zVIBtk4;I^t+{7i$r+?i?ZRzAM1p5dsXOd_1Vn$8-ErtUX?W{!E{|u33yu zjzzd;QX%6`7GMO)$J?fCUJcL1qTAWHePb5dhi0O~&vb06OvBFcsaSQ8WyFn>P`D-m zPkd(ltVyw$u#)AbuSDXdU*R~yAPld#g`kmt5ZVU?pxQ(~d|~5*V%3Rw?yV=PoFI7N zKOPRVcE?u_TyWiN_U@qRfbF|&S!bX%Uf4YW(>2Ypat`aidu)W64u$O|qDDdN^929ER&-hUjtIA5??+HI(Q(Iw=>K zh=#lL1?i+(XRp%Xu5DC$H|qwLZlbO1f6@BDero+`C)G2rrtwLY)O*n?%Bx#K_nn`h` zAFjY(f$%5mkhdGnh(4MQ^5IefD`$}zHjBs?l@(;?yLH5}bu+PA zw4M0+)DiVRhl%_C<0L+~g($r`OC-uJla7HK#IS^EgZCbiZkHFNyy7jH*zt+rhyhaL z@SAn^uxHQ_DOhnt1{C(m!K+OQ@PYZLe`St>9uEyDSI~xow{^g6gFXxoGJsb<$HB=O z69{)RgEiMIAUxU%io0y!tiL@>IPM5bG+f|Bu^X&qyxu>*Ip}uqgrRhAh+Z%WTDSOu zR-Hfi?F$6E+F)p2%GmvR;b7wt3GXGN;Q@_-p3*q@JSqX+97u#l=VWj{nF2-TX<)l1 z9j3g?029|Nu$`U_^AG2MTz4)s_2t3Lp?vW9TL2@zvK;cgBJgS~hMGAgaE2>|+P+e- z-oS^P2?F4q5WoSp7wz9J1baylc*Tm~X0-_Jv)fhjuri1lTL$OZUbUO;S3j99ct*Jl z{xDte2-5{0O%cIjQxP;?6GC>T5O%(2-uyfPJnm-P5NAGYuP6nD&Ju8zF9CDsV)znW z1Y2_p!J()Cu4LvzK}a4LPsj!NKiOc(GH+X^WOqv8Ze z8xs!_EL(7}C7LlJBca?p0-lG4L4AG*$W9FcnHd3aN$3apsXid%IT5I)7c{&e@OKvv z&L_IVI9XTV_B(;2mjhVbv<0syYp89X0NKPGn)i$clrn}Iwp-2EJqBjJ(S^%~qhV>3 zCiKiw1F2dSP;OELyUX&hzEc*`yN1Kr_F-^-{t$VT@Pil`e<5F=y(2r<^pF(}Pl&?R zyJU8BC-LaIN_P9U5%nWt@=l?NEKEO2ybkOqTzB8eT~Z{#(U(rAx@^1M`T= zC2N1G5Un$kWR*lOcfag9SNHG;x5jNfmprC~ zb8L0sTDE=TX`h*z+$Xn|}i-MsT0{b+xMj%dC~SJ>U5`r97SG>MmVAi9?>sqUlAcLu1v z)F0ZeG7Q_bhhxcTSzItm9$!i+V%A4xe0XCN8tl_Rx#`--_tHi4VPjCW*#Q6M7~wVf z@ffw2C^?$5zK?L4Mk=3^eO0Jpdo;;{)uxJQ|J=3f`%^CKmwUR;V_bof}> z%E$TP0yJW?C78{a0XA#2bwqfyP=rl~MQHJoX?-mF6~OXfU)YQqV)v|)ab@T&Q-*UM ziI{g%gm&!ibySi03=a!Y$y11fZ2~Oh2{3;zAAd{o(K@me>Un(^rJQ<%+OZ zvk+UE7FaHqkAZ!;XmmLT$1uNqNK_V{ks}>#KzP9XnEKd7i^e>cLnSnz}pi)jUf2B%>#@7 zbHfGtE*N*(5#>Ydk#^hQM&`w6zG8uXPG*?Dk#VR$kHY~l!1~4dxV}vXuMBG8jPV+H zBXAUc%vDConF`DUBZrO4WpLM0DRh`4fjakpQE}Zjx+nh=wbpw}kDhx@7bicYO7Cvd zokch3_UEkoCipCkJan424LeSCLJrg8tM<}?i`%Hj_f7P@-a4A&v79PIE~HD(&7jY2 z71OufsWkt3IGxbsO$VzSX>IX%`pQ+CZvG=jm4!dVzaBggFL$NlwBO1eI>2b`u^xq508XxJeK(6O0RfxfdR9)^^do3uU0m3e;saf6K{OxRvwli zlRu~vc_SmTAl#0qO$O4pB7}r&Ng`QW3rODTspK+a7O&X5j8s>wA(gosiJE&YIXQd} z(Ybh#Je%D}>L#2bN;i=-iY*uhld$T~!wL0Q5L5+Xdna1#eUx0#nv+8YclC&5-fU--uO9m*+z z&>kBMYCfTG(KH;c{EYy~t5FcQEC!D7;^6Dcco;F4`NI{HA#67e5`EuV=s~ zy)4L1&jy)|InZ_{7gjvZgV2xp@Vl=77QQNkhwUuayssF}{>S`$E~OCst`r7V^TEuF z&67p}DA)?2ewz@)!$e@uX4Lx{mDmJ5<*o^wlX4En^qeN^*HL%;2?^_W#GGF{` z5%bX-iNN6^yL}}IVZ}=UyiO57>s3BzTJYf?%QMeCQvy4F6obI97=Cg^;2Tm1d0_=m zFex9BE!poW%Q9-+*)X{(3$6#U8TB06FQbu5Ihco72mQ|BZzt_V`TlT3kZpPp6TU z`y+_U%8BGojuUZmG$jUu+9dmgJgM#a$)#F9;`Yo!PUXx_j{I80ZApmaPBm(Cwlb9W z&_#n66SS*k6I8c;>Xa3)p5-ML>dh2Sh}$Bbqtztd(B37!IrXzRphAX@?Np~V%0_fx zk{wNCC(M6qLg?tdN%T>D0iAPTD%H7OPODp%(ezzwsN{l;bZlZRjW*juS(y)=yRVTp zCY++vB+gJl^+oDo)lO$NcF~Rr59pIk&uGBlYuXt6k)B=GPqnWN()59UblV6iv{sfu zTO~Q1A+3Nfz9}L1NEI_$)X{jI7N(}_;A<21EPF8)S%4qUd79wBb5lG%-2(5*TA{}Z z8$2yzk9JcXarR?poayFWmZeugxidG@gkwqx{T7~teC&Rei{Dyv zaP*RFjGdH);%^z4z9}7}Y|`++sT7>acpMM+CE_zh#_P|GL$_lw*xDb3zGjiw7aopX zC84M|HyE222I7}F{&=T^&8LV-sBPhm$9^!@*J%!Ci#+h-ST}ri&KZ{_IpVKgJI3j- z!LGNKxG;frxScUY<1r?fE*gi$;<3p8r-$oYb?|q-7T#W?j=o1#amFPj+;V3mc0L|~ zfsdupwp$WYm;a-0QU+<{xPJQQ-Umv`U(?BBp3&cj?^7GQF3R6`oocIJq{}BG9e=f% z25L0YgxG`h*vj3srKN^;J*%Q=L#yd|)nzneOgRO=|LDbu`P9%Mk?Ls%(*++nYINF$ zUY%t~eVo;3_M74Ko#99E>bwqd{ElPdR~=R2BYkD!9X9UbSJ@KcIVLMx11<%%bQL=C z`ku7&R#5})*uq3EVr&Js;@e&>|IB%A()?%KJf|U!epDdWU3H1xOmp(&m<#cF;X@Wk zN0aM%nIzIwK!T0ukpJWs6X(GdMB@2+A~>^!7;W4^PG;|8J<3PO=NBhP*Sc1s?0TL| zymf^rGp@Nt&mHnD@iB?G@RHmZ_l_u)eI_SQd?!Wk{*c0@!ystGa5%I{7P2bkVPb_M z%W0`Vcaj>|yJ~`p!f5cl%dX3tSr>GaA!M-k@9YEP;g_E|{C+qAymPJL;A>kLmEr&q zSDe6af-7{EyTkRHJkS~iur9!hF=;2lhK)Y(X=ND@c{vk`RkEQvCXzvJz_P$V1mSTA= z`5?F?69E7H@P&tuCV^U$H|uy~dTJnnUMU_NYIK91SQj|<*^x1z>|vL*Ey&Nef=yp7 zK$vI-r<+Y+v!W3=Cm2BUR_1N*)`1Z++F)j_0XIWNfk}=s#7$O!l{4j_e})X46iIzLCwUpUB5kZ-{2hbHabg`iXLw8|q;@3G%tb_`qk#ryr+?z1J}^ao!=a z=)@k9@Vu5758p)m$E+n5wiU$MeF2#=eHzIV6cUNVWTM~_N)kqRlH)h*$j1sJa*NX- zj&EhiMU5|9TF7m#ds-9MzIhARl{J&AS>(k{td`~UW4H2x57c-_%8qWWC^^$QZM=?n ztzxt|^V?!^_Jdtwi>5PTm1U2`Wud>s_sU1o^>;?oErw=PKg*d0Z<$0BE=JPHuhZ$R z!BV>W-z>Uj<|5k4UqQbnt*6&v3w@)rgFgLGN5f9k(>rA+=qR&Ry1nxpH4t2(c2XU* ztl|z`D*c$MPJT&`cK6Z|7N02+h9OQJj>>an@$f8pEGbh&<4hH-V;W!k zcujWW*JjxyT`XET250#jV%9Gs9Nak`HNDNT>h1)L$g)PGSGM>j*#T!ad#`@_AEn==tlZ1=&>O@7$PI?i0%f>8cc2%7H?Z4X znHA5NREfB!A&Jen6l^`7icv<)%f2WBCp^eR-*MTPo05Ywmgl12P#(IT$;WdS3-BKn z;W7+sxz?fHtnV51R z9TSq%u=;fhx@EH&+?|L|+!9c2T^ve0VRK188Z#myQGR+j-rB%C?7JCHa(^K9@9@Wv z)xH=joP-nnz44=(C$`?^u(`qmrJUW6-f>375=T@Ww8PIcY_R>SCAOzqpvDDLygt?h zwT0u*;M7=D_^F4(t#!~gNefTSRmZDaRdK};CA4T6i8tv8+nn{FQxo0Stv=prQeF> z&98|~z3RoDVQa;M`}4)p`>e&UU3y!?j0;=yOI|gHuFmC6DSgAUZnNT2FXeIc$r`S@ z^Dwvb^i|Gc(;LpuQIcp>s*pn;#}FQ8MZT1KkRfpZS@SWD+-JSm@}`r?L9O{@s`^s0 zKyEcD`d&#cKd2^7CwGysr3V;$u7UhgY9?*xC^=emfh5UYCplYhkrKoEL}TkyG9>$& zT*~`EG*5petN#8ZU5@{VPrW1@IxP)lI08yqM?z_X5(L+(!h>>k_?)T*S@t?0H>3xr z=~xJzIu5GGo4}mwrf@yq0@8n5g2qA{xFBf{Ayb*I_uLu6z1(1Nl?TW^=b*vB6S88w z;m@2&kW$0)S4aKfcT*tzITj2dyF;O4DPuupM1rJsG|c=I1Fbvb;80)!IJ`~-H^w`x z`;h{9C25d-C!MjLGU4p}EckUk8w>|?z}PSk`k5DeHp^Z$1{A^~UJ<-z`^x3PVlZec zf#>r|VVEr+rgZYbF^6#unHE=;C4`=KA(UH)z<)a1n@)>>_fZ5{YzFOSv*<6|mxOFK z{b4g|2b)zHY-Yh)_VHss((C{qfjJWHUUq!`w( zD1wQ#EDN@?0Qj5pVZ?$w$V|(HmDV{>{W%ME?8$_~AsKMzZ5milO@(Veli_?x5?I|y zfU)-R&^SL9{r8XBF>EXM{&zj$>=U)*G#Ivkb-2JCelOk1NExpVx_ZKWY;Tu0I#29r-JM zbykr|8S7EE*%tKJbyvDg)sI>R#n5HbvgqqgLRxlkE^WBGnD%$Bq}pv8Xv^WP^uJX* z>8qUmbce%H8t~&Jopw}Aucx-r7sIa6gw36_)A$~JyXy({)OyS`98{h#z& z{9pRbn{l2ZrEx*R2sBR^iCy7J80)EuOH9?#LxyFn9*xEY`}MG`WGucg8;2(!7^CI_ zQ+#Y_fiF*5qLjA{YM-~mKW>g#vDX=QjBrEUbPv3Dh{F?~0N0p!V<3C4KP&XbdyD;% zza|j#R|R9;Jof&d$Gm-Bk@!+M8uf0);3%eJ9kffpn>P|MCoLJ{UZ&ux#5DZgmX1@$ zWime?<2#+q#(N)fP)aio-!m<5zGnd*_bS9GPDR+H%XstOig78H;J;a=c)^m7w{9>W zLl(O?F%B=u6yiw6XZmg~!e7j5u6A04+(+g&XMTv2%op)LUtb*a^_|o$!?7$sTzQ>w zFV=|gh>r-9J_>Q%5;n`!gs8JtfC<9{cq5CC3z>g#!M_r`>so@#vWszFc@e_;Le?Ex zfQl>fF>`Vr7KP=at9}kXdYpxMYcuhqO9qyArlCh_Dq22C#^Q)1RB28?`%%mvkrs== zJ6K=Kok(2xFC16uh2asa5FG9h#CW>_cuvO;bB88j6Z4*QZTG~-83g;ac<6TC4Lh=2 z@X??n&Rt}Wk7aC8Z;lnFzqi1fp=P*dp9x<5ISzL*9nWXBKHh22!ScsiD3H*=>pG+G zjHNRE=d6Ibu5zsBMFyW5NnwJL1ipDONKbF+r;8_jqz9h8rVIGbsNld@84EbqjoI)>8wisyCg}kZhtGb-*ZjeQByAtU9nc&*pn}I-(@W}IP$jD zNj<-H*y|mxvDJmVzx}U7sNd1-pcUSb`1dn*II0>!%vlrokY@&+!zaL#jaKl< zz!vUrvxiygPS7~V1>&E$L7)Q0^BZ6f{4LnP@A3#!#|{fQe+0`AIt>3A6f9zDF?RY z<$?tBbdT7@c925_aBE*7Oxaij3#S#s*Ps$;R4s+mjM?@GabKlNxOkK=B$he3%l#0MZyAVv(3t+osKI>x3g&9pb z@Mkt-5xQi-qL&%aSe_2=)YD+%mK5k5l?(^xBtq}wc-Und2Vee+fe%Nc;K&ok+?5Dt zT#-NDxk|(gaVN~oGg(A z+l=ANr!fppW&R=Edf&;(%YCFJx0iVRctPrBJR+fAx=CfyP4eW_WwKo19Qhm7LaNss zCzsA0COz-=k_5T!q+-lw^3-A-q1MaEDvO1rl$$}kwTemM%M@~QXBhbv<3;5D+LPw3 z#^iyGCh={NCEI6z89uAbc~lP9Z}^==RJ+4 z$MmvjN3f7e@#j)&VVPjEt`Zzqw{9f&MOwonqq%J60Vbm6;+v(Zk?G27NN74n? z=eXf#u?LDq68s+GiOGw+vAkgt`rq=!Rd4*6hb|Be`-0K#c_;?5yHfZLrrYtO@tAEa zK4N^mC94v!+9HYdcqHQSBGgM_{U^31c==}u{%T|#3Fa|>HpK2qs|4tzD#UM#gxLH+h%?x1abz>5hs~OW zZ04xxF|Cfxpl@t9n#5+(Jk>JX_g;jwiLsidi13_=2v1!Svh1r6_p#lmK0$z2&hzo# zSUx6|GG;}63D!R^##WhP)MxyRC#Hp{Y+QiiQTh0@KNoLZ%E6>n*^Gghh3ES-@XES$ zyk?w+Pxhyv_PAtRvoaA=KEz`ciNn~1F?d28g*VozB6yaeN?t)$+$< zLq0focOv#M{t`p0;RGWNuXMQMx-wT}tTVLP?0~^~b~vum8t+M2;`)4ZoOymco=`W& zqGUsC+cE~<-PFb5Z107!nt0w#4O@d$FeXM3PshrmR=6x~@fwbT3Bz!O?jKs!IY1Mq z_fcoHURts31wAq55!GJXP1S$gpz;xyX$tEq7rr=659l1H#r}t>e(_#vxOf|VR<((q ztzAnkYAfi%$^}#)Kb8z#T3>5N*EukanyS-!FBxh)y-)lt{g!wZ z?}WHSag+GdfhpoGmLB4XyClS0jaRfv-EwJ}nZ@I+i|^t!yBTwr{vStY9aQD_b#VbH z3F#70Qc@6*e$GZZB&EBX3-@AoHzpR?Ef!cP@SLrJn1qV0pjap<7~t1_&+q-?&Nw=w zGdkXV_Fij!7N5*5uUNxrv>xT2e{be2HC}T^HVq>!Y9qPE2fx(R#~n!!S4OE5ib4YhW*Ab-{l#4RU4=~gFj z`{4qPVeT+-2Lboz9w4sj1yea6C{1K@s5k)1nPxw;G#H9ALLuHS9CSxdhKdi7PJo z5VITgl!2*6{-cDZna2;>= z09u z``Q@KZ5)fA9WBt~jup;Hv%z`q#-l-o144%*o^^F$yMP<2y<>MHD-Rr-M~}`xq@9y6@LmWu)rX<-wg^Jst*jJRpICr^tp*#=Iu>IrDk^)?wTZrC-X*f~>9D7NC6AFtl za6}2lSCn9it`Ni43(<5)h);t>toKWVZR|cLHLMin8C#-@-RI`98T7%l6b%(h(d>ShB%3{T6GD(2JD~qt4dDW$!6kzqoeBARj z58w3W;+h9Jc;pPr6fe%gc|Mt#^fMj*+na_N?x}eCMl${mNWvJNWs;5Jv2t!Kp1T>1 z9&%9_1CvoLCmc5|V!Wgc!RWU+2y52_VDbz+B_cPXbWRxW;&oaZ^ttL2A+X%16k756IdYFG%2bJGx;ynp5IL{Mwn=aOj|F zgJJq9x4jGZy5C$c$6bo`<@T;xz!ksT$*J1ZbN7XhxM4>IxlcK=q!W=q@>c!V&s%OYk%ZhF85mhC z2W0|9IG3di36YG`?y3nwO&wU(s|%&)M}x!+Lr}6c0a52z7`E5~HtJb}_(>ZubFhQ1 zQw|_*-~`K@@%9M3WGM0iWyHmaRod|XFlVSB>3b-eyLG8tK_#mAL$g-@)%x5jNF9)LP za$(rjJoxW&K3LTh!1|4apq^a>rz}}l)++%FtzlXb^D!u~?9sFdLa03?gce!mn@bi! z>Os-}vuS17{Q1k~Pc@r8W7sE%&7TQu{ycvy0>3>Xm>MgBLgvpKze@-=EQR2HtOVBU zGA=vwod4|*fR!%m?usgcqYDZ_X;%RpIFS#fr}AJm+tGfn%z+2#*JJXO54pjy0OoOIH_~hk`s56$OBO*X_lHuBG=iG1O;PqZlOAH`zS@W>>c3d z#^2-KN}cCc9NETki>7hS2i&+Z4a2ylTUWcgh^*Z-XL>Y98a`;K{A0pbyh!D}pO*2g zg_1wD95{w>gqI=%GWKVUF|FA zv95Jg>g^V~{MAm{^zZZ}hhNFG{Zr!=+skxaOM_9uyma`=k^wT0#joeOE!NSL*ovsuniy9)%?( z`gqgH0FMqD;hUqT7!_%b?cZ2-bM-h3)MU4~ZT6_IZOS| zZqN&->ieR)yFY#m4#XFeCt*u)2yS%?Lj%1C4E-`0hu24;>GT+^G>yZ68}X>gZgHR9 zCE>Y@6pXo>ifEsX50+=(%GON0DxHnf?Q^g!JQs)3@^F7asC$Wfo2g%tYP4>6msP4P&`f)Mm4%)-MSIFS3p>riUG$ z8jB|`MdR>)k$Bs7G8#mOqkeHHV`Bv4k~u+WCS>0EI6wU8=!3yBUTDp{^(R&k{Osh8 zI;<-zc&Zbgl$d~N%k6N@Fk6f&w#M#z7ML*3414C8V9ixSd?7vtcRK2!YMKrfEz-mX z6>2!EN*R~bD56od94+8tG9zo}LUmPd^o&qU}qL(1wkB>8Pz0G?sM&JXx}aDi$xL_50?~yjTJK z^Dl*lRfJP_GcQ_EBXQ@*C#w;OkZ9@iv-X{C^{5 zcq6fjhNg^l_3`_S-Rbn}?#2P5Ig8+U&UN1^u1Wm}H*Nk^=BexEY&3@vr3;FrEKHBw z?6M@inXW{=%byel#}MsPS%gSTA&ZR{l3TEX$WLC!`XaZG_LQAuUhDxf+wT}jvpP+# zN?jxqAF!_Vie~aUqJ@xu_lWlHCq&WiC8@7{M|hi0q-Og!;yn11{I_QqP?P}vffQVO zBMT?{#fgq=&rftBib z@ZG|CuoN9(=^STB>2d{ICk{Fm1DIW%2y(x?Al}3m2EF{DJ~|NACQX8n*bsQ`8wR7z zBVg$7WbnNn#kk%v(BlvXl8@rSL68WE|I>p?Q-JGEh3j7FFu0X<8FyyF3#R$c@XCR# zv|QLCWEtAhd{~^zm=hMZ)NQMCdck?V;NVr`!&;nPKv-YPXr&;*$g@>gh2=<4$WGj5Mvk&mq!PI ziE;q!8S;h6?cR{Q%aiFtY^T&B(ADS$J2G7$<)pUl6GJ}+lFF7gd12NyGxc?Sy;%9D1OB%paugQ-h!A{9TKPy1wM(y}9q>C>iF z^y{MyH2?KBdjIWidb8^gecpP49zJuHVp%<{PrO1M$K0UTAGXmEiyzSK2G6PDnO9WW z=>r{eVu0z%->HS*54C>AawR_)<9ehF(;MWl(LfQ`vYm&jsG-?k4czrY8;36Hq6F(I zt_(B8as?A?V%{t9df2ewgJDfNwm5FvcesE8RkIlSw!lNw99>j!4|TEgJp9V$twd9LjG`z)$8$SbZXy zbt0$Ytg1kqGZHzd_>%5&E$kTOzx){bMs{JexhAbxLvK z59Z^(A;PVzM7W<5;iPWHn4Q69)-WNO&nm(BZ;Ek?XE9FQz;>&Tw+IxV zo_{_b^~}Rqn_P5LWIbD5S@>dKCSHrpKnt;S9K9nIFPf*IQdJVV>Lp_E;&{w>7K@wB zV(@oP6rQP=jQ1~vuRbf}ojskY@}Jg^qzR;M*fW z^FSnA&5wo?#<6hrP8?hoCcwqvth-`WGAK*1tSI}Qmbje`9=fcjBRLD6Z^{O(`W#r) zkqh!K^5DSpeBhX8``St7i(6C#v-||G>aPG24i`iBM5g()mcYj#=8LOm%mrN$NHHD9 z@{9-`GGDed>*%O8D}{G#-fUt1gC^!b5dLI(&`l9Ut`Wg{5JBu~A)J{dgoENjaGX=Z zIOoL><6R6tHVPo+UJ;Z_7BLS)A?$zxSnZb&^BF5|xiw?c%H@FOvn;r>D-*6y&H(Ng zyR&Uhg+_xE5MvqN;i`%7YI;0eXp4m%Ix%oKHVTGTPKNy_!{K&wD6F{~4B~f#VA9n9 zSasYFo-X%+)EF;t8#NKu+#@h^fjbx(y28l|PT=7^0sb}F!ALh-*mlSoE=yaooz4u( zkD0*wPlnJob_~po(SydhI?!672{%rvLH9*v@M%zl(dXr0&tVxDTrUZsB5|nQ`j>2T z`;Y8x|4bZWdda!A*JQbCCsEw?kW}}ylMbt!q${(LxNK-3L8s4=`PWYp_m0El)BQbU zSnGE3ykR5xyl*u*vS0~$aeNjj3@9Xb9ww3A*if>yg?Zr|?TF!KBXa4z8Y!9}MYO(r z;(q1d;d~#S;m~;t7hx#mwlq!Ps%pQvm!6#MzO*yRRsCB^!{KLd8(uvc$FqJ-{>Igf z{G{w^KK6GDZ?>$L|FvK^6?0OhUat*k_i|hMdkoMsCxfY(Z6cj}AfI-yd%0Q7Vk&ok z6+O&Ys+(!OuBzxS?1PPYGD}MwS{LiO@t#Cmo!sqKApE zN8{P!h8R&`g7U1lq3)&yjxVsr05My9w#E)GD@?$9iy4FM6Y~g%xMSshg1vnnSYzRZ zHxqqOeX$=3cLpFm#yX`=1hY=sP#jqnjvw+SqrPhtuKyE_CTC-@F)1FyekS0Vl}UJC zE(LckNX4OdtQ&Y@1`cOh$@<$&Gx?K^5o2;OYXZyXxaVU9^Be3OQ;75au&(>tMYwN` z09#2h9_}ti;~6FB`mY4LrwdV?&5he^eu%ARc_21V?z6d4#QX)**qr&q=FNS!<5;mB z=Ua~mZO(}Bh2VcXkO95cl3L!G0*g#|Mfro3YRLF^15#xkVUpv=BR+3o!6O zKJI^*hySrI$N1_Te7rmxSA=Kb424YO>(iOel7?IQQ!sjJGG6+ah`q51IB-4=d!%FW zV^B0|Esn%xCs@bEEvD~03&9yLC*jB^fjFnxA3G2EV$5uBl=k*SB{2`&e46oFW8HAy zS7#J0cEnH_2TWZw9&dgghv%cMFsQ~HYsAK)ioY>#TVjBPwfb29VicYlrj1iHHPFdK z6-_LZu+UTiU3Eqvm6XP@?G|8i^ZfA@@&pkadYqiQ(^;#B^;BaaQRkUzQJ&&!2vgJR>od-x&_iGNj?}^byd$ zSOH9yE5YrBs!&m?0jY`F@Y#)ZXsC>a=1v1Rz1J8TSU+r?tOYDSX$7DBZQ$;s@gS4z z0Qrv`q212~G>^N1mL!2w5gt%i&SuRmZ`e8L3wCM&aMm;k#H@qimuV<0RttyOgAs6z zX&HeVqTzi|EUf$y2TBzQkY$|&#b=U1(<&AGwx&VPw{&>xoe7r9v*18|Hh6UBK<`hs z-$>?zjX3jP4-~+c_Col#uLzp51z@jR44#d}@HT;U@xCpAmNeFR(JF*P%umhFWxETC z*!!N{%`{5E*orY(ng4pPCF{#ztc6_zBCzE}V9xy4YnV4KiRD-KCkY|rWeFULE`ce0 zG2B-#hI=Ujm{nN>_pcYiz`Fu?@*mr6e&s>=u`}a53B=fr+g5o|L}(? zkA30M32(@n<_YdBA3Xmx2NA2>;EAydxSe%`3TFqT^2d`Jdz^ULDxjbx; zELr}Ey#4o%1m?da8rPnXYK;!EAg+bhI}8aBKyDXCk5|!kc%Cg z$)EFUS=Mzq(Mn%HDq=(=^;rfEH88=)G zxf5Y~xs_`cbJrFGamvp|a!N@@+)X+g-4=DrH|Rd#8$N8+;di=4^M3DF@SBbw;@@R8 z@iSDr`8j9)@#^~&>GL!_YNusI$2Yms@0kH~|Bo0td0{p+`!$6coLNX;ykHz4sr8gI z+DiXA?xL;}57H$QkJA#TGjxMt9i1nBncjYIjVkYMrElZ!(-*SOXyvhPdJ^8#b65Lm z05?Qs5B;Xs=QF0lf#G=mvNSGuFarC!74X(uCG3Bxisl`R!^vx-#ZFz^RyrEO9J9Cq9+0SXC|TT-(>tXB^BK| z)9|rN23}@4nog$8>-}VG0{vWev&+MNHfJQ93h<3#AubzMgpbi zg*mLVP=#fHPO&>0Cq!?aWnEdP#@+SB*!fz3b1VdSKCKA1F^{*+L3Yop$;Wf2^6<)T z#tL7UgO{SR@&2eRRPJDRK&C~7F<-=-suVP`O2))Ji3rjO_&PNXvroieXI~U%k7gb} zAJ%u39EOYXL$D}+68=sK#84l9Tsp=VFZFw&;hBlp!h8g;H8@;T>xw;-oLM)<1dNWh z$FnzWG1XxlF4|;?UOi^mVrPnerAF9wbPVzj^l;=)9sH-Ng$>5)D6&$)Fw2p+*gziL zM#|#hZ<6@^jyTqa{G)PgrwN(%g?4}KrPj=YQr^@_=V?8n;VF0M)a^HE%axf!0mD!KVWLn~g31p{1umJ|VrK%OlkFpXVI+ zgO>;0cO7-)7UhUIq1;wZ`N>)C-p;#RPvijC_*aVb-&7~+YmG^WpFKH0IFS@=3nMGX zr4Z}dA~Jpa9O4zSl<>3HkorBFNJ~QnS=P3fOn-EQI6OQ>!fu@>DQ9^yw4sSqW!xev z=6A`}mybw%Sr^H(d`rse`$!7+mCUOCLAVjaV4i~nv_(t7-x67PzDOS2*NlV@YgC|a zi8{ZryssXT|16x=}a#;WzYI<9U1@E58ig>LrQxA ztT|H%sVkUwAVdH+q>90>x)`{i64=XpXN6I$FTP0#Y9=ChGmWu)n4dcD6YH~3D`kBf zr7(`om>q1^1ZtLo>sQvHdx@Zo136n$d(qkB2bcb5%?Q?j7VhIMc}PY3KlL~}3vQDmx@(^@b77nbDVtiH!_(z7p6|J8n^1xT3X7G{ZuX{`C`@4w1 z^D*gNewS>&bc?*|Ya;dvlzcI$C2K9KiO_<121f5AO|q3lv3C=RZCpc?HZ3JV=jIUA z2?7##D24o$4JU6?J;~59d!pQDO!N#j$iEP2;_+^PyJ2vTD+oQu4GOn%g&L)txT_Pl z*~4g7v3bemMNt-SiSFQ&`Y-E)wn{wSE`&(e_O-r*0=G2i$C&fcS+K;QZ?!V zMs%E*9Zk64L7!%X(i`H*)U&*hW@yf)2d^%ntG}PP?RTrCNt?o#+5 zRu;Dw%46H~kr+Bl1$#=>u`rYIT!Kd7Jac_K{bvm7T{pr_D@^e{F~^|~mbh-sI9zQs z9rFz6lZrcS;m$-ccl=&Zz;mYM5dvr72^%YK!~HF;*p}*ye9r{jm}QUC9@^ptG7jY`Em7g48D4fU z#c+`kzCSny&$Q{`^L`!ND5ZtN)YLIrO9d~hjzp1^JZ>3~!Q{Jampvwq@ar!fTKgYe zp!$V+t?Z=-23}LSz)sq^`5|4=(N0UGZc=fpMta1jfwoLON4ug=(tyyzbT+q#b{lM` zeZMzQxwcjG__oD#>Dd`{wpl(My*7bHzMVw>jVDw}WJ5y_kD-_EDpRjPaXNQ&5AW!E zlV6;AoOdo+%ZGhRgTYaa(t2i#tt|=CpFXxRdGgx!yxNxo;cm zxm~4?ISs$>T=UWqWOIr(QMENA(L;`8MvV{Im>NkgiDwYqtwNHfxPasaEGOgVtR<5U zZ6<-&*xRvlKe6tsA`|*+NcOu6B&-9;s&mcc;HnnlGP#31QG7~9^DoJsq#iQZ|B2L= z4w3~uzsQiO7~BdU4rNoML4Mr`(AcX0bE=d;@t7*?+@}G*)@#Ghsk%@YJ{nAn4B^KI zW2iqe7CaLzAYIZLzU;Sw8%}nBmmJ_2ae|y07iiIPhuSHG-ETZ#p{y5-^7Mft0zZ&h z7XVuOgWy6{Fx)s83Kr$zK&MWIoWLlMRbkAy+f1jJ84oA56T#?s63CBFfruli(5ajb z6-60PQlANver17qh_uHdEjAdyJZ6`zY zq;RN9V4k$(U|16w1TG{1HjVNFzRw#T)p&w*fd>efHZ#7?4W@=MZRV*XXeKy7BfD9y zcCmr2+pIwOqd6EkjfJ6U#&G_)0jzzb566Cv0#{XS*6*hQ>1L`BYoY`*v=!jn@DcFi zofOnvk$~LI!yxz4PqN4N8+pNhBx_9H5&4BL$n}=T#9ZMX*$%hKqO7YVj9H8YWwj)5 zeKiSRag=S8PRW9O4jJiCE=?Dq~v1?X_**KLRWf{XHE7banP95 zj?y3xoTZ6Z* zX?tF#y_nzEznM4sbcU~ad552Vy`K+lm!cMD)#=N%#jQvI$lI$=!;-DfGF z^Bd;SZ@ZS#xewRST^E586jnQ;t%T+-h2wT}x-iQQGBkmD=gvrjosPY5(!Z zbV=F^nkd8ikM@3~c9!30+M%Cx)XHIKS}TF0pG)EWpR%Z>q=4sim2ln|RrDIAfe+-h zQF?F`R^8KQ*$x9-S89wi9LAziuQ{e~wL(P~8~oKa9>o(K@Ygd(?i-Rg!hC&re1B-ZV4~$UxKWnKLrm7stuu;M03qn7bhpKX_!|)b2DKJuMag{z^vkDM?t{nShOMEPu2* z7B93!;{)+1?6jDSAAG`5J2I4Yu?J&9Aj{&|1>kN)KaB45#?N~_adVspW=j%We$b8G z7F{r+(GmS8I-uFv@iHh&G$6(HEQ~ox7=z-@2off48lg_g%G-*M5`BTO79H-!;5wIN=)B zu+?w4+lp~3-T%HB#(lBkxcuCiT-?nHZp6b2T*;#cT=ng5+|O89V&|nrG>pfRi$5n2 zhh}fGW9eif>zq!?pOug((R^b6dl~uSxR!j&-Arz5*g=NX>?dQJtH_=98nUMS0_kf) zvgkxJdAYKM?279klXRbwg?C<(ju}1ViE=-&-Z4nBG=Gz|6Il;-@o;e7EDiflkAP*@ z6rlQ^5)3?01+6<8tba`#GLGu9F4xhZpI`{;CanAB^;n3juz+wMYuNS11~g~e!6wNG z(7VJ5hW>Mbb!qOfmJ(|_~G6}GdiWGqrK?NXRC$olrKux`GE%=0{6#CiaQFeO6>lh}RDFTR9blZ&C9 z-Nj0h1dz0)2=-kngh|f|Apdut^Jq0Z)I3((;A* zFTG&Hu8D9e6yVP{ci6Mm6;Rh1=I>_NPfdGRxY!od-&n&3H^$0YVFuDSO<=#65sb4L z104~1aJf(iOy+8W^%6CZUZl)+H$@msmxCN%87MZ81h;QuAU5w0c_Hzg%$hYooV(wX z1#YiM!?I^2s_8zd{nkoCw62pSHkZkD*E*)loFU_FjuU(BgXG_TJBei57ILm~9a)sJ zf^_LDBr|uEk}=;h$#yQ9+@9%24jgqRBU;T#&pRDr`JWt__wNTc=HF9J^E1!E!`+z=~W8v# zWZ^^o931k_#q)`ID3zU$9jOJV8eGUUo+8};qX?f|WWD1BY*$fWzOuc{3uY?B#XE$! zNP;m!6GXW3fC!f}=FJ@0Qp{q!wu$T(Hj?q$+Vo3t;a?GsZ4=>DmcL2%65$ZLp_R{O z9BnZn{+eEb9bGIx>ddk=iv*ZW86S=@2h?Q?8K0WzF4~OA&G_8&`*U#k)ogTMlZ71f zG;0l{6wx5QzoW-R7KMx*8u=5;s}feH;_xPk3*K9?q; z->E>X+u)CUjxSCb@6GnIiMVPHpsg>5Ixk$YSm2D2pC{nwTzeGUx5aOc4P zhDoDL@mPcrKAt}YRrc%Q5~lAb-PXigch&Gun=%?VDPqYfIaJyxgHDB#s7b`JY2;tJ zdDC|)BlDS6QhcD(n_f{Lh37QR{{bB{t&K`&(MT@$7#^YgY-+* zE_%gzE43D1PY+yKL3hkrNEM={&@%_Ks8UZfRnqgPJA7Q|-gFBpH+2+ko-0om{`$$c z_dereTPZ(uU=P1SxQOp8@aNTg}(7s=T{{XbMFG8&_9#7`z#@sSFI*{ zuWcj+zqXTOCVNT0&k@p`aEe^YK2Hj>d6E#{MD#sxkpMl$7wCON^pAIuFUfDoT#1h) zYWr8BI_4)i95f6<=Sx6)l@xq$k%bLC@*w!hykrupU@4&i$A4%+_1jVG`$-=b?>B%S zB4coI9t%2O%|Wo=3giQ9;QFiaFssx7etdTXU7-u`oo;Z}gTS*b9x(EyCzy@)0m*Pb zSTrpF=Bx{XdzHbET^R~$Yr}y7+`)fR6l~IrfkpRY;m6W==rl_N4VnZieNsRVQ=#4> z9fDV60RJ!(2DO+sD<}twOLC!XSss|J%?I1%1Vs8cX(&x3db)xftd3IP&j4>KUHjD zpx7F;uUNodSu?2dHG%0f4MBh3Xy~}43)k*zgUL$`(0io{olljZ;+6s|VDE=3>!o2s z_HZz85Ci|Ozet5(knDZ(iClH+VVSL$M4o9Zl0WZ}YolApCFf?sq-G+|a$1~Q4M{Vp zB0a7Giq3&V+4g(oRKZ%g47v zDYA88KUa}>hnsJ4hBNzE&h<_z;x<>?a@Hz6?ss#O+(*bBs~fMrq~V?LPs64ZH~!?$ z={yU+^1J6>;5S!4;GyFipFBmDYE09jae}ebG0~A;CO%YNJ(8MtrqglTg>%(E#wL;xMZ)0jp$^&~z))x;0ZV zbyXVne@e$__PxBIEDPhVW#jEHIe2Yk9y;l>-W`^YbRNkv`=1Lj>}nAjt`eY%2lFX2 zZAEW>37W{T%>N?B@BApl7yj(#wV8RsSf|2Du~KYiJ$4V+9J#>ulR~3X{32P3!H=0o zc_-6U*e)}T?KHmYgecDTlj?OP82h6bB_oUR(ry86epZC*MigO#c_Gu63h=F4K8oAq zVVPS_hkG}JL(ag^quZnx3=V`#kC=QE1x?XMFKv0)7+N zWBVgp+~qV5m#?;DOaU{DRW-$}enz-QI0pA@(8K1#ItXVq(Y;m;dl^q{-d;u4`5=eN zxiUC~Na8|yaeQ>(4{aUuod%Z;Q2g+ombtv5MzfyLzT@|4^xan4^5GiAp-Xhv&_()? z_1ZtXcZ`lceSj)2+ewYXw$N6kb#%e?<+OVG0(yuOQGQMaU4J5yD%|m*hCPn7;p

z`*e6T1&kyq4l85{~?~6SCsNin}%;aO%yYtRYs-{HPj_H%Pyvj1y+>LmV?F?sODo{YNdNnB2c6R)MIBrvd; zqz{`%!X_^x^1I5&=dNgg>K|;i#D!D4S`5q`nSB zj?jblzR}F9WC+_fnZSw|GZ;{^gac>|Gc#<#`?noDTR8zV<(;9GvC|%ZbO+^NfY3b? znV-rFCK>v|l`wxeAqs?#%O^qd`Ve@zIt-#`MZnI4NZ4i*4HiQ&;CLzy_QoebC}X#b zU6Bk*BU0fr(;-g3N(bVW3G9J$B(=)_7v&4BSd*{!RB-Moge+m|`Z z!Dv2WdCf}31PEj7fI%V9)$GIWU3*rQfZ!|peS?eP>sIz>FmKqtVJruuUkER)3m|?R z%VCbmgAj>a=zGX|Uw36eOH?K}|4WDL3f7@IHWhLXu?{-TBv?Hw0p7R8!A{LsxDp-> z)8<7&$Ib}&eJTv(&xL@|iAj*LEfD&q`NK%Cbz3n3AqzaW_|D^g75Z3 z{)aK~8Bk|=O)0W@SwHt{;vLRx;4~+>shs;9TgW}0W5bzRzHz@<8SQ>L`+c3^tQ8Hn zEyVbZN`&9=VHQ98NhSZ^ggXA=(nq}Q^&x)U+z~W!tu|e^*^D}DbfO81eW_Y*6r%=Z z(m67vbnMFo^v{G9)PK=BT7Gp4E&R8WCfXdN{gKD%nc_3laef_@Tzr{U&$>>pWwp^K zUJvLjwdd6B;VXJ_^#__a{xkh|jlDlZ|5Eu3am?Bxi3yiwuDl1{14{@ZmI5eCBMk(f=!ddVofcRw2Qx5Z)x+e!9* zOF;RxNw`8g1^;YG#R#c%6y{{0XI&&i*4norwaxIJF3~Dhtu_ zbOGwr<)i1BJUqQK7w68*!E-DVS}2)?wdXSMSWG%5_om{zk`&fwl!T8NJ9^5Acntg% zi&NZUaHJp#T{ca|k;lUE)VWZ`>I}w~{Xtl^JOC?_{ZPx?2hHAj;^%EFV@cTk@R1v; zWV_&m9!G3Xc0k3O<59!H2G!7jVWXn`^*&{q*tDu2DGYm=-#pRL8T2 zRd8VINYtM%k0nX$u4ylY0mCG)Xw^SzKKuu@6?~z6*L&$TwKvozqLZ#&_>e~JZ>Iyb zH|QO_LbL1Zso}A+blSQT^nUIkdfI6>UHE$|Jzu+?UdvlaEmRlLW4Tl5yvl5f7(){t z_*3r}F0`=If;Qe6MM=Fp-R1O)f6()cms>-5bE7@HcJ)GjeV#Axl`YHroZZ$?wthwopps1 zjCYc_5a8SWi4dXh4WaSAaBZbOY&#wZyRJ-v+FK#ec#UcD=Oe&jTO`C6M#Fc;`TEow z2S!^HV75aNJZnq_YoAnzx{wC$dKqx5G!s76GaX_u8!E>zZ?PQ9uDKb}59d zI*cjP$2gd$1kjvO3`b;2AcbiruZ@LZwS)B*3}+dYMCKW0S^nY|BCwWY92ryQEoS~= z7PNqsx}`9U`HN+5h`@UV^C3GkKIbDLsN@S_OkW9nO)i1*E5)FwSque<0;t_s1b;6U zLg?KBIR7*sd>C6m?n*A`?9PG3McI&GodxGQGvM&Tbnw+kgQGiAphqnkbmu2R^3!;@ zZXO5I@?&7>&L~h~H$KOw;h_086xv?}!{Ux02xqL)q;-C9JO0mnmjj162oW(A`M&7skLEZoU4h8Y`J2VAv2csGxNYj?C@*FAOk z@0JQk*N=qXd*nfOo-CwCNP)Ay1T1R&M^asXkg0pW5UU@(q<`WYVm+smL>zfYTAJI5 z!lN5x(X%ULcSk+Bcj+wIxc3AJn|_Ea@Z3$dNNgjr_3KGU-b(URaS;iRol4>tXOkI}#l1+m zkIgi#yM@lb*+Iu1d`f$S-893A88jFrRcX^JSd zMj1`Fsp0bq*8jCh2SXO?;gQ@i_}I$`&#IZ?h^J4FxGR0 zGv+W2e&#$5S9P*g+|CmfW_ja;bG~@>l|NQW2H{4XU|ek&is^dc_;bW$wC#<=_dLrB zE{??<*LeK)DgiglPeLPw6x_Hb6`L66d4FmKYM#qPxnEhBZLr$$Oq*{q-^@=8b zrfL{}S{di>P{i`Na(FXJ2BSTVkP@+qwtexJtZ zw9@Z}|HslCt^K3M@8~wX(+VEa-!upD&ZpU7U zy8dEG<$waoqf3^O!-{uW3?F&5B&^T!eA~I)EA~i#!Qyv-5WI4laDCVY!S65^wmCi! zlpB5vfqj&iriDI}39x2bi5@IvWC**Pki<6n7BFr!nynu_ooRQ@V;xp?EN;vSW_f%) zyZ3o3`(nI@{q;MB{)lxwc+S#Rykl4VzOajrezLF5 zQt+Tk28wscLD5a}_WV+WHySD+N4o4eJ5BgITnGL$*N1;9Mo{|Mgm@)p;JAD!*d?+{r)W1s^FxQEux44HNyKfCoVRmmnCZ9|}8M!yzz` zW=Bvo^m@j?9n&~)`V$Y`XNk!*D;acMX#cpK2BXQ(HR^K)I232W^6S}9ZJP_<$%A|D zC}|Ea3m~w65nR?OhBEyU&`>FbgI~#4)lNIXqH?$yR6)$+3Ya*z67CKX!9&_1rhKD3 z{s=KlTTAyW%Gw{0qb_VSx@FPskxe^DxKR}x?WHc!%cQq2Bu}xo82Domys4rb<+n;O zE3O2e%N3wCxB{9A%RzH}86=%4g&7Y^VC&0bxcayVR4*06c%84(e0Wpy6%`2t$*hH!l%n>f@pKcr1*#Is$Iqjso2q5g@dNL3Tq3 z>>LvW9uNS|zkK1uc5jdhV_^8$6KJqQ&1)C1NppgTHha)C8V>s^hC#$3OHk_`0*=HW zyBlBv&RK>qN~{O%#1h-AUFy-o zRl8m|@w`%)H{Vex3VY|()Rpa3XI6iFW8BP^JGTE?YW{dhPQ{OxEW5H=Qe1poQugz< zWas$r60L6oxa<&JZWeCIrxdtx!!bczVSECQuE^s*=+-=U`80n0CwYY97V*|C^?daE zb-cgzRxXp?$Un_GNVn={er10vzkT>T@4M$Je_Vfy|E+q+U->-ePJPI~weK^xkNL^v zpZ?=#>}7CAksSV5Ay3aAMI7)z8S_7>V%8rGJpWf4%SdC_e`<)^&Y0kX^=7!Jd?+q) zu)-s6hhfLc;ds!?0iAC+p;e|U7InGfxi~L0mM{#_@j-(k%G&P^K%1vQXrvU1mR59| z@rcCVUc|k0h{0vLacIyJkH1bPqSCZv^l(VUyv{VNDo)3+PZ@ZPyj!2IXXE1GxwvLx z9{xU_kE`DlU;*h4kp|RdZCrxp>ZSPgM=7qoT!yO4X!i)OK%1`>D5rq#IN( zF_=5!Xm)I%9Ljw$W!9^3;QwnOFUcR=OFrRwf5bTV0_`XB#rVZTjD`0^m|H5s_wOrF zDYFtUwpO5{W(7v2P_B~ll^q95G4?_U;x+05y-GYZSVO$1|{V)(*oA;f!~+%;p=O; z2b;}9cTD29PM33~>lyq>M>G#_^WnbR9eDG!!F+GDI@i^d<xUgAmme6^+L0DbZD)jb$EDTuw zPso+0zE5VzP8Hd(>+`(W&9!0d=H?W3Z*39lo->xI?3=-wHRiKvBI^5STgk>KZe&M8 z$qPKWiB)Yq%=)xRD64Xcx!k(IzFoS;T#npfGl^+gnemd%Gx)%=FMegUlq-n*OWkQ+ zeIc!?AB^2N01lj?PU0sjaG*yG)c$G0>0TXJ`BfiAb{WBwlcw-}g*jB@S%BV9YqclpP3$U3Ws^<>zqt(;Erx zl&P@)7z4`J;~-#10vr}4f&Z`+%C4kBz?hLRqhAJ8&dY?JKUwfAD+daW=E4xEd@yw{ zfZ!bJd7fMZt<}Zwne-3Y(WUS@t_&8NmBXiJ*& zBZj#xVyOQl1_ko`J|pk%|2jRJNmoBk8Ak)kIzDd_gLWbHQLBjIB5}u39Z3UeB>h9X z5*(|je}*n2|NSn5^%iBYAdndU@g>k5M|u8$BG4IH2&aDLL%k#qwuy5=UMB~x@67@| zk4*S=FdgQZjD*L;4KpPFZ;C3hI|CCSuq+PjXUD*jx@f3b7zu1@IJD=45<@2#{>TKv z>l1$9E%Je(8USs(y@0uqmVU$)Du~-Qc8LRZZVv}<9~(%VV+EsHhr;>KW-wLT6xtn) zpwnL;u7~NsmtajO^iqSIAu6ENPYI4bln3&hz#@8Iu(y{2(@Q_urJ=-@6Tf3?_B>~6 z?>%GzzizR<3LPwBU^`pVw~d8-XlBnY9AtOaHnR1(TiI^o^=$05dNy(VA~sxS9#d?Z z#xETtldsgH1DuZCE%E1z`Onf(LU{LXK}Qs>*khB?QCZI@OFA!=g< zvk4x;uEw8U$vY-`)m(0IAN`=R#rOP|7ME&Q$zZcl5|6}{k`<~)B@V4OCCa%y65ZeO zJi$|kqsW4%taatXC4t=cYCK=lnacw&R`Jcr)A-F(bGi4>MLd6MJ@2?eGecu5UmVrQ ze@;HgPt(kpe!P_*KYgD6Y`e-Y9K6M`{vppUea`(I-tnGSpSj$kpL~{@6rN9z!PRwg zc&bev2fbIsa3vM=HB-YA_L{iVSqE!|>*Hu6BOEMiirHOeD7$Yc-XCp+$L(!U{CGIt zn&p6K=!}1NxnhBh2X=1qLPJGBogyFHaLf;D{s!PNr(o=p5sKau!!fod5_J|vqiALf zx|habOke`8C020n)nrVVMxLy}BXP=+bkrl3iT}YYe4?L&4@c*sX=@(V_vWM3utGc= zT7;=7=2SV(8C!uv4Jt8mer&uD!{rkl@ zf->^Ks#Um{b`A2zqdx5#BWc&@Ca>?Eqhi#nBCoH37$rwVXyGryz9)!}JggG!=2hU* zo8`Djy&UcR%5Y|ODb|ZiaC}uUdgT>icTgcQxe9PhR~}X_&&8cW4tm_oLbpun#<`b{ z_k%~`;ccmy^CKDmk>0VjA^}G)kHZB`F{s!~th8g1)R`KN&b6VqA}1IXZ36MoYd<`) z(g!^Rz?>Uin3myzVGms~b%Zk>KI(w8)$Qz8=u|X%>QerTYB^RdU|o zYm2wMs3qR=th?I8NnQ&Re|fF#_7LXo7%K!?t`<7K91}+Ezb#ngd>4N8QDEgEx~ylm zC0lgNjRjIav>s&?HRbY|ATx@E|Cq*B3N{&mJir3mV^NfO>8^sFL@p z)jSoLC>b{INd#rm%Gdvk1+iKTY}1K`Ow~x>f5YJEy%6|9+4n)B0LZcMqnYXro+1VV zsS9S`Tz3eUc7*|zPM~?s9#&dV&uP^#Xg**G2VM;!J>LwH9ZVoU$Pk9d=)v< z%<0$7N1_h5Bn;A#D1J(iOv%i_=RQHM_3I2j z+4nM6k?!PmpYHLi*Pif{Ew4E*?B+H4-+A1Lzx;-!G%A+J;<|?Z7<*j-zyBPFaayYA zYOR4~&f3`KtcU%F8KS(l3D*A{jMJ_T!4+#PanHzMxKwR88gP3w9O;Bb-7a`@j61r0 z@x;PxhF+(=u~yFy9rFTEep3*>?g+uAuVLsqAQID6qftgF2K)Y^u9rLUxMpV}ek)5x z`@yMb-=2ndv(ssAWgsui!ZV%OsOFT5wZvpJI+c$HdJ51*y9k$BQy1m%5?o_eisqzM z2X&QU4|!`%(kl>UEAjN&O0*!aRo6NZKJ7=lMHXe&cZzY`Gci^Ttinx{YyTfle+lUt z38ZU;e<9`y7vtS=^m~Y5oO)7(vm-<()lQj17ve`QCI9Z@azrCyB}bOw+_F+km_*%Y zlc-O+q6m#g6r#FW0secLhdpa@aiCugrr*uNzuB26^B^6oX;$psl8Q6GCZnx$5}qwc zz_OY+ga*ol?2g9g+i34v7LKi>LoqEh7~iP`;>vbEoIAz`y9k|nc9$0xI8x?t5A|l# zY<8aRfJt|UWB;KvvkR^8)ViTKtlbRnyfMMwQbyROsE=6#$%8GYiLbuU=XqNhhaOPG z4>RQvBjoU^k_!ZpPuX*L!%gaZxLL{jpUvVMx5w~t6a9FNpA)~` zYsOQXG`L2B99MkxUXr4IMWXGvR}vgpC%L;mSE9Xnh@`=zqa~PGwLI;=#xvcd!Aozo zvXHPQLa;tJOPG6Xv*5j4=G_e z(c{_bhM6o+vxccpUBaxpRxvx5O>FzL9ZaWnFH`t_gvlBsTj+I$Ifh?i6C!W0Prj68 zC!KS()NA&d*ypRKePcdWf0^^+K5)}a7TPn24_K!FcaIN*n!AHQ(yb1jf3@KHKV69V zVE}Vp7=usyV2ElM0@Fp7u*+!}tbS(;Lsr^@k%to`UvYt*N$&8n(-WQtGMK!}8|KRR z!Trbph^q~Pb{+z{Ps70IR|Fi9iG~yZMu7H*SXh5K9-KEOf+Q~)wDnWL@>Ck!9GMO> zlrLPCmj$Ef9yQ+~7dSnCf3@X<<+lQG)hPlMn_}V$mq6E$QaGeo2I^1CD7RQncbE$3 zA}!k~5@1A192_o>fwWQ4 z6j_Xf56R(R@B=5h>$P8?&agDf);xBH%oJA`c-9Ht40Qn0NyFjs znPHG1YXyzudDF-;1DtFEcj^pb`6@m7Y_y@JRs*WXs>11HW!PY^2vJhD?W|UCN4nCg6`k$Z3w0Rj@(vZ$ZkB?&L=gmr`?AfG!CiKpt%G$q5vq7pa zg>>t4!c^BC!X&q9;aFyZ5bCQfjCDNdC7b-n^Pz@(%eR*&T2j^+N~RxAlQ`zpN`B_- zmMl!XAbBUek<6~{OSdI8-WE8Rmo9VQqT4?F`oIx+&St2U*+_St1GcxkT}HX8yCo$7;cZusGS{Xo2x7>tK! zg<>4}sA}om888}yj!@4C^^M$|lz@ieNhm0$pe9en+N_Z{>svZLo0y4pU$d}kWDbgt zMobr3KN^xCY8EUzd@W&Ed-BXO`-xcA;8-?i7Sb(cX=i^hmJT$+b zgQLe%-->J&Zl0Ne`@fDvhlDir-jRae-X~#|St9js#-mF?EVfjQz**ub+@BMH`9WcL z+8_kKya+_~27io<@x}9B0e4pmXsqsu5p`~uF71Mo3LNp)2|KJGXp3*7t+CHs3+#8$ z9Bn#HanoBPT=`ueeShlUm2OS^@1Yvzw5s5>HA?ukYykdq?uV8=bbH(-g(U}m@qz!o z@SPs-`QH2&eA$dgyuI!=KV8?s|IBFTPYc`lSML_SMez`?yx2(l!B*~NwVvCbujj+k z7x5jh=W?^sY21zWT*JM&{QJy!-WnFjr^wPCd|)WQ9#8*MKJ@4Ret(u2DBO^EC?1kz z^;s@)x>F{3w0^i`|Dh)>Pu#*=4jVdoem7m>m36D^*_TFlXo)7@&zsDL?pRkxuuh^awA6eAYZ>)9rUl#td z57^ntLPBYOn7dH{7G4?%F5QD5L|y}yXluh`13mbsZ3r#$Ch+{@Ur z(NG2C6S9eeB?A*c=P~(EwF(qY4pOi0>9dbe^8IF`}vsU;73f9J!t zVZ_slECSukVmOgq0`KBWq1L?&mMIZ8xT734&8~n2)|Jq7q7r@uh@g<3^&kKD%%^9+ z1KpmU&@5O%GhqbHh54J)0qAooxP z{5K>Wp3hB#j{7MPYnlwz$%(LJdOXyujfMK1BjDPOD9HMsFL_EB$Rvb7x=|3Ux#tg0 zs(m5J#v9Dr1oGc{LeY6QaPn}0zv~>K`@0=@2H3)YIo41kAs^c-bI6q+40=Y!;BRFB zgRFJokO}p(4OFL|O%-TtSAzYk2Efv+eo$@H7tY_10yUZ6tY7$7_GspNHgL}iCVTD? z^SpkW4ZhmJoUole-_XXIMzyg1><}ya)yNWdZDlZGJ=^@Qo=Hz$#5!fEn|tOowyUR# z^|_YI+}6jlnDjsvrQ*sQ4i9C2qqS*<^k+w|eHK1-To;Tf6F6e~GQp%@nQ*JoR^WAA zUg@GBui+jc%`aq^w~Q~7ml#|Lk~|zVL$cm+ljKzBNeRSvN&1fXCy_N&=7XyZ`K`A$ z+|XCxJ@dnP^0`zV`mLBeEaQ1m-AsN+xrVpTT*9roiHkR46Yt!%gIj#r%WpUw<(c_Z z!!cv+HrJ~*7(ky&i>_J9Eo2sK^B{i_s1>W3Zy+N zW0SWkrle?~b+I;ns?fu+C5Bj=W`h5G&2Ww3P;~xii7O8d!&T+OQQp7-j}ymaN`foe zJa)$w8D3c5!BEQ82X`&>!^(RBI8-+ncZG%GtqRIc&yK`pbaQ%A9fM(G<8V)60)DVa z!Z&Y|an^=Z+!#0#%^s%Xr~FLp?#e>B@Ep|Jo{PFYdH9C(?QvO!xOZw1PF_?@%#spZ zI*mF>vdhrTsT_axl;gK;6=)b*iADD-@lv`7eL6%aaTKHHY%v}>M>FEL7;8wEct-PK z7|n-Vvns5Sqb?N62Oe8R`SNfvUj87$`%|gUOPV}VqbjlTRs}w_tiXAtf_oXmxpWi0sp+@P6;r}9#8 z?A9c_b2|b1{f$FowO9<$8-dF;qR>S;0)rn@XYu}Ej2#n*%WeI!>$VRjjiy=KPry<0 zJ+Ms14c#l8QTB=h{x!A3C}NgbY`4P0cZQ;slsO*IGsPLhjIiB7A6sm7u-aG?i~FnL zf)~nY)2xUSX3Jw!upCNB%MhOYAK!842Vc_jiH|jZ%P$5zI zqq14gW)b_FHI>P}p2O4%7P4*kmNWmrb*yCT7PkKPZk8Kxkim>*cJN>;3%zrm&FQ|% zzW%($w0a)0NsphiM*faD*L-0cLw+%sAO*JPWgu^0Kk8i^02e1I!J=&{(0W!4hCS4T zm2Y(5_B(wz@XQE)c9_E0gXZvWz6Fd-vW8q8TX=ri4)%_9gjJd@FnT*NN^CtLZkqso z)V<+*l`kls^#>iLAov~-0#ij{uxMcf$ZUv$Lz_mx%=%b}noO+0ghWU-NhX#@3f!$u z18$iPua9MbuV)rCHD-g>pj^n#%Y$({^C76K0FKHP!4ZREa4@G%5ra}lk}ZQL4=B^U zwH(%DRKR}PA0BNa29~u5;x~(+R*AHRd@)=j-Jz58hZf5D&90IIc2oVV4X%8RN9gU%e4f|?5S5v zuZXmq0=R!79}Z2-gE-4vxN?Sk!0}md>_!Hp1f+xKwlo;?D+R0}8LCFnEL zb^wAc=uNbSB~2D^>y|la^_aq}e#Q{3Yygdl#8)J3>E$c>9M7r1wY5s1Qak|kZ2E!K zOBoowLJEqf|6+b^U)akp@7P847c6hcBW7WFo7EU}F!{diOzS}_8@{8NT`D}tiuD`W z%u`#~@~m~t=<9N}X5vCt`+E)(iKene5)m6RH=Awoi)E^x{FtcDiJdh!XL?Nd(}kqq8l0fq*4XjVaO!Pi2oOh_tWCB%r%jC=gBzbWD1_DOv8*p>FC^$fmTDZ(0o-kD*emB z3vqcExH=z;uN9!luR=^xrH&Ha68u9QzJY&B@xskAoVbCqd?^)Z+qV+6)>Y!)p(4Dw zkr?p`V)V(Q{;NG=G$Y?^!k{WlB`xBA+>z_nlnW>B$ozN2={-mpjZ(_;k#?c5o7jnt zA{@G_61S>WqGfRf9^XfM1Le>?29;5_Rw*vAr~HRiG5V_&Vf(uRe0Vq?mxw6GuAhtU z$Febrm?NW3QJ=jd-OHAy;hE}x=SJPZD_QZWF+;ClA7c9zkL^x`P;ZnB9y{z#}nFTIcVvg~9 z==0%5IHgS=!?_OL-lK^L%hd3%NCo=@DB+5M1Mt^nIUGqk#4jf)9CVoUs864Hn?7~e zyFKUS{tx+CpIf}u?kc}M=schH{3LhVeVmV_+mb|mH=lWAGY^Ye%NN~W#;;{8;B|Lq z^A$@cbH%(0KE*tf_uP!;RpWhlpFs|M^J-I`r>Dll>ty)pKQAS@XU|EhXYPQT% zO5!E*Qd*L=m3vz};x06oFV*n6k$cX|@u#T}cqmKov|l8IOl}em<7J`z%X^`5z8pKK zuE|=Ln6u0MoY~b1e|EAxmaW#xVaf4gHvZ&Pb~tJ-dw63Z6GzvxFDKWrE{m9nxk=r*=@LOXl5qJtT4zs=rkf5a}Xdch(ly=T9ozOppc->lCQDe!dY3!BIF z1KFbk!2G=u@j(W`c@K4X9HRwYnYyqv*8t9rG^TvrV0b!w2o(0Wge{%cP*QIT^CRrx z=66RhT9GI?}5Tuc!bQp%QjQx5O-Y3dyLDTbB$ zRj`!2u@R&{oFTtcFZrH+P{!i$DlrJ*VyL5B#_`D_ko>EJ&6U)1PrbtarWK${ysGXc zv@;wm1@$u}F!pRQSRN|^_tk}PysQ9P?eZb-SuPxA4ib#9dKMYb{S;7+4p|IB847QWM>1CuL)JEvRB_D0LYpp>Y zW~#&j8wjuWC_sR?KTH}%H$>_dIivWO$wqu*rzU=6W7oW5%XU9zOB=~cz5Y5=n|YDV zPC3nRFlX*vhnZ+m6MO2koejLafr-*qvg)onb~mM(J-slUg%plv{uTwS`F0{ZI6j!U zD!a3=dQ0|OO_xQ@9>BIf>=8^i+!U;0j|jJZ)(bO-i3It02jSI|7hW&5V!S>q9@4z7 zX>m)FPk+fO(;&&P-_s>2X`3W`|4E7Pr%RHlC&jh)DswkaBYwQumM^wr{P2nhZuBLM zpJAoEVf+MsCuSBO^QeaJ%wEbr-CNBshBok)Jv+H~zy16{>@lvk^aL+BdzO!Uf0>V$ zy~zWVA8`Kx&v>72Z@3KIlRDS_AQs&}UeiYguhAV^w@x0dFA$gNw=!NaRl~2Ki34JF z@LsAuI;I%m!w6H{K6Fug%v(;B))Eu9p2S;#L^aL?1**42M;|kdnDn7uK+qY z`Jz<~vD|M4Vwrjf7W)&MoVX#`6QWRkI`ssOk42}vc+BugL<8kyjJTYF*CwaoLgRES zIFNzhnuWc)vaxzlE?y|0EXAIDRC!T=Zt z&Qz~NXspCv&ZHZVK7C(PO!+l2o;xhYxDR4nOnUTm(xpvkCX`dAqFA{KHJ?)sk2Hze z4CK{8)bv!~_>c-rt}REWlVzy;ycBhQmY~nyV%+qJ{8cv#F?m-3 z-mJ{WyF>DD!lfL%nwyQE-(}*@ybP4OIucE+({S9F6dZCW3H_fX;MczK7_SwJb7@!D zJBYffeuiVwjZpO67>t`T1F=!nA8U{JU||$s(OoZM>3ZO-c31p1+!;ORIS`|AICc5j z;OPkB>W>|Ye)VQJVwVX{J7|b<2lP;Fn>IdJq=73dRdG_FGNP&?F6-=%ZVP4c5lG{_ zD}TAq!0$ZGtD8rrP!6x~313`rk6%x`!7sXB;yp@dIN7NAxdlgfsn=fa@Nhd{{oh7z zCbf!3Pg~5_{;1{)^JnnL`Z4@UbRpmID~Uf_7Q*KY_TXzbTXB0`JsvSjf&aPmU9w^7 zZOJCHV-kawm6FuO|4F)5J4+NC-nW>zrMHynb$eVjto6!VDJ#rg1 zKOva@d?dX0`zKsu%1rZ`Av=^}%eLMU*n^-57QHi#efwL&&iYJX=^nG#tM(f9Z^Tk& za%DBU?9;$z?%2sr$?j(=3CGy$l_%Kst7lpCugmO(#!aR(_yH4{P#=}bTh{pT6Kmi< z*yD-+*e`V%IFKy|dBnBre4+@K)Kx%3P@|iUCP*rDVE;IMFd1hAw@8!Tm}m|WE*7v| z-Wq0f*gzxYCcX)d;PAv5?8m#oSy@jwKT`mO?}YnHBlg}we`xwgT^2$Jl$C`M&m#g# zH%CGLT_a#_LoA%HjfdSuq|dr0!}XpNxVI$@0 zS%6|V{Z$N?NRJ*xdUP|*gY}f1Fda|@0T0BWxIql#V@Q+uN-X!;B6vx;J^OK$5O9|= zch=NBRYG0AYs#QXQVOn@OF-)iKsTm%!bZQnJ`Q{ z1IA7s2{$`aA=@wo+>(-D?2H8P-4F+d_E7i7o@g-K7zrt}!r?+{DAbz;!_!9raI@AA zR*=RJ+seQ$#0!$!+~JpQ<{{=DmL|+oCg#t?d@GX=`)X zKaV(O((cbbg*mecC(YRfYfbin-f5nmelJ|exh(AcvPalAW}$HZX@;P3-dLCx*yhFW z%6t86ecl{(;YiC1MLo$a%M^+Jni|P7o!yebH5Vkuy5C4nnaXnaQ|i1i)r_mXa^&fS zeti197+&R_%`KOU_{FlR{6W9D{M3qtyw|9n_g}k?XDM&x^F}xFe;o(8zex+flhek1 zh+8UkvV*U>xkU?&kLaQcH^42&jnQ-WU~F4F1eMAy@r5u94W)n-yHO5t)|cv3 zVcb_SZYBM>W-Rg5O~q*4EW&O-5$3d1Vy#&vj-6P6!^sPUzst~hFx`$kN>SODI;7l- zk(tnJ`dNT+C-d>uxIFx7nu~QU*?5EYgF7cP@R&_HF04+&F}G82kybK(3rfWHqIk5P z6pNlT6ZOYM;is$!eCQR1@|20FKOaa;M}Hh=?2Cp+NqhDcaQz7n?67ykdCQ&g+Xn~q z^R&Z_6Ks&}wZbsE8~yrbh7;sXQDzWn&r15({ZAWDywt#g)2e8&QW-UK6tQ-&JRZF( zi&y7LqfuHf&s_GM-IeCM(uerp_iqG&>R>(UZ9N`OQ?&UE? zJNVi?8~F!^Rs8(!#eA>+d~QBt22VaYhA%5A3V@@30%xtJE?E5kgyotJtI&XpG|HwO!uZ)XTs zCo~A&ecFTt>H*eUaGd$?JITu4pJRXYuCgkxTP!j1A+sIvoK5t9$J)ui zxc=8q=9ex7GY`wa9oc@+KYRe(o~s0^Eh;eaxf(p_s|5FdGZ*mnr% zJ+*+k!`6^J*%mTA>>>G$BN#7mfjQ=+iSG4;DYgubt@nm!q&at{1VHZQASmhz0m;B{ z@E9HmEk4m;5EuhqUUASfH~}pFCc?q9#CV;N3aNG@!RvB5^rmIP-22qw7oG#vjk(a# zn+KD;3t)`65Oyyuf_~eIVbl(~=dUh>pvh%W9Zg!WY6VO>RRL=GmDJ@|3BF@RaPAfH z27}3Sw1VzNx5Q8)M_ee{2O?<>Or-r_DD4T+Kg95}O$4~0w{aEhPvk8q`-ZPWO$yG2%+QS!KOAA_STJnuXCcnurdOoL&IR7W(X8?2ExkO z{!nh^3xiGq>-Awx4|$UAX+XmfRai1l8TbfA7^xx;J5I~OJ&`mdTlKQN8Q+=x%x=o-zh;ZpJYgAi z_n6n18*EeLB{op|4EuYXv-i`Fuypgi>}vCNb}DcqYd*7*xp^&SxUHI9lb^vpoF2{c z3ksO#&qSs;F_^`Fa$`~{mQ3%64m&D8fL+}3Rj3@=DNJ2;NHFfRTzG%HR7l9N5tjVB z=am-Y;WhWl?B?GKHnd=qvLt6q^RBUnw9~hmsf@H_;5BJJYt+l{k~QgneTxh*46G`sd5=GVz|0drR=56y1rw z6k$_mAqH+QK$VhwG&Rh_r6+T6QhYXkyOW99Q5pE};7B~9kcQQMbkzP-<|Hq#4ZZ@FW!k1PIL=Y-I0 zk15X7CtN-ZAFQ^-?UEs=a$_(CKQhLdj|}j~4PCs8T9~mx9VMd&;V{2}_*7N_$ti#X zEBfMBjXtPW_?xRN`N|U;-}B5PFZkAdkNBoFxB1nv9eht0HJMynWdxU-<--rWv**KuO?k}L(2-CSaU9Txf@>J&8mdj!v{0Zdv;mqoN%vH{uDrO^}2mX1$izMl%1NzxdmnmB_Q|Ey+* z>K3z5<5g_r=8de_UDqT97@!Obt8>nbCM}6A&;t? zjRj=LS;MXCHc+vQ_JL4G;yO5kW}O?1F!6-8%>sa)H>{fJ3p=~~A&~Ci{*@sxxgiWL zo{Iqat|%DvnwU;cW1;&>Jj`rNgp`TN5bc!;q3_ecVqrR5G06neEm_cyashdha$)eb zJh0R%fb8%>I3g+njXA|oR73vIX{E4}`e?^^mc!3~#uZdUok3--17)pA%Qv)vga|8`QaO~kfM&3CsR_JVW(a9D zdN6dXHcU#^fO&N$pFIKW(eytC5b^T$6ir?6TAs?B@?iCwn^_UIR zxXbo*Ut>2U7udgvr`R4_3Cp^Eh^;Ew!|s0H${NP5XX8H9v&YGcSbFnZHdbvKD?BY` z_OUrEwIh~&^Y&+I4Nk1>hZ)oL(_q#!WSQoFZ-q4-7X)>a-NMe?8bMP?7S3(d5f*(v z;I(MNHBZq5jh1SS_LetIW|HoZT#474I?2*4`y|)mIwTi*x+PYA{kgHUHa~cn{2Cdq zyzoyT&z_&a_bTLbpNXTmO!;*FQ@xr`*k8x{2Cn4FS2l3Xi0ym@HgT09NBG|yeg{jslkcxgA6iT=*dn)Y%Pu{2&dFN-PK@;Gy(A`YZ?#}n<8 zcl)e?$CY((nW;V=w=%+SLrqal*Bl>6S)j>%E8Mfo2BRzN@XioN)V}774=dg9ue2uy z&lRvv${U+Xd~x)7e{9hS!sN6NG^-24A4ei^&($b2xiQ}H;vArTipqYb}6Nt-tH4oQm7T|y3g_tNVLdUtq*i%a#6f;V(tFR2; z2<2EWU4i!wSK#)PO8oM^68Be%@WB%i-J`@9yNvEZoun1WR$*V#jqPX;*hV^Xk$x49 z{Xrc}ZPZ^rnK(@rVth|N)PtcSeBMeoA~ ztlq-+Yp&xLXD{co-Ywv{!E^Y1=P5ktd<72)&*UfQz2vHy51&8Lp39yy;W7PH`CKN= z$K84+8EAT1@;7~p80`Ig;%VXqtN|XEKCVs zDJW?i6TV!%El5xPA;>BzvWgBpW;NfM8M%8h&%2?lq%4K4`c%Y@<&9&hxy1HUtYLF@ zEn!2wS2O+gO{^<;C;QmEkDW0+Mz@|5?Bw~g>`DJC?5z7u_A&JVdszOAX^7u4-Mr6C z6!epgP?Q3lQW?0_DhH7&10Wzy38pWg4kfMzZ=PwwRw-RLJIDZZw2dK8Z7__H83MYm zEWqHTHH1^Q#poz|DCtW)hutplHP{`7-S&j46b9?Bc*6`=KloY~0PPQ{YtA4Pq@uz> zRU8R#XGcSRZ46}0qMJy00{Dl}&0IYNYC2M(-;|L61{u`DlnGVV*>ro)f#~1F@D9rd zr5a*-w-iFped5Eur)Tf`5)dAg!l{-rcsaiuR)khS`wzMYEw6-WgUK_xo-zgsbpIjE zc-THMTzNyi!3_0(!*s?B7@h8YfD@fNnuu7mA^Rw1Ef93juNqV5dnwI9$nvPo+7~`zs5?<1(S} zRXY3*8VSKGQlb0~d5IK~pxHKoZdh^fA~*)jyrZFyWh88p2`64`2(&K%+1+ zI*?kV2`%1g@JUGp>^l_UaJ4)f_mG1zkEJ21x0k6{{9rr1Ke77YH*AFWQxq&vceBX*65)FP}XW zB{G-JAa>Zwjftx)*wnq+?8lS-tV`>&&?ottFmwKXVa>k9!p~KC!v0osVTI&^*O|*& zUiBSUn%`YK(6Z;Ej-+CHvSj=58p){o-IAihi;@`Ycanb}WVs<~@DDT1c_KLTfcO4< zLv0+7H_GMF8>=|Xo5o+d&Er~+7V*#tEBJTC4SdCtZG6YTCcb6TVcx$>!lRr|^Pdwh z@>z$kbMfQ5-1qNeK1TjEUn1Mh^*?>%%P#!o{-M$+*&>U-zW2wI-iml@iZV(cQbmO> z4LmBPgV#0n(ah8cN1K}B5-oEK>SKZFkF0RZJ{x>H#twV!9kKC|Gqz84LvsyJtXm^s zm!>zqn&FERpZa5!a}aJGNByo%VL0e^1WJ95!rH$ha2e$gzPyUZS?3bbYGpFErlg{c z(nyTln@-(wndo&c3$JS&SG5ARDvHHO7Z!eGAv0g z$11}Le1Ek9FN-Ttp|1#6%@kqfSIVr#it+YFF^+sh9pQ>q_=P%;{@3a1L>Yu7npJ4{ zQH(c9FE~*q#>Z-6WIHIoU?ajy#El(9nTA7&6?kT4IYwV7!|ZpZsPMN0(?}1@!?7Tm#>qBT3$_T3vE_T(uadhR~oyRMVx*Ge|l@rGJue;MaVi{^c%V z^SKK`!|J!f@FrO{VvYtgj5lW!wVYYpC4aVXR2I_FXs^kLxO>WTZ=LyFy2oN0T4U-P|!f-Y6lI8_L#*Pq}|A_oT{URaI zBpRxR#elPA91PJ)05{_Ag`Xid_?%Su<~9-{?-4txJQGHJ$^yl_9JqBZ7f?SRc4Zd8 z%%z3ke6$F5(R24IJ%5*;EQRL{WpH2=X|^sEu<&ICOrKK;TvG%d%jo$nEr!eF552XE zx{O|mA(Fg82gxh+zplKC^y4J@c_{t5({3?%XVUw>4Ec)a&*f{0z-?|NjCe&pA=e6+ zHM$&*Z7zet)>7DTr39)j7Q-j{KJ1nif=^ZfcpBt`)A?NRr|);h|Gsbf{=eT%haCF* zl*~?r;iswp`)eZPXe5Bf&^VB_ih+2;Xt3@Z3A^rv!Jo|`5SSSRO-ccf-RKMRz#F1Y z3DD(99@4Gk!|Lk-dhw3Xu+k2?NPp?uYX#nh7I4nN9IkqrLXA5;_lN1jPwJM?`lJDE zZK~i_qYRCqijelNKTO*x3yI;<;L!e;$-nu=cK!JHe|OO8_B`?$Ti53jTfI}ll7*A3q~Rb7_uIwhoZ8IR8LnXiCsng?>5K z<_s3KU(D3>ve=IaF-)(?m(?gcv9Ug8>}l~J*0o5MB?WW|)!A2sy_I`}=VRv!9Z#bL zn@a-)6ShMXv}UwvUc{>|Ea%ag>v>GiR{n4LUf%qV_%-Ec z_=UUYc>B;st}^BZZ$8w*H?%$Gzj|Ks0@-)GQ0fbx@%ATQn<<4eF3TX9TXC6K3BAtt z$ALdov1#ZabR4OL14irO(0K+JzRVbXmYU+N85Y=>KLkJd+Mq7w&(vCm;r2yNxXr~C z+wZueMYagTUo*5y@y7X=e9_<7ADv19(RzO{N<9w6rM=;JSUn0sCkC}tN210L;$7d0 z$KUG`aqGxrd@q%Xd_x-cSY_bU9hvAlFdG%ia_~`YF0T2JhZg1qSm|Ae1z|fmkX=YYnC}j%PIuWyCz8EK66Qg{u7&j4@6^O~&No>}& zMwJ-zSByGM#M+xpv)@6C_nRv4XG{h9UMoi&PP+esG8})i6r1~&;%w^@Jj9AInRNdR z&V@LOa&TsE^Kiw1Tzr$3gPwh|aqEgqbkWK{^#y4d`#uFVy-D|?HoTzR_PJ0rTtYn7ut0p=>xW(2d@;zw8;90YcQ>Ql_W^fYsN#xtS){A& z8-{mZ*`d3p4X$w?f`g+hP$k6_m!uH4D%t?e1YO*%uZ8PBsiSM1DjuKQAH#<$q3~1= z`79aY*-DX@_9q`u{+XwgQ@$kqC0F%&%qvw}_@i6IVXbQ5jYH1ysPm`!yO1N?sA&%` z7j5M^+t%^9y)`^FY9X&&JBx2UJdVp6kfr#)Op{!?>TSbNs;wJJ)!kdlCb~BVqv-L zK_N%>y3q0My-@U4j!nO<$`L5cjOP2 z<w*>in(&}{@;J`Dz0@~L0HZ3S13 z42AkC>ahzM2Cw@%!J%U=a5&Z-&USjj<}wD3U0&c%eGrF_`GKEoAUyI9hR{i&bSDi5 z-7}G3b0He0*2ThyU2za!6%Xs95@Gd#WUwK2w~&$s``)EPQgJ3YKFR`3Q4Vx3%!O@N z^T6q5-3CD=PYI2kEWs9i`!kuRRy$a|_tAOPX%OS$299-6wLCiC{ zD{GZPjzF4HbTRyjD}sNd^{*kFr&T&19$w5PA5RVx>Slutd0LemGQenC8qAeTh1A4k zxVR}1TJBKq_|G_)p*j*$v}2%Hjl7}1!{OxpP!M(m!{Y2f>YDHe`!jSS3HOG#Eey6q ziNFxuVU>|9xDX@V_Utg&|J4p&4JLNF-w=pSvViwFrl6W*44>l-pvhYoZWw8S`xpA% z)v1EraA_%`KtP@QCnUcA2pGe1?!&U?PO|yCAAB>LY4e_OEuw#B+5m z{}BP`ce-TO)@n(di}3_fa;L(gGK*hw>D7bidHcXg~V)j}nIUA&QEfb$ED zQL5M!|7BQUc<2zUv$nxOf9-H^{V+T^*$Fodam77X+;LB`h&tdHHYa-HYMS@|4fe+i z6@hsDXfST-2t_5O2z+ZqUQo*z9A`8VTNOs3$%}ZjJxCgVK{EE&OvUX-)36FM{{PMN z(2#7rI41|s+{wi;s`>arRDkc|3vo(z5zb00#&Rk zeg$59ME)Hw%8u2L#&egL6S9@4MEZ^|?f4m_@8s&yy#G$O-E(66NO#`d#$rr3Re?$Z zeeMzJhR`U-3HfEXaBnHzZKECkPce>AF2;rZiZJLGF^nGMlkYzd)w79xrG=9#D#4VxW*f=;8Yu*H*#r6Q) z7vYCt?|smDiWe^H6>#BbPmFowhFY#JC^vgJMqPHmA-`?$yy;L3@v_1{k>;onHyF1^ z7@;E5$08FQ?E6at`!^0mzHk7>_$g!GZwjckzAqki?StW~{_^;J-?`MGZeIUiCpW2j z#@EKR^8Gq@czg3zex&ju-`9`c8?HLR%?BOi$7k>4Rc|+OL;uxWdDT+>plvQ!(Vosp zL*Q56rgPt6QT%J3H~&*TjE_HH!sl=`?srL=@1Olba-_Uo@+fSZq{3*HB>#q=@5HVu4%!?BQ|0`1j3ysaf0uK}xL_ZN;B=!n>b`N09YmHdlGcInX^*1cv48yK>RZTq~DX)WEsI*iD>z5O^V(I@`I+pal`6g-E6Ww$d_u5yDq2T!;o z5nzGf1;-Ehkk{T14i^T1&9NXTe;)!dI^l58C6YYy(J603k-U)K}@>N{H1viT%Qk{UlqXUpM`MZcM(LsFNWdQiLJe< z6jr8`K~KMODA+@J0OtybI8p&e^(X^2ns}%ZF?HNfo>-Sy6XfxkK)2nObmKLrTQ9WG ze!r5k#JpAdk=PGWgwH3U@3@sb{VPj53SiDD~LwOe_QyRserg z^I6OG$0j1GLyk$Mz<8@W6!f}4eS{OFE+-AG$qo#@ z4TW9mLqM>w0CihaNVhVEL~R3b`>O-P?`y)Wo$8QLM9*uB{&1p25w=c|gMNB4kd)fX zsz?7|!zO%Ub;WPkk%$*;+2BX)QO8}TwXT_6gv+epK4*(EPO)R{hgfdJZf1Xc3tQcP zEwfBs#)`MhXCGTBsXZRS?4+GprM5ZiW2V7=ne}DA-QEZ(T1`UQ z>peo?zWD-giWXY!2MVtTZ4-U@F~>991?mhxJgqygJxro~utMUkvsQ9C@{Gi4(nCq; zs-KeX8_K-7NuO^zYr}muiTK*lp}b0z%wK&i;#)RM;-PD2^VY=0yky`?J^?rI%8c#& zR?j}JIP(}^-g}n6D!ag^+$QF+#Vwvv{D5!V`h*X-@`?|8@}AFp`IT2a_|213q^Y++ z7N46c;GOaP@O8Zkb*Bx)g`OI?BTpND%+te=&4!q>*92AfnxW<6oC9iPOo`v*=|uW_r->JS`7ZPEe=y!vehd zz7YLC6`|bAV(h(Cf+nj=F`0CiZF1$IbX=TLmr+J z@!exOB%kV_bBqw$yl{K5vN~@ zM}y8docuc$&(U7r|63%^YYWG?W1+ZZaxgA(4J7ZUAAXtXixrZ~<54Lyl$upmG#mF|^N98VmQ+JIAq+H?~yCr<| z=#xD5-9dh7)Gi)%YBQhJZw>DtMxyMBdA#__bUx~B1>fSB$!`@zbA=iop1a?XE1ez8 zwdw})gU9;tF5eD`uIeR;+x6{|CDW@U*P{a^daL9mo|_lf9iMXUY@tb!$k(Jt6doxO z8v0BT&feN2Jk>;De)toibZoCM`0@bu{IU@nS!d5i?Euy|J%Y^(OJn1d%GkJ*Q<<~X zT(KDmFG|6T9<$2PEUS|h zOz37KrhaEzD*m$RL;Ap%>b~&yg8~foRfaK(2S9c6KwvVO;BTh`CE@xoIm-y#$DQ2JxFgA?x@!0_O3xR~hzW0c&X&kj%UaAffDh!^>De8FIzAF+f2z}g}h z&Zbe<%z|(jyeks+ACCs%SS%db8V4OSXt2rxH47kME^@zM1?x5#-;Q-6Mud;tuIg6vG@7^7x;sfMcQxn0uHy z;?#+SnoXT*t>S+k4YT3+QmZh&}djdOrh65!eH%{5V*21h;)0pad(V> z7n6NpkDM1=m?=QgClA;j?FLtOI)lsyN0?;g0C{n?@N1kkP>ARUpTEn)(3P_AaR~Le5rfdV{44vL^`71Lf5rTCDDTmB zpS@pllRTVPnAVl^%qHqA>$!TANqOvJx7TlDKR&Hze?%)-@svgE?y)L1=lle=M6r-P z@uE9YelTmF;lY|0TeF3Wb(!Z(B_`YYRZ!YQtkUS?!r@=bg}e57!nOnpq3uJH$j^14 zXyMoAwZm)9)>+ybN_6GYBzs;jmFW5$mJF!ADG_dbl*hEfE}6v}<}Kv0!OMBB^m<-)U@Pwk+si$lAK{$^XL!cTbKEGZk*_^; zg9r7t@IBDZoy$9TLG?R+aq|~mzwsCUdQl2nhsol|m2}hVRzh`9!L}+j>I@r%8lSXK zO-m1ZhZ*8dZxg)XXNJDa5}T~8(V?F$dOfknOFJELX@)Zv3~)oU!ydTQSHMYE0MB}p z_i+CRVrK^6?zkWvzbXXl8^SRCO#}}47ll22VsYn>k*M}$6l$JKz~xhtFwZ#!M?X%* zwPT3SMojCvF#fXivd%YH7xjUB}p(O81=>q_x-B55~D z#1Y+1*)Ep~v_4vafAp!NZLAoPe3{$7iE$Y1@0qm6yV8t5K%F{`GL<;*Hg!lZCDye_ zjJI1Va8!B)Zl*4TV^EHpSC(OEYbn~2KJ?C^1kd;s<4)fqyg0lNE!7L~7^& zai(%GW?l%uUj=?RR>l{lmU>}>GQ;naJrSvEBEs1PA50mJ3(q*<`c7LE^&5)+nOLEe zjX5r{9*k86Mo3;Yob^l_{~gu9ixURo0G9!%*Vzxvs}-=&j=1IZ(&)7D4_DawjR&s$ zz(2Pf9@>tBxXe(C%9N8HZk2W{l-$t$_^`o+BW z`fPsf^CZ5&xtJ&BCG+I@q5S9u5ud)*hQD2}&$SjP^HGm}NH*0xkVLtkmYl!6S~BfI zsYG<$R>Idktn(OXUpHQ~*K_;!{h~pmv;^Czc;U~+MM9q90by=_v!Hb5y%70Fj!hY; z#a-gSWD|4SQH|`Vq?J zpJv;O&asz|8dw|LV0~7!uv-rvvy1&ZSe)ZKChPx&g$Mp(2^*v!zMm{~l*_|~Yf5m` zPzA>4szJ-PK~U481>%3Y;HhT_$81bsyQ3N0vmsxgo;4W!wSgxk`km--Dl2bMzv&E|Z8I&Mx^K>c7bluV+$?gi?|Aupx|X*PpNv$;Ss{tI>GoRq4B z0oTc!vp@_>oWy|56|in(1z24xhst5)Fnc!j8Z?%I@(do0`~gACPyzAazFrWT~Amy!3`c?bp{Q!;ZPCe0G4BH zA%BH66z#HvoP%btaE}RStu+Lgq6b2pHiVdwH}ka`%-Es=#x&pg7kOB_L>4|6NyCo_ zVmyR@W%E7WGbznitovy@Yh8bz1q9q=wJ#dkxr+1b@uxFvWA;%tziBVCGuy_r#p~JK z|73=8GW*4p~u-O5h1cNs>h0RkA z3+b}eLY{P*@TAK?*thtM=)~(so`OiTPQRkL?m?@i1U}_U7XDr#X{|gVad~o265{z? z@`C)$LsRwm$kL(QUF^w^cKH|R%{F_=6w;X+oM>ag*Zr;)YH&o^*d?Xurz~r3`%WYLy@6vbq$Z<8boi$I?CaJI!_- zy2nZ=ul3@c7?&O;mP0Oe6)1}F$vWax>(VWEemT~?D#MG8Ww^4W6h*5`u<1}ShMy|J zwgaTgFDI61K4~>JdHC@Oy}p^*7^6XaqSYA~t(cB#MX7kLE*ZD}OT=Ri31|{C3YBw5 z;<|zue4i3UKFJ82suPAv#BunwHW0^-@W;JReerxLv64P8jLHz9#bsh-7`WoYJSWuK zF$|a9v%|ulL-CpF5FDa!f#dZ|QEq@S_9Mm*-qFF79hzuVtd8DRs`&4rGVv}H(aT5< zy^i(4os<6Y(NlYPe%VJZ7tzIU8a(GAk6QVk1$TIn^)+r(dy#JyBz(%z6WmkxATJoR zldrhAi3cjI=9=D1`NFcfTx>Osr=^u~nb~Q4`nm}IXAAJnYwh`x*+%?p&H(;p+&{@O zwRVZtdWoc6bE9Ou$^?n#V^_&y(fhi8i6iUIhJt6vv~?n#*(!qgT!b)n>^wn6W{*%h z>xz)~txE_U+Lw)t)?hnI&Dp?d&TRBdKelb$NH#7dhc!EnA?CtNb|Pj0a~WL29AB+v zdYk`a8KHaF*!PFo^%m^h8_m=7Cd|}%M|6&@8 zrC>#`3{>aKLsNqi$QV!;TAmtA-aQCLv}+NAOb;$t8A2by1h)B^QGD7G%!gYO7snQ= zyY1n@Sw|2}aEAHTZm{&a2k7Mp@b5iR8VrecU9M6NzUHPD) zQV2Utia=ym42`76JAW^M(U(eL?5r}db0~+!SIc1m&1c=~6)@ac3^!?RchdYGPulw= z+TFWpuHUBJ-GX-aH{Z!`e~vz8oEUx^P!GY;3V25P&i-BHprKF>mZRwXz=~2Bf4&6n zJ}L(F*G0sQpzfT;0(iJNAJTL4z>e<2N$0acDvq8*t;CNGPp5kYY4Lqi;8$Q0)RC|B z(w0%+c48#BQRl#$Ls6t>MZnLJFxcr50{?vsgh3np!Nz?As5g4U_dtNYbs{J+@qn}m zuAqF;33f?4LWZL~l*JK8sdNY=O|XC+<4r-o*cg7q7(j&s~GQ~Ci6(bg2GR- zq+S%J@&B|i$661yLkux4-2`71P_ICqCF&CfLYpJczn4J-BA7TMOpyn9}dEp&mlP8oNlf` zk$5|m=6ZH4dL+f6t4}=6*Ga?y&ysNWniL%FMO`%a({X2NCXT$9g)=>KP<>f0cHbkW zreXow*cM_Y`5YH|72`_UrOO7CqT=IHj9FWTWN5|q{kfn-&`ksrd_KNWj>O(@+5ISi^O9IWA9#un=4DP zdqWBNkBaeaZ4uTUDa6_2_em+t$3)vaTt;(Ue?~T{56r^qnhZSBhd6YZsl=#GMupFb z_{1auzf#7yD0(F3$HbtDUldkZM&RdPq159LjB#TEaf`k`&O70YA}??3s$(b_D#Ff1 z?zsM`3(8wMVOshyytl{>x9lH^U(gEsHkhNzg~2%Dh!H*~W`;?L4tjc!$L7yK>^??b zsSIU&E~AJyHuOa~n?6{b^_TBU{?4EJcJm`ToqT)yQ|`6=A@ApQn=ff@;<2&y{MEHu ze$(|h-?DN)fAMNNx3byDdvjLuo)wGv)-$uY`JPGq#I+)>_auo=dltg`-Sgy~XNPj{ z6?)t^vmbX2{Vw@%{+>k1>V%|o`U*+&#ym;0m4(DG;!0h@B;~rc>@S{j?@+XHyos=< zJ5z8RS|iBcJt}-FyCbas^F_Gfsl=knblHy8)@;);52k)0n6;cwWao|)vR%~^*-^XM zEWh7k_VV!xwqnNy_Bvxb3mdqfxt%=5w8LsyM#}{@C#s44k=$bLdJoyL{HN^Yj@QiR z_6HX7{u>+j{SVvrT^iQs_l4&-6~NtI8M0;#0Atc*hAV4Ax|a?V73hNwai52+B^J+S zb2zou3QiIqj1|~{E*l1eJD`(BGMrk+%fltybZo^QPv;oQUk$sZ!lbc z6$&c{ML_uQD7fVl13!F5!lvP)VAG%kxYvK zA^ve5nB?X|PfY>bI!HIpGezKWteDu$C2)!Sj*H#O;KREzXj@ti0mN6cB8KOf0i?AT zi^1WP7?yt&L!dTs7D#vBOu9QWuLK*?-3#u~Jg=b+0Y<*dhZXQJqXND@D2I8h95#{0 z<9n|Z=E#-87z@(for%BWNWB1tg&_Ks4>cF56L~7}cPw(?D9-|2f67xy(qXk}8oZi7 z`}(;g@cNzri}m9{e|Q|I(sOL-uxQ|<$6WeM&$qe|_%V+7b!GuD_QD7-jHZ444uENZ z0FU>3z+YK6I2PdyPKzDkh{PV!p4mX^TfwsCX0WAmqgdg1Z)Th{ zjI}$Muv@=WndMn2X7co@Fv0VjaC+WmVcLo*LWitKxOe@lC{-p)v}21(?F*}wbt~MJ zC429NNk$)@E4f&_Tk=Bxilmr#Nv2!&GT3_SyRIwq_5*4W?T8kwmsZ+?h(G!{0uKTd5!=PjeO#P8+^sU`&=f!oeKv# zcmxthQEB_(O>o-T_O@8wY`vL8;`twM}UHGJ!?f#qUtyuVowJI))D24aHB zFU;`hGfULHYmLfhZ82uK1D;MBjtWLDsB+5<*NySS@uVY6Sm}i&s=jDG#Sh1{1)#&w zV6-j{MfXkN=zKmBzuk?-=!daraXk*hj>Y4)d5PFJJQ-tUQn6%r8afFXIRAVmMmlF> z*_s@@`X(1cZ1VAbasehzE=0b7ypwZ_v8}QM%fm}?vsM|7x>1IU$CT4fUV&_J1@8D) zf$6DY%-t`>-5F-4e3J|26+0{qgIhxOZY@l<#YcD<%Oy*v|3I@9q7 zWv1+R5tH*n5^4I0Xb>8YL0NIwP#B9mlYZ`yNZfB0j-Nk-P<|{3-^K;t*RLaRWt9*9 z?dyf{69jzF?tuqf+)!bLGwO3k)c;_QOwATgT3Tc6FiWhmH^X2P6ZDri#3RpivEi^5 z){h>9&urB&{ZW6MJY5M#>&oN&y)yXQK?(;Y|KuNiKXX;xxBN%@3qEZ5BktpRkDt8S z%(bE}^Un>O-*z~~0~Q_PPg-~Jp$1!cZOj^OJgu64*gTJ)J~^G6&a2?Y%QAS){3yOn z?9FF|4dbbLCOqe{DsNaJ#fxV@m0Z4w5-F9(qZPQULMhez52V_1Ojt1jB_Ipm$Llx<2Va*dQb5 zKXfp>cQ%I;PF7%RITQ@~+d=p%2Uv7;IBczOfn-y6nA_k9pHmnVzw&}h>ArCDnjfTE z2ZGN8>M}VK3fXVMAzV2MUK_@M;^2|6L}L_0{fr0u=0xbbEE$fDNCnN#G#EH31LpnB zgp{&u7=1GbjvMEJYKI#cOMf{wj#W05Ed1fW)FYaZ)Ka_!LO*x!5CGBNf z1q>J{h7F}+$UGy4l+R+AORR(^G|w|=o)4fqYNt#ke7r^7U`wbA#!U>qx2Tgcz5+^{ z%R!p-m+v#nh*eMu?&QnaF`xtv=oLezW)VE>EdcWe`H;Lh4_1!Mh0b5uP_i@&ywo#c z%A9n7u2k6NnF6<`B*8Q4VD7m^UCb{>!i85caQIbI!_Y*b-Vi!$69qey;MIT*XD56p7-$4X6ln7!0T7TVm&!sb6?XPjD@ z{>|I0H|Z+-@SvWJ3#emOyN|P_#O7l@JBY2bk)7DLl5M-Om<{fl%@%%|!~*^mv28z- zSo6ye_W7JA^IbZWbw}zkOZk3`<$e>?_TLrko*xsW`Yjh8MP&;OlLrfSuIEMl*M9Sq zd7@k=_G+ptleUyBYRQ+Rgsqe;Gdn4n@S#O=V0Vus(@L4!i1qo*!#3RUxri&vh4H7l zDSVny39lPCg`b!(hdZP%;qIbUob}(t_uSsW-z+@9%iK=zUH9v_OuIQDYoI!uouT;fVTpe9{HBsWEOMGPm z(!GtbxY`t9wFTZ=HUz&;v%%a9d;I3?h=qThu;!F2dSrW`os59O3P4vaAAGlP1loP} z$D2VxxU(h%tFDDn=M}Mq2S(#j!&ubTi^FsB@i_Zs0_~bf*jkc;R=R1}|71EAduO6W zT^1S;vCvvcJ6EKBdeU9~$KpRiGkqel($Xjcn|YA>zS7ALDMj~F>IhRJ#4_7w& zpn8xO=GF=*G4jOVv2MuF8JmAOqV*8EQ3uN8&AZJ!RBsKx%BuO+QS*3S?sT4hznq)jOy}XJBe}vd zFFrfTf%j+|^XjGn)F1axqGs4G*%l~~Sm$hzSiT!8S@YXTqV&6?&aTb3?!?AhLQv5Gp)v5fV6H_S-Cgo5pJ}t5b16%5(T!as4byv20=r~Zzy_O5 zU@PWTvA8jd*ttj4??!UlxyEL(bM{Y4MgNN)6aZXyv z7t{Rr12eJs&Z0zr*;}JNpt+_mz6yk0 zjv+9JviZ;D)>(#%|bB~*3Zp?EnkVT zADIiS>+|68y?i+MuK-+Wp62KmgQ;2xq<$>{h0CR&LhR&hr*imnvz$0GlvScz=?hQt zJuVYN;axE__N^qYW+m*PIc`Gpd@??@G-(Cij zEX!b4YAL**RRUL57lYM0dVVY{1W925=(*=Z#P?h%-v1@3IYm$vhIM-Y?u05>T`R+a>qSlGga@gmbJ~STm3Ri zp2pd}M<-dS%^~Jewu`OWv6&g)T+Ir*mof#}d8}GxIvZwG&PESNXIkA6EDV7K%&=!3 zE=DZji3&UU`;YL({E@(+R@f4`UvVQpeSbUuwRS(B7;&6$@2TaT%j)?FgR6YXy4(D)d@HZde#Whjbn=9E z-Mo?5$lW&o__j5D&|FOp>!vB9`AcOqW~x}WSRHTOBGy?yU2JnRK*c0ujIS`o#gi6j`{Wy~1fq}gud{P7GukC}OOGn_v9)Fw`6@(ERLa-lY zn&!$z;yROP)U%Jpmo{;DLpL5z{Yb#^my_`0tQ7p`kcP9G(=jz66D#j#;Z8>0_SJMB zeUgV=n&dGQ72>1FB0L#G`655kwaK6I{BtS#94f>1gmT>dxg1wcsKE6fD)2BdZLV(> zWA`&+)(ogbGh!J~rUO0bUsw9S{c|x6-u8d2eD&@MG?+;H{Fic^Mw!_6^z~{;m!D!@ zik!Yr4(;T#qKa^+P>7XU1z7f!dS2G#;xl@E3+QzQ)9VF#-BtAZ-Rb9;dMODjdlJx7 zCmw%T$Kg$zSnMS4Po8unj=dX(qBYdh7#f5d={dJ_{s?@d=7WzG0

4q2EXkG~VHg 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%0D}v<(9vjxOV+fK0a$7m;YVM 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 z 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 GhLmzw;(-OixAnxJ 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⪙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

9X10ZgnpjcxyS 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