Files
remote-sensing/cloud_new/train_cloud_mask.ipynb
Victor Phan 82aa814777 update 01
2025-12-21 14:34:18 +07:00

4735 lines
507 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "a33d402d-a18e-4c67-a7e7-c5392d30a50c",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<script type=\"esms-options\">{\"shimMode\": true}</script><style>*[data-root-id],\n",
"*[data-root-id] > * {\n",
" box-sizing: border-box;\n",
" font-family: var(--jp-ui-font-family);\n",
" font-size: var(--jp-ui-font-size1);\n",
" color: var(--vscode-editor-foreground, var(--jp-ui-font-color1));\n",
"}\n",
"\n",
"/* Override VSCode background color */\n",
".cell-output-ipywidget-background:has(\n",
" > .cell-output-ipywidget-background > .lm-Widget > *[data-root-id]\n",
" ),\n",
".cell-output-ipywidget-background:has(> .lm-Widget > *[data-root-id]) {\n",
" background-color: transparent !important;\n",
"}\n",
"</style>"
]
},
"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.5.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.5.4/dist/bundled/reactiveesm/es-module-shims@^1.10.0/dist/es-module-shims.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-3.5.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.5.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.5.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.5.2.min.js\", \"https://cdn.holoviz.org/panel/1.5.4/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.5.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.5.4/dist/bundled/reactiveesm/es-module-shims@^1.10.0/dist/es-module-shims.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-3.5.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.5.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.5.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.5.2.min.js\", \"https://cdn.holoviz.org/panel/1.5.4/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": [
"<div id='e9baf3cb-64cd-4451-8adb-3bdad8d90494'>\n",
" <div id=\"e7ae0695-99d5-49d6-9fce-711893c19eee\" data-root-id=\"e9baf3cb-64cd-4451-8adb-3bdad8d90494\" style=\"display: contents;\"></div>\n",
"</div>\n",
"<script type=\"application/javascript\">(function(root) {\n",
" var docs_json = {\"0f37b649-bc9a-4636-9d1f-b9f12b2e7df5\":{\"version\":\"3.5.2\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"panel.models.browser.BrowserInfo\",\"id\":\"e9baf3cb-64cd-4451-8adb-3bdad8d90494\"},{\"type\":\"object\",\"name\":\"panel.models.comm_manager.CommManager\",\"id\":\"746838f0-7b1b-4163-9560-2e3c9eef1c30\",\"attributes\":{\"plot_id\":\"e9baf3cb-64cd-4451-8adb-3bdad8d90494\",\"comm_id\":\"73010565d65141b4955d1a1a99d91fe1\",\"client_comm_id\":\"818f8b2b82c64c889812be9f4f2da225\"}}],\"defs\":[{\"type\":\"model\",\"name\":\"ReactiveHTML1\"},{\"type\":\"model\",\"name\":\"FlexBox1\",\"properties\":[{\"name\":\"align_content\",\"kind\":\"Any\",\"default\":\"flex-start\"},{\"name\":\"align_items\",\"kind\":\"Any\",\"default\":\"flex-start\"},{\"name\":\"flex_direction\",\"kind\":\"Any\",\"default\":\"row\"},{\"name\":\"flex_wrap\",\"kind\":\"Any\",\"default\":\"wrap\"},{\"name\":\"gap\",\"kind\":\"Any\",\"default\":\"\"},{\"name\":\"justify_content\",\"kind\":\"Any\",\"default\":\"flex-start\"}]},{\"type\":\"model\",\"name\":\"FloatPanel1\",\"properties\":[{\"name\":\"config\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}},{\"name\":\"contained\",\"kind\":\"Any\",\"default\":true},{\"name\":\"position\",\"kind\":\"Any\",\"default\":\"right-top\"},{\"name\":\"offsetx\",\"kind\":\"Any\",\"default\":null},{\"name\":\"offsety\",\"kind\":\"Any\",\"default\":null},{\"name\":\"theme\",\"kind\":\"Any\",\"default\":\"primary\"},{\"name\":\"status\",\"kind\":\"Any\",\"default\":\"normalized\"}]},{\"type\":\"model\",\"name\":\"GridStack1\",\"properties\":[{\"name\":\"mode\",\"kind\":\"Any\",\"default\":\"warn\"},{\"name\":\"ncols\",\"kind\":\"Any\",\"default\":null},{\"name\":\"nrows\",\"kind\":\"Any\",\"default\":null},{\"name\":\"allow_resize\",\"kind\":\"Any\",\"default\":true},{\"name\":\"allow_drag\",\"kind\":\"Any\",\"default\":true},{\"name\":\"state\",\"kind\":\"Any\",\"default\":[]}]},{\"type\":\"model\",\"name\":\"drag1\",\"properties\":[{\"name\":\"slider_width\",\"kind\":\"Any\",\"default\":5},{\"name\":\"slider_color\",\"kind\":\"Any\",\"default\":\"black\"},{\"name\":\"value\",\"kind\":\"Any\",\"default\":50}]},{\"type\":\"model\",\"name\":\"click1\",\"properties\":[{\"name\":\"terminal_output\",\"kind\":\"Any\",\"default\":\"\"},{\"name\":\"debug_name\",\"kind\":\"Any\",\"default\":\"\"},{\"name\":\"clears\",\"kind\":\"Any\",\"default\":0}]},{\"type\":\"model\",\"name\":\"FastWrapper1\",\"properties\":[{\"name\":\"object\",\"kind\":\"Any\",\"default\":null},{\"name\":\"style\",\"kind\":\"Any\",\"default\":null}]},{\"type\":\"model\",\"name\":\"NotificationAreaBase1\",\"properties\":[{\"name\":\"js_events\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}},{\"name\":\"position\",\"kind\":\"Any\",\"default\":\"bottom-right\"},{\"name\":\"_clear\",\"kind\":\"Any\",\"default\":0}]},{\"type\":\"model\",\"name\":\"NotificationArea1\",\"properties\":[{\"name\":\"js_events\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}},{\"name\":\"notifications\",\"kind\":\"Any\",\"default\":[]},{\"name\":\"position\",\"kind\":\"Any\",\"default\":\"bottom-right\"},{\"name\":\"_clear\",\"kind\":\"Any\",\"default\":0},{\"name\":\"types\",\"kind\":\"Any\",\"default\":[{\"type\":\"map\",\"entries\":[[\"type\",\"warning\"],[\"background\",\"#ffc107\"],[\"icon\",{\"type\":\"map\",\"entries\":[[\"className\",\"fas fa-exclamation-triangle\"],[\"tagName\",\"i\"],[\"color\",\"white\"]]}]]},{\"type\":\"map\",\"entries\":[[\"type\",\"info\"],[\"background\",\"#007bff\"],[\"icon\",{\"type\":\"map\",\"entries\":[[\"className\",\"fas fa-info-circle\"],[\"tagName\",\"i\"],[\"color\",\"white\"]]}]]}]}]},{\"type\":\"model\",\"name\":\"Notification\",\"properties\":[{\"name\":\"background\",\"kind\":\"Any\",\"default\":null},{\"name\":\"duration\",\"kind\":\"Any\",\"default\":3000},{\"name\":\"icon\",\"kind\":\"Any\",\"default\":null},{\"name\":\"message\",\"kind\":\"Any\",\"default\":\"\"},{\"name\":\"notification_type\",\"kind\":\"Any\",\"default\":null},{\"name\":\"_destroyed\",\"kind\":\"Any\",\"default\":false}]},{\"type\":\"model\",\"name\":\"TemplateActions1\",\"properties\":[{\"name\":\"open_modal\",\"kind\":\"Any\",\"default\":0},{\"name\":\"close_modal\",\"kind\":\"Any\",\"default\":0}]},{\"type\":\"model\",\"name\":\"BootstrapTemplateActions1\",\"properties\":[{\"name\":\"open_modal\",\"kind\":\"Any\",\"default\":0},{\"name\":\"close_modal\",\"kind\":\"Any\",\"default\":0}]},{\"type\":\"model\",\"name\":\"TemplateEditor1\",\"properties\":[{\"name\":\"layout\",\"kind\":\"Any\",\"default\":[]}]},{\"type\":\"model\",\"name\":\"MaterialTemplateActions1\",\"properties\":[{\"name\":\"open_modal\",\"kind\":\"Any\",\"default\":0},{\"name\":\"close_modal\",\"kind\":\"Any\",\"default\":0}]},{\"type\":\"model\",\"name\":\"ReactiveESM1\",\"properties\":[{\"name\":\"esm_constants\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}}]},{\"type\":\"model\",\"name\":\"JSComponent1\",\"properties\":[{\"name\":\"esm_constants\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}}]},{\"type\":\"model\",\"name\":\"ReactComponent1\",\"properties\":[{\"name\":\"esm_constants\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}}]},{\"type\":\"model\",\"name\":\"AnyWidgetComponent1\",\"properties\":[{\"name\":\"esm_constants\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}}]},{\"type\":\"model\",\"name\":\"request_value1\",\"properties\":[{\"name\":\"fill\",\"kind\":\"Any\",\"default\":\"none\"},{\"name\":\"_synced\",\"kind\":\"Any\",\"default\":null},{\"name\":\"_request_sync\",\"kind\":\"Any\",\"default\":0}]}]}};\n",
" var render_items = [{\"docid\":\"0f37b649-bc9a-4636-9d1f-b9f12b2e7df5\",\"roots\":{\"e9baf3cb-64cd-4451-8adb-3bdad8d90494\":\"e7ae0695-99d5-49d6-9fce-711893c19eee\"},\"root_ids\":[\"e9baf3cb-64cd-4451-8adb-3bdad8d90494\"]}];\n",
" var docs = Object.values(docs_json)\n",
" if (!docs) {\n",
" return\n",
" }\n",
" const py_version = docs[0].version.replace('rc', '-rc.').replace('.dev', '-dev.')\n",
" async function embed_document(root) {\n",
" var Bokeh = get_bokeh(root)\n",
" await Bokeh.embed.embed_items_notebook(docs_json, render_items);\n",
" for (const render_item of render_items) {\n",
" for (const root_id of render_item.root_ids) {\n",
"\tconst id_el = document.getElementById(root_id)\n",
"\tif (id_el.children.length && id_el.children[0].hasAttribute('data-root-id')) {\n",
"\t const root_el = id_el.children[0]\n",
"\t root_el.id = root_el.id + '-rendered'\n",
"\t for (const child of root_el.children) {\n",
" // Ensure JupyterLab does not capture keyboard shortcuts\n",
" // see: https://jupyterlab.readthedocs.io/en/4.1.x/extension/notebook.html#keyboard-interaction-model\n",
"\t child.setAttribute('data-lm-suppress-shortcuts', 'true')\n",
"\t }\n",
"\t}\n",
" }\n",
" }\n",
" }\n",
" function get_bokeh(root) {\n",
" if (root.Bokeh === undefined) {\n",
" return null\n",
" } else if (root.Bokeh.version !== py_version) {\n",
" if (root.Bokeh.versions === undefined || !root.Bokeh.versions.has(py_version)) {\n",
"\treturn null\n",
" }\n",
" return root.Bokeh.versions.get(py_version);\n",
" } else if (root.Bokeh.version === py_version) {\n",
" return root.Bokeh\n",
" }\n",
" return null\n",
" }\n",
" function is_loaded(root) {\n",
" var Bokeh = get_bokeh(root)\n",
" return (Bokeh != null && Bokeh.Panel !== undefined)\n",
" }\n",
" if (is_loaded(root)) {\n",
" embed_document(root);\n",
" } else {\n",
" var attempts = 0;\n",
" var timer = setInterval(function(root) {\n",
" if (is_loaded(root)) {\n",
" clearInterval(timer);\n",
" embed_document(root);\n",
" } else if (document.readyState == \"complete\") {\n",
" attempts++;\n",
" if (attempts > 200) {\n",
" clearInterval(timer);\n",
"\t var Bokeh = get_bokeh(root)\n",
"\t if (Bokeh == null || Bokeh.Panel == null) {\n",
" console.warn(\"Panel: ERROR: Unable to run Panel code because Bokeh or Panel library is missing\");\n",
"\t } else {\n",
"\t console.warn(\"Panel: WARNING: Attempting to render but not all required libraries could be resolved.\")\n",
"\t embed_document(root)\n",
"\t }\n",
" }\n",
" }\n",
" }, 25, root)\n",
" }\n",
"})(window);</script>"
]
},
"metadata": {
"application/vnd.holoviews_exec.v0+json": {
"id": "e9baf3cb-64cd-4451-8adb-3bdad8d90494"
}
},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<script type=\"esms-options\">{\"shimMode\": true}</script><style>*[data-root-id],\n",
"*[data-root-id] > * {\n",
" box-sizing: border-box;\n",
" font-family: var(--jp-ui-font-family);\n",
" font-size: var(--jp-ui-font-size1);\n",
" color: var(--vscode-editor-foreground, var(--jp-ui-font-color1));\n",
"}\n",
"\n",
"/* Override VSCode background color */\n",
".cell-output-ipywidget-background:has(\n",
" > .cell-output-ipywidget-background > .lm-Widget > *[data-root-id]\n",
" ),\n",
".cell-output-ipywidget-background:has(> .lm-Widget > *[data-root-id]) {\n",
" background-color: transparent !important;\n",
"}\n",
"</style>"
]
},
"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.5.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.5.4/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.5.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.5.4/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"
},
{
"data": {
"text/html": [
"<script type=\"esms-options\">{\"shimMode\": true}</script><style>*[data-root-id],\n",
"*[data-root-id] > * {\n",
" box-sizing: border-box;\n",
" font-family: var(--jp-ui-font-family);\n",
" font-size: var(--jp-ui-font-size1);\n",
" color: var(--vscode-editor-foreground, var(--jp-ui-font-color1));\n",
"}\n",
"\n",
"/* Override VSCode background color */\n",
".cell-output-ipywidget-background:has(\n",
" > .cell-output-ipywidget-background > .lm-Widget > *[data-root-id]\n",
" ),\n",
".cell-output-ipywidget-background:has(> .lm-Widget > *[data-root-id]) {\n",
" background-color: transparent !important;\n",
"}\n",
"</style>"
]
},
"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.5.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.5.4/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.5.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.5.4/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"
},
{
"data": {
"text/html": [
"<script type=\"esms-options\">{\"shimMode\": true}</script><style>*[data-root-id],\n",
"*[data-root-id] > * {\n",
" box-sizing: border-box;\n",
" font-family: var(--jp-ui-font-family);\n",
" font-size: var(--jp-ui-font-size1);\n",
" color: var(--vscode-editor-foreground, var(--jp-ui-font-color1));\n",
"}\n",
"\n",
"/* Override VSCode background color */\n",
".cell-output-ipywidget-background:has(\n",
" > .cell-output-ipywidget-background > .lm-Widget > *[data-root-id]\n",
" ),\n",
".cell-output-ipywidget-background:has(> .lm-Widget > *[data-root-id]) {\n",
" background-color: transparent !important;\n",
"}\n",
"</style>"
]
},
"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.5.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.5.4/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.5.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.5.4/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": [
"\n",
"import importlib\n",
"import new_import\n",
"importlib.reload(new_import)\n",
"\n",
"from new_import import *"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "fc5decb7-259f-4df5-abca-f287035c55ec",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Starting new cluster.\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
" <div style=\"width: 24px; height: 24px; background-color: #e1e1e1; border: 3px solid #9D9D9D; border-radius: 5px; position: absolute;\"> </div>\n",
" <div style=\"margin-left: 48px;\">\n",
" <h3 style=\"margin-bottom: 0px;\">Client</h3>\n",
" <p style=\"color: #9D9D9D; margin-bottom: 0px;\">Client-0d47191e-ea6a-11ef-805e-4f8c64f4c9ec</p>\n",
" <table style=\"width: 100%; text-align: left;\">\n",
"\n",
" <tr>\n",
" \n",
" <td style=\"text-align: left;\"><strong>Connection method:</strong> Cluster object</td>\n",
" <td style=\"text-align: left;\"><strong>Cluster type:</strong> dask_gateway.GatewayCluster</td>\n",
" \n",
" </tr>\n",
"\n",
" \n",
" <tr>\n",
" <td style=\"text-align: left;\">\n",
" <strong>Dashboard: </strong> <a href=\"https://hub.asia.easi-eo.solutions/services/dask-gateway/clusters/easihub.b6811833ff2d49e0b4bf19bcd65ee123/status\" target=\"_blank\">https://hub.asia.easi-eo.solutions/services/dask-gateway/clusters/easihub.b6811833ff2d49e0b4bf19bcd65ee123/status</a>\n",
" </td>\n",
" <td style=\"text-align: left;\"></td>\n",
" </tr>\n",
" \n",
"\n",
" </table>\n",
"\n",
" \n",
" <button style=\"margin-bottom: 12px;\" data-commandlinker-command=\"dask:populate-and-launch-layout\" data-commandlinker-args='{\"url\": \"https://hub.asia.easi-eo.solutions/services/dask-gateway/clusters/easihub.b6811833ff2d49e0b4bf19bcd65ee123/status\" }'>\n",
" Launch dashboard in JupyterLab\n",
" </button>\n",
" \n",
"\n",
" \n",
" <details>\n",
" <summary style=\"margin-bottom: 20px;\"><h3 style=\"display: inline;\">Cluster Info</h3></summary>\n",
" <div style='background-color: #f2f2f2; display: inline-block; padding: 10px; border: 1px solid #999999;'>\n",
" <h3>GatewayCluster</h3>\n",
" <ul>\n",
" <li><b>Name: </b>easihub.b6811833ff2d49e0b4bf19bcd65ee123\n",
" <li><b>Dashboard: </b><a href='https://hub.asia.easi-eo.solutions/services/dask-gateway/clusters/easihub.b6811833ff2d49e0b4bf19bcd65ee123/status' target='_blank'>https://hub.asia.easi-eo.solutions/services/dask-gateway/clusters/easihub.b6811833ff2d49e0b4bf19bcd65ee123/status</a>\n",
" </ul>\n",
"</div>\n",
"\n",
" </details>\n",
" \n",
"\n",
" </div>\n",
"</div>"
],
"text/plain": [
"<Client: 'tls://10.0.59.97:8786' processes=0 threads=0, memory=0 B>"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"2025-02-14 01:02:35,415 - distributed.client - ERROR - Failed to reconnect to scheduler after 30.00 seconds, closing client\n"
]
}
],
"source": [
"cluster, client = notebook_utils.initialize_dask(use_gateway=True, workers=(1,10))\n",
"# Khai báo 1 Datacube là dc\n",
"dc = datacube.Datacube()\n",
"client"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "46931660-ebb5-40de-84fc-afc150c4855b",
"metadata": {},
"outputs": [],
"source": [
"date_range = ('2023-09-01', '2023-10-01')\n",
"longtitude_range = (105.5, 106.4)\n",
"latitude_range = (9.2, 10.0) \n",
"\n",
"coordinates = (longtitude_range, latitude_range)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "cad8c2d3-f545-4582-96b0-df9d9779d798",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<h4>Dataset size: 1.96 GB</h4>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
"<defs>\n",
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"</symbol>\n",
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"</symbol>\n",
"</defs>\n",
"</svg>\n",
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
" *\n",
" */\n",
"\n",
":root {\n",
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
" --xr-background-color: var(--jp-layout-color0, white);\n",
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
"}\n",
"\n",
"html[theme=\"dark\"],\n",
"html[data-theme=\"dark\"],\n",
"body[data-theme=\"dark\"],\n",
"body.vscode-dark {\n",
" --xr-font-color0: rgba(255, 255, 255, 1);\n",
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n",
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n",
" --xr-border-color: #1f1f1f;\n",
" --xr-disabled-color: #515151;\n",
" --xr-background-color: #111111;\n",
" --xr-background-color-row-even: #111111;\n",
" --xr-background-color-row-odd: #313131;\n",
"}\n",
"\n",
".xr-wrap {\n",
" display: block !important;\n",
" min-width: 300px;\n",
" max-width: 700px;\n",
"}\n",
"\n",
".xr-text-repr-fallback {\n",
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
" display: none;\n",
"}\n",
"\n",
".xr-header {\n",
" padding-top: 6px;\n",
" padding-bottom: 6px;\n",
" margin-bottom: 4px;\n",
" border-bottom: solid 1px var(--xr-border-color);\n",
"}\n",
"\n",
".xr-header > div,\n",
".xr-header > ul {\n",
" display: inline;\n",
" margin-top: 0;\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-obj-type,\n",
".xr-array-name {\n",
" margin-left: 2px;\n",
" margin-right: 10px;\n",
"}\n",
"\n",
".xr-obj-type {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-sections {\n",
" padding-left: 0 !important;\n",
" display: grid;\n",
" grid-template-columns: 150px auto auto 1fr 0 20px 0 20px;\n",
"}\n",
"\n",
".xr-section-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-section-item input {\n",
" display: inline-block;\n",
" opacity: 0;\n",
" height: 0;\n",
"}\n",
"\n",
".xr-section-item input + label {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label {\n",
" cursor: pointer;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-item input:focus + label {\n",
" border: 2px solid var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label:hover {\n",
" color: var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-summary {\n",
" grid-column: 1;\n",
" color: var(--xr-font-color2);\n",
" font-weight: 500;\n",
"}\n",
"\n",
".xr-section-summary > span {\n",
" display: inline-block;\n",
" padding-left: 0.5em;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-summary-in + label:before {\n",
" display: inline-block;\n",
" content: \"►\";\n",
" font-size: 11px;\n",
" width: 15px;\n",
" text-align: center;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label:before {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label:before {\n",
" content: \"▼\";\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label > span {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-summary,\n",
".xr-section-inline-details {\n",
" padding-top: 4px;\n",
" padding-bottom: 4px;\n",
"}\n",
"\n",
".xr-section-inline-details {\n",
" grid-column: 2 / -1;\n",
"}\n",
"\n",
".xr-section-details {\n",
" display: none;\n",
" grid-column: 1 / -1;\n",
" margin-bottom: 5px;\n",
"}\n",
"\n",
".xr-section-summary-in:checked ~ .xr-section-details {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-array-wrap {\n",
" grid-column: 1 / -1;\n",
" display: grid;\n",
" grid-template-columns: 20px auto;\n",
"}\n",
"\n",
".xr-array-wrap > label {\n",
" grid-column: 1;\n",
" vertical-align: top;\n",
"}\n",
"\n",
".xr-preview {\n",
" color: var(--xr-font-color3);\n",
"}\n",
"\n",
".xr-array-preview,\n",
".xr-array-data {\n",
" padding: 0 5px !important;\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-array-data,\n",
".xr-array-in:checked ~ .xr-array-preview {\n",
" display: none;\n",
"}\n",
"\n",
".xr-array-in:checked ~ .xr-array-data,\n",
".xr-array-preview {\n",
" display: inline-block;\n",
"}\n",
"\n",
".xr-dim-list {\n",
" display: inline-block !important;\n",
" list-style: none;\n",
" padding: 0 !important;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list li {\n",
" display: inline-block;\n",
" padding: 0;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list:before {\n",
" content: \"(\";\n",
"}\n",
"\n",
".xr-dim-list:after {\n",
" content: \")\";\n",
"}\n",
"\n",
".xr-dim-list li:not(:last-child):after {\n",
" content: \",\";\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-has-index {\n",
" font-weight: bold;\n",
"}\n",
"\n",
".xr-var-list,\n",
".xr-var-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-var-item > div,\n",
".xr-var-item label,\n",
".xr-var-item > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-even);\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-var-item > .xr-var-name:hover span {\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-var-list > li:nth-child(odd) > div,\n",
".xr-var-list > li:nth-child(odd) > label,\n",
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-odd);\n",
"}\n",
"\n",
".xr-var-name {\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-var-dims {\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-var-dtype {\n",
" grid-column: 3;\n",
" text-align: right;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-preview {\n",
" grid-column: 4;\n",
"}\n",
"\n",
".xr-index-preview {\n",
" grid-column: 2 / 5;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-name,\n",
".xr-var-dims,\n",
".xr-var-dtype,\n",
".xr-preview,\n",
".xr-attrs dt {\n",
" white-space: nowrap;\n",
" overflow: hidden;\n",
" text-overflow: ellipsis;\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-var-name:hover,\n",
".xr-var-dims:hover,\n",
".xr-var-dtype:hover,\n",
".xr-attrs dt:hover {\n",
" overflow: visible;\n",
" width: auto;\n",
" z-index: 1;\n",
"}\n",
"\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" display: none;\n",
" background-color: var(--xr-background-color) !important;\n",
" padding-bottom: 5px !important;\n",
"}\n",
"\n",
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
".xr-var-data-in:checked ~ .xr-var-data,\n",
".xr-index-data-in:checked ~ .xr-index-data {\n",
" display: block;\n",
"}\n",
"\n",
".xr-var-data > table {\n",
" float: right;\n",
"}\n",
"\n",
".xr-var-name span,\n",
".xr-var-data,\n",
".xr-index-name div,\n",
".xr-index-data,\n",
".xr-attrs {\n",
" padding-left: 25px !important;\n",
"}\n",
"\n",
".xr-attrs,\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" grid-column: 1 / -1;\n",
"}\n",
"\n",
"dl.xr-attrs {\n",
" padding: 0;\n",
" margin: 0;\n",
" display: grid;\n",
" grid-template-columns: 125px auto;\n",
"}\n",
"\n",
".xr-attrs dt,\n",
".xr-attrs dd {\n",
" padding: 0;\n",
" margin: 0;\n",
" float: left;\n",
" padding-right: 10px;\n",
" width: auto;\n",
"}\n",
"\n",
".xr-attrs dt {\n",
" font-weight: normal;\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-attrs dt:hover span {\n",
" display: inline-block;\n",
" background: var(--xr-background-color);\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-attrs dd {\n",
" grid-column: 2;\n",
" white-space: pre-wrap;\n",
" word-break: break-all;\n",
"}\n",
"\n",
".xr-icon-database,\n",
".xr-icon-file-text2,\n",
".xr-no-icon {\n",
" display: inline-block;\n",
" vertical-align: middle;\n",
" width: 1em;\n",
" height: 1.5em !important;\n",
" stroke-width: 0;\n",
" stroke: currentColor;\n",
" fill: currentColor;\n",
"}\n",
"</style><pre class='xr-text-repr-fallback'>&lt;xarray.Dataset&gt; Size: 2GB\n",
"Dimensions: (time: 3, y: 8874, x: 9902)\n",
"Coordinates:\n",
" * time (time) datetime64[ns] 24B 2023-09-01T22:46:18.500000 ... 202...\n",
" * y (y) float64 71kB 1.106e+06 1.106e+06 ... 1.017e+06 1.017e+06\n",
" * x (x) float64 79kB 5.548e+05 5.548e+05 ... 6.538e+05 6.538e+05\n",
" spatial_ref int32 4B 32648\n",
"Data variables:\n",
" vv (time, y, x) float32 1GB dask.array&lt;chunksize=(1, 2048, 2048), meta=np.ndarray&gt;\n",
" vh (time, y, x) float32 1GB dask.array&lt;chunksize=(1, 2048, 2048), meta=np.ndarray&gt;\n",
"Attributes:\n",
" crs: EPSG:32648\n",
" grid_mapping: spatial_ref</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-2b483c75-694e-433d-b8ac-b002d2a6704c' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-2b483c75-694e-433d-b8ac-b002d2a6704c' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>time</span>: 3</li><li><span class='xr-has-index'>y</span>: 8874</li><li><span class='xr-has-index'>x</span>: 9902</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-6b1ee46a-06b6-4abd-b2c3-84cbd840082d' class='xr-section-summary-in' type='checkbox' checked><label for='section-6b1ee46a-06b6-4abd-b2c3-84cbd840082d' class='xr-section-summary' >Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time</span></div><div class='xr-var-dims'>(time)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>2023-09-01T22:46:18.500000 ... 2...</div><input id='attrs-296c9e31-1850-441a-a1c6-adc843ce3793' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-296c9e31-1850-441a-a1c6-adc843ce3793' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-294d981d-edae-4092-8c3c-4c462ab105f1' class='xr-var-data-in' type='checkbox'><label for='data-294d981d-edae-4092-8c3c-4c462ab105f1' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>seconds since 1970-01-01 00:00:00</dd></dl></div><div class='xr-var-data'><pre>array([&#x27;2023-09-01T22:46:18.500000000&#x27;, &#x27;2023-09-13T22:46:18.500000000&#x27;,\n",
" &#x27;2023-09-25T22:46:19.500000000&#x27;], dtype=&#x27;datetime64[ns]&#x27;)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>y</span></div><div class='xr-var-dims'>(y)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>1.106e+06 1.106e+06 ... 1.017e+06</div><input id='attrs-1f44bbc7-87d5-40c7-bcbf-420c73b3cbcd' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-1f44bbc7-87d5-40c7-bcbf-420c73b3cbcd' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-32f5910d-0603-488f-a2ea-5cadecb10e40' class='xr-var-data-in' type='checkbox'><label for='data-32f5910d-0603-488f-a2ea-5cadecb10e40' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>metre</dd><dt><span>resolution :</span></dt><dd>-10.0</dd><dt><span>crs :</span></dt><dd>EPSG:32648</dd></dl></div><div class='xr-var-data'><pre>array([1105735., 1105725., 1105715., ..., 1017025., 1017015., 1017005.])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>x</span></div><div class='xr-var-dims'>(x)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>5.548e+05 5.548e+05 ... 6.538e+05</div><input id='attrs-923f4f21-569e-46d4-b1b5-395dc34f0521' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-923f4f21-569e-46d4-b1b5-395dc34f0521' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-3af90b48-2b33-4c38-b16a-ada4d336f0bb' class='xr-var-data-in' type='checkbox'><label for='data-3af90b48-2b33-4c38-b16a-ada4d336f0bb' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>metre</dd><dt><span>resolution :</span></dt><dd>10.0</dd><dt><span>crs :</span></dt><dd>EPSG:32648</dd></dl></div><div class='xr-var-data'><pre>array([554795., 554805., 554815., ..., 653785., 653795., 653805.])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>spatial_ref</span></div><div class='xr-var-dims'>()</div><div class='xr-var-dtype'>int32</div><div class='xr-var-preview xr-preview'>32648</div><input id='attrs-22ea982b-61a6-4e37-b26f-1aff6a0d833b' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-22ea982b-61a6-4e37-b26f-1aff6a0d833b' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-0fef845d-2e75-43ac-a625-6193cdfd69c3' class='xr-var-data-in' type='checkbox'><label for='data-0fef845d-2e75-43ac-a625-6193cdfd69c3' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>spatial_ref :</span></dt><dd>PROJCS[&quot;WGS 84 / UTM zone 48N&quot;,GEOGCS[&quot;WGS 84&quot;,DATUM[&quot;WGS_1984&quot;,SPHEROID[&quot;WGS 84&quot;,6378137,298.257223563,AUTHORITY[&quot;EPSG&quot;,&quot;7030&quot;]],AUTHORITY[&quot;EPSG&quot;,&quot;6326&quot;]],PRIMEM[&quot;Greenwich&quot;,0,AUTHORITY[&quot;EPSG&quot;,&quot;8901&quot;]],UNIT[&quot;degree&quot;,0.0174532925199433,AUTHORITY[&quot;EPSG&quot;,&quot;9122&quot;]],AUTHORITY[&quot;EPSG&quot;,&quot;4326&quot;]],PROJECTION[&quot;Transverse_Mercator&quot;],PARAMETER[&quot;latitude_of_origin&quot;,0],PARAMETER[&quot;central_meridian&quot;,105],PARAMETER[&quot;scale_factor&quot;,0.9996],PARAMETER[&quot;false_easting&quot;,500000],PARAMETER[&quot;false_northing&quot;,0],UNIT[&quot;metre&quot;,1,AUTHORITY[&quot;EPSG&quot;,&quot;9001&quot;]],AXIS[&quot;Easting&quot;,EAST],AXIS[&quot;Northing&quot;,NORTH],AUTHORITY[&quot;EPSG&quot;,&quot;32648&quot;]]</dd><dt><span>grid_mapping_name :</span></dt><dd>transverse_mercator</dd></dl></div><div class='xr-var-data'><pre>array(32648, dtype=int32)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-a446ca65-0a1d-46e1-9b55-f7f7f1ba57a1' class='xr-section-summary-in' type='checkbox' checked><label for='section-a446ca65-0a1d-46e1-9b55-f7f7f1ba57a1' class='xr-section-summary' >Data variables: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>vv</span></div><div class='xr-var-dims'>(time, y, x)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(1, 2048, 2048), meta=np.ndarray&gt;</div><input id='attrs-5f485b44-3956-4683-9b26-ec43559550dd' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-5f485b44-3956-4683-9b26-ec43559550dd' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-4ef4ef6a-3493-4322-a2d3-1279cb8c1a68' class='xr-var-data-in' type='checkbox'><label for='data-4ef4ef6a-3493-4322-a2d3-1279cb8c1a68' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>intensity</dd><dt><span>nodata :</span></dt><dd>nan</dd><dt><span>crs :</span></dt><dd>EPSG:32648</dd><dt><span>grid_mapping :</span></dt><dd>spatial_ref</dd></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table style=\"border-collapse: collapse;\">\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 0.98 GiB </td>\n",
" <td> 16.00 MiB </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (3, 8874, 9902) </td>\n",
" <td> (1, 2048, 2048) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Dask graph </th>\n",
" <td colspan=\"2\"> 75 chunks in 1 graph layer </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Data type </th>\n",
" <td colspan=\"2\"> float32 numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"194\" height=\"172\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"24\" y2=\"14\" style=\"stroke-width:2\" />\n",
" <line x1=\"10\" y1=\"24\" x2=\"24\" y2=\"39\" />\n",
" <line x1=\"10\" y1=\"49\" x2=\"24\" y2=\"64\" />\n",
" <line x1=\"10\" y1=\"74\" x2=\"24\" y2=\"89\" />\n",
" <line x1=\"10\" y1=\"99\" x2=\"24\" y2=\"114\" />\n",
" <line x1=\"10\" y1=\"107\" x2=\"24\" y2=\"122\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"107\" style=\"stroke-width:2\" />\n",
" <line x1=\"14\" y1=\"4\" x2=\"14\" y2=\"112\" />\n",
" <line x1=\"19\" y1=\"9\" x2=\"19\" y2=\"117\" />\n",
" <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"122\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 24.9485979497544,14.948597949754403 24.9485979497544,122.49050867486044 10.0,107.54191072510604\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"130\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"14\" y1=\"4\" x2=\"134\" y2=\"4\" />\n",
" <line x1=\"19\" y1=\"9\" x2=\"139\" y2=\"9\" />\n",
" <line x1=\"24\" y1=\"14\" x2=\"144\" y2=\"14\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"24\" y2=\"14\" style=\"stroke-width:2\" />\n",
" <line x1=\"34\" y1=\"0\" x2=\"49\" y2=\"14\" />\n",
" <line x1=\"59\" y1=\"0\" x2=\"74\" y2=\"14\" />\n",
" <line x1=\"84\" y1=\"0\" x2=\"99\" y2=\"14\" />\n",
" <line x1=\"109\" y1=\"0\" x2=\"124\" y2=\"14\" />\n",
" <line x1=\"130\" y1=\"0\" x2=\"144\" y2=\"14\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 130.0,0.0 144.9485979497544,14.948597949754403 24.9485979497544,14.948597949754403\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"24\" y1=\"14\" x2=\"144\" y2=\"14\" style=\"stroke-width:2\" />\n",
" <line x1=\"24\" y1=\"39\" x2=\"144\" y2=\"39\" />\n",
" <line x1=\"24\" y1=\"64\" x2=\"144\" y2=\"64\" />\n",
" <line x1=\"24\" y1=\"89\" x2=\"144\" y2=\"89\" />\n",
" <line x1=\"24\" y1=\"114\" x2=\"144\" y2=\"114\" />\n",
" <line x1=\"24\" y1=\"122\" x2=\"144\" y2=\"122\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"122\" style=\"stroke-width:2\" />\n",
" <line x1=\"49\" y1=\"14\" x2=\"49\" y2=\"122\" />\n",
" <line x1=\"74\" y1=\"14\" x2=\"74\" y2=\"122\" />\n",
" <line x1=\"99\" y1=\"14\" x2=\"99\" y2=\"122\" />\n",
" <line x1=\"124\" y1=\"14\" x2=\"124\" y2=\"122\" />\n",
" <line x1=\"144\" y1=\"14\" x2=\"144\" y2=\"122\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"24.9485979497544,14.948597949754403 144.9485979497544,14.948597949754403 144.9485979497544,122.49050867486044 24.9485979497544,122.49050867486044\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"84.948598\" y=\"142.490509\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >9902</text>\n",
" <text x=\"164.948598\" y=\"68.719553\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,164.948598,68.719553)\">8874</text>\n",
" <text x=\"7.474299\" y=\"135.016210\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,7.474299,135.016210)\">3</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>vh</span></div><div class='xr-var-dims'>(time, y, x)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(1, 2048, 2048), meta=np.ndarray&gt;</div><input id='attrs-3e82f8cb-b661-478f-8ff1-d01e432f5f94' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-3e82f8cb-b661-478f-8ff1-d01e432f5f94' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-4625a6d1-7e26-4f56-9a21-f4b9c39ed64c' class='xr-var-data-in' type='checkbox'><label for='data-4625a6d1-7e26-4f56-9a21-f4b9c39ed64c' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>intensity</dd><dt><span>nodata :</span></dt><dd>nan</dd><dt><span>crs :</span></dt><dd>EPSG:32648</dd><dt><span>grid_mapping :</span></dt><dd>spatial_ref</dd></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table style=\"border-collapse: collapse;\">\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 0.98 GiB </td>\n",
" <td> 16.00 MiB </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (3, 8874, 9902) </td>\n",
" <td> (1, 2048, 2048) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Dask graph </th>\n",
" <td colspan=\"2\"> 75 chunks in 1 graph layer </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Data type </th>\n",
" <td colspan=\"2\"> float32 numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"194\" height=\"172\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"24\" y2=\"14\" style=\"stroke-width:2\" />\n",
" <line x1=\"10\" y1=\"24\" x2=\"24\" y2=\"39\" />\n",
" <line x1=\"10\" y1=\"49\" x2=\"24\" y2=\"64\" />\n",
" <line x1=\"10\" y1=\"74\" x2=\"24\" y2=\"89\" />\n",
" <line x1=\"10\" y1=\"99\" x2=\"24\" y2=\"114\" />\n",
" <line x1=\"10\" y1=\"107\" x2=\"24\" y2=\"122\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"107\" style=\"stroke-width:2\" />\n",
" <line x1=\"14\" y1=\"4\" x2=\"14\" y2=\"112\" />\n",
" <line x1=\"19\" y1=\"9\" x2=\"19\" y2=\"117\" />\n",
" <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"122\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 24.9485979497544,14.948597949754403 24.9485979497544,122.49050867486044 10.0,107.54191072510604\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"130\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"14\" y1=\"4\" x2=\"134\" y2=\"4\" />\n",
" <line x1=\"19\" y1=\"9\" x2=\"139\" y2=\"9\" />\n",
" <line x1=\"24\" y1=\"14\" x2=\"144\" y2=\"14\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"24\" y2=\"14\" style=\"stroke-width:2\" />\n",
" <line x1=\"34\" y1=\"0\" x2=\"49\" y2=\"14\" />\n",
" <line x1=\"59\" y1=\"0\" x2=\"74\" y2=\"14\" />\n",
" <line x1=\"84\" y1=\"0\" x2=\"99\" y2=\"14\" />\n",
" <line x1=\"109\" y1=\"0\" x2=\"124\" y2=\"14\" />\n",
" <line x1=\"130\" y1=\"0\" x2=\"144\" y2=\"14\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 130.0,0.0 144.9485979497544,14.948597949754403 24.9485979497544,14.948597949754403\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"24\" y1=\"14\" x2=\"144\" y2=\"14\" style=\"stroke-width:2\" />\n",
" <line x1=\"24\" y1=\"39\" x2=\"144\" y2=\"39\" />\n",
" <line x1=\"24\" y1=\"64\" x2=\"144\" y2=\"64\" />\n",
" <line x1=\"24\" y1=\"89\" x2=\"144\" y2=\"89\" />\n",
" <line x1=\"24\" y1=\"114\" x2=\"144\" y2=\"114\" />\n",
" <line x1=\"24\" y1=\"122\" x2=\"144\" y2=\"122\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"122\" style=\"stroke-width:2\" />\n",
" <line x1=\"49\" y1=\"14\" x2=\"49\" y2=\"122\" />\n",
" <line x1=\"74\" y1=\"14\" x2=\"74\" y2=\"122\" />\n",
" <line x1=\"99\" y1=\"14\" x2=\"99\" y2=\"122\" />\n",
" <line x1=\"124\" y1=\"14\" x2=\"124\" y2=\"122\" />\n",
" <line x1=\"144\" y1=\"14\" x2=\"144\" y2=\"122\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"24.9485979497544,14.948597949754403 144.9485979497544,14.948597949754403 144.9485979497544,122.49050867486044 24.9485979497544,122.49050867486044\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"84.948598\" y=\"142.490509\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >9902</text>\n",
" <text x=\"164.948598\" y=\"68.719553\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,164.948598,68.719553)\">8874</text>\n",
" <text x=\"7.474299\" y=\"135.016210\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,7.474299,135.016210)\">3</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li></ul></div></li><li class='xr-section-item'><input id='section-ebe13939-d455-48d6-ae3d-d3b11a39b911' class='xr-section-summary-in' type='checkbox' ><label for='section-ebe13939-d455-48d6-ae3d-d3b11a39b911' class='xr-section-summary' >Indexes: <span>(3)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-index-name'><div>time</div></div><div class='xr-index-preview'>PandasIndex</div><input type='checkbox' disabled/><label></label><input id='index-40858478-2796-4413-8c72-215cf73bbbae' class='xr-index-data-in' type='checkbox'/><label for='index-40858478-2796-4413-8c72-215cf73bbbae' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(DatetimeIndex([&#x27;2023-09-01 22:46:18.500000&#x27;, &#x27;2023-09-13 22:46:18.500000&#x27;,\n",
" &#x27;2023-09-25 22:46:19.500000&#x27;],\n",
" dtype=&#x27;datetime64[ns]&#x27;, name=&#x27;time&#x27;, freq=None))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>y</div></div><div class='xr-index-preview'>PandasIndex</div><input type='checkbox' disabled/><label></label><input id='index-48a24e42-fa8c-4310-9342-17e9d29b9b3e' class='xr-index-data-in' type='checkbox'/><label for='index-48a24e42-fa8c-4310-9342-17e9d29b9b3e' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Index([1105735.0, 1105725.0, 1105715.0, 1105705.0, 1105695.0, 1105685.0,\n",
" 1105675.0, 1105665.0, 1105655.0, 1105645.0,\n",
" ...\n",
" 1017095.0, 1017085.0, 1017075.0, 1017065.0, 1017055.0, 1017045.0,\n",
" 1017035.0, 1017025.0, 1017015.0, 1017005.0],\n",
" dtype=&#x27;float64&#x27;, name=&#x27;y&#x27;, length=8874))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>x</div></div><div class='xr-index-preview'>PandasIndex</div><input type='checkbox' disabled/><label></label><input id='index-8d71422c-ac45-4d97-b005-743ffde4de52' class='xr-index-data-in' type='checkbox'/><label for='index-8d71422c-ac45-4d97-b005-743ffde4de52' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Index([554795.0, 554805.0, 554815.0, 554825.0, 554835.0, 554845.0, 554855.0,\n",
" 554865.0, 554875.0, 554885.0,\n",
" ...\n",
" 653715.0, 653725.0, 653735.0, 653745.0, 653755.0, 653765.0, 653775.0,\n",
" 653785.0, 653795.0, 653805.0],\n",
" dtype=&#x27;float64&#x27;, name=&#x27;x&#x27;, length=9902))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-9e0e1779-f3f6-4316-a7e2-0282427ef964' class='xr-section-summary-in' type='checkbox' checked><label for='section-9e0e1779-f3f6-4316-a7e2-0282427ef964' class='xr-section-summary' >Attributes: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>crs :</span></dt><dd>EPSG:32648</dd><dt><span>grid_mapping :</span></dt><dd>spatial_ref</dd></dl></div></li></ul></div></div>"
],
"text/plain": [
"<xarray.Dataset> Size: 2GB\n",
"Dimensions: (time: 3, y: 8874, x: 9902)\n",
"Coordinates:\n",
" * time (time) datetime64[ns] 24B 2023-09-01T22:46:18.500000 ... 202...\n",
" * y (y) float64 71kB 1.106e+06 1.106e+06 ... 1.017e+06 1.017e+06\n",
" * x (x) float64 79kB 5.548e+05 5.548e+05 ... 6.538e+05 6.538e+05\n",
" spatial_ref int32 4B 32648\n",
"Data variables:\n",
" vv (time, y, x) float32 1GB dask.array<chunksize=(1, 2048, 2048), meta=np.ndarray>\n",
" vh (time, y, x) float32 1GB dask.array<chunksize=(1, 2048, 2048), meta=np.ndarray>\n",
"Attributes:\n",
" crs: EPSG:32648\n",
" grid_mapping: spatial_ref"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"No datasets require offset correction\n",
"The valid_data_mask and scale (no offset) have been applied to the reflectance bands\n"
]
},
{
"data": {
"text/html": [
"<h4>Dataset size: 8.84 GB</h4>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
"<defs>\n",
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"</symbol>\n",
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"</symbol>\n",
"</defs>\n",
"</svg>\n",
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
" *\n",
" */\n",
"\n",
":root {\n",
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
" --xr-background-color: var(--jp-layout-color0, white);\n",
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
"}\n",
"\n",
"html[theme=\"dark\"],\n",
"html[data-theme=\"dark\"],\n",
"body[data-theme=\"dark\"],\n",
"body.vscode-dark {\n",
" --xr-font-color0: rgba(255, 255, 255, 1);\n",
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n",
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n",
" --xr-border-color: #1f1f1f;\n",
" --xr-disabled-color: #515151;\n",
" --xr-background-color: #111111;\n",
" --xr-background-color-row-even: #111111;\n",
" --xr-background-color-row-odd: #313131;\n",
"}\n",
"\n",
".xr-wrap {\n",
" display: block !important;\n",
" min-width: 300px;\n",
" max-width: 700px;\n",
"}\n",
"\n",
".xr-text-repr-fallback {\n",
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
" display: none;\n",
"}\n",
"\n",
".xr-header {\n",
" padding-top: 6px;\n",
" padding-bottom: 6px;\n",
" margin-bottom: 4px;\n",
" border-bottom: solid 1px var(--xr-border-color);\n",
"}\n",
"\n",
".xr-header > div,\n",
".xr-header > ul {\n",
" display: inline;\n",
" margin-top: 0;\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-obj-type,\n",
".xr-array-name {\n",
" margin-left: 2px;\n",
" margin-right: 10px;\n",
"}\n",
"\n",
".xr-obj-type {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-sections {\n",
" padding-left: 0 !important;\n",
" display: grid;\n",
" grid-template-columns: 150px auto auto 1fr 0 20px 0 20px;\n",
"}\n",
"\n",
".xr-section-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-section-item input {\n",
" display: inline-block;\n",
" opacity: 0;\n",
" height: 0;\n",
"}\n",
"\n",
".xr-section-item input + label {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label {\n",
" cursor: pointer;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-item input:focus + label {\n",
" border: 2px solid var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label:hover {\n",
" color: var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-summary {\n",
" grid-column: 1;\n",
" color: var(--xr-font-color2);\n",
" font-weight: 500;\n",
"}\n",
"\n",
".xr-section-summary > span {\n",
" display: inline-block;\n",
" padding-left: 0.5em;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-summary-in + label:before {\n",
" display: inline-block;\n",
" content: \"►\";\n",
" font-size: 11px;\n",
" width: 15px;\n",
" text-align: center;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label:before {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label:before {\n",
" content: \"▼\";\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label > span {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-summary,\n",
".xr-section-inline-details {\n",
" padding-top: 4px;\n",
" padding-bottom: 4px;\n",
"}\n",
"\n",
".xr-section-inline-details {\n",
" grid-column: 2 / -1;\n",
"}\n",
"\n",
".xr-section-details {\n",
" display: none;\n",
" grid-column: 1 / -1;\n",
" margin-bottom: 5px;\n",
"}\n",
"\n",
".xr-section-summary-in:checked ~ .xr-section-details {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-array-wrap {\n",
" grid-column: 1 / -1;\n",
" display: grid;\n",
" grid-template-columns: 20px auto;\n",
"}\n",
"\n",
".xr-array-wrap > label {\n",
" grid-column: 1;\n",
" vertical-align: top;\n",
"}\n",
"\n",
".xr-preview {\n",
" color: var(--xr-font-color3);\n",
"}\n",
"\n",
".xr-array-preview,\n",
".xr-array-data {\n",
" padding: 0 5px !important;\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-array-data,\n",
".xr-array-in:checked ~ .xr-array-preview {\n",
" display: none;\n",
"}\n",
"\n",
".xr-array-in:checked ~ .xr-array-data,\n",
".xr-array-preview {\n",
" display: inline-block;\n",
"}\n",
"\n",
".xr-dim-list {\n",
" display: inline-block !important;\n",
" list-style: none;\n",
" padding: 0 !important;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list li {\n",
" display: inline-block;\n",
" padding: 0;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list:before {\n",
" content: \"(\";\n",
"}\n",
"\n",
".xr-dim-list:after {\n",
" content: \")\";\n",
"}\n",
"\n",
".xr-dim-list li:not(:last-child):after {\n",
" content: \",\";\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-has-index {\n",
" font-weight: bold;\n",
"}\n",
"\n",
".xr-var-list,\n",
".xr-var-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-var-item > div,\n",
".xr-var-item label,\n",
".xr-var-item > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-even);\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-var-item > .xr-var-name:hover span {\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-var-list > li:nth-child(odd) > div,\n",
".xr-var-list > li:nth-child(odd) > label,\n",
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-odd);\n",
"}\n",
"\n",
".xr-var-name {\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-var-dims {\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-var-dtype {\n",
" grid-column: 3;\n",
" text-align: right;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-preview {\n",
" grid-column: 4;\n",
"}\n",
"\n",
".xr-index-preview {\n",
" grid-column: 2 / 5;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-name,\n",
".xr-var-dims,\n",
".xr-var-dtype,\n",
".xr-preview,\n",
".xr-attrs dt {\n",
" white-space: nowrap;\n",
" overflow: hidden;\n",
" text-overflow: ellipsis;\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-var-name:hover,\n",
".xr-var-dims:hover,\n",
".xr-var-dtype:hover,\n",
".xr-attrs dt:hover {\n",
" overflow: visible;\n",
" width: auto;\n",
" z-index: 1;\n",
"}\n",
"\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" display: none;\n",
" background-color: var(--xr-background-color) !important;\n",
" padding-bottom: 5px !important;\n",
"}\n",
"\n",
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
".xr-var-data-in:checked ~ .xr-var-data,\n",
".xr-index-data-in:checked ~ .xr-index-data {\n",
" display: block;\n",
"}\n",
"\n",
".xr-var-data > table {\n",
" float: right;\n",
"}\n",
"\n",
".xr-var-name span,\n",
".xr-var-data,\n",
".xr-index-name div,\n",
".xr-index-data,\n",
".xr-attrs {\n",
" padding-left: 25px !important;\n",
"}\n",
"\n",
".xr-attrs,\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" grid-column: 1 / -1;\n",
"}\n",
"\n",
"dl.xr-attrs {\n",
" padding: 0;\n",
" margin: 0;\n",
" display: grid;\n",
" grid-template-columns: 125px auto;\n",
"}\n",
"\n",
".xr-attrs dt,\n",
".xr-attrs dd {\n",
" padding: 0;\n",
" margin: 0;\n",
" float: left;\n",
" padding-right: 10px;\n",
" width: auto;\n",
"}\n",
"\n",
".xr-attrs dt {\n",
" font-weight: normal;\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-attrs dt:hover span {\n",
" display: inline-block;\n",
" background: var(--xr-background-color);\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-attrs dd {\n",
" grid-column: 2;\n",
" white-space: pre-wrap;\n",
" word-break: break-all;\n",
"}\n",
"\n",
".xr-icon-database,\n",
".xr-icon-file-text2,\n",
".xr-no-icon {\n",
" display: inline-block;\n",
" vertical-align: middle;\n",
" width: 1em;\n",
" height: 1.5em !important;\n",
" stroke-width: 0;\n",
" stroke: currentColor;\n",
" fill: currentColor;\n",
"}\n",
"</style><pre class='xr-text-repr-fallback'>&lt;xarray.Dataset&gt; Size: 9GB\n",
"Dimensions: (time: 12, y: 8874, x: 9902)\n",
"Coordinates:\n",
" * time (time) datetime64[ns] 96B 2023-09-02T03:35:16.627000 ... 202...\n",
" * y (y) float64 71kB 1.106e+06 1.106e+06 ... 1.017e+06 1.017e+06\n",
" * x (x) float64 79kB 5.548e+05 5.548e+05 ... 6.538e+05 6.538e+05\n",
" spatial_ref int32 4B 32648\n",
"Data variables:\n",
" red (time, y, x) float32 4GB dask.array&lt;chunksize=(1, 2048, 2048), meta=np.ndarray&gt;\n",
" nir (time, y, x) float32 4GB dask.array&lt;chunksize=(1, 2048, 2048), meta=np.ndarray&gt;\n",
" scl (time, y, x) uint8 1GB dask.array&lt;chunksize=(1, 2048, 2048), meta=np.ndarray&gt;\n",
"Attributes:\n",
" crs: EPSG:32648\n",
" grid_mapping: spatial_ref</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-94484c3c-9b1e-4b86-8ac2-ec178c2d566a' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-94484c3c-9b1e-4b86-8ac2-ec178c2d566a' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>time</span>: 12</li><li><span class='xr-has-index'>y</span>: 8874</li><li><span class='xr-has-index'>x</span>: 9902</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-f693cce6-8a0b-4acb-b2dc-6e5238f8b8eb' class='xr-section-summary-in' type='checkbox' checked><label for='section-f693cce6-8a0b-4acb-b2dc-6e5238f8b8eb' class='xr-section-summary' >Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time</span></div><div class='xr-var-dims'>(time)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>2023-09-02T03:35:16.627000 ... 2...</div><input id='attrs-962dfa44-fc50-4e68-aff5-f5a5b9b9df70' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-962dfa44-fc50-4e68-aff5-f5a5b9b9df70' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-b49b18f1-57da-4b37-9cae-4da2c7651eb0' class='xr-var-data-in' type='checkbox'><label for='data-b49b18f1-57da-4b37-9cae-4da2c7651eb0' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>seconds since 1970-01-01 00:00:00</dd></dl></div><div class='xr-var-data'><pre>array([&#x27;2023-09-02T03:35:16.627000000&#x27;, &#x27;2023-09-04T03:25:21.856000000&#x27;,\n",
" &#x27;2023-09-07T03:35:17.134000000&#x27;, &#x27;2023-09-09T03:25:20.648000000&#x27;,\n",
" &#x27;2023-09-12T03:35:15.326000000&#x27;, &#x27;2023-09-14T03:25:35.755000000&#x27;,\n",
" &#x27;2023-09-17T03:35:15.269000000&#x27;, &#x27;2023-09-19T03:25:24.089000000&#x27;,\n",
" &#x27;2023-09-22T03:35:15.439000000&#x27;, &#x27;2023-09-24T03:25:18.524000000&#x27;,\n",
" &#x27;2023-09-27T03:35:14.112000000&#x27;, &#x27;2023-09-29T03:25:19.046000000&#x27;],\n",
" dtype=&#x27;datetime64[ns]&#x27;)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>y</span></div><div class='xr-var-dims'>(y)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>1.106e+06 1.106e+06 ... 1.017e+06</div><input id='attrs-316e8be1-7601-4d6c-8837-976dd4289575' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-316e8be1-7601-4d6c-8837-976dd4289575' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-307723a3-e5f2-42de-9bdc-3418a5c76fa6' class='xr-var-data-in' type='checkbox'><label for='data-307723a3-e5f2-42de-9bdc-3418a5c76fa6' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>metre</dd><dt><span>resolution :</span></dt><dd>-10.0</dd><dt><span>crs :</span></dt><dd>EPSG:32648</dd></dl></div><div class='xr-var-data'><pre>array([1105735., 1105725., 1105715., ..., 1017025., 1017015., 1017005.])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>x</span></div><div class='xr-var-dims'>(x)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>5.548e+05 5.548e+05 ... 6.538e+05</div><input id='attrs-0b1df866-0130-49f8-b98a-53efadcd1ded' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-0b1df866-0130-49f8-b98a-53efadcd1ded' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-8d3292ad-a1f2-4c44-8a0e-524228bf524a' class='xr-var-data-in' type='checkbox'><label for='data-8d3292ad-a1f2-4c44-8a0e-524228bf524a' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>metre</dd><dt><span>resolution :</span></dt><dd>10.0</dd><dt><span>crs :</span></dt><dd>EPSG:32648</dd></dl></div><div class='xr-var-data'><pre>array([554795., 554805., 554815., ..., 653785., 653795., 653805.])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>spatial_ref</span></div><div class='xr-var-dims'>()</div><div class='xr-var-dtype'>int32</div><div class='xr-var-preview xr-preview'>32648</div><input id='attrs-dae0b881-715b-44f7-9e8c-637d9d0c5c46' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-dae0b881-715b-44f7-9e8c-637d9d0c5c46' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-6f5f8400-f843-4211-9895-03244787b9de' class='xr-var-data-in' type='checkbox'><label for='data-6f5f8400-f843-4211-9895-03244787b9de' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>spatial_ref :</span></dt><dd>PROJCS[&quot;WGS 84 / UTM zone 48N&quot;,GEOGCS[&quot;WGS 84&quot;,DATUM[&quot;WGS_1984&quot;,SPHEROID[&quot;WGS 84&quot;,6378137,298.257223563,AUTHORITY[&quot;EPSG&quot;,&quot;7030&quot;]],AUTHORITY[&quot;EPSG&quot;,&quot;6326&quot;]],PRIMEM[&quot;Greenwich&quot;,0,AUTHORITY[&quot;EPSG&quot;,&quot;8901&quot;]],UNIT[&quot;degree&quot;,0.0174532925199433,AUTHORITY[&quot;EPSG&quot;,&quot;9122&quot;]],AUTHORITY[&quot;EPSG&quot;,&quot;4326&quot;]],PROJECTION[&quot;Transverse_Mercator&quot;],PARAMETER[&quot;latitude_of_origin&quot;,0],PARAMETER[&quot;central_meridian&quot;,105],PARAMETER[&quot;scale_factor&quot;,0.9996],PARAMETER[&quot;false_easting&quot;,500000],PARAMETER[&quot;false_northing&quot;,0],UNIT[&quot;metre&quot;,1,AUTHORITY[&quot;EPSG&quot;,&quot;9001&quot;]],AXIS[&quot;Easting&quot;,EAST],AXIS[&quot;Northing&quot;,NORTH],AUTHORITY[&quot;EPSG&quot;,&quot;32648&quot;]]</dd><dt><span>grid_mapping_name :</span></dt><dd>transverse_mercator</dd></dl></div><div class='xr-var-data'><pre>array(32648, dtype=int32)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-0b5c1830-860a-47e6-88d8-49fa98bcd361' class='xr-section-summary-in' type='checkbox' checked><label for='section-0b5c1830-860a-47e6-88d8-49fa98bcd361' class='xr-section-summary' >Data variables: <span>(3)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>red</span></div><div class='xr-var-dims'>(time, y, x)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(1, 2048, 2048), meta=np.ndarray&gt;</div><input id='attrs-1046cb3b-2f63-4732-8752-90e340e2d8f8' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-1046cb3b-2f63-4732-8752-90e340e2d8f8' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-69cc0779-0360-49bf-b23c-b154ed2aa6df' class='xr-var-data-in' type='checkbox'><label for='data-69cc0779-0360-49bf-b23c-b154ed2aa6df' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table style=\"border-collapse: collapse;\">\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 3.93 GiB </td>\n",
" <td> 16.00 MiB </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (12, 8874, 9902) </td>\n",
" <td> (1, 2048, 2048) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Dask graph </th>\n",
" <td colspan=\"2\"> 300 chunks in 8 graph layers </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Data type </th>\n",
" <td colspan=\"2\"> float32 numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"194\" height=\"172\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"24\" y2=\"14\" style=\"stroke-width:2\" />\n",
" <line x1=\"10\" y1=\"24\" x2=\"24\" y2=\"39\" />\n",
" <line x1=\"10\" y1=\"49\" x2=\"24\" y2=\"64\" />\n",
" <line x1=\"10\" y1=\"74\" x2=\"24\" y2=\"89\" />\n",
" <line x1=\"10\" y1=\"99\" x2=\"24\" y2=\"114\" />\n",
" <line x1=\"10\" y1=\"107\" x2=\"24\" y2=\"122\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"107\" style=\"stroke-width:2\" />\n",
" <line x1=\"11\" y1=\"1\" x2=\"11\" y2=\"108\" />\n",
" <line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"110\" />\n",
" <line x1=\"13\" y1=\"3\" x2=\"13\" y2=\"111\" />\n",
" <line x1=\"14\" y1=\"4\" x2=\"14\" y2=\"112\" />\n",
" <line x1=\"16\" y1=\"6\" x2=\"16\" y2=\"113\" />\n",
" <line x1=\"17\" y1=\"7\" x2=\"17\" y2=\"115\" />\n",
" <line x1=\"18\" y1=\"8\" x2=\"18\" y2=\"116\" />\n",
" <line x1=\"19\" y1=\"9\" x2=\"19\" y2=\"117\" />\n",
" <line x1=\"21\" y1=\"11\" x2=\"21\" y2=\"118\" />\n",
" <line x1=\"22\" y1=\"12\" x2=\"22\" y2=\"119\" />\n",
" <line x1=\"23\" y1=\"13\" x2=\"23\" y2=\"121\" />\n",
" <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"122\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 24.9485979497544,14.948597949754403 24.9485979497544,122.49050867486044 10.0,107.54191072510604\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"130\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"11\" y1=\"1\" x2=\"131\" y2=\"1\" />\n",
" <line x1=\"12\" y1=\"2\" x2=\"132\" y2=\"2\" />\n",
" <line x1=\"13\" y1=\"3\" x2=\"133\" y2=\"3\" />\n",
" <line x1=\"14\" y1=\"4\" x2=\"134\" y2=\"4\" />\n",
" <line x1=\"16\" y1=\"6\" x2=\"136\" y2=\"6\" />\n",
" <line x1=\"17\" y1=\"7\" x2=\"137\" y2=\"7\" />\n",
" <line x1=\"18\" y1=\"8\" x2=\"138\" y2=\"8\" />\n",
" <line x1=\"19\" y1=\"9\" x2=\"139\" y2=\"9\" />\n",
" <line x1=\"21\" y1=\"11\" x2=\"141\" y2=\"11\" />\n",
" <line x1=\"22\" y1=\"12\" x2=\"142\" y2=\"12\" />\n",
" <line x1=\"23\" y1=\"13\" x2=\"143\" y2=\"13\" />\n",
" <line x1=\"24\" y1=\"14\" x2=\"144\" y2=\"14\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"24\" y2=\"14\" style=\"stroke-width:2\" />\n",
" <line x1=\"34\" y1=\"0\" x2=\"49\" y2=\"14\" />\n",
" <line x1=\"59\" y1=\"0\" x2=\"74\" y2=\"14\" />\n",
" <line x1=\"84\" y1=\"0\" x2=\"99\" y2=\"14\" />\n",
" <line x1=\"109\" y1=\"0\" x2=\"124\" y2=\"14\" />\n",
" <line x1=\"130\" y1=\"0\" x2=\"144\" y2=\"14\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 130.0,0.0 144.9485979497544,14.948597949754403 24.9485979497544,14.948597949754403\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"24\" y1=\"14\" x2=\"144\" y2=\"14\" style=\"stroke-width:2\" />\n",
" <line x1=\"24\" y1=\"39\" x2=\"144\" y2=\"39\" />\n",
" <line x1=\"24\" y1=\"64\" x2=\"144\" y2=\"64\" />\n",
" <line x1=\"24\" y1=\"89\" x2=\"144\" y2=\"89\" />\n",
" <line x1=\"24\" y1=\"114\" x2=\"144\" y2=\"114\" />\n",
" <line x1=\"24\" y1=\"122\" x2=\"144\" y2=\"122\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"122\" style=\"stroke-width:2\" />\n",
" <line x1=\"49\" y1=\"14\" x2=\"49\" y2=\"122\" />\n",
" <line x1=\"74\" y1=\"14\" x2=\"74\" y2=\"122\" />\n",
" <line x1=\"99\" y1=\"14\" x2=\"99\" y2=\"122\" />\n",
" <line x1=\"124\" y1=\"14\" x2=\"124\" y2=\"122\" />\n",
" <line x1=\"144\" y1=\"14\" x2=\"144\" y2=\"122\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"24.9485979497544,14.948597949754403 144.9485979497544,14.948597949754403 144.9485979497544,122.49050867486044 24.9485979497544,122.49050867486044\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"84.948598\" y=\"142.490509\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >9902</text>\n",
" <text x=\"164.948598\" y=\"68.719553\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,164.948598,68.719553)\">8874</text>\n",
" <text x=\"7.474299\" y=\"135.016210\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,7.474299,135.016210)\">12</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>nir</span></div><div class='xr-var-dims'>(time, y, x)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(1, 2048, 2048), meta=np.ndarray&gt;</div><input id='attrs-0fb2e1a1-a345-416e-8935-15b17b9ab7fc' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-0fb2e1a1-a345-416e-8935-15b17b9ab7fc' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-17ded2ed-1367-499f-94bf-c3e1ba53a3ea' class='xr-var-data-in' type='checkbox'><label for='data-17ded2ed-1367-499f-94bf-c3e1ba53a3ea' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table style=\"border-collapse: collapse;\">\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 3.93 GiB </td>\n",
" <td> 16.00 MiB </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (12, 8874, 9902) </td>\n",
" <td> (1, 2048, 2048) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Dask graph </th>\n",
" <td colspan=\"2\"> 300 chunks in 8 graph layers </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Data type </th>\n",
" <td colspan=\"2\"> float32 numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"194\" height=\"172\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"24\" y2=\"14\" style=\"stroke-width:2\" />\n",
" <line x1=\"10\" y1=\"24\" x2=\"24\" y2=\"39\" />\n",
" <line x1=\"10\" y1=\"49\" x2=\"24\" y2=\"64\" />\n",
" <line x1=\"10\" y1=\"74\" x2=\"24\" y2=\"89\" />\n",
" <line x1=\"10\" y1=\"99\" x2=\"24\" y2=\"114\" />\n",
" <line x1=\"10\" y1=\"107\" x2=\"24\" y2=\"122\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"107\" style=\"stroke-width:2\" />\n",
" <line x1=\"11\" y1=\"1\" x2=\"11\" y2=\"108\" />\n",
" <line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"110\" />\n",
" <line x1=\"13\" y1=\"3\" x2=\"13\" y2=\"111\" />\n",
" <line x1=\"14\" y1=\"4\" x2=\"14\" y2=\"112\" />\n",
" <line x1=\"16\" y1=\"6\" x2=\"16\" y2=\"113\" />\n",
" <line x1=\"17\" y1=\"7\" x2=\"17\" y2=\"115\" />\n",
" <line x1=\"18\" y1=\"8\" x2=\"18\" y2=\"116\" />\n",
" <line x1=\"19\" y1=\"9\" x2=\"19\" y2=\"117\" />\n",
" <line x1=\"21\" y1=\"11\" x2=\"21\" y2=\"118\" />\n",
" <line x1=\"22\" y1=\"12\" x2=\"22\" y2=\"119\" />\n",
" <line x1=\"23\" y1=\"13\" x2=\"23\" y2=\"121\" />\n",
" <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"122\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 24.9485979497544,14.948597949754403 24.9485979497544,122.49050867486044 10.0,107.54191072510604\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"130\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"11\" y1=\"1\" x2=\"131\" y2=\"1\" />\n",
" <line x1=\"12\" y1=\"2\" x2=\"132\" y2=\"2\" />\n",
" <line x1=\"13\" y1=\"3\" x2=\"133\" y2=\"3\" />\n",
" <line x1=\"14\" y1=\"4\" x2=\"134\" y2=\"4\" />\n",
" <line x1=\"16\" y1=\"6\" x2=\"136\" y2=\"6\" />\n",
" <line x1=\"17\" y1=\"7\" x2=\"137\" y2=\"7\" />\n",
" <line x1=\"18\" y1=\"8\" x2=\"138\" y2=\"8\" />\n",
" <line x1=\"19\" y1=\"9\" x2=\"139\" y2=\"9\" />\n",
" <line x1=\"21\" y1=\"11\" x2=\"141\" y2=\"11\" />\n",
" <line x1=\"22\" y1=\"12\" x2=\"142\" y2=\"12\" />\n",
" <line x1=\"23\" y1=\"13\" x2=\"143\" y2=\"13\" />\n",
" <line x1=\"24\" y1=\"14\" x2=\"144\" y2=\"14\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"24\" y2=\"14\" style=\"stroke-width:2\" />\n",
" <line x1=\"34\" y1=\"0\" x2=\"49\" y2=\"14\" />\n",
" <line x1=\"59\" y1=\"0\" x2=\"74\" y2=\"14\" />\n",
" <line x1=\"84\" y1=\"0\" x2=\"99\" y2=\"14\" />\n",
" <line x1=\"109\" y1=\"0\" x2=\"124\" y2=\"14\" />\n",
" <line x1=\"130\" y1=\"0\" x2=\"144\" y2=\"14\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 130.0,0.0 144.9485979497544,14.948597949754403 24.9485979497544,14.948597949754403\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"24\" y1=\"14\" x2=\"144\" y2=\"14\" style=\"stroke-width:2\" />\n",
" <line x1=\"24\" y1=\"39\" x2=\"144\" y2=\"39\" />\n",
" <line x1=\"24\" y1=\"64\" x2=\"144\" y2=\"64\" />\n",
" <line x1=\"24\" y1=\"89\" x2=\"144\" y2=\"89\" />\n",
" <line x1=\"24\" y1=\"114\" x2=\"144\" y2=\"114\" />\n",
" <line x1=\"24\" y1=\"122\" x2=\"144\" y2=\"122\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"122\" style=\"stroke-width:2\" />\n",
" <line x1=\"49\" y1=\"14\" x2=\"49\" y2=\"122\" />\n",
" <line x1=\"74\" y1=\"14\" x2=\"74\" y2=\"122\" />\n",
" <line x1=\"99\" y1=\"14\" x2=\"99\" y2=\"122\" />\n",
" <line x1=\"124\" y1=\"14\" x2=\"124\" y2=\"122\" />\n",
" <line x1=\"144\" y1=\"14\" x2=\"144\" y2=\"122\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"24.9485979497544,14.948597949754403 144.9485979497544,14.948597949754403 144.9485979497544,122.49050867486044 24.9485979497544,122.49050867486044\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"84.948598\" y=\"142.490509\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >9902</text>\n",
" <text x=\"164.948598\" y=\"68.719553\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,164.948598,68.719553)\">8874</text>\n",
" <text x=\"7.474299\" y=\"135.016210\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,7.474299,135.016210)\">12</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>scl</span></div><div class='xr-var-dims'>(time, y, x)</div><div class='xr-var-dtype'>uint8</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(1, 2048, 2048), meta=np.ndarray&gt;</div><input id='attrs-99f33769-5eb0-4bb1-bc09-5b121a629ce7' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-99f33769-5eb0-4bb1-bc09-5b121a629ce7' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-5b211549-04e7-41ce-ab75-ba323b6626b0' class='xr-var-data-in' type='checkbox'><label for='data-5b211549-04e7-41ce-ab75-ba323b6626b0' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>1</dd><dt><span>nodata :</span></dt><dd>0</dd><dt><span>flags_definition :</span></dt><dd>{&#x27;qa&#x27;: {&#x27;bits&#x27;: [0, 1, 2, 3, 4, 5, 6, 7], &#x27;values&#x27;: {&#x27;0&#x27;: &#x27;no data&#x27;, &#x27;1&#x27;: &#x27;saturated or defective&#x27;, &#x27;2&#x27;: &#x27;dark area pixels&#x27;, &#x27;3&#x27;: &#x27;cloud shadows&#x27;, &#x27;4&#x27;: &#x27;vegetation&#x27;, &#x27;5&#x27;: &#x27;bare soils&#x27;, &#x27;6&#x27;: &#x27;water&#x27;, &#x27;7&#x27;: &#x27;unclassified&#x27;, &#x27;8&#x27;: &#x27;cloud medium probability&#x27;, &#x27;9&#x27;: &#x27;cloud high probability&#x27;, &#x27;10&#x27;: &#x27;thin cirrus&#x27;, &#x27;11&#x27;: &#x27;snow or ice&#x27;}, &#x27;description&#x27;: &#x27;Sen2Cor Scene Classification&#x27;}}</dd><dt><span>crs :</span></dt><dd>EPSG:32648</dd><dt><span>grid_mapping :</span></dt><dd>spatial_ref</dd></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table style=\"border-collapse: collapse;\">\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 0.98 GiB </td>\n",
" <td> 4.00 MiB </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (12, 8874, 9902) </td>\n",
" <td> (1, 2048, 2048) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Dask graph </th>\n",
" <td colspan=\"2\"> 300 chunks in 1 graph layer </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Data type </th>\n",
" <td colspan=\"2\"> uint8 numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"194\" height=\"172\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"24\" y2=\"14\" style=\"stroke-width:2\" />\n",
" <line x1=\"10\" y1=\"24\" x2=\"24\" y2=\"39\" />\n",
" <line x1=\"10\" y1=\"49\" x2=\"24\" y2=\"64\" />\n",
" <line x1=\"10\" y1=\"74\" x2=\"24\" y2=\"89\" />\n",
" <line x1=\"10\" y1=\"99\" x2=\"24\" y2=\"114\" />\n",
" <line x1=\"10\" y1=\"107\" x2=\"24\" y2=\"122\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"107\" style=\"stroke-width:2\" />\n",
" <line x1=\"11\" y1=\"1\" x2=\"11\" y2=\"108\" />\n",
" <line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"110\" />\n",
" <line x1=\"13\" y1=\"3\" x2=\"13\" y2=\"111\" />\n",
" <line x1=\"14\" y1=\"4\" x2=\"14\" y2=\"112\" />\n",
" <line x1=\"16\" y1=\"6\" x2=\"16\" y2=\"113\" />\n",
" <line x1=\"17\" y1=\"7\" x2=\"17\" y2=\"115\" />\n",
" <line x1=\"18\" y1=\"8\" x2=\"18\" y2=\"116\" />\n",
" <line x1=\"19\" y1=\"9\" x2=\"19\" y2=\"117\" />\n",
" <line x1=\"21\" y1=\"11\" x2=\"21\" y2=\"118\" />\n",
" <line x1=\"22\" y1=\"12\" x2=\"22\" y2=\"119\" />\n",
" <line x1=\"23\" y1=\"13\" x2=\"23\" y2=\"121\" />\n",
" <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"122\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 24.9485979497544,14.948597949754403 24.9485979497544,122.49050867486044 10.0,107.54191072510604\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"130\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"11\" y1=\"1\" x2=\"131\" y2=\"1\" />\n",
" <line x1=\"12\" y1=\"2\" x2=\"132\" y2=\"2\" />\n",
" <line x1=\"13\" y1=\"3\" x2=\"133\" y2=\"3\" />\n",
" <line x1=\"14\" y1=\"4\" x2=\"134\" y2=\"4\" />\n",
" <line x1=\"16\" y1=\"6\" x2=\"136\" y2=\"6\" />\n",
" <line x1=\"17\" y1=\"7\" x2=\"137\" y2=\"7\" />\n",
" <line x1=\"18\" y1=\"8\" x2=\"138\" y2=\"8\" />\n",
" <line x1=\"19\" y1=\"9\" x2=\"139\" y2=\"9\" />\n",
" <line x1=\"21\" y1=\"11\" x2=\"141\" y2=\"11\" />\n",
" <line x1=\"22\" y1=\"12\" x2=\"142\" y2=\"12\" />\n",
" <line x1=\"23\" y1=\"13\" x2=\"143\" y2=\"13\" />\n",
" <line x1=\"24\" y1=\"14\" x2=\"144\" y2=\"14\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"10\" y1=\"0\" x2=\"24\" y2=\"14\" style=\"stroke-width:2\" />\n",
" <line x1=\"34\" y1=\"0\" x2=\"49\" y2=\"14\" />\n",
" <line x1=\"59\" y1=\"0\" x2=\"74\" y2=\"14\" />\n",
" <line x1=\"84\" y1=\"0\" x2=\"99\" y2=\"14\" />\n",
" <line x1=\"109\" y1=\"0\" x2=\"124\" y2=\"14\" />\n",
" <line x1=\"130\" y1=\"0\" x2=\"144\" y2=\"14\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"10.0,0.0 130.0,0.0 144.9485979497544,14.948597949754403 24.9485979497544,14.948597949754403\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"24\" y1=\"14\" x2=\"144\" y2=\"14\" style=\"stroke-width:2\" />\n",
" <line x1=\"24\" y1=\"39\" x2=\"144\" y2=\"39\" />\n",
" <line x1=\"24\" y1=\"64\" x2=\"144\" y2=\"64\" />\n",
" <line x1=\"24\" y1=\"89\" x2=\"144\" y2=\"89\" />\n",
" <line x1=\"24\" y1=\"114\" x2=\"144\" y2=\"114\" />\n",
" <line x1=\"24\" y1=\"122\" x2=\"144\" y2=\"122\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"122\" style=\"stroke-width:2\" />\n",
" <line x1=\"49\" y1=\"14\" x2=\"49\" y2=\"122\" />\n",
" <line x1=\"74\" y1=\"14\" x2=\"74\" y2=\"122\" />\n",
" <line x1=\"99\" y1=\"14\" x2=\"99\" y2=\"122\" />\n",
" <line x1=\"124\" y1=\"14\" x2=\"124\" y2=\"122\" />\n",
" <line x1=\"144\" y1=\"14\" x2=\"144\" y2=\"122\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"24.9485979497544,14.948597949754403 144.9485979497544,14.948597949754403 144.9485979497544,122.49050867486044 24.9485979497544,122.49050867486044\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"84.948598\" y=\"142.490509\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >9902</text>\n",
" <text x=\"164.948598\" y=\"68.719553\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,164.948598,68.719553)\">8874</text>\n",
" <text x=\"7.474299\" y=\"135.016210\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,7.474299,135.016210)\">12</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li></ul></div></li><li class='xr-section-item'><input id='section-6be8d0fe-28dc-43d0-9f2e-9761a7ca51ef' class='xr-section-summary-in' type='checkbox' ><label for='section-6be8d0fe-28dc-43d0-9f2e-9761a7ca51ef' class='xr-section-summary' >Indexes: <span>(3)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-index-name'><div>time</div></div><div class='xr-index-preview'>PandasIndex</div><input type='checkbox' disabled/><label></label><input id='index-91716114-261e-4be4-a6fc-68574a420d35' class='xr-index-data-in' type='checkbox'/><label for='index-91716114-261e-4be4-a6fc-68574a420d35' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(DatetimeIndex([&#x27;2023-09-02 03:35:16.627000&#x27;, &#x27;2023-09-04 03:25:21.856000&#x27;,\n",
" &#x27;2023-09-07 03:35:17.134000&#x27;, &#x27;2023-09-09 03:25:20.648000&#x27;,\n",
" &#x27;2023-09-12 03:35:15.326000&#x27;, &#x27;2023-09-14 03:25:35.755000&#x27;,\n",
" &#x27;2023-09-17 03:35:15.269000&#x27;, &#x27;2023-09-19 03:25:24.089000&#x27;,\n",
" &#x27;2023-09-22 03:35:15.439000&#x27;, &#x27;2023-09-24 03:25:18.524000&#x27;,\n",
" &#x27;2023-09-27 03:35:14.112000&#x27;, &#x27;2023-09-29 03:25:19.046000&#x27;],\n",
" dtype=&#x27;datetime64[ns]&#x27;, name=&#x27;time&#x27;, freq=None))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>y</div></div><div class='xr-index-preview'>PandasIndex</div><input type='checkbox' disabled/><label></label><input id='index-2d4ae5d0-a1d5-4a66-a75e-4dbdb5285f97' class='xr-index-data-in' type='checkbox'/><label for='index-2d4ae5d0-a1d5-4a66-a75e-4dbdb5285f97' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Index([1105735.0, 1105725.0, 1105715.0, 1105705.0, 1105695.0, 1105685.0,\n",
" 1105675.0, 1105665.0, 1105655.0, 1105645.0,\n",
" ...\n",
" 1017095.0, 1017085.0, 1017075.0, 1017065.0, 1017055.0, 1017045.0,\n",
" 1017035.0, 1017025.0, 1017015.0, 1017005.0],\n",
" dtype=&#x27;float64&#x27;, name=&#x27;y&#x27;, length=8874))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>x</div></div><div class='xr-index-preview'>PandasIndex</div><input type='checkbox' disabled/><label></label><input id='index-4e950243-05f7-47f5-8be1-5d6db05fa502' class='xr-index-data-in' type='checkbox'/><label for='index-4e950243-05f7-47f5-8be1-5d6db05fa502' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Index([554795.0, 554805.0, 554815.0, 554825.0, 554835.0, 554845.0, 554855.0,\n",
" 554865.0, 554875.0, 554885.0,\n",
" ...\n",
" 653715.0, 653725.0, 653735.0, 653745.0, 653755.0, 653765.0, 653775.0,\n",
" 653785.0, 653795.0, 653805.0],\n",
" dtype=&#x27;float64&#x27;, name=&#x27;x&#x27;, length=9902))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-8865d5ab-175a-4adf-951f-e3ac4831ed08' class='xr-section-summary-in' type='checkbox' checked><label for='section-8865d5ab-175a-4adf-951f-e3ac4831ed08' class='xr-section-summary' >Attributes: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>crs :</span></dt><dd>EPSG:32648</dd><dt><span>grid_mapping :</span></dt><dd>spatial_ref</dd></dl></div></li></ul></div></div>"
],
"text/plain": [
"<xarray.Dataset> Size: 9GB\n",
"Dimensions: (time: 12, y: 8874, x: 9902)\n",
"Coordinates:\n",
" * time (time) datetime64[ns] 96B 2023-09-02T03:35:16.627000 ... 202...\n",
" * y (y) float64 71kB 1.106e+06 1.106e+06 ... 1.017e+06 1.017e+06\n",
" * x (x) float64 79kB 5.548e+05 5.548e+05 ... 6.538e+05 6.538e+05\n",
" spatial_ref int32 4B 32648\n",
"Data variables:\n",
" red (time, y, x) float32 4GB dask.array<chunksize=(1, 2048, 2048), meta=np.ndarray>\n",
" nir (time, y, x) float32 4GB dask.array<chunksize=(1, 2048, 2048), meta=np.ndarray>\n",
" scl (time, y, x) uint8 1GB dask.array<chunksize=(1, 2048, 2048), meta=np.ndarray>\n",
"Attributes:\n",
" crs: EPSG:32648\n",
" grid_mapping: spatial_ref"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"dsvh, dsvv = load_data_sen1(dc, date_range, coordinates)\n",
"data_sen2 = load_data_sen2(dc, date_range, coordinates)\n",
"notebook_utils.heading(notebook_utils.xarray_object_size(data_sen2))\n",
"display(data_sen2)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "0a2d24b1-76f2-47c7-9b66-d41185fda32e",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/env/lib/python3.12/site-packages/xarray/groupers.py:487: FutureWarning: 'M' is deprecated and will be removed in a future version, please use 'ME' instead.\n",
" self.index_grouper = pd.Grouper(\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "4c49ea68bc414bd19b9e66621b9b7f97",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"VBox()"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"average_vh = calculate_average(dsvh, time_pattern='1M')\n",
"progress(average_vh)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "73576914-a371-4cc1-a0fd-226e2512608b",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/env/lib/python3.12/site-packages/xarray/groupers.py:487: FutureWarning: 'M' is deprecated and will be removed in a future version, please use 'ME' instead.\n",
" self.index_grouper = pd.Grouper(\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "bc7866d0c1d646e7ba7b433f9506ca8d",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"VBox()"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"average_vv = calculate_average(dsvv, time_pattern='1M')\n",
"progress(average_vv)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "f8bc286b-7c61-4b3c-9399-237dff32af51",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'0': 'no data',\n",
" '1': 'saturated or defective',\n",
" '2': 'dark area pixels',\n",
" '3': 'cloud shadows',\n",
" '4': 'vegetation',\n",
" '5': 'bare soils',\n",
" '6': 'water',\n",
" '7': 'unclassified',\n",
" '8': 'cloud medium probability',\n",
" '9': 'cloud high probability',\n",
" '10': 'thin cirrus',\n",
" '11': 'snow or ice'}"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "0c045388fa724ca988653a7e741814c2",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"VBox()"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"result = mask_cloud(data_sen2)\n",
"progress(result)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "40c69eed-9775-48fe-a13c-1a634912082f",
"metadata": {},
"outputs": [],
"source": [
"dsNDVI = calculate_indices(result, index='NDVI', satellite_mission='s2')\n",
"ndvi = dsNDVI[\"NDVI\"]"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "83041967-f770-4bf6-8617-c1842e10da7e",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/env/lib/python3.12/site-packages/xarray/groupers.py:487: FutureWarning: 'M' is deprecated and will be removed in a future version, please use 'ME' instead.\n",
" self.index_grouper = pd.Grouper(\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "70dc653db6d4440398472479162d42f0",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"VBox()"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"average_ndvi = calculate_average(ndvi,time_pattern=\"1M\")\n",
"progress(average_ndvi)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "624f3fd0-2583-418e-a6a9-177b5983fb32",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 1.12 s, sys: 1.13 s, total: 2.24 s\n",
"Wall time: 4min 40s\n"
]
}
],
"source": [
"%%time\n",
"average_vh = average_vh.compute()\n",
"average_vv = average_vv.compute()\n",
"average_ndvi = average_ndvi.compute()"
]
},
{
"cell_type": "markdown",
"id": "609df555-8150-4c3b-95b7-15c09be1cf69",
"metadata": {},
"source": [
"#####################################CREATE DATASET#######################################################"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "e6d6b656-a077-4515-8492-4ecdebeabf55",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
"<defs>\n",
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"</symbol>\n",
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"</symbol>\n",
"</defs>\n",
"</svg>\n",
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
" *\n",
" */\n",
"\n",
":root {\n",
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
" --xr-background-color: var(--jp-layout-color0, white);\n",
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
"}\n",
"\n",
"html[theme=\"dark\"],\n",
"html[data-theme=\"dark\"],\n",
"body[data-theme=\"dark\"],\n",
"body.vscode-dark {\n",
" --xr-font-color0: rgba(255, 255, 255, 1);\n",
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n",
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n",
" --xr-border-color: #1f1f1f;\n",
" --xr-disabled-color: #515151;\n",
" --xr-background-color: #111111;\n",
" --xr-background-color-row-even: #111111;\n",
" --xr-background-color-row-odd: #313131;\n",
"}\n",
"\n",
".xr-wrap {\n",
" display: block !important;\n",
" min-width: 300px;\n",
" max-width: 700px;\n",
"}\n",
"\n",
".xr-text-repr-fallback {\n",
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
" display: none;\n",
"}\n",
"\n",
".xr-header {\n",
" padding-top: 6px;\n",
" padding-bottom: 6px;\n",
" margin-bottom: 4px;\n",
" border-bottom: solid 1px var(--xr-border-color);\n",
"}\n",
"\n",
".xr-header > div,\n",
".xr-header > ul {\n",
" display: inline;\n",
" margin-top: 0;\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-obj-type,\n",
".xr-array-name {\n",
" margin-left: 2px;\n",
" margin-right: 10px;\n",
"}\n",
"\n",
".xr-obj-type {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-sections {\n",
" padding-left: 0 !important;\n",
" display: grid;\n",
" grid-template-columns: 150px auto auto 1fr 0 20px 0 20px;\n",
"}\n",
"\n",
".xr-section-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-section-item input {\n",
" display: inline-block;\n",
" opacity: 0;\n",
" height: 0;\n",
"}\n",
"\n",
".xr-section-item input + label {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label {\n",
" cursor: pointer;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-item input:focus + label {\n",
" border: 2px solid var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label:hover {\n",
" color: var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-summary {\n",
" grid-column: 1;\n",
" color: var(--xr-font-color2);\n",
" font-weight: 500;\n",
"}\n",
"\n",
".xr-section-summary > span {\n",
" display: inline-block;\n",
" padding-left: 0.5em;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-summary-in + label:before {\n",
" display: inline-block;\n",
" content: \"►\";\n",
" font-size: 11px;\n",
" width: 15px;\n",
" text-align: center;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label:before {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label:before {\n",
" content: \"▼\";\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label > span {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-summary,\n",
".xr-section-inline-details {\n",
" padding-top: 4px;\n",
" padding-bottom: 4px;\n",
"}\n",
"\n",
".xr-section-inline-details {\n",
" grid-column: 2 / -1;\n",
"}\n",
"\n",
".xr-section-details {\n",
" display: none;\n",
" grid-column: 1 / -1;\n",
" margin-bottom: 5px;\n",
"}\n",
"\n",
".xr-section-summary-in:checked ~ .xr-section-details {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-array-wrap {\n",
" grid-column: 1 / -1;\n",
" display: grid;\n",
" grid-template-columns: 20px auto;\n",
"}\n",
"\n",
".xr-array-wrap > label {\n",
" grid-column: 1;\n",
" vertical-align: top;\n",
"}\n",
"\n",
".xr-preview {\n",
" color: var(--xr-font-color3);\n",
"}\n",
"\n",
".xr-array-preview,\n",
".xr-array-data {\n",
" padding: 0 5px !important;\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-array-data,\n",
".xr-array-in:checked ~ .xr-array-preview {\n",
" display: none;\n",
"}\n",
"\n",
".xr-array-in:checked ~ .xr-array-data,\n",
".xr-array-preview {\n",
" display: inline-block;\n",
"}\n",
"\n",
".xr-dim-list {\n",
" display: inline-block !important;\n",
" list-style: none;\n",
" padding: 0 !important;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list li {\n",
" display: inline-block;\n",
" padding: 0;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list:before {\n",
" content: \"(\";\n",
"}\n",
"\n",
".xr-dim-list:after {\n",
" content: \")\";\n",
"}\n",
"\n",
".xr-dim-list li:not(:last-child):after {\n",
" content: \",\";\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-has-index {\n",
" font-weight: bold;\n",
"}\n",
"\n",
".xr-var-list,\n",
".xr-var-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-var-item > div,\n",
".xr-var-item label,\n",
".xr-var-item > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-even);\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-var-item > .xr-var-name:hover span {\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-var-list > li:nth-child(odd) > div,\n",
".xr-var-list > li:nth-child(odd) > label,\n",
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-odd);\n",
"}\n",
"\n",
".xr-var-name {\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-var-dims {\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-var-dtype {\n",
" grid-column: 3;\n",
" text-align: right;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-preview {\n",
" grid-column: 4;\n",
"}\n",
"\n",
".xr-index-preview {\n",
" grid-column: 2 / 5;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-name,\n",
".xr-var-dims,\n",
".xr-var-dtype,\n",
".xr-preview,\n",
".xr-attrs dt {\n",
" white-space: nowrap;\n",
" overflow: hidden;\n",
" text-overflow: ellipsis;\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-var-name:hover,\n",
".xr-var-dims:hover,\n",
".xr-var-dtype:hover,\n",
".xr-attrs dt:hover {\n",
" overflow: visible;\n",
" width: auto;\n",
" z-index: 1;\n",
"}\n",
"\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" display: none;\n",
" background-color: var(--xr-background-color) !important;\n",
" padding-bottom: 5px !important;\n",
"}\n",
"\n",
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
".xr-var-data-in:checked ~ .xr-var-data,\n",
".xr-index-data-in:checked ~ .xr-index-data {\n",
" display: block;\n",
"}\n",
"\n",
".xr-var-data > table {\n",
" float: right;\n",
"}\n",
"\n",
".xr-var-name span,\n",
".xr-var-data,\n",
".xr-index-name div,\n",
".xr-index-data,\n",
".xr-attrs {\n",
" padding-left: 25px !important;\n",
"}\n",
"\n",
".xr-attrs,\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" grid-column: 1 / -1;\n",
"}\n",
"\n",
"dl.xr-attrs {\n",
" padding: 0;\n",
" margin: 0;\n",
" display: grid;\n",
" grid-template-columns: 125px auto;\n",
"}\n",
"\n",
".xr-attrs dt,\n",
".xr-attrs dd {\n",
" padding: 0;\n",
" margin: 0;\n",
" float: left;\n",
" padding-right: 10px;\n",
" width: auto;\n",
"}\n",
"\n",
".xr-attrs dt {\n",
" font-weight: normal;\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-attrs dt:hover span {\n",
" display: inline-block;\n",
" background: var(--xr-background-color);\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-attrs dd {\n",
" grid-column: 2;\n",
" white-space: pre-wrap;\n",
" word-break: break-all;\n",
"}\n",
"\n",
".xr-icon-database,\n",
".xr-icon-file-text2,\n",
".xr-no-icon {\n",
" display: inline-block;\n",
" vertical-align: middle;\n",
" width: 1em;\n",
" height: 1.5em !important;\n",
" stroke-width: 0;\n",
" stroke: currentColor;\n",
" fill: currentColor;\n",
"}\n",
"</style><pre class='xr-text-repr-fallback'>&lt;xarray.DataArray (band: 1, y: 6727, x: 7151)&gt; Size: 48MB\n",
"[48104777 values with dtype=uint8]\n",
"Coordinates:\n",
" * band (band) int64 8B 1\n",
" * x (x) float64 57kB 5.597e+05 5.598e+05 ... 6.312e+05 6.312e+05\n",
" * y (y) float64 54kB 1.097e+06 1.097e+06 ... 1.03e+06 1.03e+06\n",
" spatial_ref int64 8B 0\n",
"Attributes:\n",
" AREA_OR_POINT: Area\n",
" RepresentationType: THEMATIC\n",
" _FillValue: 255\n",
" scale_factor: 1.0\n",
" add_offset: 0.0</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-array-name'></div><ul class='xr-dim-list'><li><span class='xr-has-index'>band</span>: 1</li><li><span class='xr-has-index'>y</span>: 6727</li><li><span class='xr-has-index'>x</span>: 7151</li></ul></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-838fb1c6-0aeb-4588-89fa-3c5885cd0eb6' class='xr-array-in' type='checkbox' checked><label for='section-838fb1c6-0aeb-4588-89fa-3c5885cd0eb6' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>...</span></div><div class='xr-array-data'><pre>[48104777 values with dtype=uint8]</pre></div></div></li><li class='xr-section-item'><input id='section-e2fd4c2e-9c5f-459e-9800-6bd118f563d6' class='xr-section-summary-in' type='checkbox' checked><label for='section-e2fd4c2e-9c5f-459e-9800-6bd118f563d6' class='xr-section-summary' >Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>band</span></div><div class='xr-var-dims'>(band)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>1</div><input id='attrs-a5b625bf-b0de-4b1d-8539-1f71f9bfef4c' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-a5b625bf-b0de-4b1d-8539-1f71f9bfef4c' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-8e094f6d-d820-4878-a1a2-3f8712fed7c0' class='xr-var-data-in' type='checkbox'><label for='data-8e094f6d-d820-4878-a1a2-3f8712fed7c0' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([1])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>x</span></div><div class='xr-var-dims'>(x)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>5.597e+05 5.598e+05 ... 6.312e+05</div><input id='attrs-ff43ede3-e4ce-47fb-87d2-4df883df486f' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-ff43ede3-e4ce-47fb-87d2-4df883df486f' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-ce2377d7-069a-452e-804d-aa6ac4529322' class='xr-var-data-in' type='checkbox'><label for='data-ce2377d7-069a-452e-804d-aa6ac4529322' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([559742.754, 559752.754, 559762.754, ..., 631222.754, 631232.754,\n",
" 631242.754])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>y</span></div><div class='xr-var-dims'>(y)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>1.097e+06 1.097e+06 ... 1.03e+06</div><input id='attrs-a00f5ad1-2a0e-49f4-9358-c4e45470fa58' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-a00f5ad1-2a0e-49f4-9358-c4e45470fa58' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-0cea5be9-9f9e-46ee-bb1a-77b698efdbc7' class='xr-var-data-in' type='checkbox'><label for='data-0cea5be9-9f9e-46ee-bb1a-77b698efdbc7' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([1097385.3978, 1097375.3978, 1097365.3978, ..., 1030145.3978,\n",
" 1030135.3978, 1030125.3978])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>spatial_ref</span></div><div class='xr-var-dims'>()</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0</div><input id='attrs-d2f2e14a-9be6-4577-90d9-2299b139085a' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-d2f2e14a-9be6-4577-90d9-2299b139085a' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-c356d54e-a2ba-4e88-b064-b5746866d049' class='xr-var-data-in' type='checkbox'><label for='data-c356d54e-a2ba-4e88-b064-b5746866d049' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>crs_wkt :</span></dt><dd>PROJCS[&quot;WGS 84 / UTM zone 48N&quot;,GEOGCS[&quot;WGS 84&quot;,DATUM[&quot;WGS_1984&quot;,SPHEROID[&quot;WGS 84&quot;,6378137,298.257223563,AUTHORITY[&quot;EPSG&quot;,&quot;7030&quot;]],AUTHORITY[&quot;EPSG&quot;,&quot;6326&quot;]],PRIMEM[&quot;Greenwich&quot;,0,AUTHORITY[&quot;EPSG&quot;,&quot;8901&quot;]],UNIT[&quot;degree&quot;,0.0174532925199433,AUTHORITY[&quot;EPSG&quot;,&quot;9122&quot;]],AUTHORITY[&quot;EPSG&quot;,&quot;4326&quot;]],PROJECTION[&quot;Transverse_Mercator&quot;],PARAMETER[&quot;latitude_of_origin&quot;,0],PARAMETER[&quot;central_meridian&quot;,105],PARAMETER[&quot;scale_factor&quot;,0.9996],PARAMETER[&quot;false_easting&quot;,500000],PARAMETER[&quot;false_northing&quot;,0],UNIT[&quot;metre&quot;,1,AUTHORITY[&quot;EPSG&quot;,&quot;9001&quot;]],AXIS[&quot;Easting&quot;,EAST],AXIS[&quot;Northing&quot;,NORTH],AUTHORITY[&quot;EPSG&quot;,&quot;32648&quot;]]</dd><dt><span>semi_major_axis :</span></dt><dd>6378137.0</dd><dt><span>semi_minor_axis :</span></dt><dd>6356752.314245179</dd><dt><span>inverse_flattening :</span></dt><dd>298.257223563</dd><dt><span>reference_ellipsoid_name :</span></dt><dd>WGS 84</dd><dt><span>longitude_of_prime_meridian :</span></dt><dd>0.0</dd><dt><span>prime_meridian_name :</span></dt><dd>Greenwich</dd><dt><span>geographic_crs_name :</span></dt><dd>WGS 84</dd><dt><span>horizontal_datum_name :</span></dt><dd>World Geodetic System 1984</dd><dt><span>projected_crs_name :</span></dt><dd>WGS 84 / UTM zone 48N</dd><dt><span>grid_mapping_name :</span></dt><dd>transverse_mercator</dd><dt><span>latitude_of_projection_origin :</span></dt><dd>0.0</dd><dt><span>longitude_of_central_meridian :</span></dt><dd>105.0</dd><dt><span>false_easting :</span></dt><dd>500000.0</dd><dt><span>false_northing :</span></dt><dd>0.0</dd><dt><span>scale_factor_at_central_meridian :</span></dt><dd>0.9996</dd><dt><span>spatial_ref :</span></dt><dd>PROJCS[&quot;WGS 84 / UTM zone 48N&quot;,GEOGCS[&quot;WGS 84&quot;,DATUM[&quot;WGS_1984&quot;,SPHEROID[&quot;WGS 84&quot;,6378137,298.257223563,AUTHORITY[&quot;EPSG&quot;,&quot;7030&quot;]],AUTHORITY[&quot;EPSG&quot;,&quot;6326&quot;]],PRIMEM[&quot;Greenwich&quot;,0,AUTHORITY[&quot;EPSG&quot;,&quot;8901&quot;]],UNIT[&quot;degree&quot;,0.0174532925199433,AUTHORITY[&quot;EPSG&quot;,&quot;9122&quot;]],AUTHORITY[&quot;EPSG&quot;,&quot;4326&quot;]],PROJECTION[&quot;Transverse_Mercator&quot;],PARAMETER[&quot;latitude_of_origin&quot;,0],PARAMETER[&quot;central_meridian&quot;,105],PARAMETER[&quot;scale_factor&quot;,0.9996],PARAMETER[&quot;false_easting&quot;,500000],PARAMETER[&quot;false_northing&quot;,0],UNIT[&quot;metre&quot;,1,AUTHORITY[&quot;EPSG&quot;,&quot;9001&quot;]],AXIS[&quot;Easting&quot;,EAST],AXIS[&quot;Northing&quot;,NORTH],AUTHORITY[&quot;EPSG&quot;,&quot;32648&quot;]]</dd><dt><span>GeoTransform :</span></dt><dd>559737.7539999997 10.0 0.0 1097390.3978000004 0.0 -10.0</dd></dl></div><div class='xr-var-data'><pre>array(0)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-f158968a-b3d8-4bb2-ab87-c5269254b83c' class='xr-section-summary-in' type='checkbox' ><label for='section-f158968a-b3d8-4bb2-ab87-c5269254b83c' class='xr-section-summary' >Indexes: <span>(3)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-index-name'><div>band</div></div><div class='xr-index-preview'>PandasIndex</div><input type='checkbox' disabled/><label></label><input id='index-4f18756b-086a-4faf-bac7-75a6060e1448' class='xr-index-data-in' type='checkbox'/><label for='index-4f18756b-086a-4faf-bac7-75a6060e1448' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Index([1], dtype=&#x27;int64&#x27;, name=&#x27;band&#x27;))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>x</div></div><div class='xr-index-preview'>PandasIndex</div><input type='checkbox' disabled/><label></label><input id='index-ed13289b-fda8-4569-915a-33313d8d4fbf' class='xr-index-data-in' type='checkbox'/><label for='index-ed13289b-fda8-4569-915a-33313d8d4fbf' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Index([559742.7539999997, 559752.7539999997, 559762.7539999997,\n",
" 559772.7539999997, 559782.7539999997, 559792.7539999997,\n",
" 559802.7539999997, 559812.7539999997, 559822.7539999997,\n",
" 559832.7539999997,\n",
" ...\n",
" 631152.7539999997, 631162.7539999997, 631172.7539999997,\n",
" 631182.7539999997, 631192.7539999997, 631202.7539999997,\n",
" 631212.7539999997, 631222.7539999997, 631232.7539999997,\n",
" 631242.7539999997],\n",
" dtype=&#x27;float64&#x27;, name=&#x27;x&#x27;, length=7151))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>y</div></div><div class='xr-index-preview'>PandasIndex</div><input type='checkbox' disabled/><label></label><input id='index-f14682e7-3094-40e6-9d7d-b90fcc8592a6' class='xr-index-data-in' type='checkbox'/><label for='index-f14682e7-3094-40e6-9d7d-b90fcc8592a6' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Index([1097385.3978000004, 1097375.3978000004, 1097365.3978000004,\n",
" 1097355.3978000004, 1097345.3978000004, 1097335.3978000004,\n",
" 1097325.3978000004, 1097315.3978000004, 1097305.3978000004,\n",
" 1097295.3978000004,\n",
" ...\n",
" 1030215.3978000004, 1030205.3978000004, 1030195.3978000004,\n",
" 1030185.3978000004, 1030175.3978000004, 1030165.3978000004,\n",
" 1030155.3978000004, 1030145.3978000004, 1030135.3978000004,\n",
" 1030125.3978000004],\n",
" dtype=&#x27;float64&#x27;, name=&#x27;y&#x27;, length=6727))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-18a15997-8214-4a8a-92f8-82a345fd7d3b' class='xr-section-summary-in' type='checkbox' checked><label for='section-18a15997-8214-4a8a-92f8-82a345fd7d3b' class='xr-section-summary' >Attributes: <span>(5)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>AREA_OR_POINT :</span></dt><dd>Area</dd><dt><span>RepresentationType :</span></dt><dd>THEMATIC</dd><dt><span>_FillValue :</span></dt><dd>255</dd><dt><span>scale_factor :</span></dt><dd>1.0</dd><dt><span>add_offset :</span></dt><dd>0.0</dd></dl></div></li></ul></div></div>"
],
"text/plain": [
"<xarray.DataArray (band: 1, y: 6727, x: 7151)> Size: 48MB\n",
"[48104777 values with dtype=uint8]\n",
"Coordinates:\n",
" * band (band) int64 8B 1\n",
" * x (x) float64 57kB 5.597e+05 5.598e+05 ... 6.312e+05 6.312e+05\n",
" * y (y) float64 54kB 1.097e+06 1.097e+06 ... 1.03e+06 1.03e+06\n",
" spatial_ref int64 8B 0\n",
"Attributes:\n",
" AREA_OR_POINT: Area\n",
" RepresentationType: THEMATIC\n",
" _FillValue: 255\n",
" scale_factor: 1.0\n",
" add_offset: 0.0"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"input_path = \"./input/masks/ST_lua2v.tif\"\n",
"data = rioxarray.open_rasterio(input_path)\n",
"data"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "a3185634-0d67-42a7-82c0-7ef2807d0448",
"metadata": {},
"outputs": [],
"source": [
"# Convert to numpy array (assuming a single-band raster)\n",
"data_np = data.values.squeeze()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "04a23ee1-305a-4139-b3d2-26e34366286d",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 598782.754 1097385.3978]\n",
" [ 610132.754 1087655.3978]\n",
" [ 607522.754 1087455.3978]\n",
" ...\n",
" [ 608912.754 1030175.3978]\n",
" [ 608922.754 1030175.3978]\n",
" [ 608132.754 1030125.3978]]\n"
]
}
],
"source": [
"import xarray as xr\n",
"import numpy as np\n",
"\n",
"# Assuming 'data' is your xarray.DataArray\n",
"mask = data != 255 # Boolean mask where values are not 255\n",
"\n",
"# Stack x and y dimensions into a single index\n",
"data_stacked = data.stack(points=(\"y\", \"x\"))\n",
"\n",
"# Apply the mask and drop NaN values\n",
"filtered = data_stacked.where(data_stacked != 255, drop=True)\n",
"\n",
"# Extract x and y coordinates\n",
"x_indices = filtered.coords[\"x\"].values\n",
"y_indices = filtered.coords[\"y\"].values\n",
"\n",
"# Stack into a (N, 2) NumPy array\n",
"xy_valid = np.column_stack((x_indices, y_indices))\n",
"\n",
"print(xy_valid) # Print or use the filtered coordinates\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "32018eaf-d96a-4d93-aa60-6f73f564c8a2",
"metadata": {},
"outputs": [],
"source": [
"ndvi = []\n",
"vh = []\n",
"vv = []\n",
"\n",
"def extract_data(index):\n",
" ndvi_data = average_ndvi.sel(x=index[0], y=index[1], method='nearest').values\n",
" vh_data = average_vh.sel(x=index[0], y=index[1], method='nearest').values\n",
" vv_data = average_vv.sel(x=index[0], y=index[1], method='nearest').values\n",
" return ndvi_data, vh_data, vv_data\n",
"\n",
"# Process data sequentially\n",
"i = 0\n",
"for index in xy_valid:\n",
" ndvi_data, vh_data, vv_data = extract_data(index)\n",
" ndvi.append(ndvi_data)\n",
" vh.append(vh_data)\n",
" vv.append(vv_data)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1a602b28-a98f-4606-8e91-c4a29d3ebe67",
"metadata": {},
"outputs": [],
"source": [
"ndvi = np.concatenate(ndvi)\n",
"vh = np.concatenate(vh)\n",
"vv = np.concatenate(vv)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "a3984403-a902-4d1f-a149-d738be564120",
"metadata": {},
"outputs": [],
"source": [
"nan_indices = ~np.isnan(ndvi)\n",
"print(nan_indices)\n",
"ndvi_nan = ndvi[nan_indices]\n",
"vh_nan = vh[nan_indices]\n",
"vv_nan = vv[nan_indices]"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "2ec67453-d3d6-4b6b-b130-0b3419e7336c",
"metadata": {},
"outputs": [],
"source": [
"ndvi_nan = ndvi_nan[:2000000]\n",
"vh_nan = vh_nan[:2000000]\n",
"vv_nan = vv_nan[:2000000]"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "7ab63797-a8d7-413e-b74a-a244c1e019a7",
"metadata": {},
"outputs": [],
"source": [
"ndvi_nan.shape"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "03d48b76-273b-4561-98e3-96e51e88ba51",
"metadata": {},
"outputs": [],
"source": [
"features = np.stack([vh_nan, vv_nan], axis=1)\n",
"features.shape"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "20461197-dd98-42ce-988c-492129117af3",
"metadata": {},
"outputs": [],
"source": [
"X_train, X_test, y_train, y_test = train_test_split(features, ndvi_nan, test_size=0.2, random_state=42)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "3f24df45-fe21-4df0-89e6-917fca496040",
"metadata": {},
"outputs": [],
"source": [
"from sklearn.neural_network import MLPRegressor\n",
"regressors = {\n",
" 'random_forest': RandomForestRegressor(random_state=42),\n",
" 'svr': SVR(),\n",
" 'gradient_boosting': GradientBoostingRegressor(random_state=42),\n",
" 'linear_regression': LinearRegression(),\n",
" 'knn': KNeighborsRegressor(),\n",
" 'mlp': MLPRegressor(random_state=42, max_iter=1000)\n",
" }\n",
"param_grids_regressor = {\n",
" 'random_forest': {\n",
" 'n_estimators': [500],\n",
" 'max_depth': [ 10],\n",
" },\n",
" 'svr': {\n",
" 'kernel': ['poly', 'linear'],\n",
" 'C': [0.1, 1, 10],\n",
" 'degree': [2, 3], # For poly kernel\n",
" },\n",
" 'gradient_boosting': {\n",
" 'n_estimators': [300],\n",
" 'learning_rate': [ 0.05],\n",
" 'max_depth': [3, 4, 5],\n",
" },\n",
" 'linear_regression': {\n",
" # 'alpha': [0.01, 0.1, 1, 10, 100], # Regularization strength\n",
" # 'fit_intercept': [True, False],\n",
" # 'solver': ['auto', 'svd', 'cholesky', 'lsqr', 'sparse_cg'],\n",
" },\n",
" 'knn': {\n",
" 'n_neighbors': [3, 5, 7, 10, 20, 30, 50],\n",
" 'weights': ['uniform', 'distance'],\n",
" 'p': [1, 2, 3],\n",
" },\n",
" 'mlp' : {\n",
" 'hidden_layer_sizes': [(64, 32), (128, 64), (64, 32, 16), (128, 64, 32)],\n",
" 'activation': ['relu', 'tanh'],\n",
" 'solver': ['adam', 'sgd'],\n",
" 'learning_rate_init': [0.001, 0.01, 0.1]\n",
" }\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "9c06dac1-c412-4a70-a91b-32dbd2ead8d6",
"metadata": {},
"outputs": [],
"source": [
"%%time\n",
"best_model, best_params, best_score_r2, best_score_mae, cv_results = find_best_regression(\n",
" X_train, y_train, regressors['random_forest'], param_grids_regressor['random_forest']\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "47ac0ca2-a2e2-491e-ad61-904fd68fc963",
"metadata": {},
"outputs": [],
"source": [
"folder_path = 'output/regressors/mask'\n",
"file_path = os.path.join(folder_path, 'rf_lua2v2.pkl')\n",
"joblib.dump(best_model, file_path)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "fdab7a3c-bcf6-442e-a048-ebf51d31629d",
"metadata": {},
"outputs": [],
"source": [
"y_pred = best_model.predict(X_test)\n",
"# Calculate R² score\n",
"r2 = r2_score(y_test, y_pred)\n",
"# Calculate Mean Squared Error\n",
"mse = mean_squared_error(y_test, y_pred)\n",
"mae = mean_absolute_error(y_test, y_pred)\n",
"print(f\"R² Score: {r2}\")\n",
"print(f\"Mean Squared Error: {mse}\")\n",
"print(\"Mean Absolute Error:\", abs(mae))"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f2dbefc9-c5c0-41de-8563-99680f124ac2",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "681830ed-ff71-45cd-bfc8-cec5d3808fb7",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "c86c3262-9246-4799-ad0b-ccb609f0b9cb",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "9b2bc79c-fb67-4282-a34e-9771c7e0b10c",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "27b04b78-67dc-48db-9950-6a6d7ffaf239",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "20fb8078-70cc-4788-abbf-99ee4a2228f2",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "35649588-196c-4cd6-be62-d11c17cd2ce3",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 13,
"id": "d9cbb9cc-1ac7-45bf-a134-f4e29df29d75",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"plt.imshow(mask[0], cmap='gray') # Show the first band\n",
"plt.colorbar()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "0bd5c3aa-333e-45d0-b990-473b86aed5f8",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}