Created
November 16, 2020 20:51
-
-
Save robintw/f42abfe296795e253fb9abcd2215b4dd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"metadata": { | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "import numpy as np\nfrom matplotlib.figure import Figure\nimport panel as pn\nimport panel.widgets as pnw", | |
"execution_count": 3, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "pn.extension()", | |
"execution_count": 7, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"application/javascript": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error() {\n console.error(\"failed to load \" + url);\n }\n\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n var skip = [];\n if (window.requirejs) {\n require([], function() {\n })\n }\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n if (skip.indexOf(url) >= 0) { on_load(); continue; }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n\tif (!js_urls.length) {\n on_load()\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.2.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.2.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.2.3.min.js\", \"https://unpkg.com/@holoviz/panel@^0.10.1/dist/panel.min.js\"];\n var css_urls = [\"https://unpkg.com/@holoviz/[email protected]/dist/css/alerts.css\", \"https://unpkg.com/@holoviz/[email protected]/dist/css/card.css\", \"https://unpkg.com/@holoviz/[email protected]/dist/css/widgets.css\", \"https://unpkg.com/@holoviz/[email protected]/dist/css/markdown.css\", \"https://unpkg.com/@holoviz/[email protected]/dist/css/json.css\", \"https://unpkg.com/@holoviz/[email protected]/dist/css/dataframe.css\"];\n\n var inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {} // ensure no trailing comma for IE\n ];\n\n function run_inline_js() {\n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", | |
"application/vnd.holoviews_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error() {\n console.error(\"failed to load \" + url);\n }\n\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n var skip = [];\n if (window.requirejs) {\n require([], function() {\n })\n }\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n if (skip.indexOf(url) >= 0) { on_load(); continue; }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n\tif (!js_urls.length) {\n on_load()\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.2.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.2.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.2.3.min.js\", \"https://unpkg.com/@holoviz/panel@^0.10.1/dist/panel.min.js\"];\n var css_urls = [\"https://unpkg.com/@holoviz/[email protected]/dist/css/alerts.css\", \"https://unpkg.com/@holoviz/[email protected]/dist/css/card.css\", \"https://unpkg.com/@holoviz/[email protected]/dist/css/widgets.css\", \"https://unpkg.com/@holoviz/[email protected]/dist/css/markdown.css\", \"https://unpkg.com/@holoviz/[email protected]/dist/css/json.css\", \"https://unpkg.com/@holoviz/[email protected]/dist/css/dataframe.css\"];\n\n var inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {} // ensure no trailing comma for IE\n ];\n\n function run_inline_js() {\n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));" | |
}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"application/vnd.holoviews_load.v0+json": "\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n }) \n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n", | |
"application/javascript": "\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n }) \n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "def random_imshow(magnitude=5, sigma=2, colormap='viridis'):\n arr = np.random.randn(10,10)\n arr *= sigma\n arr += magnitude\n \n ax = Figure().add_subplot()\n im = ax.imshow(arr, vmin=0, vmax=10, cmap=colormap)\n c = ax.figure.colorbar(im)\n \n return ax.figure", | |
"execution_count": 4, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "magnitude = pnw.IntSlider(end=10, name='value', value=5, value_throttled=5)\ncmap = pnw.RadioButtonGroup(name='cmap', value='viridis', \n options=['viridis', 'plasma', 'inferno', 'magma', 'cividis'])\n\nboundfn = pn.bind(random_imshow, magnitude=magnitude, sigma=3, colormap=cmap)\n\npane = pn.Row(pn.Column(magnitude, cmap), boundfn)\n\npn.state.add_periodic_callback(boundfn, period=100)\n\npane", | |
"execution_count": 9, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": {}, | |
"metadata": {} | |
}, | |
{ | |
"output_type": "execute_result", | |
"execution_count": 9, | |
"data": { | |
"text/html": "<div id='1013'>\n\n\n\n\n\n <div class=\"bk-root\" id=\"e4e3f8e6-db58-4449-a25e-57ee01aaa145\" data-root-id=\"1013\"></div>\n</div>\n<script type=\"application/javascript\">(function(root) {\n function embed_document(root) {\n var docs_json = {\"07c80f36-aa92-4309-8c60-44c724165ea1\":{\"roots\":{\"references\":[{\"attributes\":{\"children\":[{\"id\":\"1018\"}],\"margin\":[0,0,0,0],\"name\":\"Row00043\"},\"id\":\"1017\",\"type\":\"Row\"},{\"attributes\":{\"end\":10,\"format\":\"0[.]00\",\"margin\":[5,10,5,10],\"start\":0,\"title\":\"value\",\"value\":5,\"value_throttled\":5},\"id\":\"1015\",\"type\":\"Slider\"},{\"attributes\":{\"children\":[{\"id\":\"1014\"},{\"id\":\"1017\"}],\"margin\":[0,0,0,0],\"name\":\"Row00046\"},\"id\":\"1013\",\"type\":\"Row\"},{\"attributes\":{\"children\":[{\"id\":\"1015\"},{\"id\":\"1016\"}],\"margin\":[0,0,0,0],\"name\":\"Column00038\"},\"id\":\"1014\",\"type\":\"Column\"},{\"attributes\":{\"client_comm_id\":\"9c339bea0b0d431e954c4529eccf9b09\",\"comm_id\":\"8770c5ff0f5d4157acb2e9711d191f81\",\"plot_id\":\"1013\"},\"id\":\"1019\",\"type\":\"panel.models.comm_manager.CommManager\"},{\"attributes\":{\"active\":0,\"labels\":[\"viridis\",\"plasma\",\"inferno\",\"magma\",\"cividis\"],\"margin\":[5,10,5,10]},\"id\":\"1016\",\"type\":\"RadioButtonGroup\"},{\"attributes\":{\"height\":345,\"margin\":[5,5,5,5],\"name\":\"ParamFunction00039\",\"text\":\"<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA5kAAAKzCAYAAACUFsnCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAABYlAAAWJQFJUiTwAAA45UlEQVR4nO3dfbiVZb0v+u/wjRdFEkglzYWEINbatWVtVFTaqKEHrXSJu65jL2R20kpEvU7Qafmu7HQnGdexZaGnXbRa7g1JuZQUFdBChUJ25XVm4gJiWesY6lJR0FTmc/4wWMFErcE9x8OYfj5d45/xDObzpSkvP773fT+NqqqqAAAAQAG71B0AAACAnsOQCQAAQDGGTAAAAIoxZAIAAFCMIRMAAIBiDJkAAAAUY8gEAACgGEMmAAAAxRgyAQAAKMaQCQAAQDGGTAAAAIoxZAIAAFCMIRMAAIBiDJkAAAAUY8gEAACgGEMmAAAAxRgyAQAAKMaQCQAAQDGGTAAAAIoxZAIAAFCMIRMAAIBiDJkAAAAUY8gEAACgGEMmAAAAxRgyAQAAKMaQCQAAQDGGTAAAAIoxZAIAAFCMIRMAAIBiDJkAAAAUY8gEAACgGEMmAAAAxRgyAQAAKMaQCQAAQDGGTAAAAIoxZAIAAFCMIRMAAIBiDJkAAAAUY8gEAACgGEMmAAAAxRgyAQAAKMaQCQAAQDGGTAAAAIoxZAIAAFCMIRMAAIBiDJkAAAAUY8gEAACgGEMmAAAAxRgyAQAAKMaQCQAAQDGGTAAAAIoxZAIAAFCMIRMAAIBiDJkAAAAUY8gEAACgGEMmAAAAxRgyAQAAKMaQCQAAQDGGTAAAAIoxZAIAAFCMIRMAAIBiDJkAAAAUY8gEAACgGEMmAAAAxRgyAQAAKMaQCQAAQDGGTAAAAIoxZAIAAFCMIRMAAIBiDJkAAAAUY8gEAACgGEMmAAAAxRgyAQAAKMaQCQAAQDGGTAAAAIoxZAIAQA83d+7cnHfeeTn22GOz9957p9Fo5GMf+9gb/pgHHnggEyZMyIABA9K3b9/8h//wH3L99ddn06ZNLUpNu9qt7gAAAED3uuqqq/KLX/wie+21Vw488MD8+te/fsPP/+hHP8rpp5+e3r175yMf+UgGDBiQf/qnf8oFF1yQJUuWZM6cOS1KTjtqVFVV1R0CAADoPosWLcqBBx6YYcOG5b777su4ceNy5pln5nvf+16Xz65fvz7Dhg3Lc889lyVLluRv/uZvkiQvvfRSjjvuuDz44IP5x3/8x3z0ox9t9U+DNmG5LAAA9HDjxo3LIYcckkaj8aafnTt3bp588sl89KMf3TJgJknv3r1z1VVXJUn+/u//vtuy0v4MmQAAwBYLFy5Mkpx00kldro0dOzZ9+/bNAw88kD/84Q+tjkabMGQCAABbPProo0mS4cOHd7m222675eCDD86rr76a1atXtzoabcLBP3S7IUOGZP369Tn44IPrjgIAtLE1a9Zk7733zm9+85u6o+TMM89808NzSlqzZs3r/l1q+fLlRe/13HPPJUn69++/3eub33/22WeL3peew5BJt1u/fn2ee2Z9HnumZ/1r18v771V3hG6xy6t1Jyhvv/3+re4Ixf1/zwyoO0Jx1R6ddUfoFof2e7LuCMVV6XlnBj767H51R+gWg/d+tu4IRW148cW6I2zx61//Oh3/74qMPGSPbr9Xx2MvJ43e3X6fP9fmc0P/nP2dvDUZMul2Bx98cB57ZnWOaJxQd5SifnvWmLojdIve/9bz/vL4f154S90Rirv0f/a8E/1e+aueubdn4bj/u+4Ixb1U9bx/EDj6n6bUHaFbXHL8vLojFHXF3/4iA3vtPCujRh6yR3624KBuv89/Gv8vye4jizeWr2dzU7m50dzW+vXrt/ocbMueTAAAaEKVKp0t+F+rVw+MGDEiSbJy5cou11599dWsWbMmu+22W4YOHdrSXLQPQyYAALDFcccdlyS58847u1y7//77s3HjxowZMya9evVqdTTahCETAACatKnq7PZXq02cODGDBg3KLbfckp///Odb3n/ppZfyd3/3d0mSc889t+W5aB/2ZAIAQA/3wx/+MD/84Q+TJE888USS5MEHH8ykSZOSJIMGDcpXv/rVJMnee++dWbNmZeLEifnP//k/56Mf/WgGDBiQ2267LY8++mgmTpyYj3zkI3X8NGgThkwAAGhClaSzBfslqyQ7eo7r//pf/yvf+c53tnpv9erVW551+Vd/9VdbhswkOfXUU3Pffffl6quvzg9+8IO89NJLGTZsWGbMmJHJkyc7WZY3ZMgEAIAe7rLLLstll132F/2Yo48+OvPnz++eQPRo9mQCAABQjCYTAACa8tojTFpxH2gnmkwAAACK0WQCAEATqiSb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UIwmEwAAmmRPJnSlyQQAAKAYQyYAADSjauGrkJ/85Cc5/fTTM3jw4PTq1SuDBw/O+PHjM3/+/HI34S3PclkAAHgLuOqqq3LxxRdn0KBBOeWUUzJ48OA89dRTWbFiRRYvXpwJEybUHZEewpAJAABNabRoT+aO32POnDm5+OKLc8IJJ+TWW29Nv379trr+yiuv7PA9YDPLZQEAoAfr7OzM1KlT07dv33z/+9/vMmAmye67715DMnoqTSYAADShSlK14EGZO3qLBx54IGvWrMnEiROzzz775I477sgjjzyS3r17Z/To0TnqqKOK5ITNDJkAANCD/exnP0uS7Lfffjn88MPzq1/9aqvrY8eOzdy5c/P2t7+9jnj0QIZMWuKVt/XKug++q+4YRe018Lm6I3SLZ9b3rTtCce+779y6IxS334961R2hvF1aUAfUYPg7f193hOL+j3/+SN0Rivu3F3ve731Jcsi0FXVHKOrpP7yY7Ft3iq216jmZHR0dGTVq1HavLV++/A1/7Lp165IkN954Yw4++ODcc889OeKII7J27dpcdNFFueuuu3LGGWdk8eLFpWPzFmVPJgAA9GCbNm1KklRVlblz5+b444/PXnvtlXe/+92ZN29eDjzwwNx333158MEHa05KT6HJBACAZrWoyRw5cuSbNpavZ5999kmSDB06NO9973u3utanT5+ceOKJufnmm7Ns2TL7MylCkwkAAD3YiBEjkiRve9vbtnt98xD64osvtioSPZwmEwAAmlG15nTZHT1eduzYsdltt93y2GOP5eWXX84ee+yx1fVHHnkkSTJkyJAduxH8kSYTAAB6sEGDBuUjH/lInnvuuVxxxRVbXbv77rtz1113pX///jnppJNqSkhPo8kEAIAebsaMGVm6dGmuvvrq3H///Rk9enTWrl2befPmZdddd82sWbNedzkt/KUMmQAA0Kw2efrSvvvum6VLl+aqq67KvHnz8tBDD6Vfv345+eST86UvfSlHHnlk3RHpQQyZAADwFjBgwIDMmDEjM2bMqDsKPZwhEwAAmlS16BEm0E4c/AMAAEAxmkwAAGhWm+zJhFbSZAIAAFCMJhMAAJpkTyZ0pckEAACgGE0mAAA0o0pr9mTa90mb0WQCAABQjCYTAACa0vjjqxX3gfahyQQAAKAYTSYAADTLfknoQpMJAABAMYZMXtfs2bPTaDTSaDRy00031R0HAGDnU7XgBW3GkMl2Pf744znvvPOy11571R0FAABoI4ZMuqiqKp/61KcycODAnHPOOXXHAQDYeVWN7n9BmzFk0sXMmTOzcOHCfPvb386ee+5ZdxwAAKCNGDLZSkdHR6ZNm5bzzz8/Y8eOrTsOAMBOq0pSVS141f0Thb+QR5iwxauvvpqPf/zjOeiggzJ9+vS/+MePGjVqu+93dHQkew7c0XgAAEAbMGSyxRVXXJEVK1bkpz/9afr06VN3HACAnVurTn9VZdJmDJkkSZYtW5bp06fnoosuylFHHdXU11i+fPl23x81alQ6/mXdjsQDAADahCGTLctkhw8fniuvvLLuOAAA7cPpr9CFg3/ICy+8kJUrV6ajoyO9e/dOo9HY8rr88suTJJ/5zGfSaDQyZcqUesMCAAA7NU0m6dWrVz796U9v99rDDz+cFStW5JhjjsmIESOaXkoLANDTNJI0WrBfUldKuzFkkj59+uSmm27a7rXLLrssK1asyCc/+cmcffbZLU4GAAC0G8tlAQAAKEaTCQAAzfJ4EehCk8kbuuyyy1JVlaWyAADAn0WTCQAAzfIIE+hCkwkAAEAxmkwAAGhGldbsybTvkzajyQQAAKAYTSYAADRLywhdaDIBAAAoRpMJAADN0mRCF5pMAAAAitFkAgBAszwnE7rQZAIAAFCMJhMAAJrUsCcTutBkAgAAUIwmEwAAmlGlNafLaktpM5pMAAAAijFkAgAAUIwhEwAAgGLsyQQAgCY5XRa6MmTSEpv6VPm3/9hZd4yiPnDAmrojdIt//tJhdUcobvWZPe9B2f/6v71Sd4Ti/nro7+qO0C1G7/ObuiMUt3HTHnVHKO5/Lj+67gjdYtcf9qw/ezd9Yfe6IwB/BkMmAAA0pZFUrfiHzJ73j6X0bPZkAgAAUIwmEwAAmmVPJnShyQQAAKAYQyYAAADFWC4LAADNslwWutBkAgAAUIwmEwAAmtTQZEIXmkwAAACK0WQCAEAzqrRmT6a2lDajyQQAAKAYTSYAADRLywhdaDIBAAAoRpMJAABNcrosdKXJBAAAoBhNJgAANKtq1J0AdjqaTAAAAIrRZAIAQLPsyYQuNJkAAAAUo8kEAIAmNKrWnC7rBFvajSYTAACAYjSZAADQLC0jdKHJBAAAoBhNJgAANMl+SehKkwkAAEAxmkwAAGiWJhO60GQCAABQjCYTAACapcmELjSZAAAAFKPJBACAZlQtOl1WW0qb0WQCAABQjCETAACAYgyZAAAAFGPIBAAAoBgH/wAAQLMcygNdaDIBAAAoRpMJAABNaskjTKDNaDIBAAAoRpMJAADN0mRCF5pMAAAAitFkAgBAszSZ0IUmEwAAgGI0mQAA0IyqRafLaktpM5pMAAAAitFkAgBAs7SM0IUmEwAAgGI0mQAA0IRGWrMns9H9t4CiNJkAAPAWNHv27DQajTQajdx00011x6EHMWQCAECzqha8usHjjz+e8847L3vttVf33IC3NEMmAAC8hVRVlU996lMZOHBgzjnnnLrj0AMZMgEAoFlt2GTOnDkzCxcuzLe//e3sueee5W/AW54hEwAA3iI6Ojoybdq0nH/++Rk7dmzdceihnC4LAADNqFpzumyq14bDUaNGbffy8uXL/6wv8+qrr+bjH/94DjrooEyfPr1kQtiKIZOW2PWlRvp37Fp3jKIeedfguiN0i6c/+3LdEYob+Xcb645Q3K+/3L/uCMX9esnBdUfoFs8uPajuCMX1+dGyuiMU9/+s/vu6I3SLc2/6XN0Ritr0wu7J3nWnaF9XXHFFVqxYkZ/+9Kfp06dP3XHowQyZAADQrFY0mUlGjhz5ZzeW27Ns2bJMnz49F110UY466qiCyaArezIBAKAH27xMdvjw4bnyyivrjsNbgCETAACa1Qany77wwgtZuXJlOjo60rt37zQajS2vyy+/PEnymc98Jo1GI1OmTNnxG/KWZ7ksAAD0YL169cqnP/3p7V57+OGHs2LFihxzzDEZMWKEpbQUYcgEAIAerE+fPrnpppu2e+2yyy7LihUr8slPfjJnn312i5PRUxkyAQCgSS15hAm0GXsyAQAAKMaQCQAAzWqDg3/eyGWXXZaqqiyVpShDJgAAAMXYkwkAAM2oWrQn075P2owmEwAAgGI0mQAA0CwtI3ShyQQAAKAYTSYAADRLkwldaDIBAAAoRpMJAABNatQdAHZCmkwAAACK0WQCAECz7MmELjSZAAAAFGPIZCs/+clPcvrpp2fw4MHp1atXBg8enPHjx2f+/Pl1RwMA2Kk0kjSqFrzq/onCX8hyWba46qqrcvHFF2fQoEE55ZRTMnjw4Dz11FNZsWJFFi9enAkTJtQdEQAA2MkZMkmSzJkzJxdffHFOOOGE3HrrrenXr99W11955ZWakgEA7KSqtGZPpn2ftBnLZUlnZ2emTp2avn375vvf/36XATNJdt999xqSAQAA7UaTSR544IGsWbMmEydOzD777JM77rgjjzzySHr37p3Ro0fnqKOOqjsiAMDOScsIXRgyyc9+9rMkyX777ZfDDz88v/rVr7a6Pnbs2MydOzdvf/vb64gHAAC0EUMmWbduXZLkxhtvzMEHH5x77rknRxxxRNauXZuLLrood911V84444wsXrz4Db/OqFGjtvt+R0dHstfA0rEBAGrX0GRCF/Zkkk2bNiVJqqrK3Llzc/zxx2evvfbKu9/97sybNy8HHnhg7rvvvjz44IM1JwUAAHZ2mkyyzz77JEmGDh2a9773vVtd69OnT0488cTcfPPNWbZs2Rvuz1y+fPl23x81alQ6Hl9XLjAAwM5CkwldaDLJiBEjkiRve9vbtnt98xD64osvtioSAADQpgyZZOzYsdltt93y2GOP5eWXX+5y/ZFHHkmSDBkypMXJAACAdmPIJIMGDcpHPvKRPPfcc7niiiu2unb33XfnrrvuSv/+/XPSSSfVlBAAYOfUqLr/Be3GnkySJDNmzMjSpUtz9dVX5/7778/o0aOzdu3azJs3L7vuumtmzZr1ustpAQAANjNkkiTZd999s3Tp0lx11VWZN29eHnroofTr1y8nn3xyvvSlL+XII4+sOyIAwM6lSmsO/tFm0mYMmWwxYMCAzJgxIzNmzKg7CgAA0KYMmQAA0CR7JqErB/8AAABQjCYTAACapcmELjSZAAAAFKPJBACAZmkyoQtNJgAAAMVoMgEAoElOl4WuNJkAAAAUo8kEAIBmVGnNnkxtKW1GkwkAAEAxmkwAAGhCI0mj6v6asdHtd4CyNJkAAAAUo8kEAIBm2S8JXWgyAQAAKEaTCQAATfKcTOhKkwkAAEAxmkwAAGiWJhO60GQCAABQjCaTlhi5/5P52f/1jbpjFPXRNcfVHaFb/P7f9q47QnGdN75Ud4Ti3jljYN0Rinvqr3vmk+CeP6Dn/VH7u+uPrDtCcVcPrTtB9+i8rO4Ehe1sv01ULdqTqS2lzWgyAQAAKKbn/fMqAAC0ipYRutBkAgAAUIwhEwAAgGIslwUAgCa15OAfaDOaTAAAAIrRZAIAQLM0mdCFJhMAAIBiNJkAANAkezKhK00mAAAAxWgyAQCgGVX12qsV94E2oskEAACgGE0mAAA0oZHW7MlsdP8toChNJgAAAMVoMgEAoFm2S0IXmkwAAACK0WQCAECTGp11J4CdjyYTAACAYjSZAADQjCqt2ZNp3ydtRpMJAABAMZpMAABoUiuekwntRpMJAABAMZpMAABoVqXKhG1pMgEAAChGkwkAAE2yJxO60mQCAABQjCYTAACapcmELjSZAAAAFKPJBACAZlQt2pOpLaXNaDIBAAAoxpAJAABAMZbLAgBAsyprWWFbmkwAAACK0WQCAEATGmnNwT+N7r8FFKXJBAAAoBhNJgAANMuWTOhCkwkAAEAxmkwAAGhSK/ZkQrvRZAIAAFCMJhMAAJpRJelsQZWpLaXNaDIBAAAoRpMJAADN0jJCF5pMAAAAitFkAgBAk5wuC11pMgEAAChGkwkAAM2qVJmwLU0mAAD0YE8//XRuuummnHbaaRk2bFj69OmT/v3755hjjsnNN9+czs7OuiPSw2gyAQCgGVWL9mTu4D3mzJmTc889N4MHD864ceNy0EEH5fe//31uvfXWnH322fnxj3+cOXPmpNFolMnLW54hEwAAerDhw4fntttuy8knn5xddvn3hYzTp0/P6NGj84Mf/CC33nprTj/99BpT0pNYLgsAAM2qWvDaQccdd1w++MEPbjVgJsn++++fc845J0myePHiHb8R/JEhEwAA3qJ23333JMluu1ngSDn+awIAgKZUabTkdNnuucerr76a7373u0mSk046qVvuwVuTIZOWWN/ZyIKNu9cdo6hbDl5Yd4Ru8Tf//dy6IxT3yqr9645Q3NP/qef99n3Q1x6uO0K3WDn9fXVHKO7aCd+vO0JxUzf973VH6BbjjvlF3RGKevofN9YdoTYdHR0ZNWrUdq8tX768qa85bdq0PPLII5kwYUJOPPHEHYkHW+l5f0sBAIBWadOnf8ycOTPXXXddDj300MyePbvuOPQwhkwAANjJjRw5sunGcls33HBDzj///Bx22GG59957M2DAgCJfFzZz8A8AALxFXH/99fnCF76Q97znPVm0aFH237/nbSmhfppMAABoQqNKSw7+aRS6xTXXXJNp06blfe97X+6+++4MGjSozBeGbWgyAQCgh7vyyiszbdq0jBo1Kvfee68Bk26lyQQAgGa14gkmO+g73/lOLrnkkuy666459thjM3PmzC6fGTJk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9tpr645IkqlTp+baa6/NwIEDc+qpp2bQoEH553/+59x222159dVX893vfjcf+9jH6o4JUIwhk7Z34oknZsGCBZk5c2bOO++8Le9feOGF+drXvpbPfvazufHGG2tMSJIsXLgwGzZsyMknn5xddvn3RRRPPPFERo8enccffzxz587N6aefXmNK/lRVVfnABz6QNWvW5G//9m/z1a9+1ZC5E5kzZ07+y3/5LznhhBNy6623pl+/fltdf+WVV7L77rvXlI7NnnjiiRxwwAF5+9vfnl/+8pfZd999t1xbtGhRjjvuuBx88MFZvXp1jSkByrJclra2evXqLFiwIEOGDMnnP//5ra5dfvnl2XPPPTN79uxs2LChpoRsdtxxx+WDH/zgVgNmkuy///4555xzkiSLFy+uIRmvZ+bMmVm4cGG+/e1vZ88996w7Dn+is7MzU6dOTd++ffP973+/y4CZxIC5k1i7dm06OztzxBFHbDVgJsm4cePSr1+/PPnkkzWlA+gehkza2sKFC5Mk48eP7zK89OvXL0cffXQ2btyYhx56qI54/Jk2/2V4t912qzkJm3V0dGTatGk5//zzM3bs2LrjsI0HHngga9asyYQJE7LPPvvkjjvuyDXXXJOvf/3r9vjtZA455JDsscceWbZsWZ566qmtrt1///15/vnnc8IJJ9SUDqB7+Bsdbe3RRx9NkgwfPny71w855JAsWLAgK1euzPHHH9/KaPyZNu9HSpKTTjqp5jQkr31PPv7xj+eggw7K9OnT647DdvzsZz9Lkuy33345/PDD86tf/Wqr62PHjs3cuXPz9re/vY54/IkBAwbkmmuuyYUXXpjDDjssp556agYOHJhVq1bltttuywc+8IF885vfrDsmQFGGTNrac889lyTp37//dq9vfv/ZZ59tVST+QtOmTcsjjzySCRMm5MQTT6w7DkmuuOKKrFixIj/96U/Tp0+fuuOwHevWrUvy2oFaBx98cO65554cccQRWbt2bS666KLcddddOeOMMyxB30lMmTIlQ4YMyVlnnZVZs2ZteX/YsGGZNGlSl2W0AO3Ocll6tM3nWjmxdOc0c+bMXHfddTn00EMze/bsuuOQZNmyZZk+fXouuuiiHHXUUXXH4XVs2rQpyWu/x82dOzfHH3989tprr7z73e/OvHnzcuCBB+a+++6zdHYnce2112bixImZNGlSVq1alQ0bNmT58uUZOnRozjzzzHzxi1+sOyJAUYZM2trmpnJzo7mt9evXb/U5dh433HBDzj///Bx22GFZtGhRBgwYUHekt7zNy2SHDx+eK6+8su44vIF99tknSTJ06NC8973v3epanz59tqwKWLZsWcuzsbXFixdn6tSp+dCHPpQZM2Zk6NCh6du3bw4//PDMmzcvBxxwQK677jqnywI9iiGTtjZixIgkycqVK7d7/bHHHkvy+ns2qcf111+fL3zhC3nPe96TRYsWZf/99687EkleeOGFrFy5Mh0dHendu3cajcaW1+WXX54k+cxnPpNGo5EpU6bUG/YtbvPvfW9729u2e33zEPriiy+2KhKv4/bbb0/y2kmy2+rbt29Gjx6dzs7OrFixotXRALqNPZm0tc1/aC9YsCCdnZ1bnTD7/PPPZ8mSJenTp0+OPPLIuiKyjWuuuSbTpk3L+973vtx9990ZNGhQ3ZH4o169euXTn/70dq89/PDDWbFiRY455piMGDHCUtqajR07Nrvttlsee+yxvPzyy9ljjz22uv7II48kSYYMGVJDOv7UH/7whyR53ceUbH5/2+8hQFuroM2NHz++SlLNnDlzq/cvuOCCKkn12c9+tqZkbOuKK66oklSjRo2qnn766brj8Be49NJLqyTVrFmz6o7CH5155plVkurLX/7yVu8vWLCgajQaVf/+/atnnnmmnnBs8T/+x/+oklT77bdf9dvf/nara/Pnz68ajUbVu3fv6qmnnqopIUB5mkza3je+8Y2MGTMmkydPzr333puRI0dm6dKlWbRoUYYPH56rr7667ogk+c53vpNLLrkku+66a4499tjMnDmzy2eGDBmSSZMmtT4ctKEZM2Zk6dKlufrqq3P//fdn9OjRWbt2bebNm5ddd901s2bNet3ltLTOxIkTc8IJJ+See+7JyJEjc9ppp2X//fdPR0dHbr/99lRVla985SsZOHBg3VEBijFk0vbe9a535ec//3kuueSS3HnnnZk/f34GDx6cyZMn59JLL3WgzE5izZo1SV47FfP666/f7mfe//73GzLhz7Tvvvtm6dKlueqqqzJv3rw89NBD6devX04++eR86Utfsk1gJ7HLLrtk/vz5ueGGG3LLLbdk3rx52bhxYwYMGJAJEyZk8uTJGT9+fN0xAYpqVNUfn/EAAAAAO8jpsgAAABRjyAQAAKAYQyYAAADFGDIBAAAoxpAJAABAMYZMAAAAijFkAgAAUIwhEwAAgGIMmQAAABRjyAQAAKAYQyYAAADFGDIBAAAoxpAJAABAMYZMAAAAijFkAgAAUIwhEwAAgGIMmQAAABRjyAQAAKAYQyYAAADFGDIBAAAoxpAJAABAMYZMAAAAijFkAgAAUIwhEwAAgGIMmQAAABRjyAQAAKAYQyYAAADFGDIBAAAoxpAJAABAMYZMAAAAijFkAgAAUIwhEwAAgGIMmQAAABRjyAQAAKAYQyYAAADFGDIBAAAoxpAJAABAMYZMAAAAijFkAgAAUIwhEwAAgGIMmQAAABRjyAQAAKAYQyYAAADFGDIBAAAoxpAJAABAMYZMAAAAivn/AX+KEDGNSVWYAAAAAElFTkSuQmCC" width="460px" height="345px" alt=""></img>\",\"width\":460},\"id\":\"1018\",\"type\":\"panel.models.markup.HTML\"}],\"root_ids\":[\"1013\",\"1019\"]},\"title\":\"Bokeh Application\",\"version\":\"2.2.3\"}};\n var render_items = [{\"docid\":\"07c80f36-aa92-4309-8c60-44c724165ea1\",\"root_ids\":[\"1013\"],\"roots\":{\"1013\":\"e4e3f8e6-db58-4449-a25e-57ee01aaa145\"}}];\n root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined && root.Bokeh.Panel !== undefined) {\n embed_document(root);\n } else {\n var attempts = 0;\n var timer = setInterval(function(root) {\n if (root.Bokeh !== undefined && root.Bokeh.Panel !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else if (document.readyState == \"complete\") {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);</script>", | |
"application/vnd.holoviews_exec.v0+json": "", | |
"text/plain": "Row\n [0] Column\n [0] IntSlider(end=10, name='value', value=5, value_throttled=5)\n [1] RadioButtonGroup(name='cmap', options=['viridis', 'plasma', ...], value='viridis')\n [1] ParamFunction(function)" | |
}, | |
"metadata": { | |
"application/vnd.holoviews_exec.v0+json": { | |
"id": "1013" | |
} | |
} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "", | |
"execution_count": null, | |
"outputs": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"name": "python3", | |
"display_name": "Python 3", | |
"language": "python" | |
}, | |
"hide_input": false, | |
"language_info": { | |
"name": "python", | |
"version": "3.7.8", | |
"mimetype": "text/x-python", | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"pygments_lexer": "ipython3", | |
"nbconvert_exporter": "python", | |
"file_extension": ".py" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment