{ "cells": [ { "attachments": { "7cd14b6e-768b-49b4-b3e6-05d6b7817dfa.png": { "image/png": "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" } }, "cell_type": "markdown", "id": "bd373406-4226-4d81-bd20-5c3b4b672c58", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "# Data Access Methods\n", "\n", "**Marty Hidas**\n", "\n", "**Australian Ocean Data Network ([AODN](https://imos.org.au/facilities/aodn))**\n", "\n", "![IMOS_logo-wide-_Colour.png](attachment:7cd14b6e-768b-49b4-b3e6-05d6b7817dfa.png)" ] }, { "cell_type": "markdown", "id": "e144fd67-cb73-42a4-b9f9-675805064985", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "This tutorial demostrates several ways data can be accessed remotely and loaded into a Python environment, including\n", "\n", "* OPeNDAP\n", "* OGC Web Feature Service (WFS)\n", "* direct access to files on cloud storage (AWS S3)\n", "* cloud-optimised formats Zarr & Parquet" ] }, { "attachments": { "232304c2-a998-4f1e-b192-0d6b01fc7b3c.png": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAATgAAADICAYAAAB8mv3HAAAAiHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjaVY7ZDcQwCET/qSIlcJmjnJWVSOlgy18cW8r6fcAMQgNwfu8LjgGhgjYPSzMsNDX5UyJwIojESKNXnawuVIrLLg/CU1iGo76LqrjRxMIuV3dr1q1zpfMp8lQShWdrhI1X8u9iLCX7vMd+AH76Li0eDUuSCwAACgZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgIGV4aWY6UGl4ZWxYRGltZW5zaW9uPSIzMTIiCiAgIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSIyMDAiCiAgIHRpZmY6SW1hZ2VXaWR0aD0iMzEyIgogICB0aWZmOkltYWdlSGVpZ2h0PSIyMDAiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiLz4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg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" }, "3f3ccd2a-a604-4d20-8edf-851dfd72fea2.png": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQoAAADICAYAAAAQnK/CAAAAiXpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjaVY7ZDcQwCET/qSIlcJmjnMhKpO1gyw+OLe36fcAMQgNwfT83HANCBW0elmZYaGryWSJwIojESKNXnawuVIrLLg/CU1iGo/4WVXGjiYXdru7WrFvnSudL5K0kCu/WCBuv5N/lcynZ5z32A/AAACotRK8ud3kAAAoGaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICBleGlmOlBpeGVsWERpbWVuc2lvbj0iMjY2IgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMjAwIgogICB0aWZmOkltYWdlV2lkdGg9IjI2NiIKICAgdGlmZjpJbWFnZUhlaWdodD0iMjAwIgogICB0aWZmOk9yaWVudGF0aW9uPSIxIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg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" } }, "cell_type": "markdown", "id": "dc570fd2-eccc-48bb-ac7a-ee87cae7516b", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "The examples here use data from Australia's Integrated Marine Observing System (IMOS).\n", "These can be browsed and accessed via the [AODN Portal](https://portal.aodn.org.au/), the [IMOS Metadata Catalogue](https://catalogue-imos.aodn.org.au/), or the [IMOS THREDDS Server](https://thredds.aodn.org.au/thredds/catalog/IMOS/catalog.html). Each data collection's metadata record includes more specific links to the relevant THREDDS folders, and WFS services.\n", "\n", "![AODN_Portal.png](attachment:232304c2-a998-4f1e-b192-0d6b01fc7b3c.png) ![catalogue-imos.png](attachment:3f3ccd2a-a604-4d20-8edf-851dfd72fea2.png)" ] }, { "cell_type": "code", "execution_count": 1, "id": "fbaa61b0-c4b0-4b10-be7b-e5f5d666ac29", "metadata": { "slideshow": { "slide_type": "skip" }, "tags": [] }, "outputs": [ { "data": { "application/javascript": [ "(function(root) {\n", " function now() {\n", " return new Date();\n", " }\n", "\n", " var force = true;\n", " var py_version = '3.2.1'.replace('rc', '-rc.').replace('.dev', '-dev.');\n", " var is_dev = py_version.indexOf(\"+\") !== -1 || py_version.indexOf(\"-\") !== -1;\n", " var reloading = false;\n", " var Bokeh = root.Bokeh;\n", " var bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n", "\n", " if (typeof (root._bokeh_timeout) === \"undefined\" || force) {\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", " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", " return null;\n", " }\n", " if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n", " run_callbacks();\n", " return null;\n", " }\n", " if (!reloading) {\n", " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\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() {\n", " console.error(\"failed to load \" + url);\n", " }\n", "\n", " var skip = [];\n", " if (window.requirejs) {\n", " window.requirejs.config({'packages': {}, 'paths': {'jspanel': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/jspanel', 'jspanel-modal': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal', 'jspanel-tooltip': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip', 'jspanel-hint': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint', 'jspanel-layout': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout', 'jspanel-contextmenu': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu', 'jspanel-dock': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock', 'gridstack': 'https://cdn.jsdelivr.net/npm/gridstack@7.2.3/dist/gridstack-all', 'notyf': 'https://cdn.jsdelivr.net/npm/notyf@3/notyf.min'}, 'shim': {'jspanel': {'exports': 'jsPanel'}, 'gridstack': {'exports': 'GridStack'}}});\n", " require([\"jspanel\"], function(jsPanel) {\n", "\twindow.jsPanel = jsPanel\n", "\ton_load()\n", " })\n", " require([\"jspanel-modal\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-tooltip\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-hint\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-layout\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-contextmenu\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-dock\"], function() {\n", "\ton_load()\n", " })\n", " require([\"gridstack\"], function(GridStack) {\n", "\twindow.GridStack = GridStack\n", "\ton_load()\n", " })\n", " require([\"notyf\"], function() {\n", "\ton_load()\n", " })\n", " root._bokeh_is_loading = css_urls.length + 9;\n", " } else {\n", " root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n", " }\n", "\n", " var existing_stylesheets = []\n", " var links = document.getElementsByTagName('link')\n", " for (var i = 0; i < links.length; i++) {\n", " var link = links[i]\n", " if (link.href != null) {\n", "\texisting_stylesheets.push(link.href)\n", " }\n", " }\n", " for (var i = 0; i < css_urls.length; i++) {\n", " var url = css_urls[i];\n", " if (existing_stylesheets.indexOf(url) !== -1) {\n", "\ton_load()\n", "\tcontinue;\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", " } if (((window['jsPanel'] !== undefined) && (!(window['jsPanel'] instanceof HTMLElement))) || window.requirejs) {\n", " var urls = ['https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock.js'];\n", " for (var i = 0; i < urls.length; i++) {\n", " skip.push(urls[i])\n", " }\n", " } if (((window['GridStack'] !== undefined) && (!(window['GridStack'] instanceof HTMLElement))) || window.requirejs) {\n", " var urls = ['https://cdn.holoviz.org/panel/1.2.1/dist/bundled/gridstack/gridstack@7.2.3/dist/gridstack-all.js'];\n", " for (var i = 0; i < urls.length; i++) {\n", " skip.push(urls[i])\n", " }\n", " } if (((window['Notyf'] !== undefined) && (!(window['Notyf'] instanceof HTMLElement))) || window.requirejs) {\n", " var urls = ['https://cdn.holoviz.org/panel/1.2.1/dist/bundled/notificationarea/notyf@3/notyf.min.js'];\n", " for (var i = 0; i < urls.length; i++) {\n", " skip.push(urls[i])\n", " }\n", " } var existing_scripts = []\n", " var scripts = document.getElementsByTagName('script')\n", " for (var i = 0; i < scripts.length; i++) {\n", " var script = scripts[i]\n", " if (script.src != null) {\n", "\texisting_scripts.push(script.src)\n", " }\n", " }\n", " for (var i = 0; i < js_urls.length; i++) {\n", " var url = js_urls[i];\n", " if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n", "\tif (!window.requirejs) {\n", "\t on_load();\n", "\t}\n", "\tcontinue;\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", " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.head.appendChild(element);\n", " }\n", " for (var i = 0; i < js_modules.length; i++) {\n", " var url = js_modules[i];\n", " if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n", "\tif (!window.requirejs) {\n", "\t on_load();\n", "\t}\n", "\tcontinue;\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", " var url = js_exports[name];\n", " if (skip.indexOf(url) >= 0 || root[name] != null) {\n", "\tif (!window.requirejs) {\n", "\t on_load();\n", "\t}\n", "\tcontinue;\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", " var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.2.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.1.min.js\", \"https://cdn.holoviz.org/panel/1.2.1/dist/panel.min.js\"];\n", " var js_modules = [];\n", " var js_exports = {};\n", " var css_urls = [];\n", " var 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 (var i = 0; i < inline_js.length; i++) {\n", " inline_js[i].call(root, root.Bokeh);\n", " }\n", " // Cache old bokeh versions\n", " if (Bokeh != undefined && !reloading) {\n", "\tvar NewBokeh = root.Bokeh;\n", "\tif (Bokeh.versions === undefined) {\n", "\t Bokeh.versions = new Map();\n", "\t}\n", "\tif (NewBokeh.version !== Bokeh.version) {\n", "\t Bokeh.versions.set(NewBokeh.version, NewBokeh)\n", "\t}\n", "\troot.Bokeh = Bokeh;\n", " }} else if (Date.now() < root._bokeh_timeout) {\n", " setTimeout(run_inline_js, 100);\n", " } else if (!root._bokeh_failed_load) {\n", " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n", " root._bokeh_failed_load = true;\n", " }\n", " 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", " root._bokeh_is_initializing = false;\n", " root._bokeh_onload_callbacks = undefined;\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", " Bokeh = root.Bokeh;\n", " bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n", " root._bokeh_is_initializing = true\n", " root._bokeh_onload_callbacks = []\n", " if (!reloading && (!bokeh_loaded || is_dev)) {\n", "\troot.Bokeh = undefined;\n", " }\n", " load_libs(css_urls, js_urls, js_modules, js_exports, function() {\n", "\tconsole.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n", "\trun_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 var force = true;\n var py_version = '3.2.1'.replace('rc', '-rc.').replace('.dev', '-dev.');\n var is_dev = py_version.indexOf(\"+\") !== -1 || py_version.indexOf(\"-\") !== -1;\n var reloading = false;\n var Bokeh = root.Bokeh;\n var bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n\n if (typeof (root._bokeh_timeout) === \"undefined\" || force) {\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 console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n run_callbacks();\n return null;\n }\n if (!reloading) {\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\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() {\n console.error(\"failed to load \" + url);\n }\n\n var skip = [];\n if (window.requirejs) {\n window.requirejs.config({'packages': {}, 'paths': {'jspanel': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/jspanel', 'jspanel-modal': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal', 'jspanel-tooltip': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip', 'jspanel-hint': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint', 'jspanel-layout': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout', 'jspanel-contextmenu': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu', 'jspanel-dock': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock', 'gridstack': 'https://cdn.jsdelivr.net/npm/gridstack@7.2.3/dist/gridstack-all', 'notyf': 'https://cdn.jsdelivr.net/npm/notyf@3/notyf.min'}, 'shim': {'jspanel': {'exports': 'jsPanel'}, 'gridstack': {'exports': 'GridStack'}}});\n require([\"jspanel\"], function(jsPanel) {\n\twindow.jsPanel = jsPanel\n\ton_load()\n })\n require([\"jspanel-modal\"], function() {\n\ton_load()\n })\n require([\"jspanel-tooltip\"], function() {\n\ton_load()\n })\n require([\"jspanel-hint\"], function() {\n\ton_load()\n })\n require([\"jspanel-layout\"], function() {\n\ton_load()\n })\n require([\"jspanel-contextmenu\"], function() {\n\ton_load()\n })\n require([\"jspanel-dock\"], function() {\n\ton_load()\n })\n require([\"gridstack\"], function(GridStack) {\n\twindow.GridStack = GridStack\n\ton_load()\n })\n require([\"notyf\"], function() {\n\ton_load()\n })\n root._bokeh_is_loading = css_urls.length + 9;\n } else {\n root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n }\n\n var existing_stylesheets = []\n var links = document.getElementsByTagName('link')\n for (var i = 0; i < links.length; i++) {\n var link = links[i]\n if (link.href != null) {\n\texisting_stylesheets.push(link.href)\n }\n }\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n if (existing_stylesheets.indexOf(url) !== -1) {\n\ton_load()\n\tcontinue;\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 } if (((window['jsPanel'] !== undefined) && (!(window['jsPanel'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } if (((window['GridStack'] !== undefined) && (!(window['GridStack'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.2.1/dist/bundled/gridstack/gridstack@7.2.3/dist/gridstack-all.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } if (((window['Notyf'] !== undefined) && (!(window['Notyf'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.2.1/dist/bundled/notificationarea/notyf@3/notyf.min.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } var existing_scripts = []\n var scripts = document.getElementsByTagName('script')\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i]\n if (script.src != null) {\n\texisting_scripts.push(script.src)\n }\n }\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\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 console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (var i = 0; i < js_modules.length; i++) {\n var url = js_modules[i];\n if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\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 var url = js_exports[name];\n if (skip.indexOf(url) >= 0 || root[name] != null) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\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 var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.2.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.1.min.js\", \"https://cdn.holoviz.org/panel/1.2.1/dist/panel.min.js\"];\n var js_modules = [];\n var js_exports = {};\n var css_urls = [];\n var 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 (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n // Cache old bokeh versions\n if (Bokeh != undefined && !reloading) {\n\tvar NewBokeh = root.Bokeh;\n\tif (Bokeh.versions === undefined) {\n\t Bokeh.versions = new Map();\n\t}\n\tif (NewBokeh.version !== Bokeh.version) {\n\t Bokeh.versions.set(NewBokeh.version, NewBokeh)\n\t}\n\troot.Bokeh = Bokeh;\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n }\n 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 root._bokeh_is_initializing = false;\n root._bokeh_onload_callbacks = undefined;\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 Bokeh = root.Bokeh;\n bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n root._bokeh_is_initializing = true\n root._bokeh_onload_callbacks = []\n if (!reloading && (!bokeh_loaded || is_dev)) {\n\troot.Bokeh = undefined;\n }\n load_libs(css_urls, js_urls, js_modules, js_exports, function() {\n\tconsole.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n\trun_inline_js();\n });\n }\n }\n // Give older versions of the autoload script a head-start to ensure\n // they initialize before we start loading newer version.\n setTimeout(load_or_wait, 100)\n}(window));" }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", "if ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n", " window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n", "}\n", "\n", "\n", " function JupyterCommManager() {\n", " }\n", "\n", " JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n", " if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n", " var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n", " comm_manager.register_target(comm_id, function(comm) {\n", " comm.on_msg(msg_handler);\n", " });\n", " } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n", " window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n", " comm.onMsg = msg_handler;\n", " });\n", " } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n", " google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n", " var messages = comm.messages[Symbol.asyncIterator]();\n", " function processIteratorResult(result) {\n", " var message = result.value;\n", " console.log(message)\n", " var content = {data: message.data, comm_id};\n", " var buffers = []\n", " for (var buffer of message.buffers || []) {\n", " buffers.push(new DataView(buffer))\n", " }\n", " var metadata = message.metadata || {};\n", " var msg = {content, buffers, metadata}\n", " msg_handler(msg);\n", " return messages.next().then(processIteratorResult);\n", " }\n", " return messages.next().then(processIteratorResult);\n", " })\n", " }\n", " }\n", "\n", " JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n", " if (comm_id in window.PyViz.comms) {\n", " return window.PyViz.comms[comm_id];\n", " } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n", " var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n", " var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n", " if (msg_handler) {\n", " comm.on_msg(msg_handler);\n", " }\n", " } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n", " var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n", " comm.open();\n", " if (msg_handler) {\n", " comm.onMsg = msg_handler;\n", " }\n", " } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n", " var comm_promise = google.colab.kernel.comms.open(comm_id)\n", " comm_promise.then((comm) => {\n", " window.PyViz.comms[comm_id] = comm;\n", " if (msg_handler) {\n", " var messages = comm.messages[Symbol.asyncIterator]();\n", " function processIteratorResult(result) {\n", " var message = result.value;\n", " var content = {data: message.data};\n", " var metadata = message.metadata || {comm_id};\n", " var msg = {content, metadata}\n", " msg_handler(msg);\n", " return messages.next().then(processIteratorResult);\n", " }\n", " return messages.next().then(processIteratorResult);\n", " }\n", " }) \n", " var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n", " return comm_promise.then((comm) => {\n", " comm.send(data, metadata, buffers, disposeOnDone);\n", " });\n", " };\n", " var comm = {\n", " send: sendClosure\n", " };\n", " }\n", " window.PyViz.comms[comm_id] = comm;\n", " return comm;\n", " }\n", " window.PyViz.comm_manager = new JupyterCommManager();\n", " \n", "\n", "\n", "var JS_MIME_TYPE = 'application/javascript';\n", "var HTML_MIME_TYPE = 'text/html';\n", "var EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\n", "var CLASS_NAME = 'output';\n", "\n", "/**\n", " * Render data to the DOM node\n", " */\n", "function render(props, node) {\n", " var div = document.createElement(\"div\");\n", " var script = document.createElement(\"script\");\n", " node.appendChild(div);\n", " node.appendChild(script);\n", "}\n", "\n", "/**\n", " * Handle when a new output is added\n", " */\n", "function handle_add_output(event, handle) {\n", " var output_area = handle.output_area;\n", " var output = handle.output;\n", " if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n", " return\n", " }\n", " var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", " var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", " if (id !== undefined) {\n", " var nchildren = toinsert.length;\n", " var html_node = toinsert[nchildren-1].children[0];\n", " html_node.innerHTML = output.data[HTML_MIME_TYPE];\n", " var scripts = [];\n", " var nodelist = html_node.querySelectorAll(\"script\");\n", " for (var i in nodelist) {\n", " if (nodelist.hasOwnProperty(i)) {\n", " scripts.push(nodelist[i])\n", " }\n", " }\n", "\n", " scripts.forEach( function (oldScript) {\n", " var newScript = document.createElement(\"script\");\n", " var attrs = [];\n", " var nodemap = oldScript.attributes;\n", " for (var j in nodemap) {\n", " if (nodemap.hasOwnProperty(j)) {\n", " attrs.push(nodemap[j])\n", " }\n", " }\n", " attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n", " newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n", " oldScript.parentNode.replaceChild(newScript, oldScript);\n", " });\n", " if (JS_MIME_TYPE in output.data) {\n", " toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n", " }\n", " output_area._hv_plot_id = id;\n", " if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n", " window.PyViz.plot_index[id] = Bokeh.index[id];\n", " } else {\n", " window.PyViz.plot_index[id] = null;\n", " }\n", " } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", " var bk_div = document.createElement(\"div\");\n", " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", " var script_attrs = bk_div.children[0].attributes;\n", " for (var i = 0; i < script_attrs.length; i++) {\n", " toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n", " }\n", " // store reference to server id on output_area\n", " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", " }\n", "}\n", "\n", "/**\n", " * Handle when an output is cleared or removed\n", " */\n", "function handle_clear_output(event, handle) {\n", " var id = handle.cell.output_area._hv_plot_id;\n", " var server_id = handle.cell.output_area._bokeh_server_id;\n", " if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n", " var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n", " if (server_id !== null) {\n", " comm.send({event_type: 'server_delete', 'id': server_id});\n", " return;\n", " } else if (comm !== null) {\n", " comm.send({event_type: 'delete', 'id': id});\n", " }\n", " delete PyViz.plot_index[id];\n", " if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n", " var doc = window.Bokeh.index[id].model.document\n", " doc.clear();\n", " const i = window.Bokeh.documents.indexOf(doc);\n", " if (i > -1) {\n", " window.Bokeh.documents.splice(i, 1);\n", " }\n", " }\n", "}\n", "\n", "/**\n", " * Handle kernel restart event\n", " */\n", "function handle_kernel_cleanup(event, handle) {\n", " delete PyViz.comms[\"hv-extension-comm\"];\n", " window.PyViz.plot_index = {}\n", "}\n", "\n", "/**\n", " * Handle update_display_data messages\n", " */\n", "function handle_update_output(event, handle) {\n", " handle_clear_output(event, {cell: {output_area: handle.output_area}})\n", " handle_add_output(event, handle)\n", "}\n", "\n", "function register_renderer(events, OutputArea) {\n", " function append_mime(data, metadata, element) {\n", " // create a DOM node to render to\n", " var toinsert = this.create_output_subarea(\n", " metadata,\n", " CLASS_NAME,\n", " EXEC_MIME_TYPE\n", " );\n", " this.keyboard_manager.register_events(toinsert);\n", " // Render to node\n", " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", " render(props, toinsert[0]);\n", " element.append(toinsert);\n", " return toinsert\n", " }\n", "\n", " events.on('output_added.OutputArea', handle_add_output);\n", " events.on('output_updated.OutputArea', handle_update_output);\n", " events.on('clear_output.CodeCell', handle_clear_output);\n", " events.on('delete.Cell', handle_clear_output);\n", " events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n", "\n", " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", " safe: true,\n", " index: 0\n", " });\n", "}\n", "\n", "if (window.Jupyter !== undefined) {\n", " try {\n", " var events = require('base/js/events');\n", " var OutputArea = require('notebook/js/outputarea').OutputArea;\n", " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", " register_renderer(events, OutputArea);\n", " }\n", " } catch(err) {\n", " }\n", "}\n" ], "application/vnd.holoviews_load.v0+json": "\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n }) \n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n" }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function now() {\n", " return new Date();\n", " }\n", "\n", " var force = true;\n", " var py_version = '3.2.1'.replace('rc', '-rc.').replace('.dev', '-dev.');\n", " var is_dev = py_version.indexOf(\"+\") !== -1 || py_version.indexOf(\"-\") !== -1;\n", " var reloading = true;\n", " var Bokeh = root.Bokeh;\n", " var bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n", "\n", " if (typeof (root._bokeh_timeout) === \"undefined\" || force) {\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", " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", " return null;\n", " }\n", " if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n", " run_callbacks();\n", " return null;\n", " }\n", " if (!reloading) {\n", " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\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() {\n", " console.error(\"failed to load \" + url);\n", " }\n", "\n", " var skip = [];\n", " if (window.requirejs) {\n", " window.requirejs.config({'packages': {}, 'paths': {'jspanel': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/jspanel', 'jspanel-modal': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal', 'jspanel-tooltip': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip', 'jspanel-hint': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint', 'jspanel-layout': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout', 'jspanel-contextmenu': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu', 'jspanel-dock': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock', 'gridstack': 'https://cdn.jsdelivr.net/npm/gridstack@7.2.3/dist/gridstack-all', 'notyf': 'https://cdn.jsdelivr.net/npm/notyf@3/notyf.min'}, 'shim': {'jspanel': {'exports': 'jsPanel'}, 'gridstack': {'exports': 'GridStack'}}});\n", " require([\"jspanel\"], function(jsPanel) {\n", "\twindow.jsPanel = jsPanel\n", "\ton_load()\n", " })\n", " require([\"jspanel-modal\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-tooltip\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-hint\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-layout\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-contextmenu\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-dock\"], function() {\n", "\ton_load()\n", " })\n", " require([\"gridstack\"], function(GridStack) {\n", "\twindow.GridStack = GridStack\n", "\ton_load()\n", " })\n", " require([\"notyf\"], function() {\n", "\ton_load()\n", " })\n", " root._bokeh_is_loading = css_urls.length + 9;\n", " } else {\n", " root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n", " }\n", "\n", " var existing_stylesheets = []\n", " var links = document.getElementsByTagName('link')\n", " for (var i = 0; i < links.length; i++) {\n", " var link = links[i]\n", " if (link.href != null) {\n", "\texisting_stylesheets.push(link.href)\n", " }\n", " }\n", " for (var i = 0; i < css_urls.length; i++) {\n", " var url = css_urls[i];\n", " if (existing_stylesheets.indexOf(url) !== -1) {\n", "\ton_load()\n", "\tcontinue;\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", " } if (((window['jsPanel'] !== undefined) && (!(window['jsPanel'] instanceof HTMLElement))) || window.requirejs) {\n", " var urls = ['https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock.js'];\n", " for (var i = 0; i < urls.length; i++) {\n", " skip.push(urls[i])\n", " }\n", " } if (((window['GridStack'] !== undefined) && (!(window['GridStack'] instanceof HTMLElement))) || window.requirejs) {\n", " var urls = ['https://cdn.holoviz.org/panel/1.2.1/dist/bundled/gridstack/gridstack@7.2.3/dist/gridstack-all.js'];\n", " for (var i = 0; i < urls.length; i++) {\n", " skip.push(urls[i])\n", " }\n", " } if (((window['Notyf'] !== undefined) && (!(window['Notyf'] instanceof HTMLElement))) || window.requirejs) {\n", " var urls = ['https://cdn.holoviz.org/panel/1.2.1/dist/bundled/notificationarea/notyf@3/notyf.min.js'];\n", " for (var i = 0; i < urls.length; i++) {\n", " skip.push(urls[i])\n", " }\n", " } var existing_scripts = []\n", " var scripts = document.getElementsByTagName('script')\n", " for (var i = 0; i < scripts.length; i++) {\n", " var script = scripts[i]\n", " if (script.src != null) {\n", "\texisting_scripts.push(script.src)\n", " }\n", " }\n", " for (var i = 0; i < js_urls.length; i++) {\n", " var url = js_urls[i];\n", " if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n", "\tif (!window.requirejs) {\n", "\t on_load();\n", "\t}\n", "\tcontinue;\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", " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.head.appendChild(element);\n", " }\n", " for (var i = 0; i < js_modules.length; i++) {\n", " var url = js_modules[i];\n", " if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n", "\tif (!window.requirejs) {\n", "\t on_load();\n", "\t}\n", "\tcontinue;\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", " var url = js_exports[name];\n", " if (skip.indexOf(url) >= 0 || root[name] != null) {\n", "\tif (!window.requirejs) {\n", "\t on_load();\n", "\t}\n", "\tcontinue;\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", " var js_urls = [\"https://cdn.jsdelivr.net/npm/@holoviz/geoviews@1.10.1/dist/geoviews.min.js\"];\n", " var js_modules = [];\n", " var js_exports = {};\n", " var css_urls = [];\n", " var 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 (var i = 0; i < inline_js.length; i++) {\n", " inline_js[i].call(root, root.Bokeh);\n", " }\n", " // Cache old bokeh versions\n", " if (Bokeh != undefined && !reloading) {\n", "\tvar NewBokeh = root.Bokeh;\n", "\tif (Bokeh.versions === undefined) {\n", "\t Bokeh.versions = new Map();\n", "\t}\n", "\tif (NewBokeh.version !== Bokeh.version) {\n", "\t Bokeh.versions.set(NewBokeh.version, NewBokeh)\n", "\t}\n", "\troot.Bokeh = Bokeh;\n", " }} else if (Date.now() < root._bokeh_timeout) {\n", " setTimeout(run_inline_js, 100);\n", " } else if (!root._bokeh_failed_load) {\n", " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n", " root._bokeh_failed_load = true;\n", " }\n", " 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", " root._bokeh_is_initializing = false;\n", " root._bokeh_onload_callbacks = undefined;\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", " Bokeh = root.Bokeh;\n", " bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n", " root._bokeh_is_initializing = true\n", " root._bokeh_onload_callbacks = []\n", " if (!reloading && (!bokeh_loaded || is_dev)) {\n", "\troot.Bokeh = undefined;\n", " }\n", " load_libs(css_urls, js_urls, js_modules, js_exports, function() {\n", "\tconsole.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n", "\trun_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 var force = true;\n var py_version = '3.2.1'.replace('rc', '-rc.').replace('.dev', '-dev.');\n var is_dev = py_version.indexOf(\"+\") !== -1 || py_version.indexOf(\"-\") !== -1;\n var reloading = true;\n var Bokeh = root.Bokeh;\n var bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n\n if (typeof (root._bokeh_timeout) === \"undefined\" || force) {\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 console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n run_callbacks();\n return null;\n }\n if (!reloading) {\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\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() {\n console.error(\"failed to load \" + url);\n }\n\n var skip = [];\n if (window.requirejs) {\n window.requirejs.config({'packages': {}, 'paths': {'jspanel': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/jspanel', 'jspanel-modal': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal', 'jspanel-tooltip': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip', 'jspanel-hint': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint', 'jspanel-layout': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout', 'jspanel-contextmenu': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu', 'jspanel-dock': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock', 'gridstack': 'https://cdn.jsdelivr.net/npm/gridstack@7.2.3/dist/gridstack-all', 'notyf': 'https://cdn.jsdelivr.net/npm/notyf@3/notyf.min'}, 'shim': {'jspanel': {'exports': 'jsPanel'}, 'gridstack': {'exports': 'GridStack'}}});\n require([\"jspanel\"], function(jsPanel) {\n\twindow.jsPanel = jsPanel\n\ton_load()\n })\n require([\"jspanel-modal\"], function() {\n\ton_load()\n })\n require([\"jspanel-tooltip\"], function() {\n\ton_load()\n })\n require([\"jspanel-hint\"], function() {\n\ton_load()\n })\n require([\"jspanel-layout\"], function() {\n\ton_load()\n })\n require([\"jspanel-contextmenu\"], function() {\n\ton_load()\n })\n require([\"jspanel-dock\"], function() {\n\ton_load()\n })\n require([\"gridstack\"], function(GridStack) {\n\twindow.GridStack = GridStack\n\ton_load()\n })\n require([\"notyf\"], function() {\n\ton_load()\n })\n root._bokeh_is_loading = css_urls.length + 9;\n } else {\n root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n }\n\n var existing_stylesheets = []\n var links = document.getElementsByTagName('link')\n for (var i = 0; i < links.length; i++) {\n var link = links[i]\n if (link.href != null) {\n\texisting_stylesheets.push(link.href)\n }\n }\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n if (existing_stylesheets.indexOf(url) !== -1) {\n\ton_load()\n\tcontinue;\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 } if (((window['jsPanel'] !== undefined) && (!(window['jsPanel'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } if (((window['GridStack'] !== undefined) && (!(window['GridStack'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.2.1/dist/bundled/gridstack/gridstack@7.2.3/dist/gridstack-all.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } if (((window['Notyf'] !== undefined) && (!(window['Notyf'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.2.1/dist/bundled/notificationarea/notyf@3/notyf.min.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } var existing_scripts = []\n var scripts = document.getElementsByTagName('script')\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i]\n if (script.src != null) {\n\texisting_scripts.push(script.src)\n }\n }\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\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 console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (var i = 0; i < js_modules.length; i++) {\n var url = js_modules[i];\n if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\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 var url = js_exports[name];\n if (skip.indexOf(url) >= 0 || root[name] != null) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\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 var js_urls = [\"https://cdn.jsdelivr.net/npm/@holoviz/geoviews@1.10.1/dist/geoviews.min.js\"];\n var js_modules = [];\n var js_exports = {};\n var css_urls = [];\n var 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 (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n // Cache old bokeh versions\n if (Bokeh != undefined && !reloading) {\n\tvar NewBokeh = root.Bokeh;\n\tif (Bokeh.versions === undefined) {\n\t Bokeh.versions = new Map();\n\t}\n\tif (NewBokeh.version !== Bokeh.version) {\n\t Bokeh.versions.set(NewBokeh.version, NewBokeh)\n\t}\n\troot.Bokeh = Bokeh;\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n }\n 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 root._bokeh_is_initializing = false;\n root._bokeh_onload_callbacks = undefined;\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 Bokeh = root.Bokeh;\n bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n root._bokeh_is_initializing = true\n root._bokeh_onload_callbacks = []\n if (!reloading && (!bokeh_loaded || is_dev)) {\n\troot.Bokeh = undefined;\n }\n load_libs(css_urls, js_urls, js_modules, js_exports, function() {\n\tconsole.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n\trun_inline_js();\n });\n }\n }\n // Give older versions of the autoload script a head-start to ensure\n // they initialize before we start loading newer version.\n setTimeout(load_or_wait, 100)\n}(window));" }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", "if ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n", " window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n", "}\n", "\n", "\n", " function JupyterCommManager() {\n", " }\n", "\n", " JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n", " if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n", " var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n", " comm_manager.register_target(comm_id, function(comm) {\n", " comm.on_msg(msg_handler);\n", " });\n", " } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n", " window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n", " comm.onMsg = msg_handler;\n", " });\n", " } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n", " google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n", " var messages = comm.messages[Symbol.asyncIterator]();\n", " function processIteratorResult(result) {\n", " var message = result.value;\n", " console.log(message)\n", " var content = {data: message.data, comm_id};\n", " var buffers = []\n", " for (var buffer of message.buffers || []) {\n", " buffers.push(new DataView(buffer))\n", " }\n", " var metadata = message.metadata || {};\n", " var msg = {content, buffers, metadata}\n", " msg_handler(msg);\n", " return messages.next().then(processIteratorResult);\n", " }\n", " return messages.next().then(processIteratorResult);\n", " })\n", " }\n", " }\n", "\n", " JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n", " if (comm_id in window.PyViz.comms) {\n", " return window.PyViz.comms[comm_id];\n", " } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n", " var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n", " var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n", " if (msg_handler) {\n", " comm.on_msg(msg_handler);\n", " }\n", " } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n", " var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n", " comm.open();\n", " if (msg_handler) {\n", " comm.onMsg = msg_handler;\n", " }\n", " } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n", " var comm_promise = google.colab.kernel.comms.open(comm_id)\n", " comm_promise.then((comm) => {\n", " window.PyViz.comms[comm_id] = comm;\n", " if (msg_handler) {\n", " var messages = comm.messages[Symbol.asyncIterator]();\n", " function processIteratorResult(result) {\n", " var message = result.value;\n", " var content = {data: message.data};\n", " var metadata = message.metadata || {comm_id};\n", " var msg = {content, metadata}\n", " msg_handler(msg);\n", " return messages.next().then(processIteratorResult);\n", " }\n", " return messages.next().then(processIteratorResult);\n", " }\n", " }) \n", " var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n", " return comm_promise.then((comm) => {\n", " comm.send(data, metadata, buffers, disposeOnDone);\n", " });\n", " };\n", " var comm = {\n", " send: sendClosure\n", " };\n", " }\n", " window.PyViz.comms[comm_id] = comm;\n", " return comm;\n", " }\n", " window.PyViz.comm_manager = new JupyterCommManager();\n", " \n", "\n", "\n", "var JS_MIME_TYPE = 'application/javascript';\n", "var HTML_MIME_TYPE = 'text/html';\n", "var EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\n", "var CLASS_NAME = 'output';\n", "\n", "/**\n", " * Render data to the DOM node\n", " */\n", "function render(props, node) {\n", " var div = document.createElement(\"div\");\n", " var script = document.createElement(\"script\");\n", " node.appendChild(div);\n", " node.appendChild(script);\n", "}\n", "\n", "/**\n", " * Handle when a new output is added\n", " */\n", "function handle_add_output(event, handle) {\n", " var output_area = handle.output_area;\n", " var output = handle.output;\n", " if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n", " return\n", " }\n", " var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", " var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", " if (id !== undefined) {\n", " var nchildren = toinsert.length;\n", " var html_node = toinsert[nchildren-1].children[0];\n", " html_node.innerHTML = output.data[HTML_MIME_TYPE];\n", " var scripts = [];\n", " var nodelist = html_node.querySelectorAll(\"script\");\n", " for (var i in nodelist) {\n", " if (nodelist.hasOwnProperty(i)) {\n", " scripts.push(nodelist[i])\n", " }\n", " }\n", "\n", " scripts.forEach( function (oldScript) {\n", " var newScript = document.createElement(\"script\");\n", " var attrs = [];\n", " var nodemap = oldScript.attributes;\n", " for (var j in nodemap) {\n", " if (nodemap.hasOwnProperty(j)) {\n", " attrs.push(nodemap[j])\n", " }\n", " }\n", " attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n", " newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n", " oldScript.parentNode.replaceChild(newScript, oldScript);\n", " });\n", " if (JS_MIME_TYPE in output.data) {\n", " toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n", " }\n", " output_area._hv_plot_id = id;\n", " if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n", " window.PyViz.plot_index[id] = Bokeh.index[id];\n", " } else {\n", " window.PyViz.plot_index[id] = null;\n", " }\n", " } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", " var bk_div = document.createElement(\"div\");\n", " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", " var script_attrs = bk_div.children[0].attributes;\n", " for (var i = 0; i < script_attrs.length; i++) {\n", " toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n", " }\n", " // store reference to server id on output_area\n", " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", " }\n", "}\n", "\n", "/**\n", " * Handle when an output is cleared or removed\n", " */\n", "function handle_clear_output(event, handle) {\n", " var id = handle.cell.output_area._hv_plot_id;\n", " var server_id = handle.cell.output_area._bokeh_server_id;\n", " if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n", " var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n", " if (server_id !== null) {\n", " comm.send({event_type: 'server_delete', 'id': server_id});\n", " return;\n", " } else if (comm !== null) {\n", " comm.send({event_type: 'delete', 'id': id});\n", " }\n", " delete PyViz.plot_index[id];\n", " if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n", " var doc = window.Bokeh.index[id].model.document\n", " doc.clear();\n", " const i = window.Bokeh.documents.indexOf(doc);\n", " if (i > -1) {\n", " window.Bokeh.documents.splice(i, 1);\n", " }\n", " }\n", "}\n", "\n", "/**\n", " * Handle kernel restart event\n", " */\n", "function handle_kernel_cleanup(event, handle) {\n", " delete PyViz.comms[\"hv-extension-comm\"];\n", " window.PyViz.plot_index = {}\n", "}\n", "\n", "/**\n", " * Handle update_display_data messages\n", " */\n", "function handle_update_output(event, handle) {\n", " handle_clear_output(event, {cell: {output_area: handle.output_area}})\n", " handle_add_output(event, handle)\n", "}\n", "\n", "function register_renderer(events, OutputArea) {\n", " function append_mime(data, metadata, element) {\n", " // create a DOM node to render to\n", " var toinsert = this.create_output_subarea(\n", " metadata,\n", " CLASS_NAME,\n", " EXEC_MIME_TYPE\n", " );\n", " this.keyboard_manager.register_events(toinsert);\n", " // Render to node\n", " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", " render(props, toinsert[0]);\n", " element.append(toinsert);\n", " return toinsert\n", " }\n", "\n", " events.on('output_added.OutputArea', handle_add_output);\n", " events.on('output_updated.OutputArea', handle_update_output);\n", " events.on('clear_output.CodeCell', handle_clear_output);\n", " events.on('delete.Cell', handle_clear_output);\n", " events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n", "\n", " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", " safe: true,\n", " index: 0\n", " });\n", "}\n", "\n", "if (window.Jupyter !== undefined) {\n", " try {\n", " var events = require('base/js/events');\n", " var OutputArea = require('notebook/js/outputarea').OutputArea;\n", " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", " register_renderer(events, OutputArea);\n", " }\n", " } catch(err) {\n", " }\n", "}\n" ], "application/vnd.holoviews_load.v0+json": "\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n }) \n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n" }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function now() {\n", " return new Date();\n", " }\n", "\n", " var force = true;\n", " var py_version = '3.2.1'.replace('rc', '-rc.').replace('.dev', '-dev.');\n", " var is_dev = py_version.indexOf(\"+\") !== -1 || py_version.indexOf(\"-\") !== -1;\n", " var reloading = true;\n", " var Bokeh = root.Bokeh;\n", " var bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n", "\n", " if (typeof (root._bokeh_timeout) === \"undefined\" || force) {\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", " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", " return null;\n", " }\n", " if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n", " run_callbacks();\n", " return null;\n", " }\n", " if (!reloading) {\n", " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\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() {\n", " console.error(\"failed to load \" + url);\n", " }\n", "\n", " var skip = [];\n", " if (window.requirejs) {\n", " window.requirejs.config({'packages': {}, 'paths': {'jspanel': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/jspanel', 'jspanel-modal': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal', 'jspanel-tooltip': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip', 'jspanel-hint': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint', 'jspanel-layout': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout', 'jspanel-contextmenu': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu', 'jspanel-dock': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock', 'gridstack': 'https://cdn.jsdelivr.net/npm/gridstack@7.2.3/dist/gridstack-all', 'notyf': 'https://cdn.jsdelivr.net/npm/notyf@3/notyf.min'}, 'shim': {'jspanel': {'exports': 'jsPanel'}, 'gridstack': {'exports': 'GridStack'}}});\n", " require([\"jspanel\"], function(jsPanel) {\n", "\twindow.jsPanel = jsPanel\n", "\ton_load()\n", " })\n", " require([\"jspanel-modal\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-tooltip\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-hint\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-layout\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-contextmenu\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-dock\"], function() {\n", "\ton_load()\n", " })\n", " require([\"gridstack\"], function(GridStack) {\n", "\twindow.GridStack = GridStack\n", "\ton_load()\n", " })\n", " require([\"notyf\"], function() {\n", "\ton_load()\n", " })\n", " root._bokeh_is_loading = css_urls.length + 9;\n", " } else {\n", " root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n", " }\n", "\n", " var existing_stylesheets = []\n", " var links = document.getElementsByTagName('link')\n", " for (var i = 0; i < links.length; i++) {\n", " var link = links[i]\n", " if (link.href != null) {\n", "\texisting_stylesheets.push(link.href)\n", " }\n", " }\n", " for (var i = 0; i < css_urls.length; i++) {\n", " var url = css_urls[i];\n", " if (existing_stylesheets.indexOf(url) !== -1) {\n", "\ton_load()\n", "\tcontinue;\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", " } if (((window['jsPanel'] !== undefined) && (!(window['jsPanel'] instanceof HTMLElement))) || window.requirejs) {\n", " var urls = ['https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock.js'];\n", " for (var i = 0; i < urls.length; i++) {\n", " skip.push(urls[i])\n", " }\n", " } if (((window['GridStack'] !== undefined) && (!(window['GridStack'] instanceof HTMLElement))) || window.requirejs) {\n", " var urls = ['https://cdn.holoviz.org/panel/1.2.1/dist/bundled/gridstack/gridstack@7.2.3/dist/gridstack-all.js'];\n", " for (var i = 0; i < urls.length; i++) {\n", " skip.push(urls[i])\n", " }\n", " } if (((window['Notyf'] !== undefined) && (!(window['Notyf'] instanceof HTMLElement))) || window.requirejs) {\n", " var urls = ['https://cdn.holoviz.org/panel/1.2.1/dist/bundled/notificationarea/notyf@3/notyf.min.js'];\n", " for (var i = 0; i < urls.length; i++) {\n", " skip.push(urls[i])\n", " }\n", " } var existing_scripts = []\n", " var scripts = document.getElementsByTagName('script')\n", " for (var i = 0; i < scripts.length; i++) {\n", " var script = scripts[i]\n", " if (script.src != null) {\n", "\texisting_scripts.push(script.src)\n", " }\n", " }\n", " for (var i = 0; i < js_urls.length; i++) {\n", " var url = js_urls[i];\n", " if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n", "\tif (!window.requirejs) {\n", "\t on_load();\n", "\t}\n", "\tcontinue;\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", " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.head.appendChild(element);\n", " }\n", " for (var i = 0; i < js_modules.length; i++) {\n", " var url = js_modules[i];\n", " if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n", "\tif (!window.requirejs) {\n", "\t on_load();\n", "\t}\n", "\tcontinue;\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", " var url = js_exports[name];\n", " if (skip.indexOf(url) >= 0 || root[name] != null) {\n", "\tif (!window.requirejs) {\n", "\t on_load();\n", "\t}\n", "\tcontinue;\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", " var js_urls = [\"https://cdn.jsdelivr.net/npm/@holoviz/geoviews@1.10.1/dist/geoviews.min.js\"];\n", " var js_modules = [];\n", " var js_exports = {};\n", " var css_urls = [];\n", " var 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 (var i = 0; i < inline_js.length; i++) {\n", " inline_js[i].call(root, root.Bokeh);\n", " }\n", " // Cache old bokeh versions\n", " if (Bokeh != undefined && !reloading) {\n", "\tvar NewBokeh = root.Bokeh;\n", "\tif (Bokeh.versions === undefined) {\n", "\t Bokeh.versions = new Map();\n", "\t}\n", "\tif (NewBokeh.version !== Bokeh.version) {\n", "\t Bokeh.versions.set(NewBokeh.version, NewBokeh)\n", "\t}\n", "\troot.Bokeh = Bokeh;\n", " }} else if (Date.now() < root._bokeh_timeout) {\n", " setTimeout(run_inline_js, 100);\n", " } else if (!root._bokeh_failed_load) {\n", " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n", " root._bokeh_failed_load = true;\n", " }\n", " 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", " root._bokeh_is_initializing = false;\n", " root._bokeh_onload_callbacks = undefined;\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", " Bokeh = root.Bokeh;\n", " bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n", " root._bokeh_is_initializing = true\n", " root._bokeh_onload_callbacks = []\n", " if (!reloading && (!bokeh_loaded || is_dev)) {\n", "\troot.Bokeh = undefined;\n", " }\n", " load_libs(css_urls, js_urls, js_modules, js_exports, function() {\n", "\tconsole.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n", "\trun_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 var force = true;\n var py_version = '3.2.1'.replace('rc', '-rc.').replace('.dev', '-dev.');\n var is_dev = py_version.indexOf(\"+\") !== -1 || py_version.indexOf(\"-\") !== -1;\n var reloading = true;\n var Bokeh = root.Bokeh;\n var bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n\n if (typeof (root._bokeh_timeout) === \"undefined\" || force) {\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 console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n run_callbacks();\n return null;\n }\n if (!reloading) {\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\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() {\n console.error(\"failed to load \" + url);\n }\n\n var skip = [];\n if (window.requirejs) {\n window.requirejs.config({'packages': {}, 'paths': {'jspanel': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/jspanel', 'jspanel-modal': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal', 'jspanel-tooltip': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip', 'jspanel-hint': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint', 'jspanel-layout': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout', 'jspanel-contextmenu': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu', 'jspanel-dock': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock', 'gridstack': 'https://cdn.jsdelivr.net/npm/gridstack@7.2.3/dist/gridstack-all', 'notyf': 'https://cdn.jsdelivr.net/npm/notyf@3/notyf.min'}, 'shim': {'jspanel': {'exports': 'jsPanel'}, 'gridstack': {'exports': 'GridStack'}}});\n require([\"jspanel\"], function(jsPanel) {\n\twindow.jsPanel = jsPanel\n\ton_load()\n })\n require([\"jspanel-modal\"], function() {\n\ton_load()\n })\n require([\"jspanel-tooltip\"], function() {\n\ton_load()\n })\n require([\"jspanel-hint\"], function() {\n\ton_load()\n })\n require([\"jspanel-layout\"], function() {\n\ton_load()\n })\n require([\"jspanel-contextmenu\"], function() {\n\ton_load()\n })\n require([\"jspanel-dock\"], function() {\n\ton_load()\n })\n require([\"gridstack\"], function(GridStack) {\n\twindow.GridStack = GridStack\n\ton_load()\n })\n require([\"notyf\"], function() {\n\ton_load()\n })\n root._bokeh_is_loading = css_urls.length + 9;\n } else {\n root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n }\n\n var existing_stylesheets = []\n var links = document.getElementsByTagName('link')\n for (var i = 0; i < links.length; i++) {\n var link = links[i]\n if (link.href != null) {\n\texisting_stylesheets.push(link.href)\n }\n }\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n if (existing_stylesheets.indexOf(url) !== -1) {\n\ton_load()\n\tcontinue;\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 } if (((window['jsPanel'] !== undefined) && (!(window['jsPanel'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } if (((window['GridStack'] !== undefined) && (!(window['GridStack'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.2.1/dist/bundled/gridstack/gridstack@7.2.3/dist/gridstack-all.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } if (((window['Notyf'] !== undefined) && (!(window['Notyf'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.2.1/dist/bundled/notificationarea/notyf@3/notyf.min.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } var existing_scripts = []\n var scripts = document.getElementsByTagName('script')\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i]\n if (script.src != null) {\n\texisting_scripts.push(script.src)\n }\n }\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\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 console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (var i = 0; i < js_modules.length; i++) {\n var url = js_modules[i];\n if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\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 var url = js_exports[name];\n if (skip.indexOf(url) >= 0 || root[name] != null) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\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 var js_urls = [\"https://cdn.jsdelivr.net/npm/@holoviz/geoviews@1.10.1/dist/geoviews.min.js\"];\n var js_modules = [];\n var js_exports = {};\n var css_urls = [];\n var 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 (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n // Cache old bokeh versions\n if (Bokeh != undefined && !reloading) {\n\tvar NewBokeh = root.Bokeh;\n\tif (Bokeh.versions === undefined) {\n\t Bokeh.versions = new Map();\n\t}\n\tif (NewBokeh.version !== Bokeh.version) {\n\t Bokeh.versions.set(NewBokeh.version, NewBokeh)\n\t}\n\troot.Bokeh = Bokeh;\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n }\n 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 root._bokeh_is_initializing = false;\n root._bokeh_onload_callbacks = undefined;\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 Bokeh = root.Bokeh;\n bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n root._bokeh_is_initializing = true\n root._bokeh_onload_callbacks = []\n if (!reloading && (!bokeh_loaded || is_dev)) {\n\troot.Bokeh = undefined;\n }\n load_libs(css_urls, js_urls, js_modules, js_exports, function() {\n\tconsole.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n\trun_inline_js();\n });\n }\n }\n // Give older versions of the autoload script a head-start to ensure\n // they initialize before we start loading newer version.\n setTimeout(load_or_wait, 100)\n}(window));" }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", "if ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n", " window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n", "}\n", "\n", "\n", " function JupyterCommManager() {\n", " }\n", "\n", " JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n", " if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n", " var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n", " comm_manager.register_target(comm_id, function(comm) {\n", " comm.on_msg(msg_handler);\n", " });\n", " } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n", " window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n", " comm.onMsg = msg_handler;\n", " });\n", " } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n", " google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n", " var messages = comm.messages[Symbol.asyncIterator]();\n", " function processIteratorResult(result) {\n", " var message = result.value;\n", " console.log(message)\n", " var content = {data: message.data, comm_id};\n", " var buffers = []\n", " for (var buffer of message.buffers || []) {\n", " buffers.push(new DataView(buffer))\n", " }\n", " var metadata = message.metadata || {};\n", " var msg = {content, buffers, metadata}\n", " msg_handler(msg);\n", " return messages.next().then(processIteratorResult);\n", " }\n", " return messages.next().then(processIteratorResult);\n", " })\n", " }\n", " }\n", "\n", " JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n", " if (comm_id in window.PyViz.comms) {\n", " return window.PyViz.comms[comm_id];\n", " } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n", " var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n", " var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n", " if (msg_handler) {\n", " comm.on_msg(msg_handler);\n", " }\n", " } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n", " var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n", " comm.open();\n", " if (msg_handler) {\n", " comm.onMsg = msg_handler;\n", " }\n", " } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n", " var comm_promise = google.colab.kernel.comms.open(comm_id)\n", " comm_promise.then((comm) => {\n", " window.PyViz.comms[comm_id] = comm;\n", " if (msg_handler) {\n", " var messages = comm.messages[Symbol.asyncIterator]();\n", " function processIteratorResult(result) {\n", " var message = result.value;\n", " var content = {data: message.data};\n", " var metadata = message.metadata || {comm_id};\n", " var msg = {content, metadata}\n", " msg_handler(msg);\n", " return messages.next().then(processIteratorResult);\n", " }\n", " return messages.next().then(processIteratorResult);\n", " }\n", " }) \n", " var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n", " return comm_promise.then((comm) => {\n", " comm.send(data, metadata, buffers, disposeOnDone);\n", " });\n", " };\n", " var comm = {\n", " send: sendClosure\n", " };\n", " }\n", " window.PyViz.comms[comm_id] = comm;\n", " return comm;\n", " }\n", " window.PyViz.comm_manager = new JupyterCommManager();\n", " \n", "\n", "\n", "var JS_MIME_TYPE = 'application/javascript';\n", "var HTML_MIME_TYPE = 'text/html';\n", "var EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\n", "var CLASS_NAME = 'output';\n", "\n", "/**\n", " * Render data to the DOM node\n", " */\n", "function render(props, node) {\n", " var div = document.createElement(\"div\");\n", " var script = document.createElement(\"script\");\n", " node.appendChild(div);\n", " node.appendChild(script);\n", "}\n", "\n", "/**\n", " * Handle when a new output is added\n", " */\n", "function handle_add_output(event, handle) {\n", " var output_area = handle.output_area;\n", " var output = handle.output;\n", " if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n", " return\n", " }\n", " var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", " var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", " if (id !== undefined) {\n", " var nchildren = toinsert.length;\n", " var html_node = toinsert[nchildren-1].children[0];\n", " html_node.innerHTML = output.data[HTML_MIME_TYPE];\n", " var scripts = [];\n", " var nodelist = html_node.querySelectorAll(\"script\");\n", " for (var i in nodelist) {\n", " if (nodelist.hasOwnProperty(i)) {\n", " scripts.push(nodelist[i])\n", " }\n", " }\n", "\n", " scripts.forEach( function (oldScript) {\n", " var newScript = document.createElement(\"script\");\n", " var attrs = [];\n", " var nodemap = oldScript.attributes;\n", " for (var j in nodemap) {\n", " if (nodemap.hasOwnProperty(j)) {\n", " attrs.push(nodemap[j])\n", " }\n", " }\n", " attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n", " newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n", " oldScript.parentNode.replaceChild(newScript, oldScript);\n", " });\n", " if (JS_MIME_TYPE in output.data) {\n", " toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n", " }\n", " output_area._hv_plot_id = id;\n", " if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n", " window.PyViz.plot_index[id] = Bokeh.index[id];\n", " } else {\n", " window.PyViz.plot_index[id] = null;\n", " }\n", " } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", " var bk_div = document.createElement(\"div\");\n", " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", " var script_attrs = bk_div.children[0].attributes;\n", " for (var i = 0; i < script_attrs.length; i++) {\n", " toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n", " }\n", " // store reference to server id on output_area\n", " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", " }\n", "}\n", "\n", "/**\n", " * Handle when an output is cleared or removed\n", " */\n", "function handle_clear_output(event, handle) {\n", " var id = handle.cell.output_area._hv_plot_id;\n", " var server_id = handle.cell.output_area._bokeh_server_id;\n", " if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n", " var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n", " if (server_id !== null) {\n", " comm.send({event_type: 'server_delete', 'id': server_id});\n", " return;\n", " } else if (comm !== null) {\n", " comm.send({event_type: 'delete', 'id': id});\n", " }\n", " delete PyViz.plot_index[id];\n", " if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n", " var doc = window.Bokeh.index[id].model.document\n", " doc.clear();\n", " const i = window.Bokeh.documents.indexOf(doc);\n", " if (i > -1) {\n", " window.Bokeh.documents.splice(i, 1);\n", " }\n", " }\n", "}\n", "\n", "/**\n", " * Handle kernel restart event\n", " */\n", "function handle_kernel_cleanup(event, handle) {\n", " delete PyViz.comms[\"hv-extension-comm\"];\n", " window.PyViz.plot_index = {}\n", "}\n", "\n", "/**\n", " * Handle update_display_data messages\n", " */\n", "function handle_update_output(event, handle) {\n", " handle_clear_output(event, {cell: {output_area: handle.output_area}})\n", " handle_add_output(event, handle)\n", "}\n", "\n", "function register_renderer(events, OutputArea) {\n", " function append_mime(data, metadata, element) {\n", " // create a DOM node to render to\n", " var toinsert = this.create_output_subarea(\n", " metadata,\n", " CLASS_NAME,\n", " EXEC_MIME_TYPE\n", " );\n", " this.keyboard_manager.register_events(toinsert);\n", " // Render to node\n", " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", " render(props, toinsert[0]);\n", " element.append(toinsert);\n", " return toinsert\n", " }\n", "\n", " events.on('output_added.OutputArea', handle_add_output);\n", " events.on('output_updated.OutputArea', handle_update_output);\n", " events.on('clear_output.CodeCell', handle_clear_output);\n", " events.on('delete.Cell', handle_clear_output);\n", " events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n", "\n", " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", " safe: true,\n", " index: 0\n", " });\n", "}\n", "\n", "if (window.Jupyter !== undefined) {\n", " try {\n", " var events = require('base/js/events');\n", " var OutputArea = require('notebook/js/outputarea').OutputArea;\n", " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", " register_renderer(events, OutputArea);\n", " }\n", " } catch(err) {\n", " }\n", "}\n" ], "application/vnd.holoviews_load.v0+json": "\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n }) \n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n" }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Import all the tools we need...\n", "import os\n", "\n", "# For working with data\n", "import pandas as pd\n", "import xarray as xr\n", "\n", "# For data that may be larger than the memory available on your computer...\n", "import dask\n", "import dask.dataframe as dd\n", "\n", "# For accessing OGC Web Feature Service\n", "from owslib.wfs import WebFeatureService\n", "\n", "# For accessing AWS S3 cloud storage\n", "import s3fs\n", "\n", "# Plotting tools\n", "import holoviews as hv\n", "import hvplot.pandas\n", "import hvplot.xarray\n", "\n", "# For plotting geographic data & maps\n", "import geoviews as gv\n", "import geoviews.feature as gf\n", "from geoviews import opts\n", "from cartopy import crs\n", "\n", "## Use Matplotlib backend for web preview of notebook\n", "## Comment out these lines to get the default interactive plots using Bokeh\n", "hvplot.extension('matplotlib', compatibility='bokeh')\n", "gv.extension('matplotlib')\n", "gv.output(size=200)" ] }, { "cell_type": "code", "execution_count": 2, "id": "5e2f8f45-eabf-4e53-8076-e8d188e59d2e", "metadata": { "slideshow": { "slide_type": "skip" }, "tags": [] }, "outputs": [], "source": [ "# Set up local data path\n", "DATA_BASEPATH = \"/home/jovyan/shared/IMOS\"" ] }, { "cell_type": "markdown", "id": "96368746-0a9e-4b81-ae32-08823e379d67", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "# The old school way\n", "\n", "The old (and still common) way to access data is to first download it to your computer and read it from there. \n", "This is easy for small datasets, but not always ideal:\n", "* What if the data is bigger than your hard disk?\n", "* What if you only need a small fraction of a dataset?\n", "* What if the dataset is routinely updated and you want to re-run your analysis on the latest data?\n", "* What if you want to run your analysis on another computer or in the cloud?" ] }, { "cell_type": "markdown", "id": "aabb4da0-e672-4ef1-beb0-b73db5eb5a6a", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "These days it is often more convenient to have data managed in a central location and access it remotely.\n", "There are many ways this can be done. In this tutorial we will look at a few of the common ones, and some of the newer ones." ] }, { "cell_type": "markdown", "id": "0bf83805-6e87-4fe4-95b2-1deabfab4380", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "# OPeNDAP\n", "\n", "* [OPeNDAP](https://www.opendap.org/about) stands for \"Open-source Project for a Network Data Access Protocol\"\n", "* Provides access to metadata and data subsets via the Web without downloading an entire dataset\n", "* Many tools that can read NetCDF files can also talk to an OPeNDAP URL directly" ] }, { "cell_type": "markdown", "id": "2bfee5a9-28f4-4ef0-b471-de04a84e1333", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "In Python, we can simply open the URL with `xarray`, then proceed with our analysis using the resulgting `Dataset` object.\n", "\n", "Here we use an example from the [AODN THREDDS server](https://thredds.aodn.org.au/thredds/catalog.html)." ] }, { "cell_type": "code", "execution_count": 3, "id": "b10451e0-6506-40d1-9c4c-7333729f7dd4", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "https://thredds.aodn.org.au/thredds/dodsC/IMOS/ANMN/NSW/PH100/gridded_timeseries/IMOS_ANMN-NSW_TZ_20091029_PH100_FV02_TEMP-gridded-timeseries_END-20230316_C-20230520.nc.html\n" ] } ], "source": [ "opendap_url = (\"https://thredds.aodn.org.au/thredds/dodsC/\"\n", " \"IMOS/ANMN/NSW/PH100/gridded_timeseries/\"\n", " \"IMOS_ANMN-NSW_TZ_20091029_PH100_FV02_TEMP-gridded-timeseries_END-20230316_C-20230520.nc\")\n", "\n", "# You can preview the file's metadata in your browser by adding \".html\" to the above URL\n", "print(opendap_url + \".html\")" ] }, { "cell_type": "code", "execution_count": null, "id": "b118639e-503d-4552-8b32-9ce5cc33535a", "metadata": { "slideshow": { "slide_type": "skip" }, "tags": [] }, "outputs": [], "source": [ "## Uncomment the line below to access a local copy of data file, (in case server is overloaded)\n", "\n", "# opendap_url = os.path.join(DATA_BASEPATH,\n", "# \"IMOS_ANMN-NSW_TZ_20091029_PH100_FV02_TEMP-gridded-timeseries_END-20230316_C-20230520.nc\")" ] }, { "cell_type": "code", "execution_count": 4, "id": "03d8022f-a927-4154-9808-1acdcafdb5b2", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset>\n",
       "Dimensions:     (TIME: 115050, DEPTH: 12)\n",
       "Coordinates:\n",
       "  * DEPTH       (DEPTH) float32 0.0 10.0 20.0 30.0 ... 80.0 90.0 100.0 110.0\n",
       "  * TIME        (TIME) datetime64[ns] 2009-10-29T03:00:00 ... 2023-03-16T10:0...\n",
       "    LONGITUDE   float64 151.2\n",
       "    LATITUDE    float64 -34.12\n",
       "Data variables:\n",
       "    TEMP_count  (TIME) int16 ...\n",
       "    TEMP        (TIME, DEPTH) float32 ...\n",
       "Attributes: (12/42)\n",
       "    Conventions:                   CF-1.6,IMOS-1.4\n",
       "    abstract:                      Gridded Time Series Product: This file con...\n",
       "    acknowledgement:               Any users of IMOS data are required to cle...\n",
       "    author:                        Australian Ocean Data Network (AODN)\n",
       "    author_email:                  info@aodn.org.au\n",
       "    citation:                      The citation in a list of references is: "...\n",
       "    ...                            ...\n",
       "    source_file_download:          https://s3-ap-southeast-2.amazonaws.com/im...\n",
       "    source_file_opendap:           http://thredds.aodn.org.au/thredds/dodsC/I...\n",
       "    standard_name_vocabulary:      NetCDF Climate and Forecast (CF) Metadata ...\n",
       "    time_coverage_end:             2023-03-16T10:00:00Z\n",
       "    time_coverage_start:           2009-10-29T03:00:00Z\n",
       "    title:                         Gridded Time Series Product: TEMP interpol...
" ], "text/plain": [ "\n", "Dimensions: (TIME: 115050, DEPTH: 12)\n", "Coordinates:\n", " * DEPTH (DEPTH) float32 0.0 10.0 20.0 30.0 ... 80.0 90.0 100.0 110.0\n", " * TIME (TIME) datetime64[ns] 2009-10-29T03:00:00 ... 2023-03-16T10:0...\n", " LONGITUDE float64 ...\n", " LATITUDE float64 ...\n", "Data variables:\n", " TEMP_count (TIME) int16 ...\n", " TEMP (TIME, DEPTH) float32 ...\n", "Attributes: (12/42)\n", " Conventions: CF-1.6,IMOS-1.4\n", " abstract: Gridded Time Series Product: This file con...\n", " acknowledgement: Any users of IMOS data are required to cle...\n", " author: Australian Ocean Data Network (AODN)\n", " author_email: info@aodn.org.au\n", " citation: The citation in a list of references is: \"...\n", " ... ...\n", " source_file_download: https://s3-ap-southeast-2.amazonaws.com/im...\n", " source_file_opendap: http://thredds.aodn.org.au/thredds/dodsC/I...\n", " standard_name_vocabulary: NetCDF Climate and Forecast (CF) Metadata ...\n", " time_coverage_end: 2023-03-16T10:00:00Z\n", " time_coverage_start: 2009-10-29T03:00:00Z\n", " title: Gridded Time Series Product: TEMP interpol..." ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds_mooring = xr.open_dataset(opendap_url)\n", "ds_mooring" ] }, { "cell_type": "code", "execution_count": 5, "id": "7ba40af7-cf45-4a09-a0d1-fadd5ec21fd6", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Gridded Time Series Product: TEMP interpolated at PH100 to fixed target depths at 1-hour time intervals, between 2009-10-29T03:00:00Z and 2023-03-16T10:00:00Z and 0 and 110 meters.\n" ] } ], "source": [ "print(ds_mooring.title)" ] }, { "cell_type": "markdown", "id": "f68891c3-0532-4e96-b4c8-cad9883b64cf", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "This dataset is derived from repeated deployments of moored temperature loggers, binned to hourly intervals and interpolated to a fixed set of target depths. See the file metadata, or the associated [metadata record](https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/279a50e3-21a5-4590-85a0-71f963efab82) for more info." ] }, { "cell_type": "code", "execution_count": 6, "id": "6a6a789a-81e7-4725-a5e1-b124eda515df", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ ":Scatter [TIME] (DEPTH,TEMP)" ] }, "execution_count": 6, "metadata": { "application/vnd.holoviews_exec.v0+json": {} }, "output_type": "execute_result" } ], "source": [ "# Hourly averages x 12 depths x 13+ yr = over a million points to plot!\n", "# Let's just look at a year's worth to speed things up...\n", "ds_mooring.sel(TIME=\"2022\").hvplot.scatter(x=\"TIME\", y=\"DEPTH\", c=\"TEMP\",\n", " cmap=\"coolwarm\", alpha=0.2,\n", " flip_yaxis=True, hover=False)" ] }, { "cell_type": "code", "execution_count": 7, "id": "80eb6d7d-3110-459c-822f-1d613f883128", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ ":Curve [TIME] (TEMP)" ] }, "execution_count": 7, "metadata": { "application/vnd.holoviews_exec.v0+json": {} }, "output_type": "execute_result" } ], "source": [ "# ... or we can look at the full timeseries of temperature at a single depth\n", "ds_mooring.TEMP.sel(DEPTH=30).hvplot()" ] }, { "cell_type": "markdown", "id": "bc26abf8-1638-4036-98a7-79e86bcfcab2", "metadata": { "slideshow": { "slide_type": "skip" }, "tags": [] }, "source": [ "### Another example\n", "See also the OPeNDAP example in [last year's data access tutorial](https://github.com/oceanhackweek/ohw-tutorials/blob/OHW22/01-Tue/00-data-access-in-python/00-data-access.ipynb), or explore that [dataset](http://tds.marine.rutgers.edu/thredds/dodsC/roms/doppio/2017_da/avg/Averages_Best.html) in the OPeNDAP Access Form." ] }, { "cell_type": "markdown", "id": "571909e3-71b4-427d-aefb-3d64dbd6158c", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "# Web Feature Service (WFS)\n", "\n", "* A [standard](http://www.opengeospatial.org/standards/wfs) of the [Open Geospatial Consortium](http://www.opengeospatial.org/) (OGC)\n", "* Allows tabular geospatial data to be accessed via the Web.\n", "* A _feature_ has a _geometry_ (e.g. a point/line/polygon) indicating a geographic location, and a set of properties (e.g. temperature) \n", "* WFS allows filtering based on geometry or properties.\n", "* In Python WFS and other OGC Web Services (OWS) can be accessed using the [`owslib`](https://pypi.org/project/OWSLib/) library" ] }, { "cell_type": "markdown", "id": "1b1d1270-159f-46da-b6b8-b2162b0401d6", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "For example, most of the tabular hosted by the AODN is available via WFS." ] }, { "cell_type": "code", "execution_count": 8, "id": "6250dfb4-fc51-4db7-9088-17bd2bd9e8c7", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "'AODN Web Feature Service (WFS)'" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "wfs = WebFeatureService(url=\"https://geoserver-123.aodn.org.au/geoserver/wfs\",\n", " version=\"1.1.0\")\n", "wfs.identification.title" ] }, { "cell_type": "code", "execution_count": 9, "id": "af41cd03-3895-490a-8621-95a569a53a35", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "There are 397 fature types, e.g.\n" ] }, { "data": { "text/plain": [ "['imos:anmn_ctd_profiles_data',\n", " 'imos:anmn_ctd_profiles_map',\n", " 'imos:anmn_velocity_timeseries_map',\n", " 'imos:anmn_nrs_rt_meteo_timeseries_data',\n", " 'imos:anmn_nrs_rt_meteo_timeseries_map',\n", " 'imos:anmn_nrs_rt_bio_timeseries_data',\n", " 'imos:anmn_nrs_rt_bio_timeseries_map',\n", " 'imos:anmn_nrs_rt_wave_timeseries_data',\n", " 'imos:anmn_nrs_rt_wave_timeseries_map',\n", " 'imos:anmn_acoustics_map']" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Each dataset is served as a separate \"feature type\":\n", "print(f\"There are {len(wfs.contents)} fature types, e.g.\")\n", "list(wfs.contents)[:10]" ] }, { "cell_type": "markdown", "id": "08076cde-3bec-4199-932a-61ee43e8df64", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "For now we'll assume we already know which featuretype we want. In this example we'll look at a dataset containing condicutivity-temperature-depth (CTD) profiles obtained at the National Reference Stations around Australia ([here](https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/7b901002-b1dc-46c3-89f2-b4951cedca48)'s a detailed metadata record)" ] }, { "cell_type": "code", "execution_count": 10, "id": "87f370e7-a79c-431e-9059-fee45837b0ef", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "{'file_id': 'int',\n", " 'site_code': 'string',\n", " 'cruise_id': 'string',\n", " 'time_coverage_start': 'dateTime',\n", " 'time_coverage_end': 'dateTime',\n", " 'TIME': 'dateTime',\n", " 'INSTANCE': 'int',\n", " 'DIRECTION': 'string',\n", " 'TIME_quality_control': 'string',\n", " 'LATITUDE': 'double',\n", " 'LATITUDE_quality_control': 'string',\n", " 'LONGITUDE': 'double',\n", " 'LONGITUDE_quality_control': 'string',\n", " 'DEPTH': 'float',\n", " 'DEPTH_quality_control': 'string',\n", " 'BOT_DEPTH': 'float',\n", " 'BOT_DEPTH_quality_control': 'string',\n", " 'PRES_REL': 'float',\n", " 'PRES_REL_quality_control': 'string',\n", " 'TEMP': 'float',\n", " 'TEMP_quality_control': 'string',\n", " 'PSAL': 'float',\n", " 'PSAL_quality_control': 'string',\n", " 'DOX2': 'float',\n", " 'DOX2_quality_control': 'string',\n", " 'TURB': 'float',\n", " 'TURB_quality_control': 'string',\n", " 'CHLF': 'float',\n", " 'CHLF_quality_control': 'string',\n", " 'CHLU': 'float',\n", " 'CHLU_quality_control': 'string',\n", " 'CPHL': 'float',\n", " 'CPHL_quality_control': 'string',\n", " 'CNDC': 'float',\n", " 'CNDC_quality_control': 'string',\n", " 'DESC': 'float',\n", " 'DESC_quality_control': 'string',\n", " 'DENS': 'float',\n", " 'DENS_quality_control': 'string'}" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "typename = 'imos:anmn_ctd_profiles_data'\n", "wfs.get_schema(typename)['properties']" ] }, { "cell_type": "markdown", "id": "0c02cee3-558e-4515-aaae-c5353f4c3f29", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "We can read in a subset of the data by specifying a bounding box (in this case near Sydney, Australia).\n", "We'll get the result in CSV format so it's easy to read into a Pandas DataFrame.\n", "\n", "First we'll ask for just 10 features, for a quick look at the data." ] }, { "cell_type": "code", "execution_count": 11, "id": "dee02762-2045-415f-b10c-c572b9e11899", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FIDfile_idsite_codecruise_idtime_coverage_starttime_coverage_endTIMEINSTANCEDIRECTIONTIME_quality_control...CHLU_quality_controlCPHLCPHL_quality_controlCNDCCNDC_quality_controlDESCDESC_quality_controlDENSDENS_quality_controlgeom
0anmn_ctd_profiles_data.fid--6fff0f0_189bed8a1b...754PH100PHNRS_11082011-08-29T00:03:402011-08-29T00:03:402011-08-29T00:03:40NaNDNaN...NaNNaNNaN4.626600.22801025.84780POINT (-34.1161666667 151.218)
1anmn_ctd_profiles_data.fid--6fff0f0_189bed8a1b...754PH100PHNRS_11082011-08-29T00:03:402011-08-29T00:03:402011-08-29T00:03:40NaNDNaN...NaNNaNNaN4.624600.57401025.86520POINT (-34.1161666667 151.218)
2anmn_ctd_profiles_data.fid--6fff0f0_189bed8a1b...754PH100PHNRS_11082011-08-29T00:03:402011-08-29T00:03:402011-08-29T00:03:40NaNDNaN...NaNNaNNaN4.622400.74101025.87370POINT (-34.1161666667 151.218)
3anmn_ctd_profiles_data.fid--6fff0f0_189bed8a1b...754PH100PHNRS_11082011-08-29T00:03:402011-08-29T00:03:402011-08-29T00:03:40NaNDNaN...NaNNaNNaN4.619000.80301025.87900POINT (-34.1161666667 151.218)
4anmn_ctd_profiles_data.fid--6fff0f0_189bed8a1b...754PH100PHNRS_11082011-08-29T00:03:402011-08-29T00:03:402011-08-29T00:03:40NaNDNaN...NaNNaNNaN4.613800.74901025.88920POINT (-34.1161666667 151.218)
5anmn_ctd_profiles_data.fid--6fff0f0_189bed8a1b...754PH100PHNRS_11082011-08-29T00:03:402011-08-29T00:03:402011-08-29T00:03:40NaNDNaN...NaNNaNNaN4.608900.68701025.90720POINT (-34.1161666667 151.218)
6anmn_ctd_profiles_data.fid--6fff0f0_189bed8a1b...754PH100PHNRS_11082011-08-29T00:03:402011-08-29T00:03:402011-08-29T00:03:40NaNDNaN...NaNNaNNaN4.606700.72201025.92410POINT (-34.1161666667 151.218)
7anmn_ctd_profiles_data.fid--6fff0f0_189bed8a1b...754PH100PHNRS_11082011-08-29T00:03:402011-08-29T00:03:402011-08-29T00:03:40NaNDNaN...NaNNaNNaN4.604800.77301025.93210POINT (-34.1161666667 151.218)
8anmn_ctd_profiles_data.fid--6fff0f0_189bed8a1b...754PH100PHNRS_11082011-08-29T00:03:402011-08-29T00:03:402011-08-29T00:03:40NaNDNaN...NaNNaNNaN4.602300.78801025.93850POINT (-34.1161666667 151.218)
9anmn_ctd_profiles_data.fid--6fff0f0_189bed8a1b...754PH100PHNRS_11082011-08-29T00:03:402011-08-29T00:03:402011-08-29T00:03:40NaNDNaN...NaNNaNNaN4.598200.84601025.94320POINT (-34.1161666667 151.218)
\n", "

10 rows × 41 columns

\n", "
" ], "text/plain": [ " FID file_id site_code \\\n", "0 anmn_ctd_profiles_data.fid--6fff0f0_189bed8a1b... 754 PH100 \n", "1 anmn_ctd_profiles_data.fid--6fff0f0_189bed8a1b... 754 PH100 \n", "2 anmn_ctd_profiles_data.fid--6fff0f0_189bed8a1b... 754 PH100 \n", "3 anmn_ctd_profiles_data.fid--6fff0f0_189bed8a1b... 754 PH100 \n", "4 anmn_ctd_profiles_data.fid--6fff0f0_189bed8a1b... 754 PH100 \n", "5 anmn_ctd_profiles_data.fid--6fff0f0_189bed8a1b... 754 PH100 \n", "6 anmn_ctd_profiles_data.fid--6fff0f0_189bed8a1b... 754 PH100 \n", "7 anmn_ctd_profiles_data.fid--6fff0f0_189bed8a1b... 754 PH100 \n", "8 anmn_ctd_profiles_data.fid--6fff0f0_189bed8a1b... 754 PH100 \n", "9 anmn_ctd_profiles_data.fid--6fff0f0_189bed8a1b... 754 PH100 \n", "\n", " cruise_id time_coverage_start time_coverage_end TIME \\\n", "0 PHNRS_1108 2011-08-29T00:03:40 2011-08-29T00:03:40 2011-08-29T00:03:40 \n", "1 PHNRS_1108 2011-08-29T00:03:40 2011-08-29T00:03:40 2011-08-29T00:03:40 \n", "2 PHNRS_1108 2011-08-29T00:03:40 2011-08-29T00:03:40 2011-08-29T00:03:40 \n", "3 PHNRS_1108 2011-08-29T00:03:40 2011-08-29T00:03:40 2011-08-29T00:03:40 \n", "4 PHNRS_1108 2011-08-29T00:03:40 2011-08-29T00:03:40 2011-08-29T00:03:40 \n", "5 PHNRS_1108 2011-08-29T00:03:40 2011-08-29T00:03:40 2011-08-29T00:03:40 \n", "6 PHNRS_1108 2011-08-29T00:03:40 2011-08-29T00:03:40 2011-08-29T00:03:40 \n", "7 PHNRS_1108 2011-08-29T00:03:40 2011-08-29T00:03:40 2011-08-29T00:03:40 \n", "8 PHNRS_1108 2011-08-29T00:03:40 2011-08-29T00:03:40 2011-08-29T00:03:40 \n", "9 PHNRS_1108 2011-08-29T00:03:40 2011-08-29T00:03:40 2011-08-29T00:03:40 \n", "\n", " INSTANCE DIRECTION TIME_quality_control ... CHLU_quality_control CPHL \\\n", "0 NaN D NaN ... NaN NaN \n", "1 NaN D NaN ... NaN NaN \n", "2 NaN D NaN ... NaN NaN \n", "3 NaN D NaN ... NaN NaN \n", "4 NaN D NaN ... NaN NaN \n", "5 NaN D NaN ... NaN NaN \n", "6 NaN D NaN ... NaN NaN \n", "7 NaN D NaN ... NaN NaN \n", "8 NaN D NaN ... NaN NaN \n", "9 NaN D NaN ... NaN NaN \n", "\n", " CPHL_quality_control CNDC CNDC_quality_control DESC \\\n", "0 NaN 4.6266 0 0.228 \n", "1 NaN 4.6246 0 0.574 \n", "2 NaN 4.6224 0 0.741 \n", "3 NaN 4.6190 0 0.803 \n", "4 NaN 4.6138 0 0.749 \n", "5 NaN 4.6089 0 0.687 \n", "6 NaN 4.6067 0 0.722 \n", "7 NaN 4.6048 0 0.773 \n", "8 NaN 4.6023 0 0.788 \n", "9 NaN 4.5982 0 0.846 \n", "\n", " DESC_quality_control DENS DENS_quality_control \\\n", "0 0 1025.8478 0 \n", "1 0 1025.8652 0 \n", "2 0 1025.8737 0 \n", "3 0 1025.8790 0 \n", "4 0 1025.8892 0 \n", "5 0 1025.9072 0 \n", "6 0 1025.9241 0 \n", "7 0 1025.9321 0 \n", "8 0 1025.9385 0 \n", "9 0 1025.9432 0 \n", "\n", " geom \n", "0 POINT (-34.1161666667 151.218) \n", "1 POINT (-34.1161666667 151.218) \n", "2 POINT (-34.1161666667 151.218) \n", "3 POINT (-34.1161666667 151.218) \n", "4 POINT (-34.1161666667 151.218) \n", "5 POINT (-34.1161666667 151.218) \n", "6 POINT (-34.1161666667 151.218) \n", "7 POINT (-34.1161666667 151.218) \n", "8 POINT (-34.1161666667 151.218) \n", "9 POINT (-34.1161666667 151.218) \n", "\n", "[10 rows x 41 columns]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "xmin, xmax = 151.2, 151.25 # Port Hacking, near Sydney, NSW\n", "ymin, ymax = -34.2, -34.1\n", "\n", "response = wfs.getfeature(typename=typename,\n", " bbox=(xmin, ymin, xmax, ymax),\n", " maxfeatures=10,\n", " outputFormat='csv')\n", "df = pd.read_csv(response)\n", "response.close()\n", "\n", "df" ] }, { "cell_type": "code", "execution_count": null, "id": "309726d2-a129-4fa2-a4ff-b450a0356384", "metadata": { "slideshow": { "slide_type": "skip" }, "tags": [] }, "outputs": [], "source": [ "## Load local copy of CSV file returned...\n", "\n", "# local_csv = os.path.join(DATA_BASEPATH, 'wfs_response1.csv')\n", "# df = pd.read_csv(local_csv)\n", "# df" ] }, { "cell_type": "markdown", "id": "af9bcbb6-605c-4aa9-8be1-8370a8d4b44e", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "We can also filter the data based on the values in specified columns (properties) and ask for only a subset of the columns to be returned. The filters need to be provided in XML format, but the `owslib` library allows us to construct them in a more Pythonic way.\n", "\n", "Here we select only the profiles associated with the Port Hacking 100m mooring site, and only the data points flagged as \"good data\" by automated quality-control procedures." ] }, { "cell_type": "code", "execution_count": 25, "id": "1953a518-7a7f-4706-aedf-a1bc399fb4a0", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [], "source": [ "from owslib.etree import etree\n", "from owslib.fes import PropertyIsEqualTo, And\n", "\n", "filter = And([PropertyIsEqualTo(propertyname=\"site_code\", literal=\"PH100\"),\n", " PropertyIsEqualTo(propertyname=\"PRES_REL_quality_control\", literal=\"1\"),\n", " PropertyIsEqualTo(propertyname=\"TEMP_quality_control\", literal=\"1\"),\n", " PropertyIsEqualTo(propertyname=\"PSAL_quality_control\", literal=\"1\"),\n", " PropertyIsEqualTo(propertyname=\"CPHL_quality_control\", literal=\"1\")\n", " ])\n", "filterxml = etree.tostring(filter.toXML(), encoding=\"unicode\")\n", "\n", "response = wfs.getfeature(typename=typename, filter=filterxml, outputFormat=\"csv\",\n", " propertyname=[\"TIME\", \"DEPTH\", \"TEMP\", \"PSAL\", \"CPHL\"]\n", " )\n", "df = pd.read_csv(response, parse_dates=[\"TIME\"])\n", "response.close()\n", "\n", "# the server adds a feature ID column we don't really need\n", "df.drop(columns='FID', inplace=True)" ] }, { "cell_type": "code", "execution_count": null, "id": "fbcf91fe-1111-4313-9fef-b7650e351caf", "metadata": { "slideshow": { "slide_type": "skip" }, "tags": [] }, "outputs": [], "source": [ "## Load local copy of CSV file returned...\n", "\n", "# local_csv = os.path.join(DATA_BASEPATH, 'wfs_response2.csv')\n", "# df = pd.read_csv(local_csv, parse_dates=[\"TIME\"]).drop(columns='FID')" ] }, { "cell_type": "code", "execution_count": 26, "id": "c9b1860c-b573-4410-a45a-216abf9439e3", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
TIMEDEPTHTEMPPSALCPHL
02014-12-08 22:28:541.98621.643235.50800.9365
12014-12-08 22:28:542.97921.644135.50850.9560
22014-12-08 22:28:543.97121.641735.50850.9644
32014-12-08 22:28:544.96421.631435.50890.9963
42014-12-08 22:28:545.95721.607735.51020.9844
..................
113772023-05-15 22:08:0582.39818.013035.58320.1554
113782023-05-15 22:08:0583.39118.000835.58410.1417
113792023-05-15 22:08:0584.38417.982435.58430.1345
113802023-05-15 22:08:0585.37617.934335.58210.0937
113812023-05-15 22:08:0586.36817.861235.57990.0300
\n", "

11382 rows × 5 columns

\n", "
" ], "text/plain": [ " TIME DEPTH TEMP PSAL CPHL\n", "0 2014-12-08 22:28:54 1.986 21.6432 35.5080 0.9365\n", "1 2014-12-08 22:28:54 2.979 21.6441 35.5085 0.9560\n", "2 2014-12-08 22:28:54 3.971 21.6417 35.5085 0.9644\n", "3 2014-12-08 22:28:54 4.964 21.6314 35.5089 0.9963\n", "4 2014-12-08 22:28:54 5.957 21.6077 35.5102 0.9844\n", "... ... ... ... ... ...\n", "11377 2023-05-15 22:08:05 82.398 18.0130 35.5832 0.1554\n", "11378 2023-05-15 22:08:05 83.391 18.0008 35.5841 0.1417\n", "11379 2023-05-15 22:08:05 84.384 17.9824 35.5843 0.1345\n", "11380 2023-05-15 22:08:05 85.376 17.9343 35.5821 0.0937\n", "11381 2023-05-15 22:08:05 86.368 17.8612 35.5799 0.0300\n", "\n", "[11382 rows x 5 columns]" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "code", "execution_count": 27, "id": "f0a36ec4-b928-4000-b80c-a6b6738e7deb", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ ":Layout\n", " .NdOverlay.I :NdOverlay [TIME]\n", " :Curve [TEMP] (DEPTH)\n", " .NdOverlay.II :NdOverlay [TIME]\n", " :Curve [PSAL] (DEPTH)\n", " .NdOverlay.III :NdOverlay [TIME]\n", " :Curve [CPHL] (DEPTH)" ] }, "execution_count": 27, "metadata": { "application/vnd.holoviews_exec.v0+json": {} }, "output_type": "execute_result" } ], "source": [ "# We can explore the temperature, salinity and chlorophyll profiles\n", "# Change \"by\" to \"groupby\" to view one profile at a time, with time selected interactively\n", "temp_plot = df.hvplot(x=\"TEMP\", y=\"DEPTH\", by=\"TIME\", flip_yaxis=True, legend=False, width=200)\n", "psal_plot = df.hvplot(x=\"PSAL\", y=\"DEPTH\", by=\"TIME\", flip_yaxis=True, legend=False, width=200)\n", "cphl_plot = df.hvplot(x=\"CPHL\", y=\"DEPTH\", by=\"TIME\", flip_yaxis=True, legend=False, width=200)\n", "\n", "(temp_plot + psal_plot + cphl_plot).opts(tight=True)" ] }, { "cell_type": "code", "execution_count": 29, "id": "6d8ab58b-a465-4800-8172-c7b2cb7e4411", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ ":Overlay\n", " .Curve.I :Curve [TIME] (TEMP)\n", " .Scatter.I :Scatter [TIME] (TEMP)" ] }, "execution_count": 29, "metadata": { "application/vnd.holoviews_exec.v0+json": {} }, "output_type": "execute_result" } ], "source": [ "# We can also extract the temperature measurements at a fixed depth\n", "# and compare to the timeseries from the mooring \n", "comp_depth = 20 # metres\n", "\n", "df_sub = df[df.DEPTH.round() == comp_depth]\n", "ctd_plot = df_sub.hvplot.scatter(x=\"TIME\", y=\"TEMP\", c=\"red\")\n", "\n", "mooring_plot = ds_mooring.TEMP.sel(DEPTH=comp_depth).hvplot()\n", "\n", "mooring_plot * ctd_plot" ] }, { "cell_type": "markdown", "id": "8bae0efa-8466-421d-aace-39f5259cd695", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "# Direct access to files on cloud storage\n", "\n", "Data files made available to the public on cloud storage such as [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) (Simple Storage Service) can be accessed over the web as if they were stored locally. You just need to find the exact URL for each file.\n", "\n", "In Python, we can access S3 storage in a very similar way to a local filesystem using the `s3fs` library." ] }, { "cell_type": "markdown", "id": "78fdff28-e958-42a8-8a07-43ebd5583020", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "For example, all the public data files hosted by the Australian Ocean Data Network are stored in an [S3 bucket](https://www.techtarget.com/searchaws/definition/AWS-bucket) called `imos-data`. You can browse the contents of the bucket and download individual files [here](https://imos-data.aodn.org.au). \n", "\n", "Below we'll look at a [high-resolution regional SST product](https://catalogue-imos.aodn.org.au/geonetwork/srv/eng/catalog.search#/metadata/a4170ca8-0942-4d13-bdb8-ad4718ce14bb) from IMOS (based on satellite and in-situ observations). This product is a collection of daily gridded NetCDF files covering the Australian region." ] }, { "cell_type": "code", "execution_count": 30, "id": "00b9e6e6-c345-46bf-a325-1f9e98059303", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "['imos-data/IMOS/SRS/SST/ghrsst/L4/RAMSSA/2023/20230713120000-ABOM-L4_GHRSST-SSTfnd-RAMSSA_09km-AUS-v02.0-fv01.0.nc',\n", " 'imos-data/IMOS/SRS/SST/ghrsst/L4/RAMSSA/2023/20230714120000-ABOM-L4_GHRSST-SSTfnd-RAMSSA_09km-AUS-v02.0-fv01.0.nc',\n", " 'imos-data/IMOS/SRS/SST/ghrsst/L4/RAMSSA/2023/20230715120000-ABOM-L4_GHRSST-SSTfnd-RAMSSA_09km-AUS-v02.0-fv01.0.nc',\n", " 'imos-data/IMOS/SRS/SST/ghrsst/L4/RAMSSA/2023/20230716120000-ABOM-L4_GHRSST-SSTfnd-RAMSSA_09km-AUS-v02.0-fv01.0.nc',\n", " 'imos-data/IMOS/SRS/SST/ghrsst/L4/RAMSSA/2023/20230717120000-ABOM-L4_GHRSST-SSTfnd-RAMSSA_09km-AUS-v02.0-fv01.0.nc',\n", " 'imos-data/IMOS/SRS/SST/ghrsst/L4/RAMSSA/2023/20230718120000-ABOM-L4_GHRSST-SSTfnd-RAMSSA_09km-AUS-v02.0-fv01.0.nc',\n", " 'imos-data/IMOS/SRS/SST/ghrsst/L4/RAMSSA/2023/20230719120000-ABOM-L4_GHRSST-SSTfnd-RAMSSA_09km-AUS-v02.0-fv01.0.nc',\n", " 'imos-data/IMOS/SRS/SST/ghrsst/L4/RAMSSA/2023/20230720120000-ABOM-L4_GHRSST-SSTfnd-RAMSSA_09km-AUS-v02.0-fv01.0.nc',\n", " 'imos-data/IMOS/SRS/SST/ghrsst/L4/RAMSSA/2023/20230721120000-ABOM-L4_GHRSST-SSTfnd-RAMSSA_09km-AUS-v02.0-fv01.0.nc',\n", " 'imos-data/IMOS/SRS/SST/ghrsst/L4/RAMSSA/2023/20230722120000-ABOM-L4_GHRSST-SSTfnd-RAMSSA_09km-AUS-v02.0-fv01.0.nc',\n", " 'imos-data/IMOS/SRS/SST/ghrsst/L4/RAMSSA/2023/20230723120000-ABOM-L4_GHRSST-SSTfnd-RAMSSA_09km-AUS-v02.0-fv01.0.nc',\n", " 'imos-data/IMOS/SRS/SST/ghrsst/L4/RAMSSA/2023/20230725120000-ABOM-L4_GHRSST-SSTfnd-RAMSSA_09km-AUS-v02.0-fv01.0.nc',\n", " 'imos-data/IMOS/SRS/SST/ghrsst/L4/RAMSSA/2023/20230726120000-ABOM-L4_GHRSST-SSTfnd-RAMSSA_09km-AUS-v02.0-fv01.0.nc',\n", " 'imos-data/IMOS/SRS/SST/ghrsst/L4/RAMSSA/2023/20230727120000-ABOM-L4_GHRSST-SSTfnd-RAMSSA_09km-AUS-v02.0-fv01.0.nc',\n", " 'imos-data/IMOS/SRS/SST/ghrsst/L4/RAMSSA/2023/20230728120000-ABOM-L4_GHRSST-SSTfnd-RAMSSA_09km-AUS-v02.0-fv01.0.nc',\n", " 'imos-data/IMOS/SRS/SST/ghrsst/L4/RAMSSA/2023/20230729120000-ABOM-L4_GHRSST-SSTfnd-RAMSSA_09km-AUS-v02.0-fv01.0.nc',\n", " 'imos-data/IMOS/SRS/SST/ghrsst/L4/RAMSSA/2023/20230730120000-ABOM-L4_GHRSST-SSTfnd-RAMSSA_09km-AUS-v02.0-fv01.0.nc',\n", " 'imos-data/IMOS/SRS/SST/ghrsst/L4/RAMSSA/2023/20230731120000-ABOM-L4_GHRSST-SSTfnd-RAMSSA_09km-AUS-v02.0-fv01.0.nc',\n", " 'imos-data/IMOS/SRS/SST/ghrsst/L4/RAMSSA/2023/20230801120000-ABOM-L4_GHRSST-SSTfnd-RAMSSA_09km-AUS-v02.0-fv01.0.nc',\n", " 'imos-data/IMOS/SRS/SST/ghrsst/L4/RAMSSA/2023/20230802120000-ABOM-L4_GHRSST-SSTfnd-RAMSSA_09km-AUS-v02.0-fv01.0.nc']" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s3 = s3fs.S3FileSystem(anon=True)\n", "\n", "# List the most recent files available\n", "sst_files = s3.ls(\"imos-data/IMOS/SRS/SST/ghrsst/L4/RAMSSA/2023\")\n", "sst_files[-20:]" ] }, { "cell_type": "code", "execution_count": 31, "id": "285652d9-de6c-48a8-917a-a7447a7c95b3", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [ "DRAFT" ] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset>\n",
       "Dimensions:           (time: 1, lat: 1081, lon: 1561)\n",
       "Coordinates:\n",
       "  * time              (time) datetime64[ns] 2023-08-02T12:00:00\n",
       "  * lat               (lat) float32 -70.0 -69.92 -69.83 ... 19.83 19.92 20.0\n",
       "  * lon               (lon) float32 60.0 60.08 60.17 60.25 ... 189.8 189.9 190.0\n",
       "Data variables:\n",
       "    sea_ice_fraction  (time, lat, lon) float32 ...\n",
       "    analysed_sst      (time, lat, lon) float32 ...\n",
       "    analysis_error    (time, lat, lon) float32 ...\n",
       "    mask              (time, lat, lon) float32 ...\n",
       "    crs               int32 -2147483647\n",
       "Attributes: (12/65)\n",
       "    id:                         RAMSSA_09km-ABOM-L4-AUS-v01\n",
       "    Conventions:                CF-1.6, ACDD-1.3, ISO 8601\n",
       "    title:                      RAMSSA v1.1 Analysed high resolution foundati...\n",
       "    summary:                    AMSR2-JAXA nobs=946601 obsesd: avg=0.693 min=...\n",
       "    source:                     AMSR2-JAXA,AVHRRMTB_G-NAVO,VIIRS_NPP_OSPO,VII...\n",
       "    references:                 Beggs H., A. Zhong, G. Warren, O. Alves, G. B...\n",
       "    ...                         ...\n",
       "    geospatial_lat_max:         20.0\n",
       "    geospatial_lat_min:         -70.0\n",
       "    geospatial_lon_max:         190.0\n",
       "    geospatial_lon_min:         60.0\n",
       "    geospatial_bounds:          POLYGON((-70 60, 20 60, 20 190, -70 190, -70 ...\n",
       "    geospatial_bounds_crs:      EPSG:4326
" ], "text/plain": [ "\n", "Dimensions: (time: 1, lat: 1081, lon: 1561)\n", "Coordinates:\n", " * time (time) datetime64[ns] 2023-08-02T12:00:00\n", " * lat (lat) float32 -70.0 -69.92 -69.83 ... 19.83 19.92 20.0\n", " * lon (lon) float32 60.0 60.08 60.17 60.25 ... 189.8 189.9 190.0\n", "Data variables:\n", " sea_ice_fraction (time, lat, lon) float32 ...\n", " analysed_sst (time, lat, lon) float32 ...\n", " analysis_error (time, lat, lon) float32 ...\n", " mask (time, lat, lon) float32 ...\n", " crs int32 ...\n", "Attributes: (12/65)\n", " id: RAMSSA_09km-ABOM-L4-AUS-v01\n", " Conventions: CF-1.6, ACDD-1.3, ISO 8601\n", " title: RAMSSA v1.1 Analysed high resolution foundati...\n", " summary: AMSR2-JAXA nobs=946601 obsesd: avg=0.693 min=...\n", " source: AMSR2-JAXA,AVHRRMTB_G-NAVO,VIIRS_NPP_OSPO,VII...\n", " references: Beggs H., A. Zhong, G. Warren, O. Alves, G. B...\n", " ... ...\n", " geospatial_lat_max: 20.0\n", " geospatial_lat_min: -70.0\n", " geospatial_lon_max: 190.0\n", " geospatial_lon_min: 60.0\n", " geospatial_bounds: POLYGON((-70 60, 20 60, 20 190, -70 190, -70 ...\n", " geospatial_bounds_crs: EPSG:4326" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Open the latest file and look at its contents\n", "ds = xr.open_dataset(s3.open(sst_files[-1]))\n", "ds" ] }, { "cell_type": "code", "execution_count": 32, "id": "9e9e48b0-e0d8-475b-ae1f-17bf90cfe9bd", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [ "DRAFT" ] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.9/site-packages/cartopy/io/__init__.py:241: DownloadWarning: Downloading: https://naturalearth.s3.amazonaws.com/110m_physical/ne_110m_land.zip\n", " warnings.warn(f'Downloading: {url}', DownloadWarning)\n" ] }, { "data": { "text/html": [ "" ], "text/plain": [ ":Overlay\n", " .Image.I :Image [lon,lat] (analysed_sst)\n", " .Land.I :Feature [Longitude,Latitude]" ] }, "execution_count": 32, "metadata": { "application/vnd.holoviews_exec.v0+json": {} }, "output_type": "execute_result" } ], "source": [ "# Plot a subset of the dataset around Australia\n", "sst_var = 'analysed_sst'\n", "gds = gv.Dataset(ds.sel(lat=slice(-50, 0), lon=slice(105, 175)),\n", " kdims=['lon', 'lat'],\n", " vdims=[sst_var]\n", " )\n", "sst_plot = (gds.to(gv.Image)\n", " .opts(cmap='coolwarm', colorbar=True, aspect=1.4, title=ds.title))\n", "sst_plot * gf.land" ] }, { "cell_type": "markdown", "id": "69f9e6cf-4e07-42e2-ad13-fbb282f568d6", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "It's worth understanding a little about how this works. \n", "\n", "The above example only makes use of the metadata from the file, one of the 4 data variables, and the `lon` and `lat` coordinates. On a local filesystem, it would be easy to read only these specific parts of the file from disk. " ] }, { "cell_type": "markdown", "id": "1de52f75-90ca-49be-a644-5deb139077bc", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "source": [ "However, on cloud storage services like S3 (also called \"object storage\") the basic read/write functions operate on the entire file (object), so at least in the backend, the entire file is read**. If you only need a small subset of a large file, this can be a very inefficient way to get it.\n", "\n", "** _Note: it is possible to request only a subset of an S3 object to be read, but this is more advanced usage than what we're doing here._" ] }, { "cell_type": "markdown", "id": "73e731bc-985f-4d29-8647-8f0e2c476fe7", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [ "DRAFT" ] }, "source": [ "For example, if we wanted to plot a timeseries of the above satellite SST product at a given point, we would only need a single value out of each file (corresponding to one point in the timeseries), but the entire file would need to be read each time.\n", "\n", "For a quick demo we'll try this with last month's files. `xarray` has a handy `open_mfdataset` function that can create a single `Dataset` object out of a series of files (with similar structure)." ] }, { "cell_type": "code", "execution_count": 33, "id": "ac703357-680d-4ada-b536-93f81a3b3daf", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [ "DRAFT" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 4.78 s, sys: 119 ms, total: 4.9 s\n", "Wall time: 15.4 s\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset>\n",
       "Dimensions:           (time: 30, lat: 1081, lon: 1561)\n",
       "Coordinates:\n",
       "  * time              (time) datetime64[ns] 2023-07-01T12:00:00 ... 2023-07-3...\n",
       "  * lat               (lat) float32 -70.0 -69.92 -69.83 ... 19.83 19.92 20.0\n",
       "  * lon               (lon) float32 60.0 60.08 60.17 60.25 ... 189.8 189.9 190.0\n",
       "Data variables:\n",
       "    sea_ice_fraction  (time, lat, lon) float32 dask.array<chunksize=(1, 1081, 1561), meta=np.ndarray>\n",
       "    analysed_sst      (time, lat, lon) float32 dask.array<chunksize=(1, 1081, 1561), meta=np.ndarray>\n",
       "    analysis_error    (time, lat, lon) float32 dask.array<chunksize=(1, 1081, 1561), meta=np.ndarray>\n",
       "    mask              (time, lat, lon) float32 dask.array<chunksize=(1, 1081, 1561), meta=np.ndarray>\n",
       "    crs               (time) int32 -2147483647 -2147483647 ... -2147483647\n",
       "Attributes: (12/65)\n",
       "    id:                         RAMSSA_09km-ABOM-L4-AUS-v01\n",
       "    Conventions:                CF-1.6, ACDD-1.3, ISO 8601\n",
       "    title:                      RAMSSA v1.1 Analysed high resolution foundati...\n",
       "    summary:                    AMSR2-JAXA nobs=****** obsesd: avg=0.693 min=...\n",
       "    source:                     AMSR2-JAXA,AVHRRMTB_G-NAVO,VIIRS_NPP_OSPO,VII...\n",
       "    references:                 Beggs H., A. Zhong, G. Warren, O. Alves, G. B...\n",
       "    ...                         ...\n",
       "    geospatial_lat_max:         20.0\n",
       "    geospatial_lat_min:         -70.0\n",
       "    geospatial_lon_max:         190.0\n",
       "    geospatial_lon_min:         60.0\n",
       "    geospatial_bounds:          POLYGON((-70 60, 20 60, 20 190, -70 190, -70 ...\n",
       "    geospatial_bounds_crs:      EPSG:4326
" ], "text/plain": [ "\n", "Dimensions: (time: 30, lat: 1081, lon: 1561)\n", "Coordinates:\n", " * time (time) datetime64[ns] 2023-07-01T12:00:00 ... 2023-07-3...\n", " * lat (lat) float32 -70.0 -69.92 -69.83 ... 19.83 19.92 20.0\n", " * lon (lon) float32 60.0 60.08 60.17 60.25 ... 189.8 189.9 190.0\n", "Data variables:\n", " sea_ice_fraction (time, lat, lon) float32 dask.array\n", " analysed_sst (time, lat, lon) float32 dask.array\n", " analysis_error (time, lat, lon) float32 dask.array\n", " mask (time, lat, lon) float32 dask.array\n", " crs (time) int32 -2147483647 -2147483647 ... -2147483647\n", "Attributes: (12/65)\n", " id: RAMSSA_09km-ABOM-L4-AUS-v01\n", " Conventions: CF-1.6, ACDD-1.3, ISO 8601\n", " title: RAMSSA v1.1 Analysed high resolution foundati...\n", " summary: AMSR2-JAXA nobs=****** obsesd: avg=0.693 min=...\n", " source: AMSR2-JAXA,AVHRRMTB_G-NAVO,VIIRS_NPP_OSPO,VII...\n", " references: Beggs H., A. Zhong, G. Warren, O. Alves, G. B...\n", " ... ...\n", " geospatial_lat_max: 20.0\n", " geospatial_lat_min: -70.0\n", " geospatial_lon_max: 190.0\n", " geospatial_lon_min: 60.0\n", " geospatial_bounds: POLYGON((-70 60, 20 60, 20 190, -70 190, -70 ...\n", " geospatial_bounds_crs: EPSG:4326" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%time\n", "s3_objs = [s3.open(f)\n", " for f in s3.glob(\"imos-data/IMOS/SRS/SST/ghrsst/L4/RAMSSA/2023/202307*\")\n", " ]\n", "mds = xr.open_mfdataset(s3_objs, engine=\"h5netcdf\")\n", "mds" ] }, { "cell_type": "markdown", "id": "7ec9f43c-ecf0-4334-951a-07df69c81d85", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "The variables in the dataset are not loaded into memory (they're still `dask.array`s). However, in the background, each complete file had to be downloaded from S3 before the metadata needed by `open_mfdataset` could be read. " ] }, { "cell_type": "code", "execution_count": 34, "id": "ab44ed1e-0c09-4ebb-a7bd-b85f7fd365e6", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.DataArray 'analysed_sst' (time: 30, lat: 1081, lon: 1561)>\n",
       "dask.array<concatenate, shape=(30, 1081, 1561), dtype=float32, chunksize=(1, 1081, 1561), chunktype=numpy.ndarray>\n",
       "Coordinates:\n",
       "  * time     (time) datetime64[ns] 2023-07-01T12:00:00 ... 2023-07-31T12:00:00\n",
       "  * lat      (lat) float32 -70.0 -69.92 -69.83 -69.75 ... 19.75 19.83 19.92 20.0\n",
       "  * lon      (lon) float32 60.0 60.08 60.17 60.25 ... 189.8 189.8 189.9 190.0\n",
       "Attributes:\n",
       "    valid_min:              -300\n",
       "    valid_max:              4500\n",
       "    clip_min:               269.30999398231506\n",
       "    clip_max:               304.8399931881577\n",
       "    units:                  kelvin\n",
       "    long_name:              analysed sea surface temperature\n",
       "    standard_name:          sea_surface_foundation_temperature\n",
       "    comment:                Optimally interpolated analysis of SST observations.\n",
       "    source:                 AMSR2-JAXA,AVHRRMTB_G-NAVO,VIIRS_NPP_OSPO,VIIRS_N...\n",
       "    coverage_content_type:  physicalMeasurement\n",
       "    grid_mapping:           crs
" ], "text/plain": [ "\n", "dask.array\n", "Coordinates:\n", " * time (time) datetime64[ns] 2023-07-01T12:00:00 ... 2023-07-31T12:00:00\n", " * lat (lat) float32 -70.0 -69.92 -69.83 -69.75 ... 19.75 19.83 19.92 20.0\n", " * lon (lon) float32 60.0 60.08 60.17 60.25 ... 189.8 189.8 189.9 190.0\n", "Attributes:\n", " valid_min: -300\n", " valid_max: 4500\n", " clip_min: 269.30999398231506\n", " clip_max: 304.8399931881577\n", " units: kelvin\n", " long_name: analysed sea surface temperature\n", " standard_name: sea_surface_foundation_temperature\n", " comment: Optimally interpolated analysis of SST observations.\n", " source: AMSR2-JAXA,AVHRRMTB_G-NAVO,VIIRS_NPP_OSPO,VIIRS_N...\n", " coverage_content_type: physicalMeasurement\n", " grid_mapping: crs" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mds.analysed_sst" ] }, { "cell_type": "markdown", "id": "1c3f1a88-a434-49e9-86d4-49b55aef83fd", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "Let's compare this to reading the same files from a local filesystem..." ] }, { "cell_type": "code", "execution_count": 35, "id": "31d739cc-27ff-4678-a314-f1cafb177ab0", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [ "DRAFT" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 4.36 s, sys: 56.1 ms, total: 4.41 s\n", "Wall time: 5.28 s\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset>\n",
       "Dimensions:           (time: 30, lat: 1081, lon: 1561)\n",
       "Coordinates:\n",
       "  * time              (time) datetime64[ns] 2023-07-01T12:00:00 ... 2023-07-3...\n",
       "  * lat               (lat) float32 -70.0 -69.92 -69.83 ... 19.83 19.92 20.0\n",
       "  * lon               (lon) float32 60.0 60.08 60.17 60.25 ... 189.8 189.9 190.0\n",
       "Data variables:\n",
       "    sea_ice_fraction  (time, lat, lon) float32 dask.array<chunksize=(1, 1081, 1561), meta=np.ndarray>\n",
       "    analysed_sst      (time, lat, lon) float32 dask.array<chunksize=(1, 1081, 1561), meta=np.ndarray>\n",
       "    analysis_error    (time, lat, lon) float32 dask.array<chunksize=(1, 1081, 1561), meta=np.ndarray>\n",
       "    mask              (time, lat, lon) float32 dask.array<chunksize=(1, 1081, 1561), meta=np.ndarray>\n",
       "    crs               (time) int32 -2147483647 -2147483647 ... -2147483647\n",
       "Attributes: (12/65)\n",
       "    id:                         RAMSSA_09km-ABOM-L4-AUS-v01\n",
       "    Conventions:                CF-1.6, ACDD-1.3, ISO 8601\n",
       "    title:                      RAMSSA v1.1 Analysed high resolution foundati...\n",
       "    summary:                    AMSR2-JAXA nobs=****** obsesd: avg=0.693 min=...\n",
       "    source:                     AMSR2-JAXA,AVHRRMTB_G-NAVO,VIIRS_NPP_OSPO,VII...\n",
       "    references:                 Beggs H., A. Zhong, G. Warren, O. Alves, G. B...\n",
       "    ...                         ...\n",
       "    geospatial_lat_max:         20.0\n",
       "    geospatial_lat_min:         -70.0\n",
       "    geospatial_lon_max:         190.0\n",
       "    geospatial_lon_min:         60.0\n",
       "    geospatial_bounds:          POLYGON((-70 60, 20 60, 20 190, -70 190, -70 ...\n",
       "    geospatial_bounds_crs:      EPSG:4326
" ], "text/plain": [ "\n", "Dimensions: (time: 30, lat: 1081, lon: 1561)\n", "Coordinates:\n", " * time (time) datetime64[ns] 2023-07-01T12:00:00 ... 2023-07-3...\n", " * lat (lat) float32 -70.0 -69.92 -69.83 ... 19.83 19.92 20.0\n", " * lon (lon) float32 60.0 60.08 60.17 60.25 ... 189.8 189.9 190.0\n", "Data variables:\n", " sea_ice_fraction (time, lat, lon) float32 dask.array\n", " analysed_sst (time, lat, lon) float32 dask.array\n", " analysis_error (time, lat, lon) float32 dask.array\n", " mask (time, lat, lon) float32 dask.array\n", " crs (time) int32 -2147483647 -2147483647 ... -2147483647\n", "Attributes: (12/65)\n", " id: RAMSSA_09km-ABOM-L4-AUS-v01\n", " Conventions: CF-1.6, ACDD-1.3, ISO 8601\n", " title: RAMSSA v1.1 Analysed high resolution foundati...\n", " summary: AMSR2-JAXA nobs=****** obsesd: avg=0.693 min=...\n", " source: AMSR2-JAXA,AVHRRMTB_G-NAVO,VIIRS_NPP_OSPO,VII...\n", " references: Beggs H., A. Zhong, G. Warren, O. Alves, G. B...\n", " ... ...\n", " geospatial_lat_max: 20.0\n", " geospatial_lat_min: -70.0\n", " geospatial_lon_max: 190.0\n", " geospatial_lon_min: 60.0\n", " geospatial_bounds: POLYGON((-70 60, 20 60, 20 190, -70 190, -70 ...\n", " geospatial_bounds_crs: EPSG:4326" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%time\n", "from glob import glob\n", "local_files = glob(os.path.join(DATA_BASEPATH, \"RAMSSA\", \"*\"))\n", "\n", "mds = xr.open_mfdataset(local_files, engine=\"h5netcdf\")\n", "mds" ] }, { "cell_type": "markdown", "id": "d3468213-a5a3-45c8-ab43-97d03b6b99df", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "Whichever way we loaded the dataset, we can plot it the same way as any other `xarray.Dataset`." ] }, { "cell_type": "code", "execution_count": 36, "id": "d42039a2-691e-4f9f-b936-f9d252215b17", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 809 ms, sys: 86.3 ms, total: 895 ms\n", "Wall time: 3.65 s\n" ] }, { "data": { "text/html": [ "" ], "text/plain": [ ":Curve [time] (analysed_sst)" ] }, "execution_count": 36, "metadata": { "application/vnd.holoviews_exec.v0+json": {} }, "output_type": "execute_result" } ], "source": [ "%%time\n", "mds[sst_var].sel(lat=-42, lon=150, method=\"nearest\").hvplot()" ] }, { "cell_type": "markdown", "id": "1c89076b-480b-4a04-b7ca-c582786879fb", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "## Zarr - a cloud-optimised data format\n", "\n", "Zarr is a relatively new data format specifically developed for efficient access to multi-dimensional data in the cloud. Each dataset is broken up into many smaller files containing \"chunks\" of the data, organised in a standard hierarchy. The metadata are stored in separate files. When reading such a dataset, only the required information is read for each operation." ] }, { "cell_type": "code", "execution_count": 37, "id": "3b0aabac-3b27-4a93-8c68-8d8004c719e2", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset>\n",
       "Dimensions:                  (time: 178, lat: 4500, lon: 6000)\n",
       "Coordinates:\n",
       "  * lat                      (lat) float32 19.99 19.97 19.95 ... -69.97 -69.99\n",
       "  * lon                      (lon) float32 70.01 70.03 70.05 ... 190.0 190.0\n",
       "  * time                     (time) datetime64[ns] 2021-01-01T15:20:00 ... 20...\n",
       "Data variables:\n",
       "    dt_analysis              (time, lat, lon) float32 dask.array<chunksize=(64, 64, 64), meta=np.ndarray>\n",
       "    l2p_flags                (time, lat, lon) float32 dask.array<chunksize=(64, 64, 64), meta=np.ndarray>\n",
       "    quality_level            (time, lat, lon) float32 dask.array<chunksize=(64, 64, 64), meta=np.ndarray>\n",
       "    satellite_zenith_angle   (time, lat, lon) float32 dask.array<chunksize=(64, 64, 64), meta=np.ndarray>\n",
       "    sea_surface_temperature  (time, lat, lon) float32 dask.array<chunksize=(64, 64, 64), meta=np.ndarray>\n",
       "    sses_bias                (time, lat, lon) float32 dask.array<chunksize=(64, 64, 64), meta=np.ndarray>\n",
       "    sses_count               (time, lat, lon) float32 dask.array<chunksize=(64, 64, 64), meta=np.ndarray>\n",
       "    sses_standard_deviation  (time, lat, lon) float32 dask.array<chunksize=(64, 64, 64), meta=np.ndarray>\n",
       "Attributes: (12/47)\n",
       "    Conventions:                CF-1.6\n",
       "    Metadata_Conventions:       Unidata Dataset Discovery v1.0\n",
       "    Metadata_Link:              TBA\n",
       "    acknowledgment:             Any use of these data requires the following ...\n",
       "    cdm_data_type:              grid\n",
       "    comment:                    HRPT AVHRR experimental L3 retrieval produced...\n",
       "    ...                         ...\n",
       "    summary:                    Skin SST retrievals produced from stitching t...\n",
       "    time_coverage_end:          20210101T151752Z\n",
       "    time_coverage_start:        20210101T095824Z\n",
       "    title:                      IMOS L3S Nighttime gridded multiple-sensor mu...\n",
       "    uuid:                       4d02ee75-876d-4ff0-8956-ab68917c9001\n",
       "    westernmost_longitude:      70.01000213623047
" ], "text/plain": [ "\n", "Dimensions: (time: 178, lat: 4500, lon: 6000)\n", "Coordinates:\n", " * lat (lat) float32 19.99 19.97 19.95 ... -69.97 -69.99\n", " * lon (lon) float32 70.01 70.03 70.05 ... 190.0 190.0\n", " * time (time) datetime64[ns] 2021-01-01T15:20:00 ... 20...\n", "Data variables:\n", " dt_analysis (time, lat, lon) float32 dask.array\n", " l2p_flags (time, lat, lon) float32 dask.array\n", " quality_level (time, lat, lon) float32 dask.array\n", " satellite_zenith_angle (time, lat, lon) float32 dask.array\n", " sea_surface_temperature (time, lat, lon) float32 dask.array\n", " sses_bias (time, lat, lon) float32 dask.array\n", " sses_count (time, lat, lon) float32 dask.array\n", " sses_standard_deviation (time, lat, lon) float32 dask.array\n", "Attributes: (12/47)\n", " Conventions: CF-1.6\n", " Metadata_Conventions: Unidata Dataset Discovery v1.0\n", " Metadata_Link: TBA\n", " acknowledgment: Any use of these data requires the following ...\n", " cdm_data_type: grid\n", " comment: HRPT AVHRR experimental L3 retrieval produced...\n", " ... ...\n", " summary: Skin SST retrievals produced from stitching t...\n", " time_coverage_end: 20210101T151752Z\n", " time_coverage_start: 20210101T095824Z\n", " title: IMOS L3S Nighttime gridded multiple-sensor mu...\n", " uuid: 4d02ee75-876d-4ff0-8956-ab68917c9001\n", " westernmost_longitude: 70.01000213623047" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# A Zarr \"store\" can easily be opened as an xarray.Dataset\n", "\n", "# In this case the Zarr store is in an S3 bucket\n", "# NOTE: This is an experimental dataset. It may not be available in the fultre.\n", "store = s3fs.S3Map(root='imos-data-pixeldrill/zarrs/2021/', s3=s3, check=False)\n", "\n", "zds = xr.open_zarr(store)\n", "zds" ] }, { "cell_type": "code", "execution_count": 38, "id": "f9360766-1fd6-49a2-9825-1009ea139e76", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.DataArray 'sea_surface_temperature' (time: 178, lat: 4500, lon: 6000)>\n",
       "dask.array<open_dataset-5ed7711d911bd370bffa8b7f9a31ccf1sea_surface_temperature, shape=(178, 4500, 6000), dtype=float32, chunksize=(64, 64, 64), chunktype=numpy.ndarray>\n",
       "Coordinates:\n",
       "  * lat      (lat) float32 19.99 19.97 19.95 19.93 ... -69.95 -69.97 -69.99\n",
       "  * lon      (lon) float32 70.01 70.03 70.05 70.07 ... 189.9 189.9 190.0 190.0\n",
       "  * time     (time) datetime64[ns] 2021-01-01T15:20:00 ... 2021-07-25T15:20:00\n",
       "Attributes:\n",
       "    _Netcdf4Dimid:  2\n",
       "    comment:        The skin temperature of the ocean at a depth of approxima...\n",
       "    long_name:      sea surface skin temperature\n",
       "    standard_name:  sea_surface_skin_temperature\n",
       "    units:          kelvin\n",
       "    valid_max:      32767\n",
       "    valid_min:      -32767
" ], "text/plain": [ "\n", "dask.array\n", "Coordinates:\n", " * lat (lat) float32 19.99 19.97 19.95 19.93 ... -69.95 -69.97 -69.99\n", " * lon (lon) float32 70.01 70.03 70.05 70.07 ... 189.9 189.9 190.0 190.0\n", " * time (time) datetime64[ns] 2021-01-01T15:20:00 ... 2021-07-25T15:20:00\n", "Attributes:\n", " _Netcdf4Dimid: 2\n", " comment: The skin temperature of the ocean at a depth of approxima...\n", " long_name: sea surface skin temperature\n", " standard_name: sea_surface_skin_temperature\n", " units: kelvin\n", " valid_max: 32767\n", " valid_min: -32767" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We can see the chunked structure of the data by looking at one of the variables\n", "zds.sea_surface_temperature" ] }, { "cell_type": "code", "execution_count": null, "id": "e65ac6cc-3d98-449e-a50f-17c1a22715d0", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [ "DRAFT" ] }, "outputs": [], "source": [ "%%time\n", "\n", "# We can plot this dataset in exactly the same way as the NetCDF-based one\n", "sst_var = 'sea_surface_temperature'\n", "gds = gv.Dataset(zds[sst_var].sel(time='2021-01-02', lat=slice(0, -50), lon=slice(105, 175)),\n", " kdims=['lon', 'lat'],\n", " vdims=[sst_var]\n", " )\n", "sst_plot = (gds.to(gv.Image, ['lon', 'lat'])\n", " .opts(cmap='coolwarm', colorbar=True, aspect=1.4, title=zds.title))\n", "sst_plot * gf.land" ] }, { "cell_type": "markdown", "id": "9ed83c49-cf11-4306-a4ee-d058a6b417d4", "metadata": { "slideshow": { "slide_type": "skip" }, "tags": [] }, "source": [ "### Another example\n", "\n", "A more detailed example of working with similar data in Zarr format can be found here: https://github.com/aodn/rimrep-examples/blob/main/Python_based_scripts/zarr.ipynb" ] }, { "cell_type": "markdown", "id": "b66e306b-1fe7-4083-bcb1-429325eae669", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "source": [ "## Parquet\n", "\n", "* Parquet is a cloud-optimised format designed for tabular data.\n", "* Each column of the table is stored in a separate file/object.\n", "* These can be further partitioned into _row groups_." ] }, { "cell_type": "markdown", "id": "be833434-9d83-45fd-8786-a50fc35969b2", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "source": [ "For a quick demo, we'll borrow an example from [this more detailed notebook](https://github.com/aodn/rimrep-examples/blob/main/Python_based_scripts/Extracting_Water_Temperature_at_Site.ipynb), looking at temperature logger data from the Australian Institute of Marine Science. The dataset contains 150 million temperature measurements from numerous sites around Australia ([metadata for this dataset](https://apps.aims.gov.au/metadata/view/4a12a8c0-c573-11dc-b99b-00008a07204e)).\n", "\n", "We'll use `dask.dataframe` to access the parquet data in a lazy way - reading only what is necessary and only when requested." ] }, { "cell_type": "code", "execution_count": 49, "id": "42830aee-9afa-4cfe-811c-b70f6d13028d", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
siteqc_val
time
2015-01-02 07:30:00+00:00Geographe Bay24.3728
2015-01-02 07:00:00+00:00Geographe Bay24.3728
2015-01-02 06:30:00+00:00Geographe Bay24.3238
2015-01-02 06:00:00+00:00Geographe Bay24.2518
2015-01-02 05:30:00+00:00Geographe Bay24.1798
\n", "
" ], "text/plain": [ " site qc_val\n", "time \n", "2015-01-02 07:30:00+00:00 Geographe Bay 24.3728\n", "2015-01-02 07:00:00+00:00 Geographe Bay 24.3728\n", "2015-01-02 06:30:00+00:00 Geographe Bay 24.3238\n", "2015-01-02 06:00:00+00:00 Geographe Bay 24.2518\n", "2015-01-02 05:30:00+00:00 Geographe Bay 24.1798" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Here's the path to the dataset on AWS S3\n", "parquet_path = \"s3://rimrep-data-public/091-aims-sst/test-50-64-spatialpart/\"\n", "\n", "# Let's see if there are any temperature loggers near us (in Dunsborough, Western Australia)\n", "filters = [('lon', '>', 114.5),\n", " ('lon', '<', 115.5),\n", " ('lat', '>', -34.),\n", " ('lat', '<', -33.)]\n", "\n", "df = dd.read_parquet(parquet_path,\n", " filters=filters,\n", " # only read the site names and QC'd temperature values\n", " columns = ['site', 'qc_val'],\n", " index='time',\n", " engine='pyarrow',\n", " storage_options = {\"anon\": True}\n", " )\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 50, "id": "74a58bb0-6d9d-4b84-9ec2-677792a2a25f", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "94896" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(df)" ] }, { "cell_type": "code", "execution_count": 51, "id": "39a28be2-8a69-4b9d-b394-2f8feb432293", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "outputs": [], "source": [ "# This subset should fit into memory, so let's turn it into a regular DataFrame\n", "df = df.compute()" ] }, { "cell_type": "code", "execution_count": 52, "id": "6a2f66ff-fe9b-4218-b7bc-da31614478eb", "metadata": { "slideshow": { "slide_type": "fragment" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "array(['Geographe Bay', 'Cowaramup Bay', 'Canal Rocks'], dtype=object)" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Let's see how many sites we have...\n", "df.site.unique()" ] }, { "cell_type": "code", "execution_count": 54, "id": "0e7bea2d-e1e8-4a2b-8cbd-3dba7f5521a0", "metadata": { "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ ":NdOverlay [site]\n", " :Curve [time] (qc_val)" ] }, "execution_count": 54, "metadata": { "application/vnd.holoviews_exec.v0+json": {} }, "output_type": "execute_result" } ], "source": [ "# Now we can plot the temperature timeseries for all these sites\n", "df.hvplot(by='site')" ] }, { "cell_type": "markdown", "id": "8ec4f51b-2293-4d91-a3fc-48d7fcdbee7e", "metadata": { "slideshow": { "slide_type": "skip" }, "tags": [] }, "source": [ "### Alternative dataset\n", "\n", "Another Parquet example using data from the Ocean Biodiversity Information System (OBIS) is shown in [this notebook](https://github.com/MathewBiddle/globe/blob/main/organismQuantity_check.ipynb)" ] }, { "cell_type": "markdown", "id": "98aa13e5-5f12-4895-936a-3dff24cf4819", "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [ "TODO", "DRAFT" ] }, "source": [ "# Other methods\n", "\n", "## ERDDAP\n", "* Supports searching, subsetting, and downloads in a wide range of formats\n", "* [Example](https://ioos.github.io/ioos_code_lab/content/code_gallery/data_access_notebooks/2016-10-12-fetching_data.html?highlight=erddap)\n", "* Also covered in [this OHW22 tutorial](https://github.com/oceanhackweek/ohw-tutorials/blob/OHW22/01-Tue/00-data-access-in-python/00-data-access.ipynb)\n", "\n", "## New OGC APIs\n", "* [New standards](https://ogcapi.ogc.org/#standards) from the Open Geospatial Consortium\n", "* OGC Features (replacement for WFS) - [example](https://github.com/aodn/rimrep-examples/blob/main/Python_based_scripts/ogcfeatures.ipynb)\n", "* OGC Coverages [example](https://github.com/aodn/rimrep-examples/blob/main/Python_based_scripts/ogccoverages.ipynb)\n", "\n", "## OGC Web Map Service (WMS)\n", "* Also covered in [this OHW22 tutorial](https://github.com/oceanhackweek/ohw-tutorials/blob/OHW22/01-Tue/00-data-access-in-python/00-data-access.ipynb)\n", "\n", "## Further resources\n", "* Lots of data access examples at [IOOS CodeLab](https://ioos.github.io/ioos_code_lab/content/code_gallery/data_access.html)\n", "* Examples in both Python and R from [Reef 2050 Integrated Monitoring and Reporting Program Data Management System (RIMReP DMS)](https://github.com/aodn/rimrep-examples)" ] } ], "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.9.16" }, "toc-autonumbering": false, "toc-showcode": false, "toc-showmarkdowntxt": false, "toc-showtags": true }, "nbformat": 4, "nbformat_minor": 5 }