Last active
July 28, 2025 04:25
-
-
Save clevinson/799ad8557d910dbfd99dc6779828b18e to your computer and use it in GitHub Desktop.
ipfs/zarr smoketest
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: zarripfs | |
channels: | |
- conda-forge | |
- defaults | |
dependencies: | |
- fsspec | |
- pandas | |
- xarray | |
- python=3.13 | |
- hvplot | |
- zarr | |
- jupyter | |
- ipfsspec | |
- cftime | |
- geoviews |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"id": "4f71a44d-8976-431b-820a-2783763925d9", | |
"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.7.3'.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.7.5/dist/bundled/reactiveesm/es-module-shims@^1.10.0/dist/es-module-shims.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-3.7.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.7.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.7.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.7.3.min.js\", \"https://cdn.holoviz.org/panel/1.7.5/dist/panel.min.js\", \"https://cdn.jsdelivr.net/npm/@holoviz/[email protected]/dist/geoviews.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.7.3'.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.7.5/dist/bundled/reactiveesm/es-module-shims@^1.10.0/dist/es-module-shims.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-3.7.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.7.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.7.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.7.3.min.js\", \"https://cdn.holoviz.org/panel/1.7.5/dist/panel.min.js\", \"https://cdn.jsdelivr.net/npm/@holoviz/[email protected]/dist/geoviews.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", | |
" 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", | |
" let retries = 0;\n", | |
" const open = () => {\n", | |
" if (comm.active) {\n", | |
" comm.open();\n", | |
" } else if (retries > 3) {\n", | |
" console.warn('Comm target never activated')\n", | |
" } else {\n", | |
" retries += 1\n", | |
" setTimeout(open, 500)\n", | |
" }\n", | |
" }\n", | |
" if (comm.active) {\n", | |
" comm.open();\n", | |
" } else {\n", | |
" setTimeout(open, 500)\n", | |
" }\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 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 let retries = 0;\n const open = () => {\n if (comm.active) {\n comm.open();\n } else if (retries > 3) {\n console.warn('Comm target never activated')\n } else {\n retries += 1\n setTimeout(open, 500)\n }\n }\n if (comm.active) {\n comm.open();\n } else {\n setTimeout(open, 500)\n }\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='af66e494-2f5c-4c9b-992f-f1409170ffa8'>\n", | |
" <div id=\"f1cd5ddb-7639-4d5d-9881-19ca3800dca0\" data-root-id=\"af66e494-2f5c-4c9b-992f-f1409170ffa8\" style=\"display: contents;\"></div>\n", | |
"</div>\n", | |
"<script type=\"application/javascript\">(function(root) {\n", | |
" var docs_json = {\"4e0c6b80-ca24-4635-a411-dae4731bf196\":{\"version\":\"3.7.3\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"panel.models.browser.BrowserInfo\",\"id\":\"af66e494-2f5c-4c9b-992f-f1409170ffa8\"},{\"type\":\"object\",\"name\":\"panel.models.comm_manager.CommManager\",\"id\":\"8800618c-575d-4d6a-b2c1-391d812cbcd9\",\"attributes\":{\"plot_id\":\"af66e494-2f5c-4c9b-992f-f1409170ffa8\",\"comm_id\":\"bab587aaaca34f32abdba537a8cd633c\",\"client_comm_id\":\"5467e503bb0e44ac8a19622ad877ec5f\"}}],\"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\":\"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\":\"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\":\"use_shadow_dom\",\"kind\":\"Any\",\"default\":true},{\"name\":\"esm_constants\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}}]},{\"type\":\"model\",\"name\":\"AnyWidgetComponent1\",\"properties\":[{\"name\":\"use_shadow_dom\",\"kind\":\"Any\",\"default\":true},{\"name\":\"esm_constants\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}}]},{\"type\":\"model\",\"name\":\"FastWrapper1\",\"properties\":[{\"name\":\"object\",\"kind\":\"Any\",\"default\":null},{\"name\":\"style\",\"kind\":\"Any\",\"default\":null}]},{\"type\":\"model\",\"name\":\"NotificationArea1\",\"properties\":[{\"name\":\"js_events\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}},{\"name\":\"max_notifications\",\"kind\":\"Any\",\"default\":5},{\"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\":\"_rendered\",\"kind\":\"Any\",\"default\":false},{\"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\":\"request_value1\",\"properties\":[{\"name\":\"fill\",\"kind\":\"Any\",\"default\":\"none\"},{\"name\":\"_synced\",\"kind\":\"Any\",\"default\":null},{\"name\":\"_request_sync\",\"kind\":\"Any\",\"default\":0}]},{\"type\":\"model\",\"name\":\"holoviews.plotting.bokeh.raster.HoverModel\",\"properties\":[{\"name\":\"xy\",\"kind\":\"Any\",\"default\":null},{\"name\":\"data\",\"kind\":\"Any\",\"default\":null}]}]}};\n", | |
" var render_items = [{\"docid\":\"4e0c6b80-ca24-4635-a411-dae4731bf196\",\"roots\":{\"af66e494-2f5c-4c9b-992f-f1409170ffa8\":\"f1cd5ddb-7639-4d5d-9881-19ca3800dca0\"},\"root_ids\":[\"af66e494-2f5c-4c9b-992f-f1409170ffa8\"]}];\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": "af66e494-2f5c-4c9b-992f-f1409170ffa8" | |
} | |
}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"text/plain": [ | |
"<fsspec.mapping.FSMap at 0x28cd42850>" | |
] | |
}, | |
"execution_count": 4, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"import zarr\n", | |
"import fsspec\n", | |
"import xarray as xr\n", | |
"import hvplot.xarray\n", | |
"\n", | |
"ipfs = fsspec.filesystem(\"ipfs\")\n", | |
"\n", | |
"## monthly atmospheric temperuatre dataset from NCAR (from [pangeo gallery](https://gallery.pangeo.io/repos/pangeo-gallery/cmip6/basic_search_and_load.html))\n", | |
"## gs://cmip6/CMIP6/CMIP/NCAR/CESM2-FV2/historical/r2i1p1f1/Amon/tas/gn/v20200226/\n", | |
"##\n", | |
"## the above zarr dataset has been pinned to IPFS with the following CID: QmcpPjaRsN4mTdb6gwLYtyMydGQ4jJGCERNRHcT7HbxHy8\n", | |
"## Browsable via ipfs gateway at: https://ipfs.io/ipfs/QmcpPjaRsN4mTdb6gwLYtyMydGQ4jJGCERNRHcT7HbxHy8\n", | |
"mapper = ipfs.get_mapper(\"QmcpPjaRsN4mTdb6gwLYtyMydGQ4jJGCERNRHcT7HbxHy8\")\n", | |
"mapper" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"id": "39f03dd3-606e-4fd6-a8b4-752976413b66", | |
"metadata": {}, | |
"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(\n", | |
" --jp-content-font-color0,\n", | |
" var(--pst-color-text-base rgba(0, 0, 0, 1))\n", | |
" );\n", | |
" --xr-font-color2: var(\n", | |
" --jp-content-font-color2,\n", | |
" var(--pst-color-text-base, rgba(0, 0, 0, 0.54))\n", | |
" );\n", | |
" --xr-font-color3: var(\n", | |
" --jp-content-font-color3,\n", | |
" var(--pst-color-text-base, rgba(0, 0, 0, 0.38))\n", | |
" );\n", | |
" --xr-border-color: var(\n", | |
" --jp-border-color2,\n", | |
" hsl(from var(--pst-color-on-background, white) h s calc(l - 10))\n", | |
" );\n", | |
" --xr-disabled-color: var(\n", | |
" --jp-layout-color3,\n", | |
" hsl(from var(--pst-color-on-background, white) h s calc(l - 40))\n", | |
" );\n", | |
" --xr-background-color: var(\n", | |
" --jp-layout-color0,\n", | |
" var(--pst-color-on-background, white)\n", | |
" );\n", | |
" --xr-background-color-row-even: var(\n", | |
" --jp-layout-color1,\n", | |
" hsl(from var(--pst-color-on-background, white) h s calc(l - 5))\n", | |
" );\n", | |
" --xr-background-color-row-odd: var(\n", | |
" --jp-layout-color2,\n", | |
" hsl(from var(--pst-color-on-background, white) h s calc(l - 15))\n", | |
" );\n", | |
"}\n", | |
"\n", | |
"html[theme=\"dark\"],\n", | |
"html[data-theme=\"dark\"],\n", | |
"body[data-theme=\"dark\"],\n", | |
"body.vscode-dark {\n", | |
" --xr-font-color0: var(\n", | |
" --jp-content-font-color0,\n", | |
" var(--pst-color-text-base, rgba(255, 255, 255, 1))\n", | |
" );\n", | |
" --xr-font-color2: var(\n", | |
" --jp-content-font-color2,\n", | |
" var(--pst-color-text-base, rgba(255, 255, 255, 0.54))\n", | |
" );\n", | |
" --xr-font-color3: var(\n", | |
" --jp-content-font-color3,\n", | |
" var(--pst-color-text-base, rgba(255, 255, 255, 0.38))\n", | |
" );\n", | |
" --xr-border-color: var(\n", | |
" --jp-border-color2,\n", | |
" hsl(from var(--pst-color-on-background, #111111) h s calc(l + 10))\n", | |
" );\n", | |
" --xr-disabled-color: var(\n", | |
" --jp-layout-color3,\n", | |
" hsl(from var(--pst-color-on-background, #111111) h s calc(l + 40))\n", | |
" );\n", | |
" --xr-background-color: var(\n", | |
" --jp-layout-color0,\n", | |
" var(--pst-color-on-background, #111111)\n", | |
" );\n", | |
" --xr-background-color-row-even: var(\n", | |
" --jp-layout-color1,\n", | |
" hsl(from var(--pst-color-on-background, #111111) h s calc(l + 5))\n", | |
" );\n", | |
" --xr-background-color-row-odd: var(\n", | |
" --jp-layout-color2,\n", | |
" hsl(from var(--pst-color-on-background, #111111) h s calc(l + 15))\n", | |
" );\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", | |
" border: 2px solid transparent !important;\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) !important;\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", | |
" border-color: var(--xr-background-color-row-odd);\n", | |
" margin-bottom: 0;\n", | |
" padding-top: 2px;\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", | |
" border-color: var(--xr-background-color-row-even);\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", | |
" border-top: 2px dotted var(--xr-background-color);\n", | |
" padding-bottom: 20px !important;\n", | |
" padding-top: 10px !important;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs-in + label,\n", | |
".xr-var-data-in + label,\n", | |
".xr-index-data-in + label {\n", | |
" padding: 0 1px;\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-data > pre,\n", | |
".xr-index-data > pre,\n", | |
".xr-var-data > table > tbody > tr {\n", | |
" background-color: transparent !important;\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", | |
"\n", | |
".xr-var-attrs-in:checked + label > .xr-icon-file-text2,\n", | |
".xr-var-data-in:checked + label > .xr-icon-database,\n", | |
".xr-index-data-in:checked + label > .xr-icon-database {\n", | |
" color: var(--xr-font-color0);\n", | |
" filter: drop-shadow(1px 1px 5px var(--xr-font-color2));\n", | |
" stroke-width: 0.8px;\n", | |
"}\n", | |
"</style><pre class='xr-text-repr-fallback'><xarray.Dataset> Size: 110MB\n", | |
"Dimensions: (time: 1980, lat: 96, lon: 144, nbnd: 2)\n", | |
"Coordinates:\n", | |
" * lat (lat) float64 768B -90.0 -88.11 -86.21 ... 86.21 88.11 90.0\n", | |
" lat_bnds (lat, nbnd) float64 2kB ...\n", | |
" * lon (lon) float64 1kB 0.0 2.5 5.0 7.5 ... 350.0 352.5 355.0 357.5\n", | |
" lon_bnds (lon, nbnd) float64 2kB ...\n", | |
" * time (time) object 16kB 1850-01-15 12:00:00 ... 2014-12-15 12:00:00\n", | |
" time_bnds (time, nbnd) object 32kB ...\n", | |
"Dimensions without coordinates: nbnd\n", | |
"Data variables:\n", | |
" tas (time, lat, lon) float32 109MB ...\n", | |
"Attributes: (12/46)\n", | |
" Conventions: CF-1.7 CMIP-6.2\n", | |
" DODS_EXTRA.Unlimited_Dimension: time\n", | |
" activity_id: CMIP\n", | |
" branch_method: standard\n", | |
" branch_time_in_child: 674885.0\n", | |
" branch_time_in_parent: 10950.0\n", | |
" ... ...\n", | |
" sub_experiment_id: none\n", | |
" table_id: Amon\n", | |
" tracking_id: hdl:21.14100/99cdfde8-5b6d-452b-9b78-62a...\n", | |
" variable_id: tas\n", | |
" variant_info: CMIP6 CESM2-FV2 historical experiment (1...\n", | |
" variant_label: r2i1p1f1</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-611860b6-758f-405d-a4b2-c198a5ad4c5a' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-611860b6-758f-405d-a4b2-c198a5ad4c5a' 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>: 1980</li><li><span class='xr-has-index'>lat</span>: 96</li><li><span class='xr-has-index'>lon</span>: 144</li><li><span>nbnd</span>: 2</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-e61efe89-7073-4a8a-8490-d37602397a70' class='xr-section-summary-in' type='checkbox' checked><label for='section-e61efe89-7073-4a8a-8490-d37602397a70' class='xr-section-summary' >Coordinates: <span>(6)</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'>lat</span></div><div class='xr-var-dims'>(lat)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>-90.0 -88.11 -86.21 ... 88.11 90.0</div><input id='attrs-d708863a-0068-4c00-b9af-b373ce0c08bb' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-d708863a-0068-4c00-b9af-b373ce0c08bb' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-2efa41db-a531-4232-8b7d-9782016a38c0' class='xr-var-data-in' type='checkbox'><label for='data-2efa41db-a531-4232-8b7d-9782016a38c0' 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>_ChunkSizes :</span></dt><dd>96</dd><dt><span>axis :</span></dt><dd>Y</dd><dt><span>bounds :</span></dt><dd>lat_bnds</dd><dt><span>standard_name :</span></dt><dd>latitude</dd><dt><span>title :</span></dt><dd>Latitude</dd><dt><span>type :</span></dt><dd>double</dd><dt><span>units :</span></dt><dd>degrees_north</dd><dt><span>valid_max :</span></dt><dd>90.0</dd><dt><span>valid_min :</span></dt><dd>-90.0</dd></dl></div><div class='xr-var-data'><pre>array([-90. , -88.105263, -86.210526, -84.315789, -82.421053, -80.526316,\n", | |
" -78.631579, -76.736842, -74.842105, -72.947368, -71.052632, -69.157895,\n", | |
" -67.263158, -65.368421, -63.473684, -61.578947, -59.684211, -57.789474,\n", | |
" -55.894737, -54. , -52.105263, -50.210526, -48.315789, -46.421053,\n", | |
" -44.526316, -42.631579, -40.736842, -38.842105, -36.947368, -35.052632,\n", | |
" -33.157895, -31.263158, -29.368421, -27.473684, -25.578947, -23.684211,\n", | |
" -21.789474, -19.894737, -18. , -16.105263, -14.210526, -12.315789,\n", | |
" -10.421053, -8.526316, -6.631579, -4.736842, -2.842105, -0.947368,\n", | |
" 0.947368, 2.842105, 4.736842, 6.631579, 8.526316, 10.421053,\n", | |
" 12.315789, 14.210526, 16.105263, 18. , 19.894737, 21.789474,\n", | |
" 23.684211, 25.578947, 27.473684, 29.368421, 31.263158, 33.157895,\n", | |
" 35.052632, 36.947368, 38.842105, 40.736842, 42.631579, 44.526316,\n", | |
" 46.421053, 48.315789, 50.210526, 52.105263, 54. , 55.894737,\n", | |
" 57.789474, 59.684211, 61.578947, 63.473684, 65.368421, 67.263158,\n", | |
" 69.157895, 71.052632, 72.947368, 74.842105, 76.736842, 78.631579,\n", | |
" 80.526316, 82.421053, 84.315789, 86.210526, 88.105263, 90. ])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>lat_bnds</span></div><div class='xr-var-dims'>(lat, nbnd)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-ff97ab11-2423-4e21-9294-5792a690be30' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-ff97ab11-2423-4e21-9294-5792a690be30' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-d3844cd3-7df9-4694-be49-e7c16179dc39' class='xr-var-data-in' type='checkbox'><label for='data-d3844cd3-7df9-4694-be49-e7c16179dc39' 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>_ChunkSizes :</span></dt><dd>[96, 2]</dd><dt><span>units :</span></dt><dd>degrees_north</dd></dl></div><div class='xr-var-data'><pre>[192 values with dtype=float64]</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>lon</span></div><div class='xr-var-dims'>(lon)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>0.0 2.5 5.0 ... 352.5 355.0 357.5</div><input id='attrs-88950924-ec3c-4d81-a679-3b3b885612ed' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-88950924-ec3c-4d81-a679-3b3b885612ed' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-5c55294d-fac0-4e6e-a5f7-549a2bba26e8' class='xr-var-data-in' type='checkbox'><label for='data-5c55294d-fac0-4e6e-a5f7-549a2bba26e8' 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>_ChunkSizes :</span></dt><dd>144</dd><dt><span>axis :</span></dt><dd>X</dd><dt><span>bounds :</span></dt><dd>lon_bnds</dd><dt><span>standard_name :</span></dt><dd>longitude</dd><dt><span>title :</span></dt><dd>Longitude</dd><dt><span>type :</span></dt><dd>double</dd><dt><span>units :</span></dt><dd>degrees_east</dd><dt><span>valid_max :</span></dt><dd>360.0</dd><dt><span>valid_min :</span></dt><dd>0.0</dd></dl></div><div class='xr-var-data'><pre>array([ 0. , 2.5, 5. , 7.5, 10. , 12.5, 15. , 17.5, 20. , 22.5,\n", | |
" 25. , 27.5, 30. , 32.5, 35. , 37.5, 40. , 42.5, 45. , 47.5,\n", | |
" 50. , 52.5, 55. , 57.5, 60. , 62.5, 65. , 67.5, 70. , 72.5,\n", | |
" 75. , 77.5, 80. , 82.5, 85. , 87.5, 90. , 92.5, 95. , 97.5,\n", | |
" 100. , 102.5, 105. , 107.5, 110. , 112.5, 115. , 117.5, 120. , 122.5,\n", | |
" 125. , 127.5, 130. , 132.5, 135. , 137.5, 140. , 142.5, 145. , 147.5,\n", | |
" 150. , 152.5, 155. , 157.5, 160. , 162.5, 165. , 167.5, 170. , 172.5,\n", | |
" 175. , 177.5, 180. , 182.5, 185. , 187.5, 190. , 192.5, 195. , 197.5,\n", | |
" 200. , 202.5, 205. , 207.5, 210. , 212.5, 215. , 217.5, 220. , 222.5,\n", | |
" 225. , 227.5, 230. , 232.5, 235. , 237.5, 240. , 242.5, 245. , 247.5,\n", | |
" 250. , 252.5, 255. , 257.5, 260. , 262.5, 265. , 267.5, 270. , 272.5,\n", | |
" 275. , 277.5, 280. , 282.5, 285. , 287.5, 290. , 292.5, 295. , 297.5,\n", | |
" 300. , 302.5, 305. , 307.5, 310. , 312.5, 315. , 317.5, 320. , 322.5,\n", | |
" 325. , 327.5, 330. , 332.5, 335. , 337.5, 340. , 342.5, 345. , 347.5,\n", | |
" 350. , 352.5, 355. , 357.5])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>lon_bnds</span></div><div class='xr-var-dims'>(lon, nbnd)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-92b9260a-a49a-430f-a82e-f5f9593676d9' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-92b9260a-a49a-430f-a82e-f5f9593676d9' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-1951c43f-047b-4b59-966d-55faa975c9dc' class='xr-var-data-in' type='checkbox'><label for='data-1951c43f-047b-4b59-966d-55faa975c9dc' 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>_ChunkSizes :</span></dt><dd>[144, 2]</dd><dt><span>units :</span></dt><dd>degrees_east</dd></dl></div><div class='xr-var-data'><pre>[288 values with dtype=float64]</pre></div></li><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'>object</div><div class='xr-var-preview xr-preview'>1850-01-15 12:00:00 ... 2014-12-...</div><input id='attrs-38db0762-b35e-4cef-a5c8-10771bee40ad' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-38db0762-b35e-4cef-a5c8-10771bee40ad' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-b75727f9-5fa2-4f86-8937-986de0bf9d27' class='xr-var-data-in' type='checkbox'><label for='data-b75727f9-5fa2-4f86-8937-986de0bf9d27' 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>_ChunkSizes :</span></dt><dd>512</dd><dt><span>axis :</span></dt><dd>T</dd><dt><span>bounds :</span></dt><dd>time_bnds</dd><dt><span>standard_name :</span></dt><dd>time</dd><dt><span>title :</span></dt><dd>time</dd><dt><span>type :</span></dt><dd>double</dd></dl></div><div class='xr-var-data'><pre>array([cftime.DatetimeNoLeap(1850, 1, 15, 12, 0, 0, 0, has_year_zero=True),\n", | |
" cftime.DatetimeNoLeap(1850, 2, 14, 0, 0, 0, 0, has_year_zero=True),\n", | |
" cftime.DatetimeNoLeap(1850, 3, 15, 12, 0, 0, 0, has_year_zero=True),\n", | |
" ...,\n", | |
" cftime.DatetimeNoLeap(2014, 10, 15, 12, 0, 0, 0, has_year_zero=True),\n", | |
" cftime.DatetimeNoLeap(2014, 11, 15, 0, 0, 0, 0, has_year_zero=True),\n", | |
" cftime.DatetimeNoLeap(2014, 12, 15, 12, 0, 0, 0, has_year_zero=True)],\n", | |
" shape=(1980,), dtype=object)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>time_bnds</span></div><div class='xr-var-dims'>(time, nbnd)</div><div class='xr-var-dtype'>object</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-defc22b6-f733-4b75-a55e-bf5ed3fb2a5b' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-defc22b6-f733-4b75-a55e-bf5ed3fb2a5b' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-3cbc878b-af3d-4837-b849-2f2a5a89abe5' class='xr-var-data-in' type='checkbox'><label for='data-3cbc878b-af3d-4837-b849-2f2a5a89abe5' 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>_ChunkSizes :</span></dt><dd>[1, 2]</dd></dl></div><div class='xr-var-data'><pre>[3960 values with dtype=object]</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-94882e9a-28d6-4849-9ad6-d48670345154' class='xr-section-summary-in' type='checkbox' checked><label for='section-94882e9a-28d6-4849-9ad6-d48670345154' class='xr-section-summary' >Data variables: <span>(1)</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>tas</span></div><div class='xr-var-dims'>(time, lat, lon)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>...</div><input id='attrs-bab01c86-24d7-47fa-a0c0-74cab5ef13d6' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-bab01c86-24d7-47fa-a0c0-74cab5ef13d6' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-82df8cb3-dddb-4795-9ca7-35b289f89464' class='xr-var-data-in' type='checkbox'><label for='data-82df8cb3-dddb-4795-9ca7-35b289f89464' 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>_ChunkSizes :</span></dt><dd>[1, 96, 144]</dd><dt><span>cell_measures :</span></dt><dd>area: areacella</dd><dt><span>cell_methods :</span></dt><dd>area: time: mean</dd><dt><span>comment :</span></dt><dd>TREFHT</dd><dt><span>description :</span></dt><dd>near-surface (usually, 2 meter) air temperature</dd><dt><span>frequency :</span></dt><dd>mon</dd><dt><span>id :</span></dt><dd>tas</dd><dt><span>long_name :</span></dt><dd>Near-Surface Air Temperature</dd><dt><span>mipTable :</span></dt><dd>Amon</dd><dt><span>out_name :</span></dt><dd>tas</dd><dt><span>prov :</span></dt><dd>Amon ((isd.003))</dd><dt><span>realm :</span></dt><dd>atmos</dd><dt><span>standard_name :</span></dt><dd>air_temperature</dd><dt><span>time :</span></dt><dd>time</dd><dt><span>time_label :</span></dt><dd>time-mean</dd><dt><span>time_title :</span></dt><dd>Temporal mean</dd><dt><span>title :</span></dt><dd>Near-Surface Air Temperature</dd><dt><span>type :</span></dt><dd>real</dd><dt><span>units :</span></dt><dd>K</dd><dt><span>variable_id :</span></dt><dd>tas</dd></dl></div><div class='xr-var-data'><pre>[27371520 values with dtype=float32]</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-9565ce04-7001-4ec6-99fa-a9c30087d406' class='xr-section-summary-in' type='checkbox' ><label for='section-9565ce04-7001-4ec6-99fa-a9c30087d406' 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>lat</div></div><div class='xr-index-preview'>PandasIndex</div><input type='checkbox' disabled/><label></label><input id='index-8b88cee6-5b16-432a-83d8-a320da58bfdc' class='xr-index-data-in' type='checkbox'/><label for='index-8b88cee6-5b16-432a-83d8-a320da58bfdc' 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([ -90.0, -88.10526315789474, -86.21052631578948,\n", | |
" -84.3157894736842, -82.42105263157895, -80.52631578947368,\n", | |
" -78.63157894736842, -76.73684210526316, -74.84210526315789,\n", | |
" -72.94736842105263, -71.05263157894737, -69.15789473684211,\n", | |
" -67.26315789473685, -65.36842105263158, -63.473684210526315,\n", | |
" -61.578947368421055, -59.684210526315795, -57.78947368421053,\n", | |
" -55.89473684210527, -54.0, -52.10526315789474,\n", | |
" -50.21052631578947, -48.31578947368421, -46.42105263157895,\n", | |
" -44.526315789473685, -42.631578947368425, -40.73684210526316,\n", | |
" -38.8421052631579, -36.94736842105264, -35.05263157894737,\n", | |
" -33.15789473684211, -31.263157894736842, -29.368421052631582,\n", | |
" -27.473684210526322, -25.578947368421055, -23.684210526315795,\n", | |
" -21.789473684210535, -19.89473684210526, -18.0,\n", | |
" -16.10526315789474, -14.21052631578948, -12.31578947368422,\n", | |
" -10.421052631578945, -8.526315789473685, -6.631578947368425,\n", | |
" -4.736842105263165, -2.8421052631579045, -0.9473684210526301,\n", | |
" 0.9473684210526301, 2.8421052631578902, 4.73684210526315,\n", | |
" 6.631578947368411, 8.526315789473685, 10.421052631578945,\n", | |
" 12.315789473684205, 14.210526315789465, 16.105263157894726,\n", | |
" 18.0, 19.89473684210526, 21.78947368421052,\n", | |
" 23.68421052631578, 25.57894736842104, 27.473684210526315,\n", | |
" 29.368421052631575, 31.263157894736835, 33.157894736842096,\n", | |
" 35.052631578947356, 36.94736842105263, 38.84210526315789,\n", | |
" 40.73684210526315, 42.63157894736841, 44.52631578947367,\n", | |
" 46.42105263157893, 48.31578947368419, 50.21052631578948,\n", | |
" 52.10526315789474, 54.0, 55.89473684210526,\n", | |
" 57.78947368421052, 59.68421052631578, 61.57894736842104,\n", | |
" 63.4736842105263, 65.36842105263156, 67.26315789473682,\n", | |
" 69.15789473684211, 71.05263157894737, 72.94736842105263,\n", | |
" 74.84210526315789, 76.73684210526315, 78.63157894736841,\n", | |
" 80.52631578947367, 82.42105263157893, 84.31578947368419,\n", | |
" 86.21052631578945, 88.10526315789474, 90.0],\n", | |
" dtype='float64', name='lat'))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>lon</div></div><div class='xr-index-preview'>PandasIndex</div><input type='checkbox' disabled/><label></label><input id='index-cef0efdf-ac6f-4133-a991-f7167a05160e' class='xr-index-data-in' type='checkbox'/><label for='index-cef0efdf-ac6f-4133-a991-f7167a05160e' 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([ 0.0, 2.5, 5.0, 7.5, 10.0, 12.5, 15.0, 17.5, 20.0, 22.5,\n", | |
" ...\n", | |
" 335.0, 337.5, 340.0, 342.5, 345.0, 347.5, 350.0, 352.5, 355.0, 357.5],\n", | |
" dtype='float64', name='lon', length=144))</pre></div></li><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-2029c22a-fe9f-439a-851f-bbc501d51009' class='xr-index-data-in' type='checkbox'/><label for='index-2029c22a-fe9f-439a-851f-bbc501d51009' 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(CFTimeIndex([1850-01-15 12:00:00, 1850-02-14 00:00:00, 1850-03-15 12:00:00,\n", | |
" 1850-04-15 00:00:00, 1850-05-15 12:00:00, 1850-06-15 00:00:00,\n", | |
" 1850-07-15 12:00:00, 1850-08-15 12:00:00, 1850-09-15 00:00:00,\n", | |
" 1850-10-15 12:00:00,\n", | |
" ...\n", | |
" 2014-03-15 12:00:00, 2014-04-15 00:00:00, 2014-05-15 12:00:00,\n", | |
" 2014-06-15 00:00:00, 2014-07-15 12:00:00, 2014-08-15 12:00:00,\n", | |
" 2014-09-15 00:00:00, 2014-10-15 12:00:00, 2014-11-15 00:00:00,\n", | |
" 2014-12-15 12:00:00],\n", | |
" dtype='object', length=1980, calendar='noleap', freq=None))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-1e916038-e94e-442b-bd45-5ea4eefbbdb0' class='xr-section-summary-in' type='checkbox' ><label for='section-1e916038-e94e-442b-bd45-5ea4eefbbdb0' class='xr-section-summary' >Attributes: <span>(46)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>Conventions :</span></dt><dd>CF-1.7 CMIP-6.2</dd><dt><span>DODS_EXTRA.Unlimited_Dimension :</span></dt><dd>time</dd><dt><span>activity_id :</span></dt><dd>CMIP</dd><dt><span>branch_method :</span></dt><dd>standard</dd><dt><span>branch_time_in_child :</span></dt><dd>674885.0</dd><dt><span>branch_time_in_parent :</span></dt><dd>10950.0</dd><dt><span>case_id :</span></dt><dd>1560</dd><dt><span>cesm_casename :</span></dt><dd>b.e21.BHIST.f19_g17.CMIP6-historical-2deg.002</dd><dt><span>contact :</span></dt><dd>[email protected]</dd><dt><span>creation_date :</span></dt><dd>2019-11-05T02:05:46Z</dd><dt><span>data_specs_version :</span></dt><dd>01.00.31</dd><dt><span>experiment :</span></dt><dd>Simulation of recent past (1850 to 2014). Impose changing conditions (consistent with observations). Should be initialised from a point early enough in the pre-industrial control run to ensure that the end of all the perturbed runs branching from the end of this historical run end before the end of the control. Only one ensemble member is requested but modelling groups are strongly encouraged to submit at least three ensemble members of their CMIP historical simulation. </dd><dt><span>experiment_id :</span></dt><dd>historical</dd><dt><span>external_variables :</span></dt><dd>areacella</dd><dt><span>forcing_index :</span></dt><dd>1</dd><dt><span>frequency :</span></dt><dd>mon</dd><dt><span>further_info_url :</span></dt><dd>https://furtherinfo.es-doc.org/CMIP6.NCAR.CESM2-FV2.historical.none.r2i1p1f1</dd><dt><span>grid :</span></dt><dd>native 1.9x2.5 finite volume grid (96x144 latxlon)</dd><dt><span>grid_label :</span></dt><dd>gn</dd><dt><span>initialization_index :</span></dt><dd>1</dd><dt><span>institution :</span></dt><dd>National Center for Atmospheric Research, Climate and Global Dynamics Laboratory, 1850 Table Mesa Drive, Boulder, CO 80305, USA</dd><dt><span>institution_id :</span></dt><dd>NCAR</dd><dt><span>license :</span></dt><dd>CMIP6 model data produced by <The National Center for Atmospheric Research> is licensed under a Creative Commons Attribution-[]ShareAlike 4.0 International License (https://creativecommons.org/licenses/). Consult https://pcmdi.llnl.gov/CMIP6/TermsOfUse for terms of use governing CMIP6 output, including citation requirements and proper acknowledgment. Further information about this data, including some limitations, can be found via the further_info_url (recorded as a global attribute in this file)[]. The data producers and data providers make no warranty, either express or implied, including, but not limited to, warranties of merchantability and fitness for a particular purpose. All liabilities arising from the supply of the information (including any liability arising in negligence) are excluded to the fullest extent permitted by law.</dd><dt><span>mip_era :</span></dt><dd>CMIP6</dd><dt><span>model_doi_url :</span></dt><dd>https://doi.org/10.5065/D67H1H0V</dd><dt><span>nominal_resolution :</span></dt><dd>250 km</dd><dt><span>parent_activity_id :</span></dt><dd>CMIP</dd><dt><span>parent_experiment_id :</span></dt><dd>piControl</dd><dt><span>parent_mip_era :</span></dt><dd>CMIP6</dd><dt><span>parent_source_id :</span></dt><dd>CESM2-FV2</dd><dt><span>parent_time_units :</span></dt><dd>days since 0001-01-01 00:00:00</dd><dt><span>parent_variant_label :</span></dt><dd>r1i1p1f1</dd><dt><span>physics_index :</span></dt><dd>1</dd><dt><span>product :</span></dt><dd>model-output</dd><dt><span>realization_index :</span></dt><dd>2</dd><dt><span>realm :</span></dt><dd>atmos</dd><dt><span>source :</span></dt><dd>CESM2 (2017): atmosphere: CAM6 (1.9x2.5 finite volume grid; 144 x 96 longitude/latitude; 32 levels; top level 2.25 mb); ocean: POP2 (320x384 longitude/latitude; 60 levels; top grid cell 0-10 m); sea_ice: CICE5.1 (same grid as ocean); land: CLM5 1.9x2.5 finite volume grid; 144 x 96 longitude/latitude; 32 levels; top level 2.25 mb); aerosol: MAM4 (1.9x2.5 finite volume grid; 144 x 96 longitude/latitude; 32 levels; top level 2.25 mb); atmoschem: MAM4 (1.9x2.5 finite volume grid; 144 x 96 longitude/latitude; 32 levels; top level 2.25 mb); landIce: CISM2.1; ocnBgchem: MARBL (320x384 longitude/latitude; 60 levels; top grid cell 0-10 m)</dd><dt><span>source_id :</span></dt><dd>CESM2-FV2</dd><dt><span>source_type :</span></dt><dd>AOGCM BGC AER</dd><dt><span>sub_experiment :</span></dt><dd>none</dd><dt><span>sub_experiment_id :</span></dt><dd>none</dd><dt><span>table_id :</span></dt><dd>Amon</dd><dt><span>tracking_id :</span></dt><dd>hdl:21.14100/99cdfde8-5b6d-452b-9b78-62a5048ff496\n", | |
"hdl:21.14100/99cdfde8-5b6d-452b-9b78-62a5048ff496\n", | |
"hdl:21.14100/99cdfde8-5b6d-452b-9b78-62a5048ff496\n", | |
"hdl:21.14100/99cdfde8-5b6d-452b-9b78-62a5048ff496</dd><dt><span>variable_id :</span></dt><dd>tas</dd><dt><span>variant_info :</span></dt><dd>CMIP6 CESM2-FV2 historical experiment (1850-2014) with CAM6-FV2 and interactive land CLM5 at 1.9 degree latitude x 2.5 degree longitude, coupled ocean (POP2) with biogeochemistry (MARBL), interactive sea ice (CICE5.1), and non-evolving land ice (CISM2.1).</dd><dt><span>variant_label :</span></dt><dd>r2i1p1f1</dd></dl></div></li></ul></div></div>" | |
], | |
"text/plain": [ | |
"<xarray.Dataset> Size: 110MB\n", | |
"Dimensions: (time: 1980, lat: 96, lon: 144, nbnd: 2)\n", | |
"Coordinates:\n", | |
" * lat (lat) float64 768B -90.0 -88.11 -86.21 ... 86.21 88.11 90.0\n", | |
" lat_bnds (lat, nbnd) float64 2kB ...\n", | |
" * lon (lon) float64 1kB 0.0 2.5 5.0 7.5 ... 350.0 352.5 355.0 357.5\n", | |
" lon_bnds (lon, nbnd) float64 2kB ...\n", | |
" * time (time) object 16kB 1850-01-15 12:00:00 ... 2014-12-15 12:00:00\n", | |
" time_bnds (time, nbnd) object 32kB ...\n", | |
"Dimensions without coordinates: nbnd\n", | |
"Data variables:\n", | |
" tas (time, lat, lon) float32 109MB ...\n", | |
"Attributes: (12/46)\n", | |
" Conventions: CF-1.7 CMIP-6.2\n", | |
" DODS_EXTRA.Unlimited_Dimension: time\n", | |
" activity_id: CMIP\n", | |
" branch_method: standard\n", | |
" branch_time_in_child: 674885.0\n", | |
" branch_time_in_parent: 10950.0\n", | |
" ... ...\n", | |
" sub_experiment_id: none\n", | |
" table_id: Amon\n", | |
" tracking_id: hdl:21.14100/99cdfde8-5b6d-452b-9b78-62a...\n", | |
" variable_id: tas\n", | |
" variant_info: CMIP6 CESM2-FV2 historical experiment (1...\n", | |
" variant_label: r2i1p1f1" | |
] | |
}, | |
"execution_count": 5, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Specify consolidated=True since .zmetadata exists\n", | |
"ds = xr.open_zarr(mapper, consolidated=True)\n", | |
"\n", | |
"# Check the structure\n", | |
"ds" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"id": "7e60db7c-a1d4-4187-a3fc-d01c7399dd3a", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"<matplotlib.collections.QuadMesh at 0x2b4991450>" | |
] | |
}, | |
"execution_count": 9, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAk4AAAHFCAYAAAAExnZzAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAA0LpJREFUeJzsnXl8FdX5/z9z1ySQBEIIAcGAG4pgVUAB/YEom1URacWqFRDUWllERCtFBbUI4obSKlUxolRxA8WqCFSgRaRFxK/iXsWCSGQREsh2l5nfH/fOzHO452TuJDe5iXner1deTM6cOXNm5sxwMs9nPo9mGIYBhmEYhmEYxhFPujvAMAzDMAzTVOCJE8MwDMMwTJLwxIlhGIZhGCZJeOLEMAzDMAyTJDxxYhiGYRiGSRKeODEMwzAMwyQJT5wYhmEYhmGShCdODMMwDMMwScITJ4ZhGIZhmCThiROTUjZu3IhZs2bh4MGDCevOOeccnHPOOQ3ep4bgq6++wrRp09CzZ0+0atUKeXl5OOuss/DKK69I6+/Zswdjx45Ffn4+srKy0LdvX/zjH/+Q1l2zZg369u2LrKws5OfnY+zYsdizZ49Q57vvvoOmadKfpUuXJn0cyfbr73//O0aPHo0ePXrA7/dD07Sk92Eyf/58jBw5El26dIGmacqx8cwzzyiPraSkxHE/n376KW644Qb07dsXLVq0gKZpWLduXUK93bt34/bbb0ffvn2Rn5+PnJwc9OzZE0888QSi0WjSx/Xtt99i5MiRaNWqFVq2bInBgwfjww8/lNZdunQpTj31VGRkZKBDhw6YMmUKDh8+3Cj3xTBMHINhUsj9999vADC2b9+esO7TTz81Pv3004bvVAOwYMEC48QTTzRmz55trFq1ynjrrbeMMWPGGACMu+66S6hbVVVldO/e3ejYsaOxZMkSY9WqVcbFF19s+Hw+Y926dULddevWGT6fz7j44ouNVatWGUuWLDGOOuooo3v37kZVVZVVb/v27QYAY9KkScb7778v/Ozbty+pY3DTr3HjxhnHH3+8MWrUKKNnz55GbR4lXbt2NU4//XRj3LhxRtu2bY0BAwZI6xUXFxsAjOLi4oRjC4VCjvt55plnjPbt2xu//OUvjYsuusgAYKxduzah3htvvGF06tTJmDFjhvHmm28aq1atMm666SbD4/EYV199dVLHtGfPHqNDhw7GySefbLz66qvGm2++aZx99tlGdna28cUXXwh1lyxZYgAwrrnmGuPdd981Fi5caOTm5hqDBw9udPtiGMaGJ05MSqlp4vRzZu/evYau6wnlF1xwgZGVlSVMcv7yl78YAIyNGzdaZeFw2OjWrZtxxhlnCNv37t3b6NatmxEOh62y9957zwBgPPbYY1aZOXG6//77a30MbvoVjUat5QkTJtRq4kTbOPnkkx0nTps3b3a9jyP38/LLLysnTj/99JN0ImYe344dOxz3dcsttxh+v9/47rvvrLLS0lIjPz/fGDVqlFUWiUSM9u3bG0OGDBG2/9vf/mYAMN56661GtS+GYWw4VMekjFmzZuGWW24BACv8QsMiR4bqzPDS/fffj/vuuw+dO3dGZmYmzjnnHHz11VcIh8O47bbb0KFDB+Tm5uKSSy5JCFEBwIsvvmiFYVq2bImhQ4di69atDXHIFvn5+dJw1RlnnIGKigr89NNPVtny5cvRtWtX9O3b1yrz+Xz47W9/i//85z/YtWsXAGDXrl3YvHkzrrrqKvh8Pqtuv379cMIJJ2D58uUpPYZk+wUAHk/dHx2paCOV+2ndujX8fn9C+RlnnAEA+P777x3bWL58Oc4991wUFRVZZTk5ORg5ciTeeOMNRCIRAMCmTZuwe/duXH311cL2l156KVq2bJnUtW3IfTEMY8MTJyZlXHPNNZg0aRIAYNmyZXj//ffx/vvv4/TTT69xu7/85S9477338Je//AVPPfUUvvjiC1x00UUYP3489u7di6effhrz5s3DmjVrcM011wjb3nvvvbj88svRrVs3vPTSS3juuedw6NAh/L//9//w2WefOfY5Eokk9WMYRq3Oydq1a9G2bVsUFBRYZdu2bcMpp5ySUNcs+/TTT616tPzIuuZ6yty5cxEIBJCVlYWzzz4bK1asSLqvyfYrXVx44YXwer3Iy8vDyJEjpcdfH7z77rvw+Xw44YQThPIjdVmVlZX45ptvlOewsrIS3377LQD1tfX7/TjxxBMTjq0h98UwTM34nKswTHJ07NgRRx99NADgtNNOQ+fOnZParlWrVnjttdesNwP79u3DlClTcOKJJ+L111+36n3xxReYP38+ysrKkJOTg507d2LmzJmYOHEiHn30Uave4MGDcfzxx+Ouu+7Ciy++qNzvd999hy5duiTVx7Vr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", | |
"text/plain": [ | |
"<Figure size 640x480 with 2 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"# ds.tas.hvplot(\n", | |
"# x='lon',\n", | |
"# y='lat',\n", | |
"# cmap='viridis',\n", | |
"# rasterize=True,\n", | |
"# geo=True,\n", | |
"# tiles='OSM',\n", | |
"# widget_type=\"scrubber\",\n", | |
"# widget_location=\"bottom\",\n", | |
"# frame_width=700,\n", | |
"# alpha=0.7\n", | |
"# )\n", | |
"\n", | |
"# Plot a single timestep\n", | |
"ds.tas.sel(time='2005-01').squeeze().plot()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"id": "93166ec8-170e-48e6-814e-9c7f0e46cf15", | |
"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.13.5" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment