diff --git a/.readthedocs.yml b/.readthedocs.yml index 5d50b07..dcabba2 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -1,14 +1,14 @@ version: 2 build: - image: stable - python: "3.10" + os: ubuntu-22.04 + tools: + python: mambaforge-latest conda: environment: environment.yml python: - system_packages: true install: - method: pip path: . @@ -17,3 +17,7 @@ python: - plotting - bloch_sphere_visualization - fancy_progressbar + +sphinx: + builder: html + configuration: doc/source/conf.py diff --git a/doc/source/conf.py b/doc/source/conf.py index fcc48fd..cf630d8 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -12,11 +12,6 @@ # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # -import os -import sys -sys.path.insert(0, os.path.abspath('.')) -#sys.path.insert(1, os.path.abspath('../../')) - import filter_functions # -- Project information ----------------------------------------------------- @@ -93,7 +88,7 @@ # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +language = 'en' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. @@ -277,9 +272,9 @@ intersphinx_mapping = { 'python': ('https://docs.python.org/3/', None), 'numpy': ('https://numpy.org/doc/stable/', None), - 'scipy': ('https://docs.scipy.org/doc/scipy/reference/', None), - 'matplotlib': ('https://matplotlib.org/', None), - 'qutip': ('http://qutip.org/docs/latest/', None) + 'scipy': ('https://docs.scipy.org/doc/scipy/', None), + 'matplotlib': ('https://matplotlib.org/stable/', None), + 'qutip': ('https://qutip.readthedocs.io/en/latest/', None) } # -- Options for todo extension ---------------------------------------------- diff --git a/doc/source/examples/advanced_concatenation.ipynb b/doc/source/examples/advanced_concatenation.ipynb index 573df6c..76fbb25 100644 --- a/doc/source/examples/advanced_concatenation.ipynb +++ b/doc/source/examples/advanced_concatenation.ipynb @@ -35,7 +35,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -45,18 +45,37 @@ "import numpy as np\n", "from scipy.io import loadmat\n", "\n", - "import filter_functions as ff\n", - "\n", - "%matplotlib notebook" + "import filter_functions as ff" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# use widget for interactive mode\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "data_path = Path(ff.__file__).parent.parent / 'examples/data'\n", + "if not data_path.exists():\n", + " # RTD build\n", + " data_path = Path('../../../examples/data')" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "data_path = Path(sys.path[0]).parent.parent.parent / 'examples/data'\n", "gates = ['X2', 'Y2']\n", "# Set up Hamiltonian for X2, Y2 gate\n", "struct = {'X2': loadmat(str(data_path / 'X2ID.mat')),\n", @@ -82,7 +101,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -127,7 +146,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -149,7 +168,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -187,1964 +206,9 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"svg\";/* 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(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"svg\";/* 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" - } - ], + "outputs": [], "source": [ "from filter_functions import plotting\n", "\n", @@ -2162,1964 +226,9 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"svg\";/* 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(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"svg\";/* 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" - } - ], + "outputs": [], "source": [ "pulses = ('Y', 'X_1', 'X_2')\n", "for gate_type, hadamard in H.items():\n", @@ -4149,8 +258,8 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", + "display_name": "Python 3 (Spyder)", + "language": "python3", "name": "python3" }, "language_info": { @@ -4163,9 +272,16 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.12.3" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": {}, + "version_major": 2, + "version_minor": 0 + } } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/doc/source/examples/calculating_quantum_processes.ipynb b/doc/source/examples/calculating_quantum_processes.ipynb index d36c035..7e0458a 100644 --- a/doc/source/examples/calculating_quantum_processes.ipynb +++ b/doc/source/examples/calculating_quantum_processes.ipynb @@ -43,13 +43,11 @@ "\n", "import numpy as np\n", "from qutip.qip import operations\n", - "from qutip.visualization import matrix_histogram_complex\n", + "from qutip.visualization import matrix_histogram\n", "from scipy import io\n", "\n", "import filter_functions as ff\n", - "from filter_functions import numeric, util\n", - "\n", - "%matplotlib notebook" + "from filter_functions import numeric, util" ] }, { @@ -58,8 +56,28 @@ "metadata": {}, "outputs": [], "source": [ - "data_path = Path(sys.path[0]).parent.parent.parent / 'examples/data'\n", - "\n", + "# use widget for interactive mode\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "data_path = Path(ff.__file__).parent.parent / 'examples/data'\n", + "if not data_path.exists():\n", + " # RTD build\n", + " data_path = Path('../../../examples/data')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ "gates = ['X2ID', 'Y2ID', 'CNOT']\n", "struct = {'X2ID': io.loadmat(str(data_path / 'X2ID.mat')),\n", " 'Y2ID': io.loadmat(str(data_path / 'Y2ID.mat')),\n", @@ -112,7 +130,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -161,7 +179,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": { "tags": [] }, @@ -206,7 +224,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -226,7 +244,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 8, "metadata": { "tags": [] }, @@ -241,6 +259,3675 @@ "Y2ID\tTrue\n", "CNOT\tTrue\n" ] + }, + { + "data": { + "application/pdf": "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MCBSCi9FbmNvZGluZyA8PCAvVHlwZSAvRW5jb2RpbmcgL0RpZmZlcmVuY2VzIFsgXSA+PiAvV2lkdGhzIDE0IDAgUiA+PgplbmRvYmoKMTUgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvR0NXWERWK0RlamFWdVNhbnMtT2JsaXF1ZSAvRmxhZ3MgOTYKL0ZvbnRCQm94IFsgLTEwMTYgLTM1MSAxNjYwIDEwNjggXSAvQXNjZW50IDkyOSAvRGVzY2VudCAtMjM2IC9DYXBIZWlnaHQgMAovWEhlaWdodCAwIC9JdGFsaWNBbmdsZSAwIC9TdGVtViAwIC9NYXhXaWR0aCAxMzUwID4+CmVuZG9iagoxNCAwIG9iagpbIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwCjYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUwMCA1MDAgNjEzIDYzNSA1NTAgNjM1IDYxNSAzNTIgNjM1IDYzNCAyNzggMjc4IDU3OSAyNzggOTc0IDYzNCA2MTIKNjM1IDYzNSA0MTEgNTIxIDM5MiA2MzQgNTkyIDgxOCA1OTIgNTkyIDUyNSA2MzYgMzM3IDYzNiA4MzggNjAwIDYzNiA2MDAgMzE4CjM1MiA1MTggMTAwMCA1MDAgNTAwIDUwMCAxMzUwIDYzNSA0MDAgMTA3MCA2MDAgNjg1IDYwMCA2MDAgMzE4IDMxOCA1MTgg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bnRNYXRyaXggWyAwLjAwMSAwIDAgMC4wMDEgMCAwIF0KL0NoYXJQcm9jcyAyMiAwIFIKL0VuY29kaW5nIDw8IC9UeXBlIC9FbmNvZGluZwovRGlmZmVyZW5jZXMgWyA0NiAvcGVyaW9kIC9zbGFzaCAvemVybyAvb25lIC90d28gL3RocmVlIDUzIC9maXZlIDk3IC9hIDEwMyAvZyAxMTQgL3IgXQo+PgovV2lkdGhzIDE5IDAgUiA+PgplbmRvYmoKMjAgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvQk1RUURWK0RlamFWdVNhbnMgL0ZsYWdzIDMyCi9Gb250QkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0FzY2VudCA5MjkgL0Rlc2NlbnQgLTIzNiAvQ2FwSGVpZ2h0IDAKL1hIZWlnaHQgMCAvSXRhbGljQW5nbGUgMCAvU3RlbVYgMCAvTWF4V2lkdGggMTM0MiA+PgplbmRvYmoKMTkgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM0MiA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDIzIDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxMiA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjEyIDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDUKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk4MiA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4IDYxMiA2MzQgNjM0IDYzNCA2MzQgNTkyIDYzNSA1OTIgXQplbmRvYmoKMjIgMCBvYmoKPDwgL2EgMjMgMCBSIC9maXZlIDI0IDAgUiAvZyAyNSAwIFIgL29uZSAyNyAwIFIgL3BlcmlvZCAyOCAwIFIgL3IgMjkgMCBSCi9zbGFzaCAzMCAwIFIgL3RocmVlIDMxIDAgUiAvdHdvIDMyIDAgUiAvemVybyAzMyAwIFIgPj4KZW5kb2JqCjMgMCBvYmoKPDwgL0YyIDE2IDAgUiAvRjEgMjEgMCBSID4+CmVuZG9iago0IDAgb2JqCjw8IC9BMSA8PCAvVHlwZSAvRXh0R1N0YXRlIC9DQSAwIC9jYSAxID4+Ci9BMiA8PCAvVHlwZSAvRXh0R1N0YXRlIC9DQSAwLjUgL2NhIDAuNSA+PgovQTMgPDwgL1R5cGUgL0V4dEdTdGF0ZSAvQ0EgMSAvY2EgMSA+PiA+PgplbmRvYmoKNSAwIG9iago8PCA+Pgpl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CD2RCmVuZHN0cmVhbQplbmRvYmoKMzQgMCBvYmoKNjU3CmVuZG9iagoyIDAgb2JqCjw8IC9UeXBlIC9QYWdlcyAvS2lkcyBbIDExIDAgUiBdIC9Db3VudCAxID4+CmVuZG9iagozNSAwIG9iago8PCAvQ3JlYXRvciAoTWF0cGxvdGxpYiB2My44LjQsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcpCi9Qcm9kdWNlciAoTWF0cGxvdGxpYiBwZGYgYmFja2VuZCB2My44LjQpCi9DcmVhdGlvbkRhdGUgKEQ6MjAyNDA1MTQxMjIxMDcrMDInMDAnKSA+PgplbmRvYmoKeHJlZgowIDM2CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNiAwMDAwMCBuIAowMDAwMDEzNTQxIDAwMDAwIG4gCjAwMDAwMTE1MDAgMDAwMDAgbiAKMDAwMDAxMTU0MyAwMDAwMCBuIAowMDAwMDExNjg1IDAwMDAwIG4gCjAwMDAwMTE3MDYgMDAwMDAgbiAKMDAwMDAxMTcyNyAwMDAwMCBuIAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDAzMzcgMDAwMDAgbiAKMDAwMDAwNDgzNSAwMDAwMCBuIAowMDAwMDAwMjA4IDAwMDAwIG4gCjAwMDAwMDQ4MTQgMDAwMDAgbiAKMDAwMDAxMTgyMCAwMDAwMCBuIAowMDAwMDA1NjkzIDAwMDAwIG4gCjAwMDAwMDU0NzggMDAwMDAgbiAKMDAwMDAwNTE1NSAwMDAwMCBuIAowMDAwMDA2NzQ2IDAwMDAwIG4gCjAwMDAwMDQ4NTUgMDAwMDAgbiAKMDAwMDAxMDMwMiAwMDAwMCBuIAowMDAwMDEwMDk1IDAwMDAwIG4gCjAwMDAwMDk3MTggMDAwMDAgbiAKMDAwMDAxMTM1NSAwMDAwMCBuIAowMDAwMDA2NzY4IDAwMDAwIG4gCjAwMDAwMDcxNDggMDAwMDAgbiAKMDAwMDAwNzQ3MCAwMDAwMCBuIAowMDAwMDA3ODg0IDAwMDAwIG4gCjAwMDAwMDgwNTYgMDAwMDAgbiAKMDAwMDAwODIxMSAwMDAwMCBuIAowMDAwMDA4MzM0IDAwMDAwIG4gCjAwMDAwMDg1NjcgMDAwMDAgbiAKMDAwMDAwODY5MyAwMDAwMCBuIAowMDAwMDA5MTA2IDAwMDAwIG4gCjAwMDAwMDk0MzAgMDAwMDAgbiAKMDAwMDAxMzUyMSAwMDAwMCBuIAowMDAwMDEzNjAxIDAwMDAwIG4gCnRyYWlsZXIKPDwgL1NpemUgMzYgL1Jvb3QgMSAwIFIgL0luZm8gMzUgMCBSID4+CnN0YXJ0eHJlZgoxMzc1OAolJUVPRgo=", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-14T12:21:06.921425\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.8.4, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/pdf": "JVBERi0xLjQKJazcIKu6CjEgMCBvYmoKPDwgL1R5cGUgL0NhdGFsb2cgL1BhZ2VzIDIgMCBSID4+CmVuZG9iago4IDAgb2JqCjw8IC9Gb250IDMgMCBSIC9YT2JqZWN0IDcgMCBSIC9FeHRHU3RhdGUgNCAwIFIgL1BhdHRlcm4gNSAwIFIKL1NoYWRpbmcgNiAwIFIgL1Byb2NTZXQgWyAvUERGIC9UZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJIF0gPj4KZW5kb2JqCjExIDAgb2JqCjw8IC9UeXBlIC9QYWdlIC9QYXJlbnQgMiAwIFIgL1Jlc291cmNlcyA4IDAgUgovTWVkaWFCb3ggWyAwIDAgNDM2LjA2Mzg3NSAzNjAgXSAvQ29udGVudHMgOSAwIFIgL0Fubm90cyAxMCAwIFIgPj4KZW5kb2JqCjkgMCBvYmoKPDwgL0xlbmd0aCAxMiAwIFIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicxVxNkxu3Eb3Pr8DRPmgWaHwf7dhWxZeUo63kkMrBkWVHKo0SWeXk7+c9YIY7pNDcZUTKrlp52QsCjUb369cAZu6+efWf1y9f/fn51+YPL6a7h08vP0zOvMHPL8aaN/j5r3HmOX5+mSw+LVPwabbJlxzx8e3+o08U2PX//5ymn6e7r/DFD2j4fMqzGP4sk48yl/b72/X3/u/b1mb7ff2+tO/PNUIhB2Xar89XyYTvz8GJ1GKc93OVkG3GEGLrnIJIESPWz0FKcRWdirNzSWhWjedXoWrOlOc5JSneSKpzsdWmCOn09YRxaAn828bkkOO+MS2f5xBDcs446+YiLtQ2xRDnWEKM0Yivs89oL2d06aNK7OPKOls5N10X04wfDAKVMFhM0XNkRSPNOhj57itPg7t16e2cqnUVmpUAPY79BINGV1KBMuLmGOEDXF6RMFdMDF26UudcS/GBo0qaq3PZBuMdFHPRRy709G4qfhaYRYKp6DPH6D07in728K2UjEtwjWTREzvCwFA/WcwW7W1NqbjekXNutl7EeZOhe4rWJfZUZE6CIaBSoN3qaogCPbKDhkYy5NV6L2tPWKoCXzRon3OIcDcssRNMreaMKTtMLYnlwB6/w8oFyycRCsAqfp1ZrOg1SawYIM6Ye85csBTb0lfqA7HP0dHh8L0Zk3TwD19gLLGHiWGd8DFAIaluho1roo2cpVGjh+lcktm5mFOzkUT6cQnJxDzXjNHr2hMGdLHQKWDc2ccg9F4X0BHUyOgol9lZGy1VElg+CPy3moy1CRYjrh0VOp3DjI3H+jubfXDsCXJbfM3GVdjOYj3p1t5SjxKtmBrm5L2VVSOEgfkvnBWr6uFuUKBmYEqxNq2hTIPStzlzWDC0/jB6lVydoWMVl0JpNn8xifm+IU6AUmgrcB/EDXyHk2Cw5Bm9wauEU0ulW+bFREPVGLKHPwvjqQb6M7wwJiewJBZgRpSWZhh8wbaBVlxCeL4HbFrzzEIQ4H0Zi1Cz985gPkVE4BgVKPBymb6+n+6+Q1QGc/9zw9X7n6a/mS/sl+bv5v776dv76Yc+DZrmJOxKgENauBu7RYfZ0TWLnWEeQfc1zh6A4h5XkkHlJSdCDwJG5liluFjhSWeUdE9REi48Rw+F0K9DFBf4UHPXMlsHj8smEQpTCOVRNSsnXIPzFito4KdYNEQSjHlGS3mSlnARH7PHl0OYA3RMzYPhW7mkDHgKQmBGRD6qJaY6s2WKwK0IHwak2eyStXBAXU//FD3hQ5i0OAC2sxGIJwmQesaV0RI4CBNlQxyjJ7Y8URD7tYaSkKSBZIie8PjEAJI2JysuIaAxT/SMzBJLPTuxJ/kyc0XGzGw1EYBnc/U9hSAUQ8WCm0iALznUR/VEWgQip1KDL1g5mMwHDzcJwLNPdWdJiYYWgFBmTsViE0rIFiKdPJmMiSC3uPS4ngyIyKkiU2HeFlCDPBIBkOf0fJJDE9ELvMBnwkAExfC55S0MknIh9oJdRZ/EP6qnRy4t2QK3xCNppYJUWaMDk0B2vpFDe9+8gGkPgyKngMrkrmnjSDUKEjfzQ3W+2MNXgM6W+QbQl7193Fd8qLMDjqO18IvkASHkVDIJwG5y9sSp57if3nuzsVqSvLT+++sr81fzDvMOCQAHEEDqgBG88xlhmNHZr6R2EUnvbJtpcuAMIFIeKd01jtRmfJDKQVpaqsbiJ2Rq1wyRChht3YlhllUeQ+wEm0yTaQnUCyQPCvgq5JEeqLxqee7Pk9L3oqoiBe5pyQcd4ghMJ65sZZX7TQ5X26lYxCM8LLqD2RofLSBVBxXP/FmzoWYUTRO6XAaUI+yB8I2K+Z0RQzMS5mjn3EyE9Js2/fQ/TspaLofxwjZclHP2G5t7U+6sG/4/DqgYY6y05q7X8L+xJou6jJoBx5qvGkJuwbEJpfwQMAtrWf4CYCkncnRllZbTScupMQwAGJhHK22CQ6XUmAc+EPIC7Q3Mxrd80w+FVHFgzJAnwDLErVYkAShYbM4nlLmzj4PmbUGpAmhJ4QfYA/9hxtT23F+niX7kwNLBelHSgF2jvoOCm9hvYjA46gG7gvIx6iADxwg21b08rHKPkuSmlmVBi/rYURGiAYKvOYQP4KPoA2CPSg94EZuC8HXIHfKNi4FVNiJ0rVXBWQPnCY6Y+xR2dvUoFCTAkwJDyCX+5/NmV/Wvk2KRRbcgMhVqRqSmViqCN6RWTm3yvIlRB+xCXlrJHiLNVWKLGnI92A5pnQEPotLDf9xyOmkJxRPMVlBu0CQB1kEN2SrQTS6bvDZO35IxuBi5MIwscMxY9/KwyUM+Mm1EbRM8SnFGfGw+CeYlm231P6tOq3mhYkNMG5NHIkHdKKxrXZW9giymC0toapDb4qJqLJuC+p+ncfgshxFt2YaUXM4tvuIsG6RaUGaESi4t+7T9m9gWGLVXJp46v6LruOV00nJSVm1RVxnUDujF2MSMCgujWvbiTQq2fhW4EhBKKMvSnNhaG61bHsRpEzP1cleDTosQhdawgsc03U5Mj+hyG9IerjwWDLmhBRJMjmrZhqZMbvJYZIOrYcvppOWZROA9SlCL5Wl7XEhwqe1MsRE3kZAIUFQjmbK0XuWjxHGzRKAEiebJSt7YHBboEUHuMSvENFzd1upKag5bGrvzK1wpLaeTlmfgSoEfxTNZMRdUJNyDRK1aMLh7sCvaMXxKCsJY9wyfLIUJzEoPn7pGmtJyOmk5KXi6jDSpZyJNC8xPz2DjIFnUmEJtRZhh3YZodOw37+Tck+1yMJt9rNFdakmlh5OkXHPDfCwA5fjrFmvDltNJy0mJkUWPqYr+knO1tp1HC7PHcIaMXYEcjIJqUfOUlh2UGLwdimmkywYsMcqSbAQ2QwT0XUkhFIcAGg6Dw4CAtlbFKBztd+A0StRrMahxoGtwGi2zKalKCyuE/xxKDpTz9AWFQj5KEJ/AasZZdjmMSWjqY/p0DhHGAHI7QBg73KL6Z+IpR7HwYSmBnVUreg1xQzI2dM9Fy2FahlCcedV754b2sGV1KpumSHfHyhNrYE3YRKgKlpi/sS4PLFGz65AFfOWRDFUBh80u8szo7ZRRdOfKqts5mDCj4LotL1SiQfNYhUb+DrxQKfh5Ahzhse0ooMxJCEeUKzzyCjRgaMJFByAt6scmv8wLeWAXCsggz6LJdrhT3cwVZ6Se2Op44BYivO9X5AwS5hDJPLr2NbuO7wBvgAUCwSBrwput9+GmEDRez0Xf8NE4ibL+nz/nKzsn3HmDQ+Nb7QCkcE+v30UYc4RNcc/hI4amrlzzknsO2n3oio9bTictJ56UxpBqwNq7tpeUS+kHqE0sm5hXWkimUF8XOE8/4YOi1R/J/SYv4XL0dFhD1EWwV7tQUAX9dSv6uQJXJbeLHpHXHZq1Ak+fqvBM2/HCQu3aCFHTA1mdqegmics3Tp3DZV7U/TQtdSpesSnuOHxhPBKLeGUiFzn6vas9bDcdt5uUNVv0NQYIkzASyiytHdph1CYmYnVxLNeptcl7vEDGnolonie6y4N8E9fG9bidHoIgG8EbEm+yuH5Y8ZHc7nawnuqbXDMeuLGM4Gk+OuksoyLwk+NhooMXEANcvwXDQ1uf6LMWaCSgHB34IzwyCsKvyuw9XeVBmQcDHHQ5FakkA8GAeMcnIynOlgcghJoi7VC28M4NYB45r4vHlGRzNeGiIFm1QyRH16/u9EN3tnHL6aSlCjQacmhu1Zbc8X6L4XWqiJntc5L3KBPB43zbV/CoPFAFxuMPK0AOW04nLacxEi4PesRVD5/lTJAoMXWFInno3YsaDTwcyzxqF94uQ4607XLWQey6uDGGh2LzMOTBLU9F09ijFs3/kJ1YVaCGMhLrHHkxz5/hxLfLgCLM5sBGz7s1DKzUyrVNHFZxbtSC1/ACMJ1+bCvcv9092sn9Jo/7eu1Jga3yNiRDD63AQkA4UBvY2nkbxgQ6BmCMZMv7ZNJtqPC8z84ilGBVYkfhHA+kjUDjY+xUzDoGcCu/KQ4ZxerG2QYNp5OGk1IMLHrxoJFNZcPsGtsdagpUcpoSxq2eB+bAxXkVykLZo93PT9jtGCbj5WFEWUcsJevoo4HVbYjPOFQXPbR5Np7aPdQCRPKl3fncpCAETYqh5ULEHMfposc1hvS8ksibtTIny01OvX67EW0cxfSi52slIY4h4CK0VKoFyiuyTyrt/rHwym2/7cBrxpkXbYXHhDH3S/BKcXFD/jqORiVkFLZ7K1QcV6CLXrFqtcx41/B2/FJL40peVsIXmA7qjEwQeYcRbuvTvgK7Pr0c0ozlQY+86tHvY42RSMGtK9QUyk5kqryc7vnERECytIAtqqdUIJdA4jgaFzV4ERyJrJr2wti5gYu2L3AFtj0K3UVLu1q2Gwf6JWYarsuikmeNbCvreInjqHVx4omr4/G4BCxYoi60SaVejhuc0k5ia2w5TKujPz/vHyOAEpDjIuEqpF/ZfQUtmNszCrk9QAVn63f2lBrhouAbrsGirpnnfXXvc1OlzCEVVn/63seN6NxowRYV4McQOlzdC3cv+yM9koNBIuSZZ398IoCOhIg8ZmBGVDex179AsVJ9ga6Zp1BO+tVGzwe1kPGSSZ4Pyh1d/X0aqxw6zqLu8mukcuxn12Boyv6skPqXLI7X3WVGrMZGJTRCd+Hy5DrzwQKEewYsV27BNF34MFwo4KeVj+bY0OkBH3pBUCLLgIHD812v/kFhie4lGnD3iCWWcmmQjSa/6HvZ4wynmOoqyD3eoWTN63giY9ojja0GbPxvjPO3w21WFIFQV/iUDMImtgctD+K8ilM/2iLjyogvk9szg2mtmE7EsVwaZkMzLSr2aVipmHXVZFdsH1T5SDaNideipXeNDSg7dTcqI0crsKjrhewaGY7OAAGARKUeiTepzZdClALaMJFFQsDSIT4BitaVfgbCYjVm4ApPwZFpgeANLIcgf9kqjlP4omZ8DbiV3YPblV5aRI6DbLxojs8G87FQz4fxAoaO2dyy8BrhxfKghqxquHDO/8beelm2HnjOojsaWEFJgU8AAvxBFVxqNFmhExeFwjhB8vnnCrVhNmkPztG3TD9khXfwALwVbaU9dv1WS6ifPx+MHUpb4GH2uDB+hzxlUZO1ktrHle5lFGOwBIu+YgSVnCoacffHJTjBGQ50o3wwWq5FAwslHMdre9kqjgnNoiVqPa+Pa6ZrJKdxjcDqsbiSeC2rkhB43/FWyWUXodRoyEUtYjSQUjS8AkopxJz+bCMYUGlv36g2xnULZgxqF0XZaMhFrRy0IFM0vBB6hmu86D6hrZCSdpo2itUWdQ7qnBUgaqP8YN6b9UU5+9fu2PW1Oz47vqaBD4q3550LH/hZP749fPR8pws/r623z+trdA5vdXFrz8fPY7/nY/3tjT62M2TT+sE6O/NyMXd/dOabf5kfto5sezdNWZ+rPtKICmI5HhTEBDHm0cPXxBU0AENPFlXE9kaMb++hB+GzqbH9wutErYm5+849++bVmx//8tuLH999eLa8fvfbh67W6dcK37JTbZJ4/H3Zf/9P/3j7+v1vr579+3Xv5IftRSTrdODG/XVF63z653MT4ttnwn5GWHVfEbBhUyUX/vH+p93D5V/cfWnu30wy7xqyBR/4h1wzSu/pE6yy6+AysxS7N0qx500CyJK9SaxmBrtN93RA5qSyG7J/PjeogGHa/aCpnYLYPuytluEiK/bwfJjUFq76pEAP5nJZuDyi0fuJ/T/j14LwjScsFBziPmcffI5n3oPw469foiXYAVp98ctHb3wggg3e+vARlLHodh9BmYpsvbWGdEedN+B7AX3+B7ZrXI8KZW5kc3RyZWFtCmVuZG9iagoxMiAwIG9iago0Mzg0CmVuZG9iagoxMCAwIG9iagpbIF0KZW5kb2JqCjE4IDAgb2JqCjw8IC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9Gb3JtIC9CQm94IFsgLTEwMTYgLTM1MSAxNjYwIDEwNjggXQovTGVuZ3RoIDE2NiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJw1kMENAyAMA/9M4QWQEpIQmKdS1Ue7/7cOpa8zDrIDbSvCE582NY56t9gLHkeNfZVPgw4tFRs74VOwhJhIwaN5DtDyZQgGiRYeLWSes46DIWAc7ZElwmgvwgtlK/qsYtnoyjg2dTXGBhm3p+uvvysX9XXIifyUcYWesOTGRt/mAAsKtCydttZ9y/u4YXGV+oRUfxyo+x3kX9z/erdXe34BzHU7lAplbmRzdHJlYW0KZW5kb2JqCjE2IDAgb2JqCjw8IC9UeXBlIC9Gb250IC9CYXNlRm9udCAvR0NXWERWK0RlamFWdVNhbnMtT2JsaXF1ZSAvRmlyc3RDaGFyIDAKL0xhc3RDaGFyIDI1NSAvRm9udERlc2NyaXB0b3IgMTUgMCBSIC9TdWJ0eXBlIC9UeXBlMwovTmFtZSAvR0NXWERWK0RlamFWdVNhbnMtT2JsaXF1ZSAvRm9udEJCb3ggWyAtMTAxNiAtMzUxIDE2NjAgMTA2OCBdCi9Gb250TWF0cml4IFsgMC4wMDEgMCAwIDAuMDAxIDAgMCBdIC9DaGFyUHJvY3MgMTcgMCBSCi9FbmNvZGluZyA8PCAvVHlwZSAvRW5jb2RpbmcgL0RpZmZlcmVuY2VzIFsgXSA+PiAvV2lkdGhzIDE0IDAgUiA+PgplbmRvYmoKMTUgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvR0NXWERWK0RlamFWdVNhbnMtT2JsaXF1ZSAvRmxhZ3MgOTYKL0ZvbnRCQm94IFsgLTEwMTYgLTM1MSAxNjYwIDEwNjggXSAvQXNjZW50IDkyOSAvRGVzY2VudCAtMjM2IC9DYXBIZWlnaHQgMAovWEhlaWdodCAwIC9JdGFsaWNBbmdsZSAwIC9TdGVtViAwIC9NYXhXaWR0aCAxMzUwID4+CmVuZG9iagoxNCAwIG9iagpbIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwCjYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUwMCA1MDAgNjEzIDYzNSA1NTAgNjM1IDYxNSAzNTIgNjM1IDYzNCAyNzggMjc4IDU3OSAyNzggOTc0IDYzNCA2MTIKNjM1IDYzNSA0MTEgNTIxIDM5MiA2MzQgNTkyIDgxOCA1OTIgNTkyIDUyNSA2MzYgMzM3IDYzNiA4MzggNjAwIDYzNiA2MDAgMzE4CjM1MiA1MTggMTAwMCA1MDAgNTAwIDUwMCAxMzUwIDYzNSA0MDAgMTA3MCA2MDAgNjg1IDYwMCA2MDAgMzE4IDMxOCA1MTggNTE4CjU5MCA1MDAgMTAwMCA1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IDAgMC4wMDEgMCAwIF0KL0NoYXJQcm9jcyAyMiAwIFIKL0VuY29kaW5nIDw8IC9UeXBlIC9FbmNvZGluZwovRGlmZmVyZW5jZXMgWyA0NiAvcGVyaW9kIC9zbGFzaCAvemVybyAvb25lIC90d28gL3RocmVlIDUzIC9maXZlIDk3IC9hIDEwMyAvZyAxMTQgL3IgXQo+PgovV2lkdGhzIDE5IDAgUiA+PgplbmRvYmoKMjAgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvQk1RUURWK0RlamFWdVNhbnMgL0ZsYWdzIDMyCi9Gb250QkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0FzY2VudCA5MjkgL0Rlc2NlbnQgLTIzNiAvQ2FwSGVpZ2h0IDAKL1hIZWlnaHQgMCAvSXRhbGljQW5nbGUgMCAvU3RlbVYgMCAvTWF4V2lkdGggMTM0MiA+PgplbmRvYmoKMTkgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM0MiA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDIzIDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxMiA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjEyIDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDUKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk4MiA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4IDYxMiA2MzQgNjM0IDYzNCA2MzQgNTkyIDYzNSA1OTIgXQplbmRvYmoKMjIgMCBvYmoKPDwgL2EgMjMgMCBSIC9maXZlIDI0IDAgUiAvZyAyNSAwIFIgL29uZSAyNyAwIFIgL3BlcmlvZCAyOCAwIFIgL3IgMjkgMCBSCi9zbGFzaCAzMCAwIFIgL3RocmVlIDMxIDAgUiAvdHdvIDMyIDAgUiAvemVybyAzMyAwIFIgPj4KZW5kb2JqCjMgMCBvYmoKPDwgL0YyIDE2IDAgUiAvRjEgMjEgMCBSID4+CmVuZG9iago0IDAgb2JqCjw8IC9BMSA8PCAvVHlwZSAvRXh0R1N0YXRlIC9DQSAwIC9jYSAxID4+Ci9BMiA8PCAvVHlwZSAvRXh0R1N0YXRlIC9DQSAwLjUgL2NhIDAuNSA+PgovQTMgPDwgL1R5cGUgL0V4dEdTdGF0ZSAvQ0EgMSAvY2EgMSA+PiA+PgplbmRvYmoKNSAwIG9iago8PCA+PgplbmRvYmoKNiAwIG9iago8PCA+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YmoKMzQgMCBvYmoKNjU3CmVuZG9iagoyIDAgb2JqCjw8IC9UeXBlIC9QYWdlcyAvS2lkcyBbIDExIDAgUiBdIC9Db3VudCAxID4+CmVuZG9iagozNSAwIG9iago8PCAvQ3JlYXRvciAoTWF0cGxvdGxpYiB2My44LjQsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcpCi9Qcm9kdWNlciAoTWF0cGxvdGxpYiBwZGYgYmFja2VuZCB2My44LjQpCi9DcmVhdGlvbkRhdGUgKEQ6MjAyNDA1MTQxMjIxMDcrMDInMDAnKSA+PgplbmRvYmoKeHJlZgowIDM2CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNiAwMDAwMCBuIAowMDAwMDEzNTIzIDAwMDAwIG4gCjAwMDAwMTE0ODIgMDAwMDAgbiAKMDAwMDAxMTUyNSAwMDAwMCBuIAowMDAwMDExNjY3IDAwMDAwIG4gCjAwMDAwMTE2ODggMDAwMDAgbiAKMDAwMDAxMTcwOSAwMDAwMCBuIAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDAzMzcgMDAwMDAgbiAKMDAwMDAwNDgxNyAwMDAwMCBuIAowMDAwMDAwMjA4IDAwMDAwIG4gCjAwMDAwMDQ3OTYgMDAwMDAgbiAKMDAwMDAxMTgwMiAwMDAwMCBuIAowMDAwMDA1Njc1IDAwMDAwIG4gCjAwMDAwMDU0NjAgMDAwMDAgbiAKMDAwMDAwNTEzNyAwMDAwMCBuIAowMDAwMDA2NzI4IDAwMDAwIG4gCjAwMDAwMDQ4MzcgMDAwMDAgbiAKMDAwMDAxMDI4NCAwMDAwMCBuIAowMDAwMDEwMDc3IDAwMDAwIG4gCjAwMDAwMDk3MDAgMDAwMDAgbiAKMDAwMDAxMTMzNyAwMDAwMCBuIAowMDAwMDA2NzUwIDAwMDAwIG4gCjAwMDAwMDcxMzAgMDAwMDAgbiAKMDAwMDAwNzQ1MiAwMDAwMCBuIAowMDAwMDA3ODY2IDAwMDAwIG4gCjAwMDAwMDgwMzggMDAwMDAgbiAKMDAwMDAwODE5MyAwMDAwMCBuIAowMDAwMDA4MzE2IDAwMDAwIG4gCjAwMDAwMDg1NDkgMDAwMDAgbiAKMDAwMDAwODY3NSAwMDAwMCBuIAowMDAwMDA5MDg4IDAwMDAwIG4gCjAwMDAwMDk0MTIgMDAwMDAgbiAKMDAwMDAxMzUwMyAwMDAwMCBuIAowMDAwMDEzNTgzIDAwMDAwIG4gCnRyYWlsZXIKPDwgL1NpemUgMzYgL1Jvb3QgMSAwIFIgL0luZm8gMzUgMCBSID4+CnN0YXJ0eHJlZgoxMzc0MAolJUVPRgo=", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-14T12:21:07.576882\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.8.4, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/pdf": "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MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUwMCA1MDAgNjEzIDYzNSA1NTAgNjM1IDYxNSAzNTIgNjM1IDYzNCAyNzggMjc4IDU3OSAyNzggOTc0IDYzNCA2MTIKNjM1IDYzNSA0MTEgNTIxIDM5MiA2MzQgNTkyIDgxOCA1OTIgNTkyIDUyNSA2MzYgMzM3IDYzNiA4MzggNjAwIDYzNiA2MDAgMzE4CjM1MiA1MTggMTAwMCA1MDAgNTAwIDUwMCAxMzUwIDYzNSA0MDAgMTA3MCA2MDAgNjg1IDYwMCA2MDAgMzE4IDMxOCA1MTggNTE4CjU5MCA1MDAgMTAwMCA1MDAgMTAwMCA1MjEgNDAwIDEwMjggNjAwIDUyNSA2MTEgMzE4IDQwMSA2MzYgNjM2IDYzNiA2MzYgMzM3CjUwMCA1MDAgMTAwMCA0NzEgNjE3IDgzOCAzNjEgMTAwMCA1MDAgNTAwIDgzOCA0MDEgNDAxIDUwMCA2MzYgNjM2IDMxOCA1MDAKNDAxIDQ3MSA2MTcgOTY5IDk2OSA5NjkgNTMxIDY4NCA2ODQgNjg0IDY4NCA2ODQgNjg0IDk3NCA2OTggNjMyIDYzMiA2MzIgNjMyCjI5NSAyOTUgMjk1IDI5NSA3NzUgNzQ4IDc4NyA3ODcgNzg3IDc4NyA3ODcgODM4IDc4NyA3MzIgNzMyIDczMiA3MzIgNjExIDYwOAo2MzAgNjEzIDYxMyA2MTMgNjEzIDYxMyA2MTMgOTk1IDU1MCA2MTUgNjE1IDYxNSA2MTUgMjc4IDI3OCAyNzggMjc4IDYxMiA2MzQKNjEyIDYxMiA2MTIg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PgplbmRvYmoKMTkgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM0MiA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDIzIDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxMiA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjEyIDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMy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MTIyMTMgMDAwMDAgbiAKMDAwMDAxMjIzNCAwMDAwMCBuIAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDAzMzcgMDAwMDAgbiAKMDAwMDAwNTM0MiAwMDAwMCBuIAowMDAwMDAwMjA4IDAwMDAwIG4gCjAwMDAwMDUzMjEgMDAwMDAgbiAKMDAwMDAxMjMyNyAwMDAwMCBuIAowMDAwMDA2MjAwIDAwMDAwIG4gCjAwMDAwMDU5ODUgMDAwMDAgbiAKMDAwMDAwNTY2MiAwMDAwMCBuIAowMDAwMDA3MjUzIDAwMDAwIG4gCjAwMDAwMDUzNjIgMDAwMDAgbiAKMDAwMDAxMDgwOSAwMDAwMCBuIAowMDAwMDEwNjAyIDAwMDAwIG4gCjAwMDAwMTAyMjUgMDAwMDAgbiAKMDAwMDAxMTg2MiAwMDAwMCBuIAowMDAwMDA3Mjc1IDAwMDAwIG4gCjAwMDAwMDc2NTUgMDAwMDAgbiAKMDAwMDAwNzk3NyAwMDAwMCBuIAowMDAwMDA4MzkxIDAwMDAwIG4gCjAwMDAwMDg1NjMgMDAwMDAgbiAKMDAwMDAwODcxOCAwMDAwMCBuIAowMDAwMDA4ODQxIDAwMDAwIG4gCjAwMDAwMDkwNzQgMDAwMDAgbiAKMDAwMDAwOTIwMCAwMDAwMCBuIAowMDAwMDA5NjEzIDAwMDAwIG4gCjAwMDAwMDk5MzcgMDAwMDAgbiAKMDAwMDAxNDAyOCAwMDAwMCBuIAowMDAwMDE0MTA4IDAwMDAwIG4gCnRyYWlsZXIKPDwgL1NpemUgMzYgL1Jvb3QgMSAwIFIgL0luZm8gMzUgMCBSID4+CnN0YXJ0eHJlZgoxNDI2NQolJUVPRgo=", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-14T12:21:07.815353\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.8.4, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ @@ -251,7 +3938,7 @@ " # Reduce to qubit subspace\n", " U = pulse.total_propagator[np.ix_(*qubit_subspace_inds)]\n", " # Plot the propagator\n", - " matrix_histogram_complex(U)\n", + " matrix_histogram(U, bar_style='abs', color_style='phase')\n", " # Check for equality with the target unitary up to global phase\n", " print(key, util.oper_equiv(U_t[key], U, eps=1e-9)[0], sep='\\t')" ] @@ -282,7 +3969,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -316,8 +4003,8 @@ "The decay amplitudes $\\Gamma$ can be calculated from the generalized filter function and are thus amenable to the concatenation property of the control matrices. As the second order of the Magnus expansion involves a double time integral, such a simplification is not possible in the case of the frequency shifts $\\Delta$. However, we can define a filter function for them just the same:\n", "\n", "\\begin{align}\n", - " \\Gamma_{\\alpha\\beta,kl} &= \\int\\frac{\\mathrm{d}\\omega}{2\\pi}S_{\\alpha\\beta}(\\omega) F_{\\alpha\\beta,kl}^{(\\Gamma)}(\\omega) \\\\\n", - " \\Delta_{\\alpha\\beta,kl} &= \\int\\frac{\\mathrm{d}\\omega}{2\\pi}S_{\\alpha\\beta}(\\omega) F_{\\alpha\\beta,kl}^{(\\Delta)}(\\omega)\n", + "\\Gamma_{\\alpha\\beta,kl} &= \\int\\frac{\\mathrm{d}\\omega}{2\\pi}S_{\\alpha\\beta}(\\omega) F_{\\alpha\\beta,kl}^{(\\Gamma)}(\\omega) \\\\\n", + "\\Delta_{\\alpha\\beta,kl} &= \\int\\frac{\\mathrm{d}\\omega}{2\\pi}S_{\\alpha\\beta}(\\omega) F_{\\alpha\\beta,kl}^{(\\Delta)}(\\omega)\n", "\\end{align}\n", "\n", "### Performance considerations\n", @@ -331,992 +4018,15 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "metadata": { "tags": [] }, "outputs": [ - { - "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"svg\";/* 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/vnd.jupyter.widget-view+json": { - "model_id": "b31f3beb418d41c8ae04c7d19a1940f9", + "model_id": "29e87a17a14342bcbf0ad4be5d572f60", "version_major": 2, "version_minor": 0 }, @@ -1330,7 +4040,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "74e862d6d7b048b0a1d4abb4880d6964", + "model_id": "16f1a5b6c35f4dd18a21f8aded36b89f", "version_major": 2, "version_minor": 0 }, @@ -1344,7 +4054,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f5ffae168348477881030361f04ce1f9", + "model_id": "3a083e5d58154533820a77850de9e48a", "version_major": 2, "version_minor": 0 }, @@ -1358,7 +4068,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "883a035272984632a334a733edca7595", + "model_id": "ae0b44bc13cf465c8379e8e42b8b0c91", "version_major": 2, "version_minor": 0 }, @@ -1372,7 +4082,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3e6f69ea93c843caa8d63a65b132cbea", + "model_id": "7bdbab56fb684aeb9adbe7d3d0caf2ea", "version_major": 2, "version_minor": 0 }, @@ -1386,7 +4096,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "16c73b5fbfeb4b52a8e39be8c320d7f6", + "model_id": "563ab0c0b552467d8b99c2aa03ea7480", "version_major": 2, "version_minor": 0 }, @@ -1396,6 +4106,7429 @@ }, "metadata": {}, "output_type": "display_data" + }, + { + "data": { + "application/pdf": "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YWxpY0FuZ2xlIDAgL1N0ZW1WIDAgL01heFdpZHRoIDEzNTAgPj4KZW5kb2JqCjIzIDAgb2JqClsgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAKNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCAzMTggNDAxIDQ2MCA4MzggNjM2Cjk1MCA3ODAgMjc1IDM5MCAzOTAgNTAwIDgzOCAzMTggMzYxIDMxOCAzMzcgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNgo2MzYgNjM2IDMzNyAzMzcgODM4IDgzOCA4MzggNTMxIDEwMDAgNjg0IDY4NiA2OTggNzcwIDYzMiA1NzUgNzc1IDc1MiAyOTUKMjk1IDY1NiA1NTcgODYzIDc0OCA3ODcgNjAzIDc4NyA2OTUgNjM1IDYxMSA3MzIgNjg0IDk4OSA2ODUgNjExIDY4NSAzOTAgMzM3CjM5MCA4MzggNTAwIDUwMCA2MTMgNjM1IDU1MCA2MzUgNjE1IDM1MiA2MzUgNjM0IDI3OCAyNzggNTc5IDI3OCA5NzQgNjM0IDYxMgo2MzUgNjM1IDQxMSA1MjEgMzkyIDYzNCA1OTIgODE4IDU5MiA1OTIgNTI1IDYzNiAzMzcgNjM2IDgzOCA2MDAgNjM2IDYwMCAzMTgKMzUyIDUxOCAxMDAwIDUwMCA1MDAgNTAwIDEzNTAgNjM1IDQwMCAxMDcwIDYwMCA2ODUgNjAwIDYwMCAzMTggMzE4IDUxOCA1MTgKNTkwIDUwMCAxMDAwIDUwMCAxMDAwIDUyMSA0MDAgMTAyOCA2MDAgNTI1IDYxMSAzMTggNDAxIDYzNiA2MzYgNjM2IDYzNiAzMzcKNTAwIDUwMCAxMDAwIDQ3MSA2MTcgODM4IDM2MSAxMDAwIDUwMCA1MDAgODM4IDQwMSA0MDEgNTAwIDYzNiA2MzYgMzE4IDUwMAo0MDEgNDcxIDYxNyA5NjkgOTY5IDk2OSA1MzEgNjg0IDY4NCA2ODQgNjg0IDY4NCA2ODQgOTc0IDY5OCA2MzIgNjMyIDYzMiA2MzIKMjk1IDI5NSAyOTUgMjk1IDc3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IDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM0MiA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDIzIDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxMiA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjEyIDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDUKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk4MiA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4IDYxMiA2MzQgNjM0IDYzNCA2MzQgNTkyIDYzNSA1OTIgXQplbmRvYmoKMzEgMCBvYmoKPDwgL0MgMzIgMCBSIC9EIDMzIDAgUiAvSSAzNCAwIFIgL0ogMzUgMCBSIC9OIDM2IDAgUiAvTyAzNyAwIFIgL1QgMzggMCBSCi9YIDM5IDAgUiAvWSA0MCAwIFIgL1ogNDEgMCBSIC9laWdodCA0MiAwIFIgL2ZpdmUgNDMgMCBSIC9mb3VyIDQ0IDAgUgovbmluZSA0NiAwIFIgL29uZSA0NyAwIFIgL3NldmVuIDQ4IDAgUiAvc2l4IDQ5IDAgUiAvdGhyZWUgNTAgMCBSCi90d28gNTEgMCBSIC91bmRlcnNjb3JlIDUyIDAgUiAvemVybyA1MyAwIFIgPj4KZW5kb2JqCjMgMCBvYmoKPDwgL0YyIDI1IDAgUiAvRjEgMzAgMCBSID4+CmVuZG9iago0IDAgb2JqCjw8IC9BMSA8PCAvVHlwZSAvRXh0R1N0YXRlIC9DQSAwIC9jYSAxID4+Ci9BMiA8PCAvVHlwZSAvRXh0R1N0YXRlIC9DQSAxIC9jYSAxID4+ID4+CmVuZG9iago1IDAgb2JqCjw8ID4+CmVuZG9iago2IDAgb2JqCjw8ID4+CmVuZG9iago3IDAgb2JqCjw8IC9JMSAxMyAwIFIgL0kyIDE0IDAgUiAvSTMgMTUgMCBSIC9JNCAxNiAwIFIgL0k1IDE3IDAgUiAvSTYgMTggMCBSCi9JNyAxOSAwIFIgL0k4IDIwIDAgUiAvSTkgMjEgMCBSIC9JMTAgMjIgMCBSIC9GMS1EZWphVnVTYW5zLW1pbnVzIDQ1IDAgUiA+PgplbmRvYmoKMTMgMCBvYmoKPDwgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0ltYWdlIC9XaWR0aCAzMjcgL0hlaWdodCAzMjcKL0NvbG9yU3BhY2UgWyAvSW5kZXhlZCAvRGV2aWNlUkdCIDEyNAoo/N3K+uXZ97ue9PX286OA75t66o1w6Itu5YNo4n1j4Xth221X2GVR1F1L0VdJzlFGzU9EyklCyeHtx0M/vC00sBcqrtPmqhVcKafP5KLN4p/L4Z4RJ7/c65PF3ooLJIQJI4dcbiR+ByJDk8NBkcJAj8E/jcA9i781gbk0f7kzfbgsdbMrc7JcKG+wJ22w9KiG/N7M++DQ+ujd+ezl+PDs9/b29vb29a6O9KaD8qB+8Z587ph47ZZ26PD054hs5IBl4Hhf3+zy3nJb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MDg5OTIgMDAwMDAgbiAKMDAwMDAxODU5NCAwMDAwMCBuIAowMDAwMDIwODgyIDAwMDAwIG4gCjAwMDAwMjMxNTggMDAwMDAgbiAKMDAwMDAyNDg1MCAwMDAwMCBuIAowMDAwMDI3MTgzIDAwMDAwIG4gCjAwMDAwMjk0NjcgMDAwMDAgbiAKMDAwMDAzMTE2MCAwMDAwMCBuIAowMDAwMDM0NTU1IDAwMDAwIG4gCjAwMDAwMzc4MDggMDAwMDAgbiAKMDAwMDA0MTIxNSAwMDAwMCBuIAowMDAwMDA5OTQ2IDAwMDAwIG4gCjAwMDAwMDk3MzEgMDAwMDAgbiAKMDAwMDAwOTQwMiAwMDAwMCBuIAowMDAwMDEwOTk5IDAwMDAwIG4gCjAwMDAwMDkwMzMgMDAwMDAgbiAKMDAwMDAxNjkyNiAwMDAwMCBuIAowMDAwMDE2NzE5IDAwMDAwIG4gCjAwMDAwMTYyODkgMDAwMDAgbiAKMDAwMDAxNzk3OSAwMDAwMCBuIAowMDAwMDExMDMxIDAwMDAwIG4gCjAwMDAwMTEzMzkgMDAwMDAgbiAKMDAwMDAxMTU3NiAwMDAwMCBuIAowMDAwMDExNjk5IDAwMDAwIG4gCjAwMDAwMTE4ODcgMDAwMDAgbiAKMDAwMDAxMjAzNiAwMDAwMCBuIAowMDAwMDEyMzI0IDAwMDAwIG4gCjAwMDAwMTI0NjIgMDAwMDAgbiAKMDAwMDAxMjYyNCAwMDAwMCBuIAowMDAwMDEyNzc1IDAwMDAwIG4gCjAwMDAwMTI5MjUgMDAwMDAgbiAKMDAwMDAxMzM5MyAwMDAwMCBuIAowMDAwMDEzNzE1IDAwMDAwIG4gCjAwMDAwMTM4ODEgMDAwMDAgbiAKMDAwMDAxNDA1MyAwMDAwMCBuIAowMDAwMDE0NDQ4IDAwMDAwIG4gCjAwMDAwMTQ2MDMgMDAwMDAgbiAKMDAwMDAxNDc0NSAwMDAwMCBuIAowMDAwMDE1MTM4IDAwMDAwIG4gCjAwMDAwMTU1NTEgMDAwMDAgbiAKMDAwMDAxNTg3NSAwMDAwMCBuIAowMDAwMDE2MDAxIDAwMDAwIG4gCjAwMDAwMjA4NjEgMDAwMDAgbiAKMDAwMDAyMzEzNyAwMDAwMCBuIAowMDAwMDI0ODMwIDAwMDAwIG4gCjAwMDAwMjcxNjIgMDAwMDAgbiAKMDAwMDAyOTQ0NiAwMDAwMCBuIAowMDAwMDMxMTQwIDAwMDAwIG4gCjAwMDAwMzQ1MzQgMDAwMDAgbiAKMDAwMDAzNzc4NyAwMDAwMCBuIAowMDAwMDQxMTk0IDAwMDAwIG4gCjAwMDAwNDI3MDggMDAwMDAgbiAKMDAwMDA0Mjc4OCAwMDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDY1IC9Sb290IDEgMCBSIC9JbmZvIDY0IDAgUiA+PgpzdGFydHhyZWYKNDI5NDUKJSVFT0YK", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-14T12:24:22.278041\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.8.4, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" + ], + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ @@ -1421,7 +11554,7 @@ " show_progressbar=True, second_order=True\n", " )\n", "\n", - " # We can call plot_transfer matrix with the same arguments as\n", + " # We can call plot_cumulant_function with the same arguments as\n", " # error_transfer_matrix in which case the transfer matrix is calculated on\n", " # the fly, or pass a pre-computed transfer matrix to the function\n", " fig, grid = plotting.plot_cumulant_function(\n", @@ -1459,7 +11592,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 11, "metadata": { "tags": [] }, @@ -1493,10 +11626,10 @@ "ket_01[2] = 1\n", "ket_10[3] = 1\n", "ket_11[4] = 1\n", - "rhoket_00 = ff.basis.expand(np.outer(ket_00, ket_00), basis).real\n", - "rhoket_01 = ff.basis.expand(np.outer(ket_01, ket_01), basis).real\n", - "rhoket_10 = ff.basis.expand(np.outer(ket_10, ket_10), basis).real\n", - "rhoket_11 = ff.basis.expand(np.outer(ket_11, ket_11), basis).real\n", + "rhoket_00 = ff.basis.expand(np.outer(ket_00, ket_00), basis, hermitian=True)\n", + "rhoket_01 = ff.basis.expand(np.outer(ket_01, ket_01), basis, hermitian=True)\n", + "rhoket_10 = ff.basis.expand(np.outer(ket_10, ket_10), basis, hermitian=True)\n", + "rhoket_11 = ff.basis.expand(np.outer(ket_11, ket_11), basis, hermitian=True)\n", "rhokets = (rhoket_00, rhoket_01, rhoket_10, rhoket_11)\n", "labels = ('00', '01', '10', '11')\n", "\n", @@ -1530,7 +11663,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 12, "metadata": { "tags": [] }, @@ -1578,7 +11711,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -1589,14 +11722,14 @@ "X2ID\n", "----\n", "Error transfer matrix CP: True\n", - "Smallest Choi eigenvalue: -3.45e-16\n", + "Smallest Choi eigenvalue: -4.93e-16\n", "Approximate error transfer matrix CP: True\n", "Smallest Choi eigenvalue: -4.44e-16\n", "----\n", "Y2ID\n", "----\n", "Error transfer matrix CP: True\n", - "Smallest Choi eigenvalue: -5.24e-16\n", + "Smallest Choi eigenvalue: -4.56e-16\n", "Approximate error transfer matrix CP: True\n", "Smallest Choi eigenvalue: -1.20e-15\n", "----\n", @@ -1638,7 +11771,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 14, "metadata": { "tags": [] }, @@ -1652,990 +11785,1355 @@ }, { "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"svg\";/* 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": [ - "" + "Text(0.5, 0.98, 'CNOT convergence')" ] }, + "execution_count": 14, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" }, { "data": { - "text/html": [ - "" + "application/pdf": "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IDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwCjYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUwMCA1MDAgNjEzIDYzNSA1NTAgNjM1IDYxNSAzNTIgNjM1IDYzNCAyNzggMjc4IDU3OSAyNzggOTc0IDYzNCA2MTIKNjM1IDYzNSA0MTEgNTIxIDM5MiA2MzQgNTkyIDgxOCA1OTIgNTkyIDUyNSA2MzYgMzM3IDYzNiA4MzggNjAwIDYzNiA2MDAgMzE4CjM1MiA1MTggMTAwMCA1MDAgNTAwIDUwMCAxMzUwIDYzNSA0MDAgMTA3MCA2MDAgNjg1IDYwMCA2MDAgMzE4IDMxOCA1MTggNTE4CjU5MCA1MDAgMTAwMCA1MDAgMTAwMCA1MjEgNDAwIDEwMjggNjAwIDUyNSA2MTEgMzE4IDQwMSA2MzYgNjM2IDYzNiA2MzYgMzM3CjUwMCA1MDAgMTAwMCA0NzEgNjE3IDgzOCAzNjEgMTAwMCA1MDAgNTAwIDgzOCA0MDEgNDAxIDUwMCA2MzYgNjM2IDMxOCA1MDAKNDAxIDQ3MSA2MTcgOTY5IDk2OSA5NjkgNTMxIDY4NCA2ODQgNjg0IDY4NCA2ODQgNjg0IDk3NCA2OTggNjMyIDYzMiA2MzIgNjMyCjI5NSAyOTUgMjk1IDI5NSA3NzUgNzQ4IDc4NyA3ODcgNzg3IDc4NyA3ODcgODM4IDc4NyA3MzIgNzMyIDczMiA3MzIgNjExIDYwOAo2MzAgNjEzIDYxMyA2MTMgNjEzIDYxMyA2MTMgOTk1IDU1MCA2MTUgNjE1IDYxNSA2MTUgMjc4IDI3OCAyNzggMjc4IDYxMiA2MzQKNjEyIDYxMiA2MTIgNjEyIDYxMiA4MzggNjEyIDYzNCA2MzQgNjM0IDYzNCA1OTIgNjM1IDU5MiBdCmVuZG9iagoxOCAwIG9iago8PCAvbiAxOSAwIFIgPj4KZW5kb2JqCjI1IDAgb2JqCjw8IC9MZW5ndGggMjM1IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nDVRSW4AMQi75xX+QKWwJ++Zquqh/f+1hlEvAwPY2CTvwUYkPsSQ7ihXfMrqNMvwO1nkxc9K4eS9iAqkKsIKaQfPclYzDJ4bmQKXM/FZZj6ZFjsWUE3EcXbkNINBiGlcR8vpMNM86Am5PhhxY6dZrmJI691Svb7X8p8qykfW3Sy3TtnUSt2iZ+xJXHZeT21pXxh1FDcFkQ4fO7wH+SLmLC46kW72mymHlaQhOC2AH4mhVM8OrxEmfmYkeMqeTu+jNLz2QdP1vXtBR24mZCq3UEYqnqw0xoyh+o1oJqnv/4Ge9b2+/gBDTVS5CmVuZHN0cmVhbQplbmRvYmoKMjYgMCBvYmoKPDwgL0xlbmd0aCA3NyAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJw1jcENwDAIA/9MwQg4hVD2qao+0v2/LUR87DMI7HqycKRME/YRfIH+nPTSOFC0yEwZaNqzvtgkuYOXI5QnmtKrYvXnRQ/dH8meGAwKZW5kc3RyZWFtCmVuZG9iagoyNyAwIG9iago8PCAvTGVuZ3RoIDIxNSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJw1UEuuAzEI2+cUvkClQBII55mqepvef/swqIsR1uAf8euYOIaXLPgS+Fa8ZazYMFN8x1ItpHZg60B14VzFM+QKjl6ITey04Fy2uUmkriBDIkoj23JDl1C0KTolf2+aW7optydNmm7TysDUy5CzI4gYSgZLUNO1aMKi7an4nfKMvzqLF37HDit03OHTUxH1PcNnPohLvcb2qNmZRLovyJDTmksJTTTZ0e/IFM48N6SQziBBUlyCa2WQ/emXowMSMDG3LEB2V6KcJWnH0r8zeNLnH2FcVI0KZW5kc3RyZWFtCmVuZG9iagoyOCAwIG9iago8PCAvTGVuZ3RoIDY2IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nDMzNFQwUNA1AhJmhiYK5kaWCimGXEA+iJXLBRPLAbPMTMyALGNTUySWAZA2MjWD0xAZoAFwBkR/BlcaAFJrFMAKZW5kc3RyZWFtCmVuZG9iagoyOSAwIG9iago8PCAvTGVuZ3RoIDU2IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nDM2NlcwUDA0MlfQNTI2VTAyNFAwNzNRSDHkgjFzwSywbA4XXCGECZLPgavM4crgSgMAazoPhwplbmRzdHJlYW0KZW5kb2JqCjMwIDAgb2JqCjw8IC9MZW5ndGggMjMyIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nDVRSW7EMAy7+xX8wADW7rwnxaCH9v/XUsoUCEAltrglYmMjAi8x+DmI3PiSNaMmfmdyV/wsT4VHwq3gSRSBl+FedoLLG8ZlPw4zH7yXVs6kxpMMyEU2PTwRMtglEDowuwZ12Gbaib4h4bMjUs1GltPXEvTSKgTKU7bf6YISbav6c/usC2372hNOdnvqSeUTiOeWrMBl4xWTxVgGPVG5SzF9kOpsoSehvCifg2w+aohElyhn4InBwSjQDuy57WfiVSFoXd2nbWOoRkrH078NTU2SCPlECWe2NO4W/n/Pvb7X+w9OIVQRCmVuZHN0cmVhbQplbmRvYmoKMzEgMCBvYmoKPDwgL0xlbmd0aCAyNDkgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicPVA7jkQhDOs5hS/wJPIjcB5Gqy1m79+uA5opUEx+tjMk0BGBRwwxlK/jJa2groG/i0LxbuLrg8Igq0NSIM56D4h07KY2kRM6HZwzP2E3Y47ARTEGnOl0pj0HJjn7wgqEcxtl7FZIJ4mqIo7qM44pnip7n3gWLO3INlsnkj3kIOFSUonJpZ+Uyj9typQKOmbRBCwSueBkE004y7tJUowZlDLqHqZ2In2sPMijOuhkTc6sI5nZ00/bmfgccLdf2mROlcd0Hsz4nLTOgzkVuvfjiTYHTY3a6Oz3E2kqL1K7HVqdfnUSld0Y5xgSl2d/Gd9k//kH/odaIgplbmRzdHJlYW0KZW5kb2JqCjMyIDAgb2JqCjw8IC9MZW5ndGggMjQ5IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nE1RSYoDMAy75xX6QCFek7ynQ5lD5//Xyg6FOQQJr5KTlphYCw8xhB8sPfiRIXM3/Rt+otm7WXqSydn/mOciU1H4UqguYkJdiBvPoRHwPaFrElmxvfE5LKOZc74HH4W4BDOhAWN9STK5qOaVIRNODHUcDlqkwrhrYsPiWtE8jdxu+0ZmZSaEDY9kQtwYgIgg6wKyGCyUNjYTMlnOA+0NyQ1aYNepG1GLgiuU1gl0olbEqszgs+bWdjdDLfLgqH3x+mhWl2CF0Uv1WHhfhT6YqZl27pJCeuFNOyLMHgqkMjstK7V7xOpugfo/y1Lw/cn3+B2vD838XJwKZW5kc3RyZWFtCmVuZG9iagozMyAwIG9iago8PCAvTGVuZ3RoIDk0IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nEWNwRHAIAgE/1RBCQoK2k8mk4f2/40QMnxg5w7uhAULtnlGHwWVJl4VWAdKY9xQj0C94XItydwFD3Anf9rQVJyW03dpkUlVKdykEnn/DmcmkKh50WOd9wtj+yM8CmVuZHN0cmVhbQplbmRvYmoKMzQgMCBvYmoKPDwgL0xlbmd0aCAzNDEgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicRVJLbkQxCNu/U3CBSOGXkPO0qrqY3n9bm0zVzeAJYGx4y1OmZMqwuSUjJNeUT30iQ6ym/DRyJCKm+EkJBXaVj8drS6yN7JGoFJ/a8eOx9Eam2RVa9e7Rpc2iUc3KyDnIEKGeFbqye9QO2fB6XEi675TNIRzL/1CBLGXdcgolQVvQd+wR3w8droIrgmGway6D7WUy1P/6hxZc7333YscugBas577BDgCopxO0BcgZ2u42KWgAVbqLScKj8npudqJso1Xp+RwAMw4wcsCIJVsdvtHeAJZ9XehFjYr9K0BRWUD8yNV2wd4xyUhwFuYGjr1wPMWZcEs4xgJAir3iGHrwJdjmL1euiJrwCXW6ZC+8wp7a5udCkwh3rQAOXmTDraujqJbt6TyC9mdFckaM1Is4OiGSWtI5guLSoB5a41w3seJtI7G5V9/uH+GcL1z26xdL7ITECmVuZHN0cmVhbQplbmRvYmoKMzUgMCBvYmoKPDwgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0Zvcm0gL0JCb3ggWyAtMTAyMSAtNDYzIDE3OTQgMTIzMyBdIC9MZW5ndGggMzkKL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnic4zI0MFMwNjVVyOUyNzYCs3LALCNzIyALJItgQWQzuNIAFfMKfAplbmRzdHJlYW0KZW5kb2JqCjM2IDAgb2JqCjw8IC9MZW5ndGggMTYzIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nEWQOxIDIQxDe06hI/gjAz7PZjIpNvdvY9hsUsDTWCCDuxOC1NqCieiCh7Yl3QXvrQRnY/zpNm41EuQEdYBWpONolFJ9ucVplXTxaDZzKwutEx1mDnqUoxmgEDoV3u2i5HKm7s75Q3D1X/W/Yt05m4mBycodCM3qU9z5NjuiurrJ/qTH3KzXfivsVWFpWUvLCbedu2ZACdxTOdqrPT8fCjr2CmVuZHN0cmVhbQplbmRvYmoKMzcgMCBvYmoKPDwgL0xlbmd0aCAyMTggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicPVC5jQQxDMtdhRpYwHrtqWcWi0um//RI+fYi0RZFUio1mZIpL3WUJVlT3jp8lsQOeYblbmQ2JSpFL5OwJffQCvF9ieYU993VlrNDNJdoOX4LMyqqGx3TSzaacCoTuqDcwzP6DW10A1aHHrFbINCkYNe2IHLHDxgMwZkTiyIMSk0G/65yj59eixs+w/FDFJGSDuY1/1j98nMNr1OPJ5Fub77iXpypDgMRHJKavCNdWLEuEhFpNUFNz8BaLYC7t17+G7QjugxA9onEcZpSjqG/a3Clzy/lJ1PYCmVuZHN0cmVhbQplbmRvYmoKMzggMCBvYmoKPDwgL0xlbmd0aCA4MyAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJxFjLsNwDAIRHumYAR+JvY+UZTC3r8NECVuuCfdPVwdCZkpbjPDQwaeDCyGXXGB9JYwC1xHUI6d7KNh1b7qBI31plLz7w+Unuys4obrAQJCGmYKZW5kc3RyZWFtCmVuZG9iagozOSAwIG9iago8PCAvTGVuZ3RoIDE1MCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJw9TzkOwzAM2/0KfiCAdVi23pMi6JD+f63ooB0EEaB4yLKjYwUOMYFJxxyJl7Qf/DSNQCyDmiN6QsUwLHA2SYGHQVZJVz5bnEwhtQVeSPjWFDwbTWSCnseIHbiTyegD71JbsXXoAe0QVSRdswxjsa26cD1hBDXFehXm9TBjiZJHn1VL6wEFE/jS+X/ubu92fQFgxTBdCmVuZHN0cmVhbQplbmRvYmoKNDAgMCBvYmoKPDwgL0xlbmd0aCAxNTEgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicNY/LDcMwDEPvmoILBNDPsjxPiqCHdP9rJacFDJgwySfZFoORjENMYOyYY+ElVE+tPiQjt7pJORCpUDcET2hMDDOcpEvglem+ZTy3eDmt1AWdkMjdWW00RBnNPIajp+wVTvovc5OolRllDsisU91OyMqCFZgX1HLfz7itcqETHrYrw6I7xYhymxlp+P3vpDddX9x4MNUKZW5kc3RyZWFtCmVuZG9iago0MSAwIG9iago8PCAvTGVuZ3RoIDQwNiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJw1UkuyIzEI2/cpuMBUmY8xPk+mXr1F5v7bkbB7kaAEJARmzyFD5pQ/6lJ7ygqTv/osW+Km8u/JvRvlSvGxJXOI1ZTPkxFiiYynGOoZtYIZIgixQkc15yQgAkzNKGEThM+zYIC/12J2bT/VhXakl66W63gyQGYprLBLsc5Qw8GhJG2/g3ye3zNUOYZaqxqVYricaMchN5UXFPfZhcE+4+1JZMigYh1KjPYCIFTkDtmDkbOeraY78jn8lM/lpM9Zrdax9YkskEEBHZBxPFGBLqlI1+8cnMmgkTUwk8IfkYKfiU1NbDNYpYFHgkuFzqw8Mdiz0QAHFXE5cThQCXKgGoPb9o6fx6aef1Z0he1xOT6yVVyjVTt2n0bFA5rtxGpfb3bdUpXu33k4W2b0PeK98M3P9zGocKtAoy566753H4dDf0SuuGoL8cDtFc/NeYUTmY0THdHx+gSKQgYV4YfjuzkKlIap8QZ4JfZh5Ka0kfroCuXkzVmjRfq4jeE0AWBXZGmC5ccWBWiUgjT+jsJV/PwHEemvxgplbmRzdHJlYW0KZW5kb2JqCjQyIDAgb2JqCjw8IC9MZW5ndGggNTEgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicMza0UDBQMDQwB5JGhkCWkYlCiiEXSADEzOWCCeaAWQZAGqI4B64mhyuDKw0A4bQNmAplbmRzdHJlYW0KZW5kb2JqCjQzIDAgb2JqCjw8IC9MZW5ndGggMTYwIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nEWQORIDMQgEc72CJ0hcgvesy7XB+v+pB9ZHoukCNBy6Fk3KehRoPumxRqG60GvoLEqSRMEWkh1Qp2OIOyhITEhjkki2HoMjmlizXZiZVCqzUuG0acXCv9la1chEjXCN/InpBlT8T+pclPBNg6+SMfoYVLw7g4xJ+F5F3Fox7f5EMLEZ9glvRSYFhImxqdm+z2CGzPcK1zjH8w1MgjfrCmVuZHN0cmVhbQplbmRvYmoKNDQgMCBvYmoKPDwgL0xlbmd0aCAzMjAgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicNVJLbgUxCNvPKbhApfBPzvOqqou++29rE70VTDBg4ykvWdJLvtQl26XD5Fsf9yWxQt6P7ZrMUsX3FrMUzy2vR88Rty0KBFETPViZLxUi1M/06DqocEqfgVcItxQbvINJAINq+AcepTMgUOdAxrtiMlIDgiTYc2lxCIlyJol/pLye3yetpKH0PVmZy9+TS6XQHU1O6AHFysVJoF1J+aCZmEpEkpfrfbFC9IbAkjw+RzHJgOw2iW2iBSbnHqUlzMQUOrDHArxmmtVV6GDCHocpjFcLs6gebPJbE5WkHa3jGdkw3sswU2Kh4bAF1OZiZYLu5eM1r8KI7VGTXcNw7pbNdwjRaP4bFsrgYxWSgEensRINaTjAiMCeXjjFXvMTOQ7AiGOdmiwMY2gmp3qOicDQnrOlYcbHHlr18w9U6XyHCmVuZHN0cmVhbQplbmRvYmoKNDUgMCBvYmoKPDwgL0xlbmd0aCA1NCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJwzNjZXMABCXUsjBWMg29zIUiHFkMvI1ATMzOWCCeZwWRiDVeVwGUBpmKIcrgyuNAD7hA4fCmVuZHN0cmVhbQplbmRvYmoKNDYgMCBvYmoKPDwgL0xlbmd0aCAxOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJwzNrRQMIDDFEOuNAAd5gNSCmVuZHN0cmVhbQplbmRvYmoKNDcgMCBvYmoKPDwgL0xlbmd0aCAzNDAgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicNVI5bgQxDOv9Cn0ggG7b79kgSJH8vw2p2RQDcXRSlDtaVHbLh4VUtex0+bSV2hI35HdlhcQJyasS7VKGSKi8ViHV75kyr7c1ZwTIUqXC5KTkccmCP8OlpwvH+baxr+XIHY8eWBUjoUTAMsXE6BqWzu6wZlt+lmnAj3iEnCvWLcdYBVIb3TjtiveheS2yBoi9mZaKCh1WiRZ+QfGgR4199hhUWCDR7RxJcIyJUJGAdoHaSAw5eyx2UR/0MygxE+jaG0XcQYElkpg5xbp09N/40LGg/tiMN786KulbWllj0j4b7ZTGLDLpelj0dPPWx4MLNO+i/OfVDBI0ZY2Sxget2jmGoplRVni3Q5MNzTHHIfMOnsMZCUr6PBS/jyUTHZTI3w4NoX9fHqOMnDbeAuaiP20VBw7is8NeuYEVShdrkvcBqUzogen/r/G1vtfXHx3tgMYKZW5kc3RyZWFtCmVuZG9iago0OCAwIG9iago8PCAvTGVuZ3RoIDI1MSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJwtUUlyA0EIu88r9IRmp99jlyuH5P/XCMoHBg2LQHRa4qCMnyAsV7zlkatow98zMYLfBYd+K9dtWORAVCBJY1A1oXbxevQe2HGYCcyT1rAMZqwP/Iwp3OjF4TEZZ7fXZdQQ7F2vPZlByaxcxCUTF0zVYSNnDj+ZMi60cz03IOdGWJdhkG5WGjMSjjSFSCGFqpukzgRBEoyuRo02chT7pS+PdIZVjagx7HMtbV/PTThr0OxYrPLklB5dcS4nFy+sHPT1NgMXUWms8kBIwP1uD/VzspPfeEvnzhbT43vNyfLCVGDFm9duQDbV4t+8iOP7jK/n5/n8A19gW4gKZW5kc3RyZWFtCmVuZG9iago0OSAwIG9iago8PCAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvRm9ybSAvQkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0xlbmd0aCA2NAovRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJzjMjYxUjAzNlLI5TIEsiyMFHK4TGEMmFwOVwaXhYIBUI2RhZmCuZElSM7SAsoyMzcDyuWAVYBUpgEApWoQVgplbmRzdHJlYW0KZW5kb2JqCjUwIDAgb2JqCjw8IC9MZW5ndGggNzUgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicM7U0UjBQMDYAEqZmRgqmJuYKKYZcQD6IlctlaGQKZuVwGVmaKVhYABkmZuZQIZiGHC5jU3OgAUBFxqZgGqo/hyuDKw0AlZAS7wplbmRzdHJlYW0KZW5kb2JqCjUxIDAgb2JqCjw8IC9MZW5ndGggMjE1IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nDVROQ4DIQzs9xX+QCSML3hPoijN/r/NjNFWHsFchrSUIZnyUpOoIeVTPnqZLpy63NfMajTnlrQtc4C4trwvrZLAiWaIg8FpmLgBmjwBQ9fRqFFDFx7Q1KVTKLDcBD6Kt24P3WO1gZe2IeeJIGIoGSxBzalFExZtzyekNb9eixvel+3dyFOlxpYYgQYBVjgc1+jX8JU9TybRdBUy1Ks1yxgJE0UiPPmOptUT61o00jIS1MYRrGoDvDv9ME4AABNxywJkn0qUs+TEb7H0swZX+v4Bn0dUlgplbmRzdHJlYW0KZW5kb2JqCjIzIDAgb2JqCjw8IC9UeXBlIC9Gb250IC9CYXNlRm9udCAvQk1RUURWK0RlamFWdVNhbnMgL0ZpcnN0Q2hhciAwIC9MYXN0Q2hhciAyNTUKL0ZvbnREZXNjcmlwdG9yIDIyIDAgUiAvU3VidHlwZSAvVHlwZTMgL05hbWUgL0JNUVFEVitEZWphVnVTYW5zCi9Gb250QkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0ZvbnRNYXRyaXggWyAwLjAwMSAwIDAgMC4wMDEgMCAwIF0KL0NoYXJQcm9jcyAyNCAwIFIKL0VuY29kaW5nIDw8IC9UeXBlIC9FbmNvZGluZwovRGlmZmVyZW5jZXMgWyAzMiAvc3BhY2UgMzcgL3BlcmNlbnQgNDAgL3BhcmVubGVmdCAvcGFyZW5yaWdodCA0NiAvcGVyaW9kIC9zbGFzaCAvemVybwovb25lIC90d28gL3RocmVlIC9mb3VyIC9maXZlIC9zaXggNjcgL0MgNzggL04gL08gODQgL1QgOTkgL2MgMTAxIC9lIDEwMyAvZwoxMTAgL24gL28gMTE0IC9yIDExOCAvdiAxMjQgL2JhciBdCj4+Ci9XaWR0aHMgMjEgMCBSID4+CmVuZG9iagoyMiAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnROYW1lIC9CTVFRRFYrRGVqYVZ1U2FucyAvRmxhZ3MgMzIKL0ZvbnRCQm94IFsgLTEwMjEgLTQ2MyAxNzk0IDEyMzMgXSAvQXNjZW50IDkyOSAvRGVzY2VudCAtMjM2IC9DYXBIZWlnaHQgMAovWEhlaWdodCAwIC9JdGFsaWNBbmdsZSAwIC9TdGVtViAwIC9NYXhXaWR0aCAxMzQyID4+CmVuZG9iagoyMSAwIG9iagpbIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwCjYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUwMCA1MDAgNjEzIDYzNSA1NTAgNjM1IDYxNSAzNTIgNjM1IDYzNCAyNzggMjc4IDU3OSAyNzggOTc0IDYzNCA2MTIKNjM1IDYzNSA0MTEgNTIxIDM5MiA2MzQgNTkyIDgxOCA1OTIgNTkyIDUyNSA2MzYgMzM3IDYzNiA4MzggNjAwIDYzNiA2MDAgMzE4CjM1MiA1MTggMTAwMCA1MDAgNTAwIDUwMCAxMzQyIDYzNSA0MDAgMTA3MCA2MDAgNjg1IDYwMCA2MDAgMzE4IDMxOCA1MTggNTE4CjU5MCA1MDAgMTAwMCA1MDAgMTAwMCA1MjEgNDAwIDEwMjMgNjAwIDUyNSA2MTEgMzE4IDQwMSA2MzYgNjM2IDYzNiA2MzYgMzM3CjUwMCA1MDAgMTAwMCA0NzEgNjEyIDgzOCAzNjEgMTAwMCA1MDAgNTAwIDgzOCA0MDEgNDAxIDUwMCA2MzYgNjM2IDMxOCA1MDAKNDAxIDQ3MSA2MTIgOTY5IDk2OSA5NjkgNTMxIDY4NCA2ODQgNjg0IDY4NCA2ODQgNjg0IDk3NCA2OTggNjMyIDYzMiA2MzIgNjMyCjI5NSAyOTUgMjk1IDI5NSA3NzUgNzQ4IDc4NyA3ODcgNzg3IDc4NyA3ODcgODM4IDc4NyA3MzIgNzMyIDczMiA3MzIgNjExIDYwNQo2MzAgNjEzIDYxMyA2MTMgNjEzIDYxMyA2MTMgOTgyIDU1MCA2MTUgNjE1IDYxNSA2MTUgMjc4IDI3OCAyNzggMjc4IDYxMiA2MzQKNjEyIDYxMiA2MTIgNjEyIDYxMiA4MzggNjEyIDYzNCA2MzQgNjM0IDYzNCA1OTIgNjM1IDU5MiBdCmVuZG9iagoyNCAwIG9iago8PCAvQyAyNSAwIFIgL04gMjYgMCBSIC9PIDI3IDAgUiAvVCAyOCAwIFIgL2JhciAyOSAwIFIgL2MgMzAgMCBSIC9lIDMxIDAgUgovZml2ZSAzMiAwIFIgL2ZvdXIgMzMgMCBSIC9nIDM0IDAgUiAvbiAzNiAwIFIgL28gMzcgMCBSIC9vbmUgMzggMCBSCi9wYXJlbmxlZnQgMzkgMCBSIC9wYXJlbnJpZ2h0IDQwIDAgUiAvcGVyY2VudCA0MSAwIFIgL3BlcmlvZCA0MiAwIFIKL3IgNDMgMCBSIC9zaXggNDQgMCBSIC9zbGFzaCA0NSAwIFIgL3NwYWNlIDQ2IDAgUiAvdGhyZWUgNDcgMCBSIC90d28gNDggMCBSCi92IDUwIDAgUiAvemVybyA1MSAwIFIgPj4KZW5kb2JqCjU2IDAgb2JqCjw8IC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9Gb3JtIC9CQm94IFsgLTE0MSAtMjQwIDExMjggNzk1IF0gL0xlbmd0aCAzMDEKL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicLZLLbQMxDETvWwVL4F9SPQaCHJz+r3mUDSx2KIqf4VBPHZNul7+ndknHlvdTta5VMbikPMCS11N6sELypLQfycXZjZtsPMZNubS6ZIbU7rmJlFoq6S2V5BiVb06oipnR0c8W0xA/S05d2IuIMbokKFxA1gAl9RrZJhAobs330AujzKFgHpWmVy76SaqJT2KQtSXgp+I5f3wbICPxgB2Da80fDjft9KApx0UrgxBeQxI+g1UySDH8kDBYVYvRvoleW/aNRgxGM5Qzo9fMHn1VSPQc3cNGIZVwp0J9cOXEjEV2aKMubPAOolDpxwOrOkds76/uVqO7w5cN1tCnOrt7PRvNWNP7GdUKpYz1NGtxCPQl5TyJZqJAhXkeyXIG0fj7YN7P7/PzD1w3azQKZW5kc3RyZWFtCmVuZG9iago1NCAwIG9iago8PCAvVHlwZSAvRm9udCAvQmFzZUZvbnQgL0VVUE9EUytTVElYTm9uVW5pY29kZS1JdGFsaWMgL0ZpcnN0Q2hhciAwCi9MYXN0Q2hhciAyNTUgL0ZvbnREZXNjcmlwdG9yIDUzIDAgUiAvU3VidHlwZSAvVHlwZTMKL05hbWUgL0VVUE9EUytTVElYTm9uVW5pY29kZS1JdGFsaWMgL0ZvbnRCQm94IFsgLTE0MSAtMjQwIDExMjggNzk1IF0KL0ZvbnRNYXRyaXggWyAwLjAwMSAwIDAgMC4wMDEgMCAwIF0gL0NoYXJQcm9jcyA1NSAwIFIKL0VuY29kaW5nIDw8IC9UeXBlIC9FbmNvZGluZyAvRGlmZmVyZW5jZXMgWyBdID4+IC9XaWR0aHMgNTIgMCBSID4+CmVuZG9iago1MyAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnROYW1lIC9FVVBPRFMrU1RJWE5vblVuaWNvZGUtSXRhbGljIC9GbGFncyA5NgovRm9udEJCb3ggWyAtMTQxIC0yNDAgMTEyOCA3OTUgXSAvQXNjZW50IDE0NTAgL0Rlc2NlbnQgLTU1MiAvQ2FwSGVpZ2h0IDAKL1hIZWlnaHQgMCAvSXRhbGljQW5nbGUgNDM5MDkgL1N0ZW1WIDAgL01heFdpZHRoIDI1MCA+PgplbmRvYmoKNTIgMCBvYmoKWyAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MAoyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAKMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwCjI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MAoyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAKMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwCjI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MAoyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAKMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwCjI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MAoyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAKMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwCjI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MAoyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgXQplbmRvYmoKNTUgMCBvYmoKPDwgPj4KZW5kb2JqCjMgMCBvYmoKPDwgL0YzIDE3IDAgUiAvRjEgMjMgMCBSIC9GMiA1NCAwIFIgPj4KZW5kb2JqCjQgMCBvYmoKPDwgL0ExIDw8IC9UeXBlIC9FeHRHU3RhdGUgL0NBIDAgL2NhIDEgPj4KL0EyIDw8IC9UeXBlIC9FeHRHU3RhdGUgL0NBIDEgL2NhIDEgPj4gPj4KZW5kb2JqCjUgMCBvYmoKPDwgPj4KZW5kb2JqCjYgMCBvYmoKPDwgPj4KZW5kb2JqCjcgMCBvYmoKPDwgL00wIDEzIDAgUiAvTTEgMTQgMCBSIC9GMy1EZWphVnVTYW5zLU9ibGlxdWUtb21lZ2EgMjAgMCBSCi9GMS1EZWphVnVTYW5zLW1pbnVzIDM1IDAgUiAvRjEtRGVqYVZ1U2Fucy11bmkwMzk0IDQ5IDAgUgovRjItU1RJWE5vblVuaUl0YS11bmlFMjM1IDU2IDAgUiA+PgplbmRvYmoKMTMgMCBvYmoKPDwgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0Zvcm0gL0JCb3ggWyAtOCAtOCA4IDggXSAvTGVuZ3RoIDEzMQovRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJxtkEEOhCAMRfc9RS/wSUtFZevSa7iZTOL9twNxQEzdNNC+PH5R/pLwTqXA+CQJS06z5HrTkNK6TIwY5tWyKMegUS3WznU4qM/QcGN0i7EUptTW6Hijm+k23pM/+rBZIUY/HA6vhHsWQyZcKTEGh98LL9vD/xGeXtTAH6KNfmNaQ/0KZW5kc3RyZWFtCmVuZG9iagoxNCAwIG9iago8PCAvVHlwZSAvWE9iamVjdCAvU3VidHlwZSAvRm9ybSAvQkJveCBbIC04IC04IDggOCBdIC9MZW5ndGggMTMxCi9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nG2QQQ6EIAxF9z1FL/BJS0Vl69JruJlM4v23A3FATN000L48flH+kvBOpcD4JAlLTrPketOQ0rpMjBjm1bIox6BRLdbOdTioz9BwY3SLsRSm1NboeKOb6Tbekz/6sFkhRj8cDq+EexZDJlwpMQaH3wsv28P/EZ5e1MAfoo1+Y1pD/QplbmRzdHJlYW0KZW5kb2JqCjIgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzIC9LaWRzIFsgMTEgMCBSIF0gL0NvdW50IDEgPj4KZW5kb2JqCjU3IDAgb2JqCjw8IC9DcmVhdG9yIChNYXRwbG90bGliIHYzLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZykKL1Byb2R1Y2VyIChNYXRwbG90bGliIHBkZiBiYWNrZW5kIHYzLjguNCkKL0NyZWF0aW9uRGF0ZSAoRDoyMDI0MDUxNDEyMjQyOSswMicwMCcpID4+CmVuZG9iagp4cmVmCjAgNTgKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE2IDAwMDAwIG4gCjAwMDAwMTYzMDAgMDAwMDAgbiAKMDAwMDAxNTQyNyAwMDAwMCBuIAowMDAwMDE1NDgxIDAwMDAwIG4gCjAwMDAwMTU1ODAgMDAwMDAgbiAKMDAwMDAxNTYwMSAwMDAwMCBuIAowMDAwMDE1NjIyIDAwMDAwIG4gCjAwMDAwMDAwNjUgMDAwMDAgbiAKMDAwMDAwMDM0MCAwMDAwMCBuIAowMDAwMDAyMzk1IDAwMDAwIG4gCjAwMDAwMDAyMDggMDAwMDAgbiAKMDAwMDAwMjM3NCAwMDAwMCBuIAowMDAwMDE1NzkyIDAwMDAwIG4gCjAwMDAwMTYwNDYgMDAwMDAgbiAKMDAwMDAwMzU2NiAwMDAwMCBuIAowMDAwMDAzMzUxIDAwMDAwIG4gCjAwMDAwMDMwMjEgMDAwMDAgbiAKMDAwMDAwNDYxOSAwMDAwMCBuIAowMDAwMDAyNDE1IDAwMDAwIG4gCjAwMDAwMDI3MDQgMDAwMDAgbiAKMDAwMDAxMTk5OSAwMDAwMCBuIAowMDAwMDExNzkyIDAwMDAwIG4gCjAwMDAwMTEzMDUgMDAwMDAgbiAKMDAwMDAxMzA1MiAwMDAwMCBuIAowMDAwMDA0NjUxIDAwMDAwIG4gCjAwMDAwMDQ5NTkgMDAwMDAgbiAKMDAwMDAwNTEwOCAwMDAwMCBuIAowMDAwMDA1Mzk2IDAwMDAwIG4gCjAwMDAwMDU1MzQgMDAwMDAgbiAKMDAwMDAwNTY2MiAwMDAwMCBuIAowMDAwMDA1OTY3IDAwMDAwIG4gCjAwMDAwMDYyODkgMDAwMDAgbiAKMDAwMDAwNjYxMSAwMDAwMCBuIAowMDAwMDA2Nzc3IDAwMDAwIG4gCjAwMDAwMDcxOTEgMDAwMDAgbiAKMDAwMDAwNzM2MyAwMDAwMCBuIAowMDAwMDA3NTk5IDAwMDAwIG4gCjAwMDAwMDc4OTAgMDAwMDAgbiAKMDAwMDAwODA0NSAwMDAwMCBuIAowMDAwMDA4MjY4IDAwMDAwIG4gCjAwMDAwMDg0OTIgMDAwMDAgbiAKMDAwMDAwODk3MSAwMDAwMCBuIAowMDAwMDA5MDk0IDAwMDAwIG4gCjAwMDAwMDkzMjcgMDAwMDAgbiAKMDAwMDAwOTcyMCAwMDAwMCBuIAowMDAwMDA5ODQ2IDAwMDAwIG4gCjAwMDAwMDk5MzYgMDAwMDAgbiAKMDAwMDAxMDM0OSAwMDAwMCBuIAowMDAwMDEwNjczIDAwMDAwIG4gCjAwMDAwMTA4NzAgMDAwMDAgbiAKMDAwMDAxMTAxNyAwMDAwMCBuIAowMDAwMDE0MzYxIDAwMDAwIG4gCjAwMDAwMTQxNDEgMDAwMDAgbiAKMDAwMDAxMzgxNCAwMDAwMCBuIAowMDAwMDE1NDA1IDAwMDAwIG4gCjAwMDAwMTMzODEgMDAwMDAgbiAKMDAwMDAxNjM2MCAwMDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDU4IC9Sb290IDEgMCBSIC9JbmZvIDU3IDAgUiA+PgpzdGFydHhyZWYKMTY1MTcKJSVFT0YK", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-14T12:24:29.414443\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.8.4, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" ], "text/plain": [ - "" + "
" ] }, "metadata": {}, "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "Text(0.5, 0.98, 'CNOT convergence')" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" } ], "source": [ @@ -2669,8 +13167,8 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", + "display_name": "Python 3 (Spyder)", + "language": "python3", "name": "python3" }, "language_info": { @@ -2683,5356 +13181,11 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.12.3" }, "widgets": { "application/vnd.jupyter.widget-state+json": { - "state": { - "00ce31bc79c34dcd9a75f019e8f06b8b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_1cd9774533c0438a815efb6556437ab3", - "style": "IPY_MODEL_78111d3c097c4989bda0110488f17dbe", - "value": " 100/100 [00:39<00:00, 2.87it/s]" - } - }, - "010bf16f80ef4c06b108641afeb833b9": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "01ed40322eb24cd0a1ee5af414affb09": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "026a0ebee5e34029a355bdf5a895f379": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "03e89ad9308543d980cf86c3d20a70cc": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "052391c04da8415e9c21ab04c8fda939": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "05c1563e35bd4d31aea2675ee3d0e6eb": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "06b4c6ec622f41c5a2c91a59fa78c4aa": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "0762953ce076440987c6e38195ce83c9": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "077dbd79885945fba8d4c40032f33716": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_c404509b99854e19b01077cc6eb55c78", - "style": "IPY_MODEL_c9f31fde670e443ea67a1208be9b9680", - "value": " 100/100 [00:00<00:00, 144.75it/s]" - } - }, - "07b8db535cf84b04b984a68e89bdd276": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_784eb1a60f7b426cbfca0067ce9e019b", - "style": "IPY_MODEL_7709c080bf5b460f8de36f323733c424", - "value": 100 - } - }, - "0825621abaab406a97b5f6c8ec30f8ca": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_f96125325d2c44f98d720f8e49bca8e4", - "style": "IPY_MODEL_46abaf200ef24298acced526eadf8965", - "value": 100 - } - }, - "08468d9aac9048c79585de8f9ff16191": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "085887f8de8040d99e5cebbbae12e655": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "0885eb96d0ff4667a5060daf2626e301": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "091e4a016e004b1bb8f3dc7926d1c436": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "094bad7dc14542a6ba69d07b45ceaffa": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "0a30bf14d753406586282e4b4a69fb67": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "0a57c2cef4454d2b83ba1534c9d0eaf3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "0aab098963be4f97a02b66b7c4f2d1eb": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_c074b9fd544741d38dd138fd44172265", - "style": "IPY_MODEL_f95bb7b88b1f4923a3bcdeb26814f288", - "value": "Calculating second order FF: 100%" - } - }, - "0aad69b5f27940b39e13230e0ab4ddbf": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_94f0855b6f73410f982b8b56427443ba", - "style": "IPY_MODEL_0d7e78b9c765452184b9ae3d799b781d", - "value": 100 - } - }, - "0b0b723302134f82b6c2bc9d03109257": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "0b5a7c29ad434c29b2835c184e9408fc": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "0b66c16b5b134828a884021f6b750cef": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "0bdcdf35d9cf47bf94b307ab9a0542a4": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "0d0af1d9f26249d789b656c4b04fb6f8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "0d0e8180f8f145798914c9022f550a14": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_200ecc36ca164a218b66f68a8a0cbbb9", - "max": 250, - "style": "IPY_MODEL_10d0c899b12a4e048ade79426da34bc6", - "value": 250 - } - }, - "0d7e78b9c765452184b9ae3d799b781d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "0dc28bbab3114ad78a4593090933e8cd": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "0e156a83465b46338575c33a25f4d4a1": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "0e725523fc7841e89cd75adcf503af69": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_8ac96d553e4648d6af976b4293f626c3", - "style": "IPY_MODEL_4b0155e484d844d5a1e62c82bdbef543", - "value": "Calculating control matrix: 100%" - } - }, - "0eb65048a28a441aad0d68ff0de60c1c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "0ee64a2c9cad44d7866a2e7527126447": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "0eededfdf2fb4bb39f72dc10701d8d8b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_5dde22886c46410bbd7910278dcdda97", - "value": "Calculating control matrix: 100%" - } - }, - "0f630858067c457b93d35717403f98a7": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "0f95ffadf0794db4a14818b1414f89cc": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "103e589ffc044d3aa6ce625db2126035": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "10c1d9c03ea84de985c33f1591f1c3ce": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "10d0c899b12a4e048ade79426da34bc6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "10f9f84005604195a65826baa8f5ce0d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "1177614c59824dae96f19325184eea55": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "11917d7a98de4b59940a1e1103598684": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "1197f4fe86ae4cacb33a638080beb6c1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_93b33f36e38143cf86d0fa9672992231", - "style": "IPY_MODEL_103e589ffc044d3aa6ce625db2126035", - "value": 100 - } - }, - "1231fa2a4dbf45a58f2d7119f2f2ff37": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "12f88297cccc4cd3897ecbe69b748d93": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "1338b1d2e6964e0b8404e78cdcb72513": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_bd3bb35d95e24ea1b43270c7a8ad27e4", - "style": "IPY_MODEL_1b3b4c2cc5eb4f77beb257a5ba90f3db", - "value": 100 - } - }, - "1396af94724743eaa7ab263267aff322": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_8f9a0f69399b409d9b98076ad57a8f9e", - "style": "IPY_MODEL_bc1e1b084aa2408585c8b139a8904dda", - "value": 100 - } - }, - "13d35562a1c048e5aa0ffdf5173970f2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_1a5160c1b6414c9ea091bc9c238e3ec3", - "style": "IPY_MODEL_82b98977e85e46fa8ca94eb42f1d1e59", - "value": " 100/100 [00:00<00:00, 106.49it/s]" - } - }, - "141d02f5d71646d0bc9ab3c79ed9f238": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "147a75f63b9f41998ec3e61a67b19f58": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "150cb3fac9f74383be0b2bdcb02d7e6e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_16532b0db15d44c289a43328636ce9c1", - "IPY_MODEL_cd4de010c8884d48a835786bdcda5df7", - "IPY_MODEL_173ac12532994d7b8fe26213f3d32e6f" - ], - "layout": "IPY_MODEL_d391d232c8fa421bac71e3d1376e7f4d" - } - }, - "15b27475dc7744bf888ca818318e73aa": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "16532b0db15d44c289a43328636ce9c1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_a223e4bac43c47aba19b0e5a770a6e8c", - "style": "IPY_MODEL_1cefcf20c0e94954a6c94fa6dab74fca", - "value": "Calculating control matrix: 100%" - } - }, - "16c73b5fbfeb4b52a8e39be8c320d7f6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_c6582a1c23ce414a8dec2798f4094a82", - "IPY_MODEL_723749bbdb20463db89002da0ba7fd92", - "IPY_MODEL_69a4f50e729f4f39b950e93b56effa9e" - ], - "layout": "IPY_MODEL_ac7831722c3f464cbeab84209314a974" - } - }, - "16eb1ad677d94dacb7966c0b76016411": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "16ec94eb78a04ddf82d79163a7b8ff30": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "16ef17e099c14aca97e8458009d90de5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "172d233066ea42ce906ac1f94f60210d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_3d51109de8404d01b93be8db14d16172", - "style": "IPY_MODEL_399793cef4624fce9799ce6628854bf8", - "value": " 100/100 [00:00<00:00, 305.28it/s]" - } - }, - "173ac12532994d7b8fe26213f3d32e6f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_78ddd81445ea4e10a91bee04c0f03835", - "style": "IPY_MODEL_cdc0251521304ac895defa81b4be5436", - "value": " 100/100 [00:00<00:00, 418.83it/s]" - } - }, - "17ddbf87ea4a46fc957cc3a3918cdd17": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "18a20af20939462e845d0f6650990b86": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "19ae6d32aabc40de8ba1cefa1c0953cc": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "19f910b9430e4c728c7855cf69db7dbe": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_dec28044fe5241f3a0a87373619528bd", - "IPY_MODEL_c7548c2dca9b423eb78ec894beea527d" - ], - "layout": "IPY_MODEL_4bdc9956a40a432392e727f37c5755fc" - } - }, - "1a2ac6e053f44ad68927aa74c88a5105": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "1a4155cbfed743628861f96e1582addd": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_fe4353d7aa5b4f1899bf1f0ee8aca7f8", - "style": "IPY_MODEL_c8096f1a51974add97294fa9ad460159", - "value": "Calculating second order FF: 100%" - } - }, - "1a5160c1b6414c9ea091bc9c238e3ec3": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "1a653a36e25c498d9a9e9d9d0ec2f1e1": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "1a72225bfa1c4f6c98a1a53385ca7d5c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "1a967f69efc249739765394ff67ebdf4": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "1b039d48bdcf409e8ab0a02abafc494d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_d11af2e516de469a9feb2449098700b3", - "IPY_MODEL_f2227a2cbbac433d935091dd1708c938" - ], - "layout": "IPY_MODEL_ce7f226541cf442b9dea590a5f637d70" - } - }, - "1b3b4c2cc5eb4f77beb257a5ba90f3db": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "1ba68064be4c472bacc321bd0fde5e77": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "1bd42690bd5f4e3096231fc11e00986e": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "1c1debc5129745e29baf3a81c97e34c0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_704acbe9e3484cf9913ec75296229b17", - "style": "IPY_MODEL_cf180db0f3dc4085be49201499b78c82", - "value": 100 - } - }, - "1c289042c9344620a2f8725531d8d0d4": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "1c6278daa22e4d6b862b591ad251ed80": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "1cd9774533c0438a815efb6556437ab3": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "1cefcf20c0e94954a6c94fa6dab74fca": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "1d1cabb625964e8d9b85ff238db0605b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_a2df15e179ed46cda22a4091ffb4f02b", - "style": "IPY_MODEL_57a5aaeb9cd342e5a6e202e668de2652", - "value": 100 - } - }, - "1db6a2ee9d0f4f8f9361a86752afd25a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "1dc3491e8213471a969247d4b0f6dfe5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "1e43dff0f386444486e72f9f0143c03f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "1e487d2d986142ab8083bb756040c727": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_1a4155cbfed743628861f96e1582addd", - "IPY_MODEL_1396af94724743eaa7ab263267aff322", - "IPY_MODEL_1e7bcaa563284d9fbc8e04af555d4563" - ], - "layout": "IPY_MODEL_ce983f0c27794250936197b9a008a87d" - } - }, - "1e7bcaa563284d9fbc8e04af555d4563": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_c92f7c19c3d942e691856a81062d8ce8", - "style": "IPY_MODEL_d8a1b01b2a6d4080aae5c7ab86410843", - "value": " 100/100 [00:36<00:00, 2.79it/s]" - } - }, - "1ec61ffd0c1c4e45b47380e1fecaaf56": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "1ec8b333d4d24cb9bec2ba9850dc7eeb": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "200ecc36ca164a218b66f68a8a0cbbb9": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "202c8186c22b4f2b9332a7f6cddefc37": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "204107b2588047888e29ebdd194463fd": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_c4edacd29adf4312a11aedb8c60e295a", - "style": "IPY_MODEL_816e595a418b4dffb9936c25a82e684a", - "value": " 250/250 [00:02<00:00, 106.56it/s]" - } - }, - "20925ed47e794e8c9e4969bf34e60037": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "224977730ed04542bc4a93c83700fc08": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "22c54625328545f69ae32b099369833f": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "23396ec2a1d24c5b87dd33faac6f2c63": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - null, - null, - "IPY_MODEL_8525b0b0c5bb4e9d94bbcb2b3687d254" - ], - "layout": "IPY_MODEL_f2b839c695cd4331a458d7669c3618be" - } - }, - "2340441232884d62b9b108c54979dba7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_f43aaee98b3543039922495cd53d0c33", - "IPY_MODEL_8531c2da7d964193bd4bd35a3d76c63d" - ], - "layout": "IPY_MODEL_2b77040fd17d4f78ab60f2d5863ea5dc" - } - }, - "2382303f767341dda8a67c679c4eec78": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "24422e798d3047c78ee310e38d8b8aaf": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "26f0a9d8d6774b81a6f149a4de8722d0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_e66453e743054dedb04adb9877e8708c", - "style": "IPY_MODEL_11917d7a98de4b59940a1e1103598684", - "value": "Calculating control matrix: 100%" - } - }, - "270df0005a05473097bc9ef302547bd7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_cdd02f6ff3694c9a81b8d9769a48a4cd", - "max": 250, - "style": "IPY_MODEL_daf5f758aa5c45129dbaa8f94551bbb4", - "value": 250 - } - }, - "27552bd371364250a134c8c56d087717": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_1a2ac6e053f44ad68927aa74c88a5105", - "style": "IPY_MODEL_6380530639cb400494884ff508100683", - "value": 100 - } - }, - "27945967fe1f4a15b5f05ab9c6975c53": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "27bfff18cbd74467b765a4c88cc64720": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "2885137c2fff48beba10cb5a29b1862a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "29d0588c39e443ceb44edfb1187fe7c7": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "29e2773ab7264effacaf653e45573088": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "29f04c565993483ca13827c4260a4509": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_091e4a016e004b1bb8f3dc7926d1c436", - "style": "IPY_MODEL_2ac4a5d0e8c941d69b9d9159cc5352a6", - "value": "Calculating control matrix: 100%" - } - }, - "2ac4a5d0e8c941d69b9d9159cc5352a6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "2ac4aef7096a49239cfc9206588456c2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "2b1db76992fc4aeab66647f3c1256c92": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "2b3c400ffd1144cd83f6bb5a4e249d11": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "2b5b27491e9a49acb38a776a711f0ca0": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "2b77040fd17d4f78ab60f2d5863ea5dc": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "2b7faa2b0e6746d0a10806ddc0637710": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "2bac32339b2b47f5b6f79239dd1839a1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_c7ac4cd5707348bf841660810e10ebf7", - "style": "IPY_MODEL_9b4d7ca807854a46b5b4de4f4d4a9473", - "value": " 100/100 [00:00<00:00, 349.16it/s]" - } - }, - "2c063f8a40df440696f000e42ab6c1c1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_66adc482cd7747d985402635ee208d4e", - "style": "IPY_MODEL_6ab6e043b81544688d5fda8b566606d1", - "value": "Calculating control matrix: 100%" - } - }, - "2c266e88021c4e8d87bc87dbdac1352c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "2c7d17ecfd044d7aa45e5f2bd957611d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "2d0dae1e3fe747acb5084077d48a5a88": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "2e2bcd15b8874be28a28561bf67b884e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_2c063f8a40df440696f000e42ab6c1c1", - "IPY_MODEL_07b8db535cf84b04b984a68e89bdd276", - "IPY_MODEL_efb81ac2fc83448cbfa8b35bb5bdf662" - ], - "layout": "IPY_MODEL_c9b86cefc55f48d187b5491695a8f8ae" - } - }, - "2ee89aeb355740d18bb60925889fe4ec": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_9b5eaab1728a4c919489f25af0e54c33", - "IPY_MODEL_5478d29ec7fd4fe2a5f99b2ea6c8752a" - ], - "layout": "IPY_MODEL_cec74829c2954e11beda9c0a54d82d37" - } - }, - "2eedad2de2d7437d98119c02c87a123c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "2f23a70515744a7cb1575695d1b676d8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "2f659440686b4b6dbcba0729f1e8950c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "3159e3dd80a74a469916715a432f1754": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "315ac1618324496299ae13b0be5220cb": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_3a22f5f52b8a46d3b0eaf6d5e7556d9c", - "style": "IPY_MODEL_eb911820fd7b4287a72a7343806d08b4", - "value": " 100/100 [00:00<00:00, 104.27it/s]" - } - }, - "321a9887288043b9958d847a09481b77": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_e7aff010b8aa4c1d8f33053fa4a208ce", - "IPY_MODEL_3abd743f6f714d1b92b97d7d76097b0d", - "IPY_MODEL_4ac7b1d733944f24afee82fdb390b9d3" - ], - "layout": "IPY_MODEL_7f856489c6ea4bd6b8e2f880003652c8" - } - }, - "34f359cc0e824f31b85bddfd2cfe79c6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_1db6a2ee9d0f4f8f9361a86752afd25a", - "max": 250, - "style": "IPY_MODEL_ac5da51da4c4463aa50cc5b398dbf31e", - "value": 250 - } - }, - "35ecf0ded1d748a5902529826e7f9a05": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "37b06f517bea4edd86d591c692a60e8f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_1197f4fe86ae4cacb33a638080beb6c1", - "IPY_MODEL_8098615e5cbc44959dfabc2507c6e0ca" - ], - "layout": "IPY_MODEL_66bf1627766e4e8c9ff273d157061b97" - } - }, - "38990ca6abf145d8bd0d165f72e517e9": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_27945967fe1f4a15b5f05ab9c6975c53", - "style": "IPY_MODEL_0f95ffadf0794db4a14818b1414f89cc", - "value": " 100/100 [00:00<00:00, 362.40it/s]" - } - }, - "399793cef4624fce9799ce6628854bf8": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "3a22f5f52b8a46d3b0eaf6d5e7556d9c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "3a97ce6562154ac5a6ca74ca8d621fcf": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "3abd743f6f714d1b92b97d7d76097b0d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_1177614c59824dae96f19325184eea55", - "max": 250, - "style": "IPY_MODEL_f8e76ad75de94507b2d927a3b905c26e", - "value": 250 - } - }, - "3b1e16a7177a403f938d024e675c0e6e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_8681aafa9ae14cc0b71457960a00f91b", - "IPY_MODEL_ee309959db034e81929a263c9863f444" - ], - "layout": "IPY_MODEL_5fae92fbec6846aaaa50e1032ecb6e68" - } - }, - "3b5d0285e48245e9a2e99f0295cbf1ce": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "3b919e7a05424b84b78742d289e4860d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "3cb0e200d037462e906248dd9bbec13b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "3ce9a3a9974e432c9bdca5c91bc2b0ec": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "3d35d6c230764319b4098894a3dac49e": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "3d51109de8404d01b93be8db14d16172": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "3d5c198838bc43ce997f6f335cb35047": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_844add067bd245bea6f60e294f79f2df", - "IPY_MODEL_54b3b5742ce145d894d900c53d65c639" - ], - "layout": "IPY_MODEL_40bf4326856049b0be6e9783acf48c5a" - } - }, - "3d66ee227eeb4b8b8c77a821e91f5a16": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_094bad7dc14542a6ba69d07b45ceaffa", - "style": "IPY_MODEL_c26a5d3bde5f43639259d7cc788437db", - "value": " 100/100 [00:00<00:00, 380.95it/s]" - } - }, - "3e6f69ea93c843caa8d63a65b132cbea": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_4d8e9791df704043aa0527a8538f7675", - "IPY_MODEL_0d0e8180f8f145798914c9022f550a14", - "IPY_MODEL_b3264de47b224173b230089fc599d5ac" - ], - "layout": "IPY_MODEL_d399bd2369cf44faa80bbf1838e04f55" - } - }, - "3ef9761f0e194e8cb4884567c828c918": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "3f31b10ae7ee4767be23d33924231069": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "3f67c7f5043c434694ed06464c13c346": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_010bf16f80ef4c06b108641afeb833b9", - "style": "IPY_MODEL_ca00bb03fd8c40ae963ce20d9cbfcd28", - "value": 100 - } - }, - "3fc263341c704421a200a32e87f392e0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "40101171c9684ce193ecf2fab0a0a793": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_cfc3359738e84081a4c79ff1d4e223f7", - "IPY_MODEL_fb020e66422a48a991ed391e98df7bc1", - "IPY_MODEL_dd4837efa82e412cb8a9ff734900ca94" - ], - "layout": "IPY_MODEL_42a08e7e76b14bec96733d7d4b5b7cc7" - } - }, - "40321705ee6e4bb4bc7c2ec0d6304b39": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_a3e58be2e6ff464486979ab77532ddf4", - "style": "IPY_MODEL_4e84183cdda141678421d9f21fa090c2", - "value": " 100/100 [00:00<00:00, 273.81it/s]" - } - }, - "40691132006548f9a8d6ac44a09c82a2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_a7e5ee9750d54f088403f522ca214ba3", - "style": "IPY_MODEL_e6deabb3392040c282c712aefc0e08d8", - "value": " 250/250 [00:00<00:00, 343.84it/s]" - } - }, - "40bf4326856049b0be6e9783acf48c5a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "4174380b1046471aa5aae8edbfcfb60b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_4b4098799c164f818351a2e316ea7f9b", - "IPY_MODEL_998508aab87245e9b117527dc9eb6e5d" - ], - "layout": "IPY_MODEL_a757590ac14042149b0f0a3a653e0a23" - } - }, - "4183d6129a4a4bb3a2b0cde8dfa5638d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "42a08e7e76b14bec96733d7d4b5b7cc7": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "4370129749044d4b9e81eaeb3d42a5ea": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "43e5127902eb4958937d0371487689b4": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "45601dc7b3a24e9a8f50d09241630e6a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "45700ddd578d44e581a13b2612b26f92": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "46099b9fe32047feafe5e68e887e5ec4": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "464ab3ea5cc742ce9a133efd41371656": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "4655a9b9c6104dbf85a486a272ccbe4d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "467378e70c1a47599a6311f87491c8af": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_a6309be279874682ba5fbddf508cd50f", - "IPY_MODEL_761b9e9b347345b0b1f823c1f043c040" - ], - "layout": "IPY_MODEL_eee129c3d29543fea0216f612b116ee7" - } - }, - "46abaf200ef24298acced526eadf8965": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "472fea1d3efd4dd0bceb8df02e42577d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "47e317cd69614c74bbbb936f7aff5437": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "47f25fc200d24f068ecd6fe495d5df5c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "49c4727113ba471581e203c36704e746": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "4a3f1f8ef2554d4da53859e07fe8af9b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "4a475b93426d43cfaef83cc1cea3ce8a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "4ac7b1d733944f24afee82fdb390b9d3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_963aed27165b4dc2b70ede9b69730d59", - "style": "IPY_MODEL_1231fa2a4dbf45a58f2d7119f2f2ff37", - "value": " 250/250 [00:00<00:00, 418.72it/s]" - } - }, - "4accb4a202004de1bb9d750d430fec12": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "4b0155e484d844d5a1e62c82bdbef543": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "4b4098799c164f818351a2e316ea7f9b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_d50164f16b244052af6a16528da700ec", - "style": "IPY_MODEL_8b9bb33ae0a04f609f7ee6b12afc45e5", - "value": 100 - } - }, - "4b4b017086af4f50a7b1cca19e109105": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "4bd089d7e70c445ca81eb24748c05d18": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_94d292c3367042009183a78dcbd506c2", - "value": "Calculating second order FF: 100%" - } - }, - "4bdc9956a40a432392e727f37c5755fc": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "4beea64560f7486187447f7abfb691e5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "4d50b1a6eafd402489a5da8582282367": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "4d8e9791df704043aa0527a8538f7675": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_43e5127902eb4958937d0371487689b4", - "style": "IPY_MODEL_7a4eaf3315454ca1afc4f518dd19b706", - "value": "Calculating control matrix: 100%" - } - }, - "4e375f1a48054d95961e4dd1a7cacdc0": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "4e84183cdda141678421d9f21fa090c2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "4ecca4c819004f9cabf128bb67904abe": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "4f1249a6420944c1a50918acce9150da": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "4f21729196774af89bd075ba8f578dff": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "4f4e3c7e60eb4ffd95f57af6b134a44b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "4f53e78928944596ae655bb7601be04c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "4f605084e3144caf990cdc1407cdaa99": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_5a92d63f784e42138206b61fafbfe325", - "style": "IPY_MODEL_8e018b64550840318ccda9016befbd1c", - "value": "Calculating control matrix: 100%" - } - }, - "50130b58226346b8b3502f2038991ac0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_bbe821e812e54f7c813e7898ac7f8b80", - "IPY_MODEL_edbd3b05bbdc493090132eef01ede114", - "IPY_MODEL_00ce31bc79c34dcd9a75f019e8f06b8b" - ], - "layout": "IPY_MODEL_d61726aaf7f440a1ab09a1bfeafeefe6" - } - }, - "504df4491dfe4de9a6f0cb6a83c4acdd": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "50d671f2a8624ab0a94e7ee1adabdf35": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_c321c6bcc3b248feb7e8ed585c213e53", - "max": 250, - "style": "IPY_MODEL_acd60aa990f748bbb080ed9baccd3311", - "value": 250 - } - }, - "5135fbf9aac642e6bafbd64bd2bf3f43": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "515749e2b24046db8cff3aa6cbf14d65": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "51668696af73439180375526aaa5f650": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "52235c7dc56e4758be2d939600c8453a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "526137c22edc41a2940931960824ac54": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "5322e98213904a88a03b058f07769860": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_dae77b22e1b943328e86c19b9cff1356", - "style": "IPY_MODEL_3ef9761f0e194e8cb4884567c828c918", - "value": 100 - } - }, - "53b534c64fd14a39a46ed8342c6693d4": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_1bd42690bd5f4e3096231fc11e00986e", - "style": "IPY_MODEL_4370129749044d4b9e81eaeb3d42a5ea", - "value": " 250/250 [00:01<00:00, 169.96it/s]" - } - }, - "5478d29ec7fd4fe2a5f99b2ea6c8752a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_20925ed47e794e8c9e4969bf34e60037", - "style": "IPY_MODEL_b833b7f847cc4933874817fb426bc0fe", - "value": " 100/100 [00:01<00:00, 89.85it/s]" - } - }, - "54b3b5742ce145d894d900c53d65c639": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_648278ee8bb24cc4a723f373116f5f41", - "style": "IPY_MODEL_567c15a390b840e8bb1a216323040d30", - "value": " 250/250 [00:01<00:00, 171.06it/s]" - } - }, - "55437d3bdde3437d893021c7fe0ccbd6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_0f630858067c457b93d35717403f98a7", - "style": "IPY_MODEL_f5e08944a82f49a58fe64ee18d8de852", - "value": "Calculating control matrix: 100%" - } - }, - "55d471e9c2d24f70a3b5bb69632621b4": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_71168f1d634b42428334a41aa2911d82", - null, - "IPY_MODEL_c66106f8bf1d4899ba07a247857ba158" - ], - "layout": "IPY_MODEL_a80d58b901b64bbf89195764269b534d" - } - }, - "567c15a390b840e8bb1a216323040d30": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "57777a8c741f4a208eda0778acac8690": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "57a5aaeb9cd342e5a6e202e668de2652": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "584af686f2ea4020ba0479d8ecfbaa7a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_cd3e5da805054b53acb03a63b2347744", - "style": "IPY_MODEL_993a1cc1ebaf485399c89e2c61c60e7f", - "value": "Calculating control matrix: 100%" - } - }, - "58c3a2aee3c0438688bfe14be3b662d4": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "5929ff5c99f5460bb21a9b0117c5df08": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "5a64cf9283714b3ebf0757d791bbe1f2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_b2d9909392b340469c5bcb557faff817", - "style": "IPY_MODEL_4f21729196774af89bd075ba8f578dff", - "value": " 100/100 [00:00<00:00, 234.47it/s]" - } - }, - "5a92d63f784e42138206b61fafbfe325": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "5bd6e045b18c47c3aaa288fe49e53f7a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_1a967f69efc249739765394ff67ebdf4", - "max": 250, - "style": "IPY_MODEL_1ec8b333d4d24cb9bec2ba9850dc7eeb", - "value": 250 - } - }, - "5d4dcb3a79a44f69bcb349cb68020eda": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_584af686f2ea4020ba0479d8ecfbaa7a", - "IPY_MODEL_e073898a0d0148bbbb4f4d021e2465a3", - "IPY_MODEL_38990ca6abf145d8bd0d165f72e517e9" - ], - "layout": "IPY_MODEL_db04f726b4d7450b8403b626d365a70d" - } - }, - "5d76382b204547ac9fc0f216a1f7af78": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_5ef4f3b928494617a0b5cf7cd52ebff5", - "style": "IPY_MODEL_0bdcdf35d9cf47bf94b307ab9a0542a4", - "value": " 250/250 [00:00<00:00, 596.35it/s]" - } - }, - "5db43feb22444799a5bec017b949fa67": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_3f67c7f5043c434694ed06464c13c346", - "IPY_MODEL_bf4a3cf7848743d495263ed148aea7d0" - ], - "layout": "IPY_MODEL_5dcd317c60484dd1b6438a9ebad4ecb4" - } - }, - "5dcd317c60484dd1b6438a9ebad4ecb4": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "5dde22886c46410bbd7910278dcdda97": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "5e7f1a0b62814e24bd16f80ade80fd6b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "5ef4f3b928494617a0b5cf7cd52ebff5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "5fae92fbec6846aaaa50e1032ecb6e68": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "5fe50ad3f3a24c5980ecdc445e8e5a4d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_0885eb96d0ff4667a5060daf2626e301", - "style": "IPY_MODEL_7c9fd63ee97f4769966936f460b45b88", - "value": 100 - } - }, - "5ff59a9d5ca04c38aaf6dd6ea6854e13": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "604441e7a8bb4aef942929b609ac750c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_35ecf0ded1d748a5902529826e7f9a05", - "style": "IPY_MODEL_2c266e88021c4e8d87bc87dbdac1352c", - "value": " 250/250 [00:02<00:00, 114.72it/s]" - } - }, - "6132a7c8cbe74a1396a5dc8984b0ad91": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_92482891be7547ac9176c72d94352566", - "style": "IPY_MODEL_29e2773ab7264effacaf653e45573088", - "value": 100 - } - }, - "615b83b8f71d46c98c60a888aa8ade30": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "6186a2af70044506ae119e0fea7e9e76": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_a2b08f024e77437cad2a81300488bd40", - "style": "IPY_MODEL_1e43dff0f386444486e72f9f0143c03f", - "value": " 250/250 [00:01<00:00, 235.04it/s]" - } - }, - "61c92e4ea71645e6944c516a4d12f471": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_29f04c565993483ca13827c4260a4509", - "IPY_MODEL_0825621abaab406a97b5f6c8ec30f8ca", - "IPY_MODEL_8e17e87bcc1741618de6452d0241cc49" - ], - "layout": "IPY_MODEL_6eb47de15dc740d3b06aa15a92ac6166" - } - }, - "6380530639cb400494884ff508100683": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "63d9bcdec28d45b29fb9276841c871c4": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_05c1563e35bd4d31aea2675ee3d0e6eb", - "style": "IPY_MODEL_526137c22edc41a2940931960824ac54", - "value": "Calculating control matrix: 100%" - } - }, - "648278ee8bb24cc4a723f373116f5f41": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "649fe0bb25784500a0d104e0abdf0eed": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_9392f45f1f1b435c841e50189285f354", - "value": "Calculating second order FF: 100%" - } - }, - "658e20571ee14aa7a143f9d98d834d66": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_ca67935220a045eaa0b8a823d1aede6e", - "IPY_MODEL_604441e7a8bb4aef942929b609ac750c" - ], - "layout": "IPY_MODEL_a9f7ad488d744028aac8e5b03f1c4f3d" - } - }, - "663e694e59ab4b76a2731b41bab7bcc6": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "6658b7b5e6004e6ca781f0c32a38c561": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_7e7c9dffe4294000b470fda9bef54417", - "style": "IPY_MODEL_c31cbba52a3441b3aea975f7e7b6d5ef", - "value": " 100/100 [00:00<00:00, 251.42it/s]" - } - }, - "66adc482cd7747d985402635ee208d4e": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "66bf1627766e4e8c9ff273d157061b97": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "6712341e92fd4eca96190e51d2b47479": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "6788ec4fe6e74d68ac3c91360422384e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - null, - null, - "IPY_MODEL_f3019291f347489ab0a4336ee1ce9cbb" - ] - } - }, - "67f96117df3848e6b580ced07d127057": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "6958f608332549af90f991ed8da8d670": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "69a4f50e729f4f39b950e93b56effa9e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_58c3a2aee3c0438688bfe14be3b662d4", - "style": "IPY_MODEL_e6419211aba0471d8401b705ecc233ba", - "value": " 250/250 [02:15<00:00, 1.78it/s]" - } - }, - "6a2ca028b76b4f71905dd65c67edc9c1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "6ab6e043b81544688d5fda8b566606d1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "6b201dac30774cd8b2df6c2272e57227": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "6b4a474cb5074010aebb212826254f53": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "6b5f000e2656451d9637725bc72174cc": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "6b8dafe839da4f70973849f12f7a243b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "6c08d70a1ec949e6818e74945aa318cf": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "6cc4fb75420c40b2b74bbe140cd668b2": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "6cfe368e29694683838250dca0245ae7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "6d78511c6549428ca1a53a47357154b4": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_270df0005a05473097bc9ef302547bd7", - "IPY_MODEL_eb2ca4e4eabc49e5bec6d877ff0f6aa1" - ], - "layout": "IPY_MODEL_d7a767083a254490afd09ce8a1a0a3cd" - } - }, - "6dcab4f9512449d3a559634b46eab66e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_bee3bfb534f44c4cb36b76fb431aff78", - "style": "IPY_MODEL_c798f23cda604a46ae01ec410a94e6a4", - "value": " 100/100 [00:00<00:00, 153.14it/s]" - } - }, - "6e1d0256e49c48bf9ad5e3b96650affb": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_e7a2dbafa4034b27a80a70938b8116fe", - "IPY_MODEL_34f359cc0e824f31b85bddfd2cfe79c6", - "IPY_MODEL_c74604a1362d47c1aa834e2ccd82fd7e" - ], - "layout": "IPY_MODEL_c7e4aa8fdaf44cd5bb7201f25d8d94e7" - } - }, - "6e56dae183e445b383345a979943d7b5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "6e750e9fbb9b43eb9521bec72679df49": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_c19e5d8b85b2421393ed4e51e45e746a", - "style": "IPY_MODEL_f29f4e64a3c240bfb9407ada724f8945", - "value": 100 - } - }, - "6e835bd595f24bb1869f4e5a64be4edd": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "6eb47de15dc740d3b06aa15a92ac6166": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "6ecd2d19ff494fc5936b0cc8e526b980": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_86cb11835e9d4881a097dcca04af1386", - "value": " 100/100 [00:48<00:00, 2.09it/s]" - } - }, - "6eee011b0316489a8a83b6954bf59692": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_bce866c3594648248788881efe92a5cb", - "style": "IPY_MODEL_ec4f4e8d26f04171b96e62b579c51724", - "value": "Calculating second order FF: 100%" - } - }, - "6f200be46f2141f68779b0a8dbeefda4": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "6fa2b1b81ea94f6ab09394d6cb551722": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_ea53e40fa0ae470c944633c4fb807836", - "style": "IPY_MODEL_782ed0337519414b892d6ac5f2cb6de7", - "value": 100 - } - }, - "700235b4b79644a2bbb71c4af0913559": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "700c2b3f5e7b48c1a3588e087ecf3e5e": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "704acbe9e3484cf9913ec75296229b17": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "706db4ca57b64990bf8984a91ea3fe9c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "71168f1d634b42428334a41aa2911d82": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_ddfb4c6051da4663910413a90828edc2", - "style": "IPY_MODEL_7389075f9b3443f3b5c4e706e35d5915", - "value": "Calculating control matrix: 100%" - } - }, - "7165026565ae45ab977218c73869f84d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "71798a282f35446b9eba008883d20ff6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "7202b95253c44edbab209dc42dc20f2c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "7213e1b136db45cdb81d6f3811c62f48": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - null, - null, - "IPY_MODEL_6ecd2d19ff494fc5936b0cc8e526b980" - ] - } - }, - "723749bbdb20463db89002da0ba7fd92": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_6b4a474cb5074010aebb212826254f53", - "max": 250, - "style": "IPY_MODEL_6a2ca028b76b4f71905dd65c67edc9c1", - "value": 250 - } - }, - "7301155b6daf455fb8abe805fa3b21fa": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "73651b04ea364210b03af7895d50293e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - null, - null, - "IPY_MODEL_40691132006548f9a8d6ac44a09c82a2" - ] - } - }, - "7389075f9b3443f3b5c4e706e35d5915": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "747ce4b4e9f143aa9ebb6e085cfa01d2": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "748ce5a6404144f0ac43423923fdd602": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "74e862d6d7b048b0a1d4abb4880d6964": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_929587584963497286f72bdd918cf664", - "IPY_MODEL_fd2f2ec4391f47f59782ba0baf34a5eb", - "IPY_MODEL_c6b629debd0f45aba80eb2236815affd" - ], - "layout": "IPY_MODEL_78e4841448824470b8b9e7b4f66bf3f5" - } - }, - "75fb43b8863642a4b4435e7819b9eae9": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_c4b37ad42aef4c1c98c2a8e5facc7b4a", - "IPY_MODEL_e4c3053f27bd4b80aecc76aabf38ff24", - "IPY_MODEL_fed7ae2c33224c6b89673e84a462f8b7" - ], - "layout": "IPY_MODEL_77c9f83e46b143c197236e4b53d7d057" - } - }, - "761b9e9b347345b0b1f823c1f043c040": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_4a475b93426d43cfaef83cc1cea3ce8a", - "style": "IPY_MODEL_6958f608332549af90f991ed8da8d670", - "value": " 100/100 [00:01<00:00, 88.89it/s]" - } - }, - "766fa5f27005490d89e8bd38b8f68d05": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_b65c71d14d8248adaf1d0d81f7d58ba5", - "style": "IPY_MODEL_026a0ebee5e34029a355bdf5a895f379", - "value": "Calculating control matrix: 100%" - } - }, - "7709c080bf5b460f8de36f323733c424": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "7737999fdcf64a9489709d612d921cd0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "77c1b2a36f7445e3b4acb0bed35c5004": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "77c9f83e46b143c197236e4b53d7d057": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "77de60b7e44245d2b63e0e38aab04f87": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_1c1debc5129745e29baf3a81c97e34c0", - "IPY_MODEL_6dcab4f9512449d3a559634b46eab66e" - ], - "layout": "IPY_MODEL_77c1b2a36f7445e3b4acb0bed35c5004" - } - }, - "78111d3c097c4989bda0110488f17dbe": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "782ed0337519414b892d6ac5f2cb6de7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "784eb1a60f7b426cbfca0067ce9e019b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "78ddd81445ea4e10a91bee04c0f03835": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "78df1c3c0c9446159c2f85bc9313668c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "78e4841448824470b8b9e7b4f66bf3f5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "78fe6f0ea2c04e2ebe74f9e4faf2dcfb": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "792c30a84a1249899cccc0733028ac25": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_6eee011b0316489a8a83b6954bf59692", - "IPY_MODEL_50d671f2a8624ab0a94e7ee1adabdf35", - "IPY_MODEL_9cdf46dbc8ca4254bd124aa3095a5ed6" - ], - "layout": "IPY_MODEL_10c1d9c03ea84de985c33f1591f1c3ce" - } - }, - "7947688381904cedad91541d6aba0af2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "79750fef65c749108566a70992fda571": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_fbf49844666d43bfb04be6212dc9b267", - "style": "IPY_MODEL_c42963d63a68421a9f721b8a23a5c228", - "value": "Calculating control matrix: 100%" - } - }, - "7a05b9dfcfea4399ae0368082481b5b1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "7a23ebf7388748989db54165609f862d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "7a2d4fadfd5e44b9bcb9cb95e3749740": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_e86b0e2315e14234917b452296f712b1", - "style": "IPY_MODEL_45601dc7b3a24e9a8f50d09241630e6a", - "value": "Calculating control matrix: 100%" - } - }, - "7a4eaf3315454ca1afc4f518dd19b706": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "7c4d49960fd94b27a2af44cad1f60be0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_b0d29cbf316d43628bf732898910984c", - "style": "IPY_MODEL_0ee64a2c9cad44d7866a2e7527126447", - "value": 100 - } - }, - "7c9fd63ee97f4769966936f460b45b88": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "7d5c1059131142738657133a8c6b0190": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "7dcfbc448f8e48a38cf7e52739c31af8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "7e67eddd3f0140d7b6331f25b17e7e9a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "7e7c9dffe4294000b470fda9bef54417": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "7f856489c6ea4bd6b8e2f880003652c8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "8018813271344ad79152df4105e6efd3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_55437d3bdde3437d893021c7fe0ccbd6", - "IPY_MODEL_1338b1d2e6964e0b8404e78cdcb72513", - "IPY_MODEL_c723a4fe9c3b48fca2722ea02c0d4045" - ], - "layout": "IPY_MODEL_3f31b10ae7ee4767be23d33924231069" - } - }, - "8036ff5f82af43dd9c1b1c6c50f64308": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_ebb999ba151d4a90b7917e61dee69ae0", - "IPY_MODEL_315ac1618324496299ae13b0be5220cb" - ], - "layout": "IPY_MODEL_12f88297cccc4cd3897ecbe69b748d93" - } - }, - "804cf1ad2dd94cce898566c27616dc52": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_b84ca7711f754804bb3a0038ce2bd88b", - "value": " 250/250 [01:57<00:00, 2.18it/s]" - } - }, - "8066f84c45164358a2fe87e950ed198a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "8098615e5cbc44959dfabc2507c6e0ca": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_4f4e3c7e60eb4ffd95f57af6b134a44b", - "style": "IPY_MODEL_aefd37ec9f4b4339ba3125df06701502", - "value": " 100/100 [00:00<00:00, 110.74it/s]" - } - }, - "816e595a418b4dffb9936c25a82e684a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "82395f8508b14ad7973864c5ed774cc2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "82b98977e85e46fa8ca94eb42f1d1e59": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "830e9fcebdc1402aa30f066c39b37d7c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "835fc073583440a394db086b060c16ec": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "844add067bd245bea6f60e294f79f2df": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_747ce4b4e9f143aa9ebb6e085cfa01d2", - "max": 250, - "style": "IPY_MODEL_3159e3dd80a74a469916715a432f1754", - "value": 250 - } - }, - "84d4051be5ef499589313bfffe826a4a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "850e7078b2ca4a45b925625235f95307": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_6e835bd595f24bb1869f4e5a64be4edd", - "style": "IPY_MODEL_82395f8508b14ad7973864c5ed774cc2", - "value": " 250/250 [00:02<00:00, 118.13it/s]" - } - }, - "8525b0b0c5bb4e9d94bbcb2b3687d254": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "style": "IPY_MODEL_0b66c16b5b134828a884021f6b750cef", - "value": " 250/250 [00:00<00:00, 361.92it/s]" - } - }, - "8531c2da7d964193bd4bd35a3d76c63d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_700c2b3f5e7b48c1a3588e087ecf3e5e", - "style": "IPY_MODEL_b720d9098a8c48e7bdaa22c67e0fdf89", - "value": " 100/100 [00:00<00:00, 127.44it/s]" - } - }, - "8600b8ecfb354d83b9fe74009afd6cef": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "8681aafa9ae14cc0b71457960a00f91b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_feafc0ba21b04c30bf13087f4db8c9f9", - "style": "IPY_MODEL_7947688381904cedad91541d6aba0af2", - "value": 100 - } - }, - "86cb11835e9d4881a097dcca04af1386": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "880fc2da02ce462dbe44d941b83aecfd": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_29d0588c39e443ceb44edfb1187fe7c7", - "max": 250, - "style": "IPY_MODEL_5ff59a9d5ca04c38aaf6dd6ea6854e13", - "value": 250 - } - }, - "883a035272984632a334a733edca7595": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_0aab098963be4f97a02b66b7c4f2d1eb", - "IPY_MODEL_0aad69b5f27940b39e13230e0ab4ddbf", - "IPY_MODEL_ab334ae9691349848ee2d03b6b4fb957" - ], - "layout": "IPY_MODEL_01ed40322eb24cd0a1ee5af414affb09" - } - }, - "89624bda6cd74d86a02e991e61aae4de": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_d60201a4e93d40de9d340a0208aeae02", - null, - null - ] - } - }, - "8a3cca53bdcd4e2ab16e888b79c5cd81": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "8a4b1dd95b01415eb4e85d98d47233bd": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "8a7bc64543284a8895a4e3de44eac4fd": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "8a8c899ebc4b49aabaf78c5b9a2263ff": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "8ac96d553e4648d6af976b4293f626c3": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "8aed3ffc51f84fb6bd4f57b526b34af2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_2f659440686b4b6dbcba0729f1e8950c", - "style": "IPY_MODEL_2382303f767341dda8a67c679c4eec78", - "value": 100 - } - }, - "8b2de5752c22405ca04b533f777d9e41": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_0e156a83465b46338575c33a25f4d4a1", - "max": 250, - "style": "IPY_MODEL_a4610407076647bea2b14b8e13231637", - "value": 250 - } - }, - "8b9bb33ae0a04f609f7ee6b12afc45e5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "8bc1ef0f68c4406cb4351dfe1d13374d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_6132a7c8cbe74a1396a5dc8984b0ad91", - "IPY_MODEL_f820ad6b70cb48648defcc94f745a951" - ], - "layout": "IPY_MODEL_835fc073583440a394db086b060c16ec" - } - }, - "8bfa98ad8c4245549c8cf0c025fa39d1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_1ec61ffd0c1c4e45b47380e1fecaaf56", - "style": "IPY_MODEL_3cb0e200d037462e906248dd9bbec13b", - "value": 100 - } - }, - "8c090ca1fb234f1cae4b1a1ec3690bd1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "8c389db926684d8394ea504534d414ce": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_b0923b86539a4710976d864a04a136ac", - "style": "IPY_MODEL_e2452189541c4312b604fd9af24b9ad3", - "value": 100 - } - }, - "8d28d2936aca40298505f6d7534483e3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "8d5b57a7159845b9a92fdcabe15199e5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - null, - "IPY_MODEL_5fe50ad3f3a24c5980ecdc445e8e5a4d", - null - ], - "layout": "IPY_MODEL_0b5a7c29ad434c29b2835c184e9408fc" - } - }, - "8e018b64550840318ccda9016befbd1c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "8e17e87bcc1741618de6452d0241cc49": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_6e56dae183e445b383345a979943d7b5", - "style": "IPY_MODEL_06b4c6ec622f41c5a2c91a59fa78c4aa", - "value": " 100/100 [00:00<00:00, 357.73it/s]" - } - }, - "8eef468e64a34ae68b425d16a191c813": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_f19f32564d6c4fe386e7efa28b809e11", - "style": "IPY_MODEL_4accb4a202004de1bb9d750d430fec12", - "value": 100 - } - }, - "8f45fdd6562a4895bc55942df1200d65": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "8f9333287015412ab088ee5027e99d02": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_6e750e9fbb9b43eb9521bec72679df49", - "IPY_MODEL_9e8069212c1e4acebd29a49f834a6889" - ], - "layout": "IPY_MODEL_3b5d0285e48245e9a2e99f0295cbf1ce" - } - }, - "8f9a0f69399b409d9b98076ad57a8f9e": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "8fc1aff1588e49a980af284d87f94e5d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "90f88152dfbe407ba29e7953968135f5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "917c81ca2a5d4e06881aae07fed57789": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_e195764e1619408099f071bbc124560b", - "style": "IPY_MODEL_5929ff5c99f5460bb21a9b0117c5df08", - "value": " 100/100 [00:01<00:00, 84.23it/s]" - } - }, - "9186df8a4413462e9b947221f861d7e6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_b66f081ae54d434c82797a15252a967f", - "max": 250, - "style": "IPY_MODEL_141d02f5d71646d0bc9ab3c79ed9f238", - "value": 250 - } - }, - "92482891be7547ac9176c72d94352566": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "924f9bb0bd0247acb04c9b2f4105f5a2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "929587584963497286f72bdd918cf664": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_8f45fdd6562a4895bc55942df1200d65", - "style": "IPY_MODEL_7737999fdcf64a9489709d612d921cd0", - "value": "Calculating second order FF: 100%" - } - }, - "9359c436439642b282448dcd1145791e": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "9392f45f1f1b435c841e50189285f354": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "93b33f36e38143cf86d0fa9672992231": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "9421be15f0d241428aff5b3813dac69d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "94d292c3367042009183a78dcbd506c2": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "94f0855b6f73410f982b8b56427443ba": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "951ab5a32e2e4fe2b5d6a3bd4ac2fdfa": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "958d658b6f47417c82bcff2f88415e6d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "963aed27165b4dc2b70ede9b69730d59": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "9699e12882af47f2a5968bd14eb157f5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_79750fef65c749108566a70992fda571", - "IPY_MODEL_8aed3ffc51f84fb6bd4f57b526b34af2", - "IPY_MODEL_ad51cb41da1744159db0b99ccf2ac245" - ], - "layout": "IPY_MODEL_90f88152dfbe407ba29e7953968135f5" - } - }, - "96cec666c257494684f2d83db6d12d6a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "97bd59be80c44225a08731c052509caf": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_22c54625328545f69ae32b099369833f", - "style": "IPY_MODEL_2ac4aef7096a49239cfc9206588456c2", - "value": " 100/100 [00:00<00:00, 351.85it/s]" - } - }, - "97db951ebd9a49cf85c165884edb6cc2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_d12a066e3963409592caec6904338839", - "style": "IPY_MODEL_4ecca4c819004f9cabf128bb67904abe", - "value": " 100/100 [00:01<00:00, 85.77it/s]" - } - }, - "98c61252c52c4104a9f9e17ac4d51567": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "993a1cc1ebaf485399c89e2c61c60e7f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "99443efc616949ab86ab02eb91c5430b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "995fac42aac9406c975352b48f959f02": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_7165026565ae45ab977218c73869f84d", - "value": 100 - } - }, - "998508aab87245e9b117527dc9eb6e5d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_4655a9b9c6104dbf85a486a272ccbe4d", - "style": "IPY_MODEL_7a23ebf7388748989db54165609f862d", - "value": " 100/100 [00:00<00:00, 178.37it/s]" - } - }, - "99e11daf3ea643049b281e943dfd629c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "9a06eb74da6743baa49644a7b3d759bf": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_8b2de5752c22405ca04b533f777d9e41", - "IPY_MODEL_b256b5e561fc4b88be14d1c1bb74b402" - ], - "layout": "IPY_MODEL_202c8186c22b4f2b9332a7f6cddefc37" - } - }, - "9a7ddfe17a3e45d6b0317951abd398c2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "9b4d7ca807854a46b5b4de4f4d4a9473": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "9b5eaab1728a4c919489f25af0e54c33": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_e410d0f51e644e978d5887ed06676790", - "style": "IPY_MODEL_8066f84c45164358a2fe87e950ed198a", - "value": 100 - } - }, - "9caa8fecad7e442c8b5d6dae0912a9f2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_6fa2b1b81ea94f6ab09394d6cb551722", - "IPY_MODEL_40321705ee6e4bb4bc7c2ec0d6304b39" - ], - "layout": "IPY_MODEL_3d35d6c230764319b4098894a3dac49e" - } - }, - "9cbc19fa6e53447ba7646c1d6a410046": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "9cde7904e4de41178d76c4be4105fc74": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "9cdf46dbc8ca4254bd124aa3095a5ed6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_a8517f07711d42a3820eec54bc66951a", - "style": "IPY_MODEL_da50f8a85fe44621b6dcc3a09a0f1111", - "value": " 250/250 [01:28<00:00, 2.92it/s]" - } - }, - "9e0392fd372244a9990b83d444e9d171": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "9e0b0cf1e755466c8c6f3e42208f31c6": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "9e8069212c1e4acebd29a49f834a6889": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_bbb7cc6b84904458a5f8d8e08809d207", - "style": "IPY_MODEL_24422e798d3047c78ee310e38d8b8aaf", - "value": " 100/100 [00:00<00:00, 117.00it/s]" - } - }, - "9e81469362b14650974cd73629ce3c09": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "a02215daecd74ee58f17b329fb4b8c53": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "a02b3505b1f74d0d96d3f8dc4299d340": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_0e725523fc7841e89cd75adcf503af69", - "IPY_MODEL_ad116e781c464aeeb4eb8a7be6518c32", - "IPY_MODEL_6186a2af70044506ae119e0fea7e9e76" - ], - "layout": "IPY_MODEL_2b3c400ffd1144cd83f6bb5a4e249d11" - } - }, - "a0df6b17d69648fbaaf5b720bab40c59": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "a10afc1b522845acba9547e2986b74ea": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "a223e4bac43c47aba19b0e5a770a6e8c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "a263f58f67a647969d9af92f6e72e370": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_7d5c1059131142738657133a8c6b0190", - "style": "IPY_MODEL_c40080a310694c87b0322fb16db06dec", - "value": 100 - } - }, - "a2b08f024e77437cad2a81300488bd40": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "a2df15e179ed46cda22a4091ffb4f02b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "a3e58be2e6ff464486979ab77532ddf4": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "a4610407076647bea2b14b8e13231637": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "a54dce274b83448ea06167a7cd76e5da": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_a7d70933a84a41e1b10b1d8eb29db034", - "IPY_MODEL_a93e2e8c820d494d947971f5cacd4434" - ], - "layout": "IPY_MODEL_1c6278daa22e4d6b862b591ad251ed80" - } - }, - "a55324c8c94346b68b0aeae577e1191f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "a6309be279874682ba5fbddf508cd50f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_ad2d08d851ca435fad71228bb078f964", - "style": "IPY_MODEL_f9c4e1ee6c324211845bb9e9beb0ced1", - "value": 100 - } - }, - "a673226356254e88a9f6515156102b7e": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "a7307e2a0fe94b2ebca6465ee403765c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "a7517a5498824d1a8563a67516a2bb1b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_0d0af1d9f26249d789b656c4b04fb6f8", - "style": "IPY_MODEL_9e0392fd372244a9990b83d444e9d171", - "value": 100 - } - }, - "a757590ac14042149b0f0a3a653e0a23": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "a7a1af0e604f41d9969aae232c3daeef": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_cb62adbf47c04999914a90461bcf4d75", - "style": "IPY_MODEL_16ef17e099c14aca97e8458009d90de5", - "value": "Calculating control matrix: 100%" - } - }, - "a7d70933a84a41e1b10b1d8eb29db034": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_b9ebb066e82f472db52264372cbc4c45", - "style": "IPY_MODEL_ef0d0e1104534626ae5992b10ab18c0c", - "value": 100 - } - }, - "a7e5ee9750d54f088403f522ca214ba3": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "a7fc8d30a150407c884518a75aad95f4": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "value": " 100/100 [00:50<00:00, 2.04it/s]" - } - }, - "a80d58b901b64bbf89195764269b534d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "a8517f07711d42a3820eec54bc66951a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "a896fc57e9724a71ba7e8048f213f604": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "a8c86c35cf554615b463bc5c239fa7e8": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_9186df8a4413462e9b947221f861d7e6", - "IPY_MODEL_53b534c64fd14a39a46ed8342c6693d4" - ], - "layout": "IPY_MODEL_cf12eef862c74166b783bc7d4dd014ab" - } - }, - "a93e2e8c820d494d947971f5cacd4434": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_67f96117df3848e6b580ced07d127057", - "style": "IPY_MODEL_a0df6b17d69648fbaaf5b720bab40c59", - "value": " 100/100 [00:01<00:00, 68.36it/s]" - } - }, - "a9f7ad488d744028aac8e5b03f1c4f3d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "a9f8f5cdb2144e13b7f1f0552a29b5e2": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "aa8bfb626427457da266819c03775988": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_7a2d4fadfd5e44b9bcb9cb95e3749740", - "IPY_MODEL_1d1cabb625964e8d9b85ff238db0605b", - "IPY_MODEL_c4eb58b44de64170b83ab246087208fd" - ], - "layout": "IPY_MODEL_4e375f1a48054d95961e4dd1a7cacdc0" - } - }, - "ab13f6d297324b3cabc7582ccba237a7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "ab334ae9691349848ee2d03b6b4fb957": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_7202b95253c44edbab209dc42dc20f2c", - "style": "IPY_MODEL_d15043d9f658460f906631e7035c8e74", - "value": " 100/100 [00:53<00:00, 1.90it/s]" - } - }, - "ac1245348fe1475785d419dba0beed59": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "ac51a214d70543889492a82cd8b9237d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "ac5da51da4c4463aa50cc5b398dbf31e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "ac6ed85234924dc5adc05a6eabd4b1a6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_b032c3a7fac34ca1be5729971dc64079", - "style": "IPY_MODEL_ab13f6d297324b3cabc7582ccba237a7", - "value": 100 - } - }, - "ac7831722c3f464cbeab84209314a974": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "acd60aa990f748bbb080ed9baccd3311": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "ad116e781c464aeeb4eb8a7be6518c32": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_c796a211e55e4f33bc322cd19d9568cd", - "max": 250, - "style": "IPY_MODEL_c08a2611bfd3415ba1a6ddd846480853", - "value": 250 - } - }, - "ad2d08d851ca435fad71228bb078f964": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "ad51cb41da1744159db0b99ccf2ac245": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_663e694e59ab4b76a2731b41bab7bcc6", - "style": "IPY_MODEL_84d4051be5ef499589313bfffe826a4a", - "value": " 100/100 [00:00<00:00, 313.97it/s]" - } - }, - "ad742738ab524e108cbcaa8e7a822636": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_c8dd887d7a134ef29c0071a33bf6ea2a", - "max": 250, - "style": "IPY_MODEL_cdc200fb1f4f42bf8d8a987f073ea7ad", - "value": 250 - } - }, - "ae7f3ab61aa74acb91f9b4532c82a72b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_27bfff18cbd74467b765a4c88cc64720", - "style": "IPY_MODEL_0eb65048a28a441aad0d68ff0de60c1c", - "value": 100 - } - }, - "aefd37ec9f4b4339ba3125df06701502": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "afa11ea71fbe4b6a8baef755f1bcfc64": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_b090a8eccffc46c7afcbdf38f00eb613", - "style": "IPY_MODEL_8d28d2936aca40298505f6d7534483e3", - "value": " 250/250 [00:00<00:00, 485.02it/s]" - } - }, - "b032c3a7fac34ca1be5729971dc64079": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b090a8eccffc46c7afcbdf38f00eb613": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b0923b86539a4710976d864a04a136ac": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b0d29cbf316d43628bf732898910984c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b256b5e561fc4b88be14d1c1bb74b402": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_9421be15f0d241428aff5b3813dac69d", - "style": "IPY_MODEL_57777a8c741f4a208eda0778acac8690", - "value": " 250/250 [00:00<00:00, 322.78it/s]" - } - }, - "b2d9909392b340469c5bcb557faff817": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b30e488103394245aa08e1b2bfc6b952": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_c1bfa656d8454b2bb1bb956330f7d4c5", - "style": "IPY_MODEL_f4eae7193e494a3ea4a01bec535e5db9", - "value": " 100/100 [00:00<00:00, 115.12it/s]" - } - }, - "b31f3beb418d41c8ae04c7d19a1940f9": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_c1d77d0ce6884e2eb8a76d114a266834", - "IPY_MODEL_ae7f3ab61aa74acb91f9b4532c82a72b", - "IPY_MODEL_172d233066ea42ce906ac1f94f60210d" - ], - "layout": "IPY_MODEL_cf88291907014f5dbf504c03e6cb96c9" - } - }, - "b3264de47b224173b230089fc599d5ac": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_2b5b27491e9a49acb38a776a711f0ca0", - "style": "IPY_MODEL_4b4b017086af4f50a7b1cca19e109105", - "value": " 250/250 [00:00<00:00, 345.71it/s]" - } - }, - "b6513dd2b42540a9a05cbd199ef8f4b0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_f740bae29d1f4e17ba1f51e6f0203a8b", - "style": "IPY_MODEL_bae082946b6f4c32b463660d363610cc", - "value": 100 - } - }, - "b65c71d14d8248adaf1d0d81f7d58ba5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b66f081ae54d434c82797a15252a967f": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b720d9098a8c48e7bdaa22c67e0fdf89": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "b81fa075c4c04356a556830caa8612e6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_8c389db926684d8394ea504534d414ce", - "IPY_MODEL_e3533eace32b420492a483aa356ebd8e" - ], - "layout": "IPY_MODEL_2c7d17ecfd044d7aa45e5f2bd957611d" - } - }, - "b833b7f847cc4933874817fb426bc0fe": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "b84ca7711f754804bb3a0038ce2bd88b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b8efcbe25a1a48e98aa776f57b5c0362": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b9ebb066e82f472db52264372cbc4c45": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "ba856ee5323e43268700485c2eef63de": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_c0e01d1124914dc484aee2f0ed3c1488", - "IPY_MODEL_917c81ca2a5d4e06881aae07fed57789" - ], - "layout": "IPY_MODEL_a7307e2a0fe94b2ebca6465ee403765c" - } - }, - "bae082946b6f4c32b463660d363610cc": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "bb92eef28b5849ebae21c5631be55b03": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_a673226356254e88a9f6515156102b7e", - "style": "IPY_MODEL_924f9bb0bd0247acb04c9b2f4105f5a2", - "value": "Calculating control matrix: 100%" - } - }, - "bbb7cc6b84904458a5f8d8e08809d207": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "bbb9f53916e2410fa23cad4206e9ab57": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "bbd6955e3db4427faf6c46bfca20d5da": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_a7a1af0e604f41d9969aae232c3daeef", - "IPY_MODEL_5322e98213904a88a03b058f07769860", - "IPY_MODEL_cb5cf58920af45f8b07bc8189f0660ad" - ], - "layout": "IPY_MODEL_3b919e7a05424b84b78742d289e4860d" - } - }, - "bbe821e812e54f7c813e7898ac7f8b80": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_9cde7904e4de41178d76c4be4105fc74", - "style": "IPY_MODEL_ef85d932ff724922b9ddad7a7987a58a", - "value": "Calculating second order FF: 100%" - } - }, - "bbeefa75c2d9454d86c5ac1c0758dc88": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_d991b67421ed4f3d90756301574a2cfe", - "style": "IPY_MODEL_d377f26d3dd24a469570ea7573b61a69", - "value": " 100/100 [00:46<00:00, 2.11it/s]" - } - }, - "bbf789830e864be1bc664b2f678e2bde": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_a263f58f67a647969d9af92f6e72e370", - "IPY_MODEL_97db951ebd9a49cf85c165884edb6cc2" - ], - "layout": "IPY_MODEL_8a7bc64543284a8895a4e3de44eac4fd" - } - }, - "bc1e1b084aa2408585c8b139a8904dda": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "bc8344969d014a00a92550b15df5a6bd": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "bce866c3594648248788881efe92a5cb": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "bd3bb35d95e24ea1b43270c7a8ad27e4": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "bdcea95ee73449f2a4bf4dd6e1ecc90f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_766fa5f27005490d89e8bd38b8f68d05", - "IPY_MODEL_5bd6e045b18c47c3aaa288fe49e53f7a", - "IPY_MODEL_d097167c990049eb943f0b0d01336793" - ], - "layout": "IPY_MODEL_db13657881c94a44b09db2b58ff45d56" - } - }, - "beb0cd7f1d514f8b91a017a2d3b23c86": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "bee3bfb534f44c4cb36b76fb431aff78": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "bf4a3cf7848743d495263ed148aea7d0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_51668696af73439180375526aaa5f650", - "style": "IPY_MODEL_0a57c2cef4454d2b83ba1534c9d0eaf3", - "value": " 100/100 [00:00<00:00, 107.13it/s]" - } - }, - "c074b9fd544741d38dd138fd44172265": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c08a2611bfd3415ba1a6ddd846480853": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "c0e01d1124914dc484aee2f0ed3c1488": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_16ec94eb78a04ddf82d79163a7b8ff30", - "style": "IPY_MODEL_3ce9a3a9974e432c9bdca5c91bc2b0ec", - "value": 100 - } - }, - "c12bf8b90bfb4f7f98e845ef96e2940a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c19e5d8b85b2421393ed4e51e45e746a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c1bfa656d8454b2bb1bb956330f7d4c5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c1d77d0ce6884e2eb8a76d114a266834": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_ca6cfc93fc9940408387a4925378213d", - "style": "IPY_MODEL_45700ddd578d44e581a13b2612b26f92", - "value": "Calculating control matrix: 100%" - } - }, - "c26a5d3bde5f43639259d7cc788437db": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "c31cbba52a3441b3aea975f7e7b6d5ef": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "c321c6bcc3b248feb7e8ed585c213e53": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c3fe8ebeb6604615897c1821e712dd72": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_880fc2da02ce462dbe44d941b83aecfd", - "IPY_MODEL_850e7078b2ca4a45b925625235f95307" - ], - "layout": "IPY_MODEL_e51f56c3c99847828cc1e8cf25f40638" - } - }, - "c40080a310694c87b0322fb16db06dec": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "c404509b99854e19b01077cc6eb55c78": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c42963d63a68421a9f721b8a23a5c228": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "c4b37ad42aef4c1c98c2a8e5facc7b4a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_15b27475dc7744bf888ca818318e73aa", - "style": "IPY_MODEL_d3ede07c454d494592db6dcdd3fd51e2", - "value": "Calculating second order FF: 100%" - } - }, - "c4eb58b44de64170b83ab246087208fd": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_52235c7dc56e4758be2d939600c8453a", - "style": "IPY_MODEL_fa3076a1f46c42cdaf403e954636a5a3", - "value": " 100/100 [00:00<00:00, 350.38it/s]" - } - }, - "c4edacd29adf4312a11aedb8c60e295a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c64ae15a945545a59c8bda87519908b8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c6582a1c23ce414a8dec2798f4094a82": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_6cc4fb75420c40b2b74bbe140cd668b2", - "style": "IPY_MODEL_71798a282f35446b9eba008883d20ff6", - "value": "Calculating second order FF: 100%" - } - }, - "c66106f8bf1d4899ba07a247857ba158": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "style": "IPY_MODEL_472fea1d3efd4dd0bceb8df02e42577d", - "value": " 100/100 [00:00<00:00, 372.86it/s]" - } - }, - "c67a31fc7b174212b98c26e416a5c9d8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c6b629debd0f45aba80eb2236815affd": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_7e67eddd3f0140d7b6331f25b17e7e9a", - "style": "IPY_MODEL_e67e41125ac046f2b985e308babec027", - "value": " 100/100 [00:56<00:00, 1.83it/s]" - } - }, - "c723a4fe9c3b48fca2722ea02c0d4045": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_2885137c2fff48beba10cb5a29b1862a", - "style": "IPY_MODEL_052391c04da8415e9c21ab04c8fda939", - "value": " 100/100 [00:00<00:00, 457.79it/s]" - } - }, - "c74604a1362d47c1aa834e2ccd82fd7e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_46099b9fe32047feafe5e68e887e5ec4", - "style": "IPY_MODEL_7a05b9dfcfea4399ae0368082481b5b1", - "value": " 250/250 [00:00<00:00, 373.58it/s]" - } - }, - "c7548c2dca9b423eb78ec894beea527d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_9e0b0cf1e755466c8c6f3e42208f31c6", - "style": "IPY_MODEL_4183d6129a4a4bb3a2b0cde8dfa5638d", - "value": " 250/250 [00:02<00:00, 101.53it/s]" - } - }, - "c796a211e55e4f33bc322cd19d9568cd": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c798f23cda604a46ae01ec410a94e6a4": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "c7ac4cd5707348bf841660810e10ebf7": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c7e4aa8fdaf44cd5bb7201f25d8d94e7": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c8096f1a51974add97294fa9ad460159": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "c81a5197e41943e98ca9039dc4a96bde": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_f13e62871f22488ba5c5547fec20f4a7", - "IPY_MODEL_204107b2588047888e29ebdd194463fd" - ], - "layout": "IPY_MODEL_18a20af20939462e845d0f6650990b86" - } - }, - "c847084bed17477f83ac7efcc7a06009": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c87a9bcc2a5541a185ccc63601b53d8a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "c88f7e9fb92348fea3172e2a3841451d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c8dd887d7a134ef29c0071a33bf6ea2a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c92f7c19c3d942e691856a81062d8ce8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c9b86cefc55f48d187b5491695a8f8ae": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c9f31fde670e443ea67a1208be9b9680": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "ca00bb03fd8c40ae963ce20d9cbfcd28": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "ca1f008b05c74812a7ded0e74abd1266": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "ca67935220a045eaa0b8a823d1aede6e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_99443efc616949ab86ab02eb91c5430b", - "max": 250, - "style": "IPY_MODEL_4f1249a6420944c1a50918acce9150da", - "value": 250 - } - }, - "ca6cfc93fc9940408387a4925378213d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "cb5cf58920af45f8b07bc8189f0660ad": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_d7736c47b46e411a9f1bb889a56dd6c3", - "style": "IPY_MODEL_f2b102211c914dcd886d9bfa5e57ba28", - "value": " 100/100 [00:00<00:00, 400.69it/s]" - } - }, - "cb62adbf47c04999914a90461bcf4d75": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "cc84a102f36a4f818b4b17b1fe26eebd": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_26f0a9d8d6774b81a6f149a4de8722d0", - "IPY_MODEL_cdb0d16b12ef49e5bf6d3a5cbd73b122", - "IPY_MODEL_5a64cf9283714b3ebf0757d791bbe1f2" - ], - "layout": "IPY_MODEL_7dcfbc448f8e48a38cf7e52739c31af8" - } - }, - "cd3e5da805054b53acb03a63b2347744": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "cd4de010c8884d48a835786bdcda5df7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_2b7faa2b0e6746d0a10806ddc0637710", - "style": "IPY_MODEL_3fc263341c704421a200a32e87f392e0", - "value": 100 - } - }, - "cdb03500d95d427fb2019f8e972460e2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_a9f8f5cdb2144e13b7f1f0552a29b5e2", - "style": "IPY_MODEL_9a7ddfe17a3e45d6b0317951abd398c2", - "value": "Calculating control matrix: 100%" - } - }, - "cdb0d16b12ef49e5bf6d3a5cbd73b122": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_464ab3ea5cc742ce9a133efd41371656", - "style": "IPY_MODEL_cf8ab2667d494736b7bcddc6f501f3bd", - "value": 100 - } - }, - "cdc0251521304ac895defa81b4be5436": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "cdc200fb1f4f42bf8d8a987f073ea7ad": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "cdd02f6ff3694c9a81b8d9769a48a4cd": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "ce7f226541cf442b9dea590a5f637d70": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "ce983f0c27794250936197b9a008a87d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "cec74829c2954e11beda9c0a54d82d37": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "cf12eef862c74166b783bc7d4dd014ab": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "cf180db0f3dc4085be49201499b78c82": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "cf88291907014f5dbf504c03e6cb96c9": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "cf8ab2667d494736b7bcddc6f501f3bd": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "cfc3359738e84081a4c79ff1d4e223f7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_7301155b6daf455fb8abe805fa3b21fa", - "style": "IPY_MODEL_1ba68064be4c472bacc321bd0fde5e77", - "value": "Calculating control matrix: 100%" - } - }, - "d097167c990049eb943f0b0d01336793": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_d3f2823bc6f64374ad32066538bae2ae", - "style": "IPY_MODEL_9e81469362b14650974cd73629ce3c09", - "value": " 250/250 [00:00<00:00, 392.61it/s]" - } - }, - "d11af2e516de469a9feb2449098700b3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_e1b12cb7615f442c802bfec0c1fe71c5", - "style": "IPY_MODEL_99e11daf3ea643049b281e943dfd629c", - "value": 100 - } - }, - "d12a066e3963409592caec6904338839": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d15043d9f658460f906631e7035c8e74": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "d166ec093116495881c7d9922c395c52": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_63d9bcdec28d45b29fb9276841c871c4", - "IPY_MODEL_b6513dd2b42540a9a05cbd199ef8f4b0", - "IPY_MODEL_2bac32339b2b47f5b6f79239dd1839a1" - ], - "layout": "IPY_MODEL_8a8c899ebc4b49aabaf78c5b9a2263ff" - } - }, - "d174ff26283045f9b90986b63e202f61": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d23d505e256a469c87f876003bf63d18": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_0a30bf14d753406586282e4b4a69fb67", - "max": 250, - "value": 250 - } - }, - "d2bcb05e829c4b40882e553d02fc0a7a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_8bfa98ad8c4245549c8cf0c025fa39d1", - "IPY_MODEL_13d35562a1c048e5aa0ffdf5173970f2" - ], - "layout": "IPY_MODEL_085887f8de8040d99e5cebbbae12e655" - } - }, - "d377f26d3dd24a469570ea7573b61a69": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "d37c889259e2477e929b73d6f20fe676": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_8600b8ecfb354d83b9fe74009afd6cef", - "max": 250, - "style": "IPY_MODEL_beb0cd7f1d514f8b91a017a2d3b23c86", - "value": 250 - } - }, - "d391d232c8fa421bac71e3d1376e7f4d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d399bd2369cf44faa80bbf1838e04f55": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d3ede07c454d494592db6dcdd3fd51e2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "d3f2823bc6f64374ad32066538bae2ae": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d41073d6eeaf44da9d61c9fbbc1e1c7e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "d50164f16b244052af6a16528da700ec": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d55a3ec09318405681c2d3683e4832d8": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_5135fbf9aac642e6bafbd64bd2bf3f43", - "value": " 100/100 [00:46<00:00, 2.25it/s]" - } - }, - "d5b366f0bac446a586b3d925f038ae18": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d60201a4e93d40de9d340a0208aeae02": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "value": "Calculating second order FF: 100%" - } - }, - "d61726aaf7f440a1ab09a1bfeafeefe6": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d6462493a1a049a3a78635d83ad87fe7": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d665e157cc684fa59e8115ee4430be55": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d7736c47b46e411a9f1bb889a56dd6c3": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d7a767083a254490afd09ce8a1a0a3cd": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d7e3a79a322c40dfb1a9f92f597f7f7c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_c847084bed17477f83ac7efcc7a06009", - "max": 250, - "style": "IPY_MODEL_9cbc19fa6e53447ba7646c1d6a410046", - "value": 250 - } - }, - "d8a1b01b2a6d4080aae5c7ab86410843": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "d8fb2a7b4ba548bd95e5572259451725": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_6f200be46f2141f68779b0a8dbeefda4", - "style": "IPY_MODEL_c87a9bcc2a5541a185ccc63601b53d8a", - "value": "Calculating control matrix: 100%" - } - }, - "d936cf5b5abf4766b766318199df39a6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "d991b67421ed4f3d90756301574a2cfe": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "da50f8a85fe44621b6dcc3a09a0f1111": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "dae77b22e1b943328e86c19b9cff1356": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "daf5f758aa5c45129dbaa8f94551bbb4": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "db04f726b4d7450b8403b626d365a70d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "db13657881c94a44b09db2b58ff45d56": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "dbfe9488e215404f86597e2db96fc41d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_d665e157cc684fa59e8115ee4430be55", - "style": "IPY_MODEL_a10afc1b522845acba9547e2986b74ea", - "value": "Calculating control matrix: 100%" - } - }, - "dd4837efa82e412cb8a9ff734900ca94": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_19ae6d32aabc40de8ba1cefa1c0953cc", - "style": "IPY_MODEL_2d0dae1e3fe747acb5084077d48a5a88", - "value": " 100/100 [00:00<00:00, 318.60it/s]" - } - }, - "ddfb4c6051da4663910413a90828edc2": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "dea9efba30824a419ff15eba2782b521": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "dec28044fe5241f3a0a87373619528bd": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_d6462493a1a049a3a78635d83ad87fe7", - "max": 250, - "style": "IPY_MODEL_d41073d6eeaf44da9d61c9fbbc1e1c7e", - "value": 250 - } - }, - "e073898a0d0148bbbb4f4d021e2465a3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_f7d4b3f898014eb7aeeba3cc50944f67", - "style": "IPY_MODEL_78df1c3c0c9446159c2f85bc9313668c", - "value": 100 - } - }, - "e11fd38e03a1463da7b32a07f11291c7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_f8e6da6c52fa46c38bffa320e46065e6", - "IPY_MODEL_b30e488103394245aa08e1b2bfc6b952" - ], - "layout": "IPY_MODEL_10f9f84005604195a65826baa8f5ce0d" - } - }, - "e1792371b22344a3b32c7a003337636e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "style": "IPY_MODEL_bbb9f53916e2410fa23cad4206e9ab57", - "value": " 100/100 [00:00<00:00, 346.30it/s]" - } - }, - "e195764e1619408099f071bbc124560b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "e19d61a022d543889a4920e25fd360bb": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_e43b614a4c05402ab39347c45ec29287", - "value": "Calculating second order FF: 100%" - } - }, - "e1b12cb7615f442c802bfec0c1fe71c5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "e1cbf2cbf5c4440c8c064b6eca95b383": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "e1f3ca6c5fb4467c985be6bde6a550f6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_bb92eef28b5849ebae21c5631be55b03", - "IPY_MODEL_27552bd371364250a134c8c56d087717", - "IPY_MODEL_3d66ee227eeb4b8b8c77a821e91f5a16" - ], - "layout": "IPY_MODEL_47f25fc200d24f068ecd6fe495d5df5c" - } - }, - "e2452189541c4312b604fd9af24b9ad3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "e3533eace32b420492a483aa356ebd8e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_1a72225bfa1c4f6c98a1a53385ca7d5c", - "style": "IPY_MODEL_958d658b6f47417c82bcff2f88415e6d", - "value": " 100/100 [00:00<00:00, 107.70it/s]" - } - }, - "e3d363e6f39041358b34b072b11473ba": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_6712341e92fd4eca96190e51d2b47479", - "style": "IPY_MODEL_fd3b104f4cd742ef8283cabd35778a3e", - "value": " 250/250 [00:02<00:00, 104.19it/s]" - } - }, - "e410d0f51e644e978d5887ed06676790": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "e414601f19b54a8fa69f5969d450d68a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_d8fb2a7b4ba548bd95e5572259451725", - "IPY_MODEL_d37c889259e2477e929b73d6f20fe676", - "IPY_MODEL_5d76382b204547ac9fc0f216a1f7af78" - ], - "layout": "IPY_MODEL_fd0f19709ac3402ea1d591d1afadc3cd" - } - }, - "e43b614a4c05402ab39347c45ec29287": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "e4c3053f27bd4b80aecc76aabf38ff24": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_47e317cd69614c74bbbb936f7aff5437", - "style": "IPY_MODEL_e6853e878fe64639a968c38a866d759d", - "value": 100 - } - }, - "e51f56c3c99847828cc1e8cf25f40638": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "e550b83f3d1342a589555b9ea5fff6c4": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "e5ebafdb8e4a4949842d3eb2415b1008": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_4f53e78928944596ae655bb7601be04c", - "max": 250, - "style": "IPY_MODEL_2b1db76992fc4aeab66647f3c1256c92", - "value": 250 - } - }, - "e6419211aba0471d8401b705ecc233ba": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "e66453e743054dedb04adb9877e8708c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "e6725e1448a84ef3937c7139da7fc192": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_7c4d49960fd94b27a2af44cad1f60be0", - "IPY_MODEL_077dbd79885945fba8d4c40032f33716" - ], - "layout": "IPY_MODEL_ac51a214d70543889492a82cd8b9237d" - } - }, - "e67e41125ac046f2b985e308babec027": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "e6853e878fe64639a968c38a866d759d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "e6deabb3392040c282c712aefc0e08d8": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "e7a2dbafa4034b27a80a70938b8116fe": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_0b0b723302134f82b6c2bc9d03109257", - "style": "IPY_MODEL_515749e2b24046db8cff3aa6cbf14d65", - "value": "Calculating control matrix: 100%" - } - }, - "e7aff010b8aa4c1d8f33053fa4a208ce": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_96cec666c257494684f2d83db6d12d6a", - "style": "IPY_MODEL_ac1245348fe1475785d419dba0beed59", - "value": "Calculating control matrix: 100%" - } - }, - "e86b0e2315e14234917b452296f712b1": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "e92bcb3a21c64781ae83bc53789bda46": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_dbfe9488e215404f86597e2db96fc41d", - "IPY_MODEL_ac6ed85234924dc5adc05a6eabd4b1a6", - "IPY_MODEL_6658b7b5e6004e6ca781f0c32a38c561" - ], - "layout": "IPY_MODEL_c88f7e9fb92348fea3172e2a3841451d" - } - }, - "ea53e40fa0ae470c944633c4fb807836": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "eb2ca4e4eabc49e5bec6d877ff0f6aa1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_147a75f63b9f41998ec3e61a67b19f58", - "style": "IPY_MODEL_a02215daecd74ee58f17b329fb4b8c53", - "value": " 250/250 [00:01<00:00, 203.52it/s]" - } - }, - "eb911820fd7b4287a72a7343806d08b4": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "ebb999ba151d4a90b7917e61dee69ae0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_8fc1aff1588e49a980af284d87f94e5d", - "style": "IPY_MODEL_8c090ca1fb234f1cae4b1a1ec3690bd1", - "value": 100 - } - }, - "ec4f4e8d26f04171b96e62b579c51724": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "ecb8d338d3044f42b2e6284385b9b141": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_e5ebafdb8e4a4949842d3eb2415b1008", - "IPY_MODEL_f0c69fa9ec32410e83140f8bd6f14924" - ], - "layout": "IPY_MODEL_504df4491dfe4de9a6f0cb6a83c4acdd" - } - }, - "ed5e25dec46b4d2fb51a8ea59d0d8a44": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_cdb03500d95d427fb2019f8e972460e2", - "IPY_MODEL_ad742738ab524e108cbcaa8e7a822636", - "IPY_MODEL_afa11ea71fbe4b6a8baef755f1bcfc64" - ], - "layout": "IPY_MODEL_d5b366f0bac446a586b3d925f038ae18" - } - }, - "edbd3b05bbdc493090132eef01ede114": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_03e89ad9308543d980cf86c3d20a70cc", - "style": "IPY_MODEL_6c08d70a1ec949e6818e74945aa318cf", - "value": 100 - } - }, - "ee309959db034e81929a263c9863f444": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_2f23a70515744a7cb1575695d1b676d8", - "style": "IPY_MODEL_a55324c8c94346b68b0aeae577e1191f", - "value": " 100/100 [00:00<00:00, 341.23it/s]" - } - }, - "eee129c3d29543fea0216f612b116ee7": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "ef0d0e1104534626ae5992b10ab18c0c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "ef85d932ff724922b9ddad7a7987a58a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "efb81ac2fc83448cbfa8b35bb5bdf662": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_4d50b1a6eafd402489a5da8582282367", - "style": "IPY_MODEL_615b83b8f71d46c98c60a888aa8ade30", - "value": " 100/100 [00:00<00:00, 427.64it/s]" - } - }, - "f0c69fa9ec32410e83140f8bd6f14924": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_5e7f1a0b62814e24bd16f80ade80fd6b", - "style": "IPY_MODEL_4beea64560f7486187447f7abfb691e5", - "value": " 250/250 [00:02<00:00, 118.46it/s]" - } - }, - "f13e62871f22488ba5c5547fec20f4a7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_1dc3491e8213471a969247d4b0f6dfe5", - "max": 250, - "style": "IPY_MODEL_98c61252c52c4104a9f9e17ac4d51567", - "value": 250 - } - }, - "f19f32564d6c4fe386e7efa28b809e11": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "f2227a2cbbac433d935091dd1708c938": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_d174ff26283045f9b90986b63e202f61", - "style": "IPY_MODEL_0762953ce076440987c6e38195ce83c9", - "value": " 100/100 [00:01<00:00, 67.95it/s]" - } - }, - "f29f4e64a3c240bfb9407ada724f8945": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "f2b102211c914dcd886d9bfa5e57ba28": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "f2b839c695cd4331a458d7669c3618be": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "f3019291f347489ab0a4336ee1ce9cbb": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "value": " 100/100 [00:00<00:00, 286.99it/s]" - } - }, - "f43aaee98b3543039922495cd53d0c33": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_b8efcbe25a1a48e98aa776f57b5c0362", - "style": "IPY_MODEL_f7d03d9541b34d8281defe2a35176bbc", - "value": 100 - } - }, - "f4eae7193e494a3ea4a01bec535e5db9": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "f5e08944a82f49a58fe64ee18d8de852": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "f5ffae168348477881030361f04ce1f9": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_4f605084e3144caf990cdc1407cdaa99", - "IPY_MODEL_8eef468e64a34ae68b425d16a191c813", - "IPY_MODEL_97bd59be80c44225a08731c052509caf" - ], - "layout": "IPY_MODEL_6b8dafe839da4f70973849f12f7a243b" - } - }, - "f740bae29d1f4e17ba1f51e6f0203a8b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "f7d03d9541b34d8281defe2a35176bbc": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "f7d4b3f898014eb7aeeba3cc50944f67": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "f820ad6b70cb48648defcc94f745a951": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_78fe6f0ea2c04e2ebe74f9e4faf2dcfb", - "style": "IPY_MODEL_0dc28bbab3114ad78a4593090933e8cd", - "value": " 100/100 [00:00<00:00, 155.00it/s]" - } - }, - "f8e6da6c52fa46c38bffa320e46065e6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_dea9efba30824a419ff15eba2782b521", - "style": "IPY_MODEL_08468d9aac9048c79585de8f9ff16191", - "value": 100 - } - }, - "f8e76ad75de94507b2d927a3b905c26e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "f95bb7b88b1f4923a3bcdeb26814f288": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "f96125325d2c44f98d720f8e49bca8e4": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "f9c4e1ee6c324211845bb9e9beb0ced1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "fa3076a1f46c42cdaf403e954636a5a3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "fb020e66422a48a991ed391e98df7bc1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_fbc4be2fa9d24b069c011715219d4c75", - "style": "IPY_MODEL_700235b4b79644a2bbb71c4af0913559", - "value": 100 - } - }, - "fb40eec3a61542b6a5c74bd9216fac21": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - null, - "IPY_MODEL_d23d505e256a469c87f876003bf63d18", - "IPY_MODEL_804cf1ad2dd94cce898566c27616dc52" - ], - "layout": "IPY_MODEL_8a4b1dd95b01415eb4e85d98d47233bd" - } - }, - "fbc4be2fa9d24b069c011715219d4c75": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "fbf49844666d43bfb04be6212dc9b267": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "fd0f19709ac3402ea1d591d1afadc3cd": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "fd2f2ec4391f47f59782ba0baf34a5eb": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_8a3cca53bdcd4e2ab16e888b79c5cd81", - "style": "IPY_MODEL_3a97ce6562154ac5a6ca74ca8d621fcf", - "value": 100 - } - }, - "fd3049739d764a54ab52eaaf41cf5124": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_4a3f1f8ef2554d4da53859e07fe8af9b", - "value": 100 - } - }, - "fd3b104f4cd742ef8283cabd35778a3e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "fde014a6364841ef97f45b568b6e282f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_d7e3a79a322c40dfb1a9f92f597f7f7c", - "IPY_MODEL_e3d363e6f39041358b34b072b11473ba" - ], - "layout": "IPY_MODEL_49c4727113ba471581e203c36704e746" - } - }, - "fe4353d7aa5b4f1899bf1f0ee8aca7f8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "feafc0ba21b04c30bf13087f4db8c9f9": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "fed7ae2c33224c6b89673e84a462f8b7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_951ab5a32e2e4fe2b5d6a3bd4ac2fdfa", - "style": "IPY_MODEL_a896fc57e9724a71ba7e8048f213f604", - "value": " 100/100 [00:35<00:00, 2.76it/s]" - } - } - }, + "state": {}, "version_major": 2, "version_minor": 0 } diff --git a/doc/source/examples/examples.rst b/doc/source/examples/examples.rst index 16f218e..8faffd5 100644 --- a/doc/source/examples/examples.rst +++ b/doc/source/examples/examples.rst @@ -1,7 +1,7 @@ .. _examples: -Examples --------- +User Guide +---------- This directory contains static examples that can also be run interactively from *doc/source/examples* using `jupyter notebook`. There are more examples as Python scripts in the top level folder *examples*. .. toctree:: diff --git a/doc/source/examples/extending_pulses.ipynb b/doc/source/examples/extending_pulses.ipynb index 30b1f84..b5f6041 100644 --- a/doc/source/examples/extending_pulses.ipynb +++ b/doc/source/examples/extending_pulses.ipynb @@ -16,7 +16,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -24,14 +24,22 @@ "from qutip.qip import operations\n", "\n", "import filter_functions as ff\n", - "from filter_functions import util\n", - "\n", - "%matplotlib notebook" + "from filter_functions import util" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# use widget for interactive mode\n", + "%matplotlib inline" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -70,7 +78,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -90,7 +98,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -110,17 +118,9 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "True\n" - ] - } - ], + "outputs": [], "source": [ "print(hadamard_2.is_cached('filter function'))" ] @@ -134,18 +134,9 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['IX' 'IZ']\n", - "['IX' 'IZ' 'XI' 'ZI']\n" - ] - } - ], + "outputs": [], "source": [ "print(hadamard_2.c_oper_identifiers)\n", "print(hadamard_2.n_oper_identifiers)" @@ -160,20 +151,9 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(True, 2.356194490192345)" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "cnot_12 = hadamard_2 @ cphase_12 @ hadamard_2\n", "util.oper_equiv(cnot_12.total_propagator, operations.cnot(control=0, target=1))" @@ -194,17 +174,9 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['IZ' 'XI' 'ZI' 'ZZ']\t['IX' 'IZ' 'XI' 'ZI']\n" - ] - } - ], + "outputs": [], "source": [ "mapping = {}\n", "# We just reverse the order of the qubits, so just reverse the identifiers\n", @@ -226,18 +198,9 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['IIIX' 'IIIZ' 'IIXI' 'IIZI' 'IXII' 'IZII' 'IZZI' 'XIII' 'ZIII' 'ZIIZ']\n", - "['IIIX' 'IIIZ' 'IIXI' 'IIZI' 'IXII' 'IZII' 'XIII' 'ZIII']\n" - ] - } - ], + "outputs": [], "source": [ "swap_12 = ff.concatenate((cnot_12, cnot_21, cnot_12))\n", "all_identifiers = (cnot_21.c_oper_identifiers.tolist() +\n", @@ -259,994 +222,9 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "True\n" - ] - }, - { - "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"svg\";/* 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" - } - ], + "outputs": [], "source": [ "from filter_functions import plotting\n", "\n", @@ -1257,8 +235,8 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", + "display_name": "Python 3 (Spyder)", + "language": "python3", "name": "python3" }, "language_info": { @@ -1271,7 +249,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.12.3" }, "widgets": { "application/vnd.jupyter.widget-state+json": { @@ -1282,5 +260,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/doc/source/examples/getting_started.ipynb b/doc/source/examples/getting_started.ipynb index f102a52..67cb73a 100644 --- a/doc/source/examples/getting_started.ipynb +++ b/doc/source/examples/getting_started.ipynb @@ -26,9 +26,9 @@ "The central object of this package is the `PulseSequence` class. It is used to represent the control operation implementing a certain Hamiltonian ${H}_c$ and the sensitivities of the noise afflicting the system. More concisely, the total Hamiltonian of the system is modelled as\n", "\n", "\\begin{align*}\n", - " {H} &= {H}_c + {H}_n \\\\\n", - " {H}_c &= \\sum_i a_i(t) A_i \\\\\n", - " {H}_n &= \\sum_\\alpha s_\\alpha(t) b_\\alpha(t) B_\\alpha \\\\\n", + "{H} &= {H}_c + {H}_n \\\\\n", + "{H}_c &= \\sum_i a_i(t) A_i \\\\\n", + "{H}_n &= \\sum_\\alpha s_\\alpha(t) b_\\alpha(t) B_\\alpha \\\\\n", "\\end{align*}\n", "\n", "where $A_i$ and $B_\\alpha$ are the control and noise operators, respectively, $a_i(t)$ the control strength of $A_i$ at time $t$, $s_\\alpha(t)$ a deterministic time dependence of the noise operators to model, for instance, non-linear coupling to the noise sources, and $b_\\alpha(t)$ classically fluctuating noise variables. Since the noise is captured in a spectral density function that accounts for different realizations of the random noise, the $b_\\alpha(t)$ are not required at instantiation of a `PulseSequence` instance. Note that we always calculate in units where $\\hbar\\equiv 1$.\n", @@ -65,21 +65,29 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import qutip as qt\n", "\n", - "import filter_functions as ff\n", - "\n", - "%matplotlib notebook" + "import filter_functions as ff" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# use widget for interactive mode\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -108,7 +116,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -131,987 +139,9 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"svg\";/* 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" - } - ], + "outputs": [], "source": [ "from filter_functions import analytic, plotting\n", "\n", @@ -1140,987 +170,9 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"svg\";/* 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" - } - ], + "outputs": [], "source": [ "# Initial state the +1 eigenstate of X\n", "psi_i = (qt.basis(2, 0) + qt.basis(2, 1))/np.sqrt(2)\n", @@ -2139,18 +191,9 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(2, 2, 200) (2, 2, 4, 4, 200)\n", - "True\n" - ] - } - ], + "outputs": [], "source": [ "F_fid = FID.get_filter_function(omega, which='fidelity')\n", "F_gen = FID.get_filter_function(omega, which='generalized')\n", @@ -2187,7 +230,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -2228,1964 +271,9 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"svg\";/* 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(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"svg\";/* 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" - } - ], + "outputs": [], "source": [ "omega = ff.util.get_sample_frequencies(SE, n_samples=400, spacing='log')\n", "# Plot the filter function\n", @@ -4210,8 +298,8 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", + "display_name": "Python 3 (Spyder)", + "language": "python3", "name": "python3" }, "language_info": { @@ -4224,7 +312,14 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.12.3" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": {}, + "version_major": 2, + "version_minor": 0 + } } }, "nbformat": 4, diff --git a/doc/source/examples/periodic_driving.ipynb b/doc/source/examples/periodic_driving.ipynb index 92c4c98..5083cc8 100644 --- a/doc/source/examples/periodic_driving.ipynb +++ b/doc/source/examples/periodic_driving.ipynb @@ -26,9 +26,7 @@ "import numpy as np\n", "import qutip as qt\n", "\n", - "import filter_functions as ff\n", - "\n", - "%matplotlib notebook" + "import filter_functions as ff" ] }, { @@ -36,6 +34,16 @@ "execution_count": 2, "metadata": {}, "outputs": [], + "source": [ + "# use widget for interactive mode\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], "source": [ "# We calculate with hbar == 1\n", "Delta = 0.0 # set detuning to zero\n", @@ -80,981 +88,958 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [ { "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"svg\";/* 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" + "application/pdf": "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MSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUwMCA1MDAgNjEzIDYzNSA1NTAgNjM1IDYxNSAzNTIgNjM1IDYzNCAyNzggMjc4IDU3OSAyNzggOTc0IDYzNCA2MTIKNjM1IDYzNSA0MTEgNTIxIDM5MiA2MzQgNTkyIDgxOCA1OTIgNTkyIDUyNSA2MzYgMzM3IDYzNiA4MzggNjAwIDYzNiA2MDAgMzE4CjM1MiA1MTggMTAwMCA1MDAgNTAwIDUwMCAxMzUwIDYzNSA0MDAgMTA3MCA2MDAgNjg1IDYwMCA2MDAgMzE4IDMxOCA1MTggNTE4CjU5MCA1MDAgMTAwMCA1MDAgMTAwMCA1MjEgNDAwIDEwMjggNjAwIDUyNSA2MTEgMzE4IDQwMSA2MzYgNjM2IDYzNiA2MzYgMzM3CjUwMCA1MDAgMTAwMCA0NzEgNjE3IDgzOCAzNjEgMTAwMCA1MDAgNTAwIDgzOCA0MDEgNDAxIDUwMCA2MzYgNjM2IDMxOCA1MDAKNDAxIDQ3MSA2MTcgOTY5IDk2OSA5NjkgNTMxIDY4NCA2ODQgNjg0IDY4NCA2ODQgNjg0IDk3NCA2OTggNjMyIDYzMiA2MzIgNjMyCjI5NSAyOTUgMjk1IDI5NSA3NzUgNzQ4IDc4NyA3ODcgNzg3IDc4NyA3ODcgODM4IDc4NyA3MzIgNzMyIDczMiA3MzIgNjExIDYwOAo2MzAgNjEzIDYxMyA2MTMgNjEzIDYxMyA2MTMgOTk1IDU1MCA2MTUgNjE1IDYxNSA2MTUgMjc4IDI3OCAyNzggMjc4IDYxMiA2MzQKNjEyIDYxMiA2MTIgNjEyIDYxMiA4MzggNjEyIDYzNCA2MzQgNjM0IDYzNCA1OTIgNjM1IDU5MiBd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IF0gL0FzY2VudCA5MjkgL0Rlc2NlbnQgLTIzNiAvQ2FwSGVpZ2h0IDAKL1hIZWlnaHQgMCAvSXRhbGljQW5nbGUgMCAvU3RlbVYgMCAvTWF4V2lkdGggMTM0MiA+PgplbmRvYmoKMTggMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM0MiA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDIzIDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxMiA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjEyIDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDUKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk4MiA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4IDYxMiA2MzQgNjM0IDYzNCA2MzQgNTkyIDYzNSA1OTIgXQplbmRvYmoKMjEgMCBvYmoKPDwgL0MgMjIgMCBSIC9YIDIzIDAgUiAvYSAyNCAwIFIgL2UgMjUgMCBSIC9maXZlIDI2IDAgUiAvZm91ciAyNyAwIFIKL2wgMjggMCBSIC9tIDI5IDAgUiAvbiAzMSAwIFIgL28gMzIgMCBSIC9vbmUgMzMgMCBSIC9wIDM0IDAgUgovcGVyaW9kIDM1IDAgUiAvciAzNiAwIFIgL3NpeCAzNyAwIFIgL3NsYXNoIDM4IDAgUiAvc3BhY2UgMzkgMCBSIC90IDQwIDAgUgovdGhyZWUgNDEgMCBSIC90d28gNDIgMCBSIC91IDQzIDAgUiAvemVybyA0NCAwIFIgPj4KZW5kb2JqCjMgMCBvYmoKPDwgL0YyIDE1IDAgUiAvRjEgMjAgMCBSID4+CmVuZG9iago0IDAgb2JqCjw8IC9BMSA8PCAvVHlwZSAvRXh0R1N0YXRlIC9DQSAwIC9jYSAxID4+Ci9BMiA8PCAvVHlwZSAvRXh0R1N0YXRlIC9DQSAxIC9jYSAxID4+ID4+CmVuZG9iago1IDAgb2JqCjw8ID4+CmVuZG9iago2IDAgb2JqCjw8ID4+CmVuZG9iago3IDAgb2JqCjw8IC9GMS1EZWphVnVTYW5zLW1pbnVzIDMwIDAgUiA+PgplbmRvYmoKMiAwIG9iago8PCAvVHlwZSAvUGFnZXMgL0tpZHMgWyAxMSAwIFIgXSAvQ291bnQgMSA+PgplbmRvYmoKNDUgMCBvYmoKPDwgL0NyZWF0b3IgKE1hdHBsb3RsaWIgdjMuOC40LCBodHRwczovL21hdHBsb3RsaWIub3JnKQovUHJvZHVjZXIgKE1hdHBsb3RsaWIgcGRmIGJhY2tlbmQgdjMuOC40KQovQ3JlYXRpb25EYXRlIChEOjIwMjQwNTE0MTEzMjQxKzAyJzAwJykgPj4KZW5kb2JqCnhyZWYKMCA0NgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMTYgMDAwMDAgbiAKMDAwMDAxMTU2MiAwMDAwMCBuIAowMDAwMDExMzI5IDAwMDAwIG4gCjAwMDAwMTEzNzIgMDAwMDAgbiAKMDAwMDAxMTQ3MSAwMDAwMCBuIAowMDAwMDExNDkyIDAwMDAwIG4gCjAwMDAwMTE1MTMgMDAwMDAgbiAKMDAwMDAwMDA2NSAwMDAwMCBuIAowMDAwMDAwMzQzIDAwMDAwIG4gCjAwMDAwMDE3MzYgMDAwMDAgbiAKMDAwMDAwMDIwOCAwMDAwMCBuIAowMDAwMDAxNzE1IDAwMDAwIG4gCjAwMDAwMDI1NTUgMDAwMDAgbiAKMDAwMDAwMjM0MCAwMDAwMCBuIAowMDAwMDAyMDEwIDAwMDAwIG4gCjAwMDAwMDM2MDggMDAwMDAgbiAKMDAwMDAwMTc1NiAwMDAwMCBuIAowMDAwMDEwMDAyIDAwMDAwIG4gCjAwMDAwMDk3OTUgMDAwMDAgbiAKMDAwMDAwOTM1OSAwMDAwMCBuIAowMDAwMDExMDU1IDAwMDAwIG4gCjAwMDAwMDM2NDAgMDAwMDAgbiAKMDAwMDAwMzk0OCAwMDAwMCBuIAowMDAwMDA0MTEwIDAwMDAwIG4gCjAwMDAwMDQ0OTAgMDAwMDAgbiAKMDAwMDAwNDgxMiAwMDAwMCBuIAowMDAwMDA1MTM0IDAwMDAwIG4gCjAwMDAwMDUzMDAgMDAwMDAgbiAKMDAwMDAwNTQxOSAwMDAwMCBuIAowMDAwMDA1NzUwIDAwMDAwIG4gCjAwMDAwMDU5MjIgMDAwMDAgbiAKMDAwMDAwNjE1OCAwMDAwMCBuIAowMDAwMDA2NDQ5IDAwMDAwIG4gCjAwMDAwMDY2MDQgMDAwMDAgbiAKMDAwMDAwNjkxNiAwMDAwMCBuIAowMDAwMDA3MDM5IDAwMDAwIG4gCjAwMDAwMDcyNzIgMDAwMDAgbiAKMDAwMDAwNzY2NSAwMDAwMCBuIAowMDAwMDA3NzkxIDAwMDAwIG4gCjAwMDAwMDc4ODEgMDAwMDAgbiAKMDAwMDAwODA4NyAwMDAwMCBuIAowMDAwMDA4NTAwIDAwMDAwIG4gCjAwMDAwMDg4MjQgMDAwMDAgbiAKMDAwMDAwOTA3MSAwMDAwMCBuIAowMDAwMDExNjIyIDAwMDAwIG4gCnRyYWlsZXIKPDwgL1NpemUgNDYgL1Jvb3QgMSAwIFIgL0luZm8gNDUgMCBSID4+CnN0YXJ0eHJlZgoxMTc3OQolJUVPRgo=", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-14T11:32:40.472630\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.8.4, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" ], "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "" - ], - "text/plain": [ - "" + "
" ] }, "metadata": {}, @@ -1078,7 +1063,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -1108,7 +1093,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -1120,976 +1105,686 @@ }, { "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"svg\";/* 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": [ - "" + "application/pdf": "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NzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM1MCA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDI4IDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxNyA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjE3IDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDgKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk5NSA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4IDYxMiA2MzQgNjM0IDYzNCA2MzQgNTkyIDYzNSA1OTIgXQplbmRvYmoKMTcgMCBvYmoKPDwgPj4K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LTEwMjEgLTQ2MyAxNzk0IDEyMzMgXSAvRm9udE1hdHJpeCBbIDAuMDAxIDAgMCAwLjAwMSAwIDAgXQovQ2hhclByb2NzIDIyIDAgUgovRW5jb2RpbmcgPDwgL1R5cGUgL0VuY29kaW5nCi9EaWZmZXJlbmNlcyBbIDQ2IC9wZXJpb2QgL3NsYXNoIC96ZXJvIC9vbmUgL3R3byA1MyAvZml2ZSA5NyAvYSAxMDMgL2cgMTE0IC9yIF0KPj4KL1dpZHRocyAxOSAwIFIgPj4KZW5kb2JqCjIwIDAgb2JqCjw8IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvRm9udE5hbWUgL0JNUVFEVitEZWphVnVTYW5zIC9GbGFncyAzMgovRm9udEJCb3ggWyAtMTAyMSAtNDYzIDE3OTQgMTIzMyBdIC9Bc2NlbnQgOTI5IC9EZXNjZW50IC0yMzYgL0NhcEhlaWdodCAwCi9YSGVpZ2h0IDAgL0l0YWxpY0FuZ2xlIDAgL1N0ZW1WIDAgL01heFdpZHRoIDEzNDIgPj4KZW5kb2JqCjE5IDAgb2JqClsgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAKNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCAzMTggNDAxIDQ2MCA4MzggNjM2Cjk1MCA3ODAgMjc1IDM5MCAzOTAgNTAwIDgzOCAzMTggMzYxIDMxOCAzMzcgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNgo2MzYgNjM2IDMzNyAzMzcgODM4IDgzOCA4MzggNTMxIDEwMDAgNjg0IDY4NiA2OTggNzcwIDYzMiA1NzUgNzc1IDc1MiAyOTUKMjk1IDY1NiA1NTcgODYzIDc0OCA3ODcgNjAzIDc4NyA2OTUgNjM1IDYxMSA3MzIgNjg0IDk4OSA2ODUgNjExIDY4NSAzOTAgMzM3CjM5MCA4MzggNTAwIDUwMCA2MTMgNjM1IDU1MCA2MzUgNjE1IDM1MiA2MzUgNjM0IDI3OCAyNzggNTc5IDI3OCA5NzQgNjM0IDYxMgo2MzUgNjM1IDQxMSA1MjEgMzkyIDYzNCA1OTIgODE4IDU5MiA1OTIgNTI1IDYzNiAzMzcgNjM2IDgzOCA2MDAgNjM2IDYwMCAzMTgKMzUyIDUxOCAxMDAwIDUwMCA1MDAgNTAwIDEzNDIgNjM1IDQwMCAxMDcwIDYwMCA2ODUgNjAwIDYwMCAzMTggMzE4IDUxOCA1MTgKNTkwIDUwMCAxMDAwIDUwMCAxMDAwIDUyMSA0MDAgMTAyMyA2MDAgNTI1IDYxMSAzMTggNDAxIDYzNiA2MzYgNjM2IDYzNiAzMzcKNTAwIDUwMCAxMDAwIDQ3MSA2MTIgODM4IDM2MSAxMDAwIDUwMCA1MDAgODM4IDQwMSA0MDEgNTAwIDYzNiA2MzYgMzE4IDUwMAo0MDEgNDcxIDYxMiA5NjkgOTY5IDk2OSA1MzEgNjg0IDY4NCA2ODQgNjg0IDY4NCA2ODQgOTc0IDY5OCA2MzIgNjMyIDYzMiA2MzIKMjk1IDI5NSAyOTUgMjk1IDc3NSA3NDggNzg3IDc4NyA3ODcgNzg3IDc4NyA4MzggNzg3IDczMiA3MzIgNzMyIDczMiA2MTEgNjA1CjYzMCA2MTMgNjEzIDYxMyA2MTMgNjEzIDYxMyA5ODIgNTUwIDYxNSA2MTUgNjE1IDYxNSAyNzggMjc4IDI3OCAyNzggNjEyIDYzNAo2MTIgNjEyIDYxMiA2MTIgNjEyIDgzOCA2MTIgNjM0IDYzNCA2MzQgNjM0IDU5MiA2MzUgNTkyIF0KZW5kb2JqCjIyIDAgb2JqCjw8IC9hIDIzIDAgUiAvZml2ZSAyNCAwIFIgL2cgMjUgMCBSIC9vbmUgMjcgMCBSIC9wZXJpb2QgMjggMCBSIC9yIDI5IDAgUgovc2xhc2ggMzAgMCBSIC90d28gMzEgMCBSIC96ZXJvIDMyIDAgUiA+PgplbmRvYmoKMyAwIG9iago8PCAvRjIgMTYgMCBSIC9GMSAyMSAwIFIgPj4KZW5kb2JqCjQgMCBvYmoKPDwgL0ExIDw8IC9UeXBlIC9FeHRHU3RhdGUgL0NBIDAgL2NhIDEgPj4KL0EyIDw8IC9UeXBlIC9FeHRHU3RhdGUgL0NBIDAuNSAvY2EgMC41ID4+Ci9BMyA8PCAvVHlwZSAvRXh0R1N0YXRlIC9DQSAxIC9jYSAxID4+ID4+CmVuZG9iago1IDAgb2JqCjw8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UKD8D78IPZEKZW5kc3RyZWFtCmVuZG9iagozMyAwIG9iago2NTcKZW5kb2JqCjIgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzIC9LaWRzIFsgMTEgMCBSIF0gL0NvdW50IDEgPj4KZW5kb2JqCjM0IDAgb2JqCjw8IC9DcmVhdG9yIChNYXRwbG90bGliIHYzLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZykKL1Byb2R1Y2VyIChNYXRwbG90bGliIHBkZiBiYWNrZW5kIHYzLjguNCkKL0NyZWF0aW9uRGF0ZSAoRDoyMDI0MDUxNDExMzI0NCswMicwMCcpID4+CmVuZG9iagp4cmVmCjAgMzUKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE2IDAwMDAwIG4gCjAwMDAwMTA4NDYgMDAwMDAgbiAKMDAwMDAwODgwNSAwMDAwMCBuIAowMDAwMDA4ODQ4IDAwMDAwIG4gCjAwMDAwMDg5OTAgMDAwMDAgbiAKMDAwMDAwOTAxMSAwMDAwMCBuIAowMDAwMDA5MDMyIDAwMDAwIG4gCjAwMDAwMDAwNjUgMDAwMDAgbiAKMDAwMDAwMDMzNyAwMDAwMCBuIAowMDAwMDAyNTc0IDAwMDAwIG4gCjAwMDAwMDAyMDggMDAwMDAgbiAKMDAwMDAwMjU1MyAwMDAwMCBuIAowMDAwMDA5MTI1IDAwMDAwIG4gCjAwMDAwMDM0MzIgMDAwMDAgbiAKMDAwMDAwMzIxNyAwMDAwMCBuIAowMDAwMDAyODk0IDAwMDAwIG4gCjAwMDAwMDQ0ODUgMDAwMDAgbiAKMDAwMDAwMjU5NCAwMDAwMCBuIAowMDAwMDA3NjIxIDAwMDAwIG4gCjAwMDAwMDc0MTQgMDAwMDAgbiAKMDAwMDAwNzA0NCAwMDAwMCBuIAowMDAwMDA4Njc0IDAwMDAwIG4gCjAwMDAwMDQ1MDcgMDAwMDAgbiAKMDAwMDAwNDg4NyAwMDAwMCBuIAowMDAwMDA1MjA5IDAwMDAwIG4gCjAwMDAwMDU2MjMgMDAwMDAgbiAKMDAwMDAwNTc5NSAwMDAwMCBuIAowMDAwMDA1OTUwIDAwMDAwIG4gCjAwMDAwMDYwNzMgMDAwMDAgbiAKMDAwMDAwNjMwNiAwMDAwMCBuIAowMDAwMDA2NDMyIDAwMDAwIG4gCjAwMDAwMDY3NTYgMDAwMDAgbiAKMDAwMDAxMDgyNiAwMDAwMCBuIAowMDAwMDEwOTA2IDAwMDAwIG4gCnRyYWlsZXIKPDwgL1NpemUgMzUgL1Jvb3QgMSAwIFIgL0luZm8gMzQgMCBSID4+CnN0YXJ0eHJlZgoxMTA2MwolJUVPRgo=", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-14T11:32:43.970648\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.8.4, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" ], "text/plain": [ - "" + "
" ] }, "metadata": {}, @@ -2100,7 +1795,7 @@ "# Overlap between the target and actual propagators\n", "print('Trace fidelity: ', abs(ff.util.dot_HS(NOT_PERIODIC.total_propagator, qt.sigmax()))/2)\n", "# Plot the total propagator of NOT\n", - "_ = qt.matrix_histogram_complex(NOT_PERIODIC.total_propagator)" + "_ = qt.matrix_histogram(NOT_PERIODIC.total_propagator, bar_style='abs', color_style='phase')" ] }, { @@ -2112,995 +1807,1880 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [ { "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"svg\";/* 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": [ - "" + "" ] }, + "execution_count": 7, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" }, { "data": { - "text/html": [ - "" + "application/pdf": "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MDAgNjAwIDYwMCA2MDAKNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCAzMTggNDAxIDQ2MCA4MzggNjM2Cjk1MCA3ODAgMjc1IDM5MCAzOTAgNTAwIDgzOCAzMTggMzYxIDMxOCAzMzcgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNgo2MzYgNjM2IDMzNyAzMzcgODM4IDgzOCA4MzggNTMxIDEwMDAgNjg0IDY4NiA2OTggNzcwIDYzMiA1NzUgNzc1IDc1MiAyOTUKMjk1IDY1NiA1NTcgODYzIDc0OCA3ODcgNjAzIDc4NyA2OTUgNjM1IDYxMSA3MzIgNjg0IDk4OSA2ODUgNjExIDY4NSAzOTAgMzM3CjM5MCA4MzggNTAwIDUwMCA2MTMgNjM1IDU1MCA2MzUgNjE1IDM1MiA2MzUgNjM0IDI3OCAyNzggNTc5IDI3OCA5NzQgNjM0IDYxMgo2MzUgNjM1IDQxMSA1MjEgMzkyIDYzNCA1OTIgODE4IDU5MiA1OTIgNTI1IDYzNiAzMzcgNjM2IDgzOCA2MDAgNjM2IDYwMCAzMTgKMzUyIDUxOCAxMDAwIDUwMCA1MDAgNTAwIDEzNTAgNjM1IDQwMCAxMDcwIDYwMCA2ODUgNjAwIDYwMCAzMTggMzE4IDUxOCA1MTgKNTkwIDUwMCAxMDAwIDUwMCAxMDAwIDUyMSA0MDAgMTAyOCA2MDAgNTI1IDYxMSAzMTggNDAxIDYzNiA2MzYgNjM2IDYzNiAzMzcKNTAwIDUwMCAxMDAwIDQ3MSA2MTcgODM4IDM2MSAxMDAwIDUwMCA1MDAgODM4IDQwMSA0MDEgNTAwIDYzNiA2MzYgMzE4IDUwMAo0MDEgNDcxIDYxNyA5NjkgOTY5IDk2OSA1MzEgNjg0IDY4NCA2ODQgNjg0IDY4NCA2ODQgOTc0IDY5OCA2MzIgNjMyIDYzMiA2MzIKMjk1IDI5NSAyOTUgMjk1IDc3NSA3NDggNzg3IDc4NyA3ODcgNzg3IDc4NyA4MzggNzg3IDczMiA3MzIgNzMyIDczMiA2MTEgNjA4CjYzMCA2MTMgNjEzIDYxMyA2MTMgNjEzIDYxMyA5OTUgNTUwIDYxNSA2MTUgNjE1IDYxNSAyNzgg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MCBSID4+CmVuZG9iagoyMyAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnROYW1lIC9CTVFRRFYrRGVqYVZ1U2FucyAvRmxhZ3MgMzIKL0ZvbnRCQm94IFsgLTEwMjEgLTQ2MyAxNzk0IDEyMzMgXSAvQXNjZW50IDkyOSAvRGVzY2VudCAtMjM2IC9DYXBIZWlnaHQgMAovWEhlaWdodCAwIC9JdGFsaWNBbmdsZSAwIC9TdGVtViAwIC9NYXhXaWR0aCAxMzQyID4+CmVuZG9iagoyMiAwIG9iagpbIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwCjYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUwMCA1MDAgNjEzIDYzNSA1NTAgNjM1IDYxNSAzNTIgNjM1IDYzNCAyNzggMjc4IDU3OSAyNzggOTc0IDYzNCA2MTIKNjM1IDYzNSA0MTEgNTIxIDM5MiA2MzQgNTkyIDgxOCA1OTIgNTkyIDUyNSA2MzYgMzM3IDYzNiA4MzggNjAwIDYzNiA2MDAgMzE4CjM1MiA1MTggMTAwMCA1MDAgNTAwIDUwMCAxMzQyIDYzNSA0MDAgMTA3MCA2MDAgNjg1IDYwMCA2MDAgMzE4IDMxOCA1MTggNTE4CjU5MCA1MDAgMTAwMCA1MDAgMTAwMCA1MjEgNDAwIDEwMjMgNjAwIDUyNSA2MTEgMzE4IDQwMSA2MzYgNjM2IDYzNiA2MzYgMzM3CjUwMCA1MDAgMTAwMCA0NzEgNjEyIDgzOCAzNjEgMTAwMCA1MDAgNTAwIDgzOCA0MDEgNDAxIDUwMCA2MzYgNjM2IDMxOCA1MDAKNDAxIDQ3MSA2MTIgOTY5IDk2OSA5NjkgNTMxIDY4NCA2ODQgNjg0IDY4NCA2ODQgNjg0IDk3NCA2OTggNjMyIDYzMiA2MzIgNjMyCjI5NSAyOTUgMjk1IDI5NSA3NzUgNzQ4IDc4NyA3ODcgNzg3IDc4NyA3ODcgODM4IDc4NyA3MzIgNzMyIDczMiA3MzIgNjExIDYwNQo2MzAgNjEzIDYxMyA2MTMgNjEzIDYxMyA2MTMgOTgyIDU1MCA2MTUgNjE1IDYxNSA2MTUgMjc4IDI3OCAyNzggMjc4IDYxMiA2MzQKNjEyIDYxMiA2MTIgNjEyIDYxMiA4MzggNjEyIDYzNCA2MzQgNjM0IDYzNCA1OTIgNjM1IDU5MiBdCmVuZG9iagoyNSAwIG9iago8PCAvWCAyNyAwIFIgL1ogMjggMCBSIC9laWdodCAyOSAwIFIgL2ZpdmUgMzAgMCBSIC9mb3VyIDMxIDAgUiAvb25lIDMzIDAgUgovcGFyZW5sZWZ0IDM0IDAgUiAvcGFyZW5yaWdodCAzNSAwIFIgL3NldmVuIDM2IDAgUiAvc2l4IDM3IDAgUgovdGhyZWUgMzggMCBSIC90d28gMzkgMCBSIC96ZXJvIDQwIDAgUiA+PgplbmRvYmoKMyAwIG9iago8PCAvRjIgMTUgMCBSIC9GMSAyNCAwIFIgPj4KZW5kb2JqCjQgMCBvYmoKPDwgL0ExIDw8IC9UeXBlIC9FeHRHU3RhdGUgL0NBIDAgL2NhIDEgPj4KL0EyIDw8IC9UeXBlIC9FeHRHU3RhdGUgL0NBIDEgL2NhIDEgPj4KL0EzIDw8IC9UeXBlIC9FeHRHU3RhdGUgL0NBIDAuOCAvY2EgMC44ID4+ID4+CmVuZG9iago1IDAgb2JqCjw8ID4+CmVuZG9iago2IDAgb2JqCjw8ID4+CmVuZG9iago3IDAgb2JqCjw8IC9GMi1EZWphVnVTYW5zLU9ibGlxdWUtb21lZ2EgMjAgMCBSIC9GMi1EZWphVnVTYW5zLU9ibGlxdWUtdGF1IDIxIDAgUgovRjEtRGVqYVZ1U2Fucy1PbWVnYSAyNiAwIFIgL0YxLURlamFWdVNhbnMtbWludXMgMzIgMCBSID4+CmVuZG9iagoyIDAgb2JqCjw8IC9UeXBlIC9QYWdlcyAvS2lkcyBbIDExIDAgUiBdIC9Db3VudCAxID4+CmVuZG9iago0MSAwIG9iago8PCAvQ3JlYXRvciAoTWF0cGxvdGxpYiB2My44LjQsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcpCi9Qcm9kdWNlciAoTWF0cGxvdGxpYiBwZGYgYmFja2VuZCB2My44LjQpCi9DcmVhdGlvbkRhdGUgKEQ6MjAyNDA1MTQxMTMyNDQrMDInMDAnKSA+PgplbmRvYmoKeHJlZgowIDQyCjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNiAwMDAwMCBuIAowMDAwMDIwNzQ0IDAwMDAwIG4gCjAwMDAwMjAzNzAgMDAwMDAgbiAKMDAwMDAyMDQxMyAwMDAwMCBuIAowMDAwMDIwNTU1IDAwMDAwIG4gCjAwMDAwMjA1NzYgMDAwMDAgbiAKMDAwMDAyMDU5NyAwMDAwMCBuIAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDAzNDAgMDAwMDAgbiAKMDAwMDAxMTQxOSAwMDAwMCBuIAowMDAwMDAwMjA4IDAwMDAwIG4gCjAwMDAwMTEzOTcgMDAwMDAgbiAKMDAwMDAxMzQzMiAwMDAwMCBuIAowMDAwMDEzMjE3IDAwMDAwIG4gCjAwMDAwMTI4NzUgMDAwMDAgbiAKMDAwMDAxNDQ4NSAwMDAwMCBuIAowMDAwMDExNDM5IDAwMDAwIG4gCjAwMDAwMTE1OTQgMDAwMDAgbiAKMDAwMDAxMTkwMyAwMDAwMCBuIAowMDAwMDEyMzA1IDAwMDAwIG4gCjAwMDAwMTI2MjIgMDAwMDAgbiAKMDAwMDAxOTEyMSAwMDAwMCBuIAowMDAwMDE4OTE0IDAwMDAwIG4gCjAwMDAwMTg1MTIgMDAwMDAgbiAKMDAwMDAyMDE3NCAwMDAwMCBuIAowMDAwMDE0NTM3IDAwMDAwIG4gCjAwMDAwMTQ5MTAgMDAwMDAgbiAKMDAwMDAxNTA3MiAwMDAwMCBuIAowMDAwMDE1MjIyIDAwMDAwIG4gCjAwMDAwMTU2OTAgMDAwMDAgbiAKMDAwMDAxNjAxMiAwMDAwMCBuIAowMDAwMDE2MTc4IDAwMDAwIG4gCjAwMDAwMTYzNTAgMDAwMDAgbiAKMDAwMDAxNjUwNSAwMDAwMCBuIAowMDAwMDE2NzI4IDAwMDAwIG4gCjAwMDAwMTY5NTIgMDAwMDAgbiAKMDAwMDAxNzA5NCAwMDAwMCBuIAowMDAwMDE3NDg3IDAwMDAwIG4gCjAwMDAwMTc5MDAgMDAwMDAgbiAKMDAwMDAxODIyNCAwMDAwMCBuIAowMDAwMDIwODA0IDAwMDAwIG4gCnRyYWlsZXIKPDwgL1NpemUgNDIgL1Jvb3QgMSAwIFIgL0luZm8gNDEgMCBSID4+CnN0YXJ0eHJlZgoyMDk2MQolJUVPRgo=", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-14T11:32:44.417644\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.8.4, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" ], "text/plain": [ - "" + "
" ] }, "metadata": {}, "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" } ], "source": [ @@ -3143,24 +3723,9 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "f4f73656c37d4040af312c5f5fa1b06a", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Calculating control matrix: 0%| | 0/200002 [00:00open 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(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"svg\";/* 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" - } - ], + "outputs": [], "source": [ "print('Trace fidelity: ',\n", " abs(ff.util.dot_HS(NOT_STRONG.total_propagator, ff.util.paulis[1])) / 2)\n", @@ -5297,987 +3881,9 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"svg\";/* 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" - } - ], + "outputs": [], "source": [ "fig, axes = plt.subplots(2, 1, figsize=(6, 6))\n", "\n", @@ -6339,1679 +3945,11 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.12.3" }, "widgets": { "application/vnd.jupyter.widget-state+json": { - "state": { - "00aa502351404f5eb885270219e4bbef": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "01f749b812034bf2959c00b24e66314a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "03ed0b34cc2c47afa461cbf8b2f3511a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_a80cd59f622e434eb10ad7354740875a", - "max": 200002, - "style": "IPY_MODEL_497883dda69243c7a184460541358bcd", - "value": 200002 - } - }, - "04f25924406540c786e116cdce76a540": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "0873e9b417ac42ba9819dad919544d30": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "098b426f2a324dd590bb5c5015424c7e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "09f5cda86c2b4dc385a88adae9dc5d5f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "0a479811cd3242658fcb51f9460d0e6a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "0a6ba1c2128742869a2248b1e8eeaee4": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "0ccfada3f39f49b4ad05c2ebd5200f18": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_21221b77f21447b08d1d6e7d356b1cc3", - "style": "IPY_MODEL_2ebd3672eb79454abeb56dde991147e8", - "value": "Calculating control matrix: 100%" - } - }, - "0e809ff6790f4d35a5cc3609e8546d95": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "0fa89c7fc1a5417bb237eaf413a458a7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_763687dbc2184c82a6842aa3d4bd805b", - "style": "IPY_MODEL_86672efe76a449b39fe3812d4eb3a5e5", - "value": " 200002/200002 [00:57<00:00, 3780.11it/s]" - } - }, - "102a3150ca144f6a853ee79b2b8b5cec": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "112325af08b04406a957c070770e9026": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "11fa4c71d9e74853a939edcde5c086ee": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "121b5db2bfac4c62a64610b62dcabcf3": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "1306bc35dda449b1977f8419fa37c5b3": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "14722629d1c24fc29624311bbc2cab36": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_72ff38ba411e4c6b840ebb7e7903e203", - "style": "IPY_MODEL_75e391f9b4d045b688178d3361fb72b4", - "value": "Calculating control matrix: 100%" - } - }, - "150082dc34164b58b1749600f2b094aa": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_f4dd3ae4dc094708ba472963b17fd321", - "IPY_MODEL_15c54144b62b4607bf6db191614e9890" - ], - "layout": "IPY_MODEL_0a6ba1c2128742869a2248b1e8eeaee4" - } - }, - "150edee4cbf6414083ed2a992b838956": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_7e06b63cdbb5431ca07eaf7b4e2fce9e", - "style": "IPY_MODEL_8f5d0d8ff2d54add921069fbba6c0cee", - "value": "Calculating control matrix: 100%" - } - }, - "15c54144b62b4607bf6db191614e9890": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_f551cb41156e47eb9108ef645993e79e", - "style": "IPY_MODEL_a7d7435ca9454b9c82b184828a4e0d1d", - "value": " 200002/200002 [01:14<00:00, 2692.70it/s]" - } - }, - "1722f7120e6549b3b0ad6f019101f422": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "180d03cbddf147de8d28a32af39d577e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "1952a5d91fd94590b44987f7b7e4f985": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "1a5b2977fc6243a8a2df28bae3b69152": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "1c236aea47514b388af5a46055193f01": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_d2f0cbcdc76e438bac6135b3f33f95d6", - "max": 200002, - "style": "IPY_MODEL_beb3af4a08404cb8af2a884a89817c89", - "value": 200002 - } - }, - "1d6c169921214dfaa3df293610919110": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "1dfd449e975442e8b5ded8a0106a9d1a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "1f646b9ff81f4df9b61a3a950a6744f9": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "21221b77f21447b08d1d6e7d356b1cc3": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "21bcf91753a44dde95609d9c630e536a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "24207c1a4a4e47aaa7fd9584c9d23f35": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_3e49bf8214544271aa7da52f9bed8fdf", - "style": "IPY_MODEL_e8d24a8620dc4e2097b4fea75f142d0a", - "value": " 45043/200002 [00:14<00:51, 3014.58it/s]" - } - }, - "24a7500ca73443a5adbfcb42f6d0fb44": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_72d0584dd7b3483a9b9d427e717fa7ee", - "style": "IPY_MODEL_4b6c7798ef70446f892d122398b83be1", - "value": " 200002/200002 [02:05<00:00, 1591.93it/s]" - } - }, - "2535b0b758fe44e1acfbf6fbe2cf6db5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "25b49c95425f40c6b8a55bd18dda0fb3": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "271b6f3a4e7c435f8560aad66aabadfe": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "27c0bfd5f5fe4d5aa79d767c33899757": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "danger", - "layout": "IPY_MODEL_288c9007611b4f4f9ce18733e89019b5", - "max": 200002, - "style": "IPY_MODEL_bb14e45a2e144d48a306a3c5e4200770", - "value": 45043 - } - }, - "288c9007611b4f4f9ce18733e89019b5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "28d30ec3809d4df789ad0c2e64d70f04": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "2a5925438b224e9da059031463df772d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "2b6b4f782d944ff6a2d77d43eecac80e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_6c9e73561207474580e50ae2d8a5ff11", - "IPY_MODEL_c407d836247e4e2daa31a4ac50fe95df" - ], - "layout": "IPY_MODEL_2e8a589e7127434482fd9314f791d55e" - } - }, - "2b8483a4aaf64da69bd53c4eaa4a8b34": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "2d17a14f06954115b92e497df68ea5e4": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "2e1a1177f1b443ac8bbd4e0496772301": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_01f749b812034bf2959c00b24e66314a", - "style": "IPY_MODEL_1a5b2977fc6243a8a2df28bae3b69152", - "value": " 200002/200002 [01:02<00:00, 3107.21it/s]" - } - }, - "2e8a589e7127434482fd9314f791d55e": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "2ebd3672eb79454abeb56dde991147e8": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "30b23e89df10479c8c339c7abd7c19ff": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_7e79424bbce34128a4145eef7072f700", - "IPY_MODEL_65d3743015004cf983bdd84de35a2798" - ], - "layout": "IPY_MODEL_7311649c94ab4f03a96a1ac00d7cfdad" - } - }, - "31431789d5764a3f80b054633ffbcbd3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_c7f18f2468484d30ba8184092cc73643", - "IPY_MODEL_b9d2bfa7fd114129851c8681f5157a18" - ], - "layout": "IPY_MODEL_2b8483a4aaf64da69bd53c4eaa4a8b34" - } - }, - "341ebd196c344ba5847bbf1da0762ca2": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "3522b371fc3c48d5ada0ce96373d9bab": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "35614557a25b499593f13e67263c9de6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_da20c97e83424fd4aeddd098b6dc756c", - "style": "IPY_MODEL_a9f7f2411cb74c1492a0b3b5167e865e", - "value": "Calculating control matrix: 100%" - } - }, - "357150e7e0e740618db0b8ef135195fe": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "38c62be6ef9542bab09153c7cf100347": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_d848cf4b371e41e2ab42eee25eaef731", - "max": 200002, - "style": "IPY_MODEL_21bcf91753a44dde95609d9c630e536a", - "value": 200002 - } - }, - "38df7e9cdb00443d805ea498d2859812": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "3ab3c1c8ab514655a07f0883c6e6e287": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_6f0e7aba4ce244cd81f0568fdd45c4fc", - "style": "IPY_MODEL_28d30ec3809d4df789ad0c2e64d70f04", - "value": " 200002/200002 [13:58<00:00, 238.50it/s]" - } - }, - "3be48287eef94952aa55b5a157751ed4": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "3c12002c5c4d45bf897f421e5d415c9b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "3e49bf8214544271aa7da52f9bed8fdf": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "402822d95d8d45608168233629e04a59": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_50f529b671ba44f1be052d6b78ed6a37", - "IPY_MODEL_1c236aea47514b388af5a46055193f01", - "IPY_MODEL_fcba90511c7a4241bea84952c0b7d417" - ], - "layout": "IPY_MODEL_112325af08b04406a957c070770e9026" - } - }, - "4284bf65c0424889a96c616ce97710d8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "4460c99a90d046dd9f17f103b2e0e2fc": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_04f25924406540c786e116cdce76a540", - "style": "IPY_MODEL_09f5cda86c2b4dc385a88adae9dc5d5f", - "value": " 200002/200002 [02:00<00:00, 1655.96it/s]" - } - }, - "4569353c69e44c7689188c5ebb51de39": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "458d1a38496d47ae8b66a9c9cebc4cec": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_357150e7e0e740618db0b8ef135195fe", - "style": "IPY_MODEL_6355fa3970ef4f42be9b297ad168997d", - "value": " 200002/200002 [04:08<00:00, 805.93it/s]" - } - }, - "4631e029682c441b9624c1a3ab718497": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_861f1d8208c04dea8505f5f453880226", - "max": 200002, - "style": "IPY_MODEL_c66f6782fbe54d51b458cea3a18ccb41", - "value": 200002 - } - }, - "468dc152c797464abd52c9c1ef48e790": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "496eaa23b63d48bba756b85f7be33bcf": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_38df7e9cdb00443d805ea498d2859812", - "style": "IPY_MODEL_90d4e03795b44a8681aefa739ed5765c", - "value": "Calculating control matrix: 100%" - } - }, - "497883dda69243c7a184460541358bcd": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "4a21855819394689bfdeb2a023e862a6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "4b6c7798ef70446f892d122398b83be1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "504323c2070247e687c9a805972cfe08": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_8dacba7bdf8b423abf1fca78da0bfd5b", - "style": "IPY_MODEL_fb30218590884b5391e351806e65f906", - "value": "Calculating control matrix: 100%" - } - }, - "50f529b671ba44f1be052d6b78ed6a37": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_857ef79a5bab426ba777194bea41b43f", - "style": "IPY_MODEL_fd38d436942b4d2ca170d44ee29e7b5e", - "value": "Calculating control matrix: 100%" - } - }, - "51911fb7636c460c98dffaf386e819c4": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "5243037644aa493db2a296a18334f7b0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "53d2e424e0fe4cd4aadde2b99ff09109": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "55fce02d698f4eabae95a680cac2abd7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_b8fef7cc7bfb4cc6bdb7868fc70e4bba", - "max": 200002, - "style": "IPY_MODEL_5243037644aa493db2a296a18334f7b0", - "value": 200002 - } - }, - "5731cb9eba4845bfbc5cbd1c0f55ab38": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "58ff0b8ba3ea41b5998730ee3b3074aa": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_9babb70b94704688a4d3ee14ba32ddeb", - "IPY_MODEL_27c0bfd5f5fe4d5aa79d767c33899757", - "IPY_MODEL_24207c1a4a4e47aaa7fd9584c9d23f35" - ], - "layout": "IPY_MODEL_4284bf65c0424889a96c616ce97710d8" - } - }, - "5fb4b84ae9b94d5cbe8cfb412bd3c92c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_150edee4cbf6414083ed2a992b838956", - "IPY_MODEL_38c62be6ef9542bab09153c7cf100347", - "IPY_MODEL_b48e7ac1e52e48f583155423b7a090f6" - ], - "layout": "IPY_MODEL_0a479811cd3242658fcb51f9460d0e6a" - } - }, - "6041a15de3e042d5915e8123c39b4a1f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_e61ccfe86bdd4d46a430db35d197a640", - "max": 200002, - "style": "IPY_MODEL_c803868d210c46e08fc5f5114d13c33d", - "value": 200002 - } - }, - "61b04cf79e824d839c14c7fb80f9ca35": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "6355fa3970ef4f42be9b297ad168997d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "65d3743015004cf983bdd84de35a2798": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_7a0054c16f6c474db8c0d89dd8b591e8", - "style": "IPY_MODEL_11fa4c71d9e74853a939edcde5c086ee", - "value": " 200002/200002 [02:26<00:00, 1368.68it/s]" - } - }, - "66aa8e8e5f5346d79433d6c68f885ebe": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "679e09cf4f96491bb18b67845b624561": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "6b51f8eba6fe4afe848f65aaac380aca": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_468dc152c797464abd52c9c1ef48e790", - "style": "IPY_MODEL_cd0eb54a8f4b40d3afc5c700d46c2e03", - "value": " 200002/200002 [01:01<00:00, 3219.50it/s]" - } - }, - "6c9e73561207474580e50ae2d8a5ff11": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "description": "Calculating control matrix: 16%", - "layout": "IPY_MODEL_95bcae1a6c3f4217ac97f2e35ee352cd", - "max": 200002, - "style": "IPY_MODEL_92eb5a64ea8f47d9be2f46bf3c777c81", - "value": 32539 - } - }, - "6f0e7aba4ce244cd81f0568fdd45c4fc": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "6f1d3276e7404c2d953aa9e141fc24b2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_0ccfada3f39f49b4ad05c2ebd5200f18", - "IPY_MODEL_ce08b90a48144312baed956119e82a88", - "IPY_MODEL_2e1a1177f1b443ac8bbd4e0496772301" - ], - "layout": "IPY_MODEL_d1b6dbfa4a6e418fadc16ae418636bee" - } - }, - "70d5ad3e87de4265ad7d0d2ddf07b05b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "713d8db375af4e099f2812e02f21c8c2": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "729767462bbb4e29a76309328edf7863": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "72d0584dd7b3483a9b9d427e717fa7ee": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "72ff38ba411e4c6b840ebb7e7903e203": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "7311649c94ab4f03a96a1ac00d7cfdad": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "750b65b2cc3343d49c1c8547430317f0": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "75e391f9b4d045b688178d3361fb72b4": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "763687dbc2184c82a6842aa3d4bd805b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "7a0054c16f6c474db8c0d89dd8b591e8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "7c2fb4cc33514af4bceb819610645819": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "7d7eb745168d42d2b73740b2d3a86c1d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "7e046d009f324103988a1b2eec5932b0": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "7e06b63cdbb5431ca07eaf7b4e2fce9e": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "7e79424bbce34128a4145eef7072f700": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_d3fb1d977ef8438d9892a8d617625db9", - "max": 200002, - "style": "IPY_MODEL_729767462bbb4e29a76309328edf7863", - "value": 200002 - } - }, - "7ffd7eeef5b84ee68fad10dd89e0d51c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_ae31140b6591465986124737aaa45dbc", - "IPY_MODEL_4631e029682c441b9624c1a3ab718497", - "IPY_MODEL_ca9405487cff47988f5f7ca71c8c4472" - ], - "layout": "IPY_MODEL_7e046d009f324103988a1b2eec5932b0" - } - }, - "821275b438a64fe4a5e7eb363ff8dde5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_61b04cf79e824d839c14c7fb80f9ca35", - "style": "IPY_MODEL_c2d955b068ff4864b3ab0e32bbacef5f", - "value": " 200002/200002 [00:58<00:00, 2911.97it/s]" - } - }, - "83feb2f4553945dbbd8b29963f381827": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "84aac8d525b449d29026717c1de8b9e1": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "857ef79a5bab426ba777194bea41b43f": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "861f1d8208c04dea8505f5f453880226": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "86672efe76a449b39fe3812d4eb3a5e5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "88fce89449d24a508c45a25eff17a704": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "897d462a3f34476399e5c4b35d50c878": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_b100ddc03a834c829571e01e14d944a9", - "IPY_MODEL_f37b2c0e628844b4bf08055927f3874c", - "IPY_MODEL_dbcc45cfa694451cb694d5c30bc0a367" - ], - "layout": "IPY_MODEL_271b6f3a4e7c435f8560aad66aabadfe" - } - }, - "8c8cf0f4cdeb40ca87e9f53fc84bd9dc": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_341ebd196c344ba5847bbf1da0762ca2", - "style": "IPY_MODEL_d82c30dda0d2497a85750102e8b28d2a", - "value": " 200002/200002 [00:55<00:00, 3615.14it/s]" - } - }, - "8d4341690b5644f0a336fdf67444e9be": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_ee0c09d0edd54605b11139a5a51ba004", - "max": 200002, - "style": "IPY_MODEL_4a21855819394689bfdeb2a023e862a6", - "value": 200002 - } - }, - "8dacba7bdf8b423abf1fca78da0bfd5b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "8f224ef5e9194ec0aa795a899f12cf95": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_b96fc7e3d7824256ac14f23700176ef7", - "max": 200002, - "style": "IPY_MODEL_2a5925438b224e9da059031463df772d", - "value": 200002 - } - }, - "8f5d0d8ff2d54add921069fbba6c0cee": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "90d4e03795b44a8681aefa739ed5765c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "92eb5a64ea8f47d9be2f46bf3c777c81": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "934ca9f524994a459733062b3544c763": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "93bf48ac173b474e9d3ad1f1b8d7b2eb": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_944b254f164943318b18505332ff5414", - "IPY_MODEL_e944b37e290a42868761332316bdb0bc", - "IPY_MODEL_0fa89c7fc1a5417bb237eaf413a458a7" - ], - "layout": "IPY_MODEL_e5f9ea7efb054f7ab5624335e1dc51f9" - } - }, - "944b254f164943318b18505332ff5414": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_1f646b9ff81f4df9b61a3a950a6744f9", - "style": "IPY_MODEL_1d6c169921214dfaa3df293610919110", - "value": "Calculating control matrix: 100%" - } - }, - "944c2f1388874097988e6567918057da": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_55fce02d698f4eabae95a680cac2abd7", - "IPY_MODEL_4460c99a90d046dd9f17f103b2e0e2fc" - ], - "layout": "IPY_MODEL_7d7eb745168d42d2b73740b2d3a86c1d" - } - }, - "9481621256dc4ab78b90d659c623183e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_504323c2070247e687c9a805972cfe08", - "IPY_MODEL_be225bd9202a43cc8645497c87d4944d", - "IPY_MODEL_6b51f8eba6fe4afe848f65aaac380aca" - ], - "layout": "IPY_MODEL_d2e58031a8594d8d984bcf558a016f2a" - } - }, - "95610725c89b4184a7d3ebfb5c7f48a3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "95bcae1a6c3f4217ac97f2e35ee352cd": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "9b806d560bb4498cbeaf0e13a4053e24": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_8f224ef5e9194ec0aa795a899f12cf95", - "IPY_MODEL_458d1a38496d47ae8b66a9c9cebc4cec" - ], - "layout": "IPY_MODEL_d1514b71e60b44d9967c0bc6908882c0" - } - }, - "9babb70b94704688a4d3ee14ba32ddeb": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_66aa8e8e5f5346d79433d6c68f885ebe", - "style": "IPY_MODEL_3be48287eef94952aa55b5a157751ed4", - "value": "Calculating control matrix: 23%" - } - }, - "9d3b66a739a9461bae48f0620fc1b6f0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "a2c797fb648e42dbb6a7a0afc3fd051b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "a36412e15ada443bbc3dfa324a90c1c5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "a7275154b1b842d3a3da2b623bf74521": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_3522b371fc3c48d5ada0ce96373d9bab", - "style": "IPY_MODEL_180d03cbddf147de8d28a32af39d577e", - "value": " 200002/200002 [02:23<00:00, 1395.76it/s]" - } - }, - "a7d7435ca9454b9c82b184828a4e0d1d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "a80cd59f622e434eb10ad7354740875a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "a98334a0462b4a7cbfbedc7cefb857d1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "a9f7f2411cb74c1492a0b3b5167e865e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "ac239686b04f44e5b065cdb7e7f8d98e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_fffe36c4e7594c2a8c51ab75c9b9f475", - "IPY_MODEL_03ed0b34cc2c47afa461cbf8b2f3511a", - "IPY_MODEL_3ab3c1c8ab514655a07f0883c6e6e287" - ], - "layout": "IPY_MODEL_25b49c95425f40c6b8a55bd18dda0fb3" - } - }, - "ace1563c764f4282b13ea18e89fc4aa1": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "ad9328af2d924a178b5cffbef90975ac": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "ae31140b6591465986124737aaa45dbc": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_679e09cf4f96491bb18b67845b624561", - "style": "IPY_MODEL_00aa502351404f5eb885270219e4bbef", - "value": "Calculating control matrix: 100%" - } - }, - "b100ddc03a834c829571e01e14d944a9": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_d198370b7a054b959e9af6fc71d4089a", - "style": "IPY_MODEL_1952a5d91fd94590b44987f7b7e4f985", - "value": "Calculating control matrix: 100%" - } - }, - "b1e4d832b0454c979babeb06d64234f4": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "b48e7ac1e52e48f583155423b7a090f6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_5731cb9eba4845bfbc5cbd1c0f55ab38", - "style": "IPY_MODEL_b1e4d832b0454c979babeb06d64234f4", - "value": " 200002/200002 [01:07<00:00, 2968.02it/s]" - } - }, - "b5041b182c9e4b41b5bdc7525a1a2eb2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_83feb2f4553945dbbd8b29963f381827", - "max": 200002, - "style": "IPY_MODEL_4569353c69e44c7689188c5ebb51de39", - "value": 200002 - } - }, - "b8047cc8a50b4469b5d12c9cc9f278e5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_c42e9bb6d10e4453acb31c6726c7cc88", - "IPY_MODEL_a7275154b1b842d3a3da2b623bf74521" - ], - "layout": "IPY_MODEL_ad9328af2d924a178b5cffbef90975ac" - } - }, - "b8fef7cc7bfb4cc6bdb7868fc70e4bba": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b96fc7e3d7824256ac14f23700176ef7": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b9d2bfa7fd114129851c8681f5157a18": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_121b5db2bfac4c62a64610b62dcabcf3", - "style": "IPY_MODEL_0873e9b417ac42ba9819dad919544d30", - "value": " 200002/200002 [03:22<00:00, 986.75it/s]" - } - }, - "bb14e45a2e144d48a306a3c5e4200770": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "bd6ef1aa67444d8b96e56354bb1ac709": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "be225bd9202a43cc8645497c87d4944d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_84aac8d525b449d29026717c1de8b9e1", - "max": 200002, - "style": "IPY_MODEL_934ca9f524994a459733062b3544c763", - "value": 200002 - } - }, - "be2997bb8d38432585f69de555b8b5bb": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_14722629d1c24fc29624311bbc2cab36", - "IPY_MODEL_c6ef6d9c758848ea8fe0ff196ca12537", - "IPY_MODEL_c317bf5b29674095a63ee0914d32e5d1" - ], - "layout": "IPY_MODEL_1722f7120e6549b3b0ad6f019101f422" - } - }, - "beb3af4a08404cb8af2a884a89817c89": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "bed773fa8b6d486999ff7cbdf7eea15c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "c00e8cbe2c1e48a1ae008bca532f98d0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "c2d955b068ff4864b3ab0e32bbacef5f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "c317bf5b29674095a63ee0914d32e5d1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_1306bc35dda449b1977f8419fa37c5b3", - "style": "IPY_MODEL_fb136fcd0ec2459daa2a21303a58b25e", - "value": " 200002/200002 [01:07<00:00, 3177.42it/s]" - } - }, - "c407d836247e4e2daa31a4ac50fe95df": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_c871d4cde4894972bee60343bfa67a33", - "style": "IPY_MODEL_bed773fa8b6d486999ff7cbdf7eea15c", - "value": " 32539/200002 [00:21<01:33, 1782.74it/s]" - } - }, - "c42e9bb6d10e4453acb31c6726c7cc88": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_3c12002c5c4d45bf897f421e5d415c9b", - "max": 200002, - "style": "IPY_MODEL_a2c797fb648e42dbb6a7a0afc3fd051b", - "value": 200002 - } - }, - "c66f6782fbe54d51b458cea3a18ccb41": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "c6ef6d9c758848ea8fe0ff196ca12537": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_bd6ef1aa67444d8b96e56354bb1ac709", - "max": 200002, - "style": "IPY_MODEL_7c2fb4cc33514af4bceb819610645819", - "value": 200002 - } - }, - "c7f18f2468484d30ba8184092cc73643": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_e8adc2abcdeb49be8430f7030492016b", - "max": 200002, - "style": "IPY_MODEL_098b426f2a324dd590bb5c5015424c7e", - "value": 200002 - } - }, - "c803868d210c46e08fc5f5114d13c33d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "initial" - } - }, - "c871d4cde4894972bee60343bfa67a33": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "ca9405487cff47988f5f7ca71c8c4472": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_750b65b2cc3343d49c1c8547430317f0", - "style": "IPY_MODEL_c00e8cbe2c1e48a1ae008bca532f98d0", - "value": " 200002/200002 [04:42<00:00, 707.07it/s]" - } - }, - "cd0eb54a8f4b40d3afc5c700d46c2e03": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "ce08b90a48144312baed956119e82a88": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_713d8db375af4e099f2812e02f21c8c2", - "max": 200002, - "style": "IPY_MODEL_0e809ff6790f4d35a5cc3609e8546d95", - "value": 200002 - } - }, - "cefd0a7e0bcc427099e81856946dd161": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d1514b71e60b44d9967c0bc6908882c0": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d198370b7a054b959e9af6fc71d4089a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d1b6dbfa4a6e418fadc16ae418636bee": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d2e58031a8594d8d984bcf558a016f2a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d2f0cbcdc76e438bac6135b3f33f95d6": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d3fb1d977ef8438d9892a8d617625db9": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d45e2bacbc224bb3bb976dd35e10bc7c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d82c30dda0d2497a85750102e8b28d2a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "d848cf4b371e41e2ab42eee25eaef731": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "da20c97e83424fd4aeddd098b6dc756c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "dbcc45cfa694451cb694d5c30bc0a367": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_53d2e424e0fe4cd4aadde2b99ff09109", - "style": "IPY_MODEL_51911fb7636c460c98dffaf386e819c4", - "value": " 200002/200002 [01:00<00:00, 3323.88it/s]" - } - }, - "e41ba57ca6214347b98752c48a781a1f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_6041a15de3e042d5915e8123c39b4a1f", - "IPY_MODEL_24a7500ca73443a5adbfcb42f6d0fb44" - ], - "layout": "IPY_MODEL_102a3150ca144f6a853ee79b2b8b5cec" - } - }, - "e5f9ea7efb054f7ab5624335e1dc51f9": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "e61ccfe86bdd4d46a430db35d197a640": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "e7f5e88bcb454879baea0d55b2fb79a0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_496eaa23b63d48bba756b85f7be33bcf", - "IPY_MODEL_8d4341690b5644f0a336fdf67444e9be", - "IPY_MODEL_821275b438a64fe4a5e7eb363ff8dde5" - ], - "layout": "IPY_MODEL_88fce89449d24a508c45a25eff17a704" - } - }, - "e8adc2abcdeb49be8430f7030492016b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "e8d24a8620dc4e2097b4fea75f142d0a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "e944b37e290a42868761332316bdb0bc": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_70d5ad3e87de4265ad7d0d2ddf07b05b", - "max": 200002, - "style": "IPY_MODEL_2535b0b758fe44e1acfbf6fbe2cf6db5", - "value": 200002 - } - }, - "ee0c09d0edd54605b11139a5a51ba004": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "f37b2c0e628844b4bf08055927f3874c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_d45e2bacbc224bb3bb976dd35e10bc7c", - "max": 200002, - "style": "IPY_MODEL_9d3b66a739a9461bae48f0620fc1b6f0", - "value": 200002 - } - }, - "f4dd3ae4dc094708ba472963b17fd321": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "description": "Calculating control matrix: 100%", - "layout": "IPY_MODEL_ace1563c764f4282b13ea18e89fc4aa1", - "max": 200002, - "style": "IPY_MODEL_a98334a0462b4a7cbfbedc7cefb857d1", - "value": 200002 - } - }, - "f4f73656c37d4040af312c5f5fa1b06a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_35614557a25b499593f13e67263c9de6", - "IPY_MODEL_b5041b182c9e4b41b5bdc7525a1a2eb2", - "IPY_MODEL_8c8cf0f4cdeb40ca87e9f53fc84bd9dc" - ], - "layout": "IPY_MODEL_a36412e15ada443bbc3dfa324a90c1c5" - } - }, - "f551cb41156e47eb9108ef645993e79e": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "fb136fcd0ec2459daa2a21303a58b25e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "fb30218590884b5391e351806e65f906": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "fcba90511c7a4241bea84952c0b7d417": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_1dfd449e975442e8b5ded8a0106a9d1a", - "style": "IPY_MODEL_95610725c89b4184a7d3ebfb5c7f48a3", - "value": " 200002/200002 [01:00<00:00, 3322.41it/s]" - } - }, - "fd38d436942b4d2ca170d44ee29e7b5e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "fffe36c4e7594c2a8c51ab75c9b9f475": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_cefd0a7e0bcc427099e81856946dd161", - "style": "IPY_MODEL_2d17a14f06954115b92e497df68ea5e4", - "value": "Calculating control matrix: 100%" - } - } - }, + "state": {}, "version_major": 2, "version_minor": 0 } diff --git a/doc/source/examples/quantum_fourier_transform.ipynb b/doc/source/examples/quantum_fourier_transform.ipynb index d3ead88..6b0b928 100644 --- a/doc/source/examples/quantum_fourier_transform.ipynb +++ b/doc/source/examples/quantum_fourier_transform.ipynb @@ -1,6 +1,7 @@ { "cells": [ { + "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ @@ -41,9 +42,7 @@ "from qutip.control import pulseoptim\n", "from qutip.qip import operations\n", "\n", - "import filter_functions as ff\n", - "\n", - "%matplotlib notebook" + "import filter_functions as ff" ] }, { @@ -51,6 +50,16 @@ "execution_count": 2, "metadata": {}, "outputs": [], + "source": [ + "# use widget for interactive mode\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], "source": [ "np.random.seed(10)\n", "n_qubits = 4\n", @@ -137,2944 +146,2156 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "X_pi2 \t: (True, -3.141592653589793)\n" - ] - }, - { - "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"svg\";/* 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" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Y_pi2 \t: (True, 3.141592653589793)\n" + "X_pi2 \t: (True, 3.141592653589793)\n", + "Y_pi2 \t: (True, -3.141592653589793)\n", + "CZ_pi8 \t: (True, -1.4726215563702167)\n" ] }, { "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"svg\";/* 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": [ - "" + "application/pdf": "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QkJveCBbIC0xMDE2IC0zNTEgMTY2MCAxMDY4IF0KL0ZvbnRNYXRyaXggWyAwLjAwMSAwIDAgMC4wMDEgMCAwIF0gL0NoYXJQcm9jcyAxNiAwIFIKL0VuY29kaW5nIDw8IC9UeXBlIC9FbmNvZGluZyAvRGlmZmVyZW5jZXMgWyAxMTYgL3QgXSA+PiAvV2lkdGhzIDEzIDAgUiA+PgplbmRvYmoKMTQgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvR0NXWERWK0RlamFWdVNhbnMtT2JsaXF1ZSAvRmxhZ3MgOTYKL0ZvbnRCQm94IFsgLTEwMTYgLTM1MSAxNjYwIDEwNjggXSAvQXNjZW50IDkyOSAvRGVzY2VudCAtMjM2IC9DYXBIZWlnaHQgMAovWEhlaWdodCAwIC9JdGFsaWNBbmdsZSAwIC9TdGVtViAwIC9NYXhXaWR0aCAxMzUwID4+CmVuZG9iagoxMyAwIG9iagpbIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwCjYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUwMCA1MDAgNjEzIDYzNSA1NTAgNjM1IDYxNSAzNTIgNjM1IDYzNCAyNzggMjc4IDU3OSAyNzggOTc0IDYzNCA2MTIKNjM1IDYzNSA0MTEgNTIxIDM5MiA2MzQgNTkyIDgxOCA1OTIgNTkyIDUyNSA2MzYgMzM3IDYzNiA4Mzgg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NTMgL2ZpdmUgNTUgL3NldmVuIDY3Ci9DIDg4IC9YIC9ZIDk1IC91bmRlcnNjb3JlIDk3IC9hIDEwMSAvZSAxMDggL2wgL20gL24gL28gL3AgMTE0IC9yIDExNiAvdCAvdQpdCj4+Ci9XaWR0aHMgMTggMCBSID4+CmVuZG9iagoxOSAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnROYW1lIC9CTVFRRFYrRGVqYVZ1U2FucyAvRmxhZ3MgMzIKL0ZvbnRCQm94IFsgLTEwMjEgLTQ2MyAxNzk0IDEyMzMgXSAvQXNjZW50IDkyOSAvRGVzY2VudCAtMjM2IC9DYXBIZWlnaHQgMAovWEhlaWdodCAwIC9JdGFsaWNBbmdsZSAwIC9TdGVtViAwIC9NYXhXaWR0aCAxMzQyID4+CmVuZG9iagoxOCAwIG9iagpbIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwCjYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUwMCA1MDAgNjEzIDYzNSA1NTAgNjM1IDYxNSAzNTIgNjM1IDYzNCAyNzggMjc4IDU3OSAyNzggOTc0IDYzNCA2MTIKNjM1IDYzNSA0MTEgNTIxIDM5MiA2MzQgNTkyIDgxOCA1OTIgNTkyIDUyNSA2MzYgMzM3IDYzNiA4MzggNjAwIDYzNiA2MDAgMzE4CjM1MiA1MTggMTAwMCA1MDAgNTAwIDUwMCAxMzQyIDYzNSA0MDAgMTA3MCA2MDAgNjg1IDYwMCA2MDAgMzE4IDMxOCA1MTggNTE4CjU5MCA1MDAgMTAwMCA1MDAgMTAwMCA1MjEgNDAwIDEwMjMgNjAwIDUyNSA2MTEgMzE4IDQwMSA2MzYgNjM2IDYzNiA2MzYgMzM3CjUwMCA1MDAgMTAwMCA0NzEgNjEyIDgzOCAzNjEgMTAwMCA1MDAgNTAwIDgzOCA0MDEgNDAxIDUwMCA2MzYgNjM2IDMxOCA1MDAKNDAxIDQ3MSA2MTIgOTY5IDk2OSA5NjkgNTMxIDY4NCA2ODQgNjg0IDY4NCA2ODQgNjg0IDk3NCA2OTggNjMyIDYzMiA2MzIgNjMyCjI5NSAyOTUgMjk1IDI5NSA3NzUgNzQ4IDc4NyA3ODcgNzg3IDc4NyA3ODcgODM4IDc4NyA3MzIgNzMyIDczMiA3MzIgNjExIDYwNQo2MzAgNjEzIDYxMyA2MTMgNjEzIDYxMyA2MTMgOTgyIDU1MCA2MTUgNjE1IDYxNSA2MTUgMjc4IDI3OCAyNzggMjc4IDYxMiA2MzQKNjEyIDYxMiA2MTIgNjEyIDYxMiA4MzggNjEyIDYzNCA2MzQgNjM0IDYzNCA1OTIgNjM1IDU5MiBdCmVuZG9iagoyMSAwIG9iago8PCAvQyAyMiAwIFIgL1ggMjMgMCBSIC9ZIDI0IDAgUiAvYSAyNSAwIFIgL2UgMjYgMCBSIC9maXZlIDI3IDAgUgovbCAyOCAwIFIgL20gMjkgMCBSIC9uIDMwIDAgUiAvbyAzMSAwIFIgL29uZSAzMiAwIFIgL3AgMzMgMCBSCi9wZXJpb2QgMzQgMCBSIC9yIDM1IDAgUiAvc2V2ZW4gMzYgMCBSIC9zbGFzaCAzNyAwIFIgL3NwYWNlIDM4IDAgUgovdCAzOSAwIFIgL3RocmVlIDQwIDAgUiAvdHdvIDQxIDAgUiAvdSA0MiAwIFIgL3VuZGVyc2NvcmUgNDMgMCBSCi96ZXJvIDQ0IDAgUiA+PgplbmRvYmoKMyAwIG9iago8PCAvRjIgMTUgMCBSIC9GMSAyMCAwIFIgPj4KZW5kb2JqCjQgMCBvYmoKPDwgL0ExIDw8IC9UeXBlIC9FeHRHU3RhdGUgL0NBIDAgL2NhIDEgPj4KL0EyIDw8IC9UeXBlIC9FeHRHU3RhdGUgL0NBIDEgL2NhIDEgPj4gPj4KZW5kb2JqCjUgMCBvYmoKPDwgPj4KZW5kb2JqCjYgMCBvYmoKPDwgPj4KZW5kb2JqCjcgMCBvYmoKPDwgPj4KZW5kb2JqCjIgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzIC9LaWRzIFsgMTEgMCBSIF0gL0NvdW50IDEgPj4KZW5kb2JqCjQ1IDAgb2JqCjw8IC9DcmVhdG9yIChNYXRwbG90bGliIHYzLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZykKL1Byb2R1Y2VyIChNYXRwbG90bGliIHBkZiBiYWNrZW5kIHYzLjguNCkKL0NyZWF0aW9uRGF0ZSAoRDoyMDI0MDUxNDEyMDAwNiswMicwMCcpID4+CmVuZG9iagp4cmVmCjAgNDYKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE2IDAwMDAwIG4gCjAwMDAwMTE3ODUgMDAwMDAgbiAKMDAwMDAxMTU4MCAwMDAwMCBuIAowMDAwMDExNjIzIDAwMDAwIG4gCjAwMDAwMTE3MjIgMDAwMDAgbiAKMDAwMDAxMTc0MyAwMDAwMCBuIAowMDAwMDExNzY0IDAwMDAwIG4gCjAwMDAwMDAwNjUgMDAwMDAgbiAKMDAwMDAwMDM0MyAwMDAwMCBuIAowMDAwMDAyMjYxIDAwMDAwIG4gCjAwMDAwMDAyMDggMDAwMDAgbiAKMDAwMDAwMjI0MCAwMDAwMCBuIAowMDAwMDAzMDgwIDAwMDAwIG4gCjAwMDAwMDI4NjUgMDAwMDAgbiAKMDAwMDAwMjUzNSAwMDAwMCBuIAowMDAwMDA0MTMzIDAwMDAwIG4gCjAwMDAwMDIyODEgMDAwMDAgbiAKMDAwMDAxMDIzNSAwMDAwMCBuIAowMDAwMDEwMDI4IDAwMDAwIG4gCjAwMDAwMDk1NzIgMDAwMDAgbiAKMDAwMDAxMTI4OCAwMDAwMCBuIAowMDAwMDA0MTY1IDAwMDAwIG4gCjAwMDAwMDQ0NzMgMDAwMDAgbiAKMDAwMDAwNDYzNSAwMDAwMCBuIAowMDAwMDA0Nzg2IDAwMDAwIG4gCjAwMDAwMDUxNjYgMDAwMDAgbiAKMDAwMDAwNTQ4OCAwMDAwMCBuIAowMDAwMDA1ODEwIDAwMDAwIG4gCjAwMDAwMDU5MjkgMDAwMDAgbiAKMDAwMDAwNjI2MCAwMDAwMCBuIAowMDAwMDA2NDk2IDAwMDAwIG4gCjAwMDAwMDY3ODcgMDAwMDAgbiAKMDAwMDAwNjk0MiAwMDAwMCBuIAowMDAwMDA3MjU0IDAwMDAwIG4gCjAwMDAwMDczNzcgMDAwMDAgbiAKMDAwMDAwNzYxMCAwMDAwMCBuIAowMDAwMDA3NzUyIDAwMDAwIG4gCjAwMDAwMDc4NzggMDAwMDAgbiAKMDAwMDAwNzk2OCAwMDAwMCBuIAowMDAwMDA4MTc0IDAwMDAwIG4gCjAwMDAwMDg1ODcgMDAwMDAgbiAKMDAwMDAwODkxMSAwMDAwMCBuIAowMDAwMDA5MTU4IDAwMDAwIG4gCjAwMDAwMDkyODQgMDAwMDAgbiAKMDAwMDAxMTg0NSAwMDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDQ2IC9Sb290IDEgMCBSIC9JbmZvIDQ1IDAgUiA+PgpzdGFydHhyZWYKMTIwMDIKJSVFT0YK", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-14T12:00:05.418698\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.8.4, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" ], "text/plain": [ - "" + "
" ] }, "metadata": {}, "output_type": "display_data" }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CZ_pi8 \t: (True, -1.4726215563702136)\n" - ] - }, { "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"svg\";/* 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" + "application/pdf": "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MDAxIDAgMCAwLjAwMSAwIDAgXSAvQ2hhclByb2NzIDE2IDAgUgovRW5jb2RpbmcgPDwgL1R5cGUgL0VuY29kaW5nIC9EaWZmZXJlbmNlcyBbIDExNiAvdCBdID4+IC9XaWR0aHMgMTMgMCBSID4+CmVuZG9iagoxNCAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnROYW1lIC9HQ1dYRFYrRGVqYVZ1U2Fucy1PYmxpcXVlIC9GbGFncyA5NgovRm9udEJCb3ggWyAtMTAxNiAtMzUxIDE2NjAgMTA2OCBdIC9Bc2NlbnQgOTI5IC9EZXNjZW50IC0yMzYgL0NhcEhlaWdodCAwCi9YSGVpZ2h0IDAgL0l0YWxpY0FuZ2xlIDAgL1N0ZW1WIDAgL01heFdpZHRoIDEzNTAgPj4KZW5kb2JqCjEzIDAgb2JqClsgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAKNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCAzMTggNDAxIDQ2MCA4MzggNjM2Cjk1MCA3ODAgMjc1IDM5MCAzOTAgNTAwIDgzOCAzMTggMzYxIDMxOCAzMzcgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNgo2MzYgNjM2IDMzNyAzMzcgODM4IDgzOCA4MzggNTMxIDEwMDAgNjg0IDY4NiA2OTggNzcwIDYzMiA1NzUgNzc1IDc1MiAyOTUKMjk1IDY1NiA1NTcgODYzIDc0OCA3ODcgNjAzIDc4NyA2OTUgNjM1IDYxMSA3MzIgNjg0IDk4OSA2ODUgNjExIDY4NSAzOTAgMzM3CjM5MCA4MzggNTAwIDUwMCA2MTMgNjM1IDU1MCA2MzUgNjE1IDM1MiA2MzUgNjM0IDI3OCAyNzggNTc5IDI3OCA5NzQgNjM0IDYxMgo2MzUgNjM1IDQxMSA1MjEgMzkyIDYzNCA1OTIgODE4IDU5MiA1OTIgNTI1IDYzNiAzMzcgNjM2IDgzOCA2MDAgNjM2IDYwMCAzMTgKMzUyIDUxOCAxMDAwIDUwMCA1MDAgNTAwIDEzNTAg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MzIKL0ZvbnRCQm94IFsgLTEwMjEgLTQ2MyAxNzk0IDEyMzMgXSAvQXNjZW50IDkyOSAvRGVzY2VudCAtMjM2IC9DYXBIZWlnaHQgMAovWEhlaWdodCAwIC9JdGFsaWNBbmdsZSAwIC9TdGVtViAwIC9NYXhXaWR0aCAxMzQyID4+CmVuZG9iagoxOCAwIG9iagpbIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwCjYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUwMCA1MDAgNjEzIDYzNSA1NTAgNjM1IDYxNSAzNTIgNjM1IDYzNCAyNzggMjc4IDU3OSAyNzggOTc0IDYzNCA2MTIKNjM1IDYzNSA0MTEgNTIxIDM5MiA2MzQgNTkyIDgxOCA1OTIgNTkyIDUyNSA2MzYgMzM3IDYzNiA4MzggNjAwIDYzNiA2MDAgMzE4CjM1MiA1MTggMTAwMCA1MDAgNTAwIDUwMCAxMzQyIDYzNSA0MDAgMTA3MCA2MDAgNjg1IDYwMCA2MDAgMzE4IDMxOCA1MTggNTE4CjU5MCA1MDAgMTAwMCA1MDAgMTAwMCA1MjEgNDAwIDEwMjMgNjAwIDUyNSA2MTEgMzE4IDQwMSA2MzYgNjM2IDYzNiA2MzYgMzM3CjUwMCA1MDAgMTAwMCA0NzEgNjEyIDgzOCAzNjEgMTAwMCA1MDAgNTAwIDgzOCA0MDEgNDAxIDUwMCA2MzYgNjM2IDMxOCA1MDAKNDAxIDQ3MSA2MTIgOTY5IDk2OSA5NjkgNTMxIDY4NCA2ODQgNjg0IDY4NCA2ODQgNjg0IDk3NCA2OTggNjMyIDYzMiA2MzIgNjMyCjI5NSAyOTUgMjk1IDI5NSA3NzUgNzQ4IDc4NyA3ODcgNzg3IDc4NyA3ODcgODM4IDc4NyA3MzIgNzMyIDczMiA3MzIgNjExIDYwNQo2MzAgNjEzIDYxMyA2MTMgNjEzIDYxMyA2MTMgOTgyIDU1MCA2MTUgNjE1IDYxNSA2MTUgMjc4IDI3OCAyNzggMjc4IDYxMiA2MzQKNjEyIDYxMiA2MTIgNjEyIDYxMiA4MzggNjEyIDYzNCA2MzQgNjM0IDYzNCA1OTIgNjM1IDU5MiBdCmVuZG9iagoyMSAwIG9iago8PCAvQyAyMiAwIFIgL1ggMjMgMCBSIC9ZIDI0IDAgUiAvYSAyNSAwIFIgL2UgMjYgMCBSIC9maXZlIDI3IDAgUgovbCAyOCAwIFIgL20gMjkgMCBSIC9uIDMwIDAgUiAvbyAzMSAwIFIgL29uZSAzMiAwIFIgL3AgMzMgMCBSCi9wZXJpb2QgMzQgMCBSIC9yIDM1IDAgUiAvc2xhc2ggMzYgMCBSIC9zcGFjZSAzNyAwIFIgL3QgMzggMCBSCi90aHJlZSAzOSAwIFIgL3R3byA0MCAwIFIgL3UgNDEgMCBSIC91bmRlcnNjb3JlIDQyIDAgUiAvemVybyA0MyAwIFIgPj4KZW5kb2JqCjMgMCBvYmoKPDwgL0YyIDE1IDAgUiAvRjEgMjAgMCBSID4+CmVuZG9iago0IDAgb2JqCjw8IC9BMSA8PCAvVHlwZSAvRXh0R1N0YXRlIC9DQSAwIC9jYSAxID4+Ci9BMiA8PCAvVHlwZSAvRXh0R1N0YXRlIC9DQSAxIC9jYSAxID4+ID4+CmVuZG9iago1IDAgb2JqCjw8ID4+CmVuZG9iago2IDAgb2JqCjw8ID4+CmVuZG9iago3IDAgb2JqCjw8ID4+CmVuZG9iagoyIDAgb2JqCjw8IC9UeXBlIC9QYWdlcyAvS2lkcyBbIDExIDAgUiBdIC9Db3VudCAxID4+CmVuZG9iago0NCAwIG9iago8PCAvQ3JlYXRvciAoTWF0cGxvdGxpYiB2My44LjQsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcpCi9Qcm9kdWNlciAoTWF0cGxvdGxpYiBwZGYgYmFja2VuZCB2My44LjQpCi9DcmVhdGlvbkRhdGUgKEQ6MjAyNDA1MTQxMjAwMDYrMDInMDAnKSA+PgplbmRvYmoKeHJlZgowIDQ1CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAxNiAwMDAwMCBuIAowMDAwMDExNTczIDAwMDAwIG4gCjAwMDAwMTEzNjggMDAwMDAgbiAKMDAwMDAxMTQxMSAwMDAwMCBuIAowMDAwMDExNTEwIDAwMDAwIG4gCjAwMDAwMTE1MzEgMDAwMDAgbiAKMDAwMDAxMTU1MiAwMDAwMCBuIAowMDAwMDAwMDY1IDAwMDAwIG4gCjAwMDAwMDAzNDEgMDAwMDAgbiAKMDAwMDAwMjIxNSAwMDAwMCBuIAowMDAwMDAwMjA4IDAwMDAwIG4gCjAwMDAwMDIxOTQgMDAwMDAgbiAKMDAwMDAwMzAzNCAwMDAwMCBuIAowMDAwMDAyODE5IDAwMDAwIG4gCjAwMDAwMDI0ODkgMDAwMDAgbiAKMDAwMDAwNDA4NyAwMDAwMCBuIAowMDAwMDAyMjM1IDAwMDAwIG4gCjAwMDAwMTAwMzcgMDAwMDAgbiAKMDAwMDAwOTgzMCAwMDAwMCBuIAowMDAwMDA5Mzg0IDAwMDAwIG4gCjAwMDAwMTEwOTAgMDAwMDAgbiAKMDAwMDAwNDExOSAwMDAwMCBuIAowMDAwMDA0NDI3IDAwMDAwIG4gCjAwMDAwMDQ1ODkgMDAwMDAgbiAKMDAwMDAwNDc0MCAwMDAwMCBuIAowMDAwMDA1MTIwIDAwMDAwIG4gCjAwMDAwMDU0NDIgMDAwMDAgbiAKMDAwMDAwNTc2NCAwMDAwMCBuIAowMDAwMDA1ODgzIDAwMDAwIG4gCjAwMDAwMDYyMTQgMDAwMDAgbiAKMDAwMDAwNjQ1MCAwMDAwMCBuIAowMDAwMDA2NzQxIDAwMDAwIG4gCjAwMDAwMDY4OTYgMDAwMDAgbiAKMDAwMDAwNzIwOCAwMDAwMCBuIAowMDAwMDA3MzMxIDAwMDAwIG4gCjAwMDAwMDc1NjQgMDAwMDAgbiAKMDAwMDAwNzY5MCAwMDAwMCBuIAowMDAwMDA3NzgwIDAwMDAwIG4gCjAwMDAwMDc5ODYgMDAwMDAgbiAKMDAwMDAwODM5OSAwMDAwMCBuIAowMDAwMDA4NzIzIDAwMDAwIG4gCjAwMDAwMDg5NzAgMDAwMDAgbiAKMDAwMDAwOTA5NiAwMDAwMCBuIAowMDAwMDExNjMzIDAwMDAwIG4gCnRyYWlsZXIKPDwgL1NpemUgNDUgL1Jvb3QgMSAwIFIgL0luZm8gNDQgMCBSID4+CnN0YXJ0eHJlZgoxMTc5MAolJUVPRgo=", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-14T12:00:06.230460\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.8.4, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" ], "text/plain": [ - "" + "
" ] }, "metadata": {}, @@ -3082,11 +2303,1348 @@ }, { "data": { - "text/html": [ - "" + "application/pdf": "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Fni1d3t9AWR8QxMKZW5kc3RyZWFtCmVuZG9iagoxNSAwIG9iago8PCAvVHlwZSAvRm9udCAvQmFzZUZvbnQgL0dDV1hEVitEZWphVnVTYW5zLU9ibGlxdWUgL0ZpcnN0Q2hhciAwCi9MYXN0Q2hhciAyNTUgL0ZvbnREZXNjcmlwdG9yIDE0IDAgUiAvU3VidHlwZSAvVHlwZTMKL05hbWUgL0dDV1hEVitEZWphVnVTYW5zLU9ibGlxdWUgL0ZvbnRCQm94IFsgLTEwMTYgLTM1MSAxNjYwIDEwNjggXQovRm9udE1hdHJpeCBbIDAuMDAxIDAgMCAwLjAwMSAwIDAgXSAvQ2hhclByb2NzIDE2IDAgUgovRW5jb2RpbmcgPDwgL1R5cGUgL0VuY29kaW5nIC9EaWZmZXJlbmNlcyBbIDExNiAvdCBdID4+IC9XaWR0aHMgMTMgMCBSID4+CmVuZG9iagoxNCAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnROYW1lIC9HQ1dYRFYrRGVqYVZ1U2Fucy1PYmxpcXVlIC9GbGFncyA5NgovRm9udEJCb3ggWyAtMTAxNiAtMzUxIDE2NjAgMTA2OCBdIC9Bc2NlbnQgOTI5IC9EZXNjZW50IC0yMzYgL0NhcEhlaWdodCAwCi9YSGVpZ2h0IDAgL0l0YWxpY0FuZ2xlIDAgL1N0ZW1WIDAgL01heFdpZHRoIDEzNTAgPj4KZW5kb2JqCjEzIDAgb2JqClsgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAKNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCAzMTggNDAxIDQ2MCA4MzggNjM2Cjk1MCA3ODAgMjc1IDM5MCAzOTAgNTAwIDgzOCAzMTggMzYxIDMxOCAzMzcgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNgo2MzYgNjM2IDMzNyAzMzcgODM4IDgzOCA4MzggNTMxIDEwMDAgNjg0IDY4NiA2OTggNzcwIDYzMiA1NzUgNzc1IDc1MiAyOTUKMjk1IDY1NiA1NTcgODYzIDc0OCA3ODcgNjAzIDc4NyA2OTUgNjM1IDYxMSA3MzIgNjg0IDk4OSA2ODUgNjExIDY4NSAzOTAgMzM3CjM5MCA4MzggNTAwIDUwMCA2MTMgNjM1IDU1MCA2MzUgNjE1IDM1MiA2MzUgNjM0IDI3OCAyNzggNTc5IDI3OCA5NzQgNjM0IDYxMgo2MzUgNjM1IDQxMSA1MjEgMzkyIDYzNCA1OTIgODE4IDU5MiA1OTIgNTI1IDYzNiAzMzcgNjM2IDgzOCA2MDAgNjM2IDYwMCAzMTgKMzUyIDUxOCAxMDAwIDUwMCA1MDAgNTAwIDEzNTAgNjM1IDQwMCAxMDcwIDYwMCA2ODUgNjAwIDYwMCAzMTggMzE4IDUxOCA1MTgKNTkwIDUwMCAxMDAwIDUwMCAxMDAwIDUyMSA0MDAgMTAyOCA2MDAgNTI1IDYxMSAzMTggNDAxIDYzNiA2MzYgNjM2IDYzNiAzMzcKNTAwIDUwMCAxMDAwIDQ3MSA2MTcgODM4IDM2MSAxMDAwIDUwMCA1MDAgODM4IDQwMSA0MDEgNTAwIDYzNiA2MzYgMzE4IDUwMAo0MDEgNDcxIDYxNyA5NjkgOTY5IDk2OSA1MzEgNjg0IDY4NCA2ODQgNjg0IDY4NCA2ODQgOTc0IDY5OCA2MzIgNjMyIDYzMiA2MzIKMjk1IDI5NSAyOTUgMjk1IDc3NSA3NDggNzg3IDc4NyA3ODcgNzg3IDc4NyA4MzggNzg3IDczMiA3MzIgNzMyIDczMiA2MTEgNjA4CjYzMCA2MTMgNjEzIDYxMyA2MTMgNjEzIDYxMyA5OTUgNTUwIDYxNSA2MTUgNjE1IDYxNSAyNzggMjc4IDI3OCAyNzggNjEyIDYzNAo2MTIgNjEyIDYxMiA2MTIgNjEyIDgzOCA2MTIgNjM0IDYzNCA2MzQgNjM0IDU5MiA2MzUgNTkyIF0KZW5kb2JqCjE2IDAgb2JqCjw8IC90IDE3IDAgUiA+PgplbmRvYmoKMjIgMCBvYmoKPDwgL0xlbmd0aCAyMzUgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicNVFJbgAxCLvnFf5ApbAn75mq6qH9/7WGUS8DA9jYJO/BRiQ+xJDuKFd8yuo0y/A7WeTFz0rh5L2ICqQqwgppB89yVjMMnhuZApcz8VlmPpkWOxZQ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bmRzdHJlYW0KZW5kb2JqCjIwIDAgb2JqCjw8IC9UeXBlIC9Gb250IC9CYXNlRm9udCAvQk1RUURWK0RlamFWdVNhbnMgL0ZpcnN0Q2hhciAwIC9MYXN0Q2hhciAyNTUKL0ZvbnREZXNjcmlwdG9yIDE5IDAgUiAvU3VidHlwZSAvVHlwZTMgL05hbWUgL0JNUVFEVitEZWphVnVTYW5zCi9Gb250QkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0ZvbnRNYXRyaXggWyAwLjAwMSAwIDAgMC4wMDEgMCAwIF0KL0NoYXJQcm9jcyAyMSAwIFIKL0VuY29kaW5nIDw8IC9UeXBlIC9FbmNvZGluZwovRGlmZmVyZW5jZXMgWyAzMiAvc3BhY2UgNDYgL3BlcmlvZCAvc2xhc2ggL3plcm8gL29uZSAvdHdvIC90aHJlZSA1MyAvZml2ZSA1NSAvc2V2ZW4gNjcKL0MgODggL1ggL1kgL1ogOTUgL3VuZGVyc2NvcmUgOTcgL2EgMTAxIC9lIDEwOCAvbCAvbSAvbiAvbyAvcCAxMTQgL3IgMTE2IC90Ci91IF0KPj4KL1dpZHRocyAxOCAwIFIgPj4KZW5kb2JqCjE5IDAgb2JqCjw8IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvRm9udE5hbWUgL0JNUVFEVitEZWphVnVTYW5zIC9GbGFncyAzMgovRm9udEJCb3ggWyAtMTAyMSAtNDYzIDE3OTQgMTIzMyBdIC9Bc2NlbnQgOTI5IC9EZXNjZW50IC0yMzYgL0NhcEhlaWdodCAwCi9YSGVpZ2h0IDAgL0l0YWxpY0FuZ2xlIDAgL1N0ZW1WIDAgL01heFdpZHRoIDEzNDIgPj4KZW5kb2JqCjE4IDAgb2JqClsgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAKNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCAzMTggNDAxIDQ2MCA4MzggNjM2Cjk1MCA3ODAgMjc1IDM5MCAzOTAgNTAwIDgzOCAzMTggMzYxIDMxOCAzMzcgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNgo2MzYgNjM2IDMzNyAzMzcgODM4IDgzOCA4MzggNTMxIDEwMDAgNjg0IDY4NiA2OTggNzcwIDYzMiA1NzUgNzc1IDc1MiAyOTUKMjk1IDY1NiA1NTcgODYzIDc0OCA3ODcgNjAzIDc4NyA2OTUgNjM1IDYxMSA3MzIgNjg0IDk4OSA2ODUgNjExIDY4NSAzOTAgMzM3CjM5MCA4MzggNTAwIDUwMCA2MTMgNjM1IDU1MCA2MzUgNjE1IDM1MiA2MzUgNjM0IDI3OCAyNzggNTc5IDI3OCA5NzQgNjM0IDYxMgo2MzUgNjM1IDQxMSA1MjEgMzkyIDYzNCA1OTIgODE4IDU5MiA1OTIgNTI1IDYzNiAzMzcgNjM2IDgzOCA2MDAgNjM2IDYwMCAzMTgKMzUyIDUxOCAxMDAwIDUwMCA1MDAgNTAwIDEzNDIgNjM1IDQwMCAxMDcwIDYwMCA2ODUgNjAwIDYwMCAzMTggMzE4IDUxOCA1MTgKNTkwIDUwMCAxMDAwIDUwMCAxMDAwIDUyMSA0MDAgMTAyMyA2MDAgNTI1IDYxMSAzMTggNDAxIDYzNiA2MzYgNjM2IDYzNiAzMzcKNTAwIDUwMCAxMDAwIDQ3MSA2MTIgODM4IDM2MSAxMDAwIDUwMCA1MDAgODM4IDQwMSA0MDEgNTAwIDYzNiA2MzYgMzE4IDUwMAo0MDEgNDcxIDYxMiA5NjkgOTY5IDk2OSA1MzEgNjg0IDY4NCA2ODQgNjg0IDY4NCA2ODQgOTc0IDY5OCA2MzIgNjMyIDYzMiA2MzIKMjk1IDI5NSAyOTUgMjk1IDc3NSA3NDggNzg3IDc4NyA3ODcgNzg3IDc4NyA4MzggNzg3IDczMiA3MzIgNzMyIDczMiA2MTEgNjA1CjYzMCA2MTMgNjEzIDYxMyA2MTMgNjEzIDYxMyA5ODIgNTUwIDYxNSA2MTUgNjE1IDYxNSAyNzggMjc4IDI3OCAyNzggNjEyIDYzNAo2MTIgNjEyIDYxMiA2MTIgNjEyIDgzOCA2MTIgNjM0IDYzNCA2MzQgNjM0IDU5MiA2MzUgNTkyIF0KZW5kb2JqCjIxIDAgb2JqCjw8IC9DIDIyIDAgUiAvWCAyMyAwIFIgL1kgMjQgMCBSIC9aIDI1IDAgUiAvYSAyNiAwIFIgL2UgMjcgMCBSCi9maXZlIDI4IDAgUiAvbCAyOSAwIFIgL20gMzAgMCBSIC9uIDMxIDAgUiAvbyAzMiAwIFIgL29uZSAzMyAwIFIgL3AgMzQgMCBSCi9wZXJpb2QgMzUgMCBSIC9yIDM2IDAgUiAvc2V2ZW4gMzcgMCBSIC9zbGFzaCAzOCAwIFIgL3NwYWNlIDM5IDAgUgovdCA0MCAwIFIgL3RocmVlIDQxIDAgUiAvdHdvIDQyIDAgUiAvdSA0MyAwIFIgL3VuZGVyc2NvcmUgNDQgMCBSCi96ZXJvIDQ1IDAgUiA+PgplbmRvYmoKMyAwIG9iago8PCAvRjIgMTUgMCBSIC9GMSAyMCAwIFIgPj4KZW5kb2JqCjQgMCBvYmoKPDwgL0ExIDw8IC9UeXBlIC9FeHRHU3RhdGUgL0NBIDAgL2NhIDEgPj4KL0EyIDw8IC9UeXBlIC9FeHRHU3RhdGUgL0NBIDEgL2NhIDEgPj4gPj4KZW5kb2JqCjUgMCBvYmoKPDwgPj4KZW5kb2JqCjYgMCBvYmoKPDwgPj4KZW5kb2JqCjcgMCBvYmoKPDwgPj4KZW5kb2JqCjIgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzIC9LaWRzIFsgMTEgMCBSIF0gL0NvdW50IDEgPj4KZW5kb2JqCjQ2IDAgb2JqCjw8IC9DcmVhdG9yIChNYXRwbG90bGliIHYzLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZykKL1Byb2R1Y2VyIChNYXRwbG90bGliIHBkZiBiYWNrZW5kIHYzLjguNCkKL0NyZWF0aW9uRGF0ZSAoRDoyMDI0MDUxNDEyMDAwNiswMicwMCcpID4+CmVuZG9iagp4cmVmCjAgNDcKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE2IDAwMDAwIG4gCjAwMDAwMTMwNDIgMDAwMDAgbiAKMDAwMDAxMjgzNyAwMDAwMCBuIAowMDAwMDEyODgwIDAwMDAwIG4gCjAwMDAwMTI5NzkgMDAwMDAgbiAKMDAwMDAxMzAwMCAwMDAwMCBuIAowMDAwMDEzMDIxIDAwMDAwIG4gCjAwMDAwMDAwNjUgMDAwMDAgbiAKMDAwMDAwMDM0MyAwMDAwMCBuIAowMDAwMDAzMzU1IDAwMDAwIG4gCjAwMDAwMDAyMDggMDAwMDAgbiAKMDAwMDAwMzMzNCAwMDAwMCBuIAowMDAwMDA0MTc0IDAwMDAwIG4gCjAwMDAwMDM5NTkgMDAwMDAgbiAKMDAwMDAwMzYyOSAwMDAwMCBuIAowMDAwMDA1MjI3IDAwMDAwIG4gCjAwMDAwMDMzNzUgMDAwMDAgbiAKMDAwMDAxMTQ4MiAwMDAwMCBuIAowMDAwMDExMjc1IDAwMDAwIG4gCjAwMDAwMTA4MTYgMDAwMDAgbiAKMDAwMDAxMjUzNSAwMDAwMCBuIAowMDAwMDA1MjU5IDAwMDAwIG4gCjAwMDAwMDU1NjcgMDAwMDAgbiAKMDAwMDAwNTcyOSAwMDAwMCBuIAowMDAwMDA1ODgwIDAwMDAwIG4gCjAwMDAwMDYwMzAgMDAwMDAgbiAKMDAwMDAwNjQxMCAwMDAwMCBuIAowMDAwMDA2NzMyIDAwMDAwIG4gCjAwMDAwMDcwNTQgMDAwMDAgbiAKMDAwMDAwNzE3MyAwMDAwMCBuIAowMDAwMDA3NTA0IDAwMDAwIG4gCjAwMDAwMDc3NDAgMDAwMDAgbiAKMDAwMDAwODAzMSAwMDAwMCBuIAowMDAwMDA4MTg2IDAwMDAwIG4gCjAwMDAwMDg0OTggMDAwMDAgbiAKMDAwMDAwODYyMSAwMDAwMCBuIAowMDAwMDA4ODU0IDAwMDAwIG4gCjAwMDAwMDg5OTYgMDAwMDAgbiAKMDAwMDAwOTEyMiAwMDAwMCBuIAowMDAwMDA5MjEyIDAwMDAwIG4gCjAwMDAwMDk0MTggMDAwMDAgbiAKMDAwMDAwOTgzMSAwMDAwMCBuIAowMDAwMDEwMTU1IDAwMDAwIG4gCjAwMDAwMTA0MDIgMDAwMDAgbiAKMDAwMDAxMDUyOCAwMDAwMCBuIAowMDAwMDEzMTAyIDAwMDAwIG4gCnRyYWlsZXIKPDwgL1NpemUgNDcgL1Jvb3QgMSAwIFIgL0luZm8gNDYgMCBSID4+CnN0YXJ0eHJlZgoxMzI1OQolJUVPRgo=", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-14T12:00:06.552732\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.8.4, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" ], "text/plain": [ - "" + "
" ] }, "metadata": {}, @@ -3129,7 +3687,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -3142,7 +3700,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0b2f2f79645c4335a17bd6fb0ba946cf", + "model_id": "9210417757004d579eba4576566f94a8", "version_major": 2, "version_minor": 0 }, @@ -3156,7 +3714,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "3ff07f00479149d4b02a73d85c8633af", + "model_id": "6c0982a9e62244a4b63efd4c52c17c84", "version_major": 2, "version_minor": 0 }, @@ -3170,7 +3728,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "49a5aef6dcda4bbd8fac034a80fb5245", + "model_id": "7e7aa42439874740b133061638a9ff0f", "version_major": 2, "version_minor": 0 }, @@ -3202,7 +3760,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -3223,7 +3781,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -3236,7 +3794,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "5e5a419db48c47a8857c350e81facee5", + "model_id": "215e318262bb4eebab6a44c156e1d991", "version_major": 2, "version_minor": 0 }, @@ -3250,7 +3808,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "adc769bb587648429d77cb8c7f1f126f", + "model_id": "399cf0199c334f6abf3d339cdc916c5e", "version_major": 2, "version_minor": 0 }, @@ -3264,7 +3822,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "156b1e2fd3f24f17a045be3f20e19dce", + "model_id": "5c97626d744f4ce0af4dfb14f9e8950a", "version_major": 2, "version_minor": 0 }, @@ -3280,9 +3838,9 @@ "output_type": "stream", "text": [ "Correct action:\n", - "X_pi2: (True, -3.141592653589793)\n", - "Y_pi2: (True, 3.141592653589793)\n", - "CZ_pi8: (True, -1.4726215563702136)\n" + "X_pi2: (True, 3.141592653589793)\n", + "Y_pi2: (True, -3.141592653589793)\n", + "CZ_pi8: (True, -1.4726215563702167)\n" ] } ], @@ -3365,13 +3923,13 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "06c300be1d6242229a1d764e74ec4595", + "model_id": "fd0cf7c881674e78bcee07420e170f07", "version_major": 2, "version_minor": 0 }, @@ -3385,7 +3943,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "bf1143356c6e4310b8627bec1ac88f82", + "model_id": "f9441e33523849c0a7ccea1537256f28", "version_major": 2, "version_minor": 0 }, @@ -3399,7 +3957,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "833e0187c14c4205886839ecfe94eaa2", + "model_id": "77c9e63d35fb4a6494b7705472d88ffe", "version_major": 2, "version_minor": 0 }, @@ -3413,7 +3971,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "a68416d229924be3939004780767e198", + "model_id": "d70ecdc45c86420799e79f4226924d3f", "version_major": 2, "version_minor": 0 }, @@ -3427,7 +3985,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "536d103857394c72ba93b1663455a460", + "model_id": "8a95e64c0cdb43fc97cd8b27da616d02", "version_major": 2, "version_minor": 0 }, @@ -3443,11 +4001,11 @@ "output_type": "stream", "text": [ "Correct action:\n", - "hadamard: (True, -1.5707963267948961)\n", - "CZ_pi4: (True, -2.9452431127404273)\n", - "CZ_pi2: (True, 0.39269908169873247)\n", - "CZ_pi: (True, 0.7853981633974731)\n", - "CX_pi: (1, 0) (True, -2.3561944901923164)\n" + "hadamard: (True, -1.5707963267948968)\n", + "CZ_pi4: (True, -2.9452431127404335)\n", + "CZ_pi2: (True, 0.39269908169871964)\n", + "CZ_pi: (True, 0.7853981633974472)\n", + "CX_pi: (1, 0) (True, -2.356194490192343)\n" ] } ], @@ -3501,13 +4059,19 @@ }, { "cell_type": "code", - "execution_count": 8, - "metadata": {}, + "execution_count": 9, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "449f23daf5f84418b5aaa78f99eb276a", + "model_id": "af2d03b2d8ff43e18f99ee8c1c7d5e7d", "version_major": 2, "version_minor": 0 }, @@ -3521,7 +4085,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c33b2023be094291a4de50bb598a28de", + "model_id": "53dd21ca39e345c383ae88c5ddbb52b4", "version_major": 2, "version_minor": 0 }, @@ -3537,9 +4101,9 @@ "output_type": "stream", "text": [ "Correct action:\n", - "hadamard: (1) (True, -1.5707963267948961)\n", - "CX_pi: (0, 1) (True, -2.356194490192318)\n", - "swap: (0, 1) (True, -0.7853981633974527)\n" + "hadamard: (1) (True, -1.5707963267948968)\n", + "CX_pi: (0, 1) (True, -2.3561944901923453)\n", + "swap: (0, 1) (True, -0.7853981633975333)\n" ] } ], @@ -3586,7 +4150,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -3639,13 +4203,13 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "19edcdbb500d409381977e5e1a48d605", + "model_id": "2948a9418b2146c49b734a44da1a39a0", "version_major": 2, "version_minor": 0 }, @@ -3659,7 +4223,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0176aa83f0344fb397117314024b291e", + "model_id": "7ee4ad72ccd74e0da967f3cc9ad9149d", "version_major": 2, "version_minor": 0 }, @@ -3673,7 +4237,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c624bfa57e004189a7c10d3a8b0c813f", + "model_id": "f2331b17afcb4f47bf6f6a4682a79c4e", "version_major": 2, "version_minor": 0 }, @@ -3687,7 +4251,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7f31a947efc542008ab5f05cd57f9f41", + "model_id": "7e15accbea2b4d79a2abbeafc75e8bf6", "version_major": 2, "version_minor": 0 }, @@ -3736,13 +4300,13 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "14f7aa0f4c784e2983466dace91459a7", + "model_id": "fe6942e159b24f66af6fc0e1eeaec4c2", "version_major": 2, "version_minor": 0 }, @@ -3757,997 +4321,10412 @@ "name": "stdout", "output_type": "stream", "text": [ - "Correct action: (True, -1.668971097220032)\n", - "Trace fidelity: 0.999999942044308\n", + "Correct action: (True, -1.6689710972194927)\n", + "Trace fidelity: 0.9999999420442776\n", "Filter function cached: True\n" ] }, { "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"svg\";/* 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": [ - "" + "(
, )" ] }, + "execution_count": 12, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" }, { "data": { - "text/html": [ - "" + "application/pdf": "JVBERi0xLjQKJazcIKu6CjEgMCBvYmoKPDwgL1R5cGUgL0NhdGFsb2cgL1BhZ2VzIDIgMCBSID4+CmVuZG9iago4IDAgb2JqCjw8IC9Gb250IDMgMCBSIC9YT2JqZWN0IDcgMCBSIC9FeHRHU3RhdGUgNCAwIFIgL1BhdHRlcm4gNSAwIFIKL1NoYWRpbmcgNiAwIFIgL1Byb2NTZXQgWyAvUERGIC9UZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJIF0gPj4KZW5kb2JqCjExIDAgb2JqCjw8IC9UeXBlIC9QYWdlIC9QYXJlbnQgMiAwIFIgL1Jlc291cmNlcyA4IDAgUgovTWVkaWFCb3ggWyAwIDAgNDM2LjA2Mzg3NSAzNjQuMDQxMzE2OTgyOCBdIC9Db250ZW50cyA5IDAgUiAvQW5ub3RzIDEwIDAgUgo+PgplbmRvYmoKOSAwIG9iago8PCAvTGVuZ3RoIDEyIDAgUiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJzEvcuOc8mSpTfnU3AoDRTl98uwS5cCeiZ1ARoIGpWqS2rkbqC7Aen1tT4z35FknO2RPzLIPAWcQga5f9Lpbm7XZcv+4X/61//3//mXf/3f/ukf7//jf7j9w+9//ct/u8X7f9L//u0e7v9J//v/7vH+T/rfv92C/jpuJbeP0PLoVX/+9vhnbuUjlJhj1+vh+c//+3b7j7d/+Hf6mP+mf/ZPt/6R7jF+JH//uOWaPsbDK7+tV3JtH+N8iX/09ML61GSf+jGrFh21YPvPf1qv3PRJHyWmNPX5uX/M1kLK+soU5kcrKY10T6F/lB5ibvrQFMPHaDOVec956vWeZ+H1/tFaGvmeev4YNWT9w99ut3+86XvYLf1/+06+8vqz9TO1gFJLi/EeQ9XXpBEmP7bUjzpKrfWeSv4oKcQ0v1mLf2uq/r1p/dr03c+N2jj9T1+ir/hoqU3b5c2CdpujL/6Hf5fZ77ikI3y0GeJsoY+iZTyLUhkftffWtZT8oY/oM7LzsenlnPRTUggfNfP1/NjxEcaIUz9Wm91HbraW23++1aId71FLjnon1phy4YNS/kj6JZKlWSU6QZLBB6UqmawtNH1Q0geFkrp/UIsfcYZZ+CAJWx6hNvug+TFzjfkeh/4rJAkYH5TTRwxpSo4kcB89l+S7oA/q+gmzpSKh1Vf3XLXh+iBdhzZH0+eUjxpnKdk+Z37oSKP+yDFpY4tO0j+n65Lo7aJ/oS1P+pFj8jmSghpHiPr8Pj/C1E9F3FJpH9oWbXXWsVSd2Sj+QUMbqXeL/kHIH1H7WOyDavjQx4c29UH5o2l3fUlVXzDS0IHkkD5yjlq/f1DXKaRS5312tlHnYJ/TP3QqRfc8tsGuSET5nIaEjqg/kp6PYYS+Dm1mtiLW+9QjY+ZR+RxphazfWCVwLens+2h26/ShSSvMQ58TP4Zu18j+OVEyknsq+qXa1KZVZ9vqHrUVM+mkkO2JHNih9frRciz64jQkaClyHuuTWKEOrd770GfGZuKo/y59aiv1QRKKNqqWqg8a2kf9sCAxHZIbvdrWT4sxS0oC392TDlDqz8Ro6KvLjAgkN7pJEk11aAe0kXwsq9MulnD+uBQ+eq06jnvTP+ZA7NimtJ/kVo9FCY82NUfbpqlt6rHobFMPH/riUfr5SVJQXZLb73V+xB5zYpuydk/7WjqfJGEL2hq7+bruU9sf+p0z6R314R+U2eWoHb9LB7dauXd8kARO6wr6cUkSoN9pEpC1Fz1U04z64pTsevknlSgRKKPHu+RWgtGTacFYPvRqRkXpfqZSauO7s65k1a9LkqWKrOpup/OThjZBBydxlR4sRQLIJ+mfF4nTwHY0bccYNdonTVOiI0rZSQlqf09VooW0LnGSnOnuSQ5NmPR1EhMdhA5Om5GylJWej017Lz2kW5W5DNLH66fpOkhpSHPdEZ8ucxCQpSaFlLvUxJ0V61t07HyObqd0/Ozjri3p0ij9U41IrVWJnlStfnzVCepjdFOlJLvkJeoIumQ228dIjnqR1Oa76QGJxbr9nQMpHCEyn3rvrAYBzj23ajektRltP7UxOowoFXWXdpjSz+FUItLXQXqTyxwkK61lLr+Ecc7ZtMm67S1IqQ3T17qAuUpz3KuEvbaYlwqZHJYstTZHSkAH2iq/Smf2gS4ukqCGemytm7rWseciJ+Kuj9dvbbWc91WqTzo6VFMuedoO6oOkRCWWbBvKSNqNy4uejfzKzmXCxo36KdMRDaxtlwfBr5chtHvm8pd0d6Qe9Z86MduLxDHJjOrCSwT0VDDdYtdsShHqGkmXB32J7tBgr2UxPkZvKPzYZWp1AYMrWj5J65aqQOXq6p+3Q5KsM+zIdJA60oE0VCS3RjYZq4Pun3lKCExFcpv0CRPtpcuA1Vi3Q59UW5O11qdIMzWuOzaf4x0JAZAsyHmIxT5JqrNiXNp9cIHKmKdi4waPkmWesuya1GIxuebgS9HFkbIdGB7dZPt1UoxSUhKvu+RuxF7TeWPZt6rLIGseOcaApjr8SsmCNRkqKXpZTikP02xSsTp5fTP/1XNo5z7p106UQTFzLrEKdvnZHMkOphrzH/SZNZtmwyThdejVGvTPz22SeEvsOaKc0EcBsTnsdemdaX4Et1Y327SIvC+ZWGmV+0QH599V5ETqTMJRNRJErIQ+aeK36Jri2WhnpQSC6yPdJllASW+U0JgmXHcl3f+9fKiBJyW/uPDTC2oS6dD36Y7YQXb0h/5bUlYa+8y//g83HXCQpEiW8bB0DXQdcdIxJTPLZTCxlJlow/9B4OtOP1nu4n+Rqx/u/0O480s+sIK5uQMTkClJWQpyJe7/ctz+8Z9v//C/aK/L/Z//owUD//x/3f6P+38X/vv7/3n/539/+5//+fa/PvyaZ0dQ6ifnHLI7cF3bYgqqIqycul7GHNWlGL9f58RlkoToQkzzdooUqqy6Tny/zPgry5RHImWYZcpwD0eRgCCzVUZXkm4va8OzbEr8w2XqDHKYcqL1v4gvVWT/S2+4OPtlpl9a5sQWNa61Lqn8hJFQZug8fSPCIwurpdf8x8vUETTp/ILrUbl6RSpd90zKa7/K/CurlKeDg4qVD9z56aZN2peTkqeIUpCE/fESB/9Ey5tcRflYcrabLqOu9jdrLL+yRqm/gCeTTY6GDIl5zV0qrljIE2UtZpWqyH+4TG0/VzHKmkpfo5zkMvWp0/nuwOsvLZM4qikkRo60E9FCOnnDQbq+m6KTTtDJ/eEi2X756PLjZT6wSEF3sUpQ63fn3X5lkVqE9DAOjKRIwYt0P74DAeIMOreJTkLJ/uEaia1wMgjP7g27IkdH4ty+W2P/lTVynEMekcyg5EjerOwEi5R6bYpC611mUmq61T++ONp9BVPaO9lI81z0k6Vth9y/b1Y5fm2VQ96vLEVFjAIiZaYT0yGbIDPQCdJm81Dr22Va8KWfKUMiF0aBtAywDEzBNdovc/7SMvEQZHUlgB3FScyIc6Znu8VlilAUGOf0C6uUpyq3WM5Nl6Mul12eVIjI6Lc6/Zdsj/l4cl1MlBIRv20mAb3HjISkiinLH5+53AC5yxMnQiZexlq+hvy0TCjzzTJ/yfbgWMq3UvgvH0wmW1G1OahS6pJXuUvyAWRASvnDVcqFlu1KWmKWnGcL7lpWKCpd+80qf8n0SCcSW+LqK2aSuPfT+ZVP1/UFsicyzDn/sb9BEK3jxi+ShBBSSnsqoJDX/d0yf8n2xEIEpZs5iZTkf5NsYp3Dsi9y7wjzdNPzH+t1C9H162ZQ8K5oOeLvNZJE9dv9/CUDhIuuC0KIXRT8RMyFxQCkCQqusZYsLc/Lf7xQSYhccXlRySJZkmZy4WUavr1Fv2SCMp6n3G3FGJhzHRQ5nG9cUyKzoXckCdlMPYkhvHYZVAUAvFyJrHL4Y6tF6kpujlT0JP1gUeK3+uvXFAM2Wl4yGkf6aypus6iJmKgSgN0t9SKF+8c2i3yfZLdLhY0Rbe9lruX/YGZ/6JWSk2xc/YFmzCQYTEbIEdVB7CphlkKf5RfWOUlvFImddlDe8yT0lnclt/fHbinJXBkr7QBaQLZVcaEl2kmuSETuClOD4r1f8EpTqPh8uSXLM0oJKp6SVGd88x/6pSTVFejrsO4KS3TMvVjyTuqoKBRJptnkXKfwx3ZLOkA2QLGqLm40JSbFKxFXePudeP6SatBP50Jpv+4Np7nkeCa9Zc5xBi0ukbPyxxeIlHixTFyMMn+KFSUvAZM9vtNhv6QZdIOl/BUpDlKYtQXXtUlfIuHEgius6i3m8se6VqciL1GmKxfLi6A4ZAotffJD91QfqlO13G4natZVLSvTLtXO6bX+QVBVfmE7CbBHI68VJJDSHnUQRVha6IcuKhl7eSuTNE/5UOhRLUlBRlTepjl/ZJR0/n8cKssMaJ2yIkUGq6A95FqW0Ic8tR/6qCT+mxzTaNmomad5+7rzGJ0+7uTAMEO/sJmW+K654Sp2C0iDPB75qfM72fwlF5UkeZkkQMyzL/pcS6/LnpCE0FEPfkaWiP3xOi101c2W1y9/r1oGSQ6bFPPPndREhljBg/Zr4JiGZtaVGoQiPzZ3kOLqK5n1/UIHCTBZCWlQObUWmgRqb/l7P+CXjJElhnunkif7ox1oyQ5+sr2K5iuBnr67/kLEbHWRSMWoJjl98sMnd18udfp2ob9mjeSskwfXjs72kfEyvYyhmLdKIPLdctPS93989KQUcyQvmMnRNv3C0KXyS/k2JP01X1X+x4dJO8ksK6fielAmkdoMOrl2n+R7z9rvH6xUIUpBsSt+HgT40mhBViJ8e+V/zVmVgH7IXA6KiYpFp5xiK+qRltVZhkYaJWmnSmh/fPqkhXXu8rqk8iyknaR55e280V2VAyE1qnuLEo9UscZYu/pf7o+ohIbWuFOYb+v//9d/vf/v9/98t1+kOFKmSmKh+xVIMrMXU35iuP/Xf7vpFauMf/uQ/De5n63k2eSGKUixEM38pUaVswTcM8lw0oanVW+RNSVNR767DLkcVhPUUdQiZ5bPkSUKFWtp6Ih/vJnzKA8nUeGXwJPcHGmlqovcaLl9fLsWN20jyFs3GbMWLT/fyTtZKYwKe+ayWxq9auHt/BKKWzNRBNZrgaKGxKPV7r/0/v3boCVAHsiNSfaVhYpAWh6ZQi4ySritJdVp9S6AAlp3tSUqFqh5FUi0QQpIc21WpIjUFcvva/zuNP74sLAT8vNyNYiAfNHoGf9BMdz8EzZft2CY/8BeU9wptl3yC6blaqK0ODkOCpaKGCYZ4fz7EqUG5HXKJWENSdF7GQURXkv87m3kqSky7eTEB1lCaT4zIWSN9FOICNG3ozcDHwDxyCSGCF5QkMGqGxQHzbOJVjMiVTb6pzQlKm9y+AgdBsgfhfym/iNqp1vYqe0JZFnygmJkA2bY7+16wiqZuvUK6KSeeT1SmQqmhl9yVB1kR04BUa2gIpJVMaMVarXhyc6EdIitkZ8p4e/2eiHTb5UnqnhS793AHMBGkheqzqMa2WqrCZGOHDD5ht+P6pu3kaZOSKTrZ5ssjZ89OJaYt0EV27ZXXzm8fkziacYETETRadPuWu0dkaOQTiFUwawC1Zge1lgDG1WoEstoUwOXyyM3/ekPW+7myduXJ29nMFdMgJOl06K5pxHvWvKZbdNzjF4jAesTOA3EyaqRNbuYcQIZ/ElE86deDIDyEgFQuKQLWdqSLQU5eVUeFVZIe7gsthFMbUTcbEteskJdrmrgsth0ANrZmW2F8p1medHxc1sS3pJviqKIlh2GZOCEkf3utSnNcuKQguyX1ZbtR4Aw4HZJXCQ62WvOwB/CeOvxsxNdO2dqkF9Ws1d17cwrhVlWrr3PVuA0jUOdxi7fxLVZNy5UoEJ6veqEuhvh8/CLDiZZyi6gaWUu9Pd4/sPl4PrJ25cnb6aOZYD8MIH7JBBRh2m7TA5qmqwonKsOfwMuMQwWp18ssdYRrXsYCyi6O1IT5JeX9iqpreAPZCjTuhFpOhyAdDDYwPMGlZAcm1IRim7PN9Ay2RIrJOT0+6YJRUbNycV56+ZiSYaU5vCVDMBG5sjEbggtNKjElih7ia0c2+6KmCKhrkN2u15RKA2j0KXY7Df/7mI0CZJkTKInwdM1ISMk0/T0h3sb10/evjx5sxRllkiGsu5PSb7lnaoqqZd132TWbWsNBtabHf7swUE5bHIjoXTH8gzCrPxeHQx4gbJ5tP2LFPrbyrhIOPHoJOOp9gXRw+WVqgANQB4VI3yiZbTF07AvQbczg4c7F24LalI5M5jXVjP/V8B3sNpv38bAFYJAs6kdJRXLMD0xSQxKnJsJeVckadUhvFG5d2W40GZ8HNcUU2owUehijSn3VuKrLlwBWoWl8susk/M1VhMhoAh2+Wuf5ptEUE4ycWaykGApZ9NxRb6MTCJY0EamNjqA6XMfM8Xq2Mrsl/u4f/tmKVU5eQ30XgeFVZrhpTGfCg27nR1+2CgOUiaJGSI2GWFsoMXcqzdwLykvhF4/qfdHjSv7XPXDCjcmU3BslWTB0x++pddP3r48iTobhN9+h7jMwSswsqpF5jC66pepzZbRsNUq6DGBiRRCHF8NUEwHl7hdjSg45dlfJKT4Jo1EY7fvJDuUzSjIrEZdqTRMMBR3RHPeQQnLlRjmbZHqnp42Qp8FGXsCMJwGSU2dj2ukuKigWDfyco37t2/mnFC/Lf6dMpQLsoTjFyhY+J1OzdwnHEsSm81EEffVNhFTre8gctQCs5ya8TKzBbJbwQWSZTc0h+ooNlQKuUa/0brh1Q5asfSU+Y1+oBaLW8CUUVm44XcsWyct/6BGpUzIYGF5ifgUziguyeP5D9f+10/evjx5M69qcLZt3dtRHVhcsHClkY+xey6Hx45ZK6cGVX3lWYLlgZRWni2FwcL1gYq/f184KDsMaYum1ZflzLaVvJ7J+9jCN0/evjx5MyWqsMvljdxGCoarB5WmELmZHZYzoX/hwHr57ADOMAytG5DNPVzLiwX+MdeMWx0elIJMjk69AYrFLa4hJ8PyP/3hK79+8vblyZsBFaMcWUN/o4a0+2M1JwCVBdHUDcNZXeU2APjuEJOdlye/VLGupX5uciRpzKHXhz2XvmxFtqVw6c0T193qn775/t19UsYisApWXbZJ+rbo99rWYsQAfIMo1E9I5vbuUjjvkwkWQtdCLrZTCr6Klw2iIp1aBqAwXc/aFYy4zgp0QhiGTCohZkIdMyDJ8QYIOT0b06HHp6qQIZE60qvctIktkLs3PlXFN2/fNrtybDeR9E9pJFxJMI525hQ2ebA3Xjjd64wkz6XgiRHNT5RJlrIn+WMGQWrSI0pQ+oaj5p9WEFbmP+qhptto6pkic68jPeph6Ra5rpHdKzPjD434oIf3b2uNCRxk7Kad0PEFIJJDM7QIi3AwCXV6axFADmwcMSiRhA7H83xJ91K6kEiu4c7W8OzN/MCYUbos2foG+E6UaXPHlV6t5Psy2F9pMdOschaKvKxm11xCPZIjxvFo5aMVWyOGuz2GON6OBLQHDYQY9mHWSz4ITko7I5zrB2/PD97M75fSyt33SkI5Heo0wIbPtppisvbNs3xkK8niTLtEhPHTbB8YaXmQhqPvI6T7i7ztDAa5WeITRU4sZvIpzzTRUdRMKcimUpH/zUJNCVD05eUy27SjBxOjG4FT2dgdhb3trVp1l7rGXVVYJhG/G3RaLm0YZx7sb7XwH2W6UUy9lGgf1iSFq5sCH9pSKRnB5IfnFYtcZcbfGEDr/HqwTis3Z71N7wIjTUjyyM0fIHWTf5pCyqjJm6h0rt7egoci/8PaRuTQyLd9Ui8/091XJ3XsixI75b052Ze4oqDvMyBTk2vcieHBEknoFKer7zZLDmenJ8dPcKVt1H8kd/TIcaI+o+2jvJs664v28Vq4jq0wspYqpZ2b1cvQSiF+U6ZZa1S4rfcMx4q0SZyy2Sb0sx6cWtYygpsnb1+evFn427O5Fe4Z1NWGoT8K/YZ9eRI1ewVEGrGDNY6mpClJmiHhj6D/y7TbDVRZyg8hPRoYjRrxJYGzd/Jz8dzd797+ppIEIlKyW5M3owxFAR4ug65Egug9m4pjvGdnU3h6iZBGS+wmsg7mAyQaMgF6RiK65TEogIy2WWSEJZhmSQiLZbbNksSh2CXQxEu+j214SvLJQU7F0iwYNv1eYKvJctF6PUsiTwt4+eDt+cGb7YgismmxEjtFc52FyqAha17BDwhJa+WTvpUCbr5u7UK1ZpTfLPNdmqFuLU8Z9Q8eVVSnlVJfU20f8axkyn6/Wt+8fduc2rE95GTZjGwyoahIohK/qy6eVjChjxXu2RoSV72A+jnN4Ddve2mKMplfiUzN7exkwltc4YxMaXI/khIh/k8xRSQ1v17v2HVdVW99HdIPz5m7H2ScgCEPLpY7Kb16NJ+75FDuV3SPRs6iF8kKMTTK3VYoCXJVKS3wof3MdslpSBztobz3E09ia+Qvy9O8rKdpOMnWdV5ynasuceUTnJ7ErtjLJekWqUhkQu9uSPhKfRiBNOplghRJ6/Wr4vAbw8BMIi5waObCIeDely4JT5PWX3P5amveCVgyvdURz1bKePQevWyn89PWJ9MvlZa4x5zmT03gxVEdW4u2s4C7o31j8YtjDtn4DPCv7HIv2dPvS60sd6yMfvbZEg7hG1Vr8Gye1Jbg6ppQddDeSgOXRwP4s729lLhjL6FgoEYF/Eu/52Cb830LX3hN2h3gXPx0rvL06nzNlpkieWXOmOVff7Pyl+ycAXkqrYN1pYas0SCZRaryTfUj0kOi4j1uxAZgQtKEwDp716zEZsS80kBXbsdaYxtTIa+9Fug6muTC56cp+e7tLdoD/1JGFSAGS5GxzEsWZUpyoVEXFFcxuVmvX6FD3pcDhMKiSfFOd//KYmOhM6lkT/9G+z3O5qDjV6jTuVvVoqGVjK3msINZ4fiDZG48+ug/SqWQLw255LVEfXKzex5BE4xUPe3QzADjixHV4wL7Evt0CgzrXpeXbLwSVDGeVejPXJ0rQTz2yKitr3MtuO/Ej4BpjmldZ5L8084/WqY3zL4c3ZEXyUC3dNRwR6JZQ7mDl2Yt2bQIVc/RHoEvmcZpWXQTxmiCSST+CUf75u3b5koc+yvkbeL8DpgtcpWhrfctwOqd5eyESuy+tQV8hSXXSU0mx2yYL15s2ZTfrDnPnUjic09SNqmTLOvbjHxCO/+URfiR0trDxzJOZyjDtjAE2TX30SPZ6DrMxA8ZPn95gzZ7yFFypAW2jusc5e7tmxGyAJJvp28dk6OHFNFM3eZy+uKhGvSD+lckeT3NmkuPZNcKCTCD/n+ybdS1G/URPvYTF3jnnV5jC3ldKi4Yp4NcZsOw33/berOvwCKicLQRS7YS5E12y9Mg5oMtzMOFvqh2tIlTjqwZBW4ZcGg7fzLZUqHRqHl4+tHI/2QTtyDBAElHzbZXcoycg8pBQworTRCLArve1stXkMKXqKFLIT+2dyIRE3ZwgQYcN7dzD8B8jbN5JXDHFvu68zU38vmSzHink7rS6GFxDAlMr583nONKucziHlkpzwmTqRo1uyBm+NA8wpOAUjUvJogRnTZftY2XQnRsZY6lKHzrftB0WKZ+vv63MNaXIIuzF5RWNBjLJDd6WMEg5mT1LwIc+emG2DI+mkFl36yzfNDi9QVoZ4bRfdDkFItzf73RHd6hmS3YnGQhjTFHsYD1Ve+857XCEQhmAD2aJVYIWxRBlHOF3739DeZXr+vLQNQaeQ8qLq34VmqwkimnnbSUNssqLl1hhM/MbwUt1bshT7PWokgTPgrLd0yA1sut2Dx4e37wZqmD5H3JFmjpC5vDJKgW5V49lderXHXLqgOf0qfZlYMOaxEAJOBWE9YWO32Zz/hU+/xBSDmN7YQqiUWCMbgqh7ojj9nXAol+7aKETm+pRZoskE5QpBZsZ5WVqL4+GYRHc/hDl/JKDI8tBn/rUV5K7e9pv56g+pFuuE77bd++mVQpCDoVn4Kys3aSyFVgHC24ITXooS2kLDXY1deq6Irzi8XltC5atEDRYYwnGA+dYdN9WSgjpfHbp8X+5t3bRu6P7T1hJR0ahTs8TuSFHVC2gdK/xNqwEyUaa59FJdL1ZbFnySsM5t4A1XVcjuGcJCjDXURqzp7xkKcJiVw0ErlJB2h/kZrcO+DX/RiWrx9QcXpnmZYf66qQXDnsp6IsEd8L+gluEvauwd3z9IfrzOsnb1+e/KbxgGhNdgR2MJ1zAULmjQeRwrv0kHkVumVtnJSqV40KLwEU0jhenJGM0ElCaXYS5jbY6qjvVuPLzdVJL+XA6Qold28hwXMyTGNhi6YqJQFGojAe1wjLE9osjss17t++GT2LIsYMTsTCO106oxhTSKtFBPNwCAdjMxpHcCVyk7PJNAj5NCxBZOQvUu1UeFijflJ57I94h2t+3ZCzALDoGWul7J75v3bkX+OZX12WY9/stHHNN3frBTu4a4Chs9yS1vaFWq+rIXzkYOtgeTM6IHPTLvMa5C3J20zC3oLjVBbtKQ2mcpEs2wNQoP7e6CJhC8s2T7SCp150gRQkRthO6EwhbfNwylMSMuguvhtc10iKY3/+ww/8+snblydvG/VxfKNuOvcaX5w9h0Zuniu/6ot6TUBxdVGObaPbLqC4vFfvRNnB8zhbLivYzyOe915eDxlLSw7o13isBnmbFB16wliOYfa9ez8X+WYQbwagAfL2qq29vBTH9g5ZXwGKAoZPSUT/ruPsFVHGvrUsQLVY6WkO8DUY87VD6SAEM7mNEHasAGnTivbG6lqiiIdrtkJsK1EdRkdc5Ays45df6s5TnoD3LcsgR3MoWvZsV5bozEY+nEqT5OPRLL0ngtt0YRpBD5/mbN2Sg7rKwtcR3/ucp23bnl4vRZ5mM6mwhvm4UjJyRoKJc8Rf8Cu0a/N7X04b2ykD2ywdS6E+zuIFbWztsOyYVQ4hdLEoEzlPZOwRi1RhtlwZxiz5Hy4W5NKeOiB+UC6CCFB+XmkrqyGFh9MPO8aQkvAoU2bXxJMEQ49thUcJAgnEkzxumuY4sjoI4h9jzz8fNV3f42N/73Xb8ijDJAJYdo4e721aUBdg4vIGHNtgaxubXV+YN4LaEGiitLGC/pm9TcmwJTCRew4DutW7Q0ZlzQAT4/QqcvP+TyPmrsbHSH9LQY291w+5vonH/uYaD6Q5H2ytgr9U4n3XoPuSQKOkD6PMS54JgL/0JKUm+dLryhyE9NleB1Fode50GVOHC/Lf8mVBrpTCJ87HAvVfGmlet6zbrIzZadGSnGj3dRgnL8dVZPopFAMtSMep9fiBQQDc9/THEorLJ29fntx3OZM6gTuNIS1AEsD7nFwfupwUsvDw+mppuWyJfkWejpRh1E6F6pkNbdTitsLda7azlTqwaYzffOjElPHv5snVUvtiZ4chMxmwpsC718tze82wZVjkAV5HgRKoQHQ3B80kiuWaXj54e37wZhMoiqzHiscnaAPTEtC2J3I1nsAZc5VW6cK07gZfd87D1USgg7SZTWDdiaz/eyO+Sw4Dw+kWuG/ujIEw42kvX8aHbwymLm/UsSeN2AVTmxv4tpR4QF4DfKqenwmtrmxuiRKItlIlc8X5qK1pWAUZdzbHM6idNIepmZIxH/IIXyMMWyYBWSkJ6dolfBqThmqhCdrZdlU3vp/IqyvigXNXdcJBngLgVo4CiEq1m/Twh2/r9ZO3L0/erlXPsVNTOIYJoCoyXOUKphNzdUXd8Jro7+I6HVsCkU3wd335XkMhQZsNPpunQ+Q1u8ltoLFt0IKlTwATOQRE4T6AhWaSKVW7kAHGJC8F5qKps4gvA39eCtWxF0L6YahLJNstuZXRYYEb9ov3xtDXdCvJIlf9yGkjQQZHcvZYXsXcr6jXGP2iVBKOK11eJGg91WycoNFgJ6aKu6+xZ/RrBr5CHzNA7TMFLTNXqe5BgivJfKrXvN5J2bOFRGh9KeFy0jlDU3n/beUEuzsv/DjZ/baMwRW7yBspDWKz2U22h6QCjEt1cXRDY5h9z4dDzAHSg/kdvuPSgt7DRhNCaQYXZMehNHjQ+39l9L+h4cHrnZ2pZCbPcs+dtWeTLDjrUsFjAQNVpd61K4rn8vMfXqK6fvL25clv+FmYvhZtgBwL1BacTE6VxKfUowU5TOvzboQNn8srwusrlXDsGZt24fVGhbyxUyAamN2JwsmT9QUhTWgHrJXn1bhtvvLIACb3aWkzzKthPGXnV3dxhrj3qVnuJ/asEy7EusxT45ZqhZJOqWwy7Z74oyeNFEo3epjgIThza9ASUHwXa7W11aUnAPY7XJhLrXTstZgNYwzW0mrxoo1F23MkvTOjcKUNjh2F1y6fcK07PlnTcNmyrZNJck3m/ffWqe2bN7vBisxwwD19F5nu6CqsRGs/smxfdHJxcFQjdWsQV6DV4MRwehQmn1lb6DllKz7RCVWd0WqUg+EVWp/5/McS26sHb18evG0Uz7FXVLhETASDyDXTKFu9Kf+KeOqNGZAdwVQCzpeYTMHyeuyLLo1uoUgRzyILHVyeK+d6wUf1rqjMkbgNcitPwsHEspho5NkatJykXfeZXMgR/VHTg3FIhy25ABFNbqbRC5NMSs1/r6zNNdkcrw+4EIaN7qTX/8SFXSV5XlKvZSTkpKziSTgyNAYBU/wQnGSXNJ2EqHgSnqgT39PiB31Y8KbwwgHqIIftbSYL/5RuHNlq7cPyiVKF/F/L5wq3737DN8brzQYyIbGp1PlJnGnC02yzYPJZBAPX/GSnHR5Q1rRqMEntb1VUBcsHBQ1gAiRg3AxfP3h7fvDGdCSaY6huaF8VmicbmUCamfF+caVC8xLZYENbq1mzjFEIlrSfEKjHYtln8t3ZB+G9MXFzdbOPrR4A92knkAC05lVQuGale2f645oY0Scj06xsK0ScPR99mS15n+twfd+PbUZjlwHZ6IcXbOyOMI/JCkx88g1k07z+yQhUamDVFtiYSBvXzl4R7L2xtjzJIAVDN1rCOEGe5SqWIchzrARz8EZqY4xgFnUzt1H2psQTH6wLAqce9ecuBdifEZjT+umDoe9KhN8G/qQzoN+9e9sonuMbRWVtXNEmQUfGsy7EwYZI8TW5m6sLdOyZSHe5m+sL98bjl29YyezXlWotfdGOUYiXZkuemWXYtafomHvs88YxcQxS9IUz1ieUNZ5T75WXNe5e3onjmztUbARzz3b+MhXB8Lc7ksq/Rz7nks2V3L4cc+hSWTj5lXjiNa/SP59XS2shS0d66sI32L77HYdmdLacaCuBkP6zb08qTU6MhTDVZyP9tuXcfEm/FIPHc7FR9pZxHT5POtGcIkvgpYMCXYxtls2aLAWolIwrRJCeK2MQeoBoES+24km+rJMGn1L+3fLpmJXlo2khmGM0xVg55BB9dDbtS22G7kvs6AdTUJEkgUG4bI3tOf/9V2aRNsS9vA7+vRWb+wEXi/sJm6zTebUGaSKZDAJGxkqgm1p6/sOv1vWTty9P7jlUK5PYoUj1K0QN6cSTV6aJR88llOYzDXecq+/Mglzc/WNP/LxLgmx0xU+zCcnmazIweqVg6T1cdUd5A3BSWspWt882kJa7kY0qT6LMyK3QV2EP4kRuW6c9LD0nE36Q+Wo2p7MXN0B1jSjTVspPmJa9wNPO0/x82GA8KR0h9HHCxsbA82YUdCxOV2I8qYJkiUwjNrjwVLbv3jZq8NirTRQEYJxh10nm2tuBNkzF70vFXN32Y8PpvcvDbFTDSxSsbu/UNxk4ItnAxAV/ZXJ76mWsxOaM09PxNtYmFE9U4LYvkkmYhSQFw05ekj0eAyuG1AJMb26HoJ8yStCnP9Ztv3zy9uXJ20a/HHt9xCCtRAvznSFNtCCM9fIVBfTfIc+1YUYn7O2w6CRbuH6Yd4fu8mI/z2tsKarp1rDppcihFFkZbZUR5PWS+LE5VyFXb9fZMFq/hNQTSuGY61w51bbYiJPxC4yyUrBS6U5ox32z4VkmtkzI9pwR95M0CX6BuZHhCX1CcwxzmbCf1ZqaqKicNZr9u86Mqh9sXVmW9A0LnAgzqtR3TytJvLwl63aVxh1+sUKrcxX0Bk4XKA1boRz6UF5yyvvs1TX7vZFgZVjkTA61h3Eh4q+zXe9MBF3dlGM/c+A6FXR9rR6iaunFaE3HFxu7fXfPns4dCB1vyr5QZ+rx3SDYK6bdE8NAg2eCNmTrL4HEJfqpozcrsHzQwauA2HV61TMWEbqHutJm2X4rESi1OW+EyTZqO2aXTRmJHt6JgBo0qPZ0JsnbaginfT3CVLBS6opQLD+ZGfBoNTEWPYovehDPWo2GJWfDb70il3Kt7Y69dqRloBnLS5oMLcZxNK15zff/zkza9SgJIitg0foZrJBUpPsjm8zbC/JRl6rn2A/q2OWjNqrqJVQt3Mu8WhCN926RnU0LVc5guoLW9OydBE6R17TIU/omr+tNOx9kd3doCyWQ41WZ6N1shExvIoyotikxLjJFppM3urrtNAN96Wmd8tUohc89pPra5eh6rubrKW/fvW0027FXhJ0iNq8jhlLZwTuuLqdOnBF94gTzCBY0NtrdQX8//+ER/fWTty9PfjO5gYniZKL8Ild5BZ5bKpb2icmF0/AAY9WjriY9vCShd3mVj/0UmV1Cb3P1XxJyZNu85MnsSDvIUkKVkKp48hsj4wURujOgS7f7k3P0RmAKgrMkyO5h/ZQghP6yTbyS/OObm2KQSzhIEwqpjuSCuxk68s7k4vXAHaME1EPZVyifb9mgTTLy9zseGBcQR7vWk/u3b+Z0MQeXsa2Wtp7NJ4lD00ICPXqaW2rSe4Aqo4b9emVgpFJvThYK5tXNeDEK8Mf0t1SBMQY3D8lWkribWrTXSZx5cfT6yduXJ78bdEKI23UgdidC8nEBxjIPEXKzqGjqBxcv9l7PRXmFDZokXLEYvrUAkEyBAuKSTMazghBq9s4A+8UBClG21iay8zpSTCYl2t4WSriPPavTNgx3OQCFpmIyDcz48Iffp+snb1+evG103/GNrhzyn/G1TXDTbGsq7WYqzl+fFd1MinKycp0YRkunBSjvnJN3lUU9XeaWbEwt+yjNQft/CPH5D3eZLx+8fXnwm9k3ulWlGfOKaYTi+TuzE5SBXJglWO6U7kblvCKxd6Wyjv1MsU1ib6PhXuLx6SYrGG9lFTgo6fWzRG402KsesgCe0J3oiGHN5rrJYC24ZWCaCBjoOz7ajNMj0VdEdNUS2IadZ4mKdtlEBhlVQ3d4NSS4amoGIy6uDUhE2a2vE5NvPMOsjo19nMsUGU4wg93/cGbeje5l8voAobvAoJdP3r48edtoyGOrUY0KkxDL75TiRffqd5Om3pl7vLr1x36e3Cb3uFES78L9WAkc8p2xagfFVZix7BuDpxUaaHC6LyqOEUzqmw4qR+dTa3DGtIxXQ3tzBpT7sOjejP3HtFbOU1F6qmZzH/7wVV8/efvy5G2jfI69srJZDyVboNMIyqr7jJu5Xm9MmG5m9AFf1uWFUyBB4z1rX4MKLhOs7/N1tgO8gjGHwyOabF6bPmKu2liiWd4FGS2ZP8stFwO/3oeuoEatYGAsWS6Kbm3h1DNSNFkhTVFLip7o5WZ6ETA3GzzlHMXcZOOKi+S+6tNc9DmNcTHZWnI2jLtNL3j4w+Px6ydvX570ORw6CBuAZmWSGD7ncEjl5XGWVVI6B3HUCGWkrzqsJo+IFUos1lZdavySw3px5nIzyZFiEKQXvZoYZx2QY0U3mc5XJNmuLtSxH5K5TbJdX8DX0AxRZKZc7Qn7mbLBFJOx/kHG7yUIiChWGUd2Z2RPBJVcV503UbKolYA403ygsL6+VRlsB87pjki2aZBks2QIog/VxA8ORjFhm0vdN6/XrwbUnX7Oqwel6TukuGr0q00ue5BR6KSFE+61F1RitJYS+CiAEwzfbpwqtpUSIhnb6Ltde37kUniD93OtMo+9iqWDCxSAnwKUkUtOrmcqvjOReD00lf1UEJdthcWoxaZ5P9eJx3OB3XII3eaV6fDgQAPCca7wm7e/mT+YbAIAh2+aiUEifVXToBxPnkqUYuk+OOZ6XOErcp1XqvPYjszdpDo3ivYl7budCSjD6A6siAOZ+FL6jBO0kIKijyIJL1cZcXKunjQYNXjZGUx2BE6D3otGiPrY0/mO+OFSzxzf6CVmVmWoWZFP+ZFON7kbnPn3SCVfDvU1eqFiWV0Wnq0Idv9tm3l+BZFKAphCkmnVJ3oKPh1wpA/jRs9ez0hxsSQMKAmcwV5iwX66xziY59TcjLlf3r6Al/+ks7Kd65kMyDn9lMnLOn2HtBm5kTw8S6tb6bnRzRjQN1LO0aMbgyGarfQTvIvacnPyndraWunehWi3kbjTM6CJ+ZN9qdvgnXFo2Cnj8MiG+rMU+KWKP/ZztHcp8I1J+FxjZmzIzBbU6j8T17b+vsb927eN0j72Ot4IB3WPbCnQoXrjwmYk7d8jwXw9GZvXdVOZ7pbo2kpSj555vkxIf9KiYcxrsJikWykhBAezQQoL1fKZA71+8vblye8m0kZLwZoeov2y9DV5lu5DrLUlbzFBZb18NcD2jcEiLp1UCQvn1sgZ8UmwMmx6irjNi0uyznmllyVPwcK0DEVEdV+dG0qbdLcrB5/GfKw6vSFhfmURjv1U+G2+/NqCvIu7iJHD02p5VpzDzaTBzClpqicprR3GvB5yHXoi+WbT+a5XYbIjPq6+1SGN/Jry87XCP74xEAMyoDKzXT/iCK9NbOZEn36t6Vfoe3Wn0K6VqOn0ardv3q7HDR/bGbb7mbeX883/8kJD1dYoHF9TJsHHVq88U+TVnvuu6mYtdpjrwsQLAHnDWrULC7FCYpjezK1vkZfZDNzERIG6kvXyc3Lq1nVDi681QHrDazf0wt3sOO1Fjznbd6TJr8zCsU1779LkOzPyAiThbhK49jNXo+72b1TM62dcuTl9LbAx42Qd/dXg8FNku8FooxWRshWUdJVN9XdLz6OuXWavn7x9efK2sUTH1nChwNrw8Mx8suwyu5m8/s6U+NWtOrYp7m1KfHML39i4tZ06nnD22/CFMLHnnOuhVZVh65bKXbMqNjPKX9EVZQ1Fuj01rTJdqYtCssBdAtLCy3oprz2Ee3Qan5X8DKmY6dJSbaqPEbMn43bq+UUwucuLcmzvFexbsiqJwyd6Y/jpOnxZtehSm3VM872O77baEBPDpSzwsZLYdKWfbMgDEFTWLS9z5rMl7qo48YKM12aWO5VKoNJj2EowfcHxM4gKdCuWl9HPLv2cN381+/19lLLm+E2GLa6q3BzeXFQZ4jTaqnsQavoKURTah+Jh+aSDzpwdFMuU+dBRQNZbW8iPJJevn8wJvYDOnnK9rZzAyIQZtn6AIF77YI6F81gzdrdNL2KSEm2eloLVUdEoLj4LL/ndnDuXKujYaizGW8gsVhchOdLB+z4rBZxRbcY16OtZHytnf2Wav1sGy/1iJnT2uvqSAdMmsiiJEclYNx/VcF0WeGfK/EpPHNsU+DZlfq1XXoKsB85C8aCsgmIqa4gv05cHYadV8oBl+FImlgQHBKorZsY5yiVK54+IraHNh9/8mPAttJ/1ZGgVQpDFFcCO2V6ms6di8+Tty5M3K6azbIIz21tjeXarl6PBP9ksHcFc6ADD7jG+2Pa2WerPMQ1MpWXldhY1P5atftafSK5C1iutsmfIVlmT50arZx2rSJqp/v52o7UnRy+SkigZ2S5Wo+jTGJdpO6sDyq/Kml2r/WNvJuhKjh0gNDdLOrB7mgF6cnllLN2mUoOQfnvFZNjIW0BLjU7FGrwJAGY2huH47ScO8kGj1wWWN/IgNuYGFSuRWz2U6exLbdF0G1ZBT67wauwD7IJ/aQmErv9cE2YorExjU09GLfFMtvOOOsWVYj22dYdtnWKjiF/g90Qj6U+xrBXqe21vGdsUGTNt39gARXs7Pf1AEIj5CmtKHmJK4RYXoWp9qo8cMDLcITJBtvmx0x2dLMkUh2XOwwmn2Dx5+/LkbaNsjm+UE+N0YdDU62TE3C1DJLoEyFLAhjWs9d01Ckon2dqQmgOGfKozJRJZMnM0wYGYdvltV9N4SRr98uIf27z4No9+rSg+LZZli5IppbM2ksbzH8tiXT55+/LkzaA+ZUDTvQqOIxsxKj2d8q1CaqtA2fMio2XkagdLiEKI9IaarWXyV2M24x28Dc1MjxYhV4vJyREG2qewp96iSK8829nHmX66fPL25cmbOQNz9mnlvwize3Cuf6ab5WxpdPrDh4+qRYhAhaRkOx6j8Vu4e6NgLq/kMFMP2qtMLUQao/vwVTa3t5ScdbbDXZRt05l7qOP4HEjNjOXim9vxb5dUxFJsej2bO0IOL2t2udA2xze6iXkoulzJrlZJrmuTj3e31A2IzZjb36uIQpYW7qcG8sqTjYycbHIcsq0ZPgB3yTcFl3cBR4FdVY6ir1KjrpfXT7AP3bqnqfnGtMbe4ARXI7wEmMU8VNdi44P+Q3yPxCjk2Z7r1X8+p3+pT49tjn6f07/WvycUYBppd3ZN2g2EBPz7nIL5zds+YZDR2m5kMmNX08IMZ/Rm9a/EHzoxHzhY3ZONtMQuophpLDQr9VeozL+T4BJ2pWRD2u3oR/eBKgOkYB/W+gsF5IzmoiKlkoPp2XE5RN2CdsnrrNFKtRy8PuSxVCn7S66g2KSjbFOadH2tC3wYogJ0xKpGXD55+/LkbaMbj290KcAkbuldjjrUUsmhFwkS++b6QXqywtbwkiKP7bNiMavm6DhzPufKyvUvDJsg0SEV7IhhSBjxeJmww8AHOZU+SQdeFON5zvgaRb/0qVHv9Ul9m8DM99iOJJgBzQKUBIM09oQdhLDOB/ptigDvzOp/1aTHNkW/TelvNO/Pe/esatTCXMvr1TF1yRpFfB2UVmNxxj2bOJanvU6PVPfccoa/V8os+s/BV35qcP7R9Hrrlrf5KFbkDtEnoTJALliWy4vipX+ymsr8BLIy+m2Kv7NzcQ22tliXWmLmcItP+ARvCqL5jLMlOKkA6D+Hoe7fvm2U4LFXmraWNEj5DHtkeiWK17EPzNJhalh9UqZ/af2jeiumLaQxZNAL90bbHSmHauE2QdyHEV2WS94HWgL3hVs+Vt0Tk2UuwDAIRVzVEvqHzcBa17uxoRmDSVpclsDEdE+DpWlhZyzlkW7nHUWHbE36XDPTV4on80mWXy2d5PpK/8DLpwXnsLfmCS/5RqWc2I+RvG2qmRFp5c2ZcZyXZMVJqzSH5FM/iwE40moj04a3pYAhT6AG4FseU/KJMLR+Kb6hk44t1+vpC9HJn65DXZmCY1dY2tahNpbj582F12ry2GrVYgoZNYWcSt2EXM4FpmaE77qchRa+FyVeNgUnmwZHZi7aN0pk6mKJhNFq0rvCCovCWWcP2hSoXtLPQIvxdA+QOmbRIsyVKjKzfRgGibuEmhqroiHHz5iPiBbhDnUUq7mMNjwmlQ9izydEyjtKNBc69diWXLYlmo0OfkknN7U63VC/41Kw4Kfp5CbAS92SmtSUgy8FPsxKvNZ8b1OwvBbg32jOiu0sKeXHsURvGO4ybI6HNYuytXWs2XSggHtHvdtWucvr2BPrJfSrr5u0wm+ab/R1rayjKOORxeMdNaRLNX7s1T6E/STmq904MhxuJTKsBBE7Vi2vFB/HLNYAptPSHoGRbJHEwO95je/evnkvc7dLjq8vUU+jrDI5KNdMbEBMU0f0/JBlSbM9b4Q4NZ6t0o1UiEKDaHDi8Fjp+AtrSIY+kWM4bLMIkFczPI7EgKov0fkAVPf+27bk9JoSzZViPbYll22JZqOIX+KAg9BJ8Kd7CT7GWk+8l7ayrMJ3LosfcI1JB8SawPzQeXd3co/G0HBez/RshFc1BjEMpcfPPczTAwQow3pHKNmTKvEuJ4WLvFRG1dkewtLkuJRsqDX6v23PU3ua6/yGaTOX6ubYqidAgAEyyW4CKiflnCQcjZ2Qrp5qYJQWX4RA2VZihml7gq/KVenOZhZpNkT7NFthgZfCrtamcvPOWszVJT+2xZVdLeZaJ7wLqIwMBlKYc5WDZ/d4vOGrNvOxySdWH1xnJdNk6FTLHOMXu4jjcE9LbBr65rmR+EcFW669/FC+kn1Nw0dmgRJm+4fvU4VT5+44GG15XbvK3GKXEwa0DsvDN+uhn++kHcFqKvSPa81r3CLUP9p7/rnFgUB3nPrHxux6fRwpyp5MTMZOlb0LJcJmVR+xtj+kvr9SPsc3ygpIOOlC2+8Ew8g5r1TX0qbRVLh16iMzyl9bPaKRsNEuazMTYvLRn9ZIrMWSEyGrpeNbTCqX1aafI61hclL019EEVNiHom8LapoNknGGESrypBRZCEQT8k2a14iMjt8WaGfeUNERDm/t7CMM4i1DuAGGSxH4YdL0ZBgDw94rZIjFtWwe0UcLQVJToATzmlKkJr+8hkilq6+qkmKVR9P7BmIB5iEAlnMnQDZmLLuBQziZ8pRt5v2a1pJsenuAD5ctr9KKdZmTyKyN7lte4Dh71Y27NGHHtgS3KdhtDN5LSuFXSvLYq1QbMgUJG/cKw+aFxkj6udiozUpWVzrjvQQp13ry2OtVYBP6ndk1AoJt2nYaNRjXsBq28YmX8D21L4DMts1G8gKXkiNgDJfYTdk2I4WcJ1n3Va3sjXWkS6V6bOtC+zrStRJ+IzxCOkgKy+aCW+W9N9MIRItMzUltVepn/JwnLL2bLIxA3eVaHaE47O4xyCLBjDAfkYhvmZyRQNF118GF2ZBjBZEpKS5PtoOgPU50aqZT1ve7VR/2Qz948uGzdjylvQrhacC+bm4u29orXs7B1NARWlzYkrYoq+jbl2NhfiHDF6NDURgFEOBG9C2ltvHmmfeXBun4xoBJjIcNdWCzI7O7HZnYDSxkus3V9mPc86eroTbBvFuzmr4h9J7XoE3jGiCroziJDpY1KnxiGoB7WyaE/v7mZR4QdWYRyJxMUt1vrdrR3Vhjzr4duurNu56ZaZ0xb/LWYVsNnujeFPneRYxi3AJ1ciUcb1F67EvtAkwGCWVV+hnWoFL22NAP5BEHJKhO9IJXEG3CD3V1HftjEfyHlbwrE3BsK3PbSt7GZPxe5RjGVtoMaPq3GL7duzeDukpFGrOBrRBTYa5VQzgZjOLfKHPgkKJqIzJqXCvs07kVEwFvtZYL+0WhPpN4vHz2yIUOPLYKk0GQ1VBTMKSD3pvr6DP8WP7j6S19oqj7K+t15G4kr7iPulQpOUu5dUgj2M1WrvcX+H9T33tFVeni1h/bKtG2qrTREi+p2UCuGqbXWqqFkx6BD+6j8zpQq7fJtWwWSr6lZn5/YROdyRIOJT1uYPlg83zio/EfkyAkWWlQ7qfFgfMzSPzu7Zv5ISOf954KdsyLMq9JKWTflcFMzXPWQAWGOG0XB/7uOQWFG9nr2nU5WU/ETW+g72jEV3msvZXr2L2oWFDGSDipJCDmzr5Lxb/ZaATb29VWTl4J6hZYptlb6cXx3OBuG1aLcQT8LRhu9+5to2iOvWJia6UH7HU4RWJxlWr1fBnlaTcOXqD5dyorOZYDF1QLkc+/yHTBH4MEYuHSX7HVxQx/XYV6Z1XpSjkd2zLRrqq00WWvaGs1irxiesBhALP6fIpszaSRXHZaWUyvejKCdARPaTJkIZ9Tt/V7CgwwiUhvhsda48uhp8O6kkdyEFEMPZtEQH3C9nmNpITuCZbZLH+DxKbF28G+UqHBOXc1lhnu9oQ7/fMguc5MN7q2/Nx1K93IdqoC0mh+kFjQT1gZYwhX2Uhn1N3MDtyzUOmMNTlJT3T2OZETzg4Zibaaaq706WHt375tNOSx16gA/5tkxy6VlfpcAWdLOFtOt5Dga49dt9VQLbUZsa5lRcAMfC7xu7cdBkFVQT8Af94Uk0XZTBKeFBX0OsnYVjxzySCYQG5OLjQ+YPpER1AWq4AkiVpRLm+teFXyEca7w55oX7tjHi3RHYHMs4eppvk5teCqQvYSxD6iBU1KcRCAE1M48lE3hQGuDhnQ5vrMXqYvWDRv2UDdD+/s0tWiX5g0kGKoPsITCe2PbL71lFTvKkCRlzXBx3pKZCOXIqeY2n2CAtFxghqGZB/jBBcgx2btGPMb9bfQ5psD6EsLdGwLgbvC4c5ivQCLdalBjr3Goc4pzRp8JQR9jtqcxlpgFS7q8C09jsV6TymL5DVgAXADEJmf84cC8zwnJigNIwYKtsRN5esvrmVVQwnQ3G1r1uVcw3CZtFIRTRZNx7Grz03t620tG8Q8OeRlv2c58ZqmaoMBjihjDWsks8lUZuFJSAHl8kXPiphVTAcZIanlxwERJdH+bowyBGrmrYX8+zDUb96+OasdjdpxwRMCdsZ1aijJxqSyQrS7XR2YDHJzGBrtKHORDRfgF0alb2tkQOmDSq3mtCUzjQwPqdHJFLIRR4Jgdt16+dzt+TlHD6U4jXMHhT9TX30moGA7foApfHkY+eQpgZo2eDU7wdPlqCKQk9pNTytrV+tjA88PK5tXRunYViq3lc2NEfu5NUUJysantb4YzJgisJCc5vV12mQb40YBi5jZV+edBL8ZQo6+or52kKTfqzyma/NyfGOOOpTddA5w5wtps7h2MCMWSEuGn+MhwP9r65dQipVs/osWWMcK+xl/rriWhKQWrh8bPDzZ1DvfCC+HdEcSOl0bMJTcQaZmD2iqd8CFPP7UzmJVMwinkTzUmv1l7K4lPOFInyWWJxgsk//4uD4v87+7d2/eJ1I+zSLjeMfZr1Oq9mq6uo/0s9+9X6foHoEoosQWFkey0YrBPpe9yEZO+Yl+4Cflyyszemzrkdv65cbsviIvxfCLJC+wLpxMaU5bFbjk0ZgdDFZDdLCWiGaa65gRhLyWKFfH1CfnPEgYPcjnO0qsV+b+2BZNdyXWa+fgE5VlFyR3pwKy8+2WkVY8SX6aW7tQWZdP3r48edsYmmNvmCp+bgA8QMeHpCA401E10Ee1QJeQvOb0sj7eS1V+7DU/RPrw5/oSFWV7QCMhMmx28iWmZ+zCjwJU6mS6qgqFLOIMYSbPVlIepg2SESTT+G3X6GOSKh2nP8f00S1C8CqwHOI6rLlv1OVz/x1qqTJY2p6GiwCtxiiL6qfRyuUbK2Xc3bxdV17fVbVCdVKa/4T9BOhMHaI7mouJwYRAy999JokUcKmuJLJullPHBeOvMtMROzTE4clDeEOV9dLMHruq6b7Iem2VX5Cu0mEz55mgwBZoyKLlc7ec3IhJrsJ0Bjvr/CDPYwskCegUKgb9DhYS6ffEr5PtUCBgoy/buLfv3jbW8fjGmtoCiaGRWLrMnDhORy8lGMyBSza08Yke8E/XqRnUMECAU46m585GNlB71IbDd58XGPvu1dSpr+6uA2QEsyeHOgELEDeUQNHNeqbhfH2hMmHQjS+P3chagIO9dLtyBZ5gu6eIK6QTwHRV2Py5/GFdJH/gBk3vTLlzJ1BJsWKJS/Mwh92tqHGGRwtNwH21NUkNDAO0CtmrknLl61tLqZf68thWR7fV1Ev9+kbOJLyTbkXA5Emrdmp/GrHmQqUwXMtW7aBAfmWCVClUb96BpiKSNUSPkvpsT041SUTQoKFdicP23ZuD1GV3gcfYtmrdtkAG61nGnH1q9Dy4w0oDGVNpfVd1QEtexwdCYj4YpxBbear0/vmk2pWiO77RizhbFTCF7htj1VccCIU+V8IvIObukVTiLVVUEq2Mabij28n4O++F1QKAxdgKFTSFBU+7rrp+tjO9npJdDrL0wLBQAEzJ7J6fgs5r+gg9MCjDiMEpRbP/TKEz4YwQQ5tLDYW3Im+IZ/CpAs1Kr1FWEFDKFAHxQ22mMuP8ZCvttbWlNm0ZRuLQuplQY5h37n7QcwwONNMPgXct6TUoa35tKX0YXg+yC/nNziRAP/xwrg1APGURVydL5uPO2wZmypl35+yS92R8CRH1pCU/z77583XoK7tzbOvK2zr0xk79/H5f25Fjb3cknJgMmgN0fZICcceBNyRvWIGxcq1Ka082PVgm3KpGFyvcvnvb6LZjrwvpBdSy7HXkt3oF2cLt5OlgVphWMPXGEijuD9OOin1jNBz76RbJLfcFBmvXXV7RVcX0jSknKK7kx7UT3GKtcg7tbaE6MAMsjAIPZzXKINUKhFPRptqN1V9hMtzp4WZ2F2Ngn3guflS7vdLjx7YYu6vdbtT++1BcNlmhydUpa+F5mGHidcYE2F1mJR5odIpXCqTGWvfKl/B6m9bOaj9T9+9pyvtP6qWwxOn4pzs7U+6uZcu41jGuo5chMiNjXjBEAn7yWa4Ty4C/kTRBtIOPNornJWrp0mgceyMDIklenVkkKG9W+TRhCirc8HfjXiBP/MRmxexrDuluBtXwbhib5Xh88/bN2WB0KGNYaX4imN5KyQyKSCNKtqxer8lbJomnbKZvtEaU7hkHo2dUHDAtsTIKid8X+UbbanMxtkCyo2wLHbXecMKYM1AiybaRgentxEFdVadfQ7bToMrgOx1OU6KlDIC54mMkb97VKcx0jtQZcvdYu0lJq9VhsTKMwZgW6JBpUiMzvUQYr/X4sS0UbwvL13r/jWAyhqdKK7O1tnADgx/eVxRthpWtRJKd3P2gkDCa0TxQoaqeLzJcnz57KaFcR3wEPL2DL/ZK6x17LQm7GpNNq8ktjILuCyATzKTrJueSwJYe482/qDRaaLTumX6TCpNW8RbqwuQzPJV7sumGJTjkdFNJfVfVkYGUFWZwX50UrUkx5Z5UreeL1VXY3TEE1zXKByYQYMOF+fDXTCC7t4HsAtWMRu1huJs+nE9+wGHTY/RCfgTKaz4niBT9CAIoKC/rXNPQid9agugGTRDAST3s30/wG/rJ2jsQBq435WphMrshA4IVNcifLdDioMkgM+nciqIpeg/OtJBpFM/SdxvT+M4UOO5cB5YbfdWSUcMZJOvoaFgtW3YvySt3RhBCBcDXDdnuCXzMya6B9w6H8jorYOypnQKynT3AxrYslU51nhCtmFa9uUErFrOXOZlU48y8JBZJTt0JD+gRflSxPyyJX9nMY1fi3lbENyb2jcCtK+19fKPsKZPIZgy7+FTo1pTAyYR3SzMUxjf28cyz+PLKMg4TgTW17EKVac1TBXIWJcVAh2Hqk05LJ5XOVSX6ffxkBBs6ZMuOWSlDAamtHIKyUX0UB+RF3RPf1BB19JMGiUgtUs7hJ5edTAp5x2iTw2N+L4R/wMGX4bO0hctoGNiAgiP8mWMhjKqP7qDgKMfXkEesuzQHytpAS8MpsGxj43sITt5SzL0wpce2Nrut5W5M7xuJgYjoqTWNZWUncZ/39+lnQ39mKymEaHfv78Mt62vlsrjlfF0nkVaFF+Dbq1BTl37AsS0q74rQG7/hFfCOK8N5fGNl5SeWtQ4qLhabAv7rxnWMTkkkUR89wlfXTa5t5rG3sQXQPrw1vuw+/dfY+MqgyLf7uiUOjyVoKhUDpBrX3nIbcrHG8x+27usHb18edBxVwDkoFq0WamFx4aiaQkFgAMz0wBdyHohO0m/A2hugcRtxlaYBrQTwqRQMdXHbc271DZXcrlhAvgxT721Ar3dAePlC/y3DCw++vFi/UdeV3xfUdmgfCdYtb+arN+eNphtuZIpJnLAx5bhLM0kuRU/xygRmBwDhazA2u65CrkLclzldEKfWMkddIKIZHRoTzOkK1iOHlxCcpRxatgaxzzAzoJ12xCHci0xsNefNSGVyfXINflAOv3IBjm15e18Ov3YZ3kgGdaWoj2/0+rQueLQp6eSancKMrS2kM12aG3WpRzD6n67jt0DugtqJwXZScnwnM0QY6sv1rq6u7l7NDearZCAlYzoImlRm40SaY3xmHPUld3tfJZ/UU8z8l2GAguH8ORiggGFi9xLzYhxtdl1Vf2PhFkqhmo2alhWCzLfbDYtekndgC8yBCcdmRC/rvD8P9fFAKdBS60ILxoUztJltedD2yEJ6Xz2X4PIk1TV6VloBV7LsWbLUdbP+15osAHuUv3fM8ZtMICmVpJWUUiDEZmdzsLl8OXq5VBuLZJpxktkZd5+Kx7/k5ZDYEiuwMR044tk8ONSv7jWwiEh/NneQ54Bodxkj+gMpryUvpvrg8oZO8McbJPMO3iVJK9NOwGXAT2bbv6g55tIqHrvC/LaOvzGi577maKlJI5XRPhkpvdX0RrLSN06Bb+z1k7cvT95sNHbRzq4rD0+Dtz82XfPMoERbyOjJW43Bf8Mm7PVJ6QFnVITBSDaeSV/2O8d85EO5/6Q+eWmgj709L5DPVN9AedlljVCttCkP9Il+ppZb313DZ6pFAqxJqqJ3bYkD4imUZV5XnCshSMMt61XN/wWFnkuNfmzryfv687UFeEWdDGsk3WUTDSPJEaNyPKx2nrgxfaGF+qy+lk6q2/oQZQ6k9Zzcxn+r/C1eT+TvnsLlV2ejA5o7WLHWdjb4+A8HGEJmZBsFOuKcuGcSHr1sHsGmLo9K8mAkSlY2f5q49g7EFmFF049y0KrEoYSz3s9QG+vQwqMB2GqWdeoPqrC+23XBYqAya4hTtN2WzKTwKkTClY0/tgiDLSLh2id4RSx/bbaPvZmH7HNGhjdw6wvnUZYDJf8JLxAtUUvtj2PXghE3WXnL0k0GYvZxOrRfkizMn4mpqydvX568bRT18Y1ityQDGW1WDpOPm1J4nWzanK885/HouPyo8ksVeoZIkw3+8MwjOGjG6m0DWCHeCsyo3gqRSQcqeGlWEeaTHEwDufEs3YJjWdm4AEl/B1CCHHzymkCmbKpvnd6t2xXOcW99d6E9cAjLJYjhnVRueAlmWR2ipZ+QFq5cQuVsLiRfphfPGXJUHcDLbbWJuSbn0dwdjsVuH4NdXmTILu3psUUgbBELG/v7gg5+zE8zMbYVthbXVHe8bMXP5zdaB71DdSNWL68V9jDcdyWoghjIfxGg/Te38FzZoGNvssAFOrUhmMlJUv5kg59QArEBzdyFh5jg5Sk0eL1KKcluPVwMOlrn9cJVSVwZtITO17G9E9fN0mYoCUa9Fa9tV+pbwYJsPJ7hV/PvABvIZjHoWGf/dFoe2iYrINDVwnZ3LdjBjBuUwUuoHhrz0I3D2oFHfUEyOsMfGiQZjlBbXODD8AaeuCKykcQ6rVti3kVGlPGTyd6/plsSgwppMfl+XTbzCuLCVUKCCMIThSq3rDi4lxjB2gwMwUClzXH+TN7oNlzIEAwolkcD/AbsxZUpOLZYii32YmM6zkLnwMIO6FipnBhXeWnp+Q8vdF4/efvypOOBO31QZa1cL7jnmEkiwqLLQgLhxt1hv62mZkSlKCAfmg3sTbF9wJ+sln18WZffpeI89oq2R6BWQNu5WKWeaTdkBchws3soRTIemVTfAXAYNpnF8nHwwGiLLY0xrNlaa7QFMjnGFO0GDvF3QDjkjF9dh2ssulOc3weUbrQcWDMgveNJNniIN9aPO2JSyidmbTgDhKUGmITUHOMm/8qGwlCh0OO1uh7TzpxRcdPFm9MwccGYVR8nc718IiaqHVNNVQu2omnpdLcQkFf3uLB5sTkijjleXb9t+roVvUY3HTg73RoXozlB4WkS+Ru4FaPxq1k9zmxYdwIWg0I3fUg2mWjTauPexjpIy3vhQP7UTO5gQndGJtzREIkEwUvctE7iNtZ1uRsaVOtjhITUynCXRhvssGbpsxjMDtvqpF2sKjiYDt8oujlUIz+SALwHY3LhGhxbzMgWY7JxJV5QSLq0o8fe7hKR03XAuUPBCz27vZ6BI2azMYhAeKItgXtFh5mbE9CR1GRw1fMfftWun7x9efJ2aY+OvfHqho8z1VYZ91byubEDbqbhy47jyY34KwEPE+yzBTuspOBnOhkXZVhz2asVQjxPvoFHvIYOEBbySQLEYIKASZwVrhAjxhkXrFAv/z4WMdhB0PvKXJaTZpW+LKPfCTCIt8fuB1qXpZ2iVUUkf4W6Qf10Gb57+2btlaDdcbqKN784KEOvW1O7GTD5oOVkL0Z+8bixwRmo/HpdAgXqyLADcs1eNTDg0jE4diiLDSZj40a8D5Nx4RUcW4jFFpJx7UW8pDNjwk4NI6bDGME8O9LFhOEEPcZ+Al1YnhffoYexCwVOXwdfu0vl0LG9ea7cpUk89iY0W3xYh9/5PI2S+TebQK5IzDN31MPyk/v4Ixf80jAe35jREprRb7BACYGl56DikL4NrsHSU16ZCoZc6jpsgHOxIXfT3OvHP9y4Xj95+/Kk4yO1CxggMDcDMlVXpfoJDHQnY5Ao5/vQO1KMisdmsxo+lYJ0Eu9EOM+dqaM/Z8PfAHMZGLliqWMSL58MkLQS6bJF29UQ0grHrmExL2gTRSvSv3iCK5GJ1b6RBgH8AmPmsXgBISbpBiaMQDSY6np3Tt0JoTEpZ7CdjwNtXly88QbRRirJrWSNXq41xtIABxCbp38xDNAI8LnrN3avJejHlnBuqkIhm3oAfKSP8G7Yy5V5P7Y4lj3u5cod+MwdmD6XO4dK6uaEQJd0SsM3b9+ujeHxje2cBO0MUdGSHXx6DlpgkpN5vPLQOtrhwTP508AcOUvkjhe+DmCAo9qgR6EuZnc9nfgRBmgDnU521yOUpw5qM5gON9HgeDU9tTu+BViCyk/GAwr6mfEDDiDJEFUlulo7FbzsBe8dEOWvRxJApSVrY7BSVq67WU5+PQNT+8lXhkWZE3ONPHhjmy6NhpIE5gcCr4th2KC2BNSW8SsOOgGmYvVnuRUf01MgKDAttXn7rsH9hs0gomw1mQH0aAP+fEX0UtcfO1TDDgOxsQyn0L5hZhitVqkGd53odbVVF2Y2FziXHeaYVr0WIJ/CcUPnEDbK+/N1ywuQQaRTkX3t88k0yECiLuEQtqEKVvIy3aSYgUNnxuLCSF0+efvy5O02kZGM5LDdUhbJlCx9T1jm6fun32oGDfrjUaz8bHml3A0TiUYu07hy7Gzyo224/wRyogCqTdIBLg1UnxfkOTJqeh0vP8mhzUYnnKNfKJ1J6Sf9unSdsXWyQKnAR3DcG+pMl9by+Ma4FmsAZkpvp1ea3OGSY4Z2TFco/NDwxq7DHc4DLzXTnQzPbCeT53gOQtqcTe8aK25uJ1/zFS7kJWiES9twbNEFezTCtS35VL0vHo1K5DckgQbT092nH8xRFDYCKM4FOrQZmgssQZW/WzUJooR8Eh/r9GyiLbsvk/ru4eQTVz9YR5VteGqzrdb0MkPsbtJgk49nazqNoRbpAJaQ8jxRybI1c451QGG2Jx2hvy1Db1rgb8Hn+7dvZkZljZAJgzoWx1CA88ilxLiQkdHnyOJzN5mYuva2cu+WkSajcO4thGTvBqhcuQvHFnCyBahs3Itz5cxeZAirIVCcizMuw2BJeqg6fOXXT96+PHm7VvjH1jxMcKmTsp70RE89nNST6CTTNvrPFL/0//55AMWluj/25sH6NmqZyRc4aUBYjqVM9LQ0jvG7hvje+NzYCm1mqznh+sLuzKjUI5uheTP9B4CfvaZQyJDTPpqtzWbk1StDgNk9ziddTQblJU77Fvqh8KEFCa0bCd0vL8u0rMsWqVKxtQDxHYqwQYq8BGQZsCKzt7HAkXBinJ0ec8w6FpgyrSZQHDZGvk9TCPSiFJ+AwTS8bLA/EiG9xEeF8BZ0ypWlPXZwky06ZWOY32glsEsYvroWXrpzo5qISKKnr0S2w4f64c03GHc4/SAR8nI0Zi9ajGG/s9X+mGl8yyiKK7N0bM0YfUvaWLlw9oNk/efKlOm26vpBOGCzfqzo8TvnG754ttzECVVjLvvzH875dv3k7cuTDgGoIJkc+6NDCtVpFLP1PTde50fU6TO3R7AQT3qDAQWF8RbOFQVrIZfJwEI60jzfDVxpZP8tVioUPChU3B2QTUUaqtZOJtpGQP22Bbr8HeAftLBpKWOtnOyZw28H9Tt8NFs5narnVOMLuMip5F5N9oscQFCc64IkjmH8N8YpZGbZEIw9WV6M4aCzZAIN0vryPYf9GPpg9C8mvmewGZvhgf3mhwyLlREv4HqWlaDT5e7M9Jacdz2RmRfimKVEp16MXp4qOsHVja0ND3PVihTmz+fibpHN7rA3XFOH7N++rb6UaflS9m02vbkMnIL9EbzGl6Eu8aGO9Pa0aDleUqpxMeA0emCyMS+zja089Q39EP5zYWyPLZpni/7ZGOcXdNRSXNBFXp6TviI7w4VCQy0jGlCd9kVtm18UQJehNq/blcG8v7uzlPaeLf9kvyjEx018h0G4NEHH1mI14jejnOLmN2BO6/D1L6OF/wnyqfzIUvpXolGATsqzna6yguLcxZ5epZyjiUQijo5rGtg1eOVdYJROSdcvFatL7gXSI8o0geaL09IsYtggV97JqwpGl8Kk6YJCMGekHI0SxGDEqINAp4/7SgZ41D+Pd4/V2sKQN0Pz4/9zM3i5v6qub8zsMdiIH7NJ06lLQTp38kUumbqszQJuw7lXyJYsdyYHZjjLPnSL8mb6wnVIAZZXAWau7P2xBcDsATPX/sEbk7rRW8EMPEcpGVTC8gN41cBpxQj4HKaMiup+zEBM2IflHkhyaMy041cIOl4DxKdmI1kqrma0bGvNqaTQS7RkIicfpnkjDFuPo8917hYf664l7qW1NxicJz/xHL0FhXTlRB1bYNEWiLRxul5CFXrlXxx7d8T0gbbRFRZNff2kXC8SA3pkCmPqFZM++dZ/vgn30jAe3xjSRqar2Z1KkEU3H1fLZPc2Q/cVduCXD/i+15OBpGHUim1YFNLlPdW54LU9KZbSzlq6KDoBYoIqqyarVJYeszc7MSA20n5qlU2FII9w8PegpGg7AEbbbZ9KLT6mgahqTDJG2le4n326xDWo6l0t46h0uXGpO2yMcolVn8gOzWrJL8PKttrWUNLAKHubvyM9lcnjnsTl2h5aNEhNThyb17Aw0Bs+9TVW6sULMf/ee8bhex+u0nXKPX6y5ytCNVYlnO22xquRnlOwWcYCzEhzPaJ83wFFuvKfji20aAtFuva3XhENXPlQxwZatMEhbRyuV4Akrv2KY++HwNDa57Bonw6t7rU6xv0MOVfRLqAuV3tiL/7RBl6ZwGNnL+kYTVRvbHmSP1OwxPeeL4DzuLp2/bw4upvIF3naQM5U/1d1ZOfN2b99c/LaFoopwWyo2dVEM+Hq5w80piTZKSujTXoKZOpJFRP1+TyFmT4Med9Macby3P7zl6GOBi3ZzKQBpEVl0KkMjTB+mB5gA3teaP9rkNIDRyiGu8Sw4wjdvX0zXVIqDQqOapx19qXpDTOxQJCyLtNROg1ia9idKA915j+Ze9LBP3SSSijNTJj/qrtzbXWOLWJojzC6tFIPbggmwBidr6bk7N69GT+B7kuda4FWozPXHh9vpOCXuOs2+yxE6apBI1e1BUoTLKp1U/KjrN8DwcWDE1qH+UHVWqjpeGdISP6EFX/3tjeYyNczci/bw7BIoWnynfS3+BKl2D1vQyMJDJJj7SE/7+6MxtIMdM/4nqfw0Cr1I1/u0qgd3xjBYahCY6CivB28ph0NbJYtKtXlImp4BGf/eRwZHybhyQ4YA1LmO1jwbSosdDKPEOEvx7yCJJPG92KVHOPgfCVl8I9RRxS3WszpMbfw14FbZqWvqxiw0PgUmoU8M5oWsBxkcCIwo969hsK8D9xSaJjqyeIg651y9xYIQaAIVWx9HTff0uMbMMwrdKTV5rTZ9O8CVYUi3dz1wSxjyURawNbZivMoQ6cEBMKUpCHZnUc5Q7Y/DfJaYP0Mj1yJPwERJsjoo/eYssM0CyyoeERf5mVRqucQFDowtDPUBbSpoZydF7rqTsRRMF25PhmaH8ATbFiMxGouuK920zua0J36bc4qosgrdscCGRsm3Fe2h/J5FqN+NYAmMAcr+OQSnxC4rwcxXRnrYwtK2oKYNsb9PZ6HTJ2MTToX3dacAhQotrn7Gopjg+H2zaTGbcWgki1Aknmt2vtQ1w9c1H+/I9yHflkh3XWl6rfv3q7t3LE3i4N8xwiWV6CNVF6dSfEwVsU4XUVIK8xHPJt2nuiGHUE/2ow7qNBPZ/ibt28bO3d8YxezTFD1Ei+ABgW756nr59EDZ2uU4qhvLkJvoUrdQPZ4S5mukZKcJnMyckSx6LCV0wVczqELV9CmV/BkovOlcWxIEgDPgatvSj8iAclASclYRoIDvijJNrPpgTq0JdhOZv9aljKI+TlP/yP8hBxdedygChyDKjUzF7hHu9LWCqvUmFnNCTWFga9YoPSuOSl0RGgbSD2wvvSUqzfH988OZiSEzYsyCfMYRqmLVCAnGypn5nuMFE4yDAZyLTBEJ5oo63VFd2cpsgLhfjNo6srtOLY4qGvU1MZJeQVo6srtOLYgqD1o6tpNeQn689JKH3urXoifSHFIFcCzlHzMHXbN7IJR6M+WHyf5vMGQXtqTY2t9JlxVBo1i1RJ18wsmLpTEtPmqR8nPbp5CVrkUEWaSqxzD/m0H/uo8ybngsTd94UJMGYFmo5Nqgp4ljL87/Q2DeyyLa7QMngaHMrcEgAbZOLbaU4rhr8QdKQSR3814ezZLAcNCndGZkzutzg13NleT5R1M6SVpBukZupdrW7DSEb3cgfWBsjcvGOp0wLK0wSCyr1Yr0r/zsaGTBCrY0bvpC231IwPKO4BRV0bz2AKddsConZF9QU4ZRoBBaZb1RcNyulddCpQk9nVy+MrZWKFwmN1meUm/a56zNSqdvsV/DsrgRQMbL+3L8Y09gnxogCNBNglyPkdRtMpx447TGf/IawHIL1FPdH4QAxsH42N5+MNP/vrJ25cnHQGhr4ZXzrCmwBGd0FmKXX+B3ZjkwmJZ83mlZFPDpycRCX+x875WsqPVdApOT3usJ78LRtSMj7bZXtUzRUMZHweVlWtrwZ36GLUN6uiN+BdgWdlGUNkK28mKDatXbNYywQqpkftkhGu8zGfK5A2cyYTnBAQOeh0Al8CQUYCLjoPQ0RaLN8AW07FgBaMG19OwQhJGAfALvAf8Aim1+Ej1+SO+LkWfpMBxo1hgsyKOq/wWuYsLxZs8MQ89ufTVoNWKNeoNv29QQjKuufgaybM+Txz8sx4ql0OCB6EYtociDApfUQUsOOSRsD106dk6aLELPXkFrM421suMm41wYDiCSHHNm4f7XNnMYwtl2iGfNib2QaFaz28yMf3b7vDduzdz5nrEJV7rm81Qb7SRVsXUy8uT/k6WDJf+pHYQghe1IDjK3gxGT3gtVkkCMJfKi/oOro3JsTc+qDEJJtSXbRiia+QlmqMB+DQtkXN87E16D1qI+nDGg8eATrCmDhYyKilIEg3jUE9+qw246F2IFp2rdDl8Nba8bjHVb7dGBSfMMH113GZOfoN/+Xn/v8U8tJjGBY1NwZu4QIuEWU8I6BhOEQpMM9OObKUhakTO6iwzJXmFvx3VI8tZ6iOp0s+QKxcm8NgiUfbIlWuT+RKPGEb9UGbwnEakockqmjEYTDmsbSzGk+3YFQZWo5jYxlByjctoymuB3IGPhOl3vCjHMGFKs5y2m2kkdNFktA7Rne+KDQZcNBndhkbbJgIty8snltfjmEc2Pc0QX6NpLv2IYwvn2cJ/Nn7Hz+9xtW4kQyizwFot542CVMAb1v41OE25sCSIK/bXV1fcFMvyGL9bXT9GyirdX+KbXxrXY2+LzbcBEW/kX5HA33bVMLlW7cjMMtNnPvc00msw6aO9WuD23dvGRh17m1bJMEBSZSvEKkfHyRsbFZQXtkLZ++ct/AEwAcSxApycLQfA/OTRFuBY7hqTAZNCl8GQn5OLB4SJJIRq4YDn05mrjewJHhrwDSHkGt8MOuo286NRjDL2uDochE5CTaJgt7sTavWWVyRzBVJ6ST6Yji8U5VzI4DidQ7Ba7Mr9NiDx4leALly/OFl9rVJ9rY46ooDETuCIxw8FRuFh6MNPATwXrsGxw+Ns4TsbT+J9xV/jOdF5prEW7uF3tfJjPNdRenKfq1kZkwYIX3fI+eyRoBhi5RB+ZxrxsdTyk3TmpVdzXEOJNrCjjQf0cxV5bbuOva0DKzNs7iSXp8PRXJdkSmDwFKMVqrsT1r9k/67sw7G1JtHG5zHcjwWW6gtp1t9VXIVTUazPo77Je9XgNHF/qyD3bzv9cQmdvIphWiXz0ayMzYmsEPCgIbPOz+tOg4YsCWcxDZmmvBqnRcZEFWvoUxDOLJ3nQPX16B3I3+AXvlPFg8BktTdwjVowOwjfQnZgwgbs8170zsCfpT3WlihB8Rq0wywBD9sSy2rE24B93peZxiIrcBtL+yiicJJQusICmaFlY3zKCwKR5ygL0AOPrb1eYd/pBhABslvSo+6RS4ANtaB/mlJs5TOO2b95M52G82b4X3C+2s26DCNJN2azGi64BGcnoeMpmI8UbXRWbqvFjQqm/vkwqwME8blQ+gNI1JWJPrYQpz0k6tqkn+eegPrWZB5sqLYcT5A+/OHnfv3k7cuTN2/5VGTHmdnKI4s9jLsBz7dmX4miD6eCw4vCufDLI9FfgxBlXnUP8zh/aUrvrU5eG7rjG8NIJkHBrf+gmJpjE2KzIdYWOpGpMzLyF4DQQIKOxsVAmRo1tKX7oYUq9LcbhxVtZSehTmASqleutL/JWc4UjFA0Xco0wLz0SAz1BiBSpghabb54Nm5tp0sEKG5ocky3NJgsujfvXwOX/lKwzDCiPCv9NEORWzV1UG+e7sGR3lYUaZ7JJbLmJc5xs9GcEQYXyk5yJoN5x/pKuSBzMbWAMXF2nIHrK3tarUgGI9z4ZFoGQ83nGBu7z9A+D10izdTKYP34CRmUvfldk37z9s0i7iZRyG3BfwPd0od1Lcm3MsPFGnP15IQBo2nq9CXSuduX3YIo2LqFvUCUXgU5ujLmxxZDtMUcXRv/l0COLo35sYUQbSFH18b/BUhNmOkVJ+S1Prm858gg/QOEjO+ja/aT0V0/lwGhrK9CaXqOEtL/Wpxry3N87LXTt0mh1GBtiR2/UqLg9MSkFJllfxIZXD95+/Lk7eYHaAMwWTj4RAw9Ixl7goDU9gmWWuthYHmMH/VtLWNYLrCTW0gUAf0UYmzv7cG+9nuOvZ9EW+Ac5jjTaTuLs6qhjxqcSv7zg7FuPa7cCDVWi7AJ6JhP/72W/QeP3c6uxr+x18c35j0TDhdzB6yFrbpoMzAnJlA/tuTwNDMEXllQgn6NEiU9oArPf7hXff3k7cuTPlVcUfJInpap1VCli8KamUPFDGs2M2HVExjsCCrMsCbasZ3amkplicnbTqwf6d2ALwZ25UhDhn5Eo+LmTRBYDbmovrUS3OpkvBuA2Pvah+m/0/5OU/akHcJ0NqdM4Gzzpx3he7Jqggg2bBC2IY3g7DcME5m9InXU1ytNsi+KoK+dk2OHkNriqa5dmRewTVFZpG++r/VZhcyZLmC2xSnlG5PCbCdWxrwYufBaoa+E10FdWjqaHxTruyFfFy7UscNwbRBfG4frBVi/S0N07A1XRnXNQVNjs4bW6u08MtzAmbJfwaKI7bEpj5ZVqYdoCj/b5EMJnN2abj3htPj7tl4/efvy5O3aFh3fWS5SCt2WLSkycztc9dJ/zqIBGzx42CGZJiq2beGTn80MLTRuAQalxc1x+eTty5M3Y6Cm41OeBToWSlvHJcMvYo4lfLpyK32icwoEMjk1B9rIUp+dfRMTwykYL69Cnedk/quhVDSl6Ctaso1i9pKvA4RntEZ9LLU2wAc8XiOv3sfOwaXOtmpDGI9uVMaof53otCQGiOkzXtUW069rOBDwCn0l1+Q79Abehe2VC/IkC68fmwnLQQzTfEmsVnBSLOKFYC2cZrSkRz6bPuRjwMZsqDCLPHyvuza4ZUeF0WT8VDT586WxS6t67GBoW9Taxgj/vsA/OyQAqOwEX7MW2A0K6T0UCnMYLmKEI6hcu00Dz3zmVXNkpEX1HgorpUHKZL8oxSc18DN+pktzc3xjnsyBxe5xoxAeL9vyOuoJO1xkAUJ4dAdjsXEktG0zqczQRcNwHw9/rKLJ5ZO3L086hKU02jwc8Vua81jXZDSCQCqg/pYyaycISJFHtqxMoxxYP2eQ0/E7XVXpLLzY9zZwFVdaug1KCHaKFKW5+pOUeiDBwcbKSa8WMWywWO8EKRFnueEvlpApPsfb9J0vBOpvI+P6bYtpehuDhAQtKobsJ7zYZBFe+CS7pH/j5UlpLYcFyYpJ0SdraWPjq/cfJxu1MKRb73qiQf/6dOl/QstGMhG25eErREOkZaQYlJzTwksrWHMJxB1fnYsJrmcfvURuU+IOfpklptIe55m9oxCQkzPNRreio+FT+WwoOQj6zW5F9Zw708CeZLWGl/J1E7yy4R0/xYIJA4XJ/X0Iw98w5WAA/jcwm1l/HHVyg9rMSJ/IWnbxdhBQzTBWx3PVPlViOnFpdRiIdWS9qEJw6ZwcO+zcFmp37cu8j0/k2nIfW0NPGJ57BVbf9IuzNnZ8rtuL8goyFXSGp9DgT89fuDaLx96MTnqCitF4GE4iLYJ13DD5Qc0VMvCA+Rp47Q6chdtc4CFC9crXk8PnbEHBCE6LHTEY4RTDOS/mAsz1LuhTncA1umGFsqGMjBqumoJNBtwpzOEblrPcAKVOw//qKZyYLZzrssDQ+nceEBaYRUofZQG8PaMKcJ66n3FhUJWNPigMKye/iCQQcU6cz8PXfoD6xmB32AgXWDstsg6A5q1kqxAA7g7R590GwwAYzJUF5uFkt5SCFPVKLlhfaHO+yGu+dD+OLUJshyjbuCsvqaQPG1FUwOqbCxLmYrYiERHK+Z2K4C1KpgGI8QUW89OqFBavqV6XgmuWG2LWVZ1Pnt0PMG8XLtKxhbDtIW/XLtUb09WXlvnYW/JCuWMSKOvKZ1CG3jhZoWYNVjlmTuCsj9WBN8wfuDTOx9aUw4NRQz2X3Z01gysYABP4qnsv702mGLl5jDbyZ1If0q2bC8EOeJBIJMFGOL0mCNsg6LRpYBuJkCcxjJZKAVH2riVczTdP2tng0WijyFQQbf/Ic2cfx0XYZJLEdstpa07+ssGv/RgTomudrbXDIekM1FrtfpiktBDscdGdA9X2uUuc/8gteFu6ITiJe6dhH2p9jX69tu3HFl22RaNtfIFXNKUZD6M+taa1xlLX9EJgYIyCWd+Z/b7jqTbtHI3StsaWTvYcbWOLC5GmwKC/qn/60gc5NhC4DV5u47C8pA58ZVqOrSVC2BQA6O7o9eyIYj9kovtkzF5GQ2a99W9N8JpCTITJKBl56WsupGfz6ewlNO4xuMMBoIpCJqOipYRbU4DgzE7Q8w0mWxtGGmzoI1zpL4SpFRuPxHVLOojuZOzkrtFgtt/G9uttLheYtr8DwioSDCTWaosu1fvUIuyMSb/BVq0Xm6euNoCsT3P74glQNMYVDM6CaEtzeCmrGfIyt7og3cFHu0h3yUbY4MpoA01CdjR6JSqzcSkUBwZ+88Oy3wEMu7JQxw7otceFXRu0U3G8fm64laphj65r4XN4rxudn2AnbB1zTRKk4ynQTuTLHvCj3r1XSxq/LQwB6fpHajoGU0v+zOXuyWx/CPH5D3cTLh+8fXnwZmwgmVkBa9F4LsZZNqm1GxGi3c24hp4ysmMYp5otuywvARpgavAOI7CGtEfkw086zK4N1LG3Z/hritdcS6dRl5zIGFXK6M2uq16dj/wrclp1sM4m3QN5IBsm9TmOffvuzcC+MvcUCQ1fTX+FT++AflSPujbGLjj3JIwPjW9HGQf9cl94Qp+QWDQ0tpyR/pq+lB2aKEVr6LCEG8OltSInRE2W97F9xb0KTh6/Qx/95WgiiDkljxb7gsjv3uztczEaDjkQUkmmxWcb7NGpBjIuC76TJSyIXGq2pNrDH64Grp+8fXlymTjc8Ooo5VG6Zdy8kp2AZFBArPpXPuIHODu+EQXBRuONvUpjqjSFnqbQ0VtO7wZB/Y0JPraIpi0CamOyf8/CUVqgH/k6I79/+2YGVIoXbLWjv1EKZoe7FsD4dkeLj1EXO36yCRrd9lV+SHL8M1QyiTIu+8pA9RcRA9r0rk4LqW9gKpaSobEFNmIokG1LYjGwBbdSjoR1a/z/xJ1JciQ50qz3PEWcoAXzcKf0+2/bPjUEK4Ll4CLpzvpF3pNiMDoJhwM2qqmyhaBH2zOVkDaubzkTJ2/1hCtBZGchzLEDhW0xZJuI54LhbE5Ercr1WZ5a68eH+D4DmjL6e6poPDS+2WpYHe1GEXuJeBS0GMd6lgzM7wWJc7mO+LkHP7YOH6RIUp0Ou0Xd2vvITBsVMskHFHkTyv1XRH5vygfl/D2asj883n/wwOv8mx9fvvmxceLH3udnjG9HW5aFJ/Lph8/+wiOmEJ9iSPsyJf33E07ghWgOehoznMPIudGpLg7wLmAhR14km9DJDRJ82gaAd9KTMz055bLA+vYCb8ePDagCh7owEV5plwIkMesahGQLAROsydBzuNkVlW3qVohwgaES8nsm15gxc2l/LAqvAlJ8eBLmAgp29jGjgVFghxar2WuB0GPijlsNV0HFzqKSYwv92kPFzqOYG6FiZ2HJsUN/nUPFNjHM51jt9cpzDWGbIhixtrusGkhjwDG1vrYvrXKl1Mc4XY4RjLRjn59T7AvrMXPob2WaH4FGTz3isfegian6yDwmNrSFnN2xTpKHXnUFs5mYf0aWz73EsXMpVFNCWLfWrnVVJs/gQ47uTAHgQQTy8vK8DgIvW9AEBzUd1aWiHyNqQv7yzr/58eWbTtdO/iMsdaEY3J2AFOr4hlqv7CHCi8MhaYXPfeBT/dzcnjTuuehdA7HGdLx6ml8EpWXxSQdhrQDcw0uslEkyTsJb2sG0pKpPj0hOQWw3gr6GHXOIm9wpA0Vyczgq9A0JT9OiEEOPP1uI2F1dVS4hACV7ewJum/tuy/mAT+w+pkSgtlj6MzhvBn8m2t5ppfjE9gUbxHHhfL0lHrzHkHzwZ71hTQS8/LAi0NNvfnz5pk9flDH7qMs3Dh+1E1IqT+XJ6CDZ643PwaAaNf8F5Rtz4p6S2ImellW2hV3rOVxlgc7d97HFy23xdefu/oK4Axm9XjKT1Sywm/lwfhZJ802BfsTrkZ1hBKWe0d3RsP11wVPsQg3XfNUDkXy9ntgb1LlOHcfxjaOpjFMDuuKmWUIei5eyyeaiOI4YMqDt8VY++YkkSqZXZTF6X8DpFIurDUMsBILpkcYUfeUnFgxNheS9wYokkoNrKjLmfeGs2xwvXLq/iwWDac+iwq7NKraFrnxbALMjM6bNpdWyRIbOsWO/jQWbUOhZDlV92ZZiyLMPxgNFH+erFnXKnx1y7J/+tjTsdUJDUuu0JkEZgvRY5pyf/e2zb358+aazrdsLoOAnbPfM4tdAjMCOLVSlQoIzYOhIYQClSPROOC56czweTh3p9on9zUnH6yIqQ/QCK7LNLM/sb3OnS6+z1UWeaF46doeCgxhmHFLrs6zKgwjx6gx4IWdxesN7+9hE8hXr3FdQYEbelUbpc6buZ3W0UJ1JLMOmXoGtCcHWkBJ5uAgZUgB94cNiancj786CmWMHpdsi7zaxzz0D2p1sU3oJWrPlgOopQ9SQpOquNdiFlM9FRmDC1+xLNjspqMwwz2GmQ0Ne9oR2st7ZjX8AFjwLv44t+G8PFjwL1z6dHG+RGW/FBf5+c3v/YTm5029+fPnmxyY2ObahjHLGEn11AQIk1yu3FJix6aSXE1FzuErT7dzxH/tAIUs6flY/lUgM5OeodGQ2pvgaexxvSRBt7Ih1e2jQ3RvcX37w8PH8mx9fvvkh1FOeQlhMtXvWRGEZcEpEYFmMu5U25RSozoWOp5dvDqzPGc0ITTB2+GY76iHdjoQT9S3UiA8lRAlY48MZmAmd6Cc1UVMs7ecNcu6fe/X3mjGUUSCTwDeApE9pTY5O/KkFKgt4H/oTOhaYYWi4BsujUn7OkzKeaNfTXkUHpn8vhex5HHNsoW1bJNx52HPBoFvX1OVQUYgFBlhCnVcmcWKS/0XL2/1agXrOpQxHu2SKcHN9Dg/c7OuBSn/HjV+P1TsLtY4N+m4D1dvEZfdBB059/PFNSDBoYxZ9jj2zGO0p2jRguuu6mIwrvQbqd0zvnnnMY+tfzT50IcFYdrEIVykQpZ6EYLmv2ozQaw/+75lwKA6AyXaLCX5gCX7Dsk6H74H/LeaZvOoBV2gknFXbG6aW+mQntXB24owZ7oMU66WycA8WrlqK2FVoZk8Sf7KuDC0kysbaQjN8ZTwlpc6wc7dVbLgiFs/Z8RKAnSdcw49mQnwyPzIVFx2DTN/Tgs2k5mXlVvpkQdaOu92lQzfurd8xtJFIhJbnyiKY8aGNaLdNVW0o2SF0UBxWmSkYzavJdmmTx+pDSOa4Xhu6fa/Qw59h+86c67EF6+3AfTtnfBseJ9M9VK1Oy4aDcSVpYjievgzbzaUkgrhvbnPtLOiZtg5yrq5cA1sCJvmtNPr3g1CnrujYuy6iMnMljJZUROpz/1S9MosRqKklOks5x1dgRhS1BWMKhHzNDlvIfvmzYLufQhObb358+aYDiXKUaCSGzOzUdMaxyhEeIm2DEhHkDQsUtnBGiIkm5CRrZ72ORgFEAO+mtOO/wZUx+TGJKMAO2QsO+TmpQJuObM0ezR54RT+nOLTfBpbBQGIx+qAmxapL/tQfsMiRdFOLprGzVKnOcGifoCOa8hoZY2Wak50a53z5YYGOTr/58eWbH0rPc1C1EYj6bA7jwJNk22yaUEKgh7m486lUQaZBI3Ta21w6L9DWWORsEXIS02W6JqIkIo/TM3Q8mmVD5SnoxpxLcYfW4lw0OXblZg4LK4FGordNzWFawEGcJjQcqdJrrP4zwN6Z0z22CLw9Yu/cSV8w1M0tiiW6kbWVD7F6DLjdatK0vN1PZru42aQ4Uxhwlpc/1RRCVCNdlWseJ4T5Oopygzb8mbs8tt4VXqTk7C9cKXOV3hFR9FUjPLpiQktLUulGZMmpNzq+8V592VstnH9JrsQOM5nAc+Expfg6QvnXEW7EiwzmAIhYbTnBCUkATo5OtVrjqKUAPXEglJ1v8Dt4huLFcMBUdrYZjxHI3m5EuGbAcwstiyTtI4KMBaZhJn91usERRRop7B/O15V7N1C01QI/B1tR9bFvTzfXqEMLP2n/bqF+4D4moIgkKYxzaNaNnFeFsTyLTIfg6VM2wpWZELCeZaHZ+xxPVBVMo61hrm2ffeARV0qOw5Q+wpi2d6+B6I8mSScCirAliFunO0snmCpouEQvwOmrrk2N0EJHb2JofYFi6PKOVaUVrS+P+RqD3oFhOwstji0obQti24QiN5qas/Di2IHSthi2TTRyQUUI1Km967I21mxMXdxMPWSZFP4guaOnJVQGYCjSAs0vPK8yWS7tk/UiUNW4JL4/jwyOfSRR6XVnmi/SpYHm61MOaTiTNsVlxNevoYo/d7zH3k8nCE0ybGcssOXq8AfpH1RSRq9+h9c4PoOyQV1aIJxI8SEHpRh2/rk5aGd6MHT+zY8v33QcPsSC3ccB6sgtP3H45vI5gwB3LLZeEDtoh0HDq4I9oFz1CdOMabNAQX4mRsmv/DcgMVjjBVNkBwtkznNlTnQUS9KO29WMeqIdqOyuEShNcdK2j46hj0tJAjlh7lR1xH3sjmmHOtOyl67GppmU6cXASM2xMIyIxrCd4nTVeOS5/z52SLUtru3c29/XnGe0LFBnnSsmmN2NWIX6wGVNNfqZw5JBRdCzwpfm/jen8pw5NiOmqBDoca2zXbS1p1HLsYPobQB9mxjnAht7ar2PvbWPq/IUdaEYkHHnMJlSbhABJEQ8wisXtrxWZJBODjWp8J8/o5Zvfrv48Bldqo6oZvZFbrQ3laFB3JmtopQzHUFIWd0ytypbZQucxdE6+kG2jV6sbUn/j9BkcIU32oAPYBAWQDlDB5iNBv+5rbCq+OOB2A59diNWS2SY9oeKr9DCdBcUT6CJISXXAlNy4d4dtOvzdP6ACF2zk+Zg7BwK3Q2L8LL3VIHhLhywIS02OdGd22IzhhM9H6+xN7IWpBkfHKGwhFuu6Kgq5sjSlpbjGTJ5RP2TssIA8oPjASPlw1QIJQYIvwUa66In53NJofuAOrAvmJz+WeMdw8SBlz9C9StrB2UsuQZzUM4NxMJzdJl1ppUstYjDgRcNpiR9bPFKh1ZGy7Yo5nVr70DpnXr6Y4u626L0NpHBfX3MUx9zfOOSKqUC4GbcNvs3sxP9NjWvanbz0bDr77IDf6+Gzo6a+3ZYttxwcY5BIX8ylL0AVnoH7/JwpBDK6KyRklVF6/OxuDsTFUvVtyFFfi3w/iYyC5LpCMcvm2UHpzmNXwbczky2Nhc+AtdLOEdy/SrCaUR0aUQ8yJLtYyEdOiPvcDL4ikXs9Pizw0NdgsRoAsTb8RD+umDYH66RVHSPBNY2uz1cC2nSsORcTb6QvCot5RQ+bY9B2max0lv35yfEiOZ3onyx48Nj8CGxRHPFvOnU+rqkn/8I6d8t2a6+vgpFiz5mxh/Vb62vzzczcEdYEAmnSlJzHOcKi9di8bHTDYBA3jWU6dOZKYlcVhTZEWbHGZ6zJWY1UmoL3wSt+qvpvQE7dha4HFs02BY8dh7nXAMeO4tcji0YbAseO490LpgjbVRUgsIFqhvSPzyoeHIMupsjO8pZ5V1k8ib1cV+dZQuq73aLzS1mWtvd3siwf9arPg9Djn3Y0hlmpAKjhaO96O8YhowawETynJYTx/l2rS4dHT4JQY5twMK4YJk8MiuOMwTlrlTSY2lh+puxB5n1ZjovKkaqcztm3yxmVOgII5nlvnKq1Q5Anw59LwwWxa7MZuAYyidSnjfgvWQL2Ep5w+JdDxlTilXERJxQJW4Lps3nfQrLSi8SWrqyUq8ziNkV+QElK/tvO3aOUU/TpacSE/p5tU47kaW7/aqhMjMD0Ptaltp8shQ5jzqTfFSG7uJeYpnzsOTYwr328LDzMOY+IgyobxAjSmOtnIO6ErIJHbZbzIzT9mEY8Wpp1Fxvssanrh69I1yGEGIzpJtxbWdR1bFDqm1wbZsY7EaXe+rkj2+CgqE4WWmnRHW7AO9IDdtlTKrPVEo1tV5VOzzzRsc3rotCNzasarDfWUvRBUXoPPvyWnybmIP+zr6ZBMLNgt0yrvb2gxZ6/sWPL1/8cKUEy2K6j0sFb8E6DjpkkaomgJB2cl3WSjzaUWECKgFhND/G0DBCBOXjVRbavk8j/SbebYj2Vc0m+FMFf/K5g0R+WrTh9u3pbcYNPu63wWSQxhMjDl92TD7lJ1kORvyjL5uRCh/5OQefXcLq0rnSOApBxmNx9YcBOzXASAeYW3qlcgh873T960MALvuCiz+I6QUHIwiHpeYXMSdJ83xy6+RzY64rGYMGIwBYc59rgbhPdMH4ScfMsW4o58rVoRwCwsg9TLAU+l0+4wdovLOo4Nii67ZovE0UcecMeCNop7rhK7eA1sug1Og79WNfyeccVBR4oa+Fp7a0+cr/LEzh71Hpp0b1xqt6Pc/DuRc9tk6XwyliUCZP7Gx5gWyIk6Lp6aEy4d9/yXX+GspSCrUk6mIYJ4tZIFI5HDqDje6ysWYH5uKph/+EFqJsbCrUSh5OFpqm9z4AcdtFG3cD2ISB97umJMKDE2iaZwpNYKAKj6Ebnw3g7TZwGGJ1UZwKWh4Ad4HDtN/AClmdhSxOL7aBkt2JDTtzRccW7LUHh527rtsQ8NInJdsBut6nS+1BD981GAnOHTFAFyFokLTGIBRMnaUtzaLxP0FpB+bfNqy8lg9/NFdARlOLrL57yklp0hmHRgC06Lu0IA9MzJr9z44aMasUl5xZZxgFDmXHrc13BbA7AHdnHv7YIuh2gLtNQHBfSXlI7IfWvNZtpleBlvgXpsOI2O4edFjHaoFp1QWxS0GGI+lZrQ6xsXQz54vatqdu/Ni7fQADvaWSZRws/tdm0zm1CI5/FVNiGxHutQ3nPvLYu1RzcOza9GVb4Pd5GnqTYqPW/YU16+8JNCd/PFQGg8DfW4TozWZxgU/BFYeGzYLHMPABmbmG8ZUTAF2Yg7YGcPy68Pp4uLfJ9MvFq5KcatN81hDxIRVzlxCorUqE1RYOA/xqQ+b/qZ7vSB/EX/i0UuWrPhfFUHP+Mi59NdaMKaJmkYPw2bRu6eGsfMviguan1X6fvAe5gaY93/tP1KyT5NGjWC6ByU9HilN0qyApHVM/imPZK2zVdHloKKvy7wJGzNRy4x+Dgxu+VOJ+gIQ7i0iOLbJti4TbRDAXQAnAYBRxM2uFzyEnPsfTM+tBVBJmcUlaxyVPb4/btrYl9EgQIwSqI+H6zG/pyV9D9U6DpmMHvdsh9TYx1hWzCueu+di78lIhJhHzemUk89kvQo64Dj2o8tjxqlZ+QzHz1MkdO4+oKonXpwpnMaqQOSVxxmaI2pMp6Zfy1OX1H4khYPSKw+ktBveycYyWEUz1raFKsW10Cj9gcEBAHGxkn7sQOHxwxWK26Ya+RHjuXzb7NwFv68hoA+1tOXE9SZX5uNx9v5sLnP7Z4uMuacvO4mC1IYS4Xe1c1rhjAZFaHE8+SnL4MKXwpgK+XRFJRvNpQAPInvMB/05Pb4idOwAEdGCybYNvILPiXlebKgNmKoWVGbs5kict6X+9F2SPhIMLs7tONEUiO9V14eDGa98QlRkLEZhmAAsgpAggkGcC8M2vfRoMEQWZRnxleFI/iX4kuK+081GCZyh04ETszALJoPNTDo6u1HCDl54IviughGfO/NhiA7dQwlPff0l3+NS7HDtnxCHESmhroSrF5clJIRVshrHpQe0QxfoSNlfvTgYZzqQjt7BaLz84tOz8mx9fvulCBIkeVpL9AUmo6mljzkQxX+JAdwffdEmUafoHLW7I3h1QNDmnGpKf5tLqa8flHhBck9rDgH84MS1Uh3cjoJgBEdG1sRix7rMv56C5/wAEFylczKzEyOdgnMnbHETjehdfecHQPf7sQHNXBKbMHtqLxk8K9U0/eBl8ywLJPjm9QwvnJTN2h+6EvWN42RzuTrA3oRnCnFKQuZlWk7A52xWZbqzM7M9VWpseDvqbr1RZ2jPzCAGVO4HdGGr2QWHbZBLa6GA33t47c9rlKL0zR3psUXdblN7G8f48lYJPM0WJpmiBlhRjZUHHljjcVDXLD8JzljlY5FPX8hgekv8PYCaiRuz0OHZiX5H6N7S8TxzjsXWjFh7AejpU++NEo62oz+GXEPVy8omgVwNhL4hqOf8auQDZSoUL/jP+3v/6Y+MYj28cKTReEZyhlgjQyT+3jMdelmoToBLnLO8tKlJ6ZSKnpOO73zrezRwW4+EOeTcD6gLqCVJIKkA4AnuC4OSPgJsaqZgcAUAUh8JTz7K/U+OCyPeZ33j9fxHzNjSzGsrDEVczP6Ft9j2mUZK0g7Jj9XYQudtgWZ3aKprWvjwOjGBZsHvXoJ4bdZRZlcRsQFyfLz4p4ysxnMfU+1+7hwV4gPRREH18FV6kkeFJeF54dynqOvrKTgM9S4gdk0Ma8caQ+tmTERaANrpqsjRqLFjUVjOIIdsPJsKEo0FXKXmZ5oEfYwd2/8myWB6Y0bR8K5MDvrzYnPXkGlTbWRxybFFqe1TbedxyH9xGqoLN8srnysMsLk6YwdLSKPE4hH/x4RNYUdVXR7cNtKlWrG0bMHtcT5reouqL8XhnsdOxRdhtEXmbWOvGztVptHHsoxPQktVS1iFDYP/ybGPFsZa66Z9hwrfWfBHjzanbPr5x89B+N6A3WmCZK4rNGtaca4E88utAzCT4qE2DGqpu0yX9LGN992tH4jMCmH1UACrvORYSv6j784BXtqogo45Ug5wFkz4sIKQn6B/bH2Igaaqgbc4jj3brVdsi27rkiLucQASmmd1cAWXKnqcylGoxo4vXnQPh7qOJoWhVG+Q/QrBzzeca3ZR4XXG8ex8+W4pwibpFMKXZDVyFrP4/MS3mB/ALaMBeFn0HsO3M8x9bnNoe13YeKdw4gczd7irEs2wzSm1lY5WSbvV1lDWbS9owcvKYAHWq5hewoWNj6dlceDfLxi+D453FLMcOYbfB420inPugLOcO6vjGoQ0UtXX3GqK4Pn/cKNiU6nbN4v0c3gzvT5jXkS6wx8mOyrZgKDXHh5knlnIBZi3oiD+cUyzYew+OJARe4x1DBe4hLKpCJIbiNS22PUIM8M0UipuxbQuSHLUyBK8gL2cTs22tj0ZtEGX/Af4Kfm9zIH34yi18d5JB0RHEFNfCzb0/EfxncK37GF+4xlTFvNqSG/Szy2MwhEpJO0FH2twWDKjb6FkDIbWznp7Ct+h4Y71hfrFD82J572Dit6DFdnaogIDnsByqrBGPMKk+uUOzoM3l//B/0MD4tiLB5s1i5BLmkCAfuLEhLtZ74W5nnvjYItg2eLdzv31FHZQEvdghlfeKxC8lOHsTC0xBeavWFL1qmOjC1PxcInMHnqAXfIKD1Xmg8ibjfMtU7ZlDOrb+yw4t3TAmvqHym5DhPXz+mhC/Nd1Y2nEv034/CyzFptqZO5RFhePVC6F54s6SauNUHsJSOS72SBZiQMc9oJgqq7Vb8IqAYdT76wyJv/Zo7gFp0cnoZJHsC0mHAwayFjB1AMjO+3CyolNQ169jnYgQQfa752AuRqzg9u1aJIunRTfQCI8/O2TU02/o5TZvfheybjPsGqB6+cH9xvk3P75880N1L0h8k9B2ZivWJDh8/HTsHZkNiZ+KYdDUjuzYjFTEzfxHUrfmlDImPNu/wb7cWxmHcwG6i6c7VsPMuXcsJYrFbUSaz/lZxlbtai7IhpmX5CzxyY53qO4cgW5ZBHVRH+80YDh2YLEttOw8vLgTW3YWLhw7sNgWW3YeXfy8xojygn023TZOs3bClsFD4E1f/T27eQpwJWvbhwwvPCJmeHntFmNavrfeubnf13GTO2jtT538sQ8KWJ/55e62AfihV247Kq0opevh7ZS315X/jF/51Fse33jXTsO86Q0TRsj+rgFxOmrV10g+/JqU0cLpolrEEsGRG4fK9JgkCz4ZbvHlnn/z48s3HYA+Qgd1Lii8GdgFOmPwfmKEmaqfTVMS1JUgrgl0+ij0T1+sw7pQpw5OG4zJf+W2+WsIP5iI2aoazCD1zVwQFDBsbz9QbGJ1tTrJpxTdElp6vjqLH4XdQtdUzBC+OFevuhVzBuykMbP3oNRs77SMJ8+zedY43Num4AHuDqJ2RWGcuoWdRygUAITDY+OYroZgPHR2sHxCzOaiEPS0IjNnQk81r0aj1NG5SbioCJfnVYL253HJscOQbSFnmzDmihFkezd2EZguTA6KEc6Zz0NX1rT+4lKxJYdq+Iq1QJeE0sfoCzo0pc0239rI17c7T0OnY4dz26DiNoHWjQXw06Di2AchGXIdS9xZ4RKN8iMrWkaU2LmB5lnHK1X9j+pbJx7w+MZbFmaAmy9PdkcFmMbV09Iso3/pfHOHs25MrP20RrT/9YcY+ov9xAsjmmTAMi6Ys0VOqrKJJaV6IA0yylIc7jsWEyOUn5SapWvGW+hspM/+K/gbOnKNOWN2K/KGeZFZ8g9Qd2hnG0fG5wzO4XL3AuCQ/JgZAgjhNKNTeBTBNDSWxRLNcjgk8hwvd2OVSMbHgiISj2Ixl9cNQZknSUEBIe9jzehN5oYiB9yVO5vPvTKn7sh8DgoyYV+mNu0zO0ryQv8eMdv99kOsPbDrgn+Wr+zDdYs0/hwlP4KvjDBi6wUn0BjAT5ypeMTk1cQO3DdGP0CR6uNVDIrn/vzY4vD2uL1T/3+BlxK7TKfUoAUChvbMI8AJm+fzD2YfY0AMnruX1vrs47pOpuXe8/k4Mb0UJn6S0Z27v2PrLSc9ptzVXCZCDKX4pKhEgCQ8EIcr876lnD8pr4O+aTm55Yw9IJVxCExjb9Xs5UMsQ2YNHMLSCh1WpiBIOQam7MnvGakSTQdqE7q8sbj8HtKNulhVNzFqKDAuem9PNZvvLY+8WFzOgXG34cWAbISagSxqgYOeraL4SOOCEpYW+CRzOseXfYYiF/PlSvGzAfsW/ht1r7JMvdmqkouDxRFI0lvPzO6YAaUzY6n++NS4hdBjPjgiuNPXHtbVDAeK6c3fWu7gbmhYarfmNyyNbtPfuBmjuXQvIGwZUtm09VPVWkkAkjXVacPhlO453Q3NO3Pyxw5st8fmnccE9909IK4BF+TrttOkq0cH2y6DNlZV+q6GF11wTLBvN2ZoSWqMkBy6LA7BN7XFnyEKzwKTYwsQ3AIKN4HMPzNR8HEX9M/O/ML2tx8bp33snbzZErv4vDXs1WghFy8BZvk5bAzSE3XGd476v/dcZy7x+MaDFjhiA56fBRZne2QHbQNx91ofzcaL/BZNaTtTIrkDhG8nNDi0jApIAPmE47JAL3x2zcyLic2ATIbc1tUgcMA1iv0ArQ/o299eslv4rNmmf69x/+sPgdOb2tUsscH2rHOIOp7d/aIVwpXlDUnLV1lW8Y52TtXpxwDzDZDyvsJm0cCrXfpV8Jt0IATTih323+AlZ4H5g+BY9vbNheX2FFQ7A8tdQRpDScTeM+wmIOvrknnk/loU6IRi3cyOK7uBHRkQYdDr7UwXe1mP+DZDisaRyDPWm9P8s9jk2MHW9ii381Dmimlh+zO1cKc9NpnRqXKnaiZZY+Ii15trhgwCDnN3zVdoUYFXzoKsR9CUfNTka4zX2KXT6OnYIut2QLxNsHUfHcN5dHHsoxHBf1oofqeYlFilaA3oTXrxdgcRjej3gjNPHfWx8+qWK0zBtLRq80yuaYNFyVGul1VbVDeuAgiBVGpkWW2h8OMT4E6zj8qPxkPGdDxb40QJYYyS+FAz2/FsLRH4OmTf0v/XOPv38GyNwjDTcewTCuitrrTLPHCA78CCG7OprfmY6Tn87ZLBfLsjIosVaD2jweYzhdQIopA30dbVHf4M73Qg8DYDa8FCdhK00P+nrsOA/d0O82st8gaVxAk5bqGgg3GwBKGoHMCwS+2yIfJPwVbHqnMMilq6Q1Ls7ZfgRTZJH+XoSB3zFi97ekMRkEkXe4cgZuRX0YrKK+uycFoU6qSp3t97Trrk4iCQZo9Rfdiso36FO3MUXs6vALI7wIOnAcGxxQOegwc30cM1g7H/dkPHN25LTFgyXvZgQy2vP9JMg6lYUSxUdH2+as7dwFALlhl4lAaLwGx7Taajj1eV0JpNo3+0lMF5HInVYtNSae6d6dXYgWNswCHei23kv4C4DTZcLNB2NAYV1ee8h17K1I4z5+cypRtI3K1YMfuhI7PctEasig8aEmZUIau1xtEt+3r82WLL/ula08+3f4VjqdIq3X020GcgnxHE5osf71/88MFGC8gAkIMUtwS3Ph2G3TcKNuDKzaI72M5em12w8RAEK3mW1jByEbgR1eeOF3lxFj9QJ8T3TEHeuSElBIIVl+CbVIKa9s6cbfRRc1t06IwZOIytdS+ri6WYx+4LxtbnK4ztFvzdib89tni6Lf5u459vDB+QUm8di6GVD0iVVV6EIQcpcF8J/zMfPSHY73EdVzvt2cuOEdIIW+30J02Y85ctv15Y8My7HntfjL1I6hpRgywWwM3lui3aUeGfsYTxRlF3Q63u3LkeW18slUTzZcnXHYLLSTImnrJ7egiO2uuE0g18u0ndUM0TgJK3KNORGkllO4wOCCHYq51GNXN7J1SrNKigrfI0SoKJg1MiVD3MTG8u8BfhehSXoZ3XDjKOswiYO7ZczDKgcmjq+9jNObzvNlgZRSfws1Hri8zK2p8DbO4dAK1uzv5UHTvDoF0yGhqTEvjh+PZWQ3FwVhAyPmRHw+deHY7ZIN5O3ue02K/7iCABm13sII9hUX18NQ534N5OI4Vji2Pb497OI4s7R62xJsHyzBU/mD98KvSaeVChkro0qfST2qg2QVK08o629cMnwoaGPxYabrZXGt4fIvbOYpxji8DbIvY2MdEVTefzGODYxww9iiKq6WZxlxwhQwiJ8ggHqdLTCq/jBneEEqee9PjG8+I59DwsHJCP7y1yOZwsX3h9R2z+gGOxq8Wk/Au8fpC8hbo2WHNukMBdw0Ma6TSMssCGke4fFgt+PXzfAvenWNprZH49BQ8QqGF+oa8xg15Seko20EHpWjYGwVslhVJlEtaAdffpCwQqN5KPkLPw0S0Jv6ZouoPKUYwKIgbkRZoRbTOtdG0QuVW9eLsNLuq6g9Y9T+zVtLsk4922ynYQzFTp3e1Vcobd2ByvP30ERqIpXRBEmPApCsiKgf+0r4fyMMfXYyuvZ/UHENPGUKTa0u5GaeetdMdCNgHfcKSwnfk0VxHDuTpnyL3FWZ6cTNX+sVIWIC7Me8Hw5/HJsUXmbZF8m3jmkknVkxDl2OHzzqB8m2jmzqnlM6d47J2ovYVq/7LSBhqFw4u/DCqKx4UbmaFtfd3TKPhYlMQzEDGzN9nnjbLoLcMzit188+PLNz+WiIEtbzpkuxCjLaR0wA27JtdTxweh+CKbSGfQcoPF20Gt3SL3vgDerbbyBqC6AYVWzUYBmNdOBbBUbCCIOSELQd80sxg+NbXBrN0J8KLDP4a8O9WQPn36N6NMpyahVtgkVv5nBwi7JM7uIPQtvJ5CiUcm+Jb1N+dOgVWQ8th9yEUkwRmAvl2sFs0cufmy94DrbZjRQNz2GqxcDpnpOhXl0zUNR3SmjuY9tDHumer0aTlSAsfKOy6thVW+GzTAKsxN4NJqfqMFuli1kVwWiaFatWjgJZ7LRmYhtGOsOtqxCK47SLSN/rpWbfc+LCmTSDjTelxoutjeh9V/APc78/jHFr+3x/udRwiXYDrPHOLxjf/EKpixzbpQooV/+Ei1eUEviYMI5Ni/7uFPUBMFk0BJLinnnMg+HcKSZKpCUUbT9jk6HYhQe6ja6DiW5B0peiohIeGQdBNHfuVZ+z0QWknk3l7wQeIUeoCHT3QkC2mAo5QmmgJH9GxAa7+O5WLWKApSybozUbQGJkBlQHbgy7bbqqxqg/x6Hli0w9uMUtrIQejyrEjq5Qc/u+ff/PjyzQ/PWCHKcFw2ItOOT+q2bM2SCsWdHcwJgr3AuzboRE6iKrcE9hJgcsyPrkLM6yTnTweSm+3IBEcpBwqTVV0DHXZwIkkYDsq2uPWVniQ6J94EIxd3fphst8sO2YwL4VVifcN6/ACDduLijy2kbA9BOw0JLiiv0QosSC26h6eTRXmtwEUyw3P/cD8cwAQFXGAW3beve/DaqSSD3nf8WezjGkt/Gn8cO8DbDh63iVZuRKGceuxj7+EtXJmjCp1SRDW3yKMhX7ELU93+R2oXr42a62UEz7328Y2XL9jAJgNbUbNKHmmhh9Yt3Jm+cos7Xkuufz2yqdAjD1GVkQn3NQRNa8xycMkAdefn9qYyouQzUlekmYsiutqHgLvs6sv3WxjQ4Y59PRPJ2VRVNsGo2AXIorGyMKnaU5nNeTqA029+fPnmB6NxqZljr470Hz25Mgis0irFaOG1rCMBomrWKrYXZLDGXKxxoUhKdTrAcsI/eNGUxxaVhsLCnEoOwO3mvCiAiGsmM7O8+jJzm0/hszMU2z8TaD+QQ80wndg/mIR5b83jafM7lm2SPLuaXXXyLGxA7wNGGo6snRQHprNtEziOFMpjf6NEuAOTdhacHFuM2RaTtglmLmnXm6XJgHKfa0xLMZLPUyQAWJGIOwIya5TVW34i0ByYxudp0KJcz5TH67DxHbi5swjq2ELhNsi5TcB1zRDyWWxx7GORwj2M4gzmjdt/LH1kQcmCKtYZSrx2Wbpy5sCPrbcf9PLxaGt9qkJQyKYg7FYCasn4ym96A7sAcDNlpA5BhxghL/g0IzhyEZr1zG4OaAS4oCal7Enq8OQOtbdHz0uA8Agy5GXlvwugo9XJ+LTtYbKViFSNiZSBBcHSFlSvqpDIO8DdfwChQ8qgNrrYgghb5Oh5LaBVi34ptrNy9EJ9kOEccncbqgdlRcZvm0PQ9bZ9wrJmsckXiUQ5WTtqWF3aUKTliSqoTJv4+YZtEp2QUVzD68bevN1KSgUhuuONogLy8RUzT7Ta7f5VdB19Pgkt5Ub/q9Aj4DU9fGQZ51j8lUULgOpFdZjTwODYAvk2uL9dHPHEz92gigAvSarB182MfV9JLZIMAhexjulNDObsJsIJa9nwxTycf4tpmJDXUyafI7mkgXzqRY9vvK5CWwZcuGYW3tXpW9tA9VU5RyraZgNfCcX/Wvu0YrXMBTxh3yIpOQS7gay0uem1G+jZa+zxf9IYdhxMQdVH2QM8nODZ8oKJ9zDuhsrZtg3hrdkRoGfes2hUPTuACI0Q2FFxYcENtO4/QJxBF104CVo5KaKzAAZxsc9lYs0GLmjiBqH2ee9/QNdO/k3w3ZpDzsNwKmGSqiIOPeDp9Cf8LQP6tw3FnOIBHNiJxlyGLOTRmb3t4TVQvAUQd+Zdjx3GbYeI2/jiOyFxZ7712GHctpC4jSv+p8RVVWmz83eWOG5/65ltqiiB+/rQC6G0aXfebiWgFv5epuGgc4n1S9IUY32pVw8JLLHNFi/F9TixvnI83SA1Rpw9LM/RBgrGtKZDOdzBLQEFu+nSIaIQsFtafV8talylZCF2Upzr+NiLvHm67dShHzv/b1fDDmwuwv1TiclOzMrXJ8H2kD0xp9vCG+jsSsr8U195bF2rbSnEKN3vWLS9cGA1UwSW2+smqO8X43tl4e+5bRhQhTUa0RBQ/+hdOxMc1qGCFoCBGDSoHwdmSiuRsfokCP26xlNnYSqgaUqgEdO9bGvGTRUPYEqWUA8Fn7cffGfPv/nx5ZsfQsjTC0++cLPFzhobMVQBzQ8tHBqzJz0ck9BKj2zhlhFJ4xHQGjcAtAELz/2VEvtXkXyQlAWCbo3wmnVfSD4EJGdXXpyZlojdud3PkX+XoOROw4VjC3vbouTOo4sL4hysqZ3INtYCY5tP5dmQ0Nb1v1iRgXr4FJBFlmM4pqSWUZ8qhWYcZx3redI7KOoOGN9ZOHNscXk7GN8m+vk0CaHrzs98Kqi6/e3HuT86vnFflSM8lT1QnSk+4E4dt9muVBoswM3Mpr/6tesVvk4d0rH3Xw3Aekf5S6A+ii/u7yz4tJS4rYVbKJXfqGMvH8cSFr0VMa2CQ55qlzoWnTG2KENmZjGWJwkbNfbh8J48pf3nkC4G3VZn2/ZmpitaDw2nOtvw8pEZeAdzqKPfJZDG6mxt2j7apaGJFZLFWW6mPAPyebhlnPmyh7chvFuQfLao0DW6ymsknXfwQ4c9tNM+57ULT+MCe+fIv7uYcLA8PYmOGxiCUsM12kivBs4bgPJzlfQZjW6Tu9+7onnHcgO2GABWQQmNnF5l3m9gbmC2JoPLqMtFjSEsqlIJ88yMCOKi6vBWSWZMGhybW91g/5p/HEVFt3ByPd0O7zvzrMcWsLeB92388D8dKLPEBQ7FdJZIbH/7sdiwGEjUWSUgcLgBRHaWHBHKaFvLGsuGucFizHVW1fB30UI7D7OP4KiADMnra3XxRxHBqac8to41MvhWwaOKdJRaqh9Z2LhbgpAeUWYRYv2zRClomJnxjFdzAuAvn0v87teuI5AE5KZOaS/ZaQQtqBv21qgRUY4pLv0MaMqs0Mjef6Sj5aNINH7KkEwGAO/M2P7L6fw9rByCnnMK1BUk/aLGMzHqjODitbGtevaygdb9MlROWlBdc9lR7AdhUc9UGiOl+GGwZ+xrxvUcWncb+1hDTC/zGEKTxyUEldgwJCyBnudVtY0Y2p6QDMZ50Th0hjrcV8t8TNSQR71qNOXcZR1bNNwOPLfxcHfOZTNIQ6quhReiNM8WoJSbReE/lSeJKHqu2JkFY9kIgw3noxnwfYeS12PON/nlO+rh0cmcBFdhwy0+kd01m2bGhYfQDlr+tqiS8L1B7B5suOWWXtpJUghy8AgEQK6mcR8xwpkDPbbeNtmSMmMvun0Wj2bneqWRVTIiNtxWC5jHO29mHvo/GdiTBsnutx8bP3R847emHnc+Vxhc3bhDndOiqvga383p1ahd31oVjtvioOTRK1feh/eBX7QsarwOAr074QTAq0xik+VEUJZcCq2Dm8mkk5D21AZvh/7lpBFGsdIFypGOO2YCBGJiZsptcy0R6d7t20AFb4PW0Wo071r9uEWGQSUvgqbpKO25vCXnswHiXTO6OuG+oywrvFrtLrYISXaB4kDYedszx3kzI5Ab0LlOPjwXNyWSBMCbC34ghFVdvBNbdxYQHFus3B5bdxpA3AitO40Kji1Ubgut20QR93X9ifjN5qfuV6pPAMKL/cncU1bMC5lALvk5JG5xXcveSR3dvLt/TgmitrKetNVXOPtdc87/9qXHzvMKmGdJP59H0PEuRYBNyyTt9uYEy2tvs8LXlsrPfOjxjcsV5DooyEFUabbo17KxS6iQa8kFz/RySMxK2n2jdSUmG7K/MBXtJu+mjVV22nzz48s3Pz7AOZPLTZ8bsMxNLetJQXRSQyDCbw1acVsHPX8S+apGsR0tFU0mxk7+3BG0ub8TGf6EviwTWM9Z11wDJ/yJHQy9g+iRGAzMEn21deh/zuQrnAAdHg7Cw9NFx3HG/CZ8fxcIj/4tYS+0YKM/dT0sLYMSPOnVk1F7JXID2Xua5OuFqnDFQNbtJYOxrdSj5YkLNQNQVthas7zdHfFk8IViDX0TZnr1qZ3emUWBkJiQbK8A9x8C8M4igmMLqNsC8DYRxEugqEpnk5/493zg7rcf4sGxX6W2QoJZ5zMjG6Rt0/9gCrk8mahsFwsVThbIBX1+jhXPC4NHLHNVUnYatRw71N85RHAT4tzXOj93OMfeQWWFMEl0FrDXtjFcBwS+5wkjo3IiBj1frtT1fDJTIgixe1GmTEiRFxQ7IWMxZKwiPCaOWGv0CwcxDpRKY0xXkVVLeCZVoelHzbeBzF/FrHGnBvWRKH7t2JbegoUQ4g7gNk7FR48/O4jbr0PCOLwZvhhfdZ/L9GIhEsfDlx3FKvtnCyG7rZAjAmOCEZDssESWNQcJ+0hx2HvyJHIiV2IWK2N2EbdzFUl7XyHx1x4UBXOtL+iFn5g04cIsvgTjiteaxXNfCcG0qCQ8AvbLPkk+ac/DyUobr1tMpKY001N2JsD7O4BtvrmFn4HsTrzqsYXMbSF2Gy/8c1iNZu8qYue+QNtKvV3y3mZJgNuogqK1z2RX/LIaUSzQchufaoeRAypWb7QyM9jfXnFU3mWRzmmHdPvbj427Ob5xT50sc6p1CtE7kZA+b/A6IY7BLesljHCrdRXRg235dIC4HarmxPWUvC2KsFvdOLLARVSWoaEq5hHyhtaiJ8SV8n/FV3TQADW/q4VcjadiUgimmOjGKHeYXh9i+LeD4LgfymVj+gjpOfzqv8BTTbhL0nPdw66gA6eIHaBx0cKLGTL//Bx/9dnNA+7HZrOJ5oWg/tBk1ssPq5t3+s2PL9/8cOnULjQrDRPklZVyFegWinkuwcDt9LpcQXXymYek5dfdQ3NXklJmRMOEL//V6t8AATvzpscW07XDgG287z0QsDNXemwxXVsM2Mb1/rxcZ1bI9pzxEF9giUpgSV1s91Nbf09whT/SjkQrsK7laYaM/NXCNkEmeBYzGdcQdCiVKmNAi8jiBqntw4UWqUbAKsXqbNHT75DrB2V3BriI4iNxKMW0VNcKzZuGcYkzOPfUx9axm5HrlkAW31Y7+MmHnyZUlUQ7elDxTb2VAP4ez3PqB4+933RpDjJwrTAodnoewJgp6rNCsySvlZUfaYBLGimvaknmZgVBlGksWRovLQvzTEDvF8Er5S175Q4+AePuNOuN7gEqv463z+b83li4fqJkFRIGJ0pXA8Icu9k+yEp5s2kcizXa5Y9P4BZvRUDJBG+xq1Oo02S3qTkhGm6r3I2Jo/ybBTkLKHqWGMrKnswZqxIsLeU0nTxig6G7Alt25sqPLVhsBy7buP4bsWWnvvzYgsX24LJz339BKWWqY5BqW1s7nnG9DyEo5ed9jMVZMckC+hze47QX5sSyZNrwP+X1JuarTsGPKimnTuLYOBQqlRVwFCezZhA7Xj0tpShCDBAFpj7ervffU7mf+odj708q7fEgPFtWyDye2l92flR2Z4FZgNBr0C0AbewupODRuDnN5kfQUSOT5ilmsT6ZClEEtPerwq8F8rDD+ThoBxQ9VEsxw2B353Vg9a9hgnVQw45qhbK84F2/RoUvTKSFWZ3FXMq/O7PoyOr44uKcuvCNVt/ocy0txdeZgl8GtFn8P+WOKaAjIPDw4ZiOOFjSewflrhHEDf7tRmhYgx48S0OJBZpJiA4NI54NGipkgZ/Cihso2SVTUWYzWtLCuobSu9+dAPNzTlltVkZdHbVOic9sQ37I0+v3+Jyivo1dwEZFyt58v8junLu/YwtF20LXNu7yznlpQF3UbnzlVLrqSndykzydpOZjcB1vZrRImpN7Hepb3T+3PY8OzrG8oZSXTvVPoLeWsFYLG/v05TVlcJ5AImznRxB6h1U3gNF6prWtFqY4NTS6k5Hger2GNMvbyfz7Os2ZLzt2no8TONA29GUHWKK9xozmV2PnGVFEPusqaSEwxwiZDp+xsdfUFyLNfHYXFQMDF3YouqfbkkoV8J4y+LQENDtQhnJJkN40oGtznK/Y5V9FfFFSGN5+XSmad5iDcGugKjOAmOrJww4h9h9gvqIdFjMAiA6zciaQPFxnZrBmhSKww9TqKLsNRuzzXJRpeR4cTucGdf/rD92UwbBFF667C7y6bH6aFYMK2zC4A5n8TkEm262hu2/Bkk+fVoIl6n9YVLCV6W5Q2pnPPLY4sz0u7dTHXtFoVnMbBr+4luizN6SfJaq1zR80i+sz0E00Ez153848Zvc+qYU6w3LR+sSljZGvaR6QY9rdAYKk9UGDpG4jDhYdV9ZHYVCJOt+w/z2JJ8uz1Nwnb2IQODCs5RVNg1+D6zsLOo4tUG+H69vEKPeOQH9xgMfeWwI/sWMs72pfMcsy2vKuzBRR6aHvaMnHazP0Z9DfUyd47H0mM46oDmiJ2SFsvrMWwtLV0hLt33kdAapifqWryuUAzm2hUPpc4ne//pCyg7nOIAAINfbyBH1rSgm2KZyV+Q4ft8yIc1ZvNoA3iLk45/+ATzFLZQrcvd3O9xyuEK+zjlN/uv/1h6YQuTHBUx6LJmN31BOULY3impY4s9MNw+FI7aj5Emmf+yjrJBmEEIwlmlNs83VA5ReBZgl70P3IMRTYspwP/X1yw+FH1DZ5egyzAabdCTQ7c/jHFjq2h5qdBwgXlJARCSR1mWuF0am9VbabsJ7rD1K1erIl9VDSSGuBcWmGRfBPkTKOP9Bq5N/SMziNRY4tuG0LhtvELld0kc+d4LF3mowRUlLjyKIME5u/eCLADJ2hjninZvlO9fvX4f+pHzy+8ZvQfjXkc7VCSVWsQq49FbUKrTCU/NpR/HtKRwbSbeWaNAJUXn0CECyO2UqIDhvohunasbxZuys4zQabd1yJc65sgkoPChZreHWmN4DkyTAsVoUIhGVDKO/tItBJqkKBJLBwqnu7iNoUoQurNvOlt44iRO56RgxF+KrXej2ijG4hh0vvkOV7MZ45IHY16Z1bjFC0vh0C7bmr1zMOY18mNYEpPLmZgOpyGYChG6vqbl7XPOhUeYzWrUrqJGauRjVwqO1B3mg57M0cLecO6tgCx7ZAs41De+aBgWAkRZ1NC2qKNGk/A5fvfv2hqRPqGFoLa4zETZ5OkYp0D6KYEFhnAg8c6MyyRjN51bn12emmcX1/phLCe9j/19XnU99y7H2R7XpTg0Kn1n4MaxflCZMyMPsnLfV9z0lztp2CUfU8tNr91qnneWsxOpx5DB85kt4AuV3WtbdT6F4UNJEFixx77j1lI88IJjUldcKELmbWplxy8fe4q0xxcgrvRDkNZumHj0ewhwzP5Qa/SXZg3jlO6z5YE/bbAmL1NEiI82ofCrzb6HdpfRaO+ucbGNQ/O/j3oveccAvzNRgDFjm6ZrSFw0lxsoDLcFS4zhB0PNKMRwy0cAF1S0CxUMjEBCVijmu8+akFP7Ygqi3oamPxLwg0G3ehRpgzWGG1m1LWzIXdrJw9rkBY1VUvcLNLQk5yWi4JTgWvI+dQ1gON/Mo/AZljd00/x+PgROZnwPHdr33yyaKgnNvaxOAlGkKcLNS/LxG0sidrBTW/Gr15KCEaH8WBIUED8lojHMMvawT7boYkKSnSfxJ+fxaVv/v1x8bMHt+Y5Ub/K4BjyNjLNH04FqizBb9+72FXTG+d1p/Ubdkje48+OoHlLl73luOOQHRaFa+mF+KiBtKSN+jI+ocDKggmRZMkOUEu5TVAgA2iB3JFC+mpMQQ6rSLy+MO3C8tL2j/LO3wMa4P/uRPTA9eunUG3hDGLBuWPaKQ51CS1tsBM69LB6ecYoEtGBNGrTFNDf9Q67FCp1pEh3FCFRGBihdJ/JClivhbxMs7DVLz7R5zynewrPdTXTKNfYgrPXdqxxRBtMUcbF3hf8Z0wz7Z9CgzHysMcLlvRKAPmltZKRnKmG7YbKRZfuJ1Yh+9l6pB0vRYU6Y3C7fEjsNSZNz624KctWGrjvS+IFU/dw7F3J8hDWdiRfCW2bSuGZMZ1ZtjgoQxHWeB1KCVTgI9qMQaptnTYIP4x4d/8+mPjHo69O8mQpCFP4Wu0h2qfo7eCl2qJcOi+3aC/DmeZsrBjCDoHwHOaTuM6aVQgnyX7HWkCe6tH1d6p8iEDPoy+PpzRkfKVd+8qucxbLBsZFmvdhdFORIq2v/4Q7sRi97KyfWI2HyepKtP6ygGWinPWWxJmmIDss0Qw217NqsyTwLCuNTIbnN/isRvwRhYjFqBTemnV8oRnQkD1k4uCJOEcS15pA0+6r3UJm0YeNC6Dw2vTkyXGYssw/AiCTnSIvu0rfsVbL5ZP+VA9n5v7mApSAPqE/Cb19yOc1JmbPnbYpw1SauPUL7A/p1762EKftkipc6d+Rzn13F0ce/dS6FIKMctZLdPMrbujbo9i/65OdqJAmC4xRzCBtx67+v3oIKGa5LjN0rJg6lRJbYHO6MDQyZCuBu2Mjuy64zZBtxBYOyp2wgp4QaESWqfeRcUggGspavwAZWRIOvnqoA4inGyMZg2aQFqcJUSKaisMGlVD/ULDvrPI/zJ4pkfReAnSm0IW/o1ZgWZ5R/a3jrSVSlA7sM2N+Bn0pwHKFV8hikqyoZrAaNpaVmjm17Fd53ibS5AIA+QWs9BEtqWKn9KHxeocmFRoAAl6HMQFdLLhhdBZT605VMLehJ1ZqumN2jHo53vbacN2RwTQyweB61mYfAacyRiki7vmnifSH5URDQqBZvl9GJBhTDSdg3eOLF78kgH9NaiPzIVZx+Hro2qUVnoRCJbW+swVZp/9IF4JMAhogWaEXJmBKKHTCF7QpFDTNSnGqRc/dlioHXRq5/Tva0ee++Vj78cnmlnM5zzwBrDqOIHPzOpZqpHO6Ft/7aPfwCIBAKAz0rBQvHZuVAKmo48jo0gAe1mObVEm0STtBWS8mVnLV713TVF7NmCKC/X7Hpjcg55pSLmbZdJe2UOV6uS/NN26qEBzcYIhXatztM196Bk5/SCdT76SSHVkN4MQ3WO9fJAgPkF4hrZ5mvtJLyRPIYsh+wBmolrqyw9u+s+/+fHlmx/KLcWzJ6CWuanhq0aknbmhKKCsn36cQLcDMYGqkouYlXE+lDIxec3CL5yxvcLxemDvgNScudFji5LZo2rO3e49zIVqOiGfvVyruVqXbgHcX+Bh91WQLeSVP2XzrX2t2txyc33VSZoKuM6f8kIF3VPvf2yxPVss0CZa+HncMtXhn4qDk2D86rEOdfWjYHtkz+bhpDAGyxOn15fXlv3i+NhpVbGcpwnxlRLpjlblmTc/ts6fyQA7lkKHZTFiz/EyOprUx0nEtONdh/Dv0XWn3vz4xvsDb5Y51gqrV+947yGvRlhCHPJV0vX6qXIAH0z2lb7AyvIJ9ELsRzD0TYo01Qf36CBNLIn6hWahnRhP4AAYu8tCNr9P5Ha45QU+U3Lv9GI+LfzPD77q829+fPnmh/C7JDXVHailpYSttEJQHUkUs1h5tbPkhBGM01hCXL3T2T7bD3Gg+IKaHg7XjOd812a4HLgEgJn/Fe+XGp6dE8d+FbwEOF267LMXV/bcAZ0uaa3PzrmDu1aeH4XShbC3tFpje+5YHeApuhZL1uJ8ImzceUl4bPSRFgQozlfN1B/ClM6Ck2MLO9rDlM6DmQtC7dPo5NjCjrYwpU00cx+x36kTPPY+0xxVmVIygMG+TS/+Eg4OQBlT5xl1wDcBxR/50lMvc2x9UiL9AqmgFdq5XpK0ql3A+6gVZpUr/0ljvLxIJTSouwq9f/QZPuHj55NYbPPNjy/f/Piww9npy3gNJUOXT5TiMOvG+AdhvgUJusl9QEtZVStuPnbKp3QsBvAil3JZ6OZLOOViR4WVhgHrQ7lAWAZwKZNNLrKdIYQn8xmGUQqCrNC+UEWQC8+63d0SHCNcKSTcj/rBhc4qmwWirkfv0jbmF2vw00kBxGsrG5DQfawcGlcryq0aSavKmz6tZhkAsmbUz5IzayMdQWUuZtAWuOEl7RkZIAJFxDbApvneOPl7pNKZ8zm2yKMtUmnjrO5jaQFJX7TVvnJacnmlWSMW3IdWYv/9OaSgK/Bc+UzNE+yoWcZW15O+9cV/Bn049YPH3m0yqRw+7ZWd4OS+CuBrBXL1wAAOi9faFYBV8ZNDVxAd42luYSEzOjyR2HtuCyBPR+Ao1iNvoFcFdZqXA1FZGkoxF5LVAa53InDsxSIsHbUhpZu9empZWZ6YeKDMzHJfdHjniJ1bETgJKuc4u78zMHJeiEqMNATvk5DAxOCNqQ1i5z6AKhfC7CNyjWZqqEh5dkJLgCQrConaNYgO/AZAZ6QY32jvzL5uT6NPyQRj06xamm+4octVJQk6MpXh6uYey1oXTD0MTVzI3psF6H4k0C4bAuVkKhOw8Sn+w28licSjRG97My9DPJ26pGMLYdohns492Oe1akGD8OYlz67V9reeKpUSGUf19aXgwMAARXqiPcUfNMu1jiaMk6JP1Rba7clP9nxoYNp6nDHqK03+Dawd57b6+Ma2N0HslSolqqF9jvW5+ZImQJVizvyCubxDEgoEhZ2T4CFdIoPSjgtWUhTU2bONVBbDHPin3MX13YpiMK9wZtQBBjqJguGWkN9Hq92WZiX5JwiF7a8/NCRVA8ZeS8y5L96jgSAIs/Fa4vSRP4i7ai4indDQc6oLhUv4OPPqLcKi+oIX/V0I0qT4Q+9lTjE4RB+v8LyWGTH7T4s3/VZtEEtX4HvOfNWxxets8T0b33YBzRCxm3mnPJermslnvyOUHRRGlquq3udjx+NEK3ehe8aoT00r6G9U0ATeM16FT38IQDrzpscOULTFH22c7zOlvl4d8NzNHHu3BIMU8hB+PINl6MXdGFwhjNYBLWCc4M0V+Ob1UE9rlNvffmxs+PGNzSc/aWX6mbBofSzRzSQOya712WF/FZe+vkQpoEcE8y5gbhLpyCLCLrCEyVaJas+JsKlUAPrAmmaAXU6BDphK4/UC8tpbeyVHMgeq5ajGgyqHHcusXBC1vjLALj/dwOk3P7588wMxvWBnDgyu1l2CqqtwDTPZFteyxSAhKNDAQDyX3V33h5ELOKric9XjVaniFxFWDDhB/MY7t8X3JwdqKFnnOjJBVkZcOcIJHOsWdNCZ4T92YJ89NujcT9zTxgILbw4XUJXWbB66rVgcirTp8YuFhW3xg2ikKiTHFVSSkyefCL3y7j6FovcrYOhnrDtn1v3YO4Ms1T43wRa12VH1eDyplNyCTk0AyXjZQDt00UhkLLgnlfG8EIzYapbYlAY7LwXgB1sXsqxUt2jUBIe39P/BTK3qFi2Z8CZT9Kv4FrQbzBmYWR2Ut7OzIgLDyJZe+N7a/U9OvnIOh7kR31Ii1SNL27Q+C9YcswBqiY7a9PXNGLqDqM/hMDfmuB2e+YjZaVirgvqbzxhRSLJgA7hwK9Nn2RI2irY3GtpUi50YG2plS8zng4w5uoDnp4+4nnm+Q0Bazce5XZ1ZWGbw4HagkyIDLGsc9Qn6B8k+40K8xOpTFrZsM8kEPkK8ACy/Jl7U1HolmmB9tvLmtBEZoiKPDJBbIm9/+NDEdFwM6xtt9jTWYShUUtb6LBXu91IbnDmsY4cM2gKJzv3bfU2Zc5t+7H0AxzVPUalmKWXGkp6fW0aZZEuy5VevBPQ/Ynul0V0C09UL15qHujLqXCf6BDK85uTKeCIcMhOPbnjN2kVnB60Ul3NTuwEcbHvzXr+FHEHIbjDMSddz1TJBPSdJTqMoF5bm6A5lchskY6qDiQCMOrLNa3OTlkCQui2JT2tBUe8Gv3HJOBV5l2Xalv6DAEVBpy1/UPj7Cy8as3MYSnO3IWBpr5u8dU2DoNlZKaJxOtqKIH8+mauAIyrfkdtM3imiqDUscyMNwC1ZEK1jJ0IAC2rzQoZw7Hy2HSVcqRs6MiT0uxEtJ+7+2CJU9oiW8/DgCkTLib8/tgiVHaBlEx581g2vp5k/9YXH3ndOpepqzBLHMj7uWr0ICHOjZtcEXn69UD9qbJ96w+Mb79lxsYw5aYV2FXNce2vZpj2gltjKeCVcjXCjdLjDKRAnjUwNtVtfflih6+k3P75884MpFjtvEtgEzsrorJeSKcVNWFPNdFERyMG5VzLEnB1+QBoGKS5wW+iQEMTVgY6lvRIewjXVpITKkUyaM8uuppmFwwjPKGvzzY8v3/wQqCHAJ6tlk5gqyKoyq+CxtOySV/GNQrKdr+gtsQ7FoaNLOIVhrlUPGDJeUvEboDgkLZZtNb1fe1Avr/IpLBMURGASmc+0ewPcuSmLHQ5lNXco18nUt6LtDiGwj6UGAUI8zarIp9UFzoAtY6yPGc+Q64uu/3OvnuWZxz+2MJYt6uUsQLhkfOzE5x9bDMsO87KJEX4+YXvqJY+9UzWfYA8zSMaTqhvZgYRIpGDPGgfbnHt6hbn/PScTwEt73zy3cIuxSCwhCXQVobLiotvGLLXExAhoZKqpkQ2G7A1khHnNhM0Fc6Ra/+lSPypRILmZIwxVX2Seatprwe/7n4ChSvNU3dLJEFZ3HfyEgGcN6dawGkSN3s8r089v4ieI3AKehTHzQSD4cJh6nWpP22szH7jmKTdoixvR9WYfWhWvNLQDtT/HWKLt9KSV3QCFOjyR3nxBJhcdCRJSn26hi2hBaHkAtWYw46rO75l1Prb4jS3eY2PNn3gFe60WNHVNzInKCzhofv/BoQvn3/z48k0fWbBwEk4n3M60LXzWdyLXROuYXrrx2QTzrFGBJwJJpbqcY4V/dxKs+XOG+ZoO3ZEcnzqLY+dbePP8YxT8Ucsu3Q+3BDKQX06ceZjC3+R8M6lZ8T5lyepPYwnefvDDcf7Njy/f9EZ2n6n1BawzE+nD1k3ibAhBawK8MeSowi7lvAJ+nA6B5Q/RdxwEIXmas7TFVN70HH8VfwFatcLJA1WUhca+sxRQ1cOi8NsLx/3xZ4vWuBHbwLgKUrl6xebMatHGQs46q/BsLBCNcKcIOIVCPM3aAOGnMl+YqvEyp/N0R9tffihTQgulKRM2GxqdwbAiLz8oBwv1F/LCKhbhPGF/i6Ce3VAhIaCpnob9srChvk7e3tFiL956Jq5rwBOLVySx/dAW+m3KdmnKE1rNocR8gW+giOCcBk1U5rMs1MWaGLoRL3Lmy44t/GMLFzn3fRdUeSaMhmakH87o0tUNZM55SvTdt7U0xZJU/+z+pOKtV0iWfXVBFjuoOE8GZMH6W52H+eo2Hb8sj+Vcuy8/rIrP2Rc/vnzxY2Plj2+8AlPv9A64YdVhGJxhYkY7I5hqaBKvmGwHRdcSEngOXbT3PVxrMkHrRPpm73LCBOTK9MxttlndrAIMyE6HBRVad2B2hd74ra6XgfbY2RK9+ifo58sPblbPv/nx5ZsfmpexG0M1UppXdlc0fUczoEEqWnzlraXP6j5tdgflmJ2J0UEipFqi8mzIzcIqeslJ3WJEEhB2zAXvsdrtdlkkgBYwi+udR0Y4n0ocZ4iSO/EXJ27p2MAptuCLcyd2X2zO/LV8TvRVw2Tx5I8oCh61kDaKiidAySlzVLdbAYRResaXI6CAo8eM/V3Y8weokRNnemxAIFvIyMb13oIJOHU9x95VAdKzRJlORJLBaD6TRcZmN9BOCJFnzLVcN9pyZsaPb8w+g/kWtq0lMtfm2504ooBPWWIIb3Kpd9AH0923H6dDGEN3ie+OwwUb+XBNteztylG5Sk1oQtBwyUWsuqc5zcuI087dW9Hn+vl8cAuFMNJX3Sz9V3ktM9XDfL4vm+K8c9Mx4lzKamXZqR0+A5VJLGsY3voy+9xf5x5+CSbCEGbBW02wom1107ow+kzPc0Agac1PEYczUMk1IJETd3DsQB97jMip9/j5PIHIF0KiWq3lqfJ/SFnFckGaVf4H+0oOGrxMtqa01meZ4ROYTcOeRjIkpuV13uEWtcIzQ358Y/enM/kMvfkM0ZD8G6OtAbfGQWkwv77t608YNOGUhWkiOYTNDL4HhZDKIndDHwDyc8zKw/k4ElW3qOKYuUFvR1Mrpi83nIQogzL6j+AWUSRWZp0mygd454ejc3OB2fMBYngSsmtrN+iM29AWUFFCEaJXKe4AH2rmJJs1yb48sEuPP1tsxo1VOo1gK7IWZj8mbwtJl7oXsw+gxs3Ie1doRAl32FZyGMLo3ijsGRoqqDors7OzvRTVHz9pENsfb41pG1nMkj0vJAgfOU2IXe3eVIsvnZwdqIWFLXE4pAJ6AY8XGUmkFiNIhZmp16bVLViQfxv6Y4fs2AJBNn7hApiYZV8xq/0/fWgh+QR+UgOQIQf+oOXjPlJkZh4eou5dVvu33OmTfeVo93LqeXpv9W19fw3FP7Xbx97MQ9MC8LnoMlliMPPz85klMmGPSW78imK7YXiEoQoCGw0EgykuRVVOqafjQYqMq1k8Fzy0uNWMcaWIiXG1HfTOQ4JbsJXRvOo4Eqnyy4G9vjssxN+aamPl9tejt7VJEIKbf1t5RvHg4UgRu45hLdxclHMylERttc21cBql7RpLsIOK9P9xB+0P2h53IBdPRIjdJ1pnSWa55PxUQThDltyJaDhxT8cGoLCHM5w7swsGNxNUVXaRoi8vLRYRdG1S7Kq/Q/NeXKqWTeuQYXZfoIU/ayiHYm5ebYlOxn8d4OLEgR47/MQWbnHuby/oqp65lmPviSzMsreMf2QdHCJHBFtYVsyd2pdoAFPC/ULN9bdIoDMbfXxj0in3iT2Z5c0cwnP7LANkSGNKVjjWqwLSJKhSkYg74LI4xQZDr3+m0GRhKl3PImUlfpg0uKYaLxYPNA+Zy+TzsHq7yf5KuIayeFBJsoPTtMAEkUX04q8FSLAKsKSOCu+zrd+wAdXX13JNSzg9TuHTWV7+Qjn/S/iOCU1+724sodQZzxC/OJs1vBAd1E9aIf4JHOQKJMKJ0T52yIItEGFj4y9oTfUuZqroy4vYHg+JzevXvP7erIukepCXFJ1g1jeSV9MHE6C8BH+aEr+wVf31nOKZrT32pplxmjw4Trxd26W65maqtKUtsoKfq4T+rmbykxyTJknIVKQEzjJ/pfgSltJquWzWlUFifHq2u2Y9oq4MEuHeXC/2XsIQYi2B5w+vdFq/2VxX04/u3kSihj6VYh24zBpTWWxsynpbf3a9+B93JDlmoTLUUKeKZJ93uhFJTBqVsbjUAbzGdiYZVVQzIhcHgcwoWsX8qHiFNznqW5r+J/bm2DXxdz3/nXm6yXRqUJWBE5YsYfLDx1R7QN9NS+itL/p81mlpk5umwBxmWkfArAsgoQXxfZ/v+ft6/plRObYmSLIUSFo+khpl6Fyvz0NMwOTsQIPsfJXvuGGakk5kAYzgCCs7Ox4F068NlreB0ZMO61zntOmsN31OdJdyeCorU3KBgUsF/pzKf9RRLzCM0CCanNq4OCy4bL3I+duGt+T00bv++119aQ0wy8FqdRaRPkUT8rAjm9bikvuvTRf7kukDiZ5UyIYUC4k+xw2qHVbSGcG9LOdTum6bGlggNousfZEtMoAWAIdUqkz9jVLnR5QwYuVj7K+6YZ89K6fUcMTI7jCTUMMeYHboC6a3x8MCFyS4xHly74+P0l6N0+U9/TNfdOy69Ocd/Y3futEPnJnD4xvryYnsks5I6mYv7WVbeK/V3gfHGp259joY9ZOJVKySOUtgh4JzMWytkJTmfGeOSgaKqqm/dAqekSRDBgouLm/rU6Eyy4WjaGICy6+kZbewaTYEjFfsZK94TucwtL+e8LK+8ALAVYkc/8LUtHRVShLyU7AWCYvhzcFWa/hvOudoh+aCS0GNw86X80VFgN0BLnTpcrYUPUQ877Pf05k+MfnHrtG87Uufe4gLSroag8wqkwBBU6/w0MdAoKffJRCYuuwgV7NtlowcHQABdF1IoGS0L7wpPUp6Jbf6Wd/8317p2HXBt03zjRO7grvkzJIfe7tPIcJuOkDwZGniFKuRE1czQG4R0wzEXO3VX92BSLKrS91uLOSRXW9HziMbn+hB2ufZid+dFWZoxl22Tuy2vT1ZYRRcVIcqmQcOr3PIfwv1as4E2r1RP/Pq5YpvxXY7++oyUjr21zqCJlqpFsekEYtoTC9RjPC1YZOv0cTbdZrN8I+qe4pOUliCLgA9bUld9TFWjXjMCkzPGtOXENdVymLCYskkpikABJGAPVYPbkmCK9QQCJA55tVRDnMx7gNAHSEE7yiPPt7r3jd0wk8M+bHrbO8b4ad2/+dl0VM7d3xjFiWlzNBbysqYfNpEokZN1fPwP+e2+ueqX89OK746mhYOj8yox+gscGuyF1aQz45Om4h28JRYERpAduaXDqv5/VY1Ckdc1Or7nl7erEUNg8p2ewxqtOYkvOLdiPYbUE+0rBn5c0TXeW/3vq4nLRDbZ1sI6+tzIfntpCaoK5Kvb3QvkO2apE8zmbAVifAJh4hZFPfb01B+8+sPxy/b3xm00anTpKcpIpAsTF9XM1HVXyPbGhlqqzBudh8ajyp+Z8beKvMHX/H6fy/zXGHHrXBOYxFj9EaCImeLpWVwaBqFxeQJLwBtLW9ZdYuFlKpT/e5BotTqyYIrvKQsemqxj10PeNsy3hj4C+AhsAvbrauZ9dWp0JdcPVpC17RN6rkFnyiIEGR1BgbW9j3HcsmRG9okPE5bhahLqNvOXMSx9yiiEQ2ar0zAHdP4PIAjoYkzCJxKam/0fD/pFGG47LbEJ0SJK/lwofGE7GaV+WOQ0hkEcTzmnYrXm3HPMjBw+GRb80I01ZBeWzG3cEoybNhRAfGFiyTyUFctev6rddvL1RnMZgUgwZ2+btsBb64zYh6l9SQk1r9yh8ubwJ2gayYZ7kx6rhw3wT8ZBohMqKZocDkY8LxnfEWP9cSDHLue6b7Feu5w7usnEL3U1mhose7Rhmt5QeVdUUhfC2G68+FoSrPy5bnwPJ9s04wcmCkt3nzto14TBJ16vmPX7N21hjd+8p944q/Vls9cxbH3LBLEMwMxtBCCzFJWQNHsxth2A7pIsV0Foj01xsc3tpuUp0PHtha4fE4UHRqlKRbIiX4VDvsJ4Q9NwRGg8HH4Dr1yB810JKGIDFHK7sNJEoq5KIsiUQWogLuVST47rVnyvKB9JoMuLxXD60Hf3eJq7vBcy+54pePDDL0l3NRCtW5bqdoCEyqT5gkt5CAgaB5SYtWIkRZd0Ie5aHLxvD08NFNBP1WIgbCwc/bxsIhOaRoVwdgWA+B5N/mK/vCJ2T52/d5te3hj5e9rtYDuA5jskYOlgNULRHAcm+/2MIM6nXNu2223/9SgP+vOkJI8HDRJuIcvw7bW9lbAuroef2qbj70pT0ybq4jMVyxsfvrUKuaFytkpdhbaJUN2sOdZPgR5ChgVdsVVgnihMQ6//1w9H7oW67EoGCh2NgLYhzOsNfr2jmgpb8iaX+q/jv9JfHawP2Z2S/eAqAnhRTqcNBXoytabbu0lGZodL7sU0P9gaiwCk84BEF47pJGPkYe0s+tCDDic2SEwYIp45qcMA5Nu9im1RYtuylsc94Pu8IkJOnbt3m13eGOxnta+SepJQpU9iSkzqEvx8oMb+9Mvfnz54oeG0QaISb1cUtfkXhTkSBRVvC3Doq1VGU7DQ/ymt2tOdLHUiEELnko9JFx1N3UCTk3MsbdI9rp7BXv4kFhLaE/Yd7Agvgcz0xDHjPlKDnzHIJVdYwt/MzapwoE3h7SDsuAYDKw+4MZpyMnyvtGTnPZeVFcmpwvOuWXH5H9MBswF13kmhJ9xNOezZeUZOalcmD/7xd/81vuEi/qGBVpyLq9P3w+VZdANLLDE1J/dzWBXLawFMmXrfUJzH1X83SzQsrvy6rruaRkD3M3w4gGaQ3TdCesoEGXpnCeMEkhufX7WYb5g+FdTr5UKHHaSqnZd0LCQSKvdTlrAF+eK67I9gpB18Far/8fnDXpHSrCTIZSU72YHObPvx67hu+0Pn7uDZ17fm1IN2Srn9rPYcrz/4Hn9+Tc/vnzz49TkHN8YKBrImQIahwHZmNjWsitCeTo7sJ2+ntY7phTK9LDAm9oVJ+tywl5soAgPUWDjfq6SXa0UeHTP7JBNH6WqOupwXwqlY6ctXgUhpBcDzZrjgizMdzeLqVIo6isc2Qf66BbWoPEYrbDMRcTAUIOFZAtGBLXd+3zixd1WIiga2WaeLPQa5sgWa02gAwwPiBoddrh82mvTnL2mmXlikY5dd3LbzNwYsBuzgFEknptZtkXCtIR8OjG3ILqIJFmJ6aZe0rKdBqbWTUV3fQynoNeqzcC9tjh+ODh7ZhuPvSktVU1vAn4CmhqdXwFBAybHy0NZapv3No5EVGWHkdqI4CCZmPFQX2v0oKtdKOTn7A4qorjndck2V52CulXUoItjR8bM8e4mJ9D/iagN+8RYt8/7QuQ2uwoBtqsJdmWH5J71RG+kZqMw0rjmuu+NsEjpSocijkIo170Ex/rjztboF4c1tpi8FADAPSPH6F1EGJovqe+dmqNj07XctjjPbdctgfXZtT32l9ySUTukoNsiaJG2tnMSQtj/WTAhHbw3sOUdHGEAr6JPx1dhleMSaEPwqMCZC4x0MhPspR+7/PaOMGaQm064WB/OamSWxZESSDR/maK9vHUHt1m1HycbZXcsOogVwRNzxIQBZgYsW3Gu1F2n777WWIxEjcWXZ+mkiz4EhKsk/uHLs/jfiWlPG2nXwFjBWjPh86BPY8G/V/yIl6b47Omvh75I021bzTZa6vowo0al2rHidOZdkgUa0xleq7w/KUfiYhQN65YjW/yELUWSJr8d6UnpjuUu1YM/te1K8ntOBmXBtlcNmfd+Jcj9YWPxxIgfm0bhtq24Mfk3cpKdmeVjb8W5ynY/CDYjwt/2RP7eMxmjWTKw+4QIL+bzBk14zhZVK4eCWKaXXcYKGgfddWyRvbDFlzwiWte5e0mdXqiDxDpN0irjqsM96itX2c/kXyLcmymosCCESnSsYkROuUhHW468t0WKANVeaeqTRsmxex5IBTWDD/E1ejX9P2no9f9pINluoEX0zN09JYJDpMDr4VQersq2af9d0TA7MejHpgG2b5edm/9Lqidmo0WRpuXl6WN/QTRqat/oD47muUekTNpqX+urxWGK5HoWgUfZDfNlpV+GUD1xOMeuPbft5m3808/Lu6cm+thbdLOvbURpfEcktVJ0TB1DNCMBUBxIxeZc36Z/rq83UEUOkCHovlsU6jyEDu/qqvAWpnzCqo5JEsni2qksX/Kaz5aUHcu+RoLJzN/qZn8NULX98yMrGEa2C4856rqbjaIZq7PcU37cDGahdNV8cTp8sH2YYVfgBguhBW73amnuemWsuUDP9VAaHZKzJHb6PQ1dHE4CzbRPGs2T1tp9vbITM3lsel/bTtm5UX3GKY3AsgbR3nSFTCH4omsVPe548uief/Pjyzcdk2fBIDU8rRpN6mdmWkGu+0LsWVwrhaAfltzp6zZL4M1/M6v2Abukxwx5XoZbP7OIx9Z+RqCF3DTehx2i6aMUEXkYtI15zJjs/r2Fpz+inIKtVadywQ3CopyCzw2Qu26Y2ea0hAWoBdjp9TokbPhr0FpFoN6f6IT0GgH+Wl+K8m6G4/kxoO1HIE7BCCOLE+pJNvipY7ppYj1fexWWNqvQXPHrlqt+diK/+e2HzllnVrmSZcAltJSrGbkV35DmlaIjx/pQ2mwmr5A0N8/0YKkrZK7zUaRrV18rzxf3zE4s07HpgW07Zhs7dkEGGmERliyQDpn5bO1mUL87KKanHAkqT68VIqLpI3SYbUu+nT0jqB8Ysj9P7q8T6xYHU66Lcu1Zbh7sEnvVvVzXno2T829+fPnmx7lVOfZGCBbyORV6QsALB+KTnZwx3sGRLjONdyRKwTwGN/4n1BnbX38Ii2f5mwTHQBpAiCLXT31H/UeGblq36+S6iGbck2bmyF+HbaSTuakCFJAT9zEs2+52lXWCWjjaxj3BENkH6DKwDbTcfYkth8/hRFpSNClZYmnxKZE1YVtPCzuR57i5p0fnhnSNd2YfhwXVAtyvVJU3nCn/+efnLcB7QBx4RIvUQAxhI+0g5udEEpRdADMwkl0CDD6RxLTv8OtkwcB0tqHk/b/YvDMGVPfeht6ZbT92HbptQ+/UFVySoJzZl+Mbc0QvzM6jHwZa7fVJ8mOu1rz9A6yHeYNXmuQb2MUkPWNWfrpHt3x/Ot2ouR1b9wQpWcjgx/D7romwJgSPXTKqMiGudhQXq3mfD2TPuBe6TcgXQtMfpDRZF/N7UDsqu/0K9n25dSrSFrI+l232SkWTmR1V5IvGDL0ciN/roU0etU5/6+YrlgYsz2I7zHxjpFCXXbRu13K7wNl2804wzk6Zrthg6PXQxfyehDwjB7S4wDN4pEQpwSuZRBXhOd1kQRkeVD202F/VFX7Y5Dsxrsema7dr8W0s8X0oilNzeeyta4ZkcCrKiuCVLP519IckLalas/NEH29tiB8RA1GSmFkjDLp40zsl5vdrgU70wW4WluuN8074oPs0oDWp3qEIUIY19c1p99sev/ZPf7HRx2LN7VHZZiZ8NEfKF7pAZo6jdjZQ0vokp/t3X/CeVtrJZT92vbF9K+3cNjxXfL1qjWYPGAv2dTPQ5SMJjVCLKgcLsW84xDtKCR7z6wsvq1TETs8o963nzKW2i2zDqdk5vrFSsJdJvixaLAwG9PlxQLS4cnJaNAd0L/qPbob5MQkTgf/xmv+h9gSughih4OyGNwDow0Ro75LunjTPfdK5CfnivcuWLWl8Hae4Xv8RuKGZo7ZyghrIdQVbHAh0SUKDhdshUJ01m7EVZNfXXcwqTn0cFLd3n5FFPDrc2n+D86dlyLVpsWRkix8OtEFVTGWjIu6bT3aZs3bdBcNdmdlfVLFlo1pzYhMkfUORoIpdqBggY1sRVkCW3ZtYpS8KPhTjOkVPJ6B6l1a/o/d2YliPTS9t23nbmOHnJbtexOTU7Bx7KwUvjpkW+IwhcWhjES8WKUnAiTGEg3gT1vx7iUUmOdnUpqtBwdJp+RA2MwvFqIfdJMbE3ft2GtmqdNupoEDuR1WE4FUdWna+9fZGwXEDwIIOEQ2q7kCKIjLIQ60WM6dz2S4mfn3mJmKjtEAWTsfA56y4Gz2uvqMFZPlVzviOzpaFYSglDPUYg4tumd3CThNXIwswvVew64Jd0TY6sUTHrg207xqdG64bC+8TPvqJJdG68xTPJR/zrfBcSF3dIZhhIvrra+EluXQUsWUWzACl4xHrO7jqr8eszmzisTOgVVP5Y730BoFCWWbfDsigAEqR1976awX2DrKYSMtHelSwsJlbc/ZQegGdEdAHDzaKUGM+mGQRq7tTxOFHX02YivVYqIHe38A2v9iFQYzVbrR93JlgBWL1cAhOJcXUbtvF8Ku369lc04T5110/dk2VXQvm3DL8HP8FZAXH35qvziJ9ZV0F4WRIzNffMyvh25T/Z6FOal5mN6NUFgQHbV2h0ngaarmv7vSG6vbJ1T22Fx0FYZgE5U0zE6HF58EDSkaZ3KMzbpXna/Dy98N1YjuZ6lLTHwYM7lwsoFI675ybpOqGo/6wt5aoZtWMRJn/8DnGgHhx9X6yZfuvzEE39DQ4+dEOga5MzuMp/lVA3KMRKslliZHz+aYFcgmurlIIKgymQfLYoVJ5XmqqTfnhmUpd8EhEITIwsYJWXHbtYKiX5hCBU2FHEKi5uedyYnOO8x7KtuFybqB+DgE6vaPHN1ca1YnKBDtvvVQn0W9UcC0K5AFJCF8RvzcIk9ElnWb5GdwBatkH5d5DhfRapaFB6c3OTndAGIV3kt2pchEnOLoaJB5NLpe7RCr8Jk52Q2G7Y5i0fepg19lc3YGbnKICU+TCmyNoLemfo6p8XQR5dXa9RBXeJwm84d3Caz3rt5oz1Dwr03R0i2PzSnxquEwRWgL/7y2uQebzVs41MKwTC3XsuhbbJsfGoN1JaWn7lgaIC9ZdKkSBPmMxJSmvdQCH9BhqwECmvqOgZOhereCgQ4GX/DHnW679MzYIWFYrTVjvaUaEmhY1QADe0HVc7dJ0p+gy/2XxnSY96dTYf9QnpXzKkTeuADao+PFzl9qLgNPhubzehLPuwBcHUsy+usVjNiSpDEPFWpy8ve1Zp66Unkvr8+auBToklqI3ro1wr3F5e7NP/nYtICBflrfaNDnu7Ar8+14fuyL/tiewMQM3VtwblC8Zo6VlRw9ZzffOORHX0TpqTQvJoiykNC/1wCQ0nqMWzPIDjVJ9dr6yed1Ce3hye4/9ZeflmMOiLU9mBpuMd74ZEYGV+9Hh54jzxbj+DHwNU0Gi3vdsXbZFXzLBslddHA5sSm5ep4TuqQ5SY2kWhM8nhzyo6Zafvc53ntPfaw3AawJrWWarChmk91oIIlFWegCEQ195fgrcnHQSLnFcZ7bg2NX6d52BjeW4IiEg2Bsg0Fie5a7T0QPUr33GM6rksngiGUm1h8nPBS4eLeD4rYA10uMEmAfvLQafXeLjmzuPbI1FPFlvvlsGs0BOnRk4yEsgkmPE9XWA5Abc80y0HIA9q0VsX5XpnWbPpqasC+i32JcWHNNfuWgUs8B+4KmC+XMsNUVLuN8tMI0vraw7GMWhnzObpLE1CtczOCUu0YB57ufC7d4kzyHgC5+teyPGgvDu54e+SOtr4W30eW9Ho0iLlrpgpwMUe3JdKIocQ9tqpwGUjEDOuwbIXWhSPCjANstwMVMVVpjVnIdKDQwsZspShuWIG/kON1GtAfOOS4m3UIQTxQvz25V/5t6Wxol5PXYtim1HY2ONrwFFndijY2++YAfi677johNwNFdmKpYKeocHfH6Zwo1+ILNGsP4Ne9j/+uPDXCXU0BhYOpWZzAwQkbBkfrMpOdgx9YpLZdpg6v5Z2t5EovxH1OfJTMz09g2abm/q9tfLthAgDKcAK05kIYfhHMNSD2fhJadFIgAzt/krgE62cGDozugLWtvcePVWsu26o7z+g9aBptaHvVjkbRUGrBBnWGyGiQhSz2keKmw6DVf0Dk5s1bHrBuybB+em7cagHDFLwZ5YNoMGZeH40WVWcYmaX0jObwT2vQzVaVFuCdMHeAf6ZXS39JCv/LB3YDpPLeaxN7CWYpqnijoKBcWaJ1POFFMroz62z/mShqzoTCg0ef+yEvioYoBCS1H5KDPzlJw4DEdl/w/gAsu0VQbHz9pS03CdFxqeZdS3ibPLGweQiGQoxdgOM3PBA1rGnc2yYuSRbxgxuebIps9wZ+Pg5KIfu07ArnGwswv3zZcKaNylyin9bXsi1xB3dlGmSAILH08sup3V7LmZLVxJ3dpu+5WZd54yjnc+oRvi839f6GN/+2clmwfEnoTgQdN3fW6xFINdHVBwD6/1xBsoUQAEgTHAutPxpG7IaAL4oU6rL+nypeYjCNnCiW7/n75O+lm8zJjJ7IEx+d0Ltb4Lt9qRraphb9CS2197Ld980CCC0QqhGVIRhLQhCC3JCi32ds7wNnUr5nOJYU3UWxDRUYdaK0zxRZDw8aNmw4kdODbtg02rYWMz7ppBPL0cx/YmDa5jp1ZiZzUps/c1AwB5SKtktHvn+aG/mkUxGLQsElJhnp/jwuT8Q5R0tqZFcm13aoi7mSBjALRX68Fy6E7pnJjOPMsYNyeRsMmY2yurCzosenJdKjCGNZN2Qfo2qvP/R5Hth6CuKZzFs/le0+G1VygQkpnpUevNhcddFZ92guWISa/dcpzkEwm0HIZPJoFGgkQ9LZd8UvS/wCWjfg4VSWEdloR350iccB42CEgFI7C80/s0IKidGZ3izrAr6jhE83kdSmfVgkCDvjL83UA+qabTzApR6J+aoWqr6wRlAQFXBqE6p+tkZTgichJfhYXw06IbL4zCBQFRvLfQensjofnFQjTFyAaxN1JwgNh8ohqeH7tsUcfB/EXxot6mbn1nIfrkvB6bwvK2DL053RcQ6IlRtEMwyPK6+uIeWZoBjrg2/qC9GPds9r8vUhaAosFcis+1264ypMEhtodJnKpLHNvZ7Tj2d8k8xqxNZzWAkerFGbVwc7z0zBmxHDS9D1L8tSK5hmnN78ijJ01MFoeeUNPqUtDN3Z4plU8h7wDhSFPC3khLPRMTHlB4KFpoXOVXaMz1pWY7Z7bjdLe77vdCQzAanZLgZLbzjZavG//zyvSNoezZtT52peNtpXljBX7O6HZ64o/9/aAZpTl621ZmWX2gqjGGMswCP4gKag7vo/5/fS7BMVgeoBA5AhFdIppD5V/XkW/I63ihPrlmbSt+LC00SE79AAlYBttNVtyDiLeuqcTR/QH2XN2tFNTl9IJVn2wSt2CJbS7WKbS8A2mnLzEkZ6EQoju7QDFdsRlT+C+qx8g7IMRReZMUOH2MOoP36ujn8uK5o06ssik239ezS7rByNHqwse46PEtqgPGT4mTC9/MJT0HfsOQArpqs1WNcvdPdgywZtRmmfy6atTv1CQdu2rwtni8sWA/rRBRsZrZEfu8MPWWDpQtCnJ5SafVbnUSVtxS6DCd8SNPyblq9ywTr8h61NWfeRnhevxMkCn7y4BmgOVZTqROkSK81AvBnn3FworgwVvFTEHn4QucC03MLW8VIVot0K7kq6r3L9YxOzPyqNZ1KvZ1pahD7H+Fsnbwa9+W8zypet5ZyDy57MemNLkrY54bhp8PQdGMNRsoh8/iYn5iIosmxJJkipcYBy3uYCdV15+RrpFdUqyj8hnYCp4lMXF5a3Pr1K4cezNkXiLZSaDTSSkRLOtTEQsLQ9kOp1LSeLtifx/oTa+kKNthK8caKEJG2/4qbgmyLHvR/tYDxqz3VRmyGzXUHiRpBDI/PBs38/Q6tPeLhczC2A3Rse1TmHk6VirDK8ureegBzMv1T8L0k7LnnZXMEwtw7GqT21LmucG4IKoGAZmmnBLLs0fxTicw89oU58GLNrM35mUwkpquQnHX3J68FaD6WvHHEXz3ikmj0/t77K/7qNBSUbTjvYMve9I8Aau3PQZSbaclvQQpf4/XJ06zu+lXozMVps1TMa/BPMVVMo85y1Mw1ywcMG4KE9lTGB+OsHufVgumt9deyz3zr2p8CoTJRYmw3mv+lcCpkFNq4aTsRQVp86ZmIKZXVEqya8/xY17W9qcl785yzPtrEHV9pfXfd/04rZ3uyqwbs3BJ1Hd2BY5vbkynHqDMHyb1MVeiV9w7mDuxoxrnnO/6An9t+FXkkxK3bQJ9d8WkQcGR+FFZP6UI15UD89oqLQjUvECgOZCALtigl6Z+QJQK6jUwQnr6UhT3FkSpKKYySgosvAPTZ4lCGMsxNYqqKEL6Eu0XXpZugqH25NhemnD93XVeXCflJGWYxfsDneGUooegstPSieEFo08TvSt1Xla9oAAGX1eDs/YhFjYBQh0riDazKm5FJdXw7EVaeqHx/QDeZTzbaRCFDwIO8bn2ehlZhx7Y7BNjarQYCO7mqoSb36T2RZXWon7H8lBabPKnesf244r6aaiFoqqUWhLRqYdvLCLSj6SLwjtmmmTh1OC+qFVuMoMjL66DdV5zvJGeB1QPoxlanxm74VGGbU7GGxatz5Km1p7tJrRsmIIBGMAsr149XIpUR6LKi0NE5NdUP0/uyLErZ26rn5srdUER7OzMH9srwl9PU8YU5SqU3n19CXFEi+seKte19iJEzbiIBdhYJrm5xGSN1rL6YN/82qt02V5399hBaYI3DQYD9fDX5qx6nIcaXVCUgNfJ3JW0FA7t74DFyro32U7Mu97v32/g2QU5dnXBXRVxc51uYbM5O+rHNzfDok+v2vOWLdpf/dzaEf2Gur2hdZ1KvcxYkvUyGuk+mPFkVUI60hAtMdmW4RPuSx0d6pg69G5Bs874pGMHT7do2oMUG8Nbpvb32mpwUAVb8PQFMlHjJfkImMBrNbAsxrCSrwCRsUQtskoFi9GUepklRtFTUsWtrwrkv1dDtIVbRgcFQ8Nq51aeKtT2bsS2hiLEzE7bvCs53pcDYwBtj+2vcdrMAwyvhnNSYXP1w4nwfH8S8KIJqcNs/0tLWr3oIPuaIL/oRNThFaZ8Q+ee4keqM7e0qvWuEsjhoKBIB5MySFnGi0Ng+W1vnobYu/OBJkWoMah3U1yGJr1Zr8tLTWBV88SpMuA6PJfsSOsyX63TAPlF/mS+/Xdh6s5K08lpPXaVo32h6fxw3zh0Q2epIr7Aui3vyU7YhhbMJGPVQhgmjavxZbsxqp9hc36zeFt8/o9ch7yPkRY7I6+Z3PVE4/++Msf+gkFPb29RAYzEjnxQAZIL87/RLB2iGpY6vw6WX470gfTY9ikMN7gMbmq+0DyF2XUyT0tOG5A6F29FgC7llQtOpiFcvBVTE+dKzGqtLdxbfMowekOO/WjMbCZPSeEctBcFQSbzK234RPOuVHVF7enf9//Y1ZJ2laeNtbhxuuLsYhz7e0SakzSPIxaMCiHp+tzsoZ14XgJc4a8zbbdoyQZNBtP5kVpDc1QakTmqMfX/xZ1NkxxHEYbv8yv6KB9kVVXXR/fRDoMDXwhjBReCgzGyQw6VQSgMf598MrtXM6vKNdZ0m4NhNTuzU10fWZlvZr6v7lbxH1M17AnsLSn2RAoi500hRYJ0lNQJeSBQblvK5ZDqSa37pvDRhig33Gxa0qqdgRqKjnFVTjhDoRLYRbQxlq2bDM7POaxQ1zLEJefjco+Ds9M9UMnFoJyjdh5dgybpMv1chjyKK2mk3uKOJ+3ygFI7SIBhXL6q6tAs6BHrbf6iSm1IjNY2mFKumOs9+/EZU0WXolbvythoG9Rem1l1BBSXwtDVoJ3sMIvJJqGRTUeHbqtmUiuHEY4hBX9rva2YPRz1WeFrn4HtKtrSsCpuRp6G7WXacai4c0eOMKITvQAJY+SwcDdVnPFcQ9vLYuTikRCFAcoejGaO5M4S301RvYAw+mKFUqpHLz6omK8KgdRNwHhfxC2GRAkeHqDRrSmQkyIBmJIYAydv1ydYhtzL+7qLvU1tL4uk8SKuO5R6HSL+pmAQSh6hitmnAlh8d9OWg2Vk1j58BTgpn9377kbY0QHXPtOTA0SybE2wcaM0JGvRyH3p3mQyd9CedjJS/KAtZWltpzrMHLsNbYmPpILvAIMGR6d76I6DBTkH7cR7f3ASun9uaCTGcU266tnUbHlVdjYYfMUZjMsNv8nx7YCgMIvswLgBv/KztXqgA70qsiBnTBZ2u7AqsEFaNJCEiqq0dS/mVCRlx4llda6ZBA8FjkbHqHtAkIsbOafuEB9gdDD6E+cIqpaEu6XtSeI7bIVqTdP9Yper3GO7rvN5nJxkbsLSFE8BzERtxMTmNINHmlWFKzAMHLzGjTqDnbEZQtS3vNE+BvlIXgwIEx+g3NJeFkTFW5SPDj1A/9cmKyr+JP3qjBB2PtNzi5Rwap6CIdIvbKyhxHs166WPWxCXTewlI01MiKBDRH72ZJlBBzmSgVdqD2bWOMOA1TaASFalJN0RWaL1hwr/Ec504lW2Qq+oaQMkpk2aQjwpOTrwSir3eIBKZNoqVcAa82TUqWIg181Ai2WAMA00GljqmvziozstJfbn/qhlQznLdk0kbcQlh05tJE3kRo3PsTVF3xn9HPrYJ6tDjGtQZWwFRZel/H/wl8pNkWkAV71UOZtmWiFMq3PiVoZjMm+FymO45jz8ZbBRuweo+PjLcF/v+zdwZFLUaIVqGxVgfjC6T/3a1MZldzCsSiqrxWh0/jR4ZAqV7Stb3tMG4ijAj2sDLLuyq7xddlVZ7XnCfEOCeuQ9NjwW3T9FVPcWqsV0H1RSrpbmXj/lTpE9VJNttWta/BOY/ZAezTBiG2q8it+mM92Aiiu1D3T0VBp6LLQRv2JeV0WZg1KgGq9E096gkCyYpyAvXTcsnYHMDE5Y95AWF5hxDuSDwdBzk5qC8vwIdveecfaJX1/G26/7u5WdvigFJEOR51xNVA3nMYORTVVMg/w0H2FxQfrmst2m0HKsW2ADBx3Sbqx8ZXgbpWPjPQkyDIyv7K15r2FbDXcisFskkruRfT6BtWdhrktSTwXENVoPCCk7pHrVzYXxUAIGxeoldiiB5KyNnP6HnexRTNu8xg2hjdcKytNdbQz4M7KRIhqzYFhZzvT8UAus2AZjlGtkni1JQ+G/sqbjoiMqmPYqYZy4ecPlqJk+Wd/DQRI49yQnZS9Do2qch/pqWmzLgtiGaFX4Du5womtD0mauHOpKI1JMWnvNy6Eos5c6PwqJ6gDBRAOngQESBRksrsWwjRSEkujLNmzn2t+FDqXVWm+CRo4mA4MywqLZ6oTcc2sb/IHYQtVSHT2nbdl0YAo15mVDyXBhD6Ik89AFLuKC4atkRXLcINCqPkgl+Mk4FqtuVw+MODN+/3C/di8id8J3Z3OfEgaP9l33t+kSIR3R4wXUS0Xq9jLVvTL9cC6L4bgWXyv2jUFhBHgScKD11F39wyoLx++8PHqnxcZQTRp4txqY35WVZKUkNunuFZMVDBxDe9lYUMSZL/MWGMNDkaJ6DmhF5ZKPw+8H27R7sbgbuju7+sQUP0BOiKrtA2KTVAbKlMTFJM+quZwpnzRvspL5k32S1VkTw1utR7uSxDS+evrnoPm+5lr9WNcBMG5VANNGl2Gz7sp/JQ7MjC+po0vFBOzgjeAC2oYnx8jUtoJSCsjtbvgTof3JhX2DABiTmqtsgTxRUd6SuVcaksteL8TFYgNbMGFgL14+JOpZ0KUs2CriQRmZEcLzMjm0rEOBVNYwZVkHOVgwm2hpXX24DGYUHGUh2N4xW8b3RBYyTRTXUC1IhwrRaMhoCS74sbofxHfZhKypWZwV9pHtILY8mYAJ1EPBcqqz0gindnY8WcTs1kCBSlGyYivgg/YeGbiG2ZWNmctivu44/Dwnnhzsyu7Fh344Od7EB/gF2g9cgL8ZX9U0TLccaGkw8ugXLlrbwH1QEviADY/8TdrmM8NRvtrTwPF0VOw1OAPdPTHEYbL4c9L1FoM2m3srd66MFcATwysTf9s9cI/QYlHvDSzZgK1WTLBQDJOcOYr1kzKuVOMlgZZ6BtjMGjhANjdbcIiyrJI4GhAG5/th8evgdHQvHnXDV+cwHYPNDzZQ9/cbdEg10Dmu7MjrZkcRYufeYpVpwag3ueR7wkAyhhChFjV1paCJqVWn9C9GlKkpyud+MiLGJdMszHXKKmMPHkiDgLtpwAF1oSTjtkf4jjKMmLQwlVI2kB40PgyFlzWva1QnTvkkmzUDwc+8aiM+Q6Tf1cpOkebWUggd4kKZ+UGHRU9CikqfQGRPm0rZivNKMP7LlDQE0HIgzQzPCxoMKo+U57KVPEa4rLJ2Xyop+40B/w3DUrgrqNOOk5yxVFUOxA55QEQV8xSoJZvbuh3yURS7Jzju0UXT3KAs7cJIWNa034sSDrWiBwXCYGNxxzrBEmSBB0rJBg5VmH4CvTz0FxW5F24M5T05ogYhRCvzhpiIETKhVNjbZdhkAMCnW6yb8xNp0EPSB6cDiqet7q5gy6nWVoRlSddRxsHB3GB1uxedebGcsxf2Ad8jhTVcru6vblNZPvk4nIFNttNG1x0/hWdFIm6k58jSXdv1E7ASUIQWVHQcUISeB6OCqIpHUsOfojYcmHdBmILup+6EmT5t6xXk6tWGfMVQyBzesEZ+dAm/MpbkZTazI06ZGlI4/WQitdAanW4xY3VXGpX9lGFUo2x41Yy7Sc41sVgExITJYb5pqzwlwlijNjHOk1yFc8x53U6SHDuccwqaUENue1fwKBw5xBq1At5ZODoZAEdWdQP1i5hc/Da4LGlGbRtEwx6pUX0L2Ic26geKMxpdgQXuPfG2DrsuVwiim0pbE+TOedaKhS0zhrOkAQ60SPOW0ZFzSMElOjh4dnqja/nI2nSvcEdoNHqmZ46AVw5weKDRKqd1wzxmpHaxkSyyeFurXTlDR/4Yz/yDvdY9T9v1y8c78xDbONo6/YmdtlLG1DDfCyNPW08Wah2QAGWmG+mIcoiJweMVh7MFQ4BCDOpPFNLe0HSaOHHVo/JG+9zInFDbCa8cijRWR0NiB0ErC8HD2q4IMe71yQcbrTtOtueRO7vyAAYsNXtZSefVqwyL0RxWUHZ0VDZ117yaIpg2MEaVfZYZROM2G7TWuIDmaMkmpTk+RLSQrpGl6p9VpzdYzjCQM9TOHRteCZbHUK0a8c7mfXhbWAh3LsokD8ObrxMZJ0DBFGxSt6dgDyFNjg81BTJpuGOohsn7w04TmWXbNXPfZEGMt4t/iF+S9whoXm/qO09wdatyt3NEkMlY86aijro6dYYStSIaviuRep7xEXZbSUmgUqPyOi/F+FjlOEVjjGEgYkpz22ku1hJQ18I/xO0wJhkw9lX7LwtReLuWKT+FSJY0e26zmRi849VCHAKyStOLylLKGyx8XAIHTQWsEu5KbQYTyEGTj1K9pjHbXJclHmXTR2vcPQfWc3edHXGIzRwtWn9ijVfll5YgWJ0xsA7r7oqqzyY3B6zNph72Pst2vLoiFXlVvk4TDxFqSxPOQBcSxrZm2oN7ZyoNH/AGZl16+luNR0S8XFJx1JQkk7FIR3QaaOY9ASpYXCBLavwI4ttIrANhHMObtfVRHW9EgILaJB6sxK3WbDUp+2hxxBqu6bnP8XcXisrohUNgtYknZR45HP8FSG6ibyoXNsR2dkbu8W7tF8UkipIYFsIM2enyaDuPyBO/NnZd8W7YazDDLInqYjObMoWcXe3VWpMh5zR8KlGM9rmtdTNW2hfMTcJjBlmjc1tko+rpgkZZyKVitepmYiq03oaCQ+hKzU9aF3RUIpnJqLRcaQMTKEWUg2TXcQOAPczPHCxxd/xG38scb4jdJjW9vJtW5SejYqE/eLdJT/z6Mlyz7i+wKmNj+vGUgfHM2kN429BlmTJTjMTQqbkoLVMqQYlWV40MlPZG1ZDynJNJkcmls9QdERY3Jqt4Mmwq81aLlSsd1NSfJ+2IjCndtEPcgWgR34sbry4lzjrS7BpBcgnVoDSQqmYzZ+Pc5KgtFGFsctpirjRfRh1Z0VyQOfc5XTNt34NjhEQmAb5E8zaXGi3GHeqfe2rpkR2uZJfqmpabvrwTPCVUjxKpson8PjrYtsR0o2vAqQjcnGLeC/VHjtV+uI8XtBir23dPa9qXpqahRga7mussYcFNkdJ9jshgDrvnWLh+iDPl9wdHI6nz7kuju8rDJM1Wq08BzSdvdSp0OVZj7r56syvzumg+YbGRz/KeK86ec2567YOMcNpxYiIenO5Cdf2I2riFkFXZfNChY3DAqXe06AtUtso8p7fhsi4mL0q+BeOY9GpEwcu0jsba9XdvzaFscPdlhh1tUdPPzNHuBm7fa+3OOy/0wUJ274p2b3Rn3Q+xPqO16U8spdoArBLTHFHEtJw4HcEzMkfKVjzftKic0Go1lqzdScsHEreuCCNhYKEhS91Q2S23enZ3UUGP5DS7L7/patrJvVCLMu+SfG/XSmFnXJpDjb/uan95WmFa9R+DEsurF5VTuJnbj+cAHqqndV9tzdFZos1YyyfUiyqkqE51lYcKON0XzHElSMbK2SdafMadcMihXK5i8Xa6M7lKIYgmqoYSMrTNxR9dECfGIEMtme5rz7h6yGP95GMcvcEkds90upbWmfO7b9Ohrkj3dUhc1v+xxOx5iNhYwaH7ig8ODfxY+/LEPTsiy+8utb5LrD3WFDyxAn1IQd59ynKHyngoL3fA3TCkp+0u96bP1TlWNjokoz2iV+0+G6unWTNUuDmxv33IF9h9fkGXsm2sJXBM8dKAxa77pHce69WYnv2IDsAPub66zw3mERw5pNyHbM4hlU73CEFc+pAx8+yJCPSQ76X7/DAuI+qYQfXERO6QlqC7LAZuc/iYzO/EKGzUQ9/9lnu3I3hM7aYDdzobu98J6bSWjXlk7j7Rwz677vfluR1PY3KTE8/LsK2mux0MfsfDuOH+EA6rUftH97tF3IL4cf/3mSn6Uf1w9+uNvZLUcTfiIXM7LCrsbqmXWxk2bvC4/2B9WA7X/eI5r6pp3JZwQFXYsCql+1UsXonDuAB4N32jLHP3s9Ju0nJcSnf3Gg0TOt1PALnZi3HVxX7l3qPKMUTHuw+mu2nVYRb27hkcQiXdh1ZcAHYM2Or4vp7eTi8+i9MP7+Rbv5rkB/n/H+W//8h/X/Lvy0Vu7k9pfkXDBBETlnFeqHG8fu3Nw2szwebDi9uHb16Ur/7+8uKzma+N8nVx+7oXX7z69+vvXv3py8+n795d3k6KhOGVTtBiyo/61woFQoG/Replmb7r04s/xOmLf0xf7380TFp9rX/2h8FgeYBGo/PNA8h8yEgub+V/w/Q8yLBmLY9NpGAqBjFuX3j5/OXldy9lhLI9og5w/4FGahkhY/p9fP7Fqx+//fPP33z707vn/fVPP7+zQT7+GHpJC5Feuf18uv78H//25vXbn189/+dr+yNfX/QBHx6O6p/0+OmuXnzq8UB48uPnQ7dELsmY94FJdC4/vPz7RZ5simF6+f3l2YtPppc/XkDYHt7IO54lfd2bIvtLd8zR1R/4dZO0ZNs5N5P0/sUnJ2nBO380ScGbmLBPwOMhQC6yPB7C1YtPDYGaqPB4CBVF4xJsEGct06+a5auz/v4RbwyA/4hzoFDkVx+1Xxjf2wvf8ZyPZSpwF4JSrOdivZ7vv+r9pAWbo79Mz7791yfyZvEz5EPPfvhk+uv08itb2iQ2U+2l2ppb8zW2m42ofWw3/wdbah/+ZQP74Ver0f1GhvxfmyuRfgplbmRzdHJlYW0KZW5kb2JqCjEyIDAgb2JqCjYyMjA2CmVuZG9iagoxMCAwIG9iagpbIF0KZW5kb2JqCjE4IDAgb2JqCjw8IC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9Gb3JtIC9CQm94IFsgLTEwMTYgLTM1MSAxNjYwIDEwNjggXQovTGVuZ3RoIDE2NiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJw1kMENAyAMA/9M4QWQEpIQmKdS1Ue7/7cOpa8zDrIDbSvCE582NY56t9gLHkeNfZVPgw4tFRs74VOwhJhIwaN5DtDyZQgGiRYeLWSes46DIWAc7ZElwmgvwgtlK/qsYtnoyjg2dTXGBhm3p+uvvysX9XXIifyUcYWesOTGRt/mAAsKtCydttZ9y/u4YXGV+oRUfxyo+x3kX9z/erdXe34BzHU7lAplbmRzdHJlYW0KZW5kb2JqCjE2IDAgb2JqCjw8IC9UeXBlIC9Gb250IC9CYXNlRm9udCAvR0NXWERWK0RlamFWdVNhbnMtT2JsaXF1ZSAvRmlyc3RDaGFyIDAKL0xhc3RDaGFyIDI1NSAvRm9udERlc2NyaXB0b3IgMTUgMCBSIC9TdWJ0eXBlIC9UeXBlMwovTmFtZSAvR0NXWERWK0RlamFWdVNhbnMtT2JsaXF1ZSAvRm9udEJCb3ggWyAtMTAxNiAtMzUxIDE2NjAgMTA2OCBdCi9Gb250TWF0cml4IFsgMC4wMDEgMCAwIDAuMDAxIDAgMCBdIC9DaGFyUHJvY3MgMTcgMCBSCi9FbmNvZGluZyA8PCAvVHlwZSAvRW5jb2RpbmcgL0RpZmZlcmVuY2VzIFsgXSA+PiAvV2lkdGhzIDE0IDAgUiA+PgplbmRvYmoKMTUgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvR0NXWERWK0RlamFWdVNhbnMtT2JsaXF1ZSAvRmxhZ3MgOTYKL0ZvbnRCQm94IFsgLTEwMTYgLTM1MSAxNjYwIDEwNjggXSAvQXNjZW50IDkyOSAvRGVzY2VudCAtMjM2IC9DYXBIZWlnaHQgMAovWEhlaWdodCAwIC9JdGFsaWNBbmdsZSAwIC9TdGVtViAwIC9NYXhXaWR0aCAxMzUwID4+CmVuZG9iagoxNCAwIG9iagpbIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwCjYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4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eCAvc2V2ZW4gL2VpZ2h0IC9uaW5lIDk3Ci9hIDEwMyAvZyAxMTQgL3IgXQo+PgovV2lkdGhzIDE5IDAgUiA+PgplbmRvYmoKMjAgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvQk1RUURWK0RlamFWdVNhbnMgL0ZsYWdzIDMyCi9Gb250QkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0FzY2VudCA5MjkgL0Rlc2NlbnQgLTIzNiAvQ2FwSGVpZ2h0IDAKL1hIZWlnaHQgMCAvSXRhbGljQW5nbGUgMCAvU3RlbVYgMCAvTWF4V2lkdGggMTM0MiA+PgplbmRvYmoKMTkgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM0MiA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDIzIDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxMiA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjEyIDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDUKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk4MiA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4IDYxMiA2MzQgNjM0IDYzNCA2MzQgNTkyIDYzNSA1OTIgXQplbmRvYmoKMjIgMCBvYmoKPDwgL2EgMjMgMCBSIC9laWdodCAyNCAwIFIgL2ZpdmUgMjUgMCBSIC9mb3VyIDI2IDAgUiAvZyAyNyAwIFIKL25pbmUgMjkgMCBSIC9vbmUgMzAgMCBSIC9yIDMxIDAgUiAvc2V2ZW4gMzIgMCBSIC9zaXggMzMgMCBSIC9zbGFzaCAzNCAwIFIKL3RocmVlIDM1IDAgUiAvdHdvIDM2IDAgUiAvemVybyAzNyAwIFIgPj4KZW5kb2JqCjMgMCBvYmoKPDwgL0YyIDE2IDAgUiAvRjEgMjEgMCBSID4+CmVuZG9iago0IDAgb2JqCjw8IC9BMSA8PCAvVHlwZSAvRXh0R1N0YXRlIC9DQSAwIC9jYSAxID4+Ci9BMiA8PCAvVHlwZSAvRXh0R1N0YXRlIC9DQSAwLjUgL2NhIDAuNSA+PgovQTMgPDwgL1R5cGUgL0V4dEdTdGF0ZSAvQ0EgMSAvY2EgMSA+PiA+PgplbmRvYmoKNSAwIG9iago8PCA+PgplbmRvYmoKNiAwIG9iago8PCA+PgplbmRvYmoKNyAwIG9iago8PCAvSTEgMTMgMCBSIC9GMi1EZWphVnVTYW5zLU9ibGlxdWUt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MCBSIF0gL0NvdW50IDEgPj4KZW5kb2JqCjM5IDAgb2JqCjw8IC9DcmVhdG9yIChNYXRwbG90bGliIHYzLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZykKL1Byb2R1Y2VyIChNYXRwbG90bGliIHBkZiBiYWNrZW5kIHYzLjguNCkKL0NyZWF0aW9uRGF0ZSAoRDoyMDI0MDUxNDEyMDAxMyswMicwMCcpID4+CmVuZG9iagp4cmVmCjAgNDAKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE2IDAwMDAwIG4gCjAwMDAwNzI4NjUgMDAwMDAgbiAKMDAwMDA3MDgyOCAwMDAwMCBuIAowMDAwMDcwODcxIDAwMDAwIG4gCjAwMDAwNzEwMTMgMDAwMDAgbiAKMDAwMDA3MTAzNCAwMDAwMCBuIAowMDAwMDcxMDU1IDAwMDAwIG4gCjAwMDAwMDAwNjUgMDAwMDAgbiAKMDAwMDAwMDM0OCAwMDAwMCBuIAowMDAwMDYyNjUxIDAwMDAwIG4gCjAwMDAwMDAyMDggMDAwMDAgbiAKMDAwMDA2MjYyOSAwMDAwMCBuIAowMDAwMDcxMTQ4IDAwMDAwIG4gCjAwMDAwNjM1MDkgMDAwMDAgbiAKMDAwMDA2MzI5NCAwMDAwMCBuIAowMDAwMDYyOTcxIDAwMDAwIG4gCjAwMDAwNjQ1NjIgMDAwMDAgbiAKMDAwMDA2MjY3MSAwMDAwMCBuIAowMDAwMDY5NTc5IDAwMDAwIG4gCjAwMDAwNjkzNzIgMDAwMDAgbiAKMDAwMDA2ODk3NSAwMDAwMCBuIAowMDAwMDcwNjMyIDAwMDAwIG4gCjAwMDAwNjQ1ODQgMDAwMDAgbiAKMDAwMDA2NDk2NCAwMDAwMCBuIAowMDAwMDY1NDMyIDAwMDAwIG4gCjAwMDAwNjU3NTQgMDAwMDAgbiAKMDAwMDA2NTkyMCAwMDAwMCBuIAowMDAwMDY2MzM0IDAwMDAwIG4gCjAwMDAwNjY1MDYgMDAwMDAgbiAKMDAwMDA2NjkwMSAwMDAwMCBuIAowMDAwMDY3MDU2IDAwMDAwIG4gCjAwMDAwNjcyODkgMDAwMDAgbiAKMDAwMDA2NzQzMSAwMDAwMCBuIAowMDAwMDY3ODI0IDAwMDAwIG4gCjAwMDAwNjc5NTAgMDAwMDAgbiAKMDAwMDA2ODM2MyAwMDAwMCBuIAowMDAwMDY4Njg3IDAwMDAwIG4gCjAwMDAwNzI4NDUgMDAwMDAgbiAKMDAwMDA3MjkyNSAwMDAwMCBuIAp0cmFpbGVyCjw8IC9TaXplIDQwIC9Sb290IDEgMCBSIC9JbmZvIDM5IDAgUiA+PgpzdGFydHhyZWYKNzMwODIKJSVFT0YK", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-14T12:00:12.552566\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.8.4, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" ], "text/plain": [ - "" + "
" ] }, "metadata": {}, "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "(
, )" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" } ], "source": [ @@ -4766,986 +14745,3941 @@ "print('Trace fidelity:',\n", " abs(np.trace(qt_qft(4).dag().full() @ qft_pulse.total_propagator))/2**4)\n", "print('Filter function cached:', qft_pulse.is_cached('filter function'))\n", - "qt.matrix_histogram_complex(qft_pulse.total_propagator)" + "qt.matrix_histogram(qft_pulse.total_propagator, bar_style='abs', color_style='phase')" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": {}, "outputs": [ { "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"svg\";/* 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": [ - "" + "application/pdf": "JVBERi0xLjQKJazcIKu6CjEgMCBvYmoKPDwgL1R5cGUgL0NhdGFsb2cgL1BhZ2VzIDIgMCBSID4+CmVuZG9iago4IDAgb2JqCjw8IC9Gb250IDMgMCBSIC9YT2JqZWN0IDcgMCBSIC9FeHRHU3RhdGUgNCAwIFIgL1BhdHRlcm4gNSAwIFIKL1NoYWRpbmcgNiAwIFIgL1Byb2NTZXQgWyAvUERGIC9UZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJIF0gPj4KZW5kb2JqCjExIDAgb2JqCjw8IC9UeXBlIC9QYWdlIC9QYXJlbnQgMiAwIFIgL1Jlc291cmNlcyA4IDAgUgovTWVkaWFCb3ggWyAwIDAgNTcwLjYgNTQ1LjAzMTg3NSBdIC9Db250ZW50cyA5IDAgUiAvQW5ub3RzIDEwIDAgUiA+PgplbmRvYmoKOSAwIG9iago8PCAvTGVuZ3RoIDEyIDAgUiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJztvVuvNceRHfh+fkU9qh94lJfK22NrZDXgF0NuwjPjbsOQ1WxZAqkGLcj9971WrNy7IrP2oXSk5jfwwAJIfYyvKndWXmPFZcVPf/7N//ztr7/5j3/3s+P/+vu3n17/9es/vMXjd/jnN0c4fod//vWIx9/hn9+8BfzXd2+lhfeKP307/1TO8h5y7K1AFNb//O9vb//89tO/xct/wBt/9/ZW0ns6coyPR9BcOd9PL/p2ikpu7/0p4nuLxJr+/tgbLIGClOp7P/7HN8f/ffz++OnfJv4+vuqI7wXf8w9HeS/lSPiR/4Ju/ZN1bR2CnMN7bKmGuvbWyZfevP392y+Pf6vevP3dsfWmlPdce49t680l/5K9wbTH0CoeW3tzyb9kb3p4LxWN7WNzyb9kbwZmJORe93Vzyb9gb85Q3luNKfe1N07+F/cmszfp+PfWo4C/+Vf8u44QRw2tn7cd9WLn3/b0/P3ZeMAR5BrHIQTJR+3k0N7Ls52f/XjfEXN5H2sHJPr0l3zY0hf7lhTH+7ZQJfr0t3zY0hf7Fuyu97xtOhN9+ls+bOnLfUu/HWavT7Ef/o5XrXyxbzhxG2y/L9Gnv+PDlr7Yt9x0lO9e6Sh/1un1UUv7t1Cz+te31t7zqCnG9RUnDuPSm/DaSO84Q8K5nStOvL0QMT5lpDNtP+Hl+ysRgx9y6/vh5eS3V9DjHFPd33iK9xdSeh8Z07y/4eS3V9p7673mtL9yyfdXcnoPLYTR92P4ku+vVDz3Ykq8fH+lFSyS+6R4+f5Kr+/p1aw4+f7KwDJ6NStOvr2Sgj23z4oT316o7/XFrHj5/gqeO1/MipffXoF28mJWvHx/5Tzf24tZ8fL9lTKw4e6z4uX7K3W8jxez4uX7K61DJ77Pipfvr3T0+cWsXOL9hRGwi17MipPfXinv8dWsOPntlfF+vpoVJ99eyam/ny9mxcv3V878nl7Mipfvr5SMs/s+K16+v4LN2l/MipffXkGf77PixPsL7cR/32fFy2+v9Pf+Yla8fH+lZ+DR+6x4+fbKGXEZvJgVL99fwfU5XsyKl++vZN5R91nx8v2VE4Dmxax4+f5K4cV2mxUnvr2Ay+DFrHj5/krFTfhiVrz89grUjRez4uX7K9h5/dWsOPn2SsF9W1/MipfvryTeUvdZ8fLbK+M9vZgVL99fybzYbrPixPsLJy6DF7Pi5bdXcBO+mBUv318p4b28mBUv3y9V6GDf49/h+CpAm0sDG/HgITlyj6kcv/7u7Wdfv/27r9++h54X+Fx4/oHqnD1y/PQX8auff/O7X/2nP/79r37/h6/+w3/79rff//Gbr/7lu29+86vj5/9y/PLtlz827s7hHXdha/1SOC/RZ4C3b+jsVMKXdu5DFvlWws3dcz9DqyPOUeMQjVZLxSB9/U9vP/1FOmI4vv7nt5/Evzm+/t1bfc815XBWDkXgIz8J9hc4p3LKXKz8m/zek83FbKNZE8mefExMaI+ZwZ/wek/B5ubEaa/2bZaSn6Xvfvv7P/7hC81OxZkYasHQPGfnEn1mdnxDmp2lnfvsNHsLI3KWWjLO8vHXzk59P0vHONucvJ6c8JicH3tgz3DSPnqGC2c50ScGdmnIBnZt54OBhWo0QjtrA5qqX2Bg0xcbWDuYA3bgNbCX6DMD6xvSwC7tvB5YKhEndLuOYR2nG9hQz/BjDOz5xQa2UTXm8XQN7CX6zMD6hjSwSzsfDKwppzEAYmOwvsCKrV9qYEuktRxX0HkZby7RJwZ2acgGdm3n9cCWaArWCLWG9CXO2H4N7Pdv7MZX7BB6GnVtnjETuOjue3TGbZ746MovrCHc3yUOaTRh6+w//uRxLaeGO8TaUG//8W+Wa9jpR+Md102e1/Djh39UVUlOk8DvL7VXdPUNv1vn/6AgvLcAdR4gE/PzH3dPymPux3tuRddAw+FeRhvDxBHrL/IuIIIOsYQOMWFbKhXSGCDG45JiK0KlpxiD1mrtmauxvY8RUm+UJ0L3Vns3eSqhZhOXd6yzgbEqsWLRtbMNyqGDnTnFGm0x1pNXuckLfmvkwUWKJX+2aGpaPKGdplpzhhyXf2u4okye3wOGskRbsCPF0a33RGAt98pvxZ7IuQ4937Gq20nrNDRnfF4v1n1o1IQs9JKGDphQarTnAckjepHwuTQZnfhd62fpGB3sX4jRg37mwqGMlaDf5CeuUtoykuR0X2HR43AcxG3Q3m00AcZTrxgJyDk8OUfuSQDh9x4DZs3Q1IkfsVHDgZh7GCY/32trwz62Y1cGQMgMceY6TcVaAaQ++aMR8vjeK0bdPrYDDmCWoDqdHfABW1ZT3jnRJTccvXgkYhbUy4H2Rx8DP9t5cCXsY5NnTEpCs3ZUp4JTytrBp+AMSDi3MZfv7E5SO/291IHlgHYSfrd1k5v5Dgd45e+eXIx9mBjfgpHoxcQDn5JPk/f3yjHDoNkX5jPZ81gA2Fq4Xtl7dCZZ7xPOjYaVXjrkDasFe6mbvNJAE1vVr9aC10yOI7LMdrD18ado7RAY9HTGpO60MbuTcJ6FGjAIvb5jIZUuMQ7DNOrZ7WOxuDS1KWGPYUhq1SBA3w1cURitd9s/vD+xCTCA1Z7PGZOLNa5BxthkW5kp40xlb6I9X3qKSe10DFVrWDCU1wQEQzGVlIbtxWu1vWPyuVUpR/MDi7LY45jwUqx5oFJs/DL0s9h02Gomx4I5E9E92xkjo1HKS6Tzuif+LOYN21+jhosr9IEtZFd1Talp9At2U6SiDznWJvCvbVAaM2PmAWPthHimYP2vEZMeoGZBzrWD8bHhqZi6ngfE2EutY7db87XiW7CWuzWT0mhaU3Vg0rEaqnWHPdZoog84JlvD6HOvnlkbOuEhrHa1n7lXo7rZcG4HLFwTd5xvdjomLPfMP+Nn0QMMGaaF8o5PxCmI7UEjjG0O+yospNx4AkB+0laMHzb5wOSGONvHvZnsceziAVUyYpArTggc68N+lhZzHEy5WfP8/WyjgI2IE3rgUyhPA92x5nE24XjFAXmcGG+s9m5fi9HFguz8RLbfcOoGyTlUOGaGuon9ZhudLiBszzPhd2mOOqEED5Pjtgw8kiDHPLfzZHcy7XVc+fpZnJCYA5NjYbDT0R7vvKOiyblQefBATuRb02xn0G2D5YnuRN41yU5ZnAiYaazHat2vvF+aydHngtVwmhyHdAqS46LCVLek4TnjGJKjfbsn6bULaPC0r8qE8bEG/uzA6GPNWzfzySMaG95GATC/2NbKNBxyQ+NncY3giXFaN/PgisFPHjT7DRwMtkVxjL2fah6bCUvR1LN84qzJA8emiXEknXZT4mrBnOO+IADBXHWbZspxy+Peyxx7amsYPnu+MMrpjC3aThk11ih547XM7cFJyRX3n31t5dmHFdBs8CO+1Y47Yu9qV679LuZQaiRehKbCuwzyDAhP5cTkDZPLWwJyrJGCc96+lrE3ds6i/c67rGgUsLurnUgATVRecrXzEVoMJhdbF6N80kEUeE9RzoWHxU9Ax4MhDftZHN2JiyTZhg4tY+WZHPqL6RfsDVBuNMtZxo2R2R2MMg7QinMsqpmGuY08gzgKZYRuV1+mpwJne9Kv4uOzltpINHxDZrAQo8SJ+NaiaWYztdh4292EftAcjYvQBvPEzc6xxMdhuUD5rjbnWI+8wynHcmHXirWeA67QanLam6mf2hxizTW7yk7clDgyMXf4KtzVA3/DrzqhEkHXaNCOTpzz54A23kzOs6bR604TdoXGbnN1UkUL0kdw7cSI0RwmhxbEhcw5x70AJcE+C0fXuw2Ojq+GjWU/m2ji56ViCx8biPof5Wh+8PS1n4UqEG3KceG/40AJ1Duo5+EybdY8lEecQY3aVDHbWFH7+EbTEbmxsFpCTDZZUM7em9QX2lqxBJIehzaFG7FyzrGF0yktizPRccj2aqOJj7Wbz1Y1dmfAryY+DuXNeoMu24wnmyzsH506OPOwSu1xNoiL2/QC25QZ2gZ+FecP58SkPCBKojKCr8OBho1i8sIt3KmM4GkcIAydoxx3MtVejDxHDx9hu5nnYaBGhpGnnoy93CTH9GNPUfUiBmkYJftW3FLYG1y8bB9jk+265RFReOhgzDBrOF2ChhL3JJcx5ifj0gkV69C+inc+xyBCjnFCj62buCYxGrg/D9uQ2D8aG6gUUMhxXELOwzZIOTpxTwLtBFpJoUzhEIHWZ3L0gdo8fhZNNu42yTGfVDQBrdgD9MuMBWc3XcAex/EDJUvrdXDTYKV1PY7tZ7+KHgMhRIbAMQYPGpB6g+vTNudpFkccDlm9oVEdExtkiUzcAZxEzDz1NhNTrwfAyiaGioWZZUwb5EBQWsYEFFgxhFvZlnGp1nkCEIMo/FmsBeixtk0IcE5qz2if2tbIwigESoEaGcYeiwsIxS5tw1sYYWhkbB56aTAtn9gvVIYkHLwrqPvbnNCjYmcOxp6bP9BkbXKc/lyvGExsgdpGCZITD5kOhGsF22QuNbpZcMVCizB5xV2p34WCWzuv2yPTr4KtkU6TQ8UC8mJwJruPtWaoAHNMBxfxFtYnhgEngeToNBVN/C6jHjBLdoTT9dJMd2HzuJRzlxgqFhrHDNGLS61kSA5NgwdrNXkJQMPD5Lh0uBEx+tgR2ErdlA4sCsBOfBedA+hxL1XDI+s3QUBu0nlfiP7iOEUZASItDjhccb3E0t64KE6Zj/qHyD/wO4gcFX6DgztiC1McsVut77isePPjvueaw2gIukSodW1if4Lh1loSxr/AfODQYMcLzGNc7Z4xOY2cwqUOnGOt44QqaQfn3AMhnKYYLeDcIk2q8KcH59AycJNPcI5lWm1Tco9BOmyqoumuuGTZfwwgRnrYd10oHNNtvsB6Q+EcNfyAfa9D4di32NrqPo6OnIlRDLRDI8bFd2zoPHEYpKkt8Bw9gzIn24iD550qIZQEa8fD885Xc9LzDp432m9GFgx38Byv4g6QScbBc5O3GHZ4bmoP4IANm4fnBLj4fgMvHp4XOwbNxrLhc3StCxsFIh/of6chYgi1QRfcDmACDbcJiF+4HUfKqNlMOxtuPwfVlGPD7Rg2GbEW1N6pR58cAw/aCZ4wR4KxF2iHOBCPW9setNPiF6U1LqAdo8RTTCD8Aue0mAAKGbLw4LzTPjQmSvbgnKpFK5I7FA4FFYdnE/x0KJzt4z62a9uj8M4uPD7XoXCzgUAzFqp2aBu/G2pXOx5tczNhcK0/Hm1jqQFpCjheaJumEUxIseFxaBtyaE5VK8SjbVoZa2k3tM3hbDJMebTd6OLmGjwWtE39Azs+WvMebWMltAm8FrRtID/aPb+g7co93PRVtkqpsEpdpbVwR+EEdjVJQfQwHHpYxrKNgtsLDOfBZ+fIAsOhl2KyZC1wMJwYBUvRrAULDMfG7bna+bXAcHMgVOFnB8PZf0ycMJCD4cS9YcKCDYePinET3nY4HDsO205A1uPwwf0kVXbB4YmWsgnJPA7npjvzeIHDOw4nWz4LDqfpCyfkjsMT9chkd6nH4VJHh5DjhsNxTMl64XG4ob9kq2rB4fSNxlPD7HB44vbrdrx7IA7oSIt8lnwB4lBbchacX4B4o03ZmrdGoZFkWz1Al1HAfQPo0DQ0ix6gE89VoR0P0PVTxfSvDaBDrdNq8wCdxxD3og2DB+hYMND6gvXTAXTOCt2X9r0OoFO3wk7oAuILQIfaWsMNoOPULT20G0InDIaGd0fomMliFvoNoVMDbHrcIfTO4FwdDhtCh+KZtBocQscpXQkjhdwvhG4K75jiC6HjZzs2sbCmh+hYX9wexw2h43CKpsx6hI7mO84OgcoVoQ+MmaCHR+jDlvt5Q+i8c4csfQtC592NL1c7DqFjHqhqCVo7hH7yDktBUNxBdJyK+Iiu5xeIXnAwpxtELxaUJOi+QvRId42Nj4fotGbjp/T8BdGxRgBh4guIHjDpWVj8gujoPs44XTgeo2e7QIqGzWN0yPFzgrMLRsfu09L3GJ1meSxtwwwLSucZF2VO8SCd5ymm3z7WgXTGHGFHqDcrSOfgTzDuQDpV8/EA4w6k40rCDglqZwHpUA267awFpOOeG1O6QnTGgki+YPSCY1lLx2P0ziV7ytjkMXphb/IpucPog16irKXjMTqDm7F+N4yOFgv1AYFuh9Gh/dQc1IwD6VRJMBrjBtKpvXU5xRaQDrViYgyH0TEeVNgkvSB6Mz+M+r5AdIY19tNu9AWiYwZLOF8gdBy1trgXgI7WsYxuAB1nQoT+ZAh0BehYo3J1LAA90U3WhEw9QC9UR/oE9A6gY0FPrWPB51g1mLGJtx0+zzzF0h2fN3peurq54nNCzSSc7/D5ybkZdst7fI5thI1vnhqPz7N5anGRHRs+p55R2bMNn2NfQDnS8ys+p+tCUzXBOFWbKC38heivxOeWYjshORNhoM0AaPNc8X/zsZMeN3yis1iJLw9MzlwTw7HHt5aqksxjbnKiTFtEi9+dlrGJ1HFrUSXMJs20lt/c6/T2tW7H9eJeN0W9VbnLnRud85Sq3PEOkUe611KQJcAhcowiNFHD3ZeznL74kw71Y4PpmGFMsMwPlxOd+4z2HeFrD9+pUWvqHHqndSDFMORzf6J3c9FjqmUcuNB70R1e1XXmthSiA3PRY8uHqmYcqs/UU6OMBg7V4yTLtd8wPX6V3uYbpjcXlLwdC6ZPTEuQMrhgesYHz/AFD+kZzVyGLBsO0uNNwM2yI3ocqxj4YQeSR/S0SDTsdCF0h+i7xR0YrvGAnloY1AvDNR7QB8ZJTJR4AXqc1OXp1PSAPhEfPxz0DtBXw9mCTSukx7DX6XB3jnj62/ANwvqXIx5zSR1YYofp6RUY4wbpCZVjkmPa+eEJrYcdKZsfntEzXEPH5ofHMYjjPMsE4KA+cBuDF6z33hFPaxA7cWyOeLqCcZYL6jsTQODV+HDcO0d85x+zrDXeBMCDLAz9rnfEM/lJiuZiGcDhgDHrsiRcloHKqIk+YzW8ZcCiI1oR1H9aBhq9c01QdvHDD1N1tXS8ZQBrGkBWo+8tA7TQ48Swbno/fKOCaNvNu+HRYCJOOjbDAG5WzLhhhc0Nj7+zk2KxC+BiLeOsu13AQBg2gU2JtwsA90KXP4X/nV2AWknTReztAsXAlpDRYheguhBkAFzsAoFWXHM7eLOAee2x3+SFv8wC9OCi2SqvvfPOd8IGOawW+I9FR86Bmxue+lAQLvXoH6dYHBOGe/QfiG4mfHbon8gIC1AOZYf+C/dMkDa8oH8cyJjTqHae6J/wsFrg3eaFZ6RGjOOG/nHEQ9EzX6pH/9gysWDibuifHreQZBy50D/RMFRfoecV/Zs6qccv9I8dD61FN7BH/6cdXjpiF/SPLYO1IRjr0X+mtaAJ9nr0j+snyMa6gH+asoIuYA/+menLEAXJHfinDsAghWMD/ydHOWd52x34p74f2zQKOPCPU37g2LmBf3QzaqWtvvnO5WK98dCfgLnNQXbQn8F/mLebc76aZUQrxEP/bFbTsDvnMcux635YkD999uiGjcGF/JlJCRVYC8cjfyaxtn7zzaOVOB2jDvhnXmIxC1154G+q2ik7wYX7E3FQmh57j/vlsRcqcrgfn1RwME+PvcP9ONzwF1ntONzPXhaZED3uN1NeG2Yt2Vzz2IRNzm2H+/G7wOVdCNnjfkLbZjYvD/uxLAd/ybrjYT9OMaC9KE/+E/ajdW52jY6D/XZN44YWvHewnx8yxo76cdnb4paV4EL9vF1P0+IW1E/g0hkFcmyon5H5PPuPDd5TOT572uE9zjw8rm9y6D5Q8e1zShy6p5eMYUh63qF7BtowDOlY0T0jcHvu09Xu0D12HR4Zcs1f+F5+kWnMcPjenOGnfA4Lvk9yMx0bvGfM2DmnysN7Lkbo7LYCVxc8joDeJb9c8AwZyXPsVxc8YHGecgfvcUSeWNTytTt4b9aXOGH/Be8ZPjQf9y54Zi5iocul7lzwlXluOd7wPYOH+jQHXPC+dIutEqJ2+J6B9LXGLJf6BfB5HwBvmTazIHwLSCvxhvCLXRoTmjuED0WIauUN4ZutRFFLG8IHZs3z+Qvi85rDvqo3F3ym0XLaLTzEx6RglIeedxD/5Dic+Qbxqc7iZrHhdBA/8F6Rv3dzweOmVbTH5oJP1JHVjIP4py1qddNDfAa3FB3gDzyfGCNc8weivxrid/O+V3wqIH5kNB9uxcpkgBmfj5X0IcSHkoP1RKap795asgAZnIwUJ0IoDgduuRB4Kx7FspRPO8RcdD7PNuBiw5nodW2JKS8YZYtvb7vrHnIomiHLfHCF7WNIgQMVPg/dTloEcCwPTsVGkLNiRotDN3jnwjDI6/z/xGAALlHyy9qA+4XjrfhwH+SPFQn4qTD2TJMZlBrZOLCsaGDYrBPEhGdSM1d4geUEQI1RGMGSE4A9N+Qn9zkBmJw43WpbeAEOHkUoLuEFmWwCUWHyPvafbqzpFlzCDrD6sVwVPu9yAqJ5sU7ZJ5ZoBGgjsmEvZg5sXlzlTdEILleAGiUAmcldNEKyfZA2ewblTERIN7sFXbhhaBR8NAJ0S/ycbY8lWeA0/pGb4aIyOXCmEFx2CyAvTIIwymK3yIx1iloiznAxmNWKw+kWi8BDpYVbKAKtBjgIlRLgQhEYQTiagJ03XDCUCpOr5y/LBdEtDieFe3vLBc0uRVY2H4rAlZCEpLzlglHm2HiK2feWi2hHoiIULsMFY+RxGcQ9GIH2EtxBWVEHT8NFK4YyZtCBM1xgWHE6Wmec4YKB/1BHTsUiuAQCTDi2vl02i+GimHdY3mpvuEhm978ZLqjK4IobikW4DBdYurR/KCjdGS7M+4zZkqHjMlxUJrGcp9CwM1yYFaAJFHjDRSW0HHLYecMFVSLmZO8xDdUMwVledWe5KORf6bP/znJBb/hQ1I5PIODtOx153nBRaVSfGTvecIE3McjTjuINF9HAc5JB4zJcoMMtNXlXvOUiWrS0kk+c5YI+bGbO7JYLmhZwJas7znQBeYipaiF704VZ/npSCMRluoCmgqNLkWCL6YLgbOS2hzRYcF56yC/TBYPV8QH3zAKqAGVGq3vbBRdblL3H2y7YHwYX3mwXyVR6hRa4kIaTKQEABgpduGwa1PqJLg1pOpvGadBAJhlv1DipkvSHDeQyajA4Erp42I0aJ61nQ6evN2qw/TADhrxRg4olNLZpBHkaNZR4kQXDnVGDFiIcBrJ1XDYNRpOPqICSxaZBdyat0sdq06CHCKqkJfM4m4ZpbkEg1Ns0rMUx4bmzaaRhGqk8/86mwSB53BNhj2igUQA3mYwUzqbB4Pk6ZhyIs2nwUOm4d/aUA3w5NNWoVAFn1EjU9aFNKHLhMmoYckIzNmzOqJG5WWLVsPmUAxyoGDsF//uUA07EmAkczqiBwxWIXuq4N2tkuhZCkG3HmTXwvVD7oxb5ZdZA89iiM73FmTVw1BcqkIp0uMwadIYzYHiPaKCCT7uG7BeXXQPLGts7WI6ls2sQizPA1bais2sQzmKB3QwbWBhp4PZT6MJl2UhmiFN88ZJ0QJ/DWWdkhDNtMBy53k0b9AsOZtYdq2mDq622tuccMNEUaljaIxo4KZiHJAvGZdk4u/HcCLc6ywY/C4tDFhVv2eC6C/N3nWUjEYfku2mDi4pejT3p4KRSjgtP8qdpI1l0y4TF3rQR7YCZWQQu6YARg72om962QVUcF4dsHpdtAz3GSZaF9i/bBm0Soyqwcck64M/2MfMLrogGrp2elT/nbR6ReS8zJsCZPCKVFvxbtgpn82AOBM/9Y7F5ZKh0tIgrrsPZPOi1rNyVx2rz4ElPa5a142wenViVsfLHZvMg/V8MsrU4m0flSY8mFetw2TzolCk4ChWjcBk9GpOmeK0fq9GjWtB31Np3Rg98ItajMlyd0YNOE2hjsqk4o4epTr3cYhoqQ+ibkIc3ehBU0MywxzQUM2jlGY5wWT3oJu6y/Hirh8wYTWkKl9HjZMbqkAqzWD3MWqEDYLF6cAnWc1pDnNWDq7TJLuatHgwEw8kd9fxl9TAdk1xnx2r1IE0GemOLx1s9ssUutSr5ZfWgYZbJWpI7q0ex6z3cAhsCzzI174wevLp7keqxGD1o2sQFIyPJZfSwX2pK3XFGj0R3B3WAYzN6sEWoD8ovcEYPuubjHAVv9MCygE4eFKzgjB74I2OI7PmnhSPRaZdei/5qo0eZSQd1kHwgPEwgJB8w84dRXX0Y19A5C9WolwizGLjbTExDhw0HLqPKOFmFNVCrDbsdg2EQtSaB6UiLJ+GrmQio6yhFwFksCMowKQKSPhCC2dB5Bkh4E4QFJSnbcrE1kI3vQW/gbQqJuH369X2ARGTqgPaGtzVEmv0BLG6pDAwAH0UBGN7W0BhsJcP5YmugftljvsVOZFpo0jQeOKMC9f4kFWQxKliugbzRS+oDUWuVkWDNfGBWmGwKztbAO7krJmeJnbDJnb1ZbRC9TlKI1QQRcT2oGW+C4O0fpOd5GwR0HdzT5WaE4B9t2m42CIyGMleX4AnGE9OCd9zyIQDrBAEXI0RnnEFS2Lk3QgyGeSscejFCUFHCNbIbIRiYwOUio4UzQpzEREmp9wuPAe4cMQst4RPMNcDo75kPmIdQeC0cm7UB2xkoQYEDLkwi8byKis5YrQ0FWraMGT5OAiAREzHjHpy5oRMrK21rSYmgF4XO9+OW+oD9HGccw2VWYLzCaPIwLfEQPDLjJA5YiQl4mSvuwcdD4Lzl/banRND8gf7pu3w8BGc9TbPIGhDRmTK7B0RgG1C91Kz7gAiGqNb5vS4gIlvQeboRExA2NcVxLQERDE3o+R4QMQyDxhsxQSMwjwprcXYFNlPkClsiImiewNiJgMBFRFCRTcodWkIimBLxiNXxqRI0vzKi+NhCIqjE98lq4e0KjbqXApm2VIkOwF5udoVm5Ln9lirBayzPaG5vV6DWP+RCWFIlGHIZcrvZFUhBIAfOQlhgweWy5G2ZEpXn425WMHNMVJj0EiuBw4ypBrtZgcPDcG6ZCVymRKK202bsg8uUwAgy31UMBy5WwswN9R4qgQNvRm6shAUFs6JU/TVUohESWe99osTJ+0XYZDEr0E17FlktFsICqN5JeQ9rpEQ+Z0CEC5Ro1OZ7fmFUoHFPQ+MDJZIFXCjSYA2UwCdFRbv4QAncF+nBwuAjJZhc3qfX36dJWI59yHuaBAlDH27UJVKCpudc0h4pYdE3wAi3SIlBUotpi/GREkpeD3usBI0ruP/LblSovPyGfHA+VoK6QJ0cG86ocBotTJUBbo2VIK1SuKVJEBE1hc0uwRKDhoFY7sESZ5lz7nkMunDbLUvCEMhMF/fREjjgGCxhwMdHS/AWxF0jgoPLpiDahgmInE3B4grSebMpcPChgwodO6OCfS1hwbEaFYiU05AHa0mToMqrwK0lWqLZdq67TYHdxM4W7HQ2BUZRhKbc5CVLggcuziERFrhwCXq8TrmxfbhEZ2ySguOWLIlul77oIrxNgXV3cLJK7rIkEvOwJt/CmiVxMrtkYzLI5mqfOSHepmB4K8ji4mwKiYEIY6Y3rGkSDAMuet7FUVhcW2y7UYEq0SA30fHtzmUQGWkt+cJlwMitcw+kSKRq7OL2WAIpAoP4UxE5gTMqmPtmLjafKEG2i6a4osWo0HgHvUiUYGBb2U0KpjdBPb3FUTAvqc9RWEwKZD6oN5NCNRKZc4+jqEyHmka2NUsCh6NCHJcsiWBUz2VLk2DrvSgAZ8mTYJpR0SG7xFHQfp1mYITPk4gGGZVX4U0KFsKb5bZfMyUGPiEqwMKZFHh+cm6PLZCimvIVZApwgRTBPM9xNymgHcYbmWl1MSlgNrlkZZpwJgVoDkmkwYtFAYPMeH3FRTiTgmF4RbQvJgVcCzXKuLfEUTCx/ZyWDxdHQRCXFTC/pEoQ5IdpoPEmBRw7PNUkv0wK2ZQmOTkWk4JltYTT50Xw4x7JHHfRX29SOB/Ml28WEGfpEQl/MSMqsC8/JjWoPNEIfL5766w/wsvCIDOB+i3UgXFWoenO8ZkSfB4niKE8T2pQqelOsgAXvBDMTqP4Px+kwKJUeF95BZ7U4LSIzPAiumDwclNSxEJeQEZHhfgvzIIYYOlmC+C3JdRnEsUC+OmHn1EHK9cBDiNxMmyAPwYFAHrED0UtNmmWG9cB9FydVgviJzonzju+3RkKGVASblSEGBBcXEp/WJgIC9P+bmkRpGMCnrev8tDeImpeUB1Yfn56kRZBgHLjIcSFgy0ourQV2KPpcxIgXMCebAGDuPFYgT2ah7Z8CtJ6YE/U2MeN6KArP/lGUGgZqeHGc9CUNabHXVpENf4DuY493q8c1nQqjODC+/QOtdhvVAdG5tFFSefxPq+kOHNGVqoDKCdB3fFUB8wMxcVg3XF4H+3gPaWTLVQHlbAl1lueAz2s5Sw7ru/8EsO8W56DeYjPid8vXE9+xR572nE9VepArsBjxfW0S2FDCgE7XG/RF3VSQTgKBALLoaidBdd3Y59MN1zfGOo84wscrudNClypaA1PgWDx3mnKLwoEs6qEcMt0wCIBVlEQh8f1OATHUNjkgt95dreqWVypDsKYrssFvxtp8Mzr8Pg98CBr7ZbSwBMr66Je8HumJbiWPS6ASealK/F3we9Ef20m1a9UB0RPe1gAfxYKiEDhitMD0arwu8Pp1YztkxnB5TQYtaiAsYfjRusodsgFjp9mzEmC9RceN0etBmfD45hyMSx5PM5JwaxMd/5CIIgLWN6tDY9jNrWF1tQFILasBIsVkOPuTaKN8IicZCdD9K1L6gJAOO4byT0iZ5RoUIbSgsjtUA6aqxWRA2TI0bzlLmBqZQNfEDnN+WVO4pq7gFYmPcTKLIivyvVGXFDN3yOLgkPkxSorTMLBBZDjUJ+T7pMXimUF3XkLCq+d1jYvv8XoMqT/uAHyMbIi+jdmQXRLHoIFkONEh1qqDA7PLMgbNLaw8xZk+kZmbIdH5M3u+UkVuCDyXueO2PIXsCtCuyFybKYK1WpPYGDS8cCNIeTtEDk9pvPu84ic2JL9MRzjEXkko7VypnfiAsybLYaNuAA7WCRICyS3pOmH+99B8kEVqgpE+gQGbN08M2cXSN6olk0GgZW4ANNVX0ByrLk2+Q8cJMes1yYOt51bsD8c4isk5yU6ofoKyWtSztdKXJDo8L2RC/LeLHPUPCQn90cNN0hOpEFGaT3vIDn1KfkINkRemccmd/5GXNCkwnhEzlHA5Z1u7IKMxJ2kwFtqA26jaYDw1AXmLnikQjhEztuvKwJ4QeTE2GUGU6y5De0Up/nGXJCUub1B8s7QEV2uHpIPC8DMN3bBk+wQk6TQY2/eEjG3PYWBtnSsAYFRR1FAoDZZyhbsTXbuyW/noTeuMqynSV3goDcTzdpMw185CnC5F0Fm783nbTpZbzfoTXZYgUsPvWltmXQ4C/RmcFQOkxbQQW8GTpIJ+tigN6mpTpEsbjkMJ2HCDXszrAk7X257h727USbHWw5DMRoegWmPvSvzuGbQhHPnM2G1i8tupykgC/dOU2BJQzjW5P537vzBOz1PukCHvXk5jXT6hIWTYLSkl5K/PoPhWXLiVknApJnO5R8gKcCBT7/FSlJQjbxbaNGTFBDJBJ0bG0kBrg1FbGzeeSgsqb+gKUCDeXrbXcT/aQWhiyL+F5oC3EpZwesrTQFUS4U4bzQFdqdtrP5WNKBKP9uICoiOyg1788TpimJasLeFhLSJ1RemApoOwsozyD0OjbyFjWdwJhT0WRxg8bbznJYvf8XexMzi9Vv5B08Gzd+4CkjkEhUOuYByxvuMaQvwoDxbpJuw/QrKSz3jjO1fYv6xSBQ8taByhmG0olXi2Qqo2yfFdixsBZn9H3UP+h80Ls4Efu9uJ33ETBVfqwZAEWxt87bj7O/MiLx528nlNpSOs6DyQjZUcb9uqPykO+ZWNYDmn6GoIY/KA5sRB/iCynnT4Qq4oXKqeakpaN6zFVC9xVoT+l688AX6U7yh9WhAWfDVo3XmMoYZfO+984F31wy+9yiewQUz5GxB8WYqmV7y1Tvfa4s7WQFXL3QzhUysVQOA6aqCC1bnfMOg3WL+22lBWDJyeOc8XRRY7VvQf2Mc3YOzwYP4SuuVlNGNrSAmhiMdG4gnT1QPaXfOt2gUO9NpfznnuZfaNKF4EE+cB63vxmNIXgLx2S2++UDKl7nUVroCqKKzpILH9owyrKp5smB7xsOcovtbYv4J27My6TfffM9QlHbfPOkEO5bIzTePL+SfBdYdXwH7merOYkj2wRGkwS++eaMfjXcaA6qxtPQe3+40BrhrHuyGSzWBOGai/kpjkHCg1FsxAe6UKG72jcQQp/WshbDSGKTRtJS9LQCHMnSisUf8VwvyjtNG4HzzhTb+815MgB6NILy12AKqJaPJpuBsAZW+KiXBLLYATDPU27qH/DP0PgdBde+cZ7haEJ3dEvFPFH7OygzeFEBAiQlShoAzBQSmZ+jIX0wByigce5EBRuThmya3oTMFMIxlxCY6BGcKIBNaCG0vMsBKuS3GW5EB85K3W7x/o1YqEvaNwfBkWKJc8M4SEI3+fmcwxKBhJHWPLZYAYrwq0/sS708CgqmRLzQG5MsFZFIAv3PNc66aDL3eNU/a4Crv8GIJIBXAEOHMRmSAE23cLQHEhEklDDYmA6OE3ykMiW45rLtvnsQbOC+UBrAwGOKWL0p390wGvEuHapUshoBgudL5ZgigDlcUALEYAjA6zG+4+eatSJLiwzbfPIaujJshgBTBs6LV5pvHBRfqTmVQqG/JBe/tABh8clmJgmAJ92du6bi55nm6nA9iw4XKAKpU1eg41zyV0ckIuxUZIMAue5kByqHlhJtr/uQgn+qOtwNkhhW3dOM4oLYD1Vdyx3HQLVJzD/fPtiqmcWn1zDOZU2vE2wFYCiXPJAnvmWcKSRWl6mIH4DXf+o3CsNGFglNq98zTYx8nIc9iCCC+wAK7URiaUn4P92c5rjADI7xvvpPabdoBnGuewScpT5e9sw9ES4eWiWqlOKCte5IZXL75kyXPFMq3cBxAX2mT33ExEHD6z90zb/YyaGTywDvPPH1jbQbRe/MAA6ybMNBiHjDWwCx6fW8eIMsg85uPLdifGR5FRDQbxQGp4G4khqa7QnOQfA32B5Qat2B/jE4/Z9KANw+cJD2fXAPePJCZ4yVO4sU8QCK3WQXEmwe6nV7lBYshVk9XLYfVNY+dmqdffXHBYw5PWTGeIfyRfOcvJX+1GeCqJHCrPHmxFdCu3c87W8GYpPwbW0E5BTA2ugIMrNj1Nr4C6h2GBTe+gqy6ITtdAXRLA+IrXQE2tlLgV7oC8nG1F3wFEb8g1/7KVxAZ52TteL4C5lRlZRltfAU1n3KabXwFluSp5xfCAmiicmpthAX42OlM93USyB8ban1BWIBuaG/thAWRjR43wgLoySPu5o5AOBpjuhMWRCY1KCfAmTtomYBStpk7lEPQRttCDSz6H+Co7SEFRiSj1NslpID4aYx76AAZlFS8Z+cryLNo0JYsADX2BdNiNyaq+fxlvSCGo89MVANrtgBamVaKxXpxktVXwQMLYwFLld2rJxQeBsrr2aonpDyZlbbqCUzgyLv5gtcauYyURbDYL1ouJW9ki91K4YqXbKEsMOdeNq1ssV+QTjDGttsvOBGs4rqTLfI2ZWzeRrbIMPY0vVfefkFzCn7nTlqAA4WxyMoKWKoe4nqpu5mCeB5amHrvkwhMtZ9h455UkdAh9LFzE0CnSBjEtpsp2E6mHfbYzBSB/mJF0yzcBIywojHuWO0UvItxEyqIwnMTWBTuTL/3rIoEaEkUvgs3AaMBHrkdjpyAtvQ+R82TExDutHjuwQbWnRjTLYmALsuqALGFnIA9g96owgpPOwUVj1jPsdsp6E3H/87dTkEKdgxDuJEQBPoI46264WnF1lTPxRsk7OgLj3oLCwkBtl2SlcgZJMixhxbbHmzA301ZdB0bCQHvX4FfT0JApFLqPVmAtYLjzFPfSAjIRC1TwkJCgK0+Q7g9CQEZSLFd9mwBw+5h8td5EoJmpfqUjeBJCBpdGaHvJARGZYiOyFRxmSS4sDHPCn13JASVN4NqWi4kBKcFY+XdJEHPzai36ASST1VcKsoiuCwShL91BkF7EgJs6dTkn1lICHjsF13qCwkBB7nqUlxMErJmxZ2EgIpfKP1GrEgK7/zgRHAmiayaSHrekxBgvYSu8KqFhMCchKf6uZEQpAfjhSchoGaeBJ2WfAGcHlgR+i5PQlAYRSFDsTdK0HUbwkT7Pl/AiubWySrgSAisWMpmkqCCiM2nKAHPrIgnwjlm9cTLJEG6wTPEW3ACPhZKcS07BYGVqSPMORaTBH2KJfQbBQEDWbFv042CgBb9muR89xQE1MWSUtkWCgKaFXKf7TgKAm5onIi7SYJzPh6B755dkexYaaJuZ5PgsEGD6Tu7ItkbA1ozGO3ZFWl1j49gA8dBYJTrNUruOAjIA9dkFt84CIYVtz9WmwTbwTDPBADHQUDKqCwjoOcgMPYjhapuHATY0HXG+V9GCXPRsiTHsRol8Dy1H3HwOaNEZn0ZBQivFASkVZ5VEi6bBMePpg3ZKhwFQWWiz6yy5ykIiCpauHMQRCnsW3BCtsjWMatLeg4CXu9YwLd0AbOuy/y98C6SiSGqTsrCQcDqNap64EwS5nnoYxZKdKyLFml+N0kwYK83+Y+8SYJFAklMcGMgyFTRVJ51YSBganUXCZkzSRTLylTsljdJMJHtnNR83iZRWIC8KAJ9YSAg1d70JWwMBFhzbWy8i7St5yHz12KTSKTbL7PEoaMgaFSWRR+0WCXIK59fEC+ymAPu6j1f4DTzmvS+xSpBuvXJ77VYJZjkqgzgxShBkqZHJMbKQMCCa+XGQMDq9afUys0oUThSik1wRonEO6jvlRWMXJURxMeNgQCAKZc9ZMHqgLQ0qQY8A0E1DqtjYyCwy3QWYlwZCHAIysq10S5G0kLcaBezEagrYuSZG4CxnASTd9G0VjhTBPYOzRDHHmewGzS+m8YI8hhLYq3N31ieM9HtwXt7+6vXc+7lj9r76d+e/IRg1pTf4B8LqcBn4L/e3kSyR45q3jI4J2ZTVGO8iOOMjZmNaNnJOfp6sAPbEapPQXo88es3iYqVyYiPxiSi/65QvXOtF1trMg5ZN5zg167DTswdTq42+qO9nNLr4flTXhh8w+U5Eun6bC9+fqT7NTcWL8fy12///e3tZ28f1d9Ik4STfJxraItx12NhjzW05Q1LjnaM+QXUobP9EZMWXoh1erwQY2lwTYTHmsCKwJ/fvn+L+P+vAoQ0nD1ejGb3wR9//d3bz75+++kv0hHD8fU/ow383z+9/cPxk//nv4a/Of7L8fW/f/t3X7/98s0+9UUZ0OOHy4C6b2N1jb592JQtX/WUfeqTAutT/PD3xNffsxRH+UTZlOvTLNDluW3DC7H/wEX8mW+063Ou7x/4zPTRZ17UsccnqGPdZ9KW0m5f+ZQuH+mkn/rGRlarP/WJ+aNPvIhijk8QxbhPNF8GUPL2jZd4+Ugv/tRXQks89eLHn/n/frQBffLa8ecnr7mvtPz5/RsfwuULL+Gnvs9YDv/E1324Ha8Awdsp+gMBgu7zGJ8fR94X6iVePtGLP/WR0KeKXvyhz/xwO3oHyMffkoLZsrdPeUqXL3HST30I9dT6pxbjsud++reR9x81kID7L8yfoA4ihcdKtS36zlPyUNBSZeTaQ2RuIy/BPfvPzsX0fP2lhympN4+b+B8OZgkdQCToczj+6Qhv+xBLp0011KWzTrz0ZnF3/Zv3xfLiOwOTlr5c4i/YF1qGgnGEL325xF+wL0YBVMgFsfTlEn/BvoxiwWN1Wy+X+Mv1hRYnhh0T0Lq+OPFf2pdFq50Qifxjj/N499TeN/ttH6/QSwfS7xz8Ci/PDBMU+lxmKz/DyfWv/vxixsmRWDloHluBqigAMQ8yHFrXKfYT3DRf/+6NDDl0KJkeb+faT4L9RaTFGWAz2W8x5teOxdlGsyZOexJn3/eHJW0dPBr1p2j8KVYYKNPmPBW0Ay9/9fNvfver//THv//V7//w1Xe//f0f/3D8/F+OX+L8/LHmg87gsYykJJ+ekY8a+uE5iZyPw4yjblJGq+VHmZT8Z00KCZrV/v9Hk5JwQ6+nhiSfnpSPGvrhSUmh8ce+1KSk/z0mJZPXYD3KTfLpSfmooT8xKcRyX+74iv97HF/0faw3/esr/ocn5EUjPzwZZJP/N9kf1XLH8WlzNF/MRHjMxI83ilbRcdUMTPLpkfyooT9xMTN88N9maf8Z4xl//PHcAcx3rwDMn6XmfNDQD49nOQt/7Autz3SNJwYFPWHI6mCg19JxJ60XsEPnB6MPCusA+seddH2cIXmMUUpr8168vRBpTM30mC8vOPH+ApPfGGu2Pv+Ubo9zoLPZiZbnnXh/oVmdmpy2Fy7x9gId+i3Qd7TqV5d4e8HC+m9T4MXbC8zNu0+CF28v0I/3YhaceHuBwTAvZsGJ1xcsAO02C066P07yldssePH2An1z91nw4v2FYsSe2yx48fbCSYbm2yx48fYC05bus+DF2wuVXvbbLHjx9kJjvNFtFrx4e6HTY3CbhUu6Pc5Aixez4MT7C/Su3GfBifcXBstN32bBidcXGO983mfBi7cXWAj0PgtevL1Aj/J9Frx4e4E5PfdZ8OL9BdJE77PgpNvjJPS9z4IX7y/QPX6bBS/eXmCZqfssePH6Al1q8T4LXry9YLXkbrPgxdsLjOu6z4IXby8YLcBtFrx4e4HZhrdZcNL9cRLD32bBi7cXarL6H9ssePH+QjXqw20WvHh7gW7LF7PgxOsLzCev91nw4u0FBtrcZ8GL9xcYlHabBS/eXsi8k/ZZcNLtccvKuM2CF+8v0C94mwUv3l6wkKnbLHjxdhXuwA5vHcx8cf7VB/CKD9xlf2AF0DSxVvRY6z/8t29/+/0fv/nqX7775je/+rExlwIPOjMEm9VImHEHT8knTHi+GUYArK3cxypazAMLIrCeGkMH/4+BYpkXXpxnZSGrx7xckk/Mi2/G5mVp5T4vje8Esm3Wki3c6P8XwNjapJ6dsCjDhb+c6BODujRko7q283pYDRecjJll8vSXBXQ/7rhaul9gmYjnuF6iz4yrb0jjurTzwbiyPiIupc6U9PMLGB7OLzSuxDwsNJCvM8CJPjGuS0M2rms7r8eVEK2TuI3Rv+kLrNf6pcaV8cQjM3PgOa6X6DPj6hvSuC7tfDCuTCIi33+tIX2J87Vf4/r9G7vxFTvEmGZdlpHUB21afx+dcVsnPrryC2sIMLkwiZ+/E7bO/uNPHpcxKRaGtaHe/uPfLJev04cYmK+1mMrzh39M1eges3ejo/ogZu9KUSXBTcjMg6eN61lEKjFVE9isK130WSyK8toeFM5X/iflzK0Qb9OVt8m8NCZgiMjoopeiPDIifMvDTExrH4Akop165lsmptowX2njcGY+XGUZI3v+SqxMyp6YRa2uxErKw4giwHc8Uhzm0Gex0yvhMiVmwFQRNLiES2btlVgVmet4pJjlx4STsFVtopNrnLPSjcvETNGoEU/Vvb4yMVM8mUwZlGZ7ZWLSGMSkkLSRO1tSI/M/t0zMFMiZWGf66pWJmQLzj8Rp6BIxKWZlGdFmXYmYyUITo0qmu0RM/ixZpOpWtimxVFdKj8TNZyIm5dCRk0rmXImYKViqUz3XREy6/XpJ6r1LxGQ3yzkp510iJnvMdVq34tE2IJghMT1diZhxGMvWrEb1TMTkh+AoevBOPRMxOZiRfDRbIiafJ8dZ2hIxKWdR6Zmg+SSSohxDL9ZUl6HJ9nkiKVfvytDkMDCDT5RIV4amTW7rk9zrytDk8JzlTHkr82TDlnvaq0ezP2R0KhuTVGSWRx9zFq8MTVswMZSteDTmzFLj4pagGcmDVXAa2udeCZq0tLLkYFvZoNl6qVWlKFyCJntz4rNU6ftK0LRJxOE3tgRNNl9Ga1uVaKwTZjqcdUvEpKG4FGYIHUsiJuWs/VC2ak78qvBgmnQJmpE0W4/yRi5Bk4cE2leGgEvQ5PMZ36Z80StBk4eHVd/b2KBjaxiGyfrsEjR5qOTSlZzsEjRx5DDZWBkLLkEzKslGHI4uQTMyf4b6/0YZFRu5I3udZZieCZr8LpxArW/lnNhPlh2OW5VottPC6LP80zNBk+N54sJRoeIrQTNaRbc6iZ+vBE0eljjFZ6rklaDJaWcvVUbqmaBpexo3Rtn4oyknKUrdEjQxdKzkPvmJrkzM2FgdR8VxrkRM3GPGNqBSWlciJp+O56yHdOVh8nF8UBG715WHyTknBUHYqKFM3lld6ljyMHmgp/ZIEbzyMDmWGP+qJNgrDzPKDD+TYK88THYTQlUydHmY7CdLcqnA0ZWHyTmv2Fpho4ZKgRamWe3U5WGy/zgGk+jGrjxMrgXsLVHeuDxMLBumOJ0bS3RkDQDWdlVx50ciJq9lFvlVb65EzFipnWRlLLpETFtpccxeXomYvPWhAsyVfCVisn2WkRxrLWieO7xZ1fkrEZODzDIpbavbxIMEd42KZrlETG5EZkyJ6PdKxIzkesDN0LZETA7+iaNA9XavRExuFBwFs8DRlYhJecA3lC0R0w7CFs69bhMPgMb8P5E9PRMxudiwfsUr4hIxeeyX1NNeuImTG3oqav9KxOSiwiaLM7HymYjJAwM/VFWn+ErE1DhgD4k06pGIac2fvC6PJRGTa621JJIZl4jJbtoEbYmYsRrPaT23RMxotRUxOWsmpi2GOovTu0xMejIr2sobOxQXVWaGs2XuXJmYXJxoUPStLhOTchxkQaRXVyZmZAoyrgDN4pWJGY0/IM203ysTk8NAsfp5ZWKyfaxOpYa7TMxItSVOcjuXixktQw8bbSvcREqYRE7KrRp0ZDRXDzea6Bi75febydnlYhoTDStaKHfzmYtpxDVMH1xLN+E8JFNMaRtPNMA9b2PxrrhczMi8SXyuElivXEzKe39Qs1+5mJHpl7heypqLGaPVUBqqEf1MxYzUYJmDaFl8VyomS7SOWdrAZWJSncoib7rSMK1ExymWMJeFOUhxKkpBl4PJNW8m/GNJwST1Fg6ZLD6nZwomzzncxX2jhWoMw5jMmC4Bk2c0ifE2zmhyLZZ87pTRzThJRQjp0i+7jbwuHpd9yUWNg2Or/kwiEeEFn3ppESmlTpKoZ+ZlYXWrJLXKJV4SIUInF0P1lXdZeapDc7mqMWFL4njo9ZXgL40ufpVM9vbDyWQTdJN1qZFjknEouJSLlBRmhQLY2gV3EUAlBm5gs4uj6aKGphwnk8bVcTQly0XvYrBznEvJuJtaFlZ2GJ2HfECfRQH95FAiaO0xqbavg+iRXt4sFk9HlUQ5Wu1JkP6C7tGOoiCEfiF3iFOdJX8d4mYuCM6etiNrUxWBjSVfkHXFwZc3jiPKU54k4guyRu+x0IoYnR2yblZ1+tw4jhhNQU6stpVNIkIPVcnfHlhH0wR163lkHY0S69zrJhH5jpDCVg+Z2BhzFovkF7AmIg61h43JyKAmNGMhXAegSbgoGoAFPwfW7w2ncPUTP5ucCWYiPnriZ1OeccvEjYiZyJ7cJkN1jy/8bAnwddzws3Gw7NWQ2d2MM0hw1cFnMooPcRIs6JmYigwbx4qe6Tirk4Dco+doQQxZnXfo2Txl56R5duiZGCYTeh0reray5ElKr0fPtD8CeW21lNhNVkApG3i2ma2zooFHz4P17+KoW41kqZlNOrtDzxzMhg+vK70RxWcPqkPn0DN/djBhViD8iZ75fGKNFWvGo2cSDacH7dGT3shA+2gqBO5QdTdyucnI5VF1Z7xWF3eVQ9VkGuNCFq+yQ9XYDtDh80Z7ZKiXh8VGe0R17CwPW4RH1WifMU07qiZKxtqpO6pmRW6W0dTzF6oe9L4klbHwqHrYlTeZaDyqbkbgIzJdj6pZx0LlKjyoZllMVjc3pLOCakzc5Aj2oBqHPA5bVS/yoJqGL0DUHVSzsHceqgW3gWouu/MGqllWvdc7qM4MTpjlghyoNjOfIMECqoOVKxZdtAPVXA3QQoXULtoj09mr7rcNa2PGR9nBNqv39raVZDIcBYVaxDgr2I6sbLqRHtkdgkNVZD8ObHOVYmf3jYfZVj403rLxMBNOdpLji9zoAtvUsx5WxAVs8xxmmbVjBdvclCG+gNp0G4pi+4LaPC5woMznPdRm1VDivWOD2uTGJqPVsUFtmsCLuD091h4klwMIsK9yWJtxNjj5blh7kLxWxQUXrI3Jhza38zCzHZzpquq5YO1ImtchC4XD2iwgTc7fY8PaPF7mWC5Y2/TXVG5Ym9abNovkeKxNlrFZ8thDbR6rQ6fXBrVx8E4s6aE2vQJFN9wCtYvZUYROVqhNts2+cR6xOwEjIkphD7WtAEoRp5KH2sWu5PICamPFS8n1UJvqUNGO2JA2UPQZVsojs/a0FMS05JH2aaxebUfarFERkiyXG9LGShUl3IK0m1UFnXWdLqRt9g9BjAVps2onQJDkF9KuRHeTuW5B2ixqOFTZbUHatDNnkV16pM2C09heMix4pG3FdibE9Egbn1VmcYwFaRMn0v12bEibzouu6uAL0mbZvpTn8w5pE5mfPW+sR0TO9EzKHrMibYBPWe0XpE1CniFgtSDtzIqbceVhZvQ6K8HGjYc5UrfDd4yN9Mii3QPL/x0b0I4quy3A7oA2w5XSo+rxE2hTv+1n2ziPCPszLqCwcR4NqxXYq8QX0GaNqaxaMR5qR7KMt1k4+YLaXFpDJKAea5Oessrg4kC11bUKud5BNT1V4nByoLpyjsa5kRpV5us/yic9MTXrSdPlv1VApv0Ol2PZMTXrIlPbOVZQzZoGRUUqHaiOViz9BahmVT99ugPVLHQQ64MWZ2JqlrNsqUl8URmx3joOchEuCVljVFgG9bXkrwPbns/k7RNMJ484B5I62I313RvNI2TTbiaGHtNsrp0P3IoqzhLzHnfj7KpYV2LhfVIpJyuoTaX5WOE4y+KRYV2u8QuOk39+0Ph1rHCcNQ0w/mWjNCZ2GbgNRKV8URonHL3URPS8w+NYFND9RCF6URRDC6V6OF3CDo9jaWH1ZVkZnCedBFzQmOvuSc/kLawqx+c96dQDA7ogl/kT17OoFy5HjY73pDfWVBPv6uJJN9/GCHre4f1ugfh2fC54n7t7lqXxeN+cpzgQhesvvE8wCqARt4pMbIdmBvFke7zPOndVaucC+ElthzG8AX48L7ujh/us6jdaFf5weJ+tkL9CuN450vO71UI0/OQd6fR5VNGxejsAoX+YlSC8HYDs1tBd5DB/GgJ442Njqq73YghIVohuIzSmEQNPqUK1twNE0ohEVWTwdgAqz9PG5uwAUQrcqXLF3o9OtSqoZutiCMCGoO4qf7mzBARWn9GxsvjRMch1qkObJYDVRMvNj472T3JPHpsfnUvklLq1WQISXSFq52kJ4HdhTqeBw5sCEuuAintu8aMHU8PyVlaZ6h/1CdU39o502tBP+TC9I53ln3G+9LUiE5vJZGSW5WA1BeCUklXImwJoEIlJ1MLeFGCEg31WXnKmAGq7XZS93hRAZssoKLA52LFEZniAd7CzFG0WvermYD+xerTEvSnASuDOcljOFMDkk0hT3bGZAhjZEwTVF1NAJPaeZOHewU5H9CnHsjcF0CHUZjTE4mDP5gCfZZidKQB7KE/75mIK0MV93mwBDCKLKpS12AJMyQkCzc4WUK0/fdoIFlsAiwjM2k6LLQDHsmjEF1sAy6aMIaezswUQJLJo0saATJsF3WsKKHjaAszvDjBdtqJMtnqwq1XQx2P+yBqY57QdXKCfajPrlW6gnxfMmG49j/qpxWM42o766XJoYRZu9q70k/axkXd0b9AK19OO7ukWsSpxx82VjnNz1N2VbqhCXsMF3NNIADXuBu95iDYVj1ng/WllymQS8fAeF9JZyt2TTg06qvzCAu+zGZLqxmjMSWSQ3cTrT3jPNVWDMMgC71mRJM+CXg7emxO2xslRfMH7armvKn3u4T1Lk7NC11pmydZIe/BGe3gf+IGyvS/wPhlEF2Zx8L4Ws/mLo9jDe6r4dUI9h+8xWThiVHfA43uazfqjwpDD9xjYwIp4wvEXvqcZ4pSG7uG9edqo4B4rvLeQoiL27wXekxR0un4duq8sH4NbequyRDxNU2C8OdJZF7Dnrdoyz9kE/CjkdqH7akTtiq/x6N6I4QBs5f92fvRTppKt2jLniudk3dG9XTB5UhFf6F4Vv8e5+9Ghp9KQpBrbHt0nIsAu04pD96QiZ/Cddd+he1yb1I/3csssHVIZ8KOySRe6Z89YJ31H9wT0OOjLxmhs+jRQT9v96Dwon1EPHt2LPVePX+DeyqO0bIbbBdwnlguY1aI9uCdhMi7FjdKY/m8ccOncKI3poe6YUS3BJ7rHFsN4dPXGg3vuq1kjxoF7QiLGom5OdKtR0nQRO2jP90LrVTzEF7IPLOx2Tl/5E9oP3mJVdgOH7NFV7GipcB7Zm5r8KKj8RPbNdDxZ6R2yZ13R0nQ3eGTPYUu6wJwXvTIYaUZ8ecCPwzGPtPMYM5QqhTFrMV2An0z3UxXzgJ9leKT6eMBPK/yp8ikO8PNr6HHcqi5XLqYkx5ED/LQanEEW1gvw012uJbMCfpYGST1tJZWgk0IXGGnzohNLQlveyYsL8QPd3ccT3zP4Jcx62TfJX4v4L9LPt0+Qfj7C2xl4jXuxMbz9cqlT4QDSEJa+iiRRXsr0x3oMn00L1xnsMTwr7DE9cCtLRHkos5jbEvbOexeYWWWDXNg7V9CpeoXed07w3ZKCwxawzmCvEOXi92CdxeUeFXw8WGd1gDzj1T1YjzQ7pLY54RPLJ0bVVNnAOi2OQ6DcgfVC08Ss5uTAemJm5Cyq5LB6YuHvofqAi2++sQrrrHXtffOsUdfaXn/IXLIstyonvIt6Z6xqnrYAH/XOEgynIo4353yl2r7VHzKbwphx3RtYx5HZtvJDlLMgTNrKDxng7kVBSwtYz1a2Im1gnUHykUjg2Lz2haGqs2COj3pnKc024auLeoeeFh/a0OK1J0tHVxVGj9YZphEVw7p47a2gTRs3tM4k4qlCLlHvBMpZITkerVO/6rb7bn57KBYy4m5oPeB4Fih3bvvIwjgP8O3c9pH52VGRET7onbUo01aUiFJ8XlRovofqrFbIim3H5rVnbekWpjffxbwP4qiqOA0P1Ycpn8cW8Y7dTzOsteJ89qyLF6QtL0Cd9S9nISeP01m+ACrZVjmZKxS/kPaKRFwfoyhozMfBGxKOKu/kYPrgsVrk+Fs89vhVXs47TKfWzzgKefIvmG6+raLEvMVjT3tfVwG2BaazQBKe2AoVGUyHgqyABg/TrUKaonKXOPjEK+4cN489k9Vxfxkk8TDdHKMyby4wvVs0sMrcrnHwUNL6XqiI7eDslGVvg+kc8LqVTraQcRai3AoV2byUUw6GBaZzm0BvVwEjB9O7QhMldzCdSiDVj2OF6dRDw8TRDqZzRlnyzIbNuezpwWCciWokO/hOT2qagNbDd6unIO/ZGiBfoPnXrVIRYTrDSGWU8PCdMWZVNg/vs2eh2zGTATyqL1ycSTYJj+oN5tSbb55Bhiw9Zu143zwNmXUWAPLwnbU1MLDy2Tv4nhiLZFIH3k3PDlK6F/COX+2yoy3YnQU3YrhBd8Yt1bPcPPNUpKvInj10t2JzUg8X6H6aUTJu5YjMDIVTRp3fouDHowS4h+7UjGYejIfunTH5SUWxV898GSzYftyi4FkIXaDBQ3cjWx/yZq5R8NjNgmveM88g9dhnxePFM98ZrSyE7jzzRIAMSjs2z/zJMIo0dujOgy/MejirYx7noVTfLQYe3cpZDnvnmK+sia1gw80xD8A1Aws8dO9Myqntht0tva/N2Hjvmcde08d6xzwviCanwRYCD6ig8JsFuidl6+3QvduqSO1FrDuOqrRXQrYVi23d9lj3QkUkKI5nweich6IgEI/RWS/EqqYcG0bHqsNspK0UciThzYmhtd91GJ11d6kovsDoLJYpe43D6JHJkkUazQLSGeHHmKBjBelU5Vg27eaBZ85rViFn74CnofVUjOaC0YclPmjSL4xuKPBMt0h3FqabTskVo8dHrp7H6BgClreRG//C6KyYBOVMEeoXRs8GWAW6nfc9ESNPF6/zvrNaaC5TfGF0Fuw5FYHoMTpUDNzHTdD9wuiNODr0HaOzhkJQzuAa6Z6wsKPg9YXROy1kY8auX0554rFzFHnfL4yOZYRuB0H3C6NbJdyucHQH0hu1Kml4HqTThgfotNU+puETgxa2MkNMaKosFnUsXnlGjlAJO24gPTe5f9ZQ9xz62EsMQRntUTHdHqNXS4s+nQ+eqtCQ2/cu+Wx1oT/Fl/3nEk7+GVT7j6fcqx+19icqC3VLqiimh3OPtauwkBMthYWcXBWCDB6mGp6FhRibNp94FBbCpLuyABJR+Qh7YSFK54PqhhP8+uqvk/KEoENlMPrAyXn8PJ+dP3TJrv78+u0pdR3/1kuf3+d+yQ3Dq1H8UUoKEf+r99xTs6IQmcF2KU+fV9I/o4BEfIwwoaGnu3pVQOI//+f/Gj6o+PG5gkLPL8sWa7J81hT5b3qKPvNB2Upo/vDXxA8Le/yF5YSeH5bStVWvb7uk/vO89DNfyEQRT/bxwUemDyvt/IXFhJ4faSXX9298Cv0nOuFnvpDxEH/6A/NSY+eXb/8Lcli46gplbmRzdHJlYW0KZW5kb2JqCjEyIDAgb2JqCjIwMDkyCmVuZG9iagoxMCAwIG9iagpbIF0KZW5kb2JqCjE3IDAgb2JqCjw8IC9MZW5ndGggODMgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicPc2xDcAwCATAnil+hIDBwD5RlMLZvw2xRBr+hNBjbjggXsPC4ZI4mXjm5kO9XGTOmDpLYr+OhA4uaUYrBEOjxDla8n2pe9/R9Ytuul5hXRlECmVuZHN0cmVhbQplbmRvYmoKMTggMCBvYmoKPDwgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0Zvcm0gL0JCb3ggWyAtMTAxNiAtMzUxIDE2NjAgMTA2OCBdCi9MZW5ndGggMTgzIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nDVQOw5DMQjbOYUvUCn8yXmeVHVo77+W8NohwokxsSFhw4MVH8oaoAuliIJk4KISqAtYHGYK3gG3bEK2DnqT/Lmy7mVwrhZr97C1UvuEIQSiecpFuuaubmDb0EpoD7nIWnrQm0xvznwhGM51S32vA8JWT26fY/T8FeOUEZnjJhrfTtPq5zQ74+GyfFJl8i9m9qw6Y3OW4CxT25HovZZeirZq8yTqDL7nYa3h/3u86EXPL2UCP5AKZW5kc3RyZWFtCmVuZG9iagoxNSAwIG9iago8PCAvVHlwZSAvRm9udCAvQmFzZUZvbnQgL0dDV1hEVitEZWphVnVTYW5zLU9ibGlxdWUgL0ZpcnN0Q2hhciAwCi9MYXN0Q2hhciAyNTUgL0ZvbnREZXNjcmlwdG9yIDE0IDAgUiAvU3VidHlwZSAvVHlwZTMKL05hbWUgL0dDV1hEVitEZWphVnVTYW5zLU9ibGlxdWUgL0ZvbnRCQm94IFsgLTEwMTYgLTM1MSAxNjYwIDEwNjggXQovRm9udE1hdHJpeCBbIDAuMDAxIDAgMCAwLjAwMSAwIDAgXSAvQ2hhclByb2NzIDE2IDAgUgovRW5jb2RpbmcgPDwgL1R5cGUgL0VuY29kaW5nIC9EaWZmZXJlbmNlcyBbIDcwIC9GIF0gPj4gL1dpZHRocyAxMyAwIFIgPj4KZW5kb2JqCjE0IDAgb2JqCjw8IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvRm9udE5hbWUgL0dDV1hEVitEZWphVnVTYW5zLU9ibGlxdWUgL0ZsYWdzIDk2Ci9Gb250QkJveCBbIC0xMDE2IC0zNTEgMTY2MCAxMDY4IF0gL0FzY2VudCA5MjkgL0Rlc2NlbnQgLTIzNiAvQ2FwSGVpZ2h0IDAKL1hIZWlnaHQgMCAvSXRhbGljQW5nbGUgMCAvU3RlbVYgMCAvTWF4V2lkdGggMTM1MCA+PgplbmRvYmoKMTMgMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM1MCA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDI4IDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxNyA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjE3IDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDgKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMg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TVFRRFYrRGVqYVZ1U2FucyAvRmlyc3RDaGFyIDAgL0xhc3RDaGFyIDI1NQovRm9udERlc2NyaXB0b3IgMjAgMCBSIC9TdWJ0eXBlIC9UeXBlMyAvTmFtZSAvQk1RUURWK0RlamFWdVNhbnMKL0ZvbnRCQm94IFsgLTEwMjEgLTQ2MyAxNzk0IDEyMzMgXSAvRm9udE1hdHJpeCBbIDAuMDAxIDAgMCAwLjAwMSAwIDAgXQovQ2hhclByb2NzIDIyIDAgUgovRW5jb2RpbmcgPDwgL1R5cGUgL0VuY29kaW5nCi9EaWZmZXJlbmNlcyBbIDQwIC9wYXJlbmxlZnQgL3BhcmVucmlnaHQgNDggL3plcm8gL29uZSAvdHdvIC90aHJlZSAvZm91ciA1NCAvc2l4IDU2Ci9laWdodCA4OCAvWCAvWSAvWiA5NSAvdW5kZXJzY29yZSBdCj4+Ci9XaWR0aHMgMTkgMCBSID4+CmVuZG9iagoyMCAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnROYW1lIC9CTVFRRFYrRGVqYVZ1U2FucyAvRmxhZ3MgMzIKL0ZvbnRCQm94IFsgLTEwMjEgLTQ2MyAxNzk0IDEyMzMgXSAvQXNjZW50IDkyOSAvRGVzY2VudCAtMjM2IC9DYXBIZWlnaHQgMAovWEhlaWdodCAwIC9JdGFsaWNBbmdsZSAwIC9TdGVtViAwIC9NYXhXaWR0aCAxMzQyID4+CmVuZG9iagoxOSAwIG9iagpbIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwCjYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAzOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3MCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1IDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUwMCA1MDAgNjEzIDYzNSA1NTAgNjM1IDYxNSAzNTIgNjM1IDYzNCAyNzggMjc4IDU3OSAyNzggOTc0IDYzNCA2MTIKNjM1IDYzNSA0MTEgNTIxIDM5MiA2MzQgNTkyIDgxOCA1OTIgNTkyIDUyNSA2MzYgMzM3IDYzNiA4MzggNjAwIDYzNiA2MDAgMzE4CjM1MiA1MTggMTAwMCA1MDAgNTAwIDUwMCAxMzQyIDYzNSA0MDAgMTA3MCA2MDAgNjg1IDYwMCA2MDAgMzE4IDMxOCA1MTggNTE4CjU5MCA1MDAgMTAwMCA1MDAgMTAwMCA1MjEgNDAwIDEwMjMgNjAwIDUyNSA2MTEgMzE4IDQwMSA2MzYgNjM2IDYzNiA2MzYgMzM3CjUwMCA1MDAgMTAwMCA0NzEgNjEyIDgzOCAzNjEgMTAwMCA1MDAgNTAwIDgzOCA0MDEgNDAxIDUwMCA2MzYgNjM2IDMxOCA1MDAKNDAxIDQ3MSA2MTIgOTY5IDk2OSA5NjkgNTMxIDY4NCA2ODQgNjg0IDY4NCA2ODQgNjg0IDk3NCA2OTggNjMyIDYzMiA2MzIgNjMyCjI5NSAyOTUgMjk1IDI5NSA3NzUgNzQ4IDc4NyA3ODcgNzg3IDc4NyA3ODcgODM4IDc4NyA3MzIgNzMyIDczMiA3MzIgNjExIDYwNQo2MzAgNjEzIDYxMyA2MTMgNjEzIDYxMyA2MTMgOTgyIDU1MCA2MTUgNjE1IDYxNSA2MTUgMjc4IDI3OCAyNzggMjc4IDYxMiA2MzQKNjEyIDYxMiA2MTIgNjEyIDYxMiA4MzggNjEyIDYzNCA2MzQgNjM0IDYzNCA1OTIgNjM1IDU5MiBdCmVuZG9iagoyMiAwIG9iago8PCAvWCAyMyAwIFIgL1kgMjQgMCBSIC9aIDI1IDAgUiAvZWlnaHQgMjYgMCBSIC9mb3VyIDI3IDAgUiAvb25lIDI5IDAgUgovcGFyZW5sZWZ0IDMwIDAgUiAvcGFyZW5yaWdodCAzMSAwIFIgL3NpeCAzMiAwIFIgL3RocmVlIDMzIDAgUiAvdHdvIDM0IDAgUgovdW5kZXJzY29yZSAzNSAwIFIgL3plcm8gMzYgMCBSID4+CmVuZG9iagozIDAgb2JqCjw8IC9GMSAxNSAwIFIgL0YyIDIxIDAgUiA+PgplbmRvYmoKNCAwIG9iago8PCAvQTEgPDwgL1R5cGUgL0V4dEdTdGF0ZSAvQ0EgMCAvY2EgMSA+PgovQTIgPDwgL1R5cGUgL0V4dEdTdGF0ZSAvQ0EgMC4zIC9jYSAxID4+Ci9BMyA8PCAvVHlwZSAvRXh0R1N0YXRlIC9DQSAxIC9jYSAxID4+Ci9BNCA8PCAvVHlwZSAvRXh0R1N0YXRlIC9DQSAwLjggL2NhIDAuOCA+PiA+PgplbmRvYmoKNSAwIG9iago8PCA+PgplbmRvYmoKNiAwIG9iago8PCA+PgplbmRvYmoKNyAwIG9iago8PCAvRjEtRGVqYVZ1U2Fucy1PYmxpcXVlLW9tZWdhIDE4IDAgUiAvRjItRGVqYVZ1U2Fucy1taW51cyAyOCAwIFIgPj4KZW5kb2JqCjIgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzIC9LaWRzIFsgMTEgMCBSIF0gL0NvdW50IDEgPj4KZW5kb2JqCjM3IDAgb2JqCjw8IC9DcmVhdG9yIChNYXRwbG90bGliIHYzLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZykKL1Byb2R1Y2VyIChNYXRwbG90bGliIHBkZiBiYWNrZW5kIHYzLjguNCkKL0NyZWF0aW9uRGF0ZSAoRDoyMDI0MDUxNDEyMDAxNSswMicwMCcpID4+CmVuZG9iagp4cmVmCjAgMzgKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE2IDAwMDAwIG4gCjAwMDAwMjgyODUgMDAwMDAgbiAKMDAwMDAyNzkzMiAwMDAwMCBuIAowMDAwMDI3OTc1IDAwMDAwIG4gCjAwMDAwMjgxNTggMDAwMDAgbiAKMDAwMDAyODE3OSAwMDAwMCBuIAowMDAwMDI4MjAwIDAwMDAwIG4gCjAwMDAwMDAwNjUgMDAwMDAgbiAKMDAwMDAwMDMzOSAwMDAwMCBuIAowMDAwMDIwNTI4IDAwMDAwIG4gCjAwMDAwMDAyMDggMDAwMDAgbiAKMDAwMDAyMDUwNiAwMDAwMCBuIAowMDAwMDIxNTY0IDAwMDAwIG4gCjAwMDAwMjEzNDkgMDAwMDAgbiAKMDAwMDAyMTAyMCAwMDAwMCBuIAowMDAwMDIyNjE3IDAwMDAwIG4gCjAwMDAwMjA1NDggMDAwMDAgbiAKMDAwMDAyMDcwMyAwMDAwMCBuIAowMDAwMDI2NjgxIDAwMDAwIG4gCjAwMDAwMjY0NzQgMDAwMDAgbiAKMDAwMDAyNjA2NCAwMDAwMCBuIAowMDAwMDI3NzM0IDAwMDAwIG4gCjAwMDAwMjI2NDkgMDAwMDAgbiAKMDAwMDAyMjgxMSAwMDAwMCBuIAowMDAwMDIyOTYyIDAwMDAwIG4gCjAwMDAwMjMxMTIgMDAwMDAgbiAKMDAwMDAyMzU4MCAwMDAwMCBuIAowMDAwMDIzNzQ2IDAwMDAwIG4gCjAwMDAwMjM5MTggMDAwMDAgbiAKMDAwMDAyNDA3MyAwMDAwMCBuIAowMDAwMDI0Mjk2IDAwMDAwIG4gCjAwMDAwMjQ1MjAgMDAwMDAgbiAKMDAwMDAyNDkxMyAwMDAwMCBuIAowMDAwMDI1MzI2IDAwMDAwIG4gCjAwMDAwMjU2NTAgMDAwMDAgbiAKMDAwMDAyNTc3NiAwMDAwMCBuIAowMDAwMDI4MzQ1IDAwMDAwIG4gCnRyYWlsZXIKPDwgL1NpemUgMzggL1Jvb3QgMSAwIFIgL0luZm8gMzcgMCBSID4+CnN0YXJ0eHJlZgoyODUwMgolJUVPRgo=", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-14T12:00:14.506735\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.8.4, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" ], "text/plain": [ - "" + "
" ] }, "metadata": {}, @@ -5806,13 +18740,13 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2da5c19ed62e4d82a2ca209b47d3d159", + "model_id": "bb32daeaee894a4ab9e7b42112ba7734", "version_major": 2, "version_minor": 0 }, @@ -5855,13 +18789,13 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "82946f5614d241af9a3f5f0009667f36", + "model_id": "3103e69e94e149b5825f2440f2b247d5", "version_major": 2, "version_minor": 0 }, @@ -5911,13 +18845,13 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d8c0b3b9c5964ea4b06f26485eb0ea74", + "model_id": "72873ec3225f4df783a40921e13271fd", "version_major": 2, "version_minor": 0 }, @@ -5931,7 +18865,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "39258bd57c8949bc8998e4f7c6dc4baa", + "model_id": "12132cdf1e9f4782946f13c79223aff5", "version_major": 2, "version_minor": 0 }, @@ -5947,8 +18881,8 @@ "output_type": "stream", "text": [ "Correct action:\n", - " (True, -1.6689710972200318) \n", - " (True, -1.6689710972200302)\n" + " (True, -1.6689710972194927) \n", + " (True, -1.6689710972194902)\n" ] } ], @@ -5997,7 +18931,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -6047,981 +18981,2812 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "metadata": {}, "outputs": [ { "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"svg\";/* 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": [ - "" + "application/pdf": "JVBERi0xLjQKJazcIKu6CjEgMCBvYmoKPDwgL1R5cGUgL0NhdGFsb2cgL1BhZ2VzIDIgMCBSID4+CmVuZG9iago4IDAgb2JqCjw8IC9Gb250IDMgMCBSIC9YT2JqZWN0IDcgMCBSIC9FeHRHU3RhdGUgNCAwIFIgL1BhdHRlcm4gNSAwIFIKL1NoYWRpbmcgNiAwIFIgL1Byb2NTZXQgWyAvUERGIC9UZXh0IC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJIF0gPj4KZW5kb2JqCjExIDAgb2JqCjw8IC9UeXBlIC9QYWdlIC9QYXJlbnQgMiAwIFIgL1Jlc291cmNlcyA4IDAgUgovTWVkaWFCb3ggWyAwIDAgNzAzLjcxMjUgNjA5LjcyMzIxNDI4NTcgXSAvQ29udGVudHMgOSAwIFIgL0Fubm90cyAxMCAwIFIgPj4KZW5kb2JqCjkgMCBvYmoKPDwgL0xlbmd0aCAxMiAwIFIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCniczVvZbhw3Fn2vr6hH+0EU9+UxjhPDeRiMx5oFyQwGgizbMiQ5tuwR5u9zyVp4yO5ib2UjAZR0n+Ypnr7k5V3YOX9+/b+bq+u/vXjW//i6O8/vrh460X+gv3c97z/Q32Mv+hf0967j9O6uc1wxJ6ShN7f5jeWBOamk0ITy8u37rnvbnf9Aj3gg0ouuc4aZSFJaMmmMMo6eqyRndngD+C3ixjumgh+eOj2kANNUn/rNCYSWoZfaMHrht7/9fN3/s7/vz3+QUSgZoRfdYxTcl+b5lIjJAHx6uTDh1V1//lL0zz/2r7pX/afp2ZyMG5/Pme+HGQjpvGLCJZMVdgFYeeYms3TPuuCZDtpqVRIArghCKOaF5U6UDMRrigxMKFetVUbr4VozbXyg714SAK8phraK59W63xV4TSFzCy6ctxUF8JoSONNy07qIVxTJDXN6076I1xQpGLebBka8pijLlK8NnNF6uBHM8U0DI15TrGNcbRoY8ZriJVNm08CI15TgmN2yfRGvKEpIFrZsYMQryuz0jjZH3IB0HknGC2hY7/6x+0T/5v0ZJ19zTNIA2h30+dVd9+yiO/9Z9EL2F2/TsXbxpvutf/L+8s3l3eXnp72wLEgyp4r/9E/ePO3/01/80v100b3qktNmIZY29uA6ICWD28RIOrDiKNrgfjwqyKDLsn789b+/38iGBh0YH+wFGjK4TYNyTFtj00DNTFyfdBA2ZDw8Xv7eEKEoEgzrDCIy2DIEnSZScDdI2GUI3dAg6OgbtidoyOAOQ8RTkDwoxQN1vCEoJIrBrUBEBhuG0HR0G+v8HD2ahvDLGjTFRD+cBlkDgG1DaAo5knbOYImjDaFpYu0LH52hJR/VdCYFubKPauOYsJWPAthaESOZ5Sv4qNaCeV35KIA7VoReSn+yj2ppmZGVjwLYMgRFsGBX8FEtBJO88lEAdxiCW2bVyT6qgiFXr3wUwKXtqYJgSuzhoEfsUuU5M6byWQAbi0NRjwLmHg67a5cqS9lsGVZnqL0wylKW3gyuO1aEwlWo4yiAiytC+bfaJ4jutSL48Ok4D2osL3ZsfHH+tn88/9hfX73/iM8cCx8sqPhYUHWQ9hQZENQ0RS0EeFH2wKDNcigWHlVdcmRd1E11Ub9vXdSeN5VHcs/yCDZDmS0CXieY094tCTNaD8/OVhIAryn5zCgpgFcUOOsKCuI1JR/RJQXwmpJDS0kBvKbkiFhSAK8pUzwvCTNaD88ZSEkAvKJA4lR6COA1JSd8JQXwmpLz1JICeE3J+XVJAbym5LKgpABeU6aipiTMaL0d4RzIFRKMKoskHI51DBKqUgYpWHYgpao8kIJFAlKqOgEpmNMjpUrrkYIZOFKqJBwoRcIMlDpnRkpOb5FQZLg4HJNQJFR5KFIwZ0RKlTYiBTM8pFRJHlIwIUNKlZNhrML0CSh1BoUUzG6QUiU4SMnJCBKKfKQIoJBBIKGdRFQh6cBwf1C0n1KK6b9Fz3MCi4YnvMwNzwKcI3z98IN7nVFpd0ivc/pviuLq4CZntgJgY+IHCxXX6CyulrfkWGYqQGLut0r6nbulWRBgDUGCC0ZjeNrwcy5+ePIN3dcsAcGWBkGnx7iqMa7N+fihefjc0QUJM9QSoMh9PHkNjdvPAltqQ+gOw/QAtgRoR6Fj2tqnWCD3m0EEgC0RVtI+8y5umuhsexliS/8GGtigAcCWBke7drKDOsUQuSUOIgBsiaDj06n1vRR67lkTgg1Nknvmw+l+Ck180ABgS4PUTLkV/HS+GAAJM9QSoAKjkHGan8IlA0wPYEuAMYzLFfwUri1ABIAtEY4zlaPgetsz34uAJgBbmjwxOJfJudQJ2zNftIAGABsaFOcs5OB6/OLA1Q1kOQC2RJCd1dRhFOstzpw3ZRnQYsrgYouJzg+9zwXJEZpgfbImABtNP0lHrdj71qTR9IN9Choy2G78SUfx9/RbE3BgEJHBliEo+Oq9b00arWk4yUBDBncYghIRcfqtyXyag4QJahlBUU14VM4xT5wjGUydwR3fnva82eeiZMe3zyEdRGRwyUepUGVinwuSI3wUUp+sCcDGqgg62/3etyYNH4UcEDRksL04gsKeOf3WBJJhEJHBliEo+st9Lk52+ShUBaAhgzsMQVmQ3+eiZIchpsoIJEzQ0g4VlAGatX99AFUiSMlga0V4oGJ+hZvNXCxnCRlrrweFsHD6Tw9y/yAryNjSglC5ZPcJn8deHClpxzbNji3/+P7my/UpV0c504LLn9xPwsskbB1h72xrS6lqjR3ZWeqOvi0qGkz68GsiyEABbGWgRjGZuymrZaBzzxIUzVBLj/UU+A8p2rb4KXRYYXoAWwLIjfwazRXoDIMIAFsiQqDK8cDmypYQAg3trAHBhgYt6PReo7kCjXgQAWBLBMUY64Q1KZAe32WC+wPQAGBLQ/R2MxdpJxgi33uACABbIiwlX259P50vb0DRDLX00Hh7UHNli5/CVRNMD2BLQKD0d43mClyRQVQBsCHCcMukO91P4WYPNADY0kD1irMr+CncSIIIAFsiaFr+Da4q4GIVNAHY0mQotK5wWQH3waABwJYGKufdGpcV8y02SJihlgAKZ9ysGNchg8LmEt4+Vv0loBS9H6DU7R+kYKsGKVW3BinYWEFK1VtBCvZBkFK1QpCSuxZIKBoXOBx7DUio2g1Iwc4AUqrmAFCKwh0ode2OFKyzkVKV2kjBqhgpVWGMFCxikVLVsUjJJScSiqoTh2NhiISqNgQK1nHAqEo5IGDZBYR25VX/IOzQIumgGslyT87ny0Pc0iFe3F/fZqj48RywN39UV9+cb61vyCSpvDGUZKb/Rap3lhKXqeIdChszFDZQ1EwFzbssjOY30nrj0xdwY407g9ssbTUfuZKCVhymyfCjiQWng1Db6JuclkvEF2TobPkn4ml/8aGjk0hpN5zSaSme8IRTOkyR3geefpTLhtRnfABtmPQElUbSIn2iOUhwMsX8apo12uBncfb8+sPlP76+vrx/OLu7uf/6MBglMbnXEzW+lIZpNU3spgDSeMh0Ws/GjM2oQMsp0JgZbBpTmNhopGFcGme3WVP6OG5tY+q2MYdJT7PlztXYMGS61TTSWYmWBLRpSimonOFxHMWU72hK82c0peKBDmZJgQxNCWjTlIqCIE1NxZmTUn5HH7d/Vh9XSlAoHX8vme2Z0bY9KSxNd1pzWErq0AijFflkg00RhvJNChs2FCIy2hahPaO/eMJTcQkivstaVisiDGVyOrKOXBBNGYKhLN0UZwWgTVtoeozncZwIVoAtvscR0TDF4Y4eq+TgeOAa7QBo0w6GU/ok4zhO3/yb20F/Qzu4SFe0tws7ZLRtB8fpa9E44ymEfHvfUOv6BtSkNkzBlI4FXafCcQ5ncGl50vPXpMfGCk46leYevtLX8QOlpm804LcJj5mgV5IrMX/wkD4wjDZVsMPxNnxwPT5JGIkT9AmOOb53AsdfjQ/SwfMx6iT84/QcQYWHBkmf0weaPhBq2L5tfEHQ4je7nMZLRxUVKPoyfoUQEw8Pj7pZetTid7hfMPeilRanWHrS2/FJhgpd7sAci096Mz2p3OyHmm/x+Yvm+/+4A4JwaO7BFrGHTzE99vtdT4d5cWC5tKn//WSakvIe8nCVsog0RI5D3o17Q1NAMGDWCac6R6pgvFK9ZHaUkZ6gyDkDxGuqyMhppSPv0f1ZNXhW9LTMb+b0phd0jmnuJ8OMTprcXp+9vnj5r798vP/7/c3LL5dnX+9vfpLKTL4v+1+GSjVVeWXRuFCxSlFf9d0eUMZm9l7l7RYJqeZ9Tdr/AKhL+6MKZW5kc3RyZWFtCmVuZG9iagoxMiAwIG9iagoyODcyCmVuZG9iagoxMCAwIG9iagpbIF0KZW5kb2JqCjIyIDAgb2JqCjw8IC9MZW5ndGggNDA0IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nD2SS47kMAxD9zmFLtCA9bOd81SjMYuq+2/n0ZnpRSDFliiK9My2YRn2FWNZ39N6Dvv266S17HP1SJvb3lftpqysetjXHVaD6LntdWXdpLsstj9QTv9JXpfP+neWJylzfkgGl1sYd1u3APah4kuYgryduQtIH2033e5t7hoWIehKpbf5OlySuftJXlccTNIcAvVlmXTuKcKLO+7zFpZb6RPZAnxr27wTPSwhn+p0OxMD/GUxA9kCMcZZcBM9oLZNbc3hdIN9TfMKhRiaq6SnKpJ/SGQXx6xWkPSgo4ChpLZ2kBSNWsH+HTSnbNHQmPjVacEG8ixZVJHd5nNSw6kAEX06NaY0Gh1qgQ/RuqmaWqvHY/f71/j39Qe2bgnlz5OpGu+LRYVZOATm2OAh8uKEF5LlJ8JDk8hC2+FzUFWYKWekDIrCuWpboFulblyseHC+JDuins0eq+dBcjyUsye65ihzdnb4OO9Zb8H9QXPbiIesSB3zBBHbR/qJOUM6gdqaUVil93m4Yer//V9o8fMXBjWWjgplbmRzdHJlYW0KZW5kb2JqCjIwIDAgb2JqCjw8IC9UeXBlIC9Gb250IC9CYXNlRm9udCAvR0NXWERWK0RlamFWdVNhbnMtT2JsaXF1ZSAvRmlyc3RDaGFyIDAKL0xhc3RDaGFyIDI1NSAvRm9udERlc2NyaXB0b3IgMTkgMCBSIC9TdWJ0eXBlIC9UeXBlMwovTmFtZSAvR0NXWERWK0RlamFWdVNhbnMtT2JsaXF1ZSAvRm9udEJCb3ggWyAtMTAxNiAtMzUxIDE2NjAgMTA2OCBdCi9Gb250TWF0cml4IFsgMC4wMDEgMCAwIDAuMDAxIDAgMCBdIC9DaGFyUHJvY3MgMjEgMCBSCi9FbmNvZGluZyA8PCAvVHlwZSAvRW5jb2RpbmcgL0RpZmZlcmVuY2VzIFsgMTAzIC9nIF0gPj4gL1dpZHRocyAxOCAwIFIgPj4KZW5kb2JqCjE5IDAgb2JqCjw8IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvRm9udE5hbWUgL0dDV1hEVitEZWphVnVTYW5zLU9ibGlxdWUgL0ZsYWdzIDk2Ci9Gb250QkJveCBbIC0xMDE2IC0zNTEgMTY2MCAxMDY4IF0gL0FzY2VudCA5MjkgL0Rlc2NlbnQgLTIzNiAvQ2FwSGVpZ2h0IDAKL1hIZWlnaHQgMCAvSXRhbGljQW5nbGUgMCAvU3RlbVYgMCAvTWF4V2lkdGggMTM1MCA+PgplbmRvYmoKMTggMCBvYmoKWyA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMAo2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDMxOCA0MDEgNDYwIDgzOCA2MzYKOTUwIDc4MCAyNzUgMzkwIDM5MCA1MDAgODM4IDMxOCAzNjEgMzE4IDMzNyA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2CjYzNiA2MzYgMzM3IDMzNyA4MzggODM4IDgzOCA1MzEgMTAwMCA2ODQgNjg2IDY5OCA3NzAgNjMyIDU3NSA3NzUgNzUyIDI5NQoyOTUgNjU2IDU1NyA4NjMgNzQ4IDc4NyA2MDMgNzg3IDY5NSA2MzUgNjExIDczMiA2ODQgOTg5IDY4NSA2MTEgNjg1IDM5MCAzMzcKMzkwIDgzOCA1MDAgNTAwIDYxMyA2MzUgNTUwIDYzNSA2MTUgMzUyIDYzNSA2MzQgMjc4IDI3OCA1NzkgMjc4IDk3NCA2MzQgNjEyCjYzNSA2MzUgNDExIDUyMSAzOTIgNjM0IDU5MiA4MTggNTkyIDU5MiA1MjUgNjM2IDMzNyA2MzYgODM4IDYwMCA2MzYgNjAwIDMxOAozNTIgNTE4IDEwMDAgNTAwIDUwMCA1MDAgMTM1MCA2MzUgNDAwIDEwNzAgNjAwIDY4NSA2MDAgNjAwIDMxOCAzMTggNTE4IDUxOAo1OTAgNTAwIDEwMDAgNTAwIDEwMDAgNTIxIDQwMCAxMDI4IDYwMCA1MjUgNjExIDMxOCA0MDEgNjM2IDYzNiA2MzYgNjM2IDMzNwo1MDAgNTAwIDEwMDAgNDcxIDYxNyA4MzggMzYxIDEwMDAgNTAwIDUwMCA4MzggNDAxIDQwMSA1MDAgNjM2IDYzNiAzMTggNTAwCjQwMSA0NzEgNjE3IDk2OSA5NjkgOTY5IDUzMSA2ODQgNjg0IDY4NCA2ODQgNjg0IDY4NCA5NzQgNjk4IDYzMiA2MzIgNjMyIDYzMgoyOTUgMjk1IDI5NSAyOTUgNzc1IDc0OCA3ODcgNzg3IDc4NyA3ODcgNzg3IDgzOCA3ODcgNzMyIDczMiA3MzIgNzMyIDYxMSA2MDgKNjMwIDYxMyA2MTMgNjEzIDYxMyA2MTMgNjEzIDk5NSA1NTAgNjE1IDYxNSA2MTUgNjE1IDI3OCAyNzggMjc4IDI3OCA2MTIgNjM0CjYxMiA2MTIgNjEyIDYxMiA2MTIgODM4IDYxMiA2MzQgNjM0IDYzNCA2MzQgNTkyIDYzNSA1OTIg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ZSAvVHlwZTMgL05hbWUgL0JNUVFEVitEZWphVnVTYW5zCi9Gb250QkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0ZvbnRNYXRyaXggWyAwLjAwMSAwIDAgMC4wMDEgMCAwIF0KL0NoYXJQcm9jcyAyNiAwIFIKL0VuY29kaW5nIDw8IC9UeXBlIC9FbmNvZGluZwovRGlmZmVyZW5jZXMgWyAzMiAvc3BhY2UgNDAgL3BhcmVubGVmdCAvcGFyZW5yaWdodCA0NyAvc2xhc2ggL3plcm8gL29uZSAvdHdvIC90aHJlZQovZm91ciAvZml2ZSAvc2l4IDU2IC9laWdodCA2NyAvQyA4MCAvUCA5MCAvWiA5NSAvdW5kZXJzY29yZSA5NyAvYSA5OSAvYyAvZAovZSAvZiAxMDQgL2ggL2kgMTA4IC9sIC9tIC9uIC9vIC9wIDExNCAvciAvcyAvdCAvdSAxMTkgL3cgMTIxIC95IF0KPj4KL1dpZHRocyAyMyAwIFIgPj4KZW5kb2JqCjI0IDAgb2JqCjw8IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvRm9udE5hbWUgL0JNUVFEVitEZWphVnVTYW5zIC9GbGFncyAzMgovRm9udEJCb3ggWyAtMTAyMSAtNDYzIDE3OTQgMTIzMyBdIC9Bc2NlbnQgOTI5IC9EZXNjZW50IC0yMzYgL0NhcEhlaWdodCAwCi9YSGVpZ2h0IDAgL0l0YWxpY0FuZ2xlIDAgL1N0ZW1WIDAgL01heFdpZHRoIDEzNDIgPj4KZW5kb2JqCjIzIDAgb2JqClsgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAKNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCAzMTggNDAxIDQ2MCA4MzggNjM2Cjk1MCA3ODAgMjc1IDM5MCAzOTAgNTAwIDgzOCAzMTggMzYxIDMxOCAzMzcgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNgo2MzYgNjM2IDMzNyAzMzcgODM4IDgzOCA4MzggNTMxIDEwMDAgNjg0IDY4NiA2OTggNzcwIDYzMiA1NzUgNzc1IDc1MiAyOTUKMjk1IDY1NiA1NTcgODYzIDc0OCA3ODcgNjAzIDc4NyA2OTUgNjM1IDYxMSA3MzIgNjg0IDk4OSA2ODUgNjExIDY4NSAzOTAgMzM3CjM5MCA4MzggNTAwIDUwMCA2MTMgNjM1IDU1MCA2MzUgNjE1IDM1MiA2MzUgNjM0IDI3OCAyNzggNTc5IDI3OCA5NzQgNjM0IDYxMgo2MzUgNjM1IDQxMSA1MjEgMzkyIDYzNCA1OTIgODE4IDU5MiA1OTIgNTI1IDYzNiAzMzcgNjM2IDgzOCA2MDAgNjM2IDYwMCAzMTgKMzUyIDUxOCAxMDAwIDUwMCA1MDAgNTAwIDEzNDIgNjM1IDQwMCAxMDcwIDYwMCA2ODUgNjAwIDYwMCAzMTggMzE4IDUxOCA1MTgKNTkwIDUwMCAxMDAwIDUwMCAxMDAwIDUyMSA0MDAgMTAyMyA2MDAgNTI1IDYxMSAzMTggNDAxIDYzNiA2MzYgNjM2IDYzNiAzMzcKNTAwIDUwMCAxMDAwIDQ3MSA2MTIgODM4IDM2MSAxMDAwIDUwMCA1MDAgODM4IDQwMSA0MDEgNTAwIDYzNiA2MzYgMzE4IDUwMAo0MDEgNDcxIDYxMiA5NjkgOTY5IDk2OSA1MzEgNjg0IDY4NCA2ODQgNjg0IDY4NCA2ODQgOTc0IDY5OCA2MzIgNjMyIDYzMiA2MzIKMjk1IDI5NSAyOTUgMjk1IDc3NSA3NDggNzg3IDc4NyA3ODcgNzg3IDc4NyA4MzggNzg3IDczMiA3MzIgNzMyIDczMiA2MTEgNjA1CjYzMCA2MTMgNjEzIDYxMyA2MTMgNjEzIDYxMyA5ODIgNTUwIDYxNSA2MTUgNjE1IDYxNSAyNzggMjc4IDI3OCAyNzggNjEyIDYzNAo2MTIgNjEyIDYxMiA2MTIgNjEyIDgzOCA2MTIgNjM0IDYzNCA2MzQgNjM0IDU5MiA2MzUgNTkyIF0KZW5kb2JqCjI2IDAgb2JqCjw8IC9DIDI3IDAgUiAvUCAyOCAwIFIgL1ogMjkgMCBSIC9hIDMwIDAgUiAvYyAzMSAwIFIgL2QgMzIgMCBSIC9lIDMzIDAgUgovZWlnaHQgMzQgMCBSIC9mIDM1IDAgUiAvZml2ZSAzNiAwIFIgL2ZvdXIgMzcgMCBSIC9oIDM4IDAgUiAvaSAzOSAwIFIKL2wgNDAgMCBSIC9tIDQxIDAgUiAvbiA0MyAwIFIgL28gNDQgMCBSIC9vbmUgNDUgMCBSIC9wIDQ2IDAgUgovcGFyZW5sZWZ0IDQ3IDAgUiAvcGFyZW5yaWdodCA0OCAwIFIgL3IgNDkgMCBSIC9zIDUwIDAgUiAvc2l4IDUxIDAgUgovc2xhc2ggNTIgMCBSIC9zcGFjZSA1MyAwIFIgL3QgNTQgMCBSIC90aHJlZSA1NSAwIFIgL3R3byA1NiAwIFIgL3UgNTcgMCBSCi91bmRlcnNjb3JlIDU4IDAgUiAvdyA1OSAwIFIgL3kgNjAgMCBSIC96ZXJvIDYxIDAgUiA+PgplbmRvYmoKNjYgMCBvYmoKPDwgL1R5cGUgL1hPYmplY3QgL1N1YnR5cGUgL0Zvcm0gL0JCb3ggWyAtMTQxIC0yNDAgMTEyOCA3OTUgXSAvTGVuZ3RoIDMwMQovRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJwtksttAzEMRO9bBUvgX1I9BoIcnP6veZQNLHYoip/hUE8dk26Xv6d2SceW91O1rlUxuKQ8wJLXU3qwQvKktB/JxdmNm2w8xk25tLpkhtTuuYmUWirpLZXkGJVvTqiKmdHRzxbTED9LTl3Yi4gxuiQoXEDWACX1GtkmEChuzffQC6PMoWAelaZXLvpJqolPYpC1JeCn4jl/fBsgI/GAHYNrzR8ON+30oCnHRSuDEF5DEj6DVTJIMfyQMFhVi9G+iV5b9o1GDEYzlDOj18wefVVI9Bzdw0YhlXCnQn1w5cSMRXZooy5s8A6iUOnHA6s6R2zvr+5Wo7vDlw3W0Kc6u3s9G81Y0/sZ1QqljPU0a3EI9CXlPIlmokCFeR7JcgbR+Ptg3s/v8/MPXDdrNAplbmRzdHJlYW0KZW5kb2JqCjY0IDAgb2JqCjw8IC9UeXBlIC9Gb250IC9CYXNlRm9udCAvRVVQT0RTK1NUSVhOb25Vbmljb2RlLUl0YWxpYyAvRmlyc3RDaGFyIDAKL0xhc3RDaGFyIDI1NSAvRm9udERlc2NyaXB0b3IgNjMgMCBSIC9TdWJ0eXBlIC9UeXBlMwovTmFtZSAvRVVQT0RTK1NUSVhOb25Vbmljb2RlLUl0YWxpYyAvRm9udEJCb3ggWyAtMTQxIC0yNDAgMTEyOCA3OTUgXQovRm9udE1hdHJpeCBbIDAuMDAxIDAgMCAwLjAwMSAwIDAgXSAvQ2hhclByb2NzIDY1IDAgUgovRW5jb2RpbmcgPDwgL1R5cGUgL0VuY29kaW5nIC9EaWZmZXJlbmNlcyBbIF0gPj4gL1dpZHRocyA2MiAwIFIgPj4KZW5kb2JqCjYzIDAgb2JqCjw8IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvRm9udE5hbWUgL0VVUE9EUytTVElYTm9uVW5pY29kZS1JdGFsaWMgL0ZsYWdzIDk2Ci9Gb250QkJveCBbIC0xNDEgLTI0MCAxMTI4IDc5NSBdIC9Bc2NlbnQgMTQ1MCAvRGVzY2VudCAtNTUyIC9DYXBIZWlnaHQgMAovWEhlaWdodCAwIC9JdGFsaWNBbmdsZSA0MzkwOSAvU3RlbVYgMCAvTWF4V2lkdGggMjUwID4+CmVuZG9iago2MiAwIG9iagpbIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwCjI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MAoyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAKMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwCjI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MAoyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAKMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwCjI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MAoyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAKMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwCjI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MAoyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAKMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwCjI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCAyNTAgMjUwIDI1MCBdCmVuZG9iago2NSAwIG9iago8PCA+PgplbmRvYmoKNzEgMCBvYmoKPDwgL0xlbmd0aCAxNDkgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicLU87sgMxDOp9Co6gv+zz7Js3KZL7t0G7aYwGJMDWCYEdhMPKkHnwp8sTGfgsVzIj5563AtfSJKkbb05cc4EWmSD24J6dLTxM6NHb0sRvvJbpeRifMIZG8MZHyaLbr4bJg5KjcIrDBiVEKtmIbVSaJ8ImHYgE4+lUjduvfJDFJ4GH0ytoqfBmEJ4/Xuu1/r/7GTC+CmVuZHN0cmVhbQplbmRvYmoKNjkgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL0Jhc2VGb250IC9DR01NUVUrQ21zeTEwIC9GaXJzdENoYXIgMCAvTGFzdENoYXIgMjU1Ci9Gb250RGVzY3JpcHRvciA2OCAwIFIgL1N1YnR5cGUgL1R5cGUzIC9OYW1lIC9DR01NUVUrQ21zeTEwCi9Gb250QkJveCBbIC0yOSAtOTYwIDExMjQgNzc5IF0gL0ZvbnRNYXRyaXggWyAwLjAwMSAwIDAgMC4wMDEgMCAwIF0KL0NoYXJQcm9jcyA3MCAwIFIKL0VuY29kaW5nIDw8IC9UeXBlIC9FbmNvZGluZyAvRGlmZmVyZW5jZXMgWyA0OCAvcHJpbWUgXSA+PiAvV2lkdGhzIDY3IDAgUgo+PgplbmRvYmoKNjggMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvQ0dNTVFVK0Ntc3kxMCAvRmxhZ3MgMzIKL0ZvbnRCQm94IFsgLTI5IC05NjAgMTEyNCA3NzkgXSAvQXNjZW50IDcwNyAvRGVzY2VudCAtOTcwIC9DYXBIZWlnaHQgNzA3Ci9YSGVpZ2h0IDAgL0l0YWxpY0FuZ2xlIDAgL1N0ZW1WIDAgL01heFdpZHRoIDEyMDAgPj4KZW5kb2JqCjY3IDAgb2JqClsgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAKNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCAwIDEwMDAgNTAwIDUwMCAxMDAwCjEwMDAgMTAwMCA3NzcgMTAwMCAxMDAwIDYxMSA2MTEgMTAwMCAxMDAwIDEwMDAgNzc3IDI3NSAxMDAwIDY2NiA2NjYgODg4IDg4OAowIDAgNTU1IDU1NSA2NjYgNTAwIDcyMiA3MjIgNzc3IDc3NyA2MTEgNzk4IDY1NiA1MjYgNzcxIDUyNyA3MTggNTk0IDg0NCA1NDQKNjc3IDc2MiA2ODkgMTIwMCA4MjAgNzk2IDY5NSA4MTYgODQ3IDYwNSA1NDQgNjI1IDYxMiA5ODcgNzEzIDY2OCA3MjQgNjY2CjY2NiA2NjYgNjY2IDY2NiA2MTEgNjExIDQ0NCA0NDQgNDQ0IDQ0NCA1MDAgNTAwIDM4OCAzODggMjc3IDUwMCA1MDAgNjExIDUwMAoyNzcgODMzIDc1MCA4MzMgNDE2IDY2NiA2NjYgNzc3IDc3NyA0NDQgNDQ0IDQ0NCA2MTEgNzc3IDc3NyA3NzcgNzUwIDc1MCA3NTAKNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwCjc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgMCA3NzcgMjc3IDc3NyA1MDAgNzc3IDUwMCA3NzcKNzc3IDc3NyA3NzcgNzUwIDc1MCA3NzcgNzc3IDc3NyAxMDAwIDUwMCA1MDAgNzc3IDc3NyA3NzcgNzc3IDc1MCA3NzcgNzc3Cjc3NyA3NzcgNzc3IDc3NyA3NzcgMTAwMCAxMDAwIDc3NyA3NzcgMTAwMCA3NzcgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwCjc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MAo3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAKNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCA3NTAgNzUwIDc1MCBdCmVuZG9iago3MCAwIG9iago8PCAvcHJpbWUgNzEgMCBSID4+CmVuZG9iagozIDAgb2JqCjw8IC9GMiAyMCAwIFIgL0YxIDI1IDAgUiAvRjQgNjQgMCBSIC9GMyA2OSAwIFIgPj4KZW5kb2JqCjQgMCBvYmoKPDwgL0ExIDw8IC9UeXBlIC9FeHRHU3RhdGUgL0NBIDAgL2NhIDEgPj4KL0EyIDw8IC9UeXBlIC9FeHRHU3RhdGUgL0NBIDEgL2NhIDEgPj4gPj4KZW5kb2JqCjUgMCBvYmoKPDwgPj4KZW5kb2JqCjYgMCBvYmoKPDwgPj4KZW5kb2JqCjcgMCBvYmoKPDwgL0kxIDEzIDAgUiAvSTIgMTQgMCBSIC9JMyAxNSAwIFIgL0k0IDE2IDAgUiAvSTUgMTcgMCBSCi9GMS1EZWphVnVTYW5zLW1pbnVzIDQyIDAgUiAvRjQtU1RJWE5vblVuaUl0YS11bmlFMjM1IDY2IDAgUiA+PgplbmRvYmoKMTMgMCBvYmoK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MzQyOCAwMDAwMCBuIAowMDAwMDI0ODk2IDAwMDAwIG4gCjAwMDAwMjYzMTUgMDAwMDAgbiAKMDAwMDAwNDM1NiAwMDAwMCBuIAowMDAwMDA0MTQxIDAwMDAwIG4gCjAwMDAwMDM4MTEgMDAwMDAgbiAKMDAwMDAwNTQwOSAwMDAwMCBuIAowMDAwMDAzMzM0IDAwMDAwIG4gCjAwMDAwMTUwMTMgMDAwMDAgbiAKMDAwMDAxNDgwNiAwMDAwMCBuIAowMDAwMDE0MjkwIDAwMDAwIG4gCjAwMDAwMTYwNjYgMDAwMDAgbiAKMDAwMDAwNTQ0MSAwMDAwMCBuIAowMDAwMDA1NzQ5IDAwMDAwIG4gCjAwMDAwMDU5OTIgMDAwMDAgbiAKMDAwMDAwNjE0MiAwMDAwMCBuIAowMDAwMDA2NTIyIDAwMDAwIG4gCjAwMDAwMDY4MjcgMDAwMDAgbiAKMDAwMDAwNzEzMSAwMDAwMCBuIAowMDAwMDA3NDUzIDAwMDAwIG4gCjAwMDAwMDc5MjEgMDAwMDAgbiAKMDAwMDAwODEzMCAwMDAwMCBuIAowMDAwMDA4NDUyIDAwMDAwIG4gCjAwMDAwMDg2MTggMDAwMDAgbiAKMDAwMDAwODg1NSAwMDAwMCBuIAowMDAwMDA4OTk5IDAwMDAwIG4gCjAwMDAwMDkxMTggMDAwMDAgbiAKMDAwMDAwOTQ0OSAwMDAwMCBuIAowMDAwMDA5NjIxIDAwMDAwIG4gCjAwMDAwMDk4NTcgMDAwMDAgbiAKMDAwMDAxMDE0OCAwMDAwMCBuIAowMDAwMDEwMzAzIDAwMDAwIG4gCjAwMDAwMTA2MTUgMDAwMDAgbiAKMDAwMDAxMDgzOCAwMDAwMCBuIAowMDAwMDExMDYyIDAwMDAwIG4gCjAwMDAwMTEyOTUgMDAwMDAgbiAKMDAwMDAxMTcwMiAwMDAwMCBuIAowMDAwMDEyMDk1IDAwMDAwIG4gCjAwMDAwMTIyMjEgMDAwMDAgbiAKMDAwMDAxMjMxMSAwMDAwMCBuIAowMDAwMDEyNTE3IDAwMDAwIG4gCjAwMDAwMTI5MzAgMDAwMDAgbiAKMDAwMDAxMzI1NCAwMDAwMCBuIAowMDAwMDEzNTAxIDAwMDAwIG4gCjAwMDAwMTM2MjcgMDAwMDAgbiAKMDAwMDAxMzc4OCAwMDAwMCBuIAowMDAwMDE0MDAyIDAwMDAwIG4gCjAwMDAwMTc0NjUgMDAwMDAgbiAKMDAwMDAxNzI0NSAwMDAwMCBuIAowMDAwMDE2OTE4IDAwMDAwIG4gCjAwMDAwMTg1MDkgMDAwMDAgbiAKMDAwMDAxNjQ4NSAwMDAwMCBuIAowMDAwMDE5MjYxIDAwMDAwIG4gCjAwMDAwMTkwNTkgMDAwMDAgbiAKMDAwMDAxODc1MyAwMDAwMCBuIAowMDAwMDIwMzEyIDAwMDAwIG4gCjAwMDAwMTg1MzEgMDAwMDAgbiAKMDAwMDAyMjA0NCAwMDAwMCBuIAowMDAwMDIzNDA4IDAwMDAwIG4gCjAwMDAwMjQ4NzUgMDAwMDAgbiAKMDAwMDAyNjI5NSAwMDAwMCBuIAowMDAwMDI4MjQ3IDAwMDAwIG4gCjAwMDAwMjgzMjcgMDAwMDAgbiAKdHJhaWxlcgo8PCAvU2l6ZSA3OCAvUm9vdCAxIDAgUiAvSW5mbyA3NyAwIFIgPj4Kc3RhcnR4cmVmCjI4NDg0CiUlRU9GCg==", + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " 2024-05-14T12:00:32.969400\n", + " image/svg+xml\n", + " \n", + " \n", + " Matplotlib v3.8.4, https://matplotlib.org/\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n" ], "text/plain": [ - "" + "
" ] }, "metadata": {}, @@ -7039,7 +21804,6 @@ " figsize=(10, 10)\n", ")\n", "\n", - "# Adjust colorbar tick label size\n", "cb = grid[-1].images[0].colorbar\n", "cb.ax.tick_params(labelsize=12)" ] @@ -7072,6146 +21836,2142 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.12.3" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { - "0035c57c0c1e4a09bdf2f1596dae28d4": { + "00c9a546413543c2aae5fc69aeaa8b32": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "00c579dc103044bf9951325edb0196a0": { + "0177c9c24e5645b0b9c8d47618dc7804": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "description_width": "" + "description_width": "", + "font_size": null, + "text_color": null } }, - "0176aa83f0344fb397117314024b291e": { + "01b9f1dda08642a5848ac8575ac5aee9": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "children": [ - "IPY_MODEL_d482dc5130dd4cad8291d190e3587cc2", - "IPY_MODEL_abd4bf2a037646929fd6a9ab5842a1c1", - "IPY_MODEL_19e970f2fcf1450ea9df75d8da0935d2" - ], - "layout": "IPY_MODEL_2be217287e6a46a684dd80c1b4a1cc1d" + "description_width": "", + "font_size": null, + "text_color": null } }, - "01e360dc28bb4f699595ddf5bcc7aaad": { + "01fd73313062458ca35ae3c340923410": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "0221ff3fdf7d4740a63007b8f36574ef": { + "02891745f0f44e97bbf9456a326d0e8d": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "description_width": "" + "description_width": "", + "font_size": null, + "text_color": null } }, - "026ef4cf3c7447369b2ecea71d14cdee": { + "03daad12e09d4c26bbc1bdcec86c5f88": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { - "layout": "IPY_MODEL_b4e1a0bad1d44908a35d4f0f541e34da", - "style": "IPY_MODEL_8031a26d29b041b1ab813a61a105eb0d", - "value": "Calculating control matrix: 100%" + "layout": "IPY_MODEL_5d4261a2d8c7452a8b28b0c4060fe622", + "style": "IPY_MODEL_4cff5353d53547b18748877938ebac86", + "value": "Calculating control matrix: 100%" } }, - "02b4c82a84c240489313cad0969221dd": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} + "03f4cdfced7548bcaf6c62d98694040e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", + "state": { + "layout": "IPY_MODEL_c40f1a70daaa431aae6dd839aef0a207", + "style": "IPY_MODEL_d02068daa27c4296886199f754948cc1", + "value": " 30/30 [00:00<00:00, 1500.16it/s]" + } }, - "02b889e14f684a8a91024474a0f40c50": { + "040452db95bf49b499f350c7444604e6": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { - "layout": "IPY_MODEL_dac8937531044e2faec9085786deac1b", - "style": "IPY_MODEL_a0ef48944e244ba5b0cdd6b80f6db96f", - "value": " 60/60 [00:01<00:00, 56.41it/s]" + "layout": "IPY_MODEL_d92a96139a1b4744b0f9036519ac996f", + "style": "IPY_MODEL_84d73dfb39554f1aa3945d077107aae5", + "value": "Calculating control matrix: 100%" } }, - "0318a88e685941338fc19504f149dc92": { + "04488b6b951f4910b2460ee1a83bcb5f": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "description_width": "" + "description_width": "", + "font_size": null, + "text_color": null } }, - "04d16ffa31cb4dc4b4763aa47be5214e": { + "05176630e1904d0b9713f2e2417bdf63": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "055e7159ab894ee0a640d4aea0372180": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_e2b305fca38740fa83cdc20ab98bbd39", - "style": "IPY_MODEL_35964c8d180c4fbc8a5a0098dda8fff1", - "value": "Calculating control matrix: 100%" - } + "055663dc105a48b3b973f3a98dc224d0": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} }, - "057fcc9f8abd494b9239626cad4729f9": { + "0708cdb0fa3641a296449e34fded5b8b": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "05893b51b2eb4f0f8a01e33716ec9b2c": { + "0c03cdca862a4a2283716114dd62953e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "FloatProgressModel", + "state": { + "bar_style": "success", + "layout": "IPY_MODEL_61f3960d990047c287a25c604f401eda", + "max": 30, + "style": "IPY_MODEL_b0452831fbe44a87aad5e159f566b6e0", + "value": 30 + } + }, + "0e101792ff85439685f4dc50cb84e735": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, - "05aa9fb0f82043fa8b53663964ec54f1": { + "0e4b2c241e8f4ccd844f8243dc3be071": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", + "model_module_version": "2.0.0", + "model_name": "FloatProgressModel", "state": { - "layout": "IPY_MODEL_cbdeda786fca4b2c953e78101b87b7f7", - "style": "IPY_MODEL_6a19dbae5a8543e38a24c6db038d891b", - "value": "Calculating control matrix: 100%" + "bar_style": "success", + "layout": "IPY_MODEL_8628541759414223927dfd8094377037", + "max": 3, + "style": "IPY_MODEL_cff7f6179780447b8d68a3b70f9f519c", + "value": 3 } }, - "05cb56194360489b8ee240156f0cb05a": { + "106dfd8b7b504aa9b1516d561c2199f9": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, - "05dca1bfa63d41e6b0ec4ce3be211bc8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "06c300be1d6242229a1d764e74ec4595": { + "12132cdf1e9f4782946f13c79223aff5": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "children": [ - "IPY_MODEL_f675bfdef43345de89f9b1c98b1d7143", - "IPY_MODEL_23991a9590d74888ab7b97966f83e552", - "IPY_MODEL_1c8020ac6beb491bb084c92b003f018c" + "IPY_MODEL_74cb5c0f5ab14a928115aa6b27a21057", + "IPY_MODEL_32fbb19f1c5a4b2ebca36f1a57f74585", + "IPY_MODEL_680404eb2e2d4c4bb6bfec1a5f357a83" ], - "layout": "IPY_MODEL_70658dee444f4c9f9bd96203391df1b7" + "layout": "IPY_MODEL_01fd73313062458ca35ae3c340923410" } }, - "06dce4f0a6354c3481e993cb7fab514c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "07538e2bc95d456eb50c8980e3b78fbe": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} + "124eb6b5ffd444b4af063f04eab5817f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", + "state": { + "layout": "IPY_MODEL_30e8d5c7291b4574b65112153bc20fac", + "style": "IPY_MODEL_a026aefeda2a4755a3aca6cc52834115", + "value": "Calculating control matrix: 100%" + } }, - "07dea98ef8584646998fcf59b8719208": { + "1410056e737d4e7da76fbfcbce161857": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "description_width": "" + "description_width": "", + "font_size": null, + "text_color": null } }, - "07f43ebbe385468baafee1e29986bed3": { + "14c0c361bb0f4f1b81432369f8d35564": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", + "model_module_version": "2.0.0", + "model_name": "ProgressStyleModel", "state": { - "bar_style": "success", - "layout": "IPY_MODEL_33b810ae2bc5499cb796060e4722e463", - "max": 30, - "style": "IPY_MODEL_81a54b215966422f8198e0229a004ead", - "value": 30 + "description_width": "" } }, - "086c80bf24a44d11bc3d251b107c54ca": { + "153bd884cf304007a5bc74bd3c55bfa9": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "0a3bbcb53d1f49538ce5fec88565cd2c": { + "189e9b2495dc45f986aaf6b3719f689c": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "0ac95337e6e44731ab6b822a79bc4382": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_b2aff5db25f14bc788e7093c02796b95", - "style": "IPY_MODEL_92beadcac86d4b27a14a4f3b76f77e3f", - "value": " 5/5 [00:00<00:00, 34.69it/s]" - } + "1b8e707adcd64afdb44f0b34dc9e2486": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} + }, + "1bf32120c415402da9ca9df74f36c7bc": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} }, - "0b013d1d368c4f2a8d56fece1e46c541": { + "1debe5d387d04b54915639e0aa6da591": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "0b2f2f79645c4335a17bd6fb0ba946cf": { + "1e58c3ee972e4398aecb102f6516f619": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", "state": { - "children": [ - "IPY_MODEL_e4e2c76d6dd44ae2bccd6006e59a969c", - "IPY_MODEL_44a03720dd8e40edbd98e0bd30cc8da1", - "IPY_MODEL_7fd5a11202d643adb76cbeb2cb10290c" - ], - "layout": "IPY_MODEL_dff2bfa834a64dc9b6b465f735f41639" + "layout": "IPY_MODEL_3396a02af38942b1ba913d1a29c1c297", + "style": "IPY_MODEL_3c2b5d4f27f74b768d836694ad12efbe", + "value": " 30/30 [00:00<00:00, 34.53it/s]" } }, - "0b3e4dfc21694554b0e11f5aa90e872d": { + "1e93f4a152024818a81a0f224f85fe26": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "0b4ea381a0b045f4b618b265398c00f2": { + "1eaef747c78b4fa6b3f89ee53b57300e": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "description_width": "" + "description_width": "", + "font_size": null, + "text_color": null } }, - "0b8f1ad7842e4186af11b5126ca30c5c": { + "215e318262bb4eebab6a44c156e1d991": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "children": [ - "IPY_MODEL_8dba12dffe3c4a24883ec578f5c4ea59", - "IPY_MODEL_ef6318d7e7fa41a3904ad736a035d1a0", - "IPY_MODEL_f0d23e008b5c4dea91d59d9faada93ab" + "IPY_MODEL_cdfc82c2f29a46febe06a231509ca570", + "IPY_MODEL_875ab3bea11440948c8d84eb4ddc05a0", + "IPY_MODEL_1e58c3ee972e4398aecb102f6516f619" ], - "layout": "IPY_MODEL_b14e06ed731b43eea2b93ad4fbcb732f" + "layout": "IPY_MODEL_3e6c87ccf630465983bfebcddb7e0cf5" } }, - "0be6af9f92304a5c95c00ca91d6fa605": { + "2423295cc82f418383a052cee775c397": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} + }, + "25b34333486b4421ab83056117e39c31": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "0c011b5c4f7f4acabdf9ef664033db8a": { + "25e3549f76a54673a24771c7002d2959": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { - "layout": "IPY_MODEL_2b8d9ede7f8f42b89b2dc624c7a8dc27", - "style": "IPY_MODEL_5e2c5226b3504bf18803b2597f70bbe1", - "value": " 120/120 [00:02<00:00, 60.21it/s]" + "layout": "IPY_MODEL_1b8e707adcd64afdb44f0b34dc9e2486", + "style": "IPY_MODEL_69f15a6e28b1474592cc75a8187a9958", + "value": "Calculating control matrix: 100%" } }, - "0c2c8b14549f48b5abb10b4078d393ba": { + "26d02edea6834e7a8e298cdb9f248ffa": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "0c5e222c143241f681f3e3cde7910ebc": { + "2948a9418b2146c49b734a44da1a39a0": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", + "model_module_version": "2.0.0", + "model_name": "HBoxModel", "state": { - "bar_style": "success", - "layout": "IPY_MODEL_68d3fb2df97c4798b61d4fe1f8740ec7", - "max": 30, - "style": "IPY_MODEL_9eed20887e5f48078bef8302382a0bcc", - "value": 30 + "children": [ + "IPY_MODEL_124eb6b5ffd444b4af063f04eab5817f", + "IPY_MODEL_4c4759c8ec6e4c7eb3ab27cb1c95d764", + "IPY_MODEL_b4e2cc37faf44a159d498f15ef4b83e8" + ], + "layout": "IPY_MODEL_37bb3053d9584beb8a4b8d06f54d4864" } }, - "0c6530f882304f3096298ec3b413a5fe": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "0ccda0e3eb394a168c60d067688e88a1": { + "29503d8763d84f0cbac26208764b5d1f": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", "state": { - "description_width": "" + "layout": "IPY_MODEL_f16ac5a8891143238bbb9afce47532d4", + "style": "IPY_MODEL_652bf1315f9e44f9b1ba9ca599a46551", + "value": "Calculating control matrix: 100%" } }, - "0d3f2ec0099748b1bf5904bd7e0aa3cb": { + "2a7aef4b8b7b46409e370c33a6fb3db7": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", "state": { - "description_width": "" + "layout": "IPY_MODEL_8c28784e26734342b891515979aab1a3", + "style": "IPY_MODEL_f1a4e2b3aea64613a5beac1f210c5289", + "value": " 2/2 [00:00<00:00, 35.69it/s]" } }, - "0de1620d8fc8414d8d73587647a1d7fd": { + "2a7cfaec4c3d4d849276341453b78f8f": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { - "layout": "IPY_MODEL_7cf186a2e52c43839cdf700cf85a7c94", - "style": "IPY_MODEL_26da0d1f36654e998b2e53f173e9ae2f", - "value": " 2/2 [00:00<00:00, 33.61it/s]" + "layout": "IPY_MODEL_a97a81d502b14a9d8d493db4a4840acb", + "style": "IPY_MODEL_04488b6b951f4910b2460ee1a83bcb5f", + "value": "Calculating control matrix: 100%" } }, - "0e2ebe22cb9d4c20a8db50e717fe31a5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} + "2b0f852552a14a22b18d07bdefc96e6c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", + "state": { + "description_width": "", + "font_size": null, + "text_color": null + } }, - "0effd8c6b7904d92b6a077c4d5dd0b5d": { + "2e469f51f9d84bf29fb4ea796b3a3f52": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", + "model_module_version": "2.0.0", + "model_name": "ProgressStyleModel", "state": { - "bar_style": "success", - "layout": "IPY_MODEL_f0422094e2eb41e6b6a8c52d8b1592b1", - "max": 30, - "style": "IPY_MODEL_57bc72ccdecd4d5ba40c18b8e2eae26f", - "value": 30 + "description_width": "" } }, - "0f0218c2de7c46c980460b981d9c5ad8": { + "2f50b102e10d4b74ae4a45603d2787ba": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { - "layout": "IPY_MODEL_0b013d1d368c4f2a8d56fece1e46c541", - "style": "IPY_MODEL_93799bc0f70149549bca7a85aea0b10d", - "value": " 30/30 [00:00<00:00, 35.80it/s]" + "layout": "IPY_MODEL_c085db41f1b54093aead0579bcbd0c68", + "style": "IPY_MODEL_01b9f1dda08642a5848ac8575ac5aee9", + "value": "Calculating control matrix: 100%" + } + }, + "2ff65d2180dd407cb740146c224e4ddb": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "ProgressStyleModel", + "state": { + "description_width": "" } }, - "0f3f6542d93349f3ae45d2c86e0755f4": { + "30e8d5c7291b4574b65112153bc20fac": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "0f576f2ef1114b35a10d66a1fa69b3bd": { + "3103e69e94e149b5825f2440f2b247d5": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", + "model_module_version": "2.0.0", + "model_name": "HBoxModel", "state": { - "layout": "IPY_MODEL_17fd1e857c0047758c864c1690fc7e04", - "style": "IPY_MODEL_b0501299bfc74dca9d3d52d4058aaa3d", - "value": "Calculating control matrix: 100%" + "children": [ + "IPY_MODEL_03daad12e09d4c26bbc1bdcec86c5f88", + "IPY_MODEL_ad1cfe96816540fb83b93d2d7906c665", + "IPY_MODEL_cf6f48bbeea94899a48257a5bb4047ab" + ], + "layout": "IPY_MODEL_a812574b7c5540689199b08e0cbbf13a" } }, - "0f7b27348d7540419620ca053eff0d09": { + "3178cae9b0b44ab19c5e0bf27818ae6b": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "0fdca502729b48068fc67ca7ee7679bd": { + "32fbb19f1c5a4b2ebca36f1a57f74585": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "FloatProgressModel", + "state": { + "bar_style": "success", + "layout": "IPY_MODEL_c67bca3a52764bd189a9eb087c09b2a7", + "max": 16, + "style": "IPY_MODEL_8da8d870c09d4e48b3769b6403c53ef0", + "value": 16 + } + }, + "331b1dd494e04644b529dc772b5916ad": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", + "state": { + "description_width": "", + "font_size": null, + "text_color": null + } + }, + "3374b4a68c8c4c80992d55d0ea571338": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "100bbd7cecd24855a8ffd8c0a6c4ae25": { + "3396a02af38942b1ba913d1a29c1c297": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "1060665b5b9f40b78a2b9fbe9659942b": { + "3407797c13e84441b57486322e72017f": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "FloatProgressModel", "state": { - "description_width": "" + "bar_style": "success", + "layout": "IPY_MODEL_fd5097219a7740f385baaa111940e6ab", + "max": 2, + "style": "IPY_MODEL_2ff65d2180dd407cb740146c224e4ddb", + "value": 2 + } + }, + "346fdb19439b40d793f6c22f44ac3dea": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", + "state": { + "layout": "IPY_MODEL_94934ee0dd634b01aa100561140b6b70", + "style": "IPY_MODEL_2b0f852552a14a22b18d07bdefc96e6c", + "value": "Calculating control matrix: 100%" } }, - "114b0b789943459c8a592c3dcd26cb0b": { + "350b22bfafd44f79be68633e136c0dfb": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "11b0b235b07c43cab139597f8eac0c67": { + "35a8fd7150bb46edb34d60cbf520c9a5": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", "state": { - "description_width": "" + "layout": "IPY_MODEL_9bbe8174b9434f839cb56d7e00ac5507", + "style": "IPY_MODEL_7ea1a6e156684f048147f60df76c93c7", + "value": "Calculating control matrix: 100%" } }, - "12f956fdadbd4ff49dd2df51e9cdc717": { + "36b2b7606ebb45a69d015186fc0b28a4": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", "state": { - "description_width": "" + "layout": "IPY_MODEL_05176630e1904d0b9713f2e2417bdf63", + "style": "IPY_MODEL_609cb4f4331f408f97815e06ea6bdd1f", + "value": " 30/30 [00:00<00:00, 1869.76it/s]" } }, - "136453ede153485999b7f057b2c63a52": { + "37bb3053d9584beb8a4b8d06f54d4864": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "144093808f2b4a8588d8951f9c05e294": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_d5c693fe2bbd4f89910f1f661e578423", - "style": "IPY_MODEL_1687e29e6d2e4c77b19537d672c23891", - "value": " 2/2 [00:00<00:00, 25.61it/s]" - } - }, - "1456e508baa04aed8e503cffa077c995": { + "3993d5141d0142ecbc0b75e32b9b3b8c": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { - "layout": "IPY_MODEL_3208ddb4673c485cbd2743c44ba47ac0", - "style": "IPY_MODEL_31d18e05caa24d71936ea58a8e6ffa3b", - "value": "Calculating control matrix: 100%" + "layout": "IPY_MODEL_8e337824e5de442dbfada1291212058b", + "style": "IPY_MODEL_1410056e737d4e7da76fbfcbce161857", + "value": "Calculating control matrix: 100%" } }, - "14a835efb5004d019a1a2c1fa0e3ad76": { + "399cf0199c334f6abf3d339cdc916c5e": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "children": [ - "IPY_MODEL_437733778f8d4e6593862d1fda490bc5", - "IPY_MODEL_dfb822c6241d46d1bc1eb157ac7dfc9c", - "IPY_MODEL_99fe836297c64b0b964a4b413760f0ff" + "IPY_MODEL_3993d5141d0142ecbc0b75e32b9b3b8c", + "IPY_MODEL_4f416cdb60b7417e908c84c36633b6c4", + "IPY_MODEL_6f027939c0c94bcc9dd5fbcf7771a0ed" ], - "layout": "IPY_MODEL_424428d945ed40688b964b7798168ab2" + "layout": "IPY_MODEL_5a854888913348c9866d7870791d23b0" } }, - "14f7aa0f4c784e2983466dace91459a7": { + "39d38ee73cb74a0bab8355fb7c0b243c": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", "state": { - "children": [ - "IPY_MODEL_fc194d12e0cf42c0b2cd27adaec2c57f", - "IPY_MODEL_3ec69d12ab394d07b4faf5744f7d427a", - "IPY_MODEL_0ac95337e6e44731ab6b822a79bc4382" - ], - "layout": "IPY_MODEL_aa8c6fa647f143b39b137bd8ce3ba74c" + "layout": "IPY_MODEL_682437e6738f400fb26b09ad23aeea12", + "style": "IPY_MODEL_acfe93e51ae54161a1471d9672c0dd05", + "value": " 2/2 [00:00<00:00, 33.05it/s]" } }, - "150fb81db5eb4634a513358b514ffe4b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "156b1e2fd3f24f17a045be3f20e19dce": { + "3bb4a521113c462a8e90b329802594c8": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", + "model_module_version": "2.0.0", + "model_name": "FloatProgressModel", "state": { - "children": [ - "IPY_MODEL_3e014b8a68e94f56b0e0cf633fedd7e2", - "IPY_MODEL_1e37730c92134937aab3e17f6c22cb21", - "IPY_MODEL_b554f43b6632476397ba0640396ed8ee" - ], - "layout": "IPY_MODEL_cd3f14397a614baa90acda39ed2ff1c8" + "bar_style": "success", + "layout": "IPY_MODEL_87cbf6a3a82642cd8aeb47ed35f19dff", + "max": 30, + "style": "IPY_MODEL_7364207d46904d649212f8c7337c39b7", + "value": 30 } }, - "157e013cfc054cf4962dafc28408921d": { + "3c2b5d4f27f74b768d836694ad12efbe": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "bar_style": "success", - "layout": "IPY_MODEL_ba6d9407860941419e8b0386ec1d29c8", - "max": 2, - "style": "IPY_MODEL_8efbce9a1f504573a97b4b7bf3bf2a9a", - "value": 2 + "description_width": "", + "font_size": null, + "text_color": null } }, - "1597d46dbce346ebb9a48cb3c7245920": { + "3e6c87ccf630465983bfebcddb7e0cf5": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} + }, + "3f32cc12e86f43418865d47f13c20372": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "15e86b36c19540f09e5e27a721b53121": { + "416ef53c68104526810a55e193abe31e": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", "state": { - "bar_style": "success", - "layout": "IPY_MODEL_794dfc1c1c9a495bb2449b95fc30348c", - "max": 30, - "style": "IPY_MODEL_fd663a306d434b9ea90ed1f8b28bd997", - "value": 30 + "layout": "IPY_MODEL_de15011063fc45fc86704af85d77ee1f", + "style": "IPY_MODEL_620b3cd11df647acb2fe3cad7d014c15", + "value": "Calculating control matrix: 100%" } }, - "1687e29e6d2e4c77b19537d672c23891": { + "41d040ff6a9946c58bac458b7382f65c": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} + }, + "4447bc1a98d74d8695c6944f9c7cf9d0": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, - "169d1f5b964f43d58a353012e207917e": { + "4529502c2fb14537807192f776bab1f5": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, - "16dd86e3489a40fc8a6a7909442a7cdb": { + "47b5aad8a05443eaaf5799dd9222d1c4": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", + "model_module_version": "2.0.0", + "model_name": "FloatProgressModel", "state": { - "layout": "IPY_MODEL_04d16ffa31cb4dc4b4763aa47be5214e", - "style": "IPY_MODEL_ecbc75b3e4ee463f9ab17266e4a30d71", - "value": " 5/5 [00:00<00:00, 24.00it/s]" + "bar_style": "success", + "layout": "IPY_MODEL_bcb1e586b5cf4e24b04b2bca844a21df", + "max": 60, + "style": "IPY_MODEL_fe3a261632c64462b293143678fc5809", + "value": 60 } }, - "17173d9d998c44cd81c3abb5cd285d2a": { + "47fbf0eeb545445cb6c499dc1babd5fe": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "layout": "IPY_MODEL_c30906c13d5c40b8a31361bdc088caf8", - "style": "IPY_MODEL_b28db7e99a874e9ab52b83e271a1fead", - "value": " 2/2 [00:00<00:00, 25.59it/s]" + "description_width": "", + "font_size": null, + "text_color": null } }, - "176bd38e94a04909a279532ab9d92891": { + "49b07d4d16d54249906d742f55896dd2": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "17f0bd1ce216491c852895b2d32ba93e": { + "4aead09f218543509b9d7d5d2954b714": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} + }, + "4c4759c8ec6e4c7eb3ab27cb1c95d764": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "FloatProgressModel", "state": { - "description_width": "" + "bar_style": "success", + "layout": "IPY_MODEL_65e33052c50f477e8f5190d95ed7c053", + "max": 3, + "style": "IPY_MODEL_106dfd8b7b504aa9b1516d561c2199f9", + "value": 3 } }, - "17fd1e857c0047758c864c1690fc7e04": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} + "4cff5353d53547b18748877938ebac86": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", + "state": { + "description_width": "", + "font_size": null, + "text_color": null + } }, - "19e970f2fcf1450ea9df75d8da0935d2": { + "4f416cdb60b7417e908c84c36633b6c4": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", + "model_module_version": "2.0.0", + "model_name": "FloatProgressModel", "state": { - "layout": "IPY_MODEL_dcd131bcdbee42cda77bdf94b637e449", - "style": "IPY_MODEL_8ddaf21b36404a9c9c7dafebd38d877a", - "value": " 2/2 [00:00<00:00, 28.92it/s]" + "bar_style": "success", + "layout": "IPY_MODEL_25b34333486b4421ab83056117e39c31", + "max": 30, + "style": "IPY_MODEL_4447bc1a98d74d8695c6944f9c7cf9d0", + "value": 30 } }, - "19edcdbb500d409381977e5e1a48d605": { + "53dd21ca39e345c383ae88c5ddbb52b4": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "children": [ - "IPY_MODEL_8792682a35b04059ac6d4ede8710404b", - "IPY_MODEL_1bcfa2bdfcfb4b179c3b72c7746f7d07", - "IPY_MODEL_f9197e47c9bd42bc814703fe9b1d701f" + "IPY_MODEL_416ef53c68104526810a55e193abe31e", + "IPY_MODEL_c56c80e44d6141d395d03d53ca4c33b3", + "IPY_MODEL_a35773980dda48abba0bd1b3ba175ce5" ], - "layout": "IPY_MODEL_1597d46dbce346ebb9a48cb3c7245920" + "layout": "IPY_MODEL_4aead09f218543509b9d7d5d2954b714" } }, - "1a3e56f96cfd4b4b926a34f48f86f582": { + "550b69f7cfaf4acca8a679f46987d579": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "layout": "IPY_MODEL_a01a9405d3ce454e8bd523dd950d402c", - "style": "IPY_MODEL_a8df3c100c88450da39240dbd52d926f", - "value": " 5/5 [00:00<00:00, 27.24it/s]" + "description_width": "", + "font_size": null, + "text_color": null } }, - "1a5575397eaf4b4c938d6ac596bc9641": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "1a56f84b580b4dc2b7535b73e3e77600": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "1a59926302f14dfead50a26c06e22632": { + "59644e2e411b4e1ba1fa1f3c66fa72ba": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "description_width": "" + "description_width": "", + "font_size": null, + "text_color": null } }, - "1b787ea3080347f1ac1ce7a7aedc3547": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "1b7f42c8a07b4233a23bc4bce78aa87d": { + "5a854888913348c9866d7870791d23b0": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "1bcfa2bdfcfb4b179c3b72c7746f7d07": { + "5bc3fd3930ec493385df654e09a90c38": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "bar_style": "success", - "layout": "IPY_MODEL_e00b23cf7b544052aa2dee5711f78798", - "max": 3, - "style": "IPY_MODEL_e158f624c7b54d8c82f57bcb91f02eab", - "value": 3 + "description_width": "", + "font_size": null, + "text_color": null } }, - "1c8020ac6beb491bb084c92b003f018c": { + "5c97626d744f4ce0af4dfb14f9e8950a": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", + "model_module_version": "2.0.0", + "model_name": "HBoxModel", "state": { - "layout": "IPY_MODEL_41a9ff084cf14b87a28874de0d686cad", - "style": "IPY_MODEL_ff0462fe7de341908b7c23175115f978", - "value": " 3/3 [00:00<00:00, 32.93it/s]" + "children": [ + "IPY_MODEL_de25a3b0b2464faa8dfd258f4a3ecd99", + "IPY_MODEL_92e10610781c4304905b54f43d28d3de", + "IPY_MODEL_8fc349bd484b4747bef3e031fed45ef8" + ], + "layout": "IPY_MODEL_153bd884cf304007a5bc74bd3c55bfa9" } }, - "1d2d60f573a947c0a748a2ad03baaa79": { + "5cfff8f2ec4345009dc41b2f34a1765d": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "FloatProgressModel", "state": { - "description_width": "" + "bar_style": "success", + "layout": "IPY_MODEL_6d1b3dbfd6e24c7cbc42aab1f6d3db02", + "max": 2, + "style": "IPY_MODEL_ddcdae453e2c4e1ba75e0740fc24bac6", + "value": 2 } }, - "1d2f9aeb88f142228396caa4c96b1eaa": { + "5d4261a2d8c7452a8b28b0c4060fe622": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} + }, + "5df36879fee446e99617db1b4dfd0402": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "layout": "IPY_MODEL_235cc808056f44389190785a740dc2e2", - "style": "IPY_MODEL_8f51abfd5aee4ba3804423b34166e716", - "value": " 3/3 [00:00<00:00, 31.82it/s]" + "description_width": "", + "font_size": null, + "text_color": null } }, - "1d625c2bdc5d4bdebcfc185abed60b6b": { + "5fc194b532694bc582d2b3d390316351": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "description_width": "" + "description_width": "", + "font_size": null, + "text_color": null } }, - "1ddbc27664e3480a95097b18d84d3d1a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} + "609cb4f4331f408f97815e06ea6bdd1f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", + "state": { + "description_width": "", + "font_size": null, + "text_color": null + } }, - "1deccebf14ab4a80a1f91381cbb2a673": { + "61f3960d990047c287a25c604f401eda": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "1e009a5c1d854dcd85b778e6639f7990": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} + "62029e0f1d9e44fca3551f63ca15c525": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", + "state": { + "layout": "IPY_MODEL_49b07d4d16d54249906d742f55896dd2", + "style": "IPY_MODEL_1eaef747c78b4fa6b3f89ee53b57300e", + "value": " 30/30 [00:00<00:00, 1275.55it/s]" + } }, - "1e207ba582d54af7b97eb574478adef5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} + "620b3cd11df647acb2fe3cad7d014c15": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", + "state": { + "description_width": "", + "font_size": null, + "text_color": null + } }, - "1e37730c92134937aab3e17f6c22cb21": { + "641ef1761ab342d98cc5822d4f3e00da": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "bar_style": "success", - "layout": "IPY_MODEL_593e5895341f4faf94f834221c4a3419", - "max": 30, - "style": "IPY_MODEL_07dea98ef8584646998fcf59b8719208", - "value": 30 + "layout": "IPY_MODEL_d55fd441af344cd4a2d9102ad6a5565e", + "max": 3, + "style": "IPY_MODEL_0e101792ff85439685f4dc50cb84e735", + "value": 3 } }, - "1f4ab03ebf5d43698ec0c4ae1369fca4": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "20b1cd618c104994b41a55eee70638a1": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "215d7c3b8daa42d2b3b2ce84853e2817": { + "652bf1315f9e44f9b1ba9ca599a46551": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "children": [ - "IPY_MODEL_cb72cf6a134f4f6a8d68d16d29f27795", - "IPY_MODEL_07f43ebbe385468baafee1e29986bed3", - "IPY_MODEL_ed27c606939a402398b8c3c0e712fbff" - ], - "layout": "IPY_MODEL_295e06437a874ac892f5a311847ae288" + "description_width": "", + "font_size": null, + "text_color": null } }, - "2180b0ddafca4816839dca25a8b6b5f1": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "22012cc5fe1b4c56b847160d9b80ec4f": { + "65e33052c50f477e8f5190d95ed7c053": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "2233f95be1cf4f4293d8d375d4183076": { + "66a7278c2120493eb4858a1edd06e162": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "229fac2e5b474afaa676f3790517d95f": { + "680404eb2e2d4c4bb6bfec1a5f357a83": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { - "layout": "IPY_MODEL_9b7133bf1e3d4e1f8966688568c87d56", - "style": "IPY_MODEL_35fd12f7bf594cf1bc7ef3bed2cf2722", - "value": "Calculating control matrix: 100%" + "layout": "IPY_MODEL_055663dc105a48b3b973f3a98dc224d0", + "style": "IPY_MODEL_550b69f7cfaf4acca8a679f46987d579", + "value": " 16/16 [00:00<00:00, 35.01it/s]" } }, - "235cc808056f44389190785a740dc2e2": { + "682437e6738f400fb26b09ad23aeea12": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "23991a9590d74888ab7b97966f83e552": { + "6856b94a00014910b0371030bfb94f47": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "bar_style": "success", - "layout": "IPY_MODEL_3d5e9479b1a64bb88e625ba4db4a1b62", - "max": 3, - "style": "IPY_MODEL_c0fd5b4f28594a5c9d7ec81d4b024066", - "value": 3 + "layout": "IPY_MODEL_7def18dddaeb4a70bf3f34366c6e4387", + "max": 5, + "style": "IPY_MODEL_4529502c2fb14537807192f776bab1f5", + "value": 5 } }, - "23b3fd9af63e46b8a6c8ea0228e86804": { + "69f15a6e28b1474592cc75a8187a9958": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "children": [ - "IPY_MODEL_cd4ecd42f7494d0e84c2d302f1542b29", - "IPY_MODEL_2527af7f7b104ca49d68969627044ba3", - "IPY_MODEL_5840d1c7bc134aaf936f2878fc6ed23f" - ], - "layout": "IPY_MODEL_321efe36a61c410291175ff4ede6d999" + "description_width": "", + "font_size": null, + "text_color": null } }, - "23fe88c79a3446bfbc75afd4fe376799": { + "6a3789d730b7468db405dde18b427430": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "description_width": "" + "description_width": "", + "font_size": null, + "text_color": null } }, - "242b01546a7e47ca9c6a4efd273269de": { + "6a837460fd954b65becb63aa84fcf443": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { - "layout": "IPY_MODEL_c3a4a6bff9e4478faf5a6f8231f6a1f6", - "style": "IPY_MODEL_d110fcea04a44c38a6584629c209c7e1", - "value": " 3/3 [00:00<00:00, 31.79it/s]" + "layout": "IPY_MODEL_98aea6d943484cd2a1f7b611edff56ab", + "style": "IPY_MODEL_0177c9c24e5645b0b9c8d47618dc7804", + "value": " 2/2 [00:00<00:00, 21.57it/s]" } }, - "245a6e9dd8f745fba06b2808ef2baa6c": { + "6c0982a9e62244a4b63efd4c52c17c84": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", + "model_module_version": "2.0.0", + "model_name": "HBoxModel", "state": { - "bar_style": "success", - "layout": "IPY_MODEL_8fafb1e8ccfe40b98917f428acb48d2d", - "max": 30, - "style": "IPY_MODEL_6769aa585b2042bd9db2ec47b62fbb48", - "value": 30 + "children": [ + "IPY_MODEL_35a8fd7150bb46edb34d60cbf520c9a5", + "IPY_MODEL_0c03cdca862a4a2283716114dd62953e", + "IPY_MODEL_36b2b7606ebb45a69d015186fc0b28a4" + ], + "layout": "IPY_MODEL_bfb0c2881e5e4448b3cf6fbab2b14fde" } }, - "24b82a6f4c154cf8ac3efcd4daa91aa8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "24f7da1ab50a43d6bcfc63445ea1e6dc": { + "6c549ef4f8224047a0ad5280b831cc99": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { - "layout": "IPY_MODEL_77ac2420c36d40509833fe07668494dd", - "style": "IPY_MODEL_78984ba75f4f4315ab9204f17f678a28", - "value": "Calculating control matrix: 100%" + "layout": "IPY_MODEL_350b22bfafd44f79be68633e136c0dfb", + "style": "IPY_MODEL_945c9acc01c04d90b671fadd98d8414d", + "value": "Calculating control matrix: 100%" + } + }, + "6ca80aecf80144c6b714d6a971b7f304": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", + "state": { + "description_width": "", + "font_size": null, + "text_color": null } }, - "24f7f1aaedbb4bc296e6ad926ff897a7": { + "6d1b3dbfd6e24c7cbc42aab1f6d3db02": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} + }, + "6de95e18ef744b91b0689c727cd6ea75": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "2527af7f7b104ca49d68969627044ba3": { + "6f027939c0c94bcc9dd5fbcf7771a0ed": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", "state": { - "bar_style": "success", - "layout": "IPY_MODEL_73a184f2117e42dc96fcce550a209d55", - "max": 60, - "style": "IPY_MODEL_70591847f2c34732a11a0034571cd03b", - "value": 60 + "layout": "IPY_MODEL_ffd4ade22695421692094b3b094db178", + "style": "IPY_MODEL_b4b221ea18b240c297278a1528340d42", + "value": " 30/30 [00:00<00:00, 38.06it/s]" } }, - "252fba11d13e425b85f029fc5194497c": { + "72873ec3225f4df783a40921e13271fd": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", + "model_module_version": "2.0.0", + "model_name": "HBoxModel", "state": { - "layout": "IPY_MODEL_eb0b327ccdbd48b8800c39a43033d1b8", - "style": "IPY_MODEL_d7c3c0e17bc04d1ca90e09778892f72e", - "value": " 3/3 [00:00<00:00, 31.83it/s]" + "children": [ + "IPY_MODEL_748671e536b34a5bbbe80f7005aa84ec", + "IPY_MODEL_c6da42199bcb417395cc1c423c506b8f", + "IPY_MODEL_8f829b1482dc4b15b77bfab754eea9e1" + ], + "layout": "IPY_MODEL_3f32cc12e86f43418865d47f13c20372" } }, - "2545ca16b7874321bba72ae4bb5e5c17": { + "7364207d46904d649212f8c7337c39b7": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, - "2599432f29a842f8a34063828de6b5b3": { + "748671e536b34a5bbbe80f7005aa84ec": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { - "layout": "IPY_MODEL_31a5128fe58f44dabdde516b5f7c3aac", - "style": "IPY_MODEL_c2bbae1ae76441efb9ba30d5340d659d", - "value": " 2/2 [00:00<00:00, 26.51it/s]" + "layout": "IPY_MODEL_be8fe937ddea4249ac24ec52175ba275", + "style": "IPY_MODEL_5bc3fd3930ec493385df654e09a90c38", + "value": "Calculating control matrix: 100%" } }, - "26088cd1981149e1bb2a791657351aec": { + "74cb5c0f5ab14a928115aa6b27a21057": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "263302afee2d4a74987b9e5a5e6df962": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", "state": { - "description_width": "" + "layout": "IPY_MODEL_66a7278c2120493eb4858a1edd06e162", + "style": "IPY_MODEL_d82c13d8b06849e1a7953d6d95288204", + "value": "Calculating control matrix: 100%" } }, - "2647f0e25c78448cab40555ca82f9346": { + "74dee86f20034f02bea1bca36f847136": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "26da0d1f36654e998b2e53f173e9ae2f": { + "76b3456e051c4ea9950f51192977fd19": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, - "26f55c95e8144c0e92e857cce31bcf5d": { + "77c9e63d35fb4a6494b7705472d88ffe": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "HBoxModel", "state": { - "description_width": "" + "children": [ + "IPY_MODEL_2f50b102e10d4b74ae4a45603d2787ba", + "IPY_MODEL_de9e4799a3d74767a1685536c2e6aabd", + "IPY_MODEL_39d38ee73cb74a0bab8355fb7c0b243c" + ], + "layout": "IPY_MODEL_9815676e75ca41d0a59d30a58d906ce3" } }, - "283a7bfd40b547c281c450a24da87ecd": { + "782678eb778144e488bcf233e8d13616": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "289398104bbb48219849e9a26c39c8b5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_aaaeb4c5ac95478582a46fe58a3929d4", - "style": "IPY_MODEL_7c243aae4f164fbc9e03e6a3378a28d9", - "value": " 2/2 [00:00<00:00, 25.42it/s]" - } - }, - "2919609114b44046bf62b6a92f799a3b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_84c7366d25f044c698063c07a8f07690", - "style": "IPY_MODEL_00c579dc103044bf9951325edb0196a0", - "value": " 30/30 [00:00<00:00, 479.86it/s]" - } - }, - "295e06437a874ac892f5a311847ae288": { + "789422af6bbf4729980d3a7a4c5c3f8e": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "29b1339f4a0a44d88ce202a2f34e7f70": { + "79f32a6fd84444c78c74e8bc61484eb9": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, - "29bb84e9f7664aca843d8d1e02407323": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "29bd0a26c3364c0b8c46db644e982ffc": { + "7a11df04499b4a1682fa0504de9cc7e0": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, - "29d83c053bc045af9b10eaf0085356b0": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "2a4e0054e41a4a98b46072e7004a1519": { + "7be30604b890439984f8720b33a8f9c9": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", + "model_module_version": "2.0.0", + "model_name": "ProgressStyleModel", "state": { - "bar_style": "success", - "layout": "IPY_MODEL_07538e2bc95d456eb50c8980e3b78fbe", - "max": 120, - "style": "IPY_MODEL_3b5698b06f2a4dffb78862a02d88ab03", - "value": 120 + "description_width": "" } }, - "2ad3302737fa4bfdbb116c23a02c5161": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "2b0f62df9f0d45948ef10767069f872b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "2b60aa5056bb4bcc93fdaa56fe1e27e7": { + "7bed1f6ee04e4eea91e7788f94ede4f4": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "description_width": "" + "description_width": "", + "font_size": null, + "text_color": null } }, - "2b8d9ede7f8f42b89b2dc624c7a8dc27": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "2bccd66c63944cefb5f4ebb23810daa1": { + "7c2e4d065ac74f279e34ec9e4979c943": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "2be217287e6a46a684dd80c1b4a1cc1d": { + "7d5696968a1c4c8d8ce1df010da88574": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "2d016294c72741e6bf1fb3368d3078e9": { + "7def18dddaeb4a70bf3f34366c6e4387": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "2da5c19ed62e4d82a2ca209b47d3d159": { + "7e15accbea2b4d79a2abbeafc75e8bf6": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "children": [ - "IPY_MODEL_e1bfcb5e9bd74ac9be5ee67a8979ecb2", - "IPY_MODEL_35d3bcbc85b045fd86440d031bd77de1", - "IPY_MODEL_eff29526874a4b458315519e5cb1f628" + "IPY_MODEL_6c549ef4f8224047a0ad5280b831cc99", + "IPY_MODEL_5cfff8f2ec4345009dc41b2f34a1765d", + "IPY_MODEL_2a7aef4b8b7b46409e370c33a6fb3db7" ], - "layout": "IPY_MODEL_77e4b0c4a68548fca2396ffb430c9943" - } - }, - "2df2b72a2dbb485181fef3d500c5c28b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" + "layout": "IPY_MODEL_7d5696968a1c4c8d8ce1df010da88574" } }, - "2e0676255e434b0e93a90ae439ed4090": { + "7e7aa42439874740b133061638a9ff0f": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", + "model_module_version": "2.0.0", + "model_name": "HBoxModel", "state": { - "layout": "IPY_MODEL_1f4ab03ebf5d43698ec0c4ae1369fca4", - "style": "IPY_MODEL_dd6941c12f26402da606dde2fd8d6798", - "value": "Calculating control matrix: 100%" + "children": [ + "IPY_MODEL_fe7a7b3e56fa459a8c72fd0287ec5ad8", + "IPY_MODEL_92253f6fa153477ab6f3c77efcbd23c4", + "IPY_MODEL_62029e0f1d9e44fca3551f63ca15c525" + ], + "layout": "IPY_MODEL_6de95e18ef744b91b0689c727cd6ea75" } }, - "2e49ea08b8194c16a2c45dded6e9c162": { + "7ea1a6e156684f048147f60df76c93c7": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "layout": "IPY_MODEL_795b0e7b14dc44eb830ede1c8ff84662", - "style": "IPY_MODEL_ec68f00444ca4152a728f4bf16f423ea", - "value": " 16/16 [00:00<00:00, 36.40it/s]" + "description_width": "", + "font_size": null, + "text_color": null } }, - "2ed4ada4f6364285b70fd3f25fad7e7a": { + "7ee4ad72ccd74e0da967f3cc9ad9149d": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "HBoxModel", "state": { - "description_width": "" + "children": [ + "IPY_MODEL_d26979ee5ef6453eae01bef69c26e3df", + "IPY_MODEL_3407797c13e84441b57486322e72017f", + "IPY_MODEL_e3a37b48cdae4460a097901b9f52a999" + ], + "layout": "IPY_MODEL_b61d8b4a1c30411bb67aa6624da225c8" } }, - "2f04d4fd6ad44c68b705cd1f7f206872": { + "80cdcfe648c644cebb5b5e68104e4c8b": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "description_width": "" + "description_width": "", + "font_size": null, + "text_color": null } }, - "2f52f6946d1b486abecca2818dc452bc": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } + "83e646d7acc8471cbcc874af3a72f8b2": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} }, - "2f6261c75ef34a8fbbdfcc173bc694e4": { + "84d73dfb39554f1aa3945d077107aae5": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "description_width": "" + "description_width": "", + "font_size": null, + "text_color": null } }, - "2f644ed40ed04f5d8f4bf64299fa0291": { + "85d4848ab107449db622b39defde3be2": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "2f9cf232731247d680bace3cd0888926": { + "8628541759414223927dfd8094377037": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "2fff89646b1d4bab804c731ea7bbbf73": { + "875ab3bea11440948c8d84eb4ddc05a0": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", + "model_module_version": "2.0.0", + "model_name": "FloatProgressModel", "state": { - "children": [ - "IPY_MODEL_358cf8a22f4f44b0abf562e39cd9104a", - "IPY_MODEL_74f1ffe99de14a09bd57a33e7da1705c", - "IPY_MODEL_a6ed7328e08d4e3d996bbf4107ee4c0a" - ], - "layout": "IPY_MODEL_7ac3a3226f56435e84a2fb2b90bd1378" + "bar_style": "success", + "layout": "IPY_MODEL_ece91a83b47d4a27b7a3b593b8e552ef", + "max": 30, + "style": "IPY_MODEL_de65089c33e646b38efd7be143b29662", + "value": 30 } }, - "300beeaf4f4544df9ec942551b314383": { + "87cbf6a3a82642cd8aeb47ed35f19dff": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "30d2ce055ebb4dff9296908b12a20c3f": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} + "88c124fb2af44a1aa084267830070b56": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", + "state": { + "description_width": "", + "font_size": null, + "text_color": null + } }, - "30f8ae7e8e804f46b689919701e6b0a1": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "310c653bc6244b50bfbfd9bff241d9ed": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "31561dd575aa41bea67c396ce4b23d17": { + "8a95e64c0cdb43fc97cd8b27da616d02": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "children": [ - "IPY_MODEL_d918e00465f94094815000016507bc7d", - "IPY_MODEL_c590f19799de4feab3ac89c4e24349b4", - "IPY_MODEL_1d2f9aeb88f142228396caa4c96b1eaa" + "IPY_MODEL_25e3549f76a54673a24771c7002d2959", + "IPY_MODEL_641ef1761ab342d98cc5822d4f3e00da", + "IPY_MODEL_f661a842f7c44ce481a1606155d9c952" ], - "layout": "IPY_MODEL_6cbc06a65a354156a445594678952e5f" + "layout": "IPY_MODEL_b6a698e2d53e42bf867fdcc57619a24e" } }, - "31a5128fe58f44dabdde516b5f7c3aac": { + "8c28784e26734342b891515979aab1a3": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "31b1bea4d5f64a1c8be8e40aa68258d9": { + "8da8d870c09d4e48b3769b6403c53ef0": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", + "model_module_version": "2.0.0", + "model_name": "ProgressStyleModel", "state": { - "bar_style": "success", - "layout": "IPY_MODEL_cfbeef04ad6541a7bb5f3f81737fa260", - "max": 2, - "style": "IPY_MODEL_e1afb3765e5f4202b868fead67775a47", - "value": 2 + "description_width": "" } }, - "31d18e05caa24d71936ea58a8e6ffa3b": { + "8e337824e5de442dbfada1291212058b": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} + }, + "8ece70c38f584119bc9282e78c809047": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "description_width": "" + "description_width": "", + "font_size": null, + "text_color": null } }, - "31dbdea34ac94c6b94b398ed85518abc": { + "8f829b1482dc4b15b77bfab754eea9e1": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { - "layout": "IPY_MODEL_b2f263e3c07145f0ab3b9ac0ce858822", - "style": "IPY_MODEL_b2a4c2e43f844147964f52c5858abc1d", - "value": "Calculating control matrix: 100%" + "layout": "IPY_MODEL_a71b2c773cc741278bd7b8f859a95aee", + "style": "IPY_MODEL_02891745f0f44e97bbf9456a326d0e8d", + "value": " 16/16 [00:00<00:00, 36.07it/s]" } }, - "3208ddb4673c485cbd2743c44ba47ac0": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "321efe36a61c410291175ff4ede6d999": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "33b810ae2bc5499cb796060e4722e463": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "349661b622a447f9bc81d1e0091dc721": { + "8fc349bd484b4747bef3e031fed45ef8": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", "state": { - "description_width": "" + "layout": "IPY_MODEL_3374b4a68c8c4c80992d55d0ea571338", + "style": "IPY_MODEL_8ece70c38f584119bc9282e78c809047", + "value": " 30/30 [00:00<00:00, 47.28it/s]" } }, - "354debb7b5ee4481bc4600d4f55c16c3": { + "9210417757004d579eba4576566f94a8": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "children": [ - "IPY_MODEL_361e673ec7c442b58b17113b6a054569", - "IPY_MODEL_fd530482a7f44f0bbb2229b2f93e703a", - "IPY_MODEL_d9d33f0f8fbc4064bce46ca023ff3bac" + "IPY_MODEL_29503d8763d84f0cbac26208764b5d1f", + "IPY_MODEL_3bb4a521113c462a8e90b329802594c8", + "IPY_MODEL_03f4cdfced7548bcaf6c62d98694040e" ], - "layout": "IPY_MODEL_79305bde213a4481b2dc15c0cc4ac7b6" + "layout": "IPY_MODEL_ff9b333bf3224113a8028932a3fd659d" + } + }, + "921a294c4cb3411abcfa917cbf79c926": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", + "state": { + "layout": "IPY_MODEL_2423295cc82f418383a052cee775c397", + "style": "IPY_MODEL_5df36879fee446e99617db1b4dfd0402", + "value": " 2/2 [00:00<00:00, 30.25it/s]" } }, - "355c7a22c98f437d8fd6ba41058acde8": { + "92253f6fa153477ab6f3c77efcbd23c4": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "bar_style": "success", - "layout": "IPY_MODEL_4faba091722041489828b564483fbe0c", - "max": 16, - "style": "IPY_MODEL_2545ca16b7874321bba72ae4bb5e5c17", - "value": 16 + "layout": "IPY_MODEL_ed09362e1fe843e686bf7577d06058e9", + "max": 30, + "style": "IPY_MODEL_ad96f64c7c9f4ce086ae85d671f663b5", + "value": 30 } }, - "3579427c8634428b9272af5650a9f7e4": { + "92303415cdce4f2eb40d2a8a2e10eb2a": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "358cf8a22f4f44b0abf562e39cd9104a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_81b9c4936b06487c8ffde57fd105af44", - "style": "IPY_MODEL_6bc978850e9f4aaf864d9c19dcbd4a9e", - "value": "Calculating control matrix: 100%" - } - }, - "35964c8d180c4fbc8a5a0098dda8fff1": { + "923fa07a5f8a42a386d0d509895ba5c7": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "description_width": "" + "description_width": "", + "font_size": null, + "text_color": null } }, - "35d3bcbc85b045fd86440d031bd77de1": { + "92e10610781c4304905b54f43d28d3de": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "bar_style": "success", - "layout": "IPY_MODEL_aabbe9baf8f14548b7be49e3438ef9bb", - "max": 60, - "style": "IPY_MODEL_53b7d336f0684013be7fc692549d878e", - "value": 60 - } - }, - "35fd12f7bf594cf1bc7ef3bed2cf2722": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" + "layout": "IPY_MODEL_c85e454906784ec4acf7743397009643", + "max": 30, + "style": "IPY_MODEL_ebf9868320aa4835935feb232d2843c1", + "value": 30 } }, - "361e673ec7c442b58b17113b6a054569": { + "9445045fea29464189fd8e0018dd3e4e": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { - "layout": "IPY_MODEL_2f644ed40ed04f5d8f4bf64299fa0291", - "style": "IPY_MODEL_4082e317339e4e1388c9bc9156c9269a", - "value": "Calculating control matrix: 100%" + "layout": "IPY_MODEL_af7b6ba6b55c466296172ea02e086df3", + "style": "IPY_MODEL_d0d6cc9849004874bd636407186764ac", + "value": "Calculating control matrix: 100%" } }, - "3724b86324744dcf847b51e00dbe4594": { + "945c9acc01c04d90b671fadd98d8414d": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "bar_style": "success", - "layout": "IPY_MODEL_176bd38e94a04909a279532ab9d92891", - "max": 30, - "style": "IPY_MODEL_29b1339f4a0a44d88ce202a2f34e7f70", - "value": 30 + "description_width": "", + "font_size": null, + "text_color": null } }, - "373b9a1e07e343d68ba1aa12b9aad549": { + "94726abda57240b99db4ce4b59f2cd10": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "377e3936815f40549ae482222137b878": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } + "94934ee0dd634b01aa100561140b6b70": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} + }, + "958f68af2cfc47fd92edc3f6fd242081": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} + }, + "95e7b72b24a84ac8bf789cea47c535a0": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} }, - "37cb1947f6d4401281bd860a3a8193e4": { + "969ebf3655ec48cdbdc59fed9f52ae39": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", "state": { - "bar_style": "success", - "layout": "IPY_MODEL_8cbf2f4720b04a41911c745da00f4599", - "max": 30, - "style": "IPY_MODEL_7f03fc5b9b2b403ea74b57b2fe0ef713", - "value": 30 + "layout": "IPY_MODEL_83e646d7acc8471cbcc874af3a72f8b2", + "style": "IPY_MODEL_5fc194b532694bc582d2b3d390316351", + "value": " 5/5 [00:00<00:00, 28.55it/s]" } }, - "381ba87cd06d477c8581cd181b704da1": { + "9815676e75ca41d0a59d30a58d906ce3": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} + }, + "98aea6d943484cd2a1f7b611edff56ab": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} + }, + "9946b84d6f9645a79869e3cf65990c0a": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} + }, + "99dc8a890cc2465693e3490f5603bab9": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "description_width": "" + "description_width": "", + "font_size": null, + "text_color": null } }, - "3824392d9c204bf188ff8ef5c0cf2cb6": { + "99f029a0fbd7468198b77b3355269cb3": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} + }, + "9bbe8174b9434f839cb56d7e00ac5507": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} + }, + "9d5f84a419164186970a1635b25993dc": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { - "layout": "IPY_MODEL_c0a27b1c91f64ac682b190a76c08711f", - "style": "IPY_MODEL_464f85e06b24484183f8d6cd5cfce35e", - "value": "Calculating control matrix: 100%" + "layout": "IPY_MODEL_00c9a546413543c2aae5fc69aeaa8b32", + "style": "IPY_MODEL_80cdcfe648c644cebb5b5e68104e4c8b", + "value": " 60/60 [00:01<00:00, 61.07it/s]" } }, - "39258bd57c8949bc8998e4f7c6dc4baa": { + "a026aefeda2a4755a3aca6cc52834115": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "children": [ - "IPY_MODEL_026ef4cf3c7447369b2ecea71d14cdee", - "IPY_MODEL_817f3627be1a4f78a6da2158ba832127", - "IPY_MODEL_b9d5aad23ac3451a857c4de89dab5d84" - ], - "layout": "IPY_MODEL_f27e5ddadf214b89a9a1861b457f281d" + "description_width": "", + "font_size": null, + "text_color": null } }, - "3950c08630424fbb9e2ec03528fdd90c": { + "a2917f1ac7e549f0af9c798297f2c227": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", + "model_module_version": "2.0.0", + "model_name": "ProgressStyleModel", "state": { - "layout": "IPY_MODEL_b8479a96a6084426a41f3ca6eeb85f3d", - "style": "IPY_MODEL_ab3f4ed0216c492ca8edbb670b1cc494", - "value": " 30/30 [00:00<00:00, 38.44it/s]" + "description_width": "" } }, - "398ba364d4204fbcad9dc37f96ace5a0": { + "a296ebc2778d4059aebd09e672ee3e72": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} + }, + "a35773980dda48abba0bd1b3ba175ce5": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { - "layout": "IPY_MODEL_b79138aadd6443488bb9c339d97fa87e", - "style": "IPY_MODEL_4f4a9a41c0ee4fefa8257233052d9a05", - "value": " 3/3 [00:00<00:00, 23.92it/s]" + "layout": "IPY_MODEL_26d02edea6834e7a8e298cdb9f248ffa", + "style": "IPY_MODEL_88c124fb2af44a1aa084267830070b56", + "value": " 3/3 [00:00<00:00, 33.14it/s]" } }, - "39e58fee7e9d407abce44f2e4ea9d730": { + "a56fd13d72cf4aa2a14122582ab08444": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "description_width": "" + "description_width": "", + "font_size": null, + "text_color": null } }, - "39e8a5e0588247ff994f8a5ff2d02254": { + "a71b2c773cc741278bd7b8f859a95aee": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "3a2e1c68c45a4875b2de65c29e53b168": { + "a812574b7c5540689199b08e0cbbf13a": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "3a44d17e1242496490ec0ed368f02ee2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_fa1a4d1af90f4364a698fba5522d62c4", - "max": 60, - "style": "IPY_MODEL_c5cbe32f1b634fe5b6bdf1157a29a465", - "value": 60 - } + "a88ac6b2a66f4a6abf5425bbab971f0b": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} }, - "3a4c0c11eda947cc8ea4f8ce63b6733f": { + "a97a81d502b14a9d8d493db4a4840acb": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "3a575aca158047d583c8223b9606b51c": { + "acfe93e51ae54161a1471d9672c0dd05": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", + "state": { + "description_width": "", + "font_size": null, + "text_color": null + } + }, + "ad1cfe96816540fb83b93d2d7906c665": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "bar_style": "success", - "layout": "IPY_MODEL_86938c27d4314740931a60920a0507b5", - "max": 2, - "style": "IPY_MODEL_f0063a51a0ed494c9427587d4422c425", - "value": 2 + "layout": "IPY_MODEL_d2995f7850084d1fa00a178f70d57b33", + "max": 120, + "style": "IPY_MODEL_79f32a6fd84444c78c74e8bc61484eb9", + "value": 120 } }, - "3b5698b06f2a4dffb78862a02d88ab03": { + "ad96f64c7c9f4ce086ae85d671f663b5": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, - "3b5ce768ccf440ec8b89f2dbdda591f3": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} + "af2d03b2d8ff43e18f99ee8c1c7d5e7d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HBoxModel", + "state": { + "children": [ + "IPY_MODEL_346fdb19439b40d793f6c22f44ac3dea", + "IPY_MODEL_0e4b2c241e8f4ccd844f8243dc3be071", + "IPY_MODEL_c88eea969e6b47ac98bc0d7d35627541" + ], + "layout": "IPY_MODEL_92303415cdce4f2eb40d2a8a2e10eb2a" + } }, - "3bd6a02c2fae42bda82ce9cc919cb371": { + "af7b6ba6b55c466296172ea02e086df3": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "3bf12235c69c4702bcc437e7e34783fc": { + "b0452831fbe44a87aad5e159f566b6e0": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, - "3d5e9479b1a64bb88e625ba4db4a1b62": { + "b0df64aa7da14d5588025f7a7ca4895d": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "3ddc6ff964854a1e9f0944813b840323": { + "b4b221ea18b240c297278a1528340d42": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "bar_style": "success", - "layout": "IPY_MODEL_1ddbc27664e3480a95097b18d84d3d1a", - "max": 3, - "style": "IPY_MODEL_349661b622a447f9bc81d1e0091dc721", - "value": 3 + "description_width": "", + "font_size": null, + "text_color": null } }, - "3e014b8a68e94f56b0e0cf633fedd7e2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_0e2ebe22cb9d4c20a8db50e717fe31a5", - "style": "IPY_MODEL_0ccda0e3eb394a168c60d067688e88a1", - "value": "Calculating control matrix: 100%" - } + "b4bbb1ade42f4ff384b92a24c6549052": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} }, - "3e6542230fc04b2494422cb57d2a97e6": { + "b4e2cc37faf44a159d498f15ef4b83e8": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { - "layout": "IPY_MODEL_f4775592ee29463e9ae848c176723321", - "style": "IPY_MODEL_8bf7b3d14baa4f3d9eea8db12c106eab", - "value": " 30/30 [00:00<00:00, 34.99it/s]" + "layout": "IPY_MODEL_94726abda57240b99db4ce4b59f2cd10", + "style": "IPY_MODEL_331b1dd494e04644b529dc772b5916ad", + "value": " 3/3 [00:00<00:00, 32.96it/s]" } }, - "3ec69d12ab394d07b4faf5744f7d427a": { + "b52ef4a42aef474399a3ba1810c40418": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "bar_style": "success", - "layout": "IPY_MODEL_9f6adf981a6b4f059fb5cfe6ba229ae0", - "max": 5, - "style": "IPY_MODEL_2f04d4fd6ad44c68b705cd1f7f206872", - "value": 5 + "description_width": "", + "font_size": null, + "text_color": null } }, - "3fd089fd31c0426aad33fcf0d12e5eb2": { + "b61d8b4a1c30411bb67aa6624da225c8": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} + }, + "b6a698e2d53e42bf867fdcc57619a24e": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "3fdbdbf4fe414e8a86953a71fd191e40": { + "bb07b7f07c594206af2d045f18571543": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "bar_style": "success", - "layout": "IPY_MODEL_a1f64e18c678490cb1dfbab45aea8f0e", + "layout": "IPY_MODEL_7c2e4d065ac74f279e34ec9e4979c943", "max": 2, - "style": "IPY_MODEL_f108dd0ea0334e3cb2e0cf1b43219c0b", + "style": "IPY_MODEL_c8ddcb2231b3404d8c76a0b3a23449fd", "value": 2 } }, - "3fe0a2ad95e349e3becf3eda40644cab": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_46d2ed5890e9458fbf12b10507550f73", - "style": "IPY_MODEL_f735b092000d4b64b46b4633a2506078", - "value": "Calculating control matrix: 100%" - } - }, - "3ff07f00479149d4b02a73d85c8633af": { + "bb32daeaee894a4ab9e7b42112ba7734": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "children": [ - "IPY_MODEL_8ea32593c539493e84d587d55637475e", - "IPY_MODEL_8bea0f0f006f4e17a119486232052d4d", - "IPY_MODEL_eb82b92f84f949a48f30888cbdbc5b38" + "IPY_MODEL_e6b4c47f32894a40982960c116abc32e", + "IPY_MODEL_47b5aad8a05443eaaf5799dd9222d1c4", + "IPY_MODEL_9d5f84a419164186970a1635b25993dc" ], - "layout": "IPY_MODEL_aa506655e2cf490d81b8e5f70458b4e8" + "layout": "IPY_MODEL_a88ac6b2a66f4a6abf5425bbab971f0b" } }, - "4067833fd7494ea7b927941fe9bed45e": { + "bcb1e586b5cf4e24b04b2bca844a21df": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "4082e317339e4e1388c9bc9156c9269a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "40cfae6982eb4ac1b1a625dd459268c3": { + "bdfa412613b148e984d1ad65682d9541": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { - "layout": "IPY_MODEL_f3474445de4b4bb2bcb8aa19136d94b0", - "style": "IPY_MODEL_bfb0b7b181fe406daf46a51fa05ca82b", - "value": "Calculating control matrix: 100%" + "layout": "IPY_MODEL_9946b84d6f9645a79869e3cf65990c0a", + "style": "IPY_MODEL_6ca80aecf80144c6b714d6a971b7f304", + "value": " 3/3 [00:00<00:00, 32.57it/s]" } }, - "4174c2e17fe84a73a012ffb63f67a980": { + "be8fe937ddea4249ac24ec52175ba275": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "41a9ff084cf14b87a28874de0d686cad": { + "bfb0c2881e5e4448b3cf6fbab2b14fde": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "420733c8530245948e501de025186159": { + "c085db41f1b54093aead0579bcbd0c68": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "424428d945ed40688b964b7798168ab2": { + "c2f93bbdd2da4aeab014c8166da84cce": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", + "state": { + "layout": "IPY_MODEL_99f029a0fbd7468198b77b3355269cb3", + "style": "IPY_MODEL_a56fd13d72cf4aa2a14122582ab08444", + "value": "Calculating control matrix: 100%" + } + }, + "c40f1a70daaa431aae6dd839aef0a207": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "4268cb9f7d764d608f9123bf7ed3bfd3": { + "c56c80e44d6141d395d03d53ca4c33b3": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", + "model_module_version": "2.0.0", + "model_name": "FloatProgressModel", "state": { - "children": [ - "IPY_MODEL_f544f88ea37d4485bd92b3ad1d5842bf", - "IPY_MODEL_3a575aca158047d583c8223b9606b51c", - "IPY_MODEL_e22cd519fc8745a0af1352afbfbdae96" - ], - "layout": "IPY_MODEL_d2b871d5c0424bf3a09b972b7ce41f8e" + "bar_style": "success", + "layout": "IPY_MODEL_b4bbb1ade42f4ff384b92a24c6549052", + "max": 3, + "style": "IPY_MODEL_7be30604b890439984f8720b33a8f9c9", + "value": 3 } }, - "42cee81f9a7745bc889eed5a3d953847": { + "c67bca3a52764bd189a9eb087c09b2a7": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "4302efacb00c4d069e905d7858f6bf34": { + "c6da42199bcb417395cc1c423c506b8f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "FloatProgressModel", + "state": { + "bar_style": "success", + "layout": "IPY_MODEL_189e9b2495dc45f986aaf6b3719f689c", + "max": 16, + "style": "IPY_MODEL_2e469f51f9d84bf29fb4ea796b3a3f52", + "value": 16 + } + }, + "c78ee29fae714c118b3a0a4a13aadcb2": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "4354218d8ef8484d8d94fa27ff1ecd2b": { + "c85e454906784ec4acf7743397009643": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "437733778f8d4e6593862d1fda490bc5": { + "c88eea969e6b47ac98bc0d7d35627541": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { - "layout": "IPY_MODEL_440b5724b5d44b62af67433829bb9ab5", - "style": "IPY_MODEL_b50d0ddc8149451588f97b61448e5550", - "value": "Calculating control matrix: 100%" + "layout": "IPY_MODEL_f858a30df67f4f488deb50570bd873ba", + "style": "IPY_MODEL_99dc8a890cc2465693e3490f5603bab9", + "value": " 3/3 [00:00<00:00, 38.40it/s]" } }, - "438e943baed84eb9b93b026de29fd830": { + "c8ddcb2231b3404d8c76a0b3a23449fd": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, - "43f23d4da1894aa5881a40220b28b552": { + "c9ac12412af7433fa05900ed9ddff0df": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} + }, + "cc570e0adeae4bdf830e3d00429f9769": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} + }, + "cdfc82c2f29a46febe06a231509ca570": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", + "state": { + "layout": "IPY_MODEL_1debe5d387d04b54915639e0aa6da591", + "style": "IPY_MODEL_f4fad103973344aaa0ed4b419194a0cc", + "value": "Calculating control matrix: 100%" + } + }, + "cf6f48bbeea94899a48257a5bb4047ab": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", + "state": { + "layout": "IPY_MODEL_c9ac12412af7433fa05900ed9ddff0df", + "style": "IPY_MODEL_fb54a0f1999c4a4b8e15c0acc4931481", + "value": " 120/120 [00:02<00:00, 58.30it/s]" + } + }, + "cff7f6179780447b8d68a3b70f9f519c": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, - "440b5724b5d44b62af67433829bb9ab5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} + "d02068daa27c4296886199f754948cc1": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", + "state": { + "description_width": "", + "font_size": null, + "text_color": null + } }, - "4443ddf39839491196f72f71d266da08": { + "d0d6cc9849004874bd636407186764ac": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "description_width": "" + "description_width": "", + "font_size": null, + "text_color": null + } + }, + "d26979ee5ef6453eae01bef69c26e3df": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", + "state": { + "layout": "IPY_MODEL_789422af6bbf4729980d3a7a4c5c3f8e", + "style": "IPY_MODEL_923fa07a5f8a42a386d0d509895ba5c7", + "value": "Calculating control matrix: 100%" } }, - "44457a2a9cd44d02a6001b55bacc8705": { + "d2995f7850084d1fa00a178f70d57b33": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": {} + }, + "d55fd441af344cd4a2d9102ad6a5565e": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "449f23daf5f84418b5aaa78f99eb276a": { + "d70ecdc45c86420799e79f4226924d3f": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "children": [ - "IPY_MODEL_7f7ff86687b54893b8ead186f3ab15b8", - "IPY_MODEL_f6d55b00e76f478e9b806cb047d6a36c", - "IPY_MODEL_f2ebd381f7be4f5c8ff01a16b2e441f7" + "IPY_MODEL_2a7cfaec4c3d4d849276341453b78f8f", + "IPY_MODEL_bb07b7f07c594206af2d045f18571543", + "IPY_MODEL_921a294c4cb3411abcfa917cbf79c926" ], - "layout": "IPY_MODEL_0f3f6542d93349f3ae45d2c86e0755f4" + "layout": "IPY_MODEL_782678eb778144e488bcf233e8d13616" } }, - "44a03720dd8e40edbd98e0bd30cc8da1": { + "d82c13d8b06849e1a7953d6d95288204": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "bar_style": "success", - "layout": "IPY_MODEL_dc583df429ec43a98d58cdfea69edfca", - "max": 30, - "style": "IPY_MODEL_29bd0a26c3364c0b8c46db644e982ffc", - "value": 30 + "description_width": "", + "font_size": null, + "text_color": null } }, - "44ceef60246341cc8868299759cecbd0": { + "d92a96139a1b4744b0f9036519ac996f": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "456b406abe6e4d8b82b01a6119458119": { + "dd23acae222d46f49bb5e5979247bcfb": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", + "model_module_version": "2.0.0", + "model_name": "FloatProgressModel", "state": { - "layout": "IPY_MODEL_1b7f42c8a07b4233a23bc4bce78aa87d", - "style": "IPY_MODEL_5ad2e098bcfe4264ac1f8b69759e5422", - "value": " 2/2 [00:00<00:00, 26.47it/s]" + "bar_style": "success", + "layout": "IPY_MODEL_1e93f4a152024818a81a0f224f85fe26", + "max": 3, + "style": "IPY_MODEL_76b3456e051c4ea9950f51192977fd19", + "value": 3 } }, - "45ee874f2e84406499d5cc4044525bda": { + "ddcdae453e2c4e1ba75e0740fc24bac6": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", + "model_module_version": "2.0.0", + "model_name": "ProgressStyleModel", "state": { - "layout": "IPY_MODEL_a2896cf65e434b7c9115e9dae9a2a3da", - "style": "IPY_MODEL_11b0b235b07c43cab139597f8eac0c67", - "value": "Calculating control matrix: 100%" + "description_width": "" } }, - "4601a08e94cc45039a11eb08ca946b91": { + "de15011063fc45fc86704af85d77ee1f": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "462396d743214e2e9645d3a013512274": { + "de25a3b0b2464faa8dfd258f4a3ecd99": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { - "layout": "IPY_MODEL_d52fa09e340348a78791c1769beb7490", - "style": "IPY_MODEL_7e20a2bec0b346db95e28deeadad9422", - "value": "Calculating control matrix: 100%" + "layout": "IPY_MODEL_85d4848ab107449db622b39defde3be2", + "style": "IPY_MODEL_ff579bc788694c4c8359df1a61d1978f", + "value": "Calculating control matrix: 100%" } }, - "46304563e9594651834d7648e6df3ab3": { + "de65089c33e646b38efd7be143b29662": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", + "model_module_version": "2.0.0", + "model_name": "ProgressStyleModel", "state": { - "layout": "IPY_MODEL_51f27b2f6b4341f3ba6441ce42c95f4f", - "style": "IPY_MODEL_9fc1ed8b3a684815b83f9d14081f9aaf", - "value": "Calculating control matrix: 100%" + "description_width": "" } }, - "464f85e06b24484183f8d6cd5cfce35e": { + "de9e4799a3d74767a1685536c2e6aabd": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "FloatProgressModel", "state": { - "description_width": "" + "bar_style": "success", + "layout": "IPY_MODEL_1bf32120c415402da9ca9df74f36c7bc", + "max": 2, + "style": "IPY_MODEL_a2917f1ac7e549f0af9c798297f2c227", + "value": 2 } }, - "46aaf391d6fb47e8adb9961446af9e4f": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "46be02c7b73e459f9615dfe7f2e87edc": { + "dec152b8d4484399afd69ee62f45d93f": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { - "layout": "IPY_MODEL_5f4d60e388c142188a23b9686ecb1d79", - "style": "IPY_MODEL_f0b4ab6a25fb4605ae5bbee01bf2f7d3", - "value": " 2/2 [00:00<00:00, 25.42it/s]" + "layout": "IPY_MODEL_f6d3b354a21c449ea13564866de9be6f", + "style": "IPY_MODEL_6a3789d730b7468db405dde18b427430", + "value": "Calculating control matrix: 100%" } }, - "46d2ed5890e9458fbf12b10507550f73": { + "e05e6874f8044c9a8d709fe04b7cf598": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "46f6f56504f24c0ea169591f88bbc787": { + "e3a37b48cdae4460a097901b9f52a999": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { - "layout": "IPY_MODEL_730c0e4b25984d5aa4b8f0647530c674", - "style": "IPY_MODEL_6999b4ccfef1464a9f46b25c790eeb58", - "value": "Calculating control matrix: 100%" + "layout": "IPY_MODEL_e05e6874f8044c9a8d709fe04b7cf598", + "style": "IPY_MODEL_b52ef4a42aef474399a3ba1810c40418", + "value": " 2/2 [00:00<00:00, 30.49it/s]" } }, - "474d0c9e2a884191869998c14b79d465": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "4845f593081441dd9899ce9621b48c2f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_22012cc5fe1b4c56b847160d9b80ec4f", - "style": "IPY_MODEL_4c0d90463d8a4677bb6aab429a1afc05", - "value": "Calculating control matrix: 100%" - } - }, - "49a5aef6dcda4bbd8fac034a80fb5245": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_d8b24d878bea44cf9a8fdbd43863a354", - "IPY_MODEL_cafd021dc8c9493aa15995b67d4b02cc", - "IPY_MODEL_5560638c6a4e44fb953670b061b5b3ef" - ], - "layout": "IPY_MODEL_3fd089fd31c0426aad33fcf0d12e5eb2" - } - }, - "49c79a7dff944c84bc5074df30107d9a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "4a1d5b836d284c64a08ba7d162af7c3a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "4ad6e040045e43338c12d575b965883f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "4b156c39a71046ebbbfb6bd55dc340e5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "4b26a854b44044b5ae2ada7b231d57f9": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_53827f7dfe2647a4a4b39ba9024530df", - "max": 5, - "style": "IPY_MODEL_fd4238681c9e4d7baf01c97579044489", - "value": 5 - } - }, - "4c0d90463d8a4677bb6aab429a1afc05": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "4c51fbe2e7c642f8a7b8693f48e92a17": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "4dd980778f6245bb9d33e33611ae4926": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "4de7122e999646ea96171ad592263a2b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "4eb5cdf3365b4a7ead2872ca905ae0f6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_7a872c2890a24f36923a9e3aec56c6bb", - "style": "IPY_MODEL_4b156c39a71046ebbbfb6bd55dc340e5", - "value": " 2/2 [00:00<00:00, 25.29it/s]" - } - }, - "4f15b737fb57447d851e38d614225f0a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "4f40e16f077940d9b2c74963b619f728": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_63f773a63b914e0a9691374ee5285bc3", - "style": "IPY_MODEL_d839f5849ebd40a19da0b023c02ab0ed", - "value": "Calculating control matrix: 100%" - } - }, - "4f4a9a41c0ee4fefa8257233052d9a05": { + "e5eb70913da647acbe78045e5c97b9be": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "description_width": "" + "description_width": "", + "font_size": null, + "text_color": null } }, - "4f62b3bf77364075be2abdc8a9fa188f": { + "e6b4c47f32894a40982960c116abc32e": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { - "layout": "IPY_MODEL_b5ae4481853e4a1aac8a6aede5677b77", - "style": "IPY_MODEL_b31a33b983ec44f6b222f2e258ea1a98", - "value": " 2/2 [00:00<00:00, 25.45it/s]" - } - }, - "4f8423def37b4091b5bd597e303d26c8": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_95328c7a0336416cb942ffa0a6456a90", - "IPY_MODEL_bc6bed82b0b740c29a157235441e62d1", - "IPY_MODEL_456b406abe6e4d8b82b01a6119458119" - ], - "layout": "IPY_MODEL_aa48f071a70543b09c7e3e3807668413" + "layout": "IPY_MODEL_95e7b72b24a84ac8bf789cea47c535a0", + "style": "IPY_MODEL_7bed1f6ee04e4eea91e7788f94ede4f4", + "value": "Calculating control matrix: 100%" } }, - "4faba091722041489828b564483fbe0c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "500964b0afa4409098ff5f3b33f7470e": { + "e83044e4db634045a42db5862ccad093": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "FloatProgressModel", "state": { "bar_style": "success", - "layout": "IPY_MODEL_60fe4fd647504ac88e04a8ce7b2a9923", - "max": 3, - "style": "IPY_MODEL_f3529a025ef048dc968fad581602e831", - "value": 3 + "layout": "IPY_MODEL_958f68af2cfc47fd92edc3f6fd242081", + "max": 2, + "style": "IPY_MODEL_7a11df04499b4a1682fa0504de9cc7e0", + "value": 2 } }, - "504525b5ab3840939bf861aea868bf7b": { + "ebf9868320aa4835935feb232d2843c1": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, - "506c4b2573164f95be037349cba3b93d": { + "ece91a83b47d4a27b7a3b593b8e552ef": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "51f27b2f6b4341f3ba6441ce42c95f4f": { + "ed09362e1fe843e686bf7577d06058e9": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "5278db8b55654ffb9040aeb56efa818b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_0b3e4dfc21694554b0e11f5aa90e872d", - "style": "IPY_MODEL_802ba1330cc84b1c943f8bafdcc013df", - "value": "Calculating control matrix: 100%" - } - }, - "52850592d0f24f9baa8b184c738b1159": { + "f16ac5a8891143238bbb9afce47532d4": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "52a556675c954cc7a8a031281b5e0eb7": { + "f1a4e2b3aea64613a5beac1f210c5289": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "description_width": "" + "description_width": "", + "font_size": null, + "text_color": null } }, - "536d103857394c72ba93b1663455a460": { + "f2331b17afcb4f47bf6f6a4682a79c4e": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "children": [ - "IPY_MODEL_229fac2e5b474afaa676f3790517d95f", - "IPY_MODEL_9d1b4efceb3d494d94b3db42b5e8b705", - "IPY_MODEL_ebee6025f0d0474595b196d0cf4d372b" + "IPY_MODEL_040452db95bf49b499f350c7444604e6", + "IPY_MODEL_fe7d44e314dc49b7805525a992cc550d", + "IPY_MODEL_6a837460fd954b65becb63aa84fcf443" ], - "layout": "IPY_MODEL_2f9cf232731247d680bace3cd0888926" - } - }, - "536edaf60e1d4fb58326044f4ead5c1c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_a910e485dfa04e42a838d89825282821", - "style": "IPY_MODEL_4ad6e040045e43338c12d575b965883f", - "value": " 30/30 [00:00<00:00, 551.17it/s]" - } - }, - "53827f7dfe2647a4a4b39ba9024530df": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "53b7d336f0684013be7fc692549d878e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "5439b6ecd81444e1884312141ebeac43": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "543f2396ece24028bc9878c090e39683": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_afbc52bb0e2940cbaaa9699750fefcfc", - "max": 3, - "style": "IPY_MODEL_26088cd1981149e1bb2a791657351aec", - "value": 3 - } - }, - "544aac9981544eb8a5251dcdf735d1ba": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "54aaf167dc7e4bf1a1c10f57641c4170": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" + "layout": "IPY_MODEL_a296ebc2778d4059aebd09e672ee3e72" } }, - "5537ac9208e9419f9a1526d6401cbe26": { + "f4fad103973344aaa0ed4b419194a0cc": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "description_width": "" + "description_width": "", + "font_size": null, + "text_color": null } }, - "554e970c285f4879a8fe96d6daa51e03": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "5560638c6a4e44fb953670b061b5b3ef": { + "f661a842f7c44ce481a1606155d9c952": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { - "layout": "IPY_MODEL_0be6af9f92304a5c95c00ca91d6fa605", - "style": "IPY_MODEL_e63a3e957a39453785ee65ad1b59f7c7", - "value": " 30/30 [00:00<00:00, 683.89it/s]" - } - }, - "55efe838ecc44497a7f8795981a2b592": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "55f9057086334e63aab278e5975d758e": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "560434b714784c25ada02650ffd9d085": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "564e808d92744d5bb8a2a7ed18f45b8c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "56a82a04c10f45bebb039f2b13a367b6": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "5753682adabd42f9bb490dc719e5d209": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "57bc72ccdecd4d5ba40c18b8e2eae26f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" + "layout": "IPY_MODEL_b0df64aa7da14d5588025f7a7ca4895d", + "style": "IPY_MODEL_59644e2e411b4e1ba1fa1f3c66fa72ba", + "value": " 3/3 [00:00<00:00, 33.08it/s]" } }, - "57c017bc66414f8a9d5deef9ec5bec64": { + "f6d3b354a21c449ea13564866de9be6f": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "57c7c590c99243d389124aad97fc8706": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_ff98adb68f72479791e9e70d30aa1077", - "style": "IPY_MODEL_f035432e789d4193af007f7626a062e7", - "value": "Calculating control matrix: 100%" - } - }, - "57d64150750a414187a615a366def2b9": { + "f858a30df67f4f488deb50570bd873ba": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "583330b42c784dcaad44ecc3a6cc692a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_69da744135e3420cba6da3d04214c16f", - "max": 2, - "style": "IPY_MODEL_55efe838ecc44497a7f8795981a2b592", - "value": 2 - } - }, - "5840d1c7bc134aaf936f2878fc6ed23f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_4dd980778f6245bb9d33e33611ae4926", - "style": "IPY_MODEL_05893b51b2eb4f0f8a01e33716ec9b2c", - "value": " 60/60 [00:01<00:00, 53.90it/s]" - } - }, - "58c14592aea84bceb62e4d2eee71efdc": { + "f9441e33523849c0a7ccea1537256f28": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "children": [ - "IPY_MODEL_72c1d493395b41428f55277ea6214a34", - "IPY_MODEL_8a954e2eb5f348afaa500d78d9630cb6", - "IPY_MODEL_a94bfd64e5e64f7c9fc33f1b8a06161c" + "IPY_MODEL_dec152b8d4484399afd69ee62f45d93f", + "IPY_MODEL_e83044e4db634045a42db5862ccad093", + "IPY_MODEL_fe98c9bec3e44447905b8ee1df7e124c" ], - "layout": "IPY_MODEL_57c017bc66414f8a9d5deef9ec5bec64" - } - }, - "59264d8bf34442d1a8c679bcd5560b49": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_24f7f1aaedbb4bc296e6ad926ff897a7", - "style": "IPY_MODEL_8e582966470c4f7bb720612cda3805cd", - "value": "Calculating control matrix: 100%" + "layout": "IPY_MODEL_0708cdb0fa3641a296449e34fded5b8b" } }, - "593e5895341f4faf94f834221c4a3419": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "59e8069d8fc6430ba8314ba84ad27c91": { + "fb54a0f1999c4a4b8e15c0acc4931481": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "description_width": "" + "description_width": "", + "font_size": null, + "text_color": null } }, - "5a21d4b6f57147dfa9b765ba7232f273": { + "fd0cf7c881674e78bcee07420e170f07": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "children": [ - "IPY_MODEL_05aa9fb0f82043fa8b53663964ec54f1", - "IPY_MODEL_867e97296dd24736b05344effef8d3e5", - "IPY_MODEL_4eb5cdf3365b4a7ead2872ca905ae0f6" + "IPY_MODEL_c2f93bbdd2da4aeab014c8166da84cce", + "IPY_MODEL_dd23acae222d46f49bb5e5979247bcfb", + "IPY_MODEL_bdfa412613b148e984d1ad65682d9541" ], - "layout": "IPY_MODEL_85930a880efb4cf485621ac89c942093" - } - }, - "5ad2e098bcfe4264ac1f8b69759e5422": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "5b3df895a1f44490ba4fb5fc52c0a319": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_6e76d721eed646798d51631f10e53222", - "style": "IPY_MODEL_670dd10629ca4c7dbe63693776bf1e51", - "value": "Calculating control matrix: 100%" - } - }, - "5b64ef5e2fe44a6ab3239cb0797d8116": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "5b812b96949a499da3c763445c3e47b3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "5b9c85f79eef4abead987f22917589f5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "5bbe1e186a584d20a8f6c3285525f19c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_ff47bc546f49486cb3916a1c29528273", - "style": "IPY_MODEL_7848cf2c8c6c40c7ba2d9faaf087050d", - "value": " 30/30 [00:00<00:00, 562.42it/s]" + "layout": "IPY_MODEL_cc570e0adeae4bdf830e3d00429f9769" } }, - "5da566b5bbfb4416aa048d8067c31042": { + "fd5097219a7740f385baaa111940e6ab": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "5e2c5226b3504bf18803b2597f70bbe1": { + "fe3a261632c64462b293143678fc5809": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_module_version": "2.0.0", + "model_name": "ProgressStyleModel", "state": { "description_width": "" } }, - "5e5a419db48c47a8857c350e81facee5": { + "fe6942e159b24f66af6fc0e1eeaec4c2": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HBoxModel", "state": { "children": [ - "IPY_MODEL_cc507c369a9c482fa030262ebd2c272e", - "IPY_MODEL_bae5086111d94659a982a1876a1d4b0c", - "IPY_MODEL_625a32c6f9e5415889ea05cc4ba1fef1" + "IPY_MODEL_9445045fea29464189fd8e0018dd3e4e", + "IPY_MODEL_6856b94a00014910b0371030bfb94f47", + "IPY_MODEL_969ebf3655ec48cdbdc59fed9f52ae39" ], - "layout": "IPY_MODEL_ab6e9aa1d8e74f24bd8e863307708437" + "layout": "IPY_MODEL_74dee86f20034f02bea1bca36f847136" } }, - "5f064961421448779e06d6c4489ce300": { + "fe7a7b3e56fa459a8c72fd0287ec5ad8": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", + "model_module_version": "2.0.0", "model_name": "HTMLModel", "state": { - "layout": "IPY_MODEL_709b035f28da47a99123132b57ff083b", - "style": "IPY_MODEL_74e73d827e9448e99b034271e905fe9b", - "value": " 2/2 [00:00<00:00, 25.44it/s]" + "layout": "IPY_MODEL_3178cae9b0b44ab19c5e0bf27818ae6b", + "style": "IPY_MODEL_e5eb70913da647acbe78045e5c97b9be", + "value": "Calculating control matrix: 100%" } }, - "5f4d60e388c142188a23b9686ecb1d79": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "5fa1d488983449168bd24da5c79b8a14": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "5fa331a82bb240b2839db4025d195dea": { + "fe7d44e314dc49b7805525a992cc550d": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", + "model_module_version": "2.0.0", + "model_name": "FloatProgressModel", "state": { - "children": [ - "IPY_MODEL_4845f593081441dd9899ce9621b48c2f", - "IPY_MODEL_f8cf547dc2dd48e784b72d1b71e29dda", - "IPY_MODEL_5bbe1e186a584d20a8f6c3285525f19c" - ], - "layout": "IPY_MODEL_06dce4f0a6354c3481e993cb7fab514c" + "bar_style": "success", + "layout": "IPY_MODEL_c78ee29fae714c118b3a0a4a13aadcb2", + "max": 2, + "style": "IPY_MODEL_14c0c361bb0f4f1b81432369f8d35564", + "value": 2 } }, - "5fd56ec6e14f4e1295776f7864ef37ba": { + "fe98c9bec3e44447905b8ee1df7e124c": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", "state": { - "description_width": "" + "layout": "IPY_MODEL_41d040ff6a9946c58bac458b7382f65c", + "style": "IPY_MODEL_47fbf0eeb545445cb6c499dc1babd5fe", + "value": " 2/2 [00:00<00:00, 31.94it/s]" } }, - "60fe4fd647504ac88e04a8ce7b2a9923": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "61376e47d3ca43e3ac1ff17af61e7395": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "615a9a24df28479f8298212922f319e8": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "61a5c8620c724348824976ea17242774": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_9fb6fe5368a947af8cb63e9fd80d96ef", - "IPY_MODEL_a75a90d563a943328a84ca7adb2c7913", - "IPY_MODEL_242b01546a7e47ca9c6a4efd273269de" - ], - "layout": "IPY_MODEL_9ef1d1fa4c714b4f8e8bb8e00b5ad4ac" - } - }, - "625a32c6f9e5415889ea05cc4ba1fef1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_086c80bf24a44d11bc3d251b107c54ca", - "style": "IPY_MODEL_ab0e95bfe811467a865aa8407cf601d0", - "value": " 30/30 [00:00<00:00, 41.60it/s]" - } - }, - "62b73ee9690f43c29d7f503ee1aa3544": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "62dad964ff0e4bfa9668fd37d8241d19": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_b7107f521b734c7489f90a93a2ef044f", - "style": "IPY_MODEL_52a556675c954cc7a8a031281b5e0eb7", - "value": " 120/120 [00:01<00:00, 67.04it/s]" - } - }, - "63be76eec0654deea2848f21bfbba9ae": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_d6b9a2e50f884582b13804ea66747736", - "style": "IPY_MODEL_ab6f0772524e49198867344c8b8606e1", - "value": " 2/2 [00:00<00:00, 21.22it/s]" - } - }, - "63f773a63b914e0a9691374ee5285bc3": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "6434ec22e8384cc6af073f9bd10a41d5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "65655eafb9fb4456a9f6f1599314e599": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "662c401cf2a645059acd331793267819": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "664803e9aaa040e28104cef75c217d19": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_55f9057086334e63aab278e5975d758e", - "max": 30, - "style": "IPY_MODEL_5fd56ec6e14f4e1295776f7864ef37ba", - "value": 30 - } - }, - "66c4f2c5b5df48fb8925bf649b1f8ce2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "670dd10629ca4c7dbe63693776bf1e51": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "6769aa585b2042bd9db2ec47b62fbb48": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "678068449f9d49d4a6f0f887f055d744": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "67efd2e0fa024312a4412ea53942f807": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_ed3a5b08a78e4e41b9172a4c7083c605", - "IPY_MODEL_6db37a379e3649c6869c25e87b0d2922", - "IPY_MODEL_a2dbe25151b7494286bc80f8e9fdd3f7" - ], - "layout": "IPY_MODEL_1e207ba582d54af7b97eb574478adef5" - } - }, - "6856a1d0d8364d13b432572ccea74af3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "68d3fb2df97c4798b61d4fe1f8740ec7": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "69849009708d4573b59e93d1c1af6404": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_b876a1ac1c6f41f59b1a81ee472f2344", - "style": "IPY_MODEL_a2dd2b855fdb45ebb0888d647b487108", - "value": "Calculating control matrix: 100%" - } - }, - "6999b4ccfef1464a9f46b25c790eeb58": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "69d4ab4d8e914c9396eba0c4cba6fa2e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "69da744135e3420cba6da3d04214c16f": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "69df2a072aa1489793c81bbded784133": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_f69673883f86432389ec451a280f5b6e", - "max": 2, - "style": "IPY_MODEL_9d5743891a2c4bc2a9d5473b0d2a5635", - "value": 2 - } - }, - "69edbd3019584e9b88ebd8c36cf4f486": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_46304563e9594651834d7648e6df3ab3", - "IPY_MODEL_355c7a22c98f437d8fd6ba41058acde8", - "IPY_MODEL_cb882e170b824d548806521bb9c96894" - ], - "layout": "IPY_MODEL_bba49b65b05a4233b85a8f969c93703f" - } - }, - "6a0fbdec1e84435aaceb171e3270f945": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "6a19dbae5a8543e38a24c6db038d891b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "6b971b4da28a45daad132260073968ac": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "6bc16a970c4c4409ab20cafbf1fd2937": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_283a7bfd40b547c281c450a24da87ecd", - "max": 3, - "style": "IPY_MODEL_0b4ea381a0b045f4b618b265398c00f2", - "value": 3 - } - }, - "6bc978850e9f4aaf864d9c19dcbd4a9e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "6c30975c216641a0b6338253662c7c3b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_f4dc8dbb76a34edbbadbeaa8b3d7cc16", - "IPY_MODEL_ef7fc96475d942e4b2cf88e811f12306", - "IPY_MODEL_c68e1e2e93db4337b8bdc25b3648d911" - ], - "layout": "IPY_MODEL_1b787ea3080347f1ac1ce7a7aedc3547" - } - }, - "6cbc06a65a354156a445594678952e5f": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "6cdf042bd9e2426eb742aece4d5272ea": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "6d20925d43994a4bb0b662e06fe4f3ed": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "6db37a379e3649c6869c25e87b0d2922": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_420733c8530245948e501de025186159", - "max": 30, - "style": "IPY_MODEL_b7668a46d73f4a3386f5c3ce687f56c2", - "value": 30 - } - }, - "6e008e6fcad345bfa6010cd08bf88d4d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_56a82a04c10f45bebb039f2b13a367b6", - "style": "IPY_MODEL_7b8ae0b54782452aabda233a86d6c894", - "value": " 120/120 [00:02<00:00, 56.92it/s]" - } - }, - "6e0a5131749c472393533fb66e6f80b2": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "6e76d721eed646798d51631f10e53222": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "6f51754f541d4449b96e5615f0382743": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_fb442466f6e444cf8a5b6a256ed053c8", - "style": "IPY_MODEL_f663ad6171a244a29861598ca2e3a11e", - "value": " 2/2 [00:00<00:00, 34.94it/s]" - } - }, - "6fb6a0e894bd4f62ac65e429a9e34bf7": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "6feb6fbb8dac491a9263497ae73d8ef5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "70591847f2c34732a11a0034571cd03b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "70658dee444f4c9f9bd96203391df1b7": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "709b035f28da47a99123132b57ff083b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "70a4301c205b403ea6f3e5d97572ad65": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "70f7c755121e41f08c4d78b73ff93e93": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_aae43a29196c4ca98c8239dea794a67c", - "style": "IPY_MODEL_5439b6ecd81444e1884312141ebeac43", - "value": " 30/30 [00:00<00:00, 633.34it/s]" - } - }, - "72c1d493395b41428f55277ea6214a34": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_e77ff30de0d44bf5866b074d95802726", - "style": "IPY_MODEL_2f52f6946d1b486abecca2818dc452bc", - "value": "Calculating control matrix: 100%" - } - }, - "730c0e4b25984d5aa4b8f0647530c674": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "73a184f2117e42dc96fcce550a209d55": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "73c4de4be48b4f8aa8b93d4a9eac482d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_ab56bbd8216b4064b9ba7d06e01ac3df", - "IPY_MODEL_92a9cb541d87475bb38b3e9b22a4a56a", - "IPY_MODEL_effabb5611b040229f8e6273c9bdb560" - ], - "layout": "IPY_MODEL_44457a2a9cd44d02a6001b55bacc8705" - } - }, - "73e7cfc1885a4e138788cc599a43df58": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "74b3639b5b504caca4f28efa5ab65ca4": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "74e73d827e9448e99b034271e905fe9b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "74f1ffe99de14a09bd57a33e7da1705c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_dc0193cc4435450b931db419d3d2a52a", - "max": 16, - "style": "IPY_MODEL_23fe88c79a3446bfbc75afd4fe376799", - "value": 16 - } - }, - "752f654b569e4fcfaa1e85df22a2004b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_1deccebf14ab4a80a1f91381cbb2a673", - "style": "IPY_MODEL_9767c296c32041c49d13bb518f070a68", - "value": "Calculating control matrix: 100%" - } - }, - "764c5dbab51d4b808fade289029bb853": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "76f4307bc1274d02ae93eade27fc5b5d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_3bd6a02c2fae42bda82ce9cc919cb371", - "style": "IPY_MODEL_bfa0820a4c74480fb2eb5e1f6b1df6c0", - "value": "Calculating control matrix: 100%" - } - }, - "7704c748a92e4730ba0832ee794f5fdf": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "77ac2420c36d40509833fe07668494dd": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "77e4b0c4a68548fca2396ffb430c9943": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "7848cf2c8c6c40c7ba2d9faaf087050d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "78984ba75f4f4315ab9204f17f678a28": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "78cf971be21345129ff497dc6a40b143": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "79305bde213a4481b2dc15c0cc4ac7b6": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "794dfc1c1c9a495bb2449b95fc30348c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "795b0e7b14dc44eb830ede1c8ff84662": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "79e3fa2a56fa423f832121ef2b05f720": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_29d83c053bc045af9b10eaf0085356b0", - "max": 2, - "style": "IPY_MODEL_678068449f9d49d4a6f0f887f055d744", - "value": 2 - } - }, - "7a2942b4c373479b8ee99c11918accc4": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "7a809a902be643bc9bbabe95ef590ad3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_d08daec1e1ec449fa5a08856340e3579", - "max": 16, - "style": "IPY_MODEL_6434ec22e8384cc6af073f9bd10a41d5", - "value": 16 - } - }, - "7a872c2890a24f36923a9e3aec56c6bb": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "7ac3a3226f56435e84a2fb2b90bd1378": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "7b8ae0b54782452aabda233a86d6c894": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "7c243aae4f164fbc9e03e6a3378a28d9": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "7c5c98f6b52b4c74bfb6f2f933d90090": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "7cf186a2e52c43839cdf700cf85a7c94": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "7e20a2bec0b346db95e28deeadad9422": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "7e60b5b27cd0485d8d58b7516a8d8b42": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_d25efa6b22534413b941853d30efcacc", - "IPY_MODEL_7a809a902be643bc9bbabe95ef590ad3", - "IPY_MODEL_9dacad6c593d49abbc1807ddf293a932" - ], - "layout": "IPY_MODEL_ae624bf82666471ca2264552773ccc15" - } - }, - "7ea53d0585bb4b1d8437a6602a15104d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "7f03fc5b9b2b403ea74b57b2fe0ef713": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "7f31a947efc542008ab5f05cd57f9f41": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_69849009708d4573b59e93d1c1af6404", - "IPY_MODEL_157e013cfc054cf4962dafc28408921d", - "IPY_MODEL_0de1620d8fc8414d8d73587647a1d7fd" - ], - "layout": "IPY_MODEL_c2046f9f4db54854ae64b3caf54de0bd" - } - }, - "7f7ff86687b54893b8ead186f3ab15b8": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_4067833fd7494ea7b927941fe9bed45e", - "style": "IPY_MODEL_feff0e5223274d8697e5b55020a05781", - "value": "Calculating control matrix: 100%" - } - }, - "7faad4c6b2c84a3ab9a9c384bfef5643": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "7fd5a11202d643adb76cbeb2cb10290c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_e7a4695bc8694037a8266a64766d7a73", - "style": "IPY_MODEL_4c51fbe2e7c642f8a7b8693f48e92a17", - "value": " 30/30 [00:00<00:00, 1007.00it/s]" - } - }, - "7fe512297914431fa7c6513f620e5389": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_f46d7edd3f1143bba2c85a916fc3a355", - "style": "IPY_MODEL_4f15b737fb57447d851e38d614225f0a", - "value": " 3/3 [00:00<00:00, 31.57it/s]" - } - }, - "802ba1330cc84b1c943f8bafdcc013df": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "8031a26d29b041b1ab813a61a105eb0d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "805f761b5e5b46a2811ffcd9b5b7bdf0": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "80b731b19181401ea2328a1081219896": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_4302efacb00c4d069e905d7858f6bf34", - "max": 2, - "style": "IPY_MODEL_377e3936815f40549ae482222137b878", - "value": 2 - } - }, - "81256eb86753419b978dfc25e3b63378": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_20b1cd618c104994b41a55eee70638a1", - "style": "IPY_MODEL_78cf971be21345129ff497dc6a40b143", - "value": "Calculating control matrix: 100%" - } - }, - "817f3627be1a4f78a6da2158ba832127": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_dc12f93682874cbbb17fc9688c8de292", - "max": 16, - "style": "IPY_MODEL_615a9a24df28479f8298212922f319e8", - "value": 16 - } - }, - "81a54b215966422f8198e0229a004ead": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "81b9c4936b06487c8ffde57fd105af44": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "82946f5614d241af9a3f5f0009667f36": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_57c7c590c99243d389124aad97fc8706", - "IPY_MODEL_dbfcad557ec34c08a44cef32fca3d5c1", - "IPY_MODEL_62dad964ff0e4bfa9668fd37d8241d19" - ], - "layout": "IPY_MODEL_42cee81f9a7745bc889eed5a3d953847" - } - }, - "82c5760d3bac424fb81a8edb4f94963a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_e35e712483f6486ebeeef0fb861b51b6", - "max": 16, - "style": "IPY_MODEL_eaf28d0f01544ac697ba5f8aa9bdff14", - "value": 16 - } - }, - "82dbbb1b4c77474abbbe1cab77bcd2bb": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "8301e859d7bd47a48cc5ee0056ce1795": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "832b90b5c58247248ae39882aa679564": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "833e0187c14c4205886839ecfe94eaa2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_b2717127ed9040218b8cc0ea9055aee4", - "IPY_MODEL_b0d8691f27af4cf1b0ea82c4269a71b4", - "IPY_MODEL_bc5f881a396b47d094b5ebef8fee83a1" - ], - "layout": "IPY_MODEL_9d5de48618b94da8815f3e5e88782f54" - } - }, - "83e6c25f305f4eb79cd642ecd3ea75bb": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "84289559a31949b9b45232107852d79d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "84c16d0cdaf0438cbd76255022dcdead": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "84c7366d25f044c698063c07a8f07690": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "84cd7d02cfdf4957adc1184f2da5c6ff": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "85930a880efb4cf485621ac89c942093": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "85cf891ad3124f3982e35feace9332e0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "8609b271dcdc4706bb7caa4ec1b583fd": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "867e97296dd24736b05344effef8d3e5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_95c692d27d554fb6b5b1e09c47151b4a", - "max": 2, - "style": "IPY_MODEL_ee746ab8008044deb5d1b13680c15335", - "value": 2 - } - }, - "86938c27d4314740931a60920a0507b5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "8792682a35b04059ac6d4ede8710404b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_44ceef60246341cc8868299759cecbd0", - "style": "IPY_MODEL_5753682adabd42f9bb490dc719e5d209", - "value": "Calculating control matrix: 100%" - } - }, - "8804b49a1b1245a98bd3425fd47e9bd1": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "895b4f5978814465bff44344e106ddb1": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "8a0368a740124cb9809bd2beb1dd60f7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_0f576f2ef1114b35a10d66a1fa69b3bd", - "IPY_MODEL_6bc16a970c4c4409ab20cafbf1fd2937", - "IPY_MODEL_252fba11d13e425b85f029fc5194497c" - ], - "layout": "IPY_MODEL_b3d8f8cf767f49fe83e8c4384cb9dec5" - } - }, - "8a954e2eb5f348afaa500d78d9630cb6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_0c2c8b14549f48b5abb10b4078d393ba", - "max": 3, - "style": "IPY_MODEL_6cdf042bd9e2426eb742aece4d5272ea", - "value": 3 - } - }, - "8b8161568f2b4d30b62a23cf2a502623": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_81256eb86753419b978dfc25e3b63378", - "IPY_MODEL_ff4fe34e1930454ba3a8c5cb940f28ad", - "IPY_MODEL_1a3e56f96cfd4b4b926a34f48f86f582" - ], - "layout": "IPY_MODEL_cfee3a5c3ac649589b9cb08e2ba87180" - } - }, - "8bea0f0f006f4e17a119486232052d4d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_94243daf10b14d058148c7d1142cfce6", - "max": 30, - "style": "IPY_MODEL_560434b714784c25ada02650ffd9d085", - "value": 30 - } - }, - "8bf7b3d14baa4f3d9eea8db12c106eab": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "8ca3f91b036345449a626cb2b7f2face": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "8cbf2f4720b04a41911c745da00f4599": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "8d4a3ed079af41bbb06d47f6b0ff8e68": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_d5d1dada04ab4247810239132dd0261a", - "style": "IPY_MODEL_263302afee2d4a74987b9e5a5e6df962", - "value": "Calculating control matrix: 100%" - } - }, - "8dba12dffe3c4a24883ec578f5c4ea59": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_3579427c8634428b9272af5650a9f7e4", - "style": "IPY_MODEL_0318a88e685941338fc19504f149dc92", - "value": "Calculating control matrix: 100%" - } - }, - "8ddaf21b36404a9c9c7dafebd38d877a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "8e0ab03686ac4c43aa6bbdfeb208efc7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_3824392d9c204bf188ff8ef5c0cf2cb6", - "IPY_MODEL_80b731b19181401ea2328a1081219896", - "IPY_MODEL_289398104bbb48219849e9a26c39c8b5" - ], - "layout": "IPY_MODEL_4174c2e17fe84a73a012ffb63f67a980" - } - }, - "8e582966470c4f7bb720612cda3805cd": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "8e59273150414d0ba7a72b14d942eaa9": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "8ea32593c539493e84d587d55637475e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_e997c56c215e4810bc7d2cb429ff2d7c", - "style": "IPY_MODEL_84cd7d02cfdf4957adc1184f2da5c6ff", - "value": "Calculating control matrix: 100%" - } - }, - "8eca13a16ae5493495a99368e1089bea": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "8ecc720f2e9f42228e65d866a5c77085": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "8ef6a0f0d6964429af46c04241280f35": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "8efbce9a1f504573a97b4b7bf3bf2a9a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "8f024841fc7045b5817ed0b173984cb2": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "8f51abfd5aee4ba3804423b34166e716": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "8fafb1e8ccfe40b98917f428acb48d2d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "8fd6c5ac0087483aae4358804faa5a90": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "9010e9900e454adb911e6fd7c0936d54": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_45ee874f2e84406499d5cc4044525bda", - "IPY_MODEL_e135a457cc364638b82df678918d0756", - "IPY_MODEL_2919609114b44046bf62b6a92f799a3b" - ], - "layout": "IPY_MODEL_ff1527c180524158a228e367e910a69d" - } - }, - "91e2e7d39ec645bb97538271cccc6fb6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_59264d8bf34442d1a8c679bcd5560b49", - "IPY_MODEL_245a6e9dd8f745fba06b2808ef2baa6c", - "IPY_MODEL_70f7c755121e41f08c4d78b73ff93e93" - ], - "layout": "IPY_MODEL_136453ede153485999b7f057b2c63a52" - } - }, - "92a9cb541d87475bb38b3e9b22a4a56a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_8ca3f91b036345449a626cb2b7f2face", - "max": 3, - "style": "IPY_MODEL_d6003f5852b94c56bba995ef97e78f8f", - "value": 3 - } - }, - "92beadcac86d4b27a14a4f3b76f77e3f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "93799bc0f70149549bca7a85aea0b10d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "94243daf10b14d058148c7d1142cfce6": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "949f23e3b81a4c969fc6aab887a296b3": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "95328c7a0336416cb942ffa0a6456a90": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_895b4f5978814465bff44344e106ddb1", - "style": "IPY_MODEL_d73a7ab4dcd440fc8f1221a7ae7be8ea", - "value": "Calculating control matrix: 100%" - } - }, - "955cc25dd6494d10a4ed5dff47298b58": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_af2f0c5525ce4c77b8701a154dc4e275", - "style": "IPY_MODEL_59e8069d8fc6430ba8314ba84ad27c91", - "value": "Calculating control matrix: 100%" - } - }, - "9598ec6cad45455e8e1ef4ca432776d6": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "95c692d27d554fb6b5b1e09c47151b4a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "97651f01114f47b78520012e4c542887": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_5b3df895a1f44490ba4fb5fc52c0a319", - "IPY_MODEL_2a4e0054e41a4a98b46072e7004a1519", - "IPY_MODEL_6e008e6fcad345bfa6010cd08bf88d4d" - ], - "layout": "IPY_MODEL_c22e7ad5c334428693a23a03d6f73160" - } - }, - "9767c296c32041c49d13bb518f070a68": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "97a89dc93862422180e66ae1775d2b0b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "98852bf682a74286af11a84b20acccd8": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "989b89bdadd34b39829bc0d4c222d50d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_c2d10fd021644ee19177ebfab28841fe", - "style": "IPY_MODEL_84c16d0cdaf0438cbd76255022dcdead", - "value": " 3/3 [00:00<00:00, 18.20it/s]" - } - }, - "99df6b69fbe641b9a2d73246b3561802": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "99fe836297c64b0b964a4b413760f0ff": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_2d016294c72741e6bf1fb3368d3078e9", - "style": "IPY_MODEL_764c5dbab51d4b808fade289029bb853", - "value": " 30/30 [00:00<00:00, 476.50it/s]" - } - }, - "9a6836932a074f4fa3d4e0c34533c22b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "9a7b878ee3404456bc3b628eb8c6149e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "9b7133bf1e3d4e1f8966688568c87d56": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "9c24b69d706e4e3493abf59ecc87aa67": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_c27bcc5b773c4bc7b13959baeadc6eb3", - "max": 16, - "style": "IPY_MODEL_dd63da556691444f9bd7ff11bd34b5a7", - "value": 16 - } - }, - "9d1b4efceb3d494d94b3db42b5e8b705": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_8609b271dcdc4706bb7caa4ec1b583fd", - "max": 3, - "style": "IPY_MODEL_ff3ff286cbb748b8a6434a5d1f8c174d", - "value": 3 - } - }, - "9d204f08e6354e9f8d835cf34d1fa106": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_bfbfab6acada41b5a7b88091bd17301d", - "IPY_MODEL_543f2396ece24028bc9878c090e39683", - "IPY_MODEL_9e0a4cdea85945829b8e6a1337ec89ff" - ], - "layout": "IPY_MODEL_46aaf391d6fb47e8adb9961446af9e4f" - } - }, - "9d5743891a2c4bc2a9d5473b0d2a5635": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "9d5b87b3bb504592b809e5dd441e28e3": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "9d5de48618b94da8815f3e5e88782f54": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "9dacad6c593d49abbc1807ddf293a932": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_cc060250afb74ee7bd472f6a30aad00b", - "style": "IPY_MODEL_8ef6a0f0d6964429af46c04241280f35", - "value": " 16/16 [00:00<00:00, 35.99it/s]" - } - }, - "9daedab20bcd489292625833459a25c3": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "9e0a4cdea85945829b8e6a1337ec89ff": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_949f23e3b81a4c969fc6aab887a296b3", - "style": "IPY_MODEL_fb7f2863b8d94021ba7e7fbd7675c93f", - "value": " 3/3 [00:00<00:00, 27.31it/s]" - } - }, - "9ed3d83518774bc2a1493066ed876ef0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_ac960e999a3941c2b932dae708aff369", - "style": "IPY_MODEL_ce52dcba2ca343898890791001c4fb4f", - "value": " 2/2 [00:00<00:00, 21.34it/s]" - } - }, - "9ee5628e83124ef788e22fcb23d58221": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_db282d7f0faf4d1f9c40ef6258f4b037", - "style": "IPY_MODEL_e8738498e1dd447fa334ad0caafb722f", - "value": "Calculating control matrix: 100%" - } - }, - "9eed20887e5f48078bef8302382a0bcc": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "9ef1d1fa4c714b4f8e8bb8e00b5ad4ac": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "9f49a79dd4d3417293e3a9e7ca933897": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_7ea53d0585bb4b1d8437a6602a15104d", - "style": "IPY_MODEL_afb0439a9a104002a3049bdbee6c8e3f", - "value": "Calculating control matrix: 100%" - } - }, - "9f6adf981a6b4f059fb5cfe6ba229ae0": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "9fb6fe5368a947af8cb63e9fd80d96ef": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_ecb1174415f2408d8aa06f7fd4faf5d8", - "style": "IPY_MODEL_7c5c98f6b52b4c74bfb6f2f933d90090", - "value": "Calculating control matrix: 100%" - } - }, - "9fc1ed8b3a684815b83f9d14081f9aaf": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "a01a9405d3ce454e8bd523dd950d402c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "a05a418c2dcd4a2b8e1981fc77193f28": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "a0ef48944e244ba5b0cdd6b80f6db96f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "a10168ba124041259a8e8a2d2e1a1531": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_29bb84e9f7664aca843d8d1e02407323", - "max": 3, - "style": "IPY_MODEL_6a0fbdec1e84435aaceb171e3270f945", - "value": 3 - } - }, - "a153ed8157e54f499e45babaeb81f1ee": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "a1f64e18c678490cb1dfbab45aea8f0e": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "a2896cf65e434b7c9115e9dae9a2a3da": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "a2dbe25151b7494286bc80f8e9fdd3f7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_d015eb41cabd4b1fa1fafa30967301a6", - "style": "IPY_MODEL_4443ddf39839491196f72f71d266da08", - "value": " 30/30 [00:00<00:00, 45.02it/s]" - } - }, - "a2dd2b855fdb45ebb0888d647b487108": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "a3243df133e64f33a10c36d9add343c2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "a3ae1ea658d548c79da5fbea45f03f42": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_a875e18065424910b95c3bfd13611df8", - "IPY_MODEL_82c5760d3bac424fb81a8edb4f94963a", - "IPY_MODEL_2e49ea08b8194c16a2c45dded6e9c162" - ], - "layout": "IPY_MODEL_82dbbb1b4c77474abbbe1cab77bcd2bb" - } - }, - "a6703c3a2d144b28847475e8a5113810": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "a68416d229924be3939004780767e198": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_ace97575d4ac40f2956f5f8da0667f19", - "IPY_MODEL_f899ed44dc4a4d4696e52c51b909a769", - "IPY_MODEL_6f51754f541d4449b96e5615f0382743" - ], - "layout": "IPY_MODEL_61376e47d3ca43e3ac1ff17af61e7395" - } - }, - "a6c722dc0cf94f91a9f79e380d59f97a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_9f49a79dd4d3417293e3a9e7ca933897", - "IPY_MODEL_31b1bea4d5f64a1c8be8e40aa68258d9", - "IPY_MODEL_63be76eec0654deea2848f21bfbba9ae" - ], - "layout": "IPY_MODEL_150fb81db5eb4634a513358b514ffe4b" - } - }, - "a6ed7328e08d4e3d996bbf4107ee4c0a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_cbfed85412ba4f6fbfe68627c2e7c06f", - "style": "IPY_MODEL_17f0bd1ce216491c852895b2d32ba93e", - "value": " 16/16 [00:00<00:00, 35.16it/s]" - } - }, - "a713bbf2761047928c49e336f8031aee": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "a75a90d563a943328a84ca7adb2c7913": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_057fcc9f8abd494b9239626cad4729f9", - "max": 3, - "style": "IPY_MODEL_a6703c3a2d144b28847475e8a5113810", - "value": 3 - } - }, - "a8012758db6e49f2af5ff7714f2ff98d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "a875e18065424910b95c3bfd13611df8": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_3a2e1c68c45a4875b2de65c29e53b168", - "style": "IPY_MODEL_ab6db57218484327a17c6fff02a18e3b", - "value": "Calculating control matrix: 100%" - } - }, - "a8df3c100c88450da39240dbd52d926f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "a910e485dfa04e42a838d89825282821": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "a92cee229ef14a79831fc823772f82b2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_c763bb2b0f104fbaba88ee3ea80498b1", - "IPY_MODEL_dbdd8314cae24eb59e1c1685ed13b501", - "IPY_MODEL_144093808f2b4a8588d8951f9c05e294" - ], - "layout": "IPY_MODEL_fa897554ae7e4632a5149aad853b6c1f" - } - }, - "a94bfd64e5e64f7c9fc33f1b8a06161c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_832b90b5c58247248ae39882aa679564", - "style": "IPY_MODEL_69d4ab4d8e914c9396eba0c4cba6fa2e", - "value": " 3/3 [00:00<00:00, 29.93it/s]" - } - }, - "aa2dbd18df9946eda673f1d0ab568c41": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "aa48f071a70543b09c7e3e3807668413": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "aa506655e2cf490d81b8e5f70458b4e8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "aa8c6fa647f143b39b137bd8ce3ba74c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "aaaeb4c5ac95478582a46fe58a3929d4": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "aabbe9baf8f14548b7be49e3438ef9bb": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "aae43a29196c4ca98c8239dea794a67c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "ab0e95bfe811467a865aa8407cf601d0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "ab3f4ed0216c492ca8edbb670b1cc494": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "ab56bbd8216b4064b9ba7d06e01ac3df": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_d58eeb9858b444f4b013f7884076b091", - "style": "IPY_MODEL_3bf12235c69c4702bcc437e7e34783fc", - "value": "Calculating control matrix: 100%" - } - }, - "ab6db57218484327a17c6fff02a18e3b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "ab6e9aa1d8e74f24bd8e863307708437": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "ab6f0772524e49198867344c8b8606e1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "abd4bf2a037646929fd6a9ab5842a1c1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_e3bfafe515f84dfd974fa97e92f423b1", - "max": 2, - "style": "IPY_MODEL_73e7cfc1885a4e138788cc599a43df58", - "value": 2 - } - }, - "abdca7559a894f43985d64f515badfa0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_ba64d7699473443f9e7cdb152507f861", - "IPY_MODEL_a10168ba124041259a8e8a2d2e1a1531", - "IPY_MODEL_398ba364d4204fbcad9dc37f96ace5a0" - ], - "layout": "IPY_MODEL_39e8a5e0588247ff994f8a5ff2d02254" - } - }, - "ac960e999a3941c2b932dae708aff369": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "ace97575d4ac40f2956f5f8da0667f19": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_4601a08e94cc45039a11eb08ca946b91", - "style": "IPY_MODEL_0d3f2ec0099748b1bf5904bd7e0aa3cb", - "value": "Calculating control matrix: 100%" - } - }, - "adc769bb587648429d77cb8c7f1f126f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_5278db8b55654ffb9040aeb56efa818b", - "IPY_MODEL_0effd8c6b7904d92b6a077c4d5dd0b5d", - "IPY_MODEL_e7dfe7b5071a4223a29f4aaf98d881b5" - ], - "layout": "IPY_MODEL_99df6b69fbe641b9a2d73246b3561802" - } - }, - "ade0b3c337ef4904ab95d77b2db285ea": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_b9d899e7cdfb4d00987c9be759563916", - "IPY_MODEL_0c5e222c143241f681f3e3cde7910ebc", - "IPY_MODEL_b880baed9d7545bfb693bbab218347b7" - ], - "layout": "IPY_MODEL_1a5575397eaf4b4c938d6ac596bc9641" - } - }, - "ae3a067d62e74b76be46df6a6bad45a5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "ae3f22d09b3545eaa339c14c65c5fffd": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "ae624bf82666471ca2264552773ccc15": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "af2f0c5525ce4c77b8701a154dc4e275": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "af477303cf7f47ad91450cd7241aa2fe": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_0a3bbcb53d1f49538ce5fec88565cd2c", - "style": "IPY_MODEL_98852bf682a74286af11a84b20acccd8", - "value": " 16/16 [00:00<00:00, 42.41it/s]" - } - }, - "af514860997948818ae663c47df6ff86": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "afb0439a9a104002a3049bdbee6c8e3f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "afbc52bb0e2940cbaaa9699750fefcfc": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b0501299bfc74dca9d3d52d4058aaa3d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "b0d8691f27af4cf1b0ea82c4269a71b4": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_5da566b5bbfb4416aa048d8067c31042", - "max": 2, - "style": "IPY_MODEL_e11dec95a82d44279eed539cb5dd19b9", - "value": 2 - } - }, - "b14e06ed731b43eea2b93ad4fbcb732f": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b243fc684a19408aa4510fdaf4f1fa08": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_aa2dbd18df9946eda673f1d0ab568c41", - "max": 3, - "style": "IPY_MODEL_8e59273150414d0ba7a72b14d942eaa9", - "value": 3 - } - }, - "b2717127ed9040218b8cc0ea9055aee4": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_30f8ae7e8e804f46b689919701e6b0a1", - "style": "IPY_MODEL_d021fabacb3b43fca18680ba52b38009", - "value": "Calculating control matrix: 100%" - } - }, - "b28db7e99a874e9ab52b83e271a1fead": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "b2a4c2e43f844147964f52c5858abc1d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "b2aff5db25f14bc788e7093c02796b95": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b2f263e3c07145f0ab3b9ac0ce858822": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b31a33b983ec44f6b222f2e258ea1a98": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "b3d8f8cf767f49fe83e8c4384cb9dec5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b494fb4777bb46f4b3f0ebaacdeba3b1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_9ee5628e83124ef788e22fcb23d58221", - "IPY_MODEL_b243fc684a19408aa4510fdaf4f1fa08", - "IPY_MODEL_989b89bdadd34b39829bc0d4c222d50d" - ], - "layout": "IPY_MODEL_c9945eee33444e96af366099ddcfddaf" - } - }, - "b4e1a0bad1d44908a35d4f0f541e34da": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b5009aa1b3264355a88030d84e41fc15": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b50d0ddc8149451588f97b61448e5550": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "b554f43b6632476397ba0640396ed8ee": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_a05a418c2dcd4a2b8e1981fc77193f28", - "style": "IPY_MODEL_504525b5ab3840939bf861aea868bf7b", - "value": " 30/30 [00:00<00:00, 49.77it/s]" - } - }, - "b5a6d09a09c14ee7a84abc01eafe9193": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_6e0a5131749c472393533fb66e6f80b2", - "style": "IPY_MODEL_662c401cf2a645059acd331793267819", - "value": " 3/3 [00:00<00:00, 31.85it/s]" - } - }, - "b5ae4481853e4a1aac8a6aede5677b77": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b6ef6c349eec4064a4583d3109db2639": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b7107f521b734c7489f90a93a2ef044f": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b71f44e6ec43425586a9a48d7b1ef122": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_9d5b87b3bb504592b809e5dd441e28e3", - "max": 120, - "style": "IPY_MODEL_f616ff8c6b6f4bd8919875155083d122", - "value": 120 - } - }, - "b7668a46d73f4a3386f5c3ce687f56c2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "b79138aadd6443488bb9c339d97fa87e": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b8479a96a6084426a41f3ca6eeb85f3d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b876a1ac1c6f41f59b1a81ee472f2344": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b880baed9d7545bfb693bbab218347b7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_1a56f84b580b4dc2b7535b73e3e77600", - "style": "IPY_MODEL_a8012758db6e49f2af5ff7714f2ff98d", - "value": " 30/30 [00:00<00:00, 50.37it/s]" - } - }, - "b9d5aad23ac3451a857c4de89dab5d84": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_8f024841fc7045b5817ed0b173984cb2", - "style": "IPY_MODEL_1a59926302f14dfead50a26c06e22632", - "value": " 16/16 [00:00<00:00, 40.42it/s]" - } - }, - "b9d899e7cdfb4d00987c9be759563916": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_f8643b011aab42f79e5b0a52cb631e9f", - "style": "IPY_MODEL_2b60aa5056bb4bcc93fdaa56fe1e27e7", - "value": "Calculating control matrix: 100%" - } - }, - "ba64d7699473443f9e7cdb152507f861": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_ce9e382ded6d42a4bcd8e999ff2a492f", - "style": "IPY_MODEL_54aaf167dc7e4bf1a1c10f57641c4170", - "value": "Calculating control matrix: 100%" - } - }, - "ba6d9407860941419e8b0386ec1d29c8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "bae5086111d94659a982a1876a1d4b0c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_5b9c85f79eef4abead987f22917589f5", - "max": 30, - "style": "IPY_MODEL_dfc18ba35ffa4362a65dbc090fe78b7e", - "value": 30 - } - }, - "bba49b65b05a4233b85a8f969c93703f": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "bc5f881a396b47d094b5ebef8fee83a1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_02b4c82a84c240489313cad0969221dd", - "style": "IPY_MODEL_e54ec4b9ac7b48f3950228178dcb51b3", - "value": " 2/2 [00:00<00:00, 28.60it/s]" - } - }, - "bc6bed82b0b740c29a157235441e62d1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_0035c57c0c1e4a09bdf2f1596dae28d4", - "max": 2, - "style": "IPY_MODEL_83e6c25f305f4eb79cd642ecd3ea75bb", - "value": 2 - } - }, - "bd898a46ddd34210af087a1e855336d3": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "bf1143356c6e4310b8627bec1ac88f82": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_1456e508baa04aed8e503cffa077c995", - "IPY_MODEL_3fdbdbf4fe414e8a86953a71fd191e40", - "IPY_MODEL_e0382836ef2d4d509aaa2fa2bfa72988" - ], - "layout": "IPY_MODEL_c5647fc2ae7e418ea7b6e01fef525bbd" - } - }, - "bf242206a96a407bb0ba4ff3a6149387": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_24f7da1ab50a43d6bcfc63445ea1e6dc", - "IPY_MODEL_efef7da4b2e544689657885d1e1c85e5", - "IPY_MODEL_17173d9d998c44cd81c3abb5cd285d2a" - ], - "layout": "IPY_MODEL_bd898a46ddd34210af087a1e855336d3" - } - }, - "bfa0820a4c74480fb2eb5e1f6b1df6c0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "bfb0b7b181fe406daf46a51fa05ca82b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "bfbfab6acada41b5a7b88091bd17301d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_4354218d8ef8484d8d94fa27ff1ecd2b", - "style": "IPY_MODEL_2df2b72a2dbb485181fef3d500c5c28b", - "value": "Calculating control matrix: 100%" - } - }, - "c0a27b1c91f64ac682b190a76c08711f": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c0fd5b4f28594a5c9d7ec81d4b024066": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "c1904d4106ca459abcecffba7fccd8ec": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c2046f9f4db54854ae64b3caf54de0bd": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c22e7ad5c334428693a23a03d6f73160": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c261153c008d4145a4848e7065362398": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c27bcc5b773c4bc7b13959baeadc6eb3": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c2bbae1ae76441efb9ba30d5340d659d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "c2d10fd021644ee19177ebfab28841fe": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c2f297e2359a4dbc99cd9061e0b910dd": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c30906c13d5c40b8a31361bdc088caf8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c33b2023be094291a4de50bb598a28de": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_055e7159ab894ee0a640d4aea0372180", - "IPY_MODEL_500964b0afa4409098ff5f3b33f7470e", - "IPY_MODEL_7fe512297914431fa7c6513f620e5389" - ], - "layout": "IPY_MODEL_ea109a1f194e48d5872075b5d4c5a785" - } - }, - "c3a4a6bff9e4478faf5a6f8231f6a1f6": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c45830e77486433fb75a75fa4525a14b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_8301e859d7bd47a48cc5ee0056ce1795", - "style": "IPY_MODEL_6856a1d0d8364d13b432572ccea74af3", - "value": "Calculating control matrix: 100%" - } - }, - "c534040e9d8a4a0794a8951dc31b6a43": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c5647fc2ae7e418ea7b6e01fef525bbd": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "c590f19799de4feab3ac89c4e24349b4": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_8804b49a1b1245a98bd3425fd47e9bd1", - "max": 3, - "style": "IPY_MODEL_43f23d4da1894aa5881a40220b28b552", - "value": 3 - } - }, - "c5cbe32f1b634fe5b6bdf1157a29a465": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "c624bfa57e004189a7c10d3a8b0c813f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_dc4cb5538f7140079ce2b7cad21ebaa8", - "IPY_MODEL_fd3f1ab7efa648f7ba431a99780f2042", - "IPY_MODEL_2599432f29a842f8a34063828de6b5b3" - ], - "layout": "IPY_MODEL_2b0f62df9f0d45948ef10767069f872b" - } - }, - "c68e1e2e93db4337b8bdc25b3648d911": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_30d2ce055ebb4dff9296908b12a20c3f", - "style": "IPY_MODEL_7faad4c6b2c84a3ab9a9c384bfef5643", - "value": " 3/3 [00:00<00:00, 27.31it/s]" - } - }, - "c763bb2b0f104fbaba88ee3ea80498b1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_52850592d0f24f9baa8b184c738b1159", - "style": "IPY_MODEL_af514860997948818ae663c47df6ff86", - "value": "Calculating control matrix: 100%" - } - }, - "c9945eee33444e96af366099ddcfddaf": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "cae2769b31cc4a2882efa4844ff1dcbb": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "cafd021dc8c9493aa15995b67d4b02cc": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_474d0c9e2a884191869998c14b79d465", - "max": 30, - "style": "IPY_MODEL_a713bbf2761047928c49e336f8031aee", - "value": 30 - } - }, - "cb72cf6a134f4f6a8d68d16d29f27795": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_c534040e9d8a4a0794a8951dc31b6a43", - "style": "IPY_MODEL_e58ea9b8ba4c484e9496c433691ad31e", - "value": "Calculating control matrix: 100%" - } - }, - "cb882e170b824d548806521bb9c96894": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_cc8d9457928b4bf89a107eb800b01fc2", - "style": "IPY_MODEL_74b3639b5b504caca4f28efa5ab65ca4", - "value": " 16/16 [00:00<00:00, 29.44it/s]" - } - }, - "cbdeda786fca4b2c953e78101b87b7f7": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "cbfed85412ba4f6fbfe68627c2e7c06f": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "cc060250afb74ee7bd472f6a30aad00b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "cc06c21b9d31476ba439095b6e862e64": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "cc1848d4554e4709b048b358145d8cd0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "cc507c369a9c482fa030262ebd2c272e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_c1904d4106ca459abcecffba7fccd8ec", - "style": "IPY_MODEL_ef24fc5ea82f4ae7a2965287d26c1f4c", - "value": "Calculating control matrix: 100%" - } - }, - "cc64fcfbb32f4eb08f14d134d69177df": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "cc8d9457928b4bf89a107eb800b01fc2": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "cd3f14397a614baa90acda39ed2ff1c8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "cd4ecd42f7494d0e84c2d302f1542b29": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_373b9a1e07e343d68ba1aa12b9aad549", - "style": "IPY_MODEL_5537ac9208e9419f9a1526d6401cbe26", - "value": "Calculating control matrix: 100%" - } - }, - "ce52dcba2ca343898890791001c4fb4f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "ce9e382ded6d42a4bcd8e999ff2a492f": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "cfa4637ba8924b7b8bf1748c66961e48": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_cfe9d13a974c401b9c73bd59735071d6", - "style": "IPY_MODEL_9a7b878ee3404456bc3b628eb8c6149e", - "value": "Calculating control matrix: 100%" - } - }, - "cfbeef04ad6541a7bb5f3f81737fa260": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "cfe9d13a974c401b9c73bd59735071d6": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "cfee3a5c3ac649589b9cb08e2ba87180": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d015eb41cabd4b1fa1fafa30967301a6": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d021fabacb3b43fca18680ba52b38009": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "d08daec1e1ec449fa5a08856340e3579": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d098cd7ceec0437697910761ae40264a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d110fcea04a44c38a6584629c209c7e1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "d1cf4b523f9b467195160b03d5364fa3": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d25efa6b22534413b941853d30efcacc": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_ae3a067d62e74b76be46df6a6bad45a5", - "style": "IPY_MODEL_97a89dc93862422180e66ae1775d2b0b", - "value": "Calculating control matrix: 100%" - } - }, - "d2b871d5c0424bf3a09b972b7ce41f8e": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d482dc5130dd4cad8291d190e3587cc2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_805f761b5e5b46a2811ffcd9b5b7bdf0", - "style": "IPY_MODEL_66c4f2c5b5df48fb8925bf649b1f8ce2", - "value": "Calculating control matrix: 100%" - } - }, - "d52fa09e340348a78791c1769beb7490": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d58eeb9858b444f4b013f7884076b091": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d5c693fe2bbd4f89910f1f661e578423": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d5d1dada04ab4247810239132dd0261a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d6003f5852b94c56bba995ef97e78f8f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "d6b9a2e50f884582b13804ea66747736": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d6bdb2a1b4b6446a806b073c740d2a86": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "d73a7ab4dcd440fc8f1221a7ae7be8ea": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "d78d3e18d1634e20b3718612872ee9b6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_ae3f22d09b3545eaa339c14c65c5fffd", - "max": 2, - "style": "IPY_MODEL_12f956fdadbd4ff49dd2df51e9cdc717", - "value": 2 - } - }, - "d7c3c0e17bc04d1ca90e09778892f72e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "d839f5849ebd40a19da0b023c02ab0ed": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "d8b24d878bea44cf9a8fdbd43863a354": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_506c4b2573164f95be037349cba3b93d", - "style": "IPY_MODEL_5b812b96949a499da3c763445c3e47b3", - "value": "Calculating control matrix: 100%" - } - }, - "d8c0b3b9c5964ea4b06f26485eb0ea74": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_2e0676255e434b0e93a90ae439ed4090", - "IPY_MODEL_9c24b69d706e4e3493abf59ecc87aa67", - "IPY_MODEL_af477303cf7f47ad91450cd7241aa2fe" - ], - "layout": "IPY_MODEL_57d64150750a414187a615a366def2b9" - } - }, - "d918e00465f94094815000016507bc7d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_5b64ef5e2fe44a6ab3239cb0797d8116", - "style": "IPY_MODEL_62b73ee9690f43c29d7f503ee1aa3544", - "value": "Calculating control matrix: 100%" - } - }, - "d9d0c364ec8a49fe9db78fadec6cc4bf": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d9d33f0f8fbc4064bce46ca023ff3bac": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_dd53eb7a258044b6a5c04cad72ca186d", - "style": "IPY_MODEL_169d1f5b964f43d58a353012e207917e", - "value": " 30/30 [00:00<00:00, 35.67it/s]" - } - }, - "dac8937531044e2faec9085786deac1b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "db282d7f0faf4d1f9c40ef6258f4b037": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "dbdd8314cae24eb59e1c1685ed13b501": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_6fb6a0e894bd4f62ac65e429a9e34bf7", - "max": 2, - "style": "IPY_MODEL_05cb56194360489b8ee240156f0cb05a", - "value": 2 - } - }, - "dbfcad557ec34c08a44cef32fca3d5c1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_9a6836932a074f4fa3d4e0c34533c22b", - "max": 120, - "style": "IPY_MODEL_39e58fee7e9d407abce44f2e4ea9d730", - "value": 120 - } - }, - "dc0193cc4435450b931db419d3d2a52a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "dc12f93682874cbbb17fc9688c8de292": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "dc4cb5538f7140079ce2b7cad21ebaa8": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_100bbd7cecd24855a8ffd8c0a6c4ae25", - "style": "IPY_MODEL_6b971b4da28a45daad132260073968ac", - "value": "Calculating control matrix: 100%" - } - }, - "dc583df429ec43a98d58cdfea69edfca": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "dcab1bdb86fc4be1bf153437493ab580": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "dcd131bcdbee42cda77bdf94b637e449": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "dd53eb7a258044b6a5c04cad72ca186d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "dd63da556691444f9bd7ff11bd34b5a7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "dd6941c12f26402da606dde2fd8d6798": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "dfb822c6241d46d1bc1eb157ac7dfc9c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_8fd6c5ac0087483aae4358804faa5a90", - "max": 30, - "style": "IPY_MODEL_cc64fcfbb32f4eb08f14d134d69177df", - "value": 30 - } - }, - "dfc18ba35ffa4362a65dbc090fe78b7e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "dff2bfa834a64dc9b6b465f735f41639": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "e00b23cf7b544052aa2dee5711f78798": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "e0382836ef2d4d509aaa2fa2bfa72988": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_114b0b789943459c8a592c3dcd26cb0b", - "style": "IPY_MODEL_a3243df133e64f33a10c36d9add343c2", - "value": " 2/2 [00:00<00:00, 33.98it/s]" - } - }, - "e069ff908c0d46edb33deddc9030afcb": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_752f654b569e4fcfaa1e85df22a2004b", - "IPY_MODEL_69df2a072aa1489793c81bbded784133", - "IPY_MODEL_46be02c7b73e459f9615dfe7f2e87edc" - ], - "layout": "IPY_MODEL_e09c0bf9d0b348cd9b2e7396c51f4a69" - } - }, - "e09c0bf9d0b348cd9b2e7396c51f4a69": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "e11dec95a82d44279eed539cb5dd19b9": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "e135a457cc364638b82df678918d0756": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_2233f95be1cf4f4293d8d375d4183076", - "max": 30, - "style": "IPY_MODEL_8ecc720f2e9f42228e65d866a5c77085", - "value": 30 - } - }, - "e158f624c7b54d8c82f57bcb91f02eab": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "e1afb3765e5f4202b868fead67775a47": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "e1bfcb5e9bd74ac9be5ee67a8979ecb2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_01e360dc28bb4f699595ddf5bcc7aaad", - "style": "IPY_MODEL_d6bdb2a1b4b6446a806b073c740d2a86", - "value": "Calculating control matrix: 100%" - } - }, - "e2035c497992436da32d09d657046bc7": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "e22cd519fc8745a0af1352afbfbdae96": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_d9d0c364ec8a49fe9db78fadec6cc4bf", - "style": "IPY_MODEL_f3527194fb5442a5b7a75404e1a22807", - "value": " 2/2 [00:00<00:00, 22.93it/s]" - } - }, - "e2b305fca38740fa83cdc20ab98bbd39": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "e35e712483f6486ebeeef0fb861b51b6": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "e3bfafe515f84dfd974fa97e92f423b1": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "e48e6e1fb35b4bfa81b8eb267d65ad67": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "e4e2c76d6dd44ae2bccd6006e59a969c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_d098cd7ceec0437697910761ae40264a", - "style": "IPY_MODEL_70a4301c205b403ea6f3e5d97572ad65", - "value": "Calculating control matrix: 100%" - } - }, - "e51358e5b6704862a143cfd1b5a6f945": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_31dbdea34ac94c6b94b398ed85518abc", - "IPY_MODEL_b71f44e6ec43425586a9a48d7b1ef122", - "IPY_MODEL_0c011b5c4f7f4acabdf9ef664033db8a" - ], - "layout": "IPY_MODEL_3b5ce768ccf440ec8b89f2dbdda591f3" - } - }, - "e54ec4b9ac7b48f3950228178dcb51b3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "e58ea9b8ba4c484e9496c433691ad31e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "e5961169ff4042b0865e8fc41c8a8896": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_cfa4637ba8924b7b8bf1748c66961e48", - "IPY_MODEL_15e86b36c19540f09e5e27a721b53121", - "IPY_MODEL_3950c08630424fbb9e2ec03528fdd90c" - ], - "layout": "IPY_MODEL_e2035c497992436da32d09d657046bc7" - } - }, - "e63a3e957a39453785ee65ad1b59f7c7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "e77ff30de0d44bf5866b074d95802726": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "e78c2918525a4513976b0b5d64b6d795": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_3fe0a2ad95e349e3becf3eda40644cab", - "IPY_MODEL_664803e9aaa040e28104cef75c217d19", - "IPY_MODEL_3e6542230fc04b2494422cb57d2a97e6" - ], - "layout": "IPY_MODEL_9598ec6cad45455e8e1ef4ca432776d6" - } - }, - "e7a4695bc8694037a8266a64766d7a73": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "e7dfe7b5071a4223a29f4aaf98d881b5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_cc06c21b9d31476ba439095b6e862e64", - "style": "IPY_MODEL_0221ff3fdf7d4740a63007b8f36574ef", - "value": " 30/30 [00:00<00:00, 40.68it/s]" - } - }, - "e818095d40514deeb493af43507365a7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_4f40e16f077940d9b2c74963b619f728", - "IPY_MODEL_583330b42c784dcaad44ecc3a6cc692a", - "IPY_MODEL_4f62b3bf77364075be2abdc8a9fa188f" - ], - "layout": "IPY_MODEL_b6ef6c349eec4064a4583d3109db2639" - } - }, - "e8738498e1dd447fa334ad0caafb722f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "e8b1f0442ae14da6b6fc24745640a650": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "e91fb19ea2af4e85bb9f7af5c86f6089": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_955cc25dd6494d10a4ed5dff47298b58", - "IPY_MODEL_3724b86324744dcf847b51e00dbe4594", - "IPY_MODEL_536edaf60e1d4fb58326044f4ead5c1c" - ], - "layout": "IPY_MODEL_84289559a31949b9b45232107852d79d" - } - }, - "e95902f56e884091a734db9b61fe33f5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_46f6f56504f24c0ea169591f88bbc787", - "IPY_MODEL_3ddc6ff964854a1e9f0944813b840323", - "IPY_MODEL_b5a6d09a09c14ee7a84abc01eafe9193" - ], - "layout": "IPY_MODEL_2180b0ddafca4816839dca25a8b6b5f1" - } - }, - "e997c56c215e4810bc7d2cb429ff2d7c": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "ea109a1f194e48d5872075b5d4c5a785": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "eaf28d0f01544ac697ba5f8aa9bdff14": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "eb0b327ccdbd48b8800c39a43033d1b8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "eb82b92f84f949a48f30888cbdbc5b38": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_0c6530f882304f3096298ec3b413a5fe", - "style": "IPY_MODEL_1060665b5b9f40b78a2b9fbe9659942b", - "value": " 30/30 [00:00<00:00, 961.73it/s]" - } - }, - "ebee6025f0d0474595b196d0cf4d372b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_65655eafb9fb4456a9f6f1599314e599", - "style": "IPY_MODEL_1d625c2bdc5d4bdebcfc185abed60b6b", - "value": " 3/3 [00:00<00:00, 30.00it/s]" - } - }, - "ec68f00444ca4152a728f4bf16f423ea": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "ecb1174415f2408d8aa06f7fd4faf5d8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "ecbc75b3e4ee463f9ab17266e4a30d71": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "ed0464802fed47af892cdb2fd91bc8ad": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_462396d743214e2e9645d3a013512274", - "IPY_MODEL_79e3fa2a56fa423f832121ef2b05f720", - "IPY_MODEL_5f064961421448779e06d6c4489ce300" - ], - "layout": "IPY_MODEL_7a2942b4c373479b8ee99c11918accc4" - } - }, - "ed27c606939a402398b8c3c0e712fbff": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_564e808d92744d5bb8a2a7ed18f45b8c", - "style": "IPY_MODEL_49c79a7dff944c84bc5074df30107d9a", - "value": " 30/30 [00:00<00:00, 479.97it/s]" - } - }, - "ed2cdc5fc6384503aab43ddfa37eb481": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "ed3a5b08a78e4e41b9172a4c7083c605": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_5fa1d488983449168bd24da5c79b8a14", - "style": "IPY_MODEL_4a1d5b836d284c64a08ba7d162af7c3a", - "value": "Calculating control matrix: 100%" - } - }, - "ee746ab8008044deb5d1b13680c15335": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "ee76c485a0334b8982546f09fe9d8e2b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "ef24fc5ea82f4ae7a2965287d26c1f4c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "ef6318d7e7fa41a3904ad736a035d1a0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_3a4c0c11eda947cc8ea4f8ce63b6733f", - "max": 2, - "style": "IPY_MODEL_438e943baed84eb9b93b026de29fd830", - "value": 2 - } - }, - "ef7fc96475d942e4b2cf88e811f12306": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_2ad3302737fa4bfdbb116c23a02c5161", - "max": 3, - "style": "IPY_MODEL_381ba87cd06d477c8581cd181b704da1", - "value": 3 - } - }, - "efef7da4b2e544689657885d1e1c85e5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_1e009a5c1d854dcd85b778e6639f7990", - "max": 2, - "style": "IPY_MODEL_2f6261c75ef34a8fbbdfcc173bc694e4", - "value": 2 - } - }, - "eff29526874a4b458315519e5cb1f628": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_ffd03dce94da4a20aadcfb3066321446", - "style": "IPY_MODEL_2ed4ada4f6364285b70fd3f25fad7e7a", - "value": " 60/60 [00:00<00:00, 63.39it/s]" - } - }, - "effabb5611b040229f8e6273c9bdb560": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_7704c748a92e4730ba0832ee794f5fdf", - "style": "IPY_MODEL_ed2cdc5fc6384503aab43ddfa37eb481", - "value": " 3/3 [00:00<00:00, 31.83it/s]" - } - }, - "f0063a51a0ed494c9427587d4422c425": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "f035432e789d4193af007f7626a062e7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "f0422094e2eb41e6b6a8c52d8b1592b1": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "f0b4ab6a25fb4605ae5bbee01bf2f7d3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "f0d23e008b5c4dea91d59d9faada93ab": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_24b82a6f4c154cf8ac3efcd4daa91aa8", - "style": "IPY_MODEL_26f55c95e8144c0e92e857cce31bcf5d", - "value": " 2/2 [00:00<00:00, 31.59it/s]" - } - }, - "f108dd0ea0334e3cb2e0cf1b43219c0b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "f27e5ddadf214b89a9a1861b457f281d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "f2ebd381f7be4f5c8ff01a16b2e441f7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_c2f297e2359a4dbc99cd9061e0b910dd", - "style": "IPY_MODEL_6feb6fbb8dac491a9263497ae73d8ef5", - "value": " 3/3 [00:00<00:00, 31.88it/s]" - } - }, - "f3474445de4b4bb2bcb8aa19136d94b0": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "f3527194fb5442a5b7a75404e1a22807": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "f3529a025ef048dc968fad581602e831": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "f46d7edd3f1143bba2c85a916fc3a355": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "f4775592ee29463e9ae848c176723321": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "f4dc8dbb76a34edbbadbeaa8b3d7cc16": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_9daedab20bcd489292625833459a25c3", - "style": "IPY_MODEL_cae2769b31cc4a2882efa4844ff1dcbb", - "value": "Calculating control matrix: 100%" - } - }, - "f544f88ea37d4485bd92b3ad1d5842bf": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_544aac9981544eb8a5251dcdf735d1ba", - "style": "IPY_MODEL_6d20925d43994a4bb0b662e06fe4f3ed", - "value": "Calculating control matrix: 100%" - } - }, - "f616ff8c6b6f4bd8919875155083d122": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "f663ad6171a244a29861598ca2e3a11e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "f675bfdef43345de89f9b1c98b1d7143": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_a153ed8157e54f499e45babaeb81f1ee", - "style": "IPY_MODEL_4de7122e999646ea96171ad592263a2b", - "value": "Calculating control matrix: 100%" - } - }, - "f69673883f86432389ec451a280f5b6e": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "f6d55b00e76f478e9b806cb047d6a36c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_2bccd66c63944cefb5f4ebb23810daa1", - "max": 3, - "style": "IPY_MODEL_ee76c485a0334b8982546f09fe9d8e2b", - "value": 3 - } - }, - "f735b092000d4b64b46b4633a2506078": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "f8181db41df64c2eadd22127927099df": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_40cfae6982eb4ac1b1a625dd459268c3", - "IPY_MODEL_3a44d17e1242496490ec0ed368f02ee2", - "IPY_MODEL_02b889e14f684a8a91024474a0f40c50" - ], - "layout": "IPY_MODEL_05dca1bfa63d41e6b0ec4ce3be211bc8" - } - }, - "f8643b011aab42f79e5b0a52cb631e9f": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "f899ed44dc4a4d4696e52c51b909a769": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_b5009aa1b3264355a88030d84e41fc15", - "max": 2, - "style": "IPY_MODEL_8eca13a16ae5493495a99368e1089bea", - "value": 2 - } - }, - "f8cf547dc2dd48e784b72d1b71e29dda": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_f97d5c69cbcf45e785b3c45e8e144698", - "max": 30, - "style": "IPY_MODEL_85cf891ad3124f3982e35feace9332e0", - "value": 30 - } - }, - "f9197e47c9bd42bc814703fe9b1d701f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_0fdca502729b48068fc67ca7ee7679bd", - "style": "IPY_MODEL_dcab1bdb86fc4be1bf153437493ab580", - "value": " 3/3 [00:00<00:00, 31.46it/s]" - } - }, - "f97411d096d04b4ab9718643e14d9b88": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_c45830e77486433fb75a75fa4525a14b", - "IPY_MODEL_4b26a854b44044b5ae2ada7b231d57f9", - "IPY_MODEL_16dd86e3489a40fc8a6a7909442a7cdb" - ], - "layout": "IPY_MODEL_d1cf4b523f9b467195160b03d5364fa3" - } - }, - "f97d5c69cbcf45e785b3c45e8e144698": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "fa1a4d1af90f4364a698fba5522d62c4": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "fa897554ae7e4632a5149aad853b6c1f": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "fb442466f6e444cf8a5b6a256ed053c8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "fb7f2863b8d94021ba7e7fbd7675c93f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "fc194d12e0cf42c0b2cd27adaec2c57f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HTMLModel", - "state": { - "layout": "IPY_MODEL_300beeaf4f4544df9ec942551b314383", - "style": "IPY_MODEL_1d2d60f573a947c0a748a2ad03baaa79", - "value": "Calculating control matrix: 100%" - } - }, - "fd3f1ab7efa648f7ba431a99780f2042": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_0f7b27348d7540419620ca053eff0d09", - "max": 2, - "style": "IPY_MODEL_e48e6e1fb35b4bfa81b8eb267d65ad67", - "value": 2 - } - }, - "fd4238681c9e4d7baf01c97579044489": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "fd530482a7f44f0bbb2229b2f93e703a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", - "state": { - "bar_style": "success", - "layout": "IPY_MODEL_c261153c008d4145a4848e7065362398", - "max": 30, - "style": "IPY_MODEL_cc1848d4554e4709b048b358145d8cd0", - "value": 30 - } - }, - "fd663a306d434b9ea90ed1f8b28bd997": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "fe5f8666809a4222bc03942f9958a2b7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_76f4307bc1274d02ae93eade27fc5b5d", - "IPY_MODEL_37cb1947f6d4401281bd860a3a8193e4", - "IPY_MODEL_0f0218c2de7c46c980460b981d9c5ad8" - ], - "layout": "IPY_MODEL_e8b1f0442ae14da6b6fc24745640a650" - } - }, - "fee565f7bf3449aeba84fc470c2c3f9e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_8d4a3ed079af41bbb06d47f6b0ff8e68", - "IPY_MODEL_d78d3e18d1634e20b3718612872ee9b6", - "IPY_MODEL_9ed3d83518774bc2a1493066ed876ef0" - ], - "layout": "IPY_MODEL_2647f0e25c78448cab40555ca82f9346" - } - }, - "feff0e5223274d8697e5b55020a05781": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "ff0462fe7de341908b7c23175115f978": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "ff1527c180524158a228e367e910a69d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "ff3ff286cbb748b8a6434a5d1f8c174d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ProgressStyleModel", - "state": { - "description_width": "" - } - }, - "ff47bc546f49486cb3916a1c29528273": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "ff4fe34e1930454ba3a8c5cb940f28ad": { + "ff579bc788694c4c8359df1a61d1978f": { "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "FloatProgressModel", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", "state": { - "bar_style": "success", - "layout": "IPY_MODEL_554e970c285f4879a8fe96d6daa51e03", - "max": 5, - "style": "IPY_MODEL_310c653bc6244b50bfbfd9bff241d9ed", - "value": 5 + "description_width": "", + "font_size": null, + "text_color": null } }, - "ff98adb68f72479791e9e70d30aa1077": { + "ff9b333bf3224113a8028932a3fd659d": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} }, - "ffd03dce94da4a20aadcfb3066321446": { + "ffd4ade22695421692094b3b094db178": { "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", + "model_module_version": "2.0.0", "model_name": "LayoutModel", "state": {} } diff --git a/doc/source/examples/qutip_integration.ipynb b/doc/source/examples/qutip_integration.ipynb index 282700a..f317925 100644 --- a/doc/source/examples/qutip_integration.ipynb +++ b/doc/source/examples/qutip_integration.ipynb @@ -15,18 +15,26 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import qutip as qt\n", "from qutip.control import grape, pulseoptim\n", - "from qutip.qip.algorithms import qft\n", + "from qutip.qip import algorithms\n", "\n", - "import filter_functions as ff\n", - "\n", - "%matplotlib notebook" + "import filter_functions as ff" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# use widget for interactive mode\n", + "%matplotlib inline" ] }, { @@ -38,7 +46,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -56,7 +64,7 @@ "# start point for the gate evolution\n", "U_0 = qt.identity(4)\n", "# Target for the gate evolution - Quantum Fourier Transform gate\n", - "U_tar = qft.qft(2)\n", + "U_tar = algorithms.qft(2)\n", "\n", "evo_time = 1\n", "n_ts = 50\n", @@ -88,987 +96,9 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "/* global mpl */\n", - "window.mpl = {};\n", - "\n", - "mpl.get_websocket_type = function () {\n", - " if (typeof WebSocket !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof MozWebSocket !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert(\n", - " 'Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.'\n", - " );\n", - " }\n", - "};\n", - "\n", - "mpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = this.ws.binaryType !== undefined;\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById('mpl-warnings');\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent =\n", - " 'This browser does not support binary websocket messages. ' +\n", - " 'Performance may be slow.';\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = document.createElement('div');\n", - " this.root.setAttribute('style', 'display: inline-block');\n", - " this._root_extra_style(this.root);\n", - "\n", - " parent_element.appendChild(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message('supports_binary', { value: fig.supports_binary });\n", - " fig.send_message('send_image_mode', {});\n", - " if (fig.ratio !== 1) {\n", - " fig.send_message('set_device_pixel_ratio', {\n", - " device_pixel_ratio: fig.ratio,\n", - " });\n", - " }\n", - " fig.send_message('refresh', {});\n", - " };\n", - "\n", - " this.imageObj.onload = function () {\n", - " if (fig.image_mode === 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function () {\n", - " fig.ws.close();\n", - " };\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "};\n", - "\n", - "mpl.figure.prototype._init_header = function () {\n", - " var titlebar = document.createElement('div');\n", - " titlebar.classList =\n", - " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", - " var titletext = document.createElement('div');\n", - " titletext.classList = 'ui-dialog-title';\n", - " titletext.setAttribute(\n", - " 'style',\n", - " 'width: 100%; text-align: center; padding: 3px;'\n", - " );\n", - " titlebar.appendChild(titletext);\n", - " this.root.appendChild(titlebar);\n", - " this.header = titletext;\n", - "};\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", - "\n", - "mpl.figure.prototype._init_canvas = function () {\n", - " var fig = this;\n", - "\n", - " var canvas_div = (this.canvas_div = document.createElement('div'));\n", - " canvas_div.setAttribute(\n", - " 'style',\n", - " 'border: 1px solid #ddd;' +\n", - " 'box-sizing: content-box;' +\n", - " 'clear: both;' +\n", - " 'min-height: 1px;' +\n", - " 'min-width: 1px;' +\n", - " 'outline: 0;' +\n", - " 'overflow: hidden;' +\n", - " 'position: relative;' +\n", - " 'resize: both;'\n", - " );\n", - "\n", - " function on_keyboard_event_closure(name) {\n", - " return function (event) {\n", - " return fig.key_event(event, name);\n", - " };\n", - " }\n", - "\n", - " canvas_div.addEventListener(\n", - " 'keydown',\n", - " on_keyboard_event_closure('key_press')\n", - " );\n", - " canvas_div.addEventListener(\n", - " 'keyup',\n", - " on_keyboard_event_closure('key_release')\n", - " );\n", - "\n", - " this._canvas_extra_style(canvas_div);\n", - " this.root.appendChild(canvas_div);\n", - "\n", - " var canvas = (this.canvas = document.createElement('canvas'));\n", - " canvas.classList.add('mpl-canvas');\n", - " canvas.setAttribute('style', 'box-sizing: content-box;');\n", - "\n", - " this.context = canvas.getContext('2d');\n", - "\n", - " var backingStore =\n", - " this.context.backingStorePixelRatio ||\n", - " this.context.webkitBackingStorePixelRatio ||\n", - " this.context.mozBackingStorePixelRatio ||\n", - " this.context.msBackingStorePixelRatio ||\n", - " this.context.oBackingStorePixelRatio ||\n", - " this.context.backingStorePixelRatio ||\n", - " 1;\n", - "\n", - " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", - " 'canvas'\n", - " ));\n", - " rubberband_canvas.setAttribute(\n", - " 'style',\n", - " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", - " );\n", - "\n", - " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", - " if (this.ResizeObserver === undefined) {\n", - " if (window.ResizeObserver !== undefined) {\n", - " this.ResizeObserver = window.ResizeObserver;\n", - " } else {\n", - " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", - " this.ResizeObserver = obs.ResizeObserver;\n", - " }\n", - " }\n", - "\n", - " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", - " var nentries = entries.length;\n", - " for (var i = 0; i < nentries; i++) {\n", - " var entry = entries[i];\n", - " var width, height;\n", - " if (entry.contentBoxSize) {\n", - " if (entry.contentBoxSize instanceof Array) {\n", - " // Chrome 84 implements new version of spec.\n", - " width = entry.contentBoxSize[0].inlineSize;\n", - " height = entry.contentBoxSize[0].blockSize;\n", - " } else {\n", - " // Firefox implements old version of spec.\n", - " width = entry.contentBoxSize.inlineSize;\n", - " height = entry.contentBoxSize.blockSize;\n", - " }\n", - " } else {\n", - " // Chrome <84 implements even older version of spec.\n", - " width = entry.contentRect.width;\n", - " height = entry.contentRect.height;\n", - " }\n", - "\n", - " // Keep the size of the canvas and rubber band canvas in sync with\n", - " // the canvas container.\n", - " if (entry.devicePixelContentBoxSize) {\n", - " // Chrome 84 implements new version of spec.\n", - " canvas.setAttribute(\n", - " 'width',\n", - " entry.devicePixelContentBoxSize[0].inlineSize\n", - " );\n", - " canvas.setAttribute(\n", - " 'height',\n", - " entry.devicePixelContentBoxSize[0].blockSize\n", - " );\n", - " } else {\n", - " canvas.setAttribute('width', width * fig.ratio);\n", - " canvas.setAttribute('height', height * fig.ratio);\n", - " }\n", - " canvas.setAttribute(\n", - " 'style',\n", - " 'width: ' + width + 'px; height: ' + height + 'px;'\n", - " );\n", - "\n", - " rubberband_canvas.setAttribute('width', width);\n", - " rubberband_canvas.setAttribute('height', height);\n", - "\n", - " // And update the size in Python. We ignore the initial 0/0 size\n", - " // that occurs as the element is placed into the DOM, which should\n", - " // otherwise not happen due to the minimum size styling.\n", - " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", - " fig.request_resize(width, height);\n", - " }\n", - " }\n", - " });\n", - " this.resizeObserverInstance.observe(canvas_div);\n", - "\n", - " function on_mouse_event_closure(name) {\n", - " return function (event) {\n", - " return fig.mouse_event(event, name);\n", - " };\n", - " }\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mousedown',\n", - " on_mouse_event_closure('button_press')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseup',\n", - " on_mouse_event_closure('button_release')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'dblclick',\n", - " on_mouse_event_closure('dblclick')\n", - " );\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband_canvas.addEventListener(\n", - " 'mousemove',\n", - " on_mouse_event_closure('motion_notify')\n", - " );\n", - "\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseenter',\n", - " on_mouse_event_closure('figure_enter')\n", - " );\n", - " rubberband_canvas.addEventListener(\n", - " 'mouseleave',\n", - " on_mouse_event_closure('figure_leave')\n", - " );\n", - "\n", - " canvas_div.addEventListener('wheel', function (event) {\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " on_mouse_event_closure('scroll')(event);\n", - " });\n", - "\n", - " canvas_div.appendChild(canvas);\n", - " canvas_div.appendChild(rubberband_canvas);\n", - "\n", - " this.rubberband_context = rubberband_canvas.getContext('2d');\n", - " this.rubberband_context.strokeStyle = '#000000';\n", - "\n", - " this._resize_canvas = function (width, height, forward) {\n", - " if (forward) {\n", - " canvas_div.style.width = width + 'px';\n", - " canvas_div.style.height = height + 'px';\n", - " }\n", - " };\n", - "\n", - " // Disable right mouse context menu.\n", - " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", - " event.preventDefault();\n", - " return false;\n", - " });\n", - "\n", - " function set_focus() {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "};\n", - "\n", - "mpl.figure.prototype._init_toolbar = function () {\n", - " var fig = this;\n", - "\n", - " var toolbar = document.createElement('div');\n", - " toolbar.classList = 'mpl-toolbar';\n", - " this.root.appendChild(toolbar);\n", - "\n", - " function on_click_closure(name) {\n", - " return function (_event) {\n", - " return fig.toolbar_button_onclick(name);\n", - " };\n", - " }\n", - "\n", - " function on_mouseover_closure(tooltip) {\n", - " return function (event) {\n", - " if (!event.currentTarget.disabled) {\n", - " return fig.toolbar_button_onmouseover(tooltip);\n", - " }\n", - " };\n", - " }\n", - "\n", - " fig.buttons = {};\n", - " var buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " for (var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " /* Instead of a spacer, we start a new button group. */\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - " buttonGroup = document.createElement('div');\n", - " buttonGroup.classList = 'mpl-button-group';\n", - " continue;\n", - " }\n", - "\n", - " var button = (fig.buttons[name] = document.createElement('button'));\n", - " button.classList = 'mpl-widget';\n", - " button.setAttribute('role', 'button');\n", - " button.setAttribute('aria-disabled', 'false');\n", - " button.addEventListener('click', on_click_closure(method_name));\n", - " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", - "\n", - " var icon_img = document.createElement('img');\n", - " icon_img.src = '_images/' + image + '.png';\n", - " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", - " icon_img.alt = tooltip;\n", - " button.appendChild(icon_img);\n", - "\n", - " buttonGroup.appendChild(button);\n", - " }\n", - "\n", - " if (buttonGroup.hasChildNodes()) {\n", - " toolbar.appendChild(buttonGroup);\n", - " }\n", - "\n", - " var fmt_picker = document.createElement('select');\n", - " fmt_picker.classList = 'mpl-widget';\n", - " toolbar.appendChild(fmt_picker);\n", - " this.format_dropdown = fmt_picker;\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = document.createElement('option');\n", - " option.selected = fmt === mpl.default_extension;\n", - " option.innerHTML = fmt;\n", - " fmt_picker.appendChild(option);\n", - " }\n", - "\n", - " var status_bar = document.createElement('span');\n", - " status_bar.classList = 'mpl-message';\n", - " toolbar.appendChild(status_bar);\n", - " this.message = status_bar;\n", - "};\n", - "\n", - "mpl.figure.prototype.request_resize = function (x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', { width: x_pixels, height: y_pixels });\n", - "};\n", - "\n", - "mpl.figure.prototype.send_message = function (type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "};\n", - "\n", - "mpl.figure.prototype.send_draw_message = function () {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({ type: 'draw', figure_id: this.id }));\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_resize = function (fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] !== fig.canvas.width || size[1] !== fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1], msg['forward']);\n", - " fig.send_message('refresh', {});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", - " var x0 = msg['x0'] / fig.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", - " var x1 = msg['x1'] / fig.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0,\n", - " 0,\n", - " fig.canvas.width / fig.ratio,\n", - " fig.canvas.height / fig.ratio\n", - " );\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function (fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_cursor = function (fig, msg) {\n", - " fig.rubberband_canvas.style.cursor = msg['cursor'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_message = function (fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_draw = function (fig, _msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function (fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n", - " for (var key in msg) {\n", - " if (!(key in fig.buttons)) {\n", - " continue;\n", - " }\n", - " fig.buttons[key].disabled = !msg[key];\n", - " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", - " if (msg['mode'] === 'PAN') {\n", - " fig.buttons['Pan'].classList.add('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " } else if (msg['mode'] === 'ZOOM') {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.add('active');\n", - " } else {\n", - " fig.buttons['Pan'].classList.remove('active');\n", - " fig.buttons['Zoom'].classList.remove('active');\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function () {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message('ack', {});\n", - "};\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function (fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " var img = evt.data;\n", - " if (img.type !== 'image/png') {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " img.type = 'image/png';\n", - " }\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src\n", - " );\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " img\n", - " );\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " } else if (\n", - " typeof evt.data === 'string' &&\n", - " evt.data.slice(0, 21) === 'data:image/png;base64'\n", - " ) {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig['handle_' + msg_type];\n", - " } catch (e) {\n", - " console.log(\n", - " \"No handler for the '\" + msg_type + \"' message type: \",\n", - " msg\n", - " );\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\n", - " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", - " e,\n", - " e.stack,\n", - " msg\n", - " );\n", - " }\n", - " }\n", - " };\n", - "};\n", - "\n", - "// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function (e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e) {\n", - " e = window.event;\n", - " }\n", - " if (e.target) {\n", - " targ = e.target;\n", - " } else if (e.srcElement) {\n", - " targ = e.srcElement;\n", - " }\n", - " if (targ.nodeType === 3) {\n", - " // defeat Safari bug\n", - " targ = targ.parentNode;\n", - " }\n", - "\n", - " // pageX,Y are the mouse positions relative to the document\n", - " var boundingRect = targ.getBoundingClientRect();\n", - " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", - " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\n", - "\n", - " return { x: x, y: y };\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * https://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys(original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object') {\n", - " obj[key] = original[key];\n", - " }\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function (event, name) {\n", - " var canvas_pos = mpl.findpos(event);\n", - "\n", - " if (name === 'button_press') {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * this.ratio;\n", - " var y = canvas_pos.y * this.ratio;\n", - "\n", - " this.send_message(name, {\n", - " x: x,\n", - " y: y,\n", - " button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event),\n", - " });\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype._key_event_extra = function (_event, _name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "};\n", - "\n", - "mpl.figure.prototype.key_event = function (event, name) {\n", - " // Prevent repeat events\n", - " if (name === 'key_press') {\n", - " if (event.key === this._key) {\n", - " return;\n", - " } else {\n", - " this._key = event.key;\n", - " }\n", - " }\n", - " if (name === 'key_release') {\n", - " this._key = null;\n", - " }\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.key !== 'Control') {\n", - " value += 'ctrl+';\n", - " }\n", - " else if (event.altKey && event.key !== 'Alt') {\n", - " value += 'alt+';\n", - " }\n", - " else if (event.shiftKey && event.key !== 'Shift') {\n", - " value += 'shift+';\n", - " }\n", - "\n", - " value += 'k' + event.key;\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n", - " return false;\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function (name) {\n", - " if (name === 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message('toolbar_button', { name: name });\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "\n", - "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", - "// prettier-ignore\n", - "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"svg\";/* 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" - } - ], + "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "from filter_functions import plotting\n", @@ -1104,8 +134,8 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", + "display_name": "Python 3 (Spyder)", + "language": "python3", "name": "python3" }, "language_info": { @@ -1118,7 +148,14 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.12.3" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": {}, + "version_major": 2, + "version_minor": 0 + } } }, "nbformat": 4, diff --git a/doc/source/filter_functions.rst b/doc/source/filter_functions.rst index 27344f6..0c4efd6 100644 --- a/doc/source/filter_functions.rst +++ b/doc/source/filter_functions.rst @@ -20,6 +20,14 @@ filter\_functions.basis module :undoc-members: :show-inheritance: +filter\_functions.gradient module +--------------------------------- + +.. automodule:: filter_functions.gradient + :members: + :undoc-members: + :show-inheritance: + filter\_functions.numeric module -------------------------------- @@ -44,14 +52,6 @@ filter\_functions.pulse\_sequence module :undoc-members: :show-inheritance: -filter\_functions.gradient module ----------------------------------------- - -.. automodule:: filter_functions.gradient - :members: - :undoc-members: - :show-inheritance: - filter\_functions.superoperator module -------------------------------------- diff --git a/examples/qft.py b/examples/qft.py index f136ed9..70f8502 100644 --- a/examples/qft.py +++ b/examples/qft.py @@ -146,8 +146,8 @@ def QFT_pulse(N: int = 4, tau: float = 1): swaps = [qip.operations.swap(N, [i, j]).full() for i, j in zip(range(N//2), range(N-1, N//2-1, -1))] prop = ff.util.mdot(swaps) @ QFT.total_propagator -qt.matrix_histogram_complex(prop) -print('Correct action: ', ff.util.oper_equiv(prop, qt_qft(N), eps=1e-14)) +qt.matrix_histogram(prop, bar_style='abs', color_style='phase') +print('Correct action: ', ff.util.oper_equiv(prop, qt_qft(N), eps=1e-13)) fig, ax, _ = plotting.plot_filter_function(QFT, omega) # Move the legend to the side because of many entries diff --git a/filter_functions/gradient.py b/filter_functions/gradient.py index cf3803d..576711a 100644 --- a/filter_functions/gradient.py +++ b/filter_functions/gradient.py @@ -46,7 +46,7 @@ --------- :func:`calculate_derivative_of_control_matrix_from_scratch` Calculate the derivative of the control matrix from scratch. -:func:`calculate_canonical_filter_function_derivative` +:func:`calculate_filter_function_derivative` Compute the filter function derivative from the control matrix. :func:`infidelity_derivative` Calculate the infidelity derivative. diff --git a/filter_functions/pulse_sequence.py b/filter_functions/pulse_sequence.py index f9ab875..3535c47 100644 --- a/filter_functions/pulse_sequence.py +++ b/filter_functions/pulse_sequence.py @@ -636,7 +636,7 @@ def get_filter_function( The filter function for each combination of noise operators as a function of omega. - .. _notes + .. _notes: Notes ----- @@ -1411,12 +1411,12 @@ def _concatenate_Hamiltonian( # cannot do this, we have to raise an exception since we cannot know # the sensitivities at other moments in time if they are non-trivial. nan_mask = np.isnan(concat_coeffs) - test = nan_mask.any(axis=1) - for i, (concat_coeff, mask) in enumerate(zip(concat_coeffs[test], nan_mask[test])): - nonnan_coeff = concat_coeff[~mask] + nan_idxs, = nan_mask.any(axis=1).nonzero() + for nan_idx in nan_idxs: + nonnan_coeff = concat_coeffs[nan_idx][~nan_mask[nan_idx]] if (nonnan_coeff == nonnan_coeff[0]).all(): # Constant value, use for empty segment - concat_coeffs[i, mask] = nonnan_coeff[0] + concat_coeffs[nan_idx, nan_mask[nan_idx]] = nonnan_coeff[0] else: raise ValueError('Not all pulses have the same noise operators and ' + 'non-trivial noise sensitivities so I cannot infer them.') @@ -1950,6 +1950,7 @@ def remap(pulse: PulseSequence, order: Sequence[int], d_per_qubit: int = 2, True Caching of attributes is automatically handled + >>> remapped_pulse.is_cached('filter_function') False >>> pulse.cache_filter_function(util.get_sample_frequencies(pulse)) diff --git a/filter_functions/util.py b/filter_functions/util.py index 4064ee0..3be1d98 100644 --- a/filter_functions/util.py +++ b/filter_functions/util.py @@ -1044,7 +1044,9 @@ def get_sample_frequencies(pulse: 'PulseSequence', n_samples: int = 300, spacing def hash_array_along_axis(arr: ndarray, axis: int = 0) -> List[int]: """Return the hashes of arr along the first axis""" - return [hash(arr.tobytes()) for arr in np.swapaxes(arr, 0, axis)] + # Adding 0.0 converts -0.0 to 0.0, which sanitizes arrays that compare as equal element-wise + # but result in different hashes + return [hash((arr + 0.0).tobytes()) for arr in np.swapaxes(arr, 0, axis)] def all_array_equal(it: Iterable) -> bool: diff --git a/setup.py b/setup.py index a6bd5b3..2e85ad3 100644 --- a/setup.py +++ b/setup.py @@ -19,10 +19,11 @@ def extract_version(version_file): extras_require = {'plotting': ['matplotlib'], 'bloch_sphere_visualization': ['qutip', 'matplotlib'], 'fancy_progressbar': ['ipynbname', 'jupyter'], - 'doc': ['jupyter', 'nbsphinx', 'numpydoc', 'sphinx', 'sphinx_rtd_theme'], + 'doc': ['jupyter', 'nbsphinx', 'numpydoc', 'sphinx', 'sphinx_rtd_theme', + 'ipympl', 'qutip-qip', 'qutip-qtrl'], 'tests': ['pytest>=4.6', 'pytest-cov', 'codecov']} -extras_require['all'] = [dep for deps in extras_require.values() for dep in deps] +extras_require['all'] = list({dep for deps in extras_require.values() for dep in deps}) setup(name='filter_functions', version=extract_version(read('filter_functions', '__init__.py')), diff --git a/tests/test_util.py b/tests/test_util.py index 531078d..4593212 100644 --- a/tests/test_util.py +++ b/tests/test_util.py @@ -442,6 +442,12 @@ def test_remove_float_errors(self): arr = util.remove_float_errors(arr, eps_scale) self.assertArrayEqual(arr, np.zeros(arr.shape, dtype=dtype)) + def test_hash_array_along_axis(self): + x = y = np.random.randn(5, 6) + x[3, 4] = 0.0 + y[3, 4] = -0.0 + self.assertEqual(*util.hash_array_along_axis([x, y], axis=0)) + def test_oper_equiv(self): with self.assertRaises(ValueError): util.oper_equiv(rng.standard_normal((2, 2)), rng.standard_normal((3, 3)))