diff --git a/docs/user-guide/azimuthal_average.ipynb b/docs/user-guide/azimuthal_average.ipynb
new file mode 100644
index 000000000..f176c8baf
--- /dev/null
+++ b/docs/user-guide/azimuthal_average.ipynb
@@ -0,0 +1,2619 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "797748ef-93c4-47f8-a032-bc5dd97fc581",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/javascript": [
+ "(function(root) {\n",
+ " function now() {\n",
+ " return new Date();\n",
+ " }\n",
+ "\n",
+ " const force = true;\n",
+ " const py_version = '3.6.2'.replace('rc', '-rc.').replace('.dev', '-dev.');\n",
+ " const reloading = false;\n",
+ " const Bokeh = root.Bokeh;\n",
+ "\n",
+ " // Set a timeout for this load but only if we are not already initializing\n",
+ " if (typeof (root._bokeh_timeout) === \"undefined\" || (force || !root._bokeh_is_initializing)) {\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, js_modules, js_exports, callback) {\n",
+ " if (css_urls == null) css_urls = [];\n",
+ " if (js_urls == null) js_urls = [];\n",
+ " if (js_modules == null) js_modules = [];\n",
+ " if (js_exports == null) js_exports = {};\n",
+ "\n",
+ " root._bokeh_onload_callbacks.push(callback);\n",
+ "\n",
+ " if (root._bokeh_is_loading > 0) {\n",
+ " // Don't load bokeh if it is still initializing\n",
+ " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
+ " return null;\n",
+ " } else if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n",
+ " // There is nothing to load\n",
+ " run_callbacks();\n",
+ " return null;\n",
+ " }\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",
+ " window._bokeh_on_load = on_load\n",
+ "\n",
+ " function on_error(e) {\n",
+ " const src_el = e.srcElement\n",
+ " console.error(\"failed to load \" + (src_el.href || src_el.src));\n",
+ " }\n",
+ "\n",
+ " const skip = [];\n",
+ " if (window.requirejs) {\n",
+ " window.requirejs.config({'packages': {}, 'paths': {}, 'shim': {}});\n",
+ " root._bokeh_is_loading = css_urls.length + 0;\n",
+ " } else {\n",
+ " root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n",
+ " }\n",
+ "\n",
+ " const existing_stylesheets = []\n",
+ " const links = document.getElementsByTagName('link')\n",
+ " for (let i = 0; i < links.length; i++) {\n",
+ " const link = links[i]\n",
+ " if (link.href != null) {\n",
+ " existing_stylesheets.push(link.href)\n",
+ " }\n",
+ " }\n",
+ " for (let i = 0; i < css_urls.length; i++) {\n",
+ " const url = css_urls[i];\n",
+ " const escaped = encodeURI(url)\n",
+ " if (existing_stylesheets.indexOf(escaped) !== -1) {\n",
+ " on_load()\n",
+ " continue;\n",
+ " }\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",
+ " } var existing_scripts = []\n",
+ " const scripts = document.getElementsByTagName('script')\n",
+ " for (let i = 0; i < scripts.length; i++) {\n",
+ " var script = scripts[i]\n",
+ " if (script.src != null) {\n",
+ " existing_scripts.push(script.src)\n",
+ " }\n",
+ " }\n",
+ " for (let i = 0; i < js_urls.length; i++) {\n",
+ " const url = js_urls[i];\n",
+ " const escaped = encodeURI(url)\n",
+ " if (skip.indexOf(escaped) !== -1 || existing_scripts.indexOf(escaped) !== -1) {\n",
+ " if (!window.requirejs) {\n",
+ " on_load();\n",
+ " }\n",
+ " continue;\n",
+ " }\n",
+ " const 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",
+ " for (let i = 0; i < js_modules.length; i++) {\n",
+ " const url = js_modules[i];\n",
+ " const escaped = encodeURI(url)\n",
+ " if (skip.indexOf(escaped) !== -1 || existing_scripts.indexOf(escaped) !== -1) {\n",
+ " if (!window.requirejs) {\n",
+ " on_load();\n",
+ " }\n",
+ " continue;\n",
+ " }\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",
+ " element.type = \"module\";\n",
+ " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
+ " document.head.appendChild(element);\n",
+ " }\n",
+ " for (const name in js_exports) {\n",
+ " const url = js_exports[name];\n",
+ " const escaped = encodeURI(url)\n",
+ " if (skip.indexOf(escaped) >= 0 || root[name] != null) {\n",
+ " if (!window.requirejs) {\n",
+ " on_load();\n",
+ " }\n",
+ " continue;\n",
+ " }\n",
+ " var element = document.createElement('script');\n",
+ " element.onerror = on_error;\n",
+ " element.async = false;\n",
+ " element.type = \"module\";\n",
+ " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
+ " element.textContent = `\n",
+ " import ${name} from \"${url}\"\n",
+ " window.${name} = ${name}\n",
+ " window._bokeh_on_load()\n",
+ " `\n",
+ " document.head.appendChild(element);\n",
+ " }\n",
+ " if (!js_urls.length && !js_modules.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",
+ " const js_urls = [\"https://cdn.holoviz.org/panel/1.6.0/dist/bundled/reactiveesm/es-module-shims@^1.10.0/dist/es-module-shims.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-3.6.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.6.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.6.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.6.2.min.js\", \"https://cdn.holoviz.org/panel/1.6.0/dist/panel.min.js\"];\n",
+ " const js_modules = [];\n",
+ " const js_exports = {};\n",
+ " const css_urls = [];\n",
+ " const inline_js = [ 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 (let i = 0; i < inline_js.length; i++) {\n",
+ " try {\n",
+ " inline_js[i].call(root, root.Bokeh);\n",
+ " } catch(e) {\n",
+ " if (!reloading) {\n",
+ " throw e;\n",
+ " }\n",
+ " }\n",
+ " }\n",
+ " // Cache old bokeh versions\n",
+ " if (Bokeh != undefined && !reloading) {\n",
+ " var NewBokeh = root.Bokeh;\n",
+ " if (Bokeh.versions === undefined) {\n",
+ " Bokeh.versions = new Map();\n",
+ " }\n",
+ " if (NewBokeh.version !== Bokeh.version) {\n",
+ " Bokeh.versions.set(NewBokeh.version, NewBokeh)\n",
+ " }\n",
+ " root.Bokeh = Bokeh;\n",
+ " }\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",
+ " root._bokeh_is_initializing = false\n",
+ " }\n",
+ "\n",
+ " function load_or_wait() {\n",
+ " // Implement a backoff loop that tries to ensure we do not load multiple\n",
+ " // versions of Bokeh and its dependencies at the same time.\n",
+ " // In recent versions we use the root._bokeh_is_initializing flag\n",
+ " // to determine whether there is an ongoing attempt to initialize\n",
+ " // bokeh, however for backward compatibility we also try to ensure\n",
+ " // that we do not start loading a newer (Panel>=1.0 and Bokeh>3) version\n",
+ " // before older versions are fully initialized.\n",
+ " if (root._bokeh_is_initializing && Date.now() > root._bokeh_timeout) {\n",
+ " // If the timeout and bokeh was not successfully loaded we reset\n",
+ " // everything and try loading again\n",
+ " root._bokeh_timeout = Date.now() + 5000;\n",
+ " root._bokeh_is_initializing = false;\n",
+ " root._bokeh_onload_callbacks = undefined;\n",
+ " root._bokeh_is_loading = 0\n",
+ " console.log(\"Bokeh: BokehJS was loaded multiple times but one version failed to initialize.\");\n",
+ " load_or_wait();\n",
+ " } else if (root._bokeh_is_initializing || (typeof root._bokeh_is_initializing === \"undefined\" && root._bokeh_onload_callbacks !== undefined)) {\n",
+ " setTimeout(load_or_wait, 100);\n",
+ " } else {\n",
+ " root._bokeh_is_initializing = true\n",
+ " root._bokeh_onload_callbacks = []\n",
+ " const bokeh_loaded = root.Bokeh != null && (root.Bokeh.version === py_version || (root.Bokeh.versions !== undefined && root.Bokeh.versions.has(py_version)));\n",
+ " if (!reloading && !bokeh_loaded) {\n",
+ " if (root.Bokeh) {\n",
+ " root.Bokeh = undefined;\n",
+ " }\n",
+ " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
+ " }\n",
+ " load_libs(css_urls, js_urls, js_modules, js_exports, function() {\n",
+ " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
+ " run_inline_js();\n",
+ " });\n",
+ " }\n",
+ " }\n",
+ " // Give older versions of the autoload script a head-start to ensure\n",
+ " // they initialize before we start loading newer version.\n",
+ " setTimeout(load_or_wait, 100)\n",
+ "}(window));"
+ ],
+ "application/vnd.holoviews_load.v0+json": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n const py_version = '3.6.2'.replace('rc', '-rc.').replace('.dev', '-dev.');\n const reloading = false;\n const Bokeh = root.Bokeh;\n\n // Set a timeout for this load but only if we are not already initializing\n if (typeof (root._bokeh_timeout) === \"undefined\" || (force || !root._bokeh_is_initializing)) {\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, js_modules, js_exports, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n if (js_modules == null) js_modules = [];\n if (js_exports == null) js_exports = {};\n\n root._bokeh_onload_callbacks.push(callback);\n\n if (root._bokeh_is_loading > 0) {\n // Don't load bokeh if it is still initializing\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n } else if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n // There is nothing to load\n run_callbacks();\n return null;\n }\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 window._bokeh_on_load = on_load\n\n function on_error(e) {\n const src_el = e.srcElement\n console.error(\"failed to load \" + (src_el.href || src_el.src));\n }\n\n const skip = [];\n if (window.requirejs) {\n window.requirejs.config({'packages': {}, 'paths': {}, 'shim': {}});\n root._bokeh_is_loading = css_urls.length + 0;\n } else {\n root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n }\n\n const existing_stylesheets = []\n const links = document.getElementsByTagName('link')\n for (let i = 0; i < links.length; i++) {\n const link = links[i]\n if (link.href != null) {\n existing_stylesheets.push(link.href)\n }\n }\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const escaped = encodeURI(url)\n if (existing_stylesheets.indexOf(escaped) !== -1) {\n on_load()\n continue;\n }\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 } var existing_scripts = []\n const scripts = document.getElementsByTagName('script')\n for (let i = 0; i < scripts.length; i++) {\n var script = scripts[i]\n if (script.src != null) {\n existing_scripts.push(script.src)\n }\n }\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const escaped = encodeURI(url)\n if (skip.indexOf(escaped) !== -1 || existing_scripts.indexOf(escaped) !== -1) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\n const 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 for (let i = 0; i < js_modules.length; i++) {\n const url = js_modules[i];\n const escaped = encodeURI(url)\n if (skip.indexOf(escaped) !== -1 || existing_scripts.indexOf(escaped) !== -1) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\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 element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (const name in js_exports) {\n const url = js_exports[name];\n const escaped = encodeURI(url)\n if (skip.indexOf(escaped) >= 0 || root[name] != null) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\n var element = document.createElement('script');\n element.onerror = on_error;\n element.async = false;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n element.textContent = `\n import ${name} from \"${url}\"\n window.${name} = ${name}\n window._bokeh_on_load()\n `\n document.head.appendChild(element);\n }\n if (!js_urls.length && !js_modules.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 const js_urls = [\"https://cdn.holoviz.org/panel/1.6.0/dist/bundled/reactiveesm/es-module-shims@^1.10.0/dist/es-module-shims.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-3.6.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.6.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.6.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.6.2.min.js\", \"https://cdn.holoviz.org/panel/1.6.0/dist/panel.min.js\"];\n const js_modules = [];\n const js_exports = {};\n const css_urls = [];\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {} // ensure no trailing comma for IE\n ];\n\n function run_inline_js() {\n if ((root.Bokeh !== undefined) || (force === true)) {\n for (let i = 0; i < inline_js.length; i++) {\n try {\n inline_js[i].call(root, root.Bokeh);\n } catch(e) {\n if (!reloading) {\n throw e;\n }\n }\n }\n // Cache old bokeh versions\n if (Bokeh != undefined && !reloading) {\n var NewBokeh = root.Bokeh;\n if (Bokeh.versions === undefined) {\n Bokeh.versions = new Map();\n }\n if (NewBokeh.version !== Bokeh.version) {\n Bokeh.versions.set(NewBokeh.version, NewBokeh)\n }\n root.Bokeh = Bokeh;\n }\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 root._bokeh_is_initializing = false\n }\n\n function load_or_wait() {\n // Implement a backoff loop that tries to ensure we do not load multiple\n // versions of Bokeh and its dependencies at the same time.\n // In recent versions we use the root._bokeh_is_initializing flag\n // to determine whether there is an ongoing attempt to initialize\n // bokeh, however for backward compatibility we also try to ensure\n // that we do not start loading a newer (Panel>=1.0 and Bokeh>3) version\n // before older versions are fully initialized.\n if (root._bokeh_is_initializing && Date.now() > root._bokeh_timeout) {\n // If the timeout and bokeh was not successfully loaded we reset\n // everything and try loading again\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_is_initializing = false;\n root._bokeh_onload_callbacks = undefined;\n root._bokeh_is_loading = 0\n console.log(\"Bokeh: BokehJS was loaded multiple times but one version failed to initialize.\");\n load_or_wait();\n } else if (root._bokeh_is_initializing || (typeof root._bokeh_is_initializing === \"undefined\" && root._bokeh_onload_callbacks !== undefined)) {\n setTimeout(load_or_wait, 100);\n } else {\n root._bokeh_is_initializing = true\n root._bokeh_onload_callbacks = []\n const bokeh_loaded = root.Bokeh != null && (root.Bokeh.version === py_version || (root.Bokeh.versions !== undefined && root.Bokeh.versions.has(py_version)));\n if (!reloading && !bokeh_loaded) {\n if (root.Bokeh) {\n root.Bokeh = undefined;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n }\n load_libs(css_urls, js_urls, js_modules, js_exports, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n }\n // Give older versions of the autoload script a head-start to ensure\n // they initialize before we start loading newer version.\n setTimeout(load_or_wait, 100)\n}(window));"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/javascript": [
+ "\n",
+ "if ((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",
+ "\n",
+ "var JS_MIME_TYPE = 'application/javascript';\n",
+ "var HTML_MIME_TYPE = 'text/html';\n",
+ "var EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\n",
+ "var CLASS_NAME = 'output';\n",
+ "\n",
+ "/**\n",
+ " * Render data to the DOM node\n",
+ " */\n",
+ "function 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",
+ " */\n",
+ "function 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",
+ " */\n",
+ "function 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",
+ " */\n",
+ "function 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",
+ " */\n",
+ "function handle_update_output(event, handle) {\n",
+ " handle_clear_output(event, {cell: {output_area: handle.output_area}})\n",
+ " handle_add_output(event, handle)\n",
+ "}\n",
+ "\n",
+ "function 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",
+ "\n",
+ "if (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/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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.holoviews_exec.v0+json": "",
+ "text/html": [
+ "
\n",
+ ""
+ ]
+ },
+ "metadata": {
+ "application/vnd.holoviews_exec.v0+json": {
+ "id": "34acaf28-6854-478a-a35d-5d5519ed44b6"
+ }
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/javascript": [
+ "(function(root) {\n",
+ " function now() {\n",
+ " return new Date();\n",
+ " }\n",
+ "\n",
+ " const force = false;\n",
+ " const py_version = '3.6.2'.replace('rc', '-rc.').replace('.dev', '-dev.');\n",
+ " const reloading = true;\n",
+ " const Bokeh = root.Bokeh;\n",
+ "\n",
+ " // Set a timeout for this load but only if we are not already initializing\n",
+ " if (typeof (root._bokeh_timeout) === \"undefined\" || (force || !root._bokeh_is_initializing)) {\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, js_modules, js_exports, callback) {\n",
+ " if (css_urls == null) css_urls = [];\n",
+ " if (js_urls == null) js_urls = [];\n",
+ " if (js_modules == null) js_modules = [];\n",
+ " if (js_exports == null) js_exports = {};\n",
+ "\n",
+ " root._bokeh_onload_callbacks.push(callback);\n",
+ "\n",
+ " if (root._bokeh_is_loading > 0) {\n",
+ " // Don't load bokeh if it is still initializing\n",
+ " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
+ " return null;\n",
+ " } else if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n",
+ " // There is nothing to load\n",
+ " run_callbacks();\n",
+ " return null;\n",
+ " }\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",
+ " window._bokeh_on_load = on_load\n",
+ "\n",
+ " function on_error(e) {\n",
+ " const src_el = e.srcElement\n",
+ " console.error(\"failed to load \" + (src_el.href || src_el.src));\n",
+ " }\n",
+ "\n",
+ " const skip = [];\n",
+ " if (window.requirejs) {\n",
+ " window.requirejs.config({'packages': {}, 'paths': {}, 'shim': {}});\n",
+ " root._bokeh_is_loading = css_urls.length + 0;\n",
+ " } else {\n",
+ " root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n",
+ " }\n",
+ "\n",
+ " const existing_stylesheets = []\n",
+ " const links = document.getElementsByTagName('link')\n",
+ " for (let i = 0; i < links.length; i++) {\n",
+ " const link = links[i]\n",
+ " if (link.href != null) {\n",
+ " existing_stylesheets.push(link.href)\n",
+ " }\n",
+ " }\n",
+ " for (let i = 0; i < css_urls.length; i++) {\n",
+ " const url = css_urls[i];\n",
+ " const escaped = encodeURI(url)\n",
+ " if (existing_stylesheets.indexOf(escaped) !== -1) {\n",
+ " on_load()\n",
+ " continue;\n",
+ " }\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",
+ " } var existing_scripts = []\n",
+ " const scripts = document.getElementsByTagName('script')\n",
+ " for (let i = 0; i < scripts.length; i++) {\n",
+ " var script = scripts[i]\n",
+ " if (script.src != null) {\n",
+ " existing_scripts.push(script.src)\n",
+ " }\n",
+ " }\n",
+ " for (let i = 0; i < js_urls.length; i++) {\n",
+ " const url = js_urls[i];\n",
+ " const escaped = encodeURI(url)\n",
+ " if (skip.indexOf(escaped) !== -1 || existing_scripts.indexOf(escaped) !== -1) {\n",
+ " if (!window.requirejs) {\n",
+ " on_load();\n",
+ " }\n",
+ " continue;\n",
+ " }\n",
+ " const 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",
+ " for (let i = 0; i < js_modules.length; i++) {\n",
+ " const url = js_modules[i];\n",
+ " const escaped = encodeURI(url)\n",
+ " if (skip.indexOf(escaped) !== -1 || existing_scripts.indexOf(escaped) !== -1) {\n",
+ " if (!window.requirejs) {\n",
+ " on_load();\n",
+ " }\n",
+ " continue;\n",
+ " }\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",
+ " element.type = \"module\";\n",
+ " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
+ " document.head.appendChild(element);\n",
+ " }\n",
+ " for (const name in js_exports) {\n",
+ " const url = js_exports[name];\n",
+ " const escaped = encodeURI(url)\n",
+ " if (skip.indexOf(escaped) >= 0 || root[name] != null) {\n",
+ " if (!window.requirejs) {\n",
+ " on_load();\n",
+ " }\n",
+ " continue;\n",
+ " }\n",
+ " var element = document.createElement('script');\n",
+ " element.onerror = on_error;\n",
+ " element.async = false;\n",
+ " element.type = \"module\";\n",
+ " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
+ " element.textContent = `\n",
+ " import ${name} from \"${url}\"\n",
+ " window.${name} = ${name}\n",
+ " window._bokeh_on_load()\n",
+ " `\n",
+ " document.head.appendChild(element);\n",
+ " }\n",
+ " if (!js_urls.length && !js_modules.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",
+ " const js_urls = [\"https://cdn.holoviz.org/panel/1.6.0/dist/bundled/reactiveesm/es-module-shims@^1.10.0/dist/es-module-shims.min.js\"];\n",
+ " const js_modules = [];\n",
+ " const js_exports = {};\n",
+ " const css_urls = [];\n",
+ " const inline_js = [ 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 (let i = 0; i < inline_js.length; i++) {\n",
+ " try {\n",
+ " inline_js[i].call(root, root.Bokeh);\n",
+ " } catch(e) {\n",
+ " if (!reloading) {\n",
+ " throw e;\n",
+ " }\n",
+ " }\n",
+ " }\n",
+ " // Cache old bokeh versions\n",
+ " if (Bokeh != undefined && !reloading) {\n",
+ " var NewBokeh = root.Bokeh;\n",
+ " if (Bokeh.versions === undefined) {\n",
+ " Bokeh.versions = new Map();\n",
+ " }\n",
+ " if (NewBokeh.version !== Bokeh.version) {\n",
+ " Bokeh.versions.set(NewBokeh.version, NewBokeh)\n",
+ " }\n",
+ " root.Bokeh = Bokeh;\n",
+ " }\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",
+ " root._bokeh_is_initializing = false\n",
+ " }\n",
+ "\n",
+ " function load_or_wait() {\n",
+ " // Implement a backoff loop that tries to ensure we do not load multiple\n",
+ " // versions of Bokeh and its dependencies at the same time.\n",
+ " // In recent versions we use the root._bokeh_is_initializing flag\n",
+ " // to determine whether there is an ongoing attempt to initialize\n",
+ " // bokeh, however for backward compatibility we also try to ensure\n",
+ " // that we do not start loading a newer (Panel>=1.0 and Bokeh>3) version\n",
+ " // before older versions are fully initialized.\n",
+ " if (root._bokeh_is_initializing && Date.now() > root._bokeh_timeout) {\n",
+ " // If the timeout and bokeh was not successfully loaded we reset\n",
+ " // everything and try loading again\n",
+ " root._bokeh_timeout = Date.now() + 5000;\n",
+ " root._bokeh_is_initializing = false;\n",
+ " root._bokeh_onload_callbacks = undefined;\n",
+ " root._bokeh_is_loading = 0\n",
+ " console.log(\"Bokeh: BokehJS was loaded multiple times but one version failed to initialize.\");\n",
+ " load_or_wait();\n",
+ " } else if (root._bokeh_is_initializing || (typeof root._bokeh_is_initializing === \"undefined\" && root._bokeh_onload_callbacks !== undefined)) {\n",
+ " setTimeout(load_or_wait, 100);\n",
+ " } else {\n",
+ " root._bokeh_is_initializing = true\n",
+ " root._bokeh_onload_callbacks = []\n",
+ " const bokeh_loaded = root.Bokeh != null && (root.Bokeh.version === py_version || (root.Bokeh.versions !== undefined && root.Bokeh.versions.has(py_version)));\n",
+ " if (!reloading && !bokeh_loaded) {\n",
+ " if (root.Bokeh) {\n",
+ " root.Bokeh = undefined;\n",
+ " }\n",
+ " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
+ " }\n",
+ " load_libs(css_urls, js_urls, js_modules, js_exports, function() {\n",
+ " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
+ " run_inline_js();\n",
+ " });\n",
+ " }\n",
+ " }\n",
+ " // Give older versions of the autoload script a head-start to ensure\n",
+ " // they initialize before we start loading newer version.\n",
+ " setTimeout(load_or_wait, 100)\n",
+ "}(window));"
+ ],
+ "application/vnd.holoviews_load.v0+json": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = false;\n const py_version = '3.6.2'.replace('rc', '-rc.').replace('.dev', '-dev.');\n const reloading = true;\n const Bokeh = root.Bokeh;\n\n // Set a timeout for this load but only if we are not already initializing\n if (typeof (root._bokeh_timeout) === \"undefined\" || (force || !root._bokeh_is_initializing)) {\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, js_modules, js_exports, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n if (js_modules == null) js_modules = [];\n if (js_exports == null) js_exports = {};\n\n root._bokeh_onload_callbacks.push(callback);\n\n if (root._bokeh_is_loading > 0) {\n // Don't load bokeh if it is still initializing\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n } else if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n // There is nothing to load\n run_callbacks();\n return null;\n }\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 window._bokeh_on_load = on_load\n\n function on_error(e) {\n const src_el = e.srcElement\n console.error(\"failed to load \" + (src_el.href || src_el.src));\n }\n\n const skip = [];\n if (window.requirejs) {\n window.requirejs.config({'packages': {}, 'paths': {}, 'shim': {}});\n root._bokeh_is_loading = css_urls.length + 0;\n } else {\n root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n }\n\n const existing_stylesheets = []\n const links = document.getElementsByTagName('link')\n for (let i = 0; i < links.length; i++) {\n const link = links[i]\n if (link.href != null) {\n existing_stylesheets.push(link.href)\n }\n }\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const escaped = encodeURI(url)\n if (existing_stylesheets.indexOf(escaped) !== -1) {\n on_load()\n continue;\n }\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 } var existing_scripts = []\n const scripts = document.getElementsByTagName('script')\n for (let i = 0; i < scripts.length; i++) {\n var script = scripts[i]\n if (script.src != null) {\n existing_scripts.push(script.src)\n }\n }\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const escaped = encodeURI(url)\n if (skip.indexOf(escaped) !== -1 || existing_scripts.indexOf(escaped) !== -1) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\n const 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 for (let i = 0; i < js_modules.length; i++) {\n const url = js_modules[i];\n const escaped = encodeURI(url)\n if (skip.indexOf(escaped) !== -1 || existing_scripts.indexOf(escaped) !== -1) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\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 element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (const name in js_exports) {\n const url = js_exports[name];\n const escaped = encodeURI(url)\n if (skip.indexOf(escaped) >= 0 || root[name] != null) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\n var element = document.createElement('script');\n element.onerror = on_error;\n element.async = false;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n element.textContent = `\n import ${name} from \"${url}\"\n window.${name} = ${name}\n window._bokeh_on_load()\n `\n document.head.appendChild(element);\n }\n if (!js_urls.length && !js_modules.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 const js_urls = [\"https://cdn.holoviz.org/panel/1.6.0/dist/bundled/reactiveesm/es-module-shims@^1.10.0/dist/es-module-shims.min.js\"];\n const js_modules = [];\n const js_exports = {};\n const css_urls = [];\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {} // ensure no trailing comma for IE\n ];\n\n function run_inline_js() {\n if ((root.Bokeh !== undefined) || (force === true)) {\n for (let i = 0; i < inline_js.length; i++) {\n try {\n inline_js[i].call(root, root.Bokeh);\n } catch(e) {\n if (!reloading) {\n throw e;\n }\n }\n }\n // Cache old bokeh versions\n if (Bokeh != undefined && !reloading) {\n var NewBokeh = root.Bokeh;\n if (Bokeh.versions === undefined) {\n Bokeh.versions = new Map();\n }\n if (NewBokeh.version !== Bokeh.version) {\n Bokeh.versions.set(NewBokeh.version, NewBokeh)\n }\n root.Bokeh = Bokeh;\n }\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 root._bokeh_is_initializing = false\n }\n\n function load_or_wait() {\n // Implement a backoff loop that tries to ensure we do not load multiple\n // versions of Bokeh and its dependencies at the same time.\n // In recent versions we use the root._bokeh_is_initializing flag\n // to determine whether there is an ongoing attempt to initialize\n // bokeh, however for backward compatibility we also try to ensure\n // that we do not start loading a newer (Panel>=1.0 and Bokeh>3) version\n // before older versions are fully initialized.\n if (root._bokeh_is_initializing && Date.now() > root._bokeh_timeout) {\n // If the timeout and bokeh was not successfully loaded we reset\n // everything and try loading again\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_is_initializing = false;\n root._bokeh_onload_callbacks = undefined;\n root._bokeh_is_loading = 0\n console.log(\"Bokeh: BokehJS was loaded multiple times but one version failed to initialize.\");\n load_or_wait();\n } else if (root._bokeh_is_initializing || (typeof root._bokeh_is_initializing === \"undefined\" && root._bokeh_onload_callbacks !== undefined)) {\n setTimeout(load_or_wait, 100);\n } else {\n root._bokeh_is_initializing = true\n root._bokeh_onload_callbacks = []\n const bokeh_loaded = root.Bokeh != null && (root.Bokeh.version === py_version || (root.Bokeh.versions !== undefined && root.Bokeh.versions.has(py_version)));\n if (!reloading && !bokeh_loaded) {\n if (root.Bokeh) {\n root.Bokeh = undefined;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n }\n load_libs(css_urls, js_urls, js_modules, js_exports, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n }\n // Give older versions of the autoload script a head-start to ensure\n // they initialize before we start loading newer version.\n setTimeout(load_or_wait, 100)\n}(window));"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/javascript": [
+ "\n",
+ "if ((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",
+ "\n",
+ "var JS_MIME_TYPE = 'application/javascript';\n",
+ "var HTML_MIME_TYPE = 'text/html';\n",
+ "var EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\n",
+ "var CLASS_NAME = 'output';\n",
+ "\n",
+ "/**\n",
+ " * Render data to the DOM node\n",
+ " */\n",
+ "function 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",
+ " */\n",
+ "function 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",
+ " */\n",
+ "function 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",
+ " */\n",
+ "function 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",
+ " */\n",
+ "function handle_update_output(event, handle) {\n",
+ " handle_clear_output(event, {cell: {output_area: handle.output_area}})\n",
+ " handle_add_output(event, handle)\n",
+ "}\n",
+ "\n",
+ "function 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",
+ "\n",
+ "if (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/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"
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import uxarray as ux\n",
+ "import matplotlib.pyplot as plt\n",
+ "\n",
+ "uxds = ux.open_dataset('outCSne30.ug', 'outCSne30_vortex.nc')\n",
+ "\n",
+ "# The imports below are used to visualize range rings in this notebook and\n",
+ "# are not needed for routine use of azimuthal_mean().\n",
+ "import holoviews as hv\n",
+ "import cartopy.geodesic as gdyn\n",
+ "import math\n",
+ "import numpy as np\n",
+ "from functools import reduce\n",
+ "import operator"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c51c7e63-cd71-44e2-bace-cf39d916ed0b",
+ "metadata": {},
+ "source": [
+ "### A helper function to draw range rings and visualize azimuthal averaging:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "93d06880-cfac-46b9-8d99-5dc7255e9483",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def hv_range_ring(lon, lat, rad_gcd, n_samples=2000, color='red', line_width=1):\n",
+ " geo = gdyn.Geodesic()\n",
+ " circ_pts = geo.circle(lon=lon, lat=lat, radius=rad_gcd * 111320, n_samples=n_samples)\n",
+ " return hv.Path(circ_pts).opts(color=color, line_width=line_width)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "432f2e27-b76b-4966-b52b-d07a884a12c8",
+ "metadata": {},
+ "source": [
+ "# Azimuthal mean basics\n",
+ "An azimuthal average (or azimuthal mean) is a statistical measure that represents the average of a face-centered variable along rings/bands of constant distance from a specified central point. Azimuthal averaging is useful for describing circular/cylindrical features, where fields that strongly depend on distance from a center.\n",
+ "\n",
+ "In UXarray, azimuthal averaging is non-conservative. This means that faces are assigned to radial bins (i.e., distance intervals from the central point) based only on the face center coordinate."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "01d9c2ad-b3e4-4d92-900e-67c7a059e7c8",
+ "metadata": {},
+ "source": [
+ "# 1. Azimuthally averaging an idealized 2D field"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "deb9efe9-0200-4e35-971c-60fea192b215",
+ "metadata": {},
+ "source": [
+ "## Step 1.1: Visualize the global field\n",
+ "The global field is shaded below using the UxDataArray.plot() accessor. To help visualize azimuthal averaging, the chosen central point is marked with an 'x' and rings are drawn at every 10 great-circle degrees from the central point (37°N, 1°E)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "5417964c-52aa-4bbe-bd18-2fe4f90fbe58",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {},
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.holoviews_exec.v0+json": "",
+ "text/html": [
+ "\n",
+ ""
+ ],
+ "text/plain": [
+ ":DynamicMap []\n",
+ " :Overlay\n",
+ " .Image.I :Image [x,y] (x_y psi)\n",
+ " .Points.I :Points [x,y]\n",
+ " .Path.I :Path [x,y]\n",
+ " .Path.II :Path [x,y]\n",
+ " .Path.III :Path [x,y]\n",
+ " .Path.IV :Path [x,y]"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {
+ "application/vnd.holoviews_exec.v0+json": {
+ "id": "64b1d3c2-08a1-4ae7-bdb6-542df8f5a500"
+ }
+ },
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Display the global field\n",
+ "glob_plt = uxds[\"psi\"].plot(cmap=\"inferno\", periodic_elements=\"split\", title=\"Global Field\", dynamic=True)\n",
+ "\n",
+ "# Mark a center coordinate and draw range rings\n",
+ "lon, lat = 1, 37\n",
+ "glob_plt = glob_plt * hv.Points([(lon, lat)]).opts(color='lime', marker='x', size=10, line_width=2)\n",
+ "glob_plt = glob_plt * reduce(operator.mul, \n",
+ " [hv_range_ring(lon, lat, rr, color='lime') for rr in np.arange(10, 41, 10)])\n",
+ "glob_plt"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "53a40082-9861-4ecc-920c-15797c0537d7",
+ "metadata": {},
+ "source": [
+ "## Step 1.2: Compute the azimuthal mean\n",
+ "Calling `.azimuthal_mean()` with the arguments below samples every 2° out to 40 great-circle degrees around the central point."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "f0076c75-cf91-4e0b-89e0-a9376bccf706",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "
<xarray.DataArray 'psi_azimuthal_mean' (radius: 21)> Size: 168B\n",
+ "array([ nan, 0.98400088, 0.98263337, 0.98076282, 1.03482251,\n",
+ " 1.03210027, 0.96639787, 0.94121837, 0.99013955, 1.08111055,\n",
+ " 1.08413299, 0.99805499, 0.94448357, 0.90755765, 0.92506048,\n",
+ " 0.94187134, 0.93900079, 0.9867494 , 1.00598615, 0.98697273,\n",
+ " 0.99283143])\n",
+ "Coordinates:\n",
+ " * radius (radius) float64 168B 0.0 2.0 4.0 6.0 8.0 ... 34.0 36.0 38.0 40.0\n",
+ "Attributes:\n",
+ " azimuthal_mean: True\n",
+ " center_lon: 1.0\n",
+ " center_lat: 37.0\n",
+ " radius_units: degrees
nan 0.984 0.9826 0.9808 1.035 ... 0.939 0.9867 1.006 0.987 0.9928
array([ nan, 0.98400088, 0.98263337, 0.98076282, 1.03482251,\n",
+ " 1.03210027, 0.96639787, 0.94121837, 0.99013955, 1.08111055,\n",
+ " 1.08413299, 0.99805499, 0.94448357, 0.90755765, 0.92506048,\n",
+ " 0.94187134, 0.93900079, 0.9867494 , 1.00598615, 0.98697273,\n",
+ " 0.99283143])
PandasIndex
PandasIndex(Index([ 0.0, 2.0, 4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0, 18.0, 20.0, 22.0,\n",
+ " 24.0, 26.0, 28.0, 30.0, 32.0, 34.0, 36.0, 38.0, 40.0],\n",
+ " dtype='float64', name='radius'))
- azimuthal_mean :
- True
- center_lon :
- 1.0
- center_lat :
- 37.0
- radius_units :
- degrees
"
+ ],
+ "text/plain": [
+ " Size: 168B\n",
+ "array([ nan, 0.98400088, 0.98263337, 0.98076282, 1.03482251,\n",
+ " 1.03210027, 0.96639787, 0.94121837, 0.99013955, 1.08111055,\n",
+ " 1.08413299, 0.99805499, 0.94448357, 0.90755765, 0.92506048,\n",
+ " 0.94187134, 0.93900079, 0.9867494 , 1.00598615, 0.98697273,\n",
+ " 0.99283143])\n",
+ "Coordinates:\n",
+ " * radius (radius) float64 168B 0.0 2.0 4.0 6.0 8.0 ... 34.0 36.0 38.0 40.0\n",
+ "Attributes:\n",
+ " azimuthal_mean: True\n",
+ " center_lon: 1.0\n",
+ " center_lat: 37.0\n",
+ " radius_units: degrees"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "azim_mean_psi, hits = uxds[\"psi\"].azimuthal_mean((lon, lat), 40., 2, return_hit_counts=True)\n",
+ "azim_mean_psi"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9ecf6cb2-9575-4e13-8dea-d8ec50149a7a",
+ "metadata": {},
+ "source": [
+ "# Step 1.3: Plot the azimuthal mean\n",
+ "In the plot below, red dots mark where samples were taken at 2° intervals. The green vertical lines correspond to the green rings in the global field plot."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "94484bd9-9d90-43be-827d-da668badb3f4",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[,\n",
+ " ,\n",
+ " ,\n",
+ " ]"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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LhhR11Cr1VCr1e1+3dbG29V0Oh1kMhnkcsv+bu3j4wMfHx+LXoOosziTRGRjRo8ejaeffhqpqakIDAzEnXfeCQBYvnw5BgwYAA8PD0RERODJJ59EXV2dyWvXr1+PyMhIuLu7495770VFRYXJ169ebhs9enSbZbF77rkHjzzyiPj5ypUr0atXL6hUKgQHB2Pq1KnXfU8lJSWYMGEC1Go1YmJi8O9//xvR0dFYsWKFeI5MJsPq1asxefJkeHh44PXXXwcAfPvtt0hISIBKpUJsbCxeeeUVtLS0iK/r6M9l165dePTRR1FdXS0u4SxatKjdcVZVVeHxxx9HcHAwVCoV4uPj8d133wFof+ly3bp1iI2NhZubGwRB6PA9zLnW/V1Np9MhNTUVvr6+CAgIwAsvvICrW3AKgoBly5YhNjYWarUagwYNwpdffmlyzjfffINevXpBrVZjzJgx+PTTTyGTyVBVVWVyv9999x369esHNzc3FBYWorm5GS+88AK6d+8ODw8PJCUlYdeuXSbvvW/fPtx2221Qq9WIiIjAM888g/r6evHrXfF3isgaOJNEZIM+/fRT/PnPf8Yvv/wi/gCUy+V47733EB0djfz8fDz55JN44YUXsHLlSgBAeno6/vjHP2Lx4sWYMmUKtm3bhoULF97UODIyMvDMM8/gs88+Q3JyMiorK7F3797rfp+HH34Y5eXl2LVrF5RKJVJTU1FWVtbmvIULF2LJkiV45513oFAosH37djz44IN47733MHLkSJw5cwaPP/64eC7Q8Z9LcnIyVqxYgb/97W84deoUALQ7k6bX65GSkoLa2lr885//RI8ePXDixAkoFIp27+v06dP44osvsHnzZigUiut+j87c39XefvttrFu3DmvXrkW/fv3w9ttvY8uWLbj99tvFc15++WV89dVXWLVqFXr16oU9e/bgwQcfRFBQEEaNGoWCggJMnToVzz77LB577DFkZWXh+eefb3OthoYGLFmyBB9//DECAgLQrVs3PProoygoKMDGjRsRFhaGLVu24K677sLRo0fRq1cvHD16FOPHj8drr72GtWvX4uLFi3j66afx9NNP45NPPumyv1NEViEQkU0ZNWqUcMstt1zzvC+++EIICAgQP58xY4Zw1113mZwzbdo0wcfHR/x84cKFwqBBg0yu9eyzz5q8ZvLkycLMmTMFQRCE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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.plot(azim_mean_psi[\"radius\"], azim_mean_psi)\n",
+ "plt.scatter(azim_mean_psi[\"radius\"], azim_mean_psi, s=10, color='red')\n",
+ "plt.xlabel('radius [great-circle degrees]')\n",
+ "plt.ylabel('psi')\n",
+ "\n",
+ "[plt.axvline(rr, color='lime') for rr in np.arange(10, 41, 10)]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6995cf25-c174-431e-8e80-82a3dba669fd",
+ "metadata": {},
+ "source": [
+ "## Step 1.4: Inspect the hit count\n",
+ "The plot below shows the number of face centers that fall within each distance bin. As one would expect on a near-uniformly spaced mesh, the hit count increases linearly with distance."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "ea9d6baf-a81a-44a0-81a2-1264c5df9fca",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.plot(azim_mean_psi['radius'], hits)\n",
+ "plt.scatter(azim_mean_psi[\"radius\"], hits, s=10, color='red')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6486781f-8d1e-4a9d-8311-da5f48e7234b",
+ "metadata": {},
+ "source": [
+ "# 2: Azimuthally averaging tropical cyclone fields\n",
+ "A high-resolution (~0.25°) aquaplanet general circulation model permits the development of a handful of strong tropical cyclones (TCs). Because TCs are fairly axisymmetric, azimuthal averaging is useful for transforming their fields into cylindrical coordinates and visualizing features such as their low central pressure and warm core."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "ad86c507-2b41-4803-9270-588993fea5d1",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "clon, clat = 114.54, -17.66\n",
+ "tcds = ux.open_dataset('/glade/work/jpan/uxazim_demo/ne120np4_pentagons_100310.nc',\n",
+ " '/glade/work/jpan/uxazim_demo/cam.h1i.plev.0013-01-13-00000.nc').squeeze()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9269f53d-92ae-4787-8a61-576a588a7dfd",
+ "metadata": {},
+ "source": [
+ "## Step 2.1: Visualize the raw surface pressure field\n",
+ "Because we are only interested in a single tropical cyclone, we can subset a region of the global field using a bounding circle to speed up plotting."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "9514b0bd-c6f6-4774-9f9f-aeac2916f1d9",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {},
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.holoviews_exec.v0+json": "",
+ "text/html": [
+ "\n",
+ ""
+ ],
+ "text/plain": [
+ ":DynamicMap []\n",
+ " :Image [x,y] (x_y PS)"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {
+ "application/vnd.holoviews_exec.v0+json": {
+ "id": "b1daf282-789c-486a-b33d-e83abf1b6298"
+ }
+ },
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#Use a bounding circle to select faces whose centers lie\n",
+ "#within 5 great-circle degrees of the central point.\n",
+ "tcps = tcds['PS'].subset.bounding_circle((clon, clat), 5)\n",
+ "\n",
+ "#Setting dynamic=True allows for quick, adaptive rendering as you zoom/pan.\n",
+ "#It also preserves the original mesh faces in the plot.\n",
+ "ps_plt = tcps.plot(cmap=\"inferno\", periodic_elements=\"split\", title=\"Surface pressure\", dynamic=True)\n",
+ "ps_plt"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0c989f9f-109d-45b7-b011-ad46c0fdfb6a",
+ "metadata": {},
+ "source": [
+ "## Step 2.2: Compute the azimuthal mean of the 3D fields"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "b030fc4b-f2d7-4691-832e-9dc32e7bbd67",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "
<xarray.DataArray 'T_azimuthal_mean' (plev: 26, radius: 13)> Size: 3kB\n",
+ "array([[ nan, 238.20061042, 238.07972252, 237.99570753,\n",
+ " 238.00888973, 238.00242869, 238.1790747 , 238.06354964,\n",
+ " 238.2623691 , 238.29081298, 238.16468042, 237.98864513,\n",
+ " 237.93356308],\n",
+ " [ nan, 230.71426473, 230.68629394, 230.48409658,\n",
+ " 230.17606295, 230.1548325 , 229.99708408, 230.07275435,\n",
+ " 229.9634382 , 229.86362381, 229.91860611, 230.02733733,\n",
+ " 230.09972681],\n",
+ " [ nan, 222.56816843, 222.71253698, 223.24577647,\n",
+ " 224.11031543, 224.13290827, 224.25662631, 224.28844902,\n",
+ " 224.29394859, 224.28484642, 224.29108044, 224.15351119,\n",
+ " 224.08923615],\n",
+ " [ nan, 224.70788309, 224.12459941, 223.11910753,\n",
+ " 222.09043359, 221.93427246, 221.81130697, 221.55553468,\n",
+ " 221.58022862, 221.64720125, 221.55126155, 221.57687556,\n",
+ " 221.57393756],\n",
+ " [ nan, 214.80296312, 215.94675235, 217.33697796,\n",
+ " 217.75477968, 218.01371142, 218.15083474, 218.22523588,\n",
+ " 218.26814579, 218.07331526, 218.16901897, 218.3195764 ,\n",
+ " 218.44510226],\n",
+ "...\n",
+ " [ nan, 298.69938565, 297.14635909, 296.09023807,\n",
+ " 294.6287262 , 294.98888238, 294.97965803, 294.66028762,\n",
+ " 294.4298146 , 294.29170194, 294.0728373 , 293.91746256,\n",
+ " 293.87926481],\n",
+ " [ nan, 301.02056956, 300.06934219, 299.02027043,\n",
+ " 298.04171151, 298.12230926, 298.04818677, 298.00621268,\n",
+ " 297.90135895, 297.77418827, 297.51214646, 297.38709478,\n",
+ " 297.35003062],\n",
+ " [ nan, 303.26382152, 302.76179889, 301.71459978,\n",
+ " 301.0084972 , 300.73922974, 300.59966824, 300.5536293 ,\n",
+ " 300.48913686, 300.43193225, 300.33191518, 300.31275195,\n",
+ " 300.24766478],\n",
+ " [ nan, 305.74284086, 305.2285953 , 304.63768279,\n",
+ " 304.1671658 , 303.89796862, 303.63844544, 303.53381664,\n",
+ " 303.46108039, 303.32145989, 303.15805181, 303.09259189,\n",
+ " 302.90319175],\n",
+ " [ nan, 307.17291831, 306.62870387, 306.0598156 ,\n",
+ " 305.72815285, 305.61836845, 305.4418119 , 305.36210933,\n",
+ " 305.27861025, 305.11168971, 304.93262769, 304.86391603,\n",
+ " 304.63545043]])\n",
+ "Coordinates:\n",
+ " * radius (radius) float64 104B 0.0 0.25 0.5 0.75 1.0 ... 2.25 2.5 2.75 3.0\n",
+ "Dimensions without coordinates: plev\n",
+ "Attributes:\n",
+ " azimuthal_mean: True\n",
+ " center_lon: 114.54\n",
+ " center_lat: -17.66\n",
+ " radius_units: degrees
nan 238.2 238.1 238.0 238.0 238.0 ... 305.3 305.1 304.9 304.9 304.6
array([[ nan, 238.20061042, 238.07972252, 237.99570753,\n",
+ " 238.00888973, 238.00242869, 238.1790747 , 238.06354964,\n",
+ " 238.2623691 , 238.29081298, 238.16468042, 237.98864513,\n",
+ " 237.93356308],\n",
+ " [ nan, 230.71426473, 230.68629394, 230.48409658,\n",
+ " 230.17606295, 230.1548325 , 229.99708408, 230.07275435,\n",
+ " 229.9634382 , 229.86362381, 229.91860611, 230.02733733,\n",
+ " 230.09972681],\n",
+ " [ nan, 222.56816843, 222.71253698, 223.24577647,\n",
+ " 224.11031543, 224.13290827, 224.25662631, 224.28844902,\n",
+ " 224.29394859, 224.28484642, 224.29108044, 224.15351119,\n",
+ " 224.08923615],\n",
+ " [ nan, 224.70788309, 224.12459941, 223.11910753,\n",
+ " 222.09043359, 221.93427246, 221.81130697, 221.55553468,\n",
+ " 221.58022862, 221.64720125, 221.55126155, 221.57687556,\n",
+ " 221.57393756],\n",
+ " [ nan, 214.80296312, 215.94675235, 217.33697796,\n",
+ " 217.75477968, 218.01371142, 218.15083474, 218.22523588,\n",
+ " 218.26814579, 218.07331526, 218.16901897, 218.3195764 ,\n",
+ " 218.44510226],\n",
+ "...\n",
+ " [ nan, 298.69938565, 297.14635909, 296.09023807,\n",
+ " 294.6287262 , 294.98888238, 294.97965803, 294.66028762,\n",
+ " 294.4298146 , 294.29170194, 294.0728373 , 293.91746256,\n",
+ " 293.87926481],\n",
+ " [ nan, 301.02056956, 300.06934219, 299.02027043,\n",
+ " 298.04171151, 298.12230926, 298.04818677, 298.00621268,\n",
+ " 297.90135895, 297.77418827, 297.51214646, 297.38709478,\n",
+ " 297.35003062],\n",
+ " [ nan, 303.26382152, 302.76179889, 301.71459978,\n",
+ " 301.0084972 , 300.73922974, 300.59966824, 300.5536293 ,\n",
+ " 300.48913686, 300.43193225, 300.33191518, 300.31275195,\n",
+ " 300.24766478],\n",
+ " [ nan, 305.74284086, 305.2285953 , 304.63768279,\n",
+ " 304.1671658 , 303.89796862, 303.63844544, 303.53381664,\n",
+ " 303.46108039, 303.32145989, 303.15805181, 303.09259189,\n",
+ " 302.90319175],\n",
+ " [ nan, 307.17291831, 306.62870387, 306.0598156 ,\n",
+ " 305.72815285, 305.61836845, 305.4418119 , 305.36210933,\n",
+ " 305.27861025, 305.11168971, 304.93262769, 304.86391603,\n",
+ " 304.63545043]])
PandasIndex
PandasIndex(Index([0.0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25, 2.5, 2.75, 3.0], dtype='float64', name='radius'))
- azimuthal_mean :
- True
- center_lon :
- 114.54
- center_lat :
- -17.66
- radius_units :
- degrees
"
+ ],
+ "text/plain": [
+ " Size: 3kB\n",
+ "array([[ nan, 238.20061042, 238.07972252, 237.99570753,\n",
+ " 238.00888973, 238.00242869, 238.1790747 , 238.06354964,\n",
+ " 238.2623691 , 238.29081298, 238.16468042, 237.98864513,\n",
+ " 237.93356308],\n",
+ " [ nan, 230.71426473, 230.68629394, 230.48409658,\n",
+ " 230.17606295, 230.1548325 , 229.99708408, 230.07275435,\n",
+ " 229.9634382 , 229.86362381, 229.91860611, 230.02733733,\n",
+ " 230.09972681],\n",
+ " [ nan, 222.56816843, 222.71253698, 223.24577647,\n",
+ " 224.11031543, 224.13290827, 224.25662631, 224.28844902,\n",
+ " 224.29394859, 224.28484642, 224.29108044, 224.15351119,\n",
+ " 224.08923615],\n",
+ " [ nan, 224.70788309, 224.12459941, 223.11910753,\n",
+ " 222.09043359, 221.93427246, 221.81130697, 221.55553468,\n",
+ " 221.58022862, 221.64720125, 221.55126155, 221.57687556,\n",
+ " 221.57393756],\n",
+ " [ nan, 214.80296312, 215.94675235, 217.33697796,\n",
+ " 217.75477968, 218.01371142, 218.15083474, 218.22523588,\n",
+ " 218.26814579, 218.07331526, 218.16901897, 218.3195764 ,\n",
+ " 218.44510226],\n",
+ "...\n",
+ " [ nan, 298.69938565, 297.14635909, 296.09023807,\n",
+ " 294.6287262 , 294.98888238, 294.97965803, 294.66028762,\n",
+ " 294.4298146 , 294.29170194, 294.0728373 , 293.91746256,\n",
+ " 293.87926481],\n",
+ " [ nan, 301.02056956, 300.06934219, 299.02027043,\n",
+ " 298.04171151, 298.12230926, 298.04818677, 298.00621268,\n",
+ " 297.90135895, 297.77418827, 297.51214646, 297.38709478,\n",
+ " 297.35003062],\n",
+ " [ nan, 303.26382152, 302.76179889, 301.71459978,\n",
+ " 301.0084972 , 300.73922974, 300.59966824, 300.5536293 ,\n",
+ " 300.48913686, 300.43193225, 300.33191518, 300.31275195,\n",
+ " 300.24766478],\n",
+ " [ nan, 305.74284086, 305.2285953 , 304.63768279,\n",
+ " 304.1671658 , 303.89796862, 303.63844544, 303.53381664,\n",
+ " 303.46108039, 303.32145989, 303.15805181, 303.09259189,\n",
+ " 302.90319175],\n",
+ " [ nan, 307.17291831, 306.62870387, 306.0598156 ,\n",
+ " 305.72815285, 305.61836845, 305.4418119 , 305.36210933,\n",
+ " 305.27861025, 305.11168971, 304.93262769, 304.86391603,\n",
+ " 304.63545043]])\n",
+ "Coordinates:\n",
+ " * radius (radius) float64 104B 0.0 0.25 0.5 0.75 1.0 ... 2.25 2.5 2.75 3.0\n",
+ "Dimensions without coordinates: plev\n",
+ "Attributes:\n",
+ " azimuthal_mean: True\n",
+ " center_lon: 114.54\n",
+ " center_lat: -17.66\n",
+ " radius_units: degrees"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "args = ((clon, clat), 3, 0.25)\n",
+ "azim_mean_T = tcds[\"T\"].azimuthal_mean(*args)\n",
+ "azim_mean_Z = tcds[\"Z3\"].azimuthal_mean(*args)\n",
+ "azim_mean_T"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7c4bad1b-ff8d-41bf-96a3-24f8de1735dc",
+ "metadata": {},
+ "source": [
+ "# Step 2.3: Plot the TC radial profile\n",
+ "The contour plot below shows the warm core and low pressure of the TC. After taking the azimuthal average, we subtract the value at the outermost radius to obtain an approximate anomaly relative to the ambient environment."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "be4a5dd8-bc76-41e2-bcc5-748d66867c9e",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "#Subtract the value at the outer radius\n",
+ "Tpert = azim_mean_T - azim_mean_T.isel(radius=-1)\n",
+ "Zpert = azim_mean_Z - azim_mean_Z.isel(radius=-1)\n",
+ "\n",
+ "plt.contour(azim_mean_Z['radius'], tcds['plev'] / 100, Zpert, levels=np.arange(-500, 501, 50), colors='black')\n",
+ "plt.contourf(azim_mean_T['radius'], tcds['plev'] / 100, Tpert, levels=np.arange(-10, 11, 2), cmap='bwr', extend='both')\n",
+ "plt.xlabel('distance from center [°]')\n",
+ "plt.ylim(1000, 100)\n",
+ "plt.yscale('log')\n",
+ "plt.ylabel('Pressure [hPa]')\n",
+ "plt.colorbar(label='T anomaly [K]')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "1602e7cb-34e8-4295-9ead-28459ea44d78",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python [conda env:miniconda3-aquapux2512]",
+ "language": "python",
+ "name": "conda-env-miniconda3-aquapux2512-py"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.11.4"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}