From 34927b92f8e3840ee487e6f59dbcd89a66b89f1f Mon Sep 17 00:00:00 2001 From: wsauthoff Date: Thu, 19 Sep 2024 06:06:08 +0000 Subject: [PATCH] Small change to clear cached conflict --- .../IS2_ATL15_surface_height_anomalies.ipynb | 8265 ++++++++++++++++- 1 file changed, 8264 insertions(+), 1 deletion(-) diff --git a/book/tutorials/IS2_ATL15_surface_height_anomalies/IS2_ATL15_surface_height_anomalies.ipynb b/book/tutorials/IS2_ATL15_surface_height_anomalies/IS2_ATL15_surface_height_anomalies.ipynb index 09fa0ec..0c8df80 100644 --- a/book/tutorials/IS2_ATL15_surface_height_anomalies/IS2_ATL15_surface_height_anomalies.ipynb +++ b/book/tutorials/IS2_ATL15_surface_height_anomalies/IS2_ATL15_surface_height_anomalies.ipynb @@ -1 +1,8264 @@ -{"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.11.9"}},"nbformat_minor":5,"nbformat":4,"cells":[{"id":"927cf40c-fe04-439b-a065-07daa155b522","cell_type":"markdown","source":"# Using ICESat-2 ATL15 (Gridded Arctic Land Ice Height) to investigate ice-surface height anomalies\n\n### Written by \n- Wilson Sauthoff (https://wsauthoff.github.io)\n- Luis Lopez (https://betolink.dev/)\n- Jessica Scheick (https://eos.unh.edu/person/jessica-scheick)\n- Tasha Snow (https://tsnow03.github.io)\n\n### Key learning outcomes:\n- How to gather data from disparate sources.\n- What is a Coordinate Reference System (CRS) and why it matters.\n- How to use geometries including Points and Polygons to define an area of interest and subset data. \n- The basics of how the icepyx library simplifies obtaining and interacting with ICESat-2 data. \n- How Xarray can simplify the import of multi-dimensional data.\n- Open, plot, and explore gridded raster data.","metadata":{"trusted":true}},{"id":"7aa3fc55-9a2e-458e-a0a9-3354be7420a5","cell_type":"markdown","source":"## Computing environment","metadata":{"tags":[],"trusted":true}},{"id":"e452d675-7c0a-4081-8e85-300a53997e2c","cell_type":"markdown","source":"We will set up our computing environment with library imports and utility functions\n\nTip: If you need to import a library that is not pre-installed, use `%pip install ` alone within a Jupyter notebook cell to install it for this instance of CryoCloud (the pip installation will not presist between logins. All of the libraries we intend to use are pre-installed so we can skip this step. ","metadata":{"trusted":true}},{"id":"0e226454-c730-4656-ae88-19297a8a855a","cell_type":"code","source":"# Pip install libraries that are not pre-installed\n%pip install openpyxl # Needed for pandas read_excel\n%pip install icepyx","metadata":{"scrolled":true,"tags":[],"trusted":true},"outputs":[{"name":"stdout","text":"Requirement already satisfied: openpyxl in /srv/conda/envs/notebook/lib/python3.11/site-packages (3.1.5)\nRequirement already satisfied: et-xmlfile in /srv/conda/envs/notebook/lib/python3.11/site-packages (from openpyxl) (1.1.0)\nNote: you may need to restart the kernel to use updated packages.\nRequirement already satisfied: icepyx in /srv/conda/envs/notebook/lib/python3.11/site-packages (1.2.0)\nRequirement already satisfied: backoff in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (2.2.1)\nRequirement already satisfied: dask[dataframe] in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (2024.8.0)\nRequirement already satisfied: datashader in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (0.16.3)\nRequirement already satisfied: earthaccess>=0.5.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (0.10.0)\nRequirement already satisfied: fiona in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (1.9.6)\nRequirement already satisfied: geopandas in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (1.0.1)\nRequirement already satisfied: h5netcdf in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (1.3.0)\nRequirement already satisfied: h5py in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (3.11.0)\nRequirement already satisfied: holoviews in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (1.18.3)\nRequirement already satisfied: hvplot in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (0.10.0)\nRequirement already satisfied: matplotlib in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (3.9.1)\nRequirement already satisfied: numpy in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (1.26.4)\nRequirement already satisfied: requests in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (2.32.3)\nRequirement already satisfied: s3fs in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (2024.6.1)\nRequirement already satisfied: shapely in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (2.0.5)\nRequirement already satisfied: xarray in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (2024.7.0)\nRequirement already satisfied: fsspec>=2022.11 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from earthaccess>=0.5.1->icepyx) (2024.6.1)\nRequirement already satisfied: importlib-resources>=6.3.2 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from earthaccess>=0.5.1->icepyx) (6.4.0)\nRequirement already satisfied: multimethod>=1.8 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from earthaccess>=0.5.1->icepyx) (1.12)\nRequirement already satisfied: pqdm>=0.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from earthaccess>=0.5.1->icepyx) (0.2.0)\nRequirement already satisfied: python-cmr>=0.10.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from earthaccess>=0.5.1->icepyx) (0.11.0)\nRequirement already satisfied: tinynetrc<2.0.0,>=1.3.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from earthaccess>=0.5.1->icepyx) (1.3.1)\nRequirement already satisfied: typing_extensions>=4.10.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from earthaccess>=0.5.1->icepyx) (4.12.2)\nRequirement already satisfied: charset-normalizer<4,>=2 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from requests->icepyx) (3.3.2)\nRequirement already satisfied: idna<4,>=2.5 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from requests->icepyx) (3.7)\nRequirement already satisfied: urllib3<3,>=1.21.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from requests->icepyx) (1.26.19)\nRequirement already satisfied: certifi>=2017.4.17 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from requests->icepyx) (2024.7.4)\nRequirement already satisfied: aiobotocore<3.0.0,>=2.5.4 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from s3fs->icepyx) (2.13.2)\nRequirement already satisfied: aiohttp!=4.0.0a0,!=4.0.0a1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from s3fs->icepyx) (3.10.3)\nRequirement already satisfied: click>=8.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from dask[dataframe]->icepyx) (8.1.7)\nRequirement already satisfied: cloudpickle>=1.5.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from dask[dataframe]->icepyx) (3.0.0)\nRequirement already satisfied: packaging>=20.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from dask[dataframe]->icepyx) (24.1)\nRequirement already satisfied: partd>=1.4.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from dask[dataframe]->icepyx) (1.4.2)\nRequirement already satisfied: pyyaml>=5.3.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from dask[dataframe]->icepyx) (6.0.2)\nRequirement already satisfied: toolz>=0.10.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from dask[dataframe]->icepyx) (0.12.1)\nRequirement already satisfied: importlib-metadata>=4.13.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from dask[dataframe]->icepyx) (8.0.0)\nRequirement already satisfied: pandas>=2.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from dask[dataframe]->icepyx) (2.2.2)\nRequirement already satisfied: dask-expr<1.2,>=1.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from dask[dataframe]->icepyx) (1.1.10)\nRequirement already satisfied: colorcet in /srv/conda/envs/notebook/lib/python3.11/site-packages (from datashader->icepyx) (3.1.0)\nRequirement already satisfied: multipledispatch in /srv/conda/envs/notebook/lib/python3.11/site-packages (from datashader->icepyx) (0.6.0)\nRequirement already satisfied: numba in /srv/conda/envs/notebook/lib/python3.11/site-packages (from datashader->icepyx) (0.60.0)\nRequirement already satisfied: param in /srv/conda/envs/notebook/lib/python3.11/site-packages (from datashader->icepyx) (1.13.0)\nRequirement already satisfied: pillow in /srv/conda/envs/notebook/lib/python3.11/site-packages (from datashader->icepyx) (10.2.0)\nRequirement already satisfied: pyct in /srv/conda/envs/notebook/lib/python3.11/site-packages (from datashader->icepyx) (0.5.0)\nRequirement already satisfied: scipy in /srv/conda/envs/notebook/lib/python3.11/site-packages (from datashader->icepyx) (1.14.0)\nRequirement already satisfied: attrs>=19.2.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from fiona->icepyx) (23.2.0)\nRequirement already satisfied: click-plugins>=1.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from fiona->icepyx) (1.1.1)\nRequirement already satisfied: cligj>=0.5 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from fiona->icepyx) (0.7.2)\nRequirement already satisfied: six in /srv/conda/envs/notebook/lib/python3.11/site-packages (from fiona->icepyx) (1.16.0)\nRequirement already satisfied: pyogrio>=0.7.2 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from geopandas->icepyx) (0.9.0)\nRequirement already satisfied: pyproj>=3.3.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from geopandas->icepyx) (3.6.1)\nRequirement already satisfied: pyviz-comms>=0.7.4 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from holoviews->icepyx) (3.0.3)\nRequirement already satisfied: panel>=1.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from holoviews->icepyx) (1.2.3)\nRequirement already satisfied: bokeh>=1.0.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from hvplot->icepyx) (3.2.2)\nRequirement already satisfied: contourpy>=1.0.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from matplotlib->icepyx) (1.2.1)\nRequirement already satisfied: cycler>=0.10 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from matplotlib->icepyx) (0.12.1)\nRequirement already satisfied: fonttools>=4.22.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from matplotlib->icepyx) (4.53.1)\nRequirement already satisfied: kiwisolver>=1.3.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from matplotlib->icepyx) (1.4.5)\nRequirement already satisfied: pyparsing>=2.3.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from matplotlib->icepyx) (3.1.2)\nRequirement already satisfied: python-dateutil>=2.7 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from matplotlib->icepyx) (2.8.2)\nRequirement already satisfied: botocore<1.34.132,>=1.34.70 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from aiobotocore<3.0.0,>=2.5.4->s3fs->icepyx) (1.34.131)\nRequirement already satisfied: wrapt<2.0.0,>=1.10.10 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from aiobotocore<3.0.0,>=2.5.4->s3fs->icepyx) (1.16.0)\nRequirement already satisfied: aioitertools<1.0.0,>=0.5.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from aiobotocore<3.0.0,>=2.5.4->s3fs->icepyx) (0.11.0)\nRequirement already satisfied: aiohappyeyeballs>=2.3.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->s3fs->icepyx) (2.3.6)\nRequirement already satisfied: aiosignal>=1.1.2 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->s3fs->icepyx) (1.3.1)\nRequirement already satisfied: frozenlist>=1.1.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->s3fs->icepyx) (1.4.1)\nRequirement already satisfied: multidict<7.0,>=4.5 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->s3fs->icepyx) (6.0.5)\nRequirement already satisfied: yarl<2.0,>=1.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->s3fs->icepyx) (1.9.4)\nRequirement already satisfied: Jinja2>=2.9 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from bokeh>=1.0.0->hvplot->icepyx) (3.1.4)\nRequirement already satisfied: tornado>=5.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from bokeh>=1.0.0->hvplot->icepyx) (6.4.1)\nRequirement already satisfied: xyzservices>=2021.09.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from bokeh>=1.0.0->hvplot->icepyx) (2024.6.0)\nRequirement already satisfied: pyarrow>=7.0.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from dask-expr<1.2,>=1.1->dask[dataframe]->icepyx) (17.0.0)\nRequirement already satisfied: zipp>=0.5 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from importlib-metadata>=4.13.0->dask[dataframe]->icepyx) (3.19.2)\nRequirement already satisfied: pytz>=2020.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from pandas>=2.0->dask[dataframe]->icepyx) (2024.1)\nRequirement already satisfied: tzdata>=2022.7 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from pandas>=2.0->dask[dataframe]->icepyx) (2024.1)\nRequirement already satisfied: markdown in /srv/conda/envs/notebook/lib/python3.11/site-packages (from panel>=1.0->holoviews->icepyx) (3.6)\nRequirement already satisfied: markdown-it-py in /srv/conda/envs/notebook/lib/python3.11/site-packages (from panel>=1.0->holoviews->icepyx) (3.0.0)\nRequirement already satisfied: linkify-it-py in /srv/conda/envs/notebook/lib/python3.11/site-packages (from panel>=1.0->holoviews->icepyx) (2.0.3)\nRequirement already satisfied: mdit-py-plugins in /srv/conda/envs/notebook/lib/python3.11/site-packages (from panel>=1.0->holoviews->icepyx) (0.4.1)\nRequirement already satisfied: tqdm>=4.48.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from panel>=1.0->holoviews->icepyx) (4.66.5)\nRequirement already satisfied: bleach in /srv/conda/envs/notebook/lib/python3.11/site-packages (from panel>=1.0->holoviews->icepyx) (6.1.0)\nRequirement already satisfied: locket in /srv/conda/envs/notebook/lib/python3.11/site-packages (from partd>=1.4.0->dask[dataframe]->icepyx) (1.0.0)\nRequirement already satisfied: bounded-pool-executor in /srv/conda/envs/notebook/lib/python3.11/site-packages (from pqdm>=0.1->earthaccess>=0.5.1->icepyx) (0.0.3)\nRequirement already satisfied: llvmlite<0.44,>=0.43.0dev0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from numba->datashader->icepyx) (0.43.0)\nRequirement already satisfied: jmespath<2.0.0,>=0.7.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from botocore<1.34.132,>=1.34.70->aiobotocore<3.0.0,>=2.5.4->s3fs->icepyx) (1.0.1)\nRequirement already satisfied: MarkupSafe>=2.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from Jinja2>=2.9->bokeh>=1.0.0->hvplot->icepyx) (2.1.5)\nRequirement already satisfied: webencodings in /srv/conda/envs/notebook/lib/python3.11/site-packages (from bleach->panel>=1.0->holoviews->icepyx) (0.5.1)\nRequirement already satisfied: uc-micro-py in /srv/conda/envs/notebook/lib/python3.11/site-packages (from linkify-it-py->panel>=1.0->holoviews->icepyx) (1.0.3)\nRequirement already satisfied: mdurl~=0.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from markdown-it-py->panel>=1.0->holoviews->icepyx) (0.1.2)\nNote: you may need to restart the kernel to use updated packages.\n","output_type":"stream"}],"execution_count":1},{"id":"1a2db536-38fa-40b2-b01e-6f2f97881789","cell_type":"code","source":"%matplotlib widget\n\n# Import internal libraries\nimport earthaccess\nimport cartopy.crs as ccrs\nimport cartopy.feature as cfeature\nimport geopandas as gpd\nimport h5py\nimport hvplot.xarray\nimport icepyx as ipx\nfrom IPython.display import Image, display\n# import matplotlib as mpl\n# mpl.use('TkAgg') \nimport matplotlib.colors as colors\nimport matplotlib.pyplot as plt\nimport matplotlib.ticker as ticker\nfrom mpl_toolkits.axes_grid1 import make_axes_locatable\nimport numpy as np\nimport pandas as pd\nimport os\nfrom pyproj import CRS, Transformer\nimport rioxarray\nimport s3fs\nimport xarray as xr\n\n# define utility function\ndef ll2ps(lon, lat):\n \"\"\"\n Transform coordinates from geodetic coordinates (lon, lat)\n to Greenland (epsg:3413) coordinates (x, y)\n x, y = ll2ps(lon, lat)\n Inputs\n * lon, lat in decimal degrees (lon: W is negative; lat: S is negative)\n Outputs\n * x, y in [m]\n \"\"\"\n crs_ll = CRS(\"EPSG:4326\")\n crs_xy = CRS(\"EPSG:3413\")\n ll_to_xy = Transformer.from_crs(crs_ll, crs_xy, always_xy = True)\n x, y = ll_to_xy.transform(lon, lat)\n return x, y","metadata":{"tags":[],"trusted":true},"outputs":[{"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.2'.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.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.3/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.3/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.3/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.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.2.min.js\", \"https://cdn.holoviz.org/panel/1.2.3/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));","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.2'.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.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.3/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.3/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.3/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.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.2.min.js\", \"https://cdn.holoviz.org/panel/1.2.3/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/vnd.holoviews_load.v0+json":"\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n }) \n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n","application/javascript":"\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n }) \n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n"},"metadata":{}},{"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.2'.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.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.3/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.3/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.3/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 = [];\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));","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.2'.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.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.3/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.3/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.3/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 = [];\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/vnd.holoviews_load.v0+json":"\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n }) \n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n","application/javascript":"\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n }) \n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n"},"metadata":{}},{"output_type":"display_data","data":{"text/html":""},"metadata":{}}],"execution_count":2},{"id":"19ded922-7e2e-42a4-9435-5399d92fb289","cell_type":"markdown","source":"## Greenland subglacial lakes\n\nThere are two classes of subglacial lakes: stable and active. Stable lakes have had a stable volume over the observational record whereas active episodically drain and fill. We can observe active subglacial lakes using ice-surface deformation time series. \n\nIn this tutorial, we will focus on Greenland where active subglacial lakes have been inferred from surface height changes. \n\nNorthern hemisphere subglacial lakes compiled in a global inventory by Livingstone and others (2020):\n\n![N. hemisphere subglacial lakes](images/Livingstone_2020_Fig3a.png)\n\nWe can investigate active subglacial lakes using ice surface height anomalies as the overlying ice deforms when active lakes drain and fill episodically. [These videos](https://svs.gsfc.nasa.gov/4913) from NASA's Science Visualization Studio illustrate how we observe active lakes filling and draining through time. ","metadata":{"trusted":true}},{"id":"0488386a-e802-49bc-b93e-bd5d031eec55","cell_type":"markdown","source":"### Locating the Greenland subglacial lakes\nConsulting the supplementary data of the [Livingstone and others (2020) inventory](https://www.nature.com/articles/s43017-021-00246-9#Sec16), we can construct a [geopandas geodataframe](https://geopandas.org/en/stable/gallery/create_geopandas_from_pandas.html) to investigate Greenland's subglacial lakes.","metadata":{"trusted":true}},{"id":"37fd201d-2c1a-492f-ab82-4582787f8236","cell_type":"markdown","source":"## Opening non-cloud-hosted data uploaded to your CryoCloud Jupyter hub","metadata":{"trusted":true}},{"id":"c36750e1-eb53-426b-bc86-d09d9cf0c3cb","cell_type":"markdown","source":"If we are working with a dataset that is not cloud hosted or unavailable via a URL, we can upload that dataset to CryoCloud. \n\nFirst, decide where the uploaded data will live on your CryoCloud hub. It could be a data directory folder that you create in your CryoCloud's base directory or put the data into your working directory (whichever file management technique you prefer). \n\nSecond, download the paper's supplementary data by [clicking here](https://static-content.springer.com/esm/art%3A10.1038%2Fs43017-021-00246-9/MediaObjects/43017_2021_246_MOESM1_ESM.xlsx). \n\nThird, upload the supplementary data spreadsheet into your new data directory folder or your working directory. The supplementary data spreadsheet (.xlsx) is already uploaded to our working directory. ","metadata":{"trusted":true}},{"id":"7a5d4ad8-cef2-4d6e-bc88-2ee1d3673c8e","cell_type":"code","source":"# Read in spreadsheet using pandas read_excel\nuse_cols = ['Name / Location', 'Lat. oN', 'Lon. oE', 'Lake Type', 'References']\nimport_rows = np.arange(0,65)\n# You may add a path/to/file if you'd like to try reading spreadsheet from where you saved it in a data directory \ndf = pd.read_excel('43017_2021_246_MOESM1_ESM.xlsx', 'Greenland', usecols=use_cols, skiprows = lambda x: x not in import_rows)\n\n# View pandas dataset head (first 5 rows)\ndf.head()","metadata":{"tags":[],"trusted":true},"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
Name / LocationLat. oNLon. oELake TypeReferences
0NaN78.000000-48.000000NaNEkholm et al. (1998)
1L278.005022-68.393971StablePalmer et al. (2013)
2L177.969500-68.440875StablePalmer et al. (2013)
3Flade Isblink ice cap81.160000-16.580000ActiveWillis et al. (2015)
4Inuppaat Quuat67.611136-48.709000ActiveHowat et al. (2015); Palmer et al. (2015)
\n
","text/plain":" Name / Location Lat. oN Lon. oE Lake Type \\\n0 NaN 78.000000 -48.000000 NaN \n1 L2 78.005022 -68.393971 Stable \n2 L1 77.969500 -68.440875 Stable \n3 Flade Isblink ice cap 81.160000 -16.580000 Active \n4 Inuppaat Quuat 67.611136 -48.709000 Active \n\n References \n0 Ekholm et al. (1998) \n1 Palmer et al. (2013) \n2 Palmer et al. (2013) \n3 Willis et al. (2015) \n4 Howat et al. (2015); Palmer et al. (2015) "},"execution_count":3,"metadata":{},"output_type":"execute_result"}],"execution_count":3},{"id":"0b979f8c-8bb5-446c-8511-283025ff945d","cell_type":"markdown","source":"However, since this data has a direct download URL, so we can read the data directly into CryoCloud skipping the download and upload steps, like so: ","metadata":{"trusted":true}},{"id":"fff870cc-3b5e-42df-8ce0-a3c256ad4ffd","cell_type":"markdown","source":"## Open data directly via URL","metadata":{"trusted":true}},{"id":"047bbc78-a049-4055-8002-425d6881b70a","cell_type":"code","source":"# Read in spreadsheet using pandas read_excel\nurl = 'https://static-content.springer.com/esm/art%3A10.1038%2Fs43017-021-00246-9/MediaObjects/43017_2021_246_MOESM1_ESM.xlsx'\nuse_cols = ['Name / Location', 'Lat. oN', 'Lon. oE', 'Lake Type', 'References']\nimport_rows = np.arange(0,65)\ndf = pd.read_excel(url, sheet_name='Greenland', usecols=use_cols, skiprows = lambda x: x not in import_rows)\n\n# View pandas dataset head (first 5 rows)\ndf.head()","metadata":{"tags":[],"trusted":true},"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
Name / LocationLat. oNLon. oELake TypeReferences
0NaN78.000000-48.000000NaNEkholm et al. (1998)
1L278.005022-68.393971StablePalmer et al. (2013)
2L177.969500-68.440875StablePalmer et al. (2013)
3Flade Isblink ice cap81.160000-16.580000ActiveWillis et al. (2015)
4Inuppaat Quuat67.611136-48.709000ActiveHowat et al. (2015); Palmer et al. (2015)
\n
","text/plain":" Name / Location Lat. oN Lon. oE Lake Type \\\n0 NaN 78.000000 -48.000000 NaN \n1 L2 78.005022 -68.393971 Stable \n2 L1 77.969500 -68.440875 Stable \n3 Flade Isblink ice cap 81.160000 -16.580000 Active \n4 Inuppaat Quuat 67.611136 -48.709000 Active \n\n References \n0 Ekholm et al. (1998) \n1 Palmer et al. (2013) \n2 Palmer et al. (2013) \n3 Willis et al. (2015) \n4 Howat et al. (2015); Palmer et al. (2015) "},"execution_count":4,"metadata":{},"output_type":"execute_result"}],"execution_count":4},{"id":"539d0285-380e-4e16-9979-73f73170e1cd","cell_type":"markdown","source":"This is looking good, but we can make it even better by storing the data in a GeoPandas GeoDataFrame which offers additional functionality beyond pandas. You can add a geometry column of Shapely objects that make geospatial data processing and visualization easier. Here we have Shapely points:","metadata":{"trusted":true}},{"id":"0a7195c0-606b-4467-8b2d-1deb94030b04","cell_type":"code","source":"# Create GeoPandas GeoDataFrame from Pandas DataFrame\ngdf = gpd.GeoDataFrame(\n df, geometry=gpd.points_from_xy(df['Lon. oE'], df['Lat. oN']))\n\n# Set the Coordinate Reference System (CRS) of the geodataframe\nif gdf.crs is None: \n # set CRS WGS84 in lon, lat\n gdf.set_crs('epsg:4326', inplace=True)\n \n# Display GeoDataFrame\ngdf","metadata":{"tags":[],"trusted":true},"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
Name / LocationLat. oNLon. oELake TypeReferencesgeometry
0NaN78.000000-48.000000NaNEkholm et al. (1998)POINT (-48 78)
1L278.005022-68.393971StablePalmer et al. (2013)POINT (-68.39397 78.00502)
2L177.969500-68.440875StablePalmer et al. (2013)POINT (-68.44088 77.9695)
3Flade Isblink ice cap81.160000-16.580000ActiveWillis et al. (2015)POINT (-16.58 81.16)
4Inuppaat Quuat67.611136-48.709000ActiveHowat et al. (2015); Palmer et al. (2015)POINT (-48.709 67.61114)
.....................
59Sermeq Kujalleq (Jakobshavn)69.109843-42.055159StableBowling et al. (2019)POINT (-42.05516 69.10984)
60Sermeq Kujalleq (Jakobshavn)69.108047-41.954370StableBowling et al. (2019)POINT (-41.95437 69.10805)
61Isunguata Sermia 167.180000-50.188000ActiveLivingstone et al. (2019)POINT (-50.188 67.18)
62Isunguata Sermia 267.178000-50.149000ActiveLivingstone et al. (2019)POINT (-50.149 67.178)
63Isunguata Sermia 367.180000-50.128000ActiveLivingstone et al. (2019)POINT (-50.128 67.18)
\n

64 rows × 6 columns

\n
","text/plain":" Name / Location Lat. oN Lon. oE Lake Type \\\n0 NaN 78.000000 -48.000000 NaN \n1 L2 78.005022 -68.393971 Stable \n2 L1 77.969500 -68.440875 Stable \n3 Flade Isblink ice cap 81.160000 -16.580000 Active \n4 Inuppaat Quuat 67.611136 -48.709000 Active \n.. ... ... ... ... \n59 Sermeq Kujalleq (Jakobshavn) 69.109843 -42.055159 Stable \n60 Sermeq Kujalleq (Jakobshavn) 69.108047 -41.954370 Stable \n61 Isunguata Sermia 1 67.180000 -50.188000 Active \n62 Isunguata Sermia 2 67.178000 -50.149000 Active \n63 Isunguata Sermia 3 67.180000 -50.128000 Active \n\n References geometry \n0 Ekholm et al. (1998) POINT (-48 78) \n1 Palmer et al. (2013) POINT (-68.39397 78.00502) \n2 Palmer et al. (2013) POINT (-68.44088 77.9695) \n3 Willis et al. (2015) POINT (-16.58 81.16) \n4 Howat et al. (2015); Palmer et al. (2015) POINT (-48.709 67.61114) \n.. ... ... \n59 Bowling et al. (2019) POINT (-42.05516 69.10984) \n60 Bowling et al. (2019) POINT (-41.95437 69.10805) \n61 Livingstone et al. (2019) POINT (-50.188 67.18) \n62 Livingstone et al. (2019) POINT (-50.149 67.178) \n63 Livingstone et al. (2019) POINT (-50.128 67.18) \n\n[64 rows x 6 columns]"},"execution_count":5,"metadata":{},"output_type":"execute_result"}],"execution_count":5},{"id":"aa5c3f03-ffe6-44fa-9128-b83d7d88af33","cell_type":"markdown","source":"Let's look at Greenland's active subglacial lake inventory by filtering on the Lake Type column:","metadata":{"trusted":true}},{"id":"9d1751a6-f1fa-4e66-9bc4-c0fed6dcf6ba","cell_type":"code","source":"# Let's look at Greenland's active subglacial lake inventory\ngdf[gdf['Lake Type'] == 'Active']","metadata":{"tags":[],"trusted":true},"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
Name / LocationLat. oNLon. oELake TypeReferencesgeometry
3Flade Isblink ice cap81.160000-16.580000ActiveWillis et al. (2015)POINT (-16.58 81.16)
4Inuppaat Quuat67.611136-48.709000ActiveHowat et al. (2015); Palmer et al. (2015)POINT (-48.709 67.61114)
5Sioqqap Sermia, [SS1]63.541856-48.450597ActiveBowling et al. (2019)POINT (-48.4506 63.54186)
6Sioqqap Sermia, [SS2]63.260248-48.206633ActiveBowling et al. (2019)POINT (-48.20663 63.26025)
61Isunguata Sermia 167.180000-50.188000ActiveLivingstone et al. (2019)POINT (-50.188 67.18)
62Isunguata Sermia 267.178000-50.149000ActiveLivingstone et al. (2019)POINT (-50.149 67.178)
63Isunguata Sermia 367.180000-50.128000ActiveLivingstone et al. (2019)POINT (-50.128 67.18)
\n
","text/plain":" Name / Location Lat. oN Lon. oE Lake Type \\\n3 Flade Isblink ice cap 81.160000 -16.580000 Active \n4 Inuppaat Quuat 67.611136 -48.709000 Active \n5 Sioqqap Sermia, [SS1] 63.541856 -48.450597 Active \n6 Sioqqap Sermia, [SS2] 63.260248 -48.206633 Active \n61 Isunguata Sermia 1 67.180000 -50.188000 Active \n62 Isunguata Sermia 2 67.178000 -50.149000 Active \n63 Isunguata Sermia 3 67.180000 -50.128000 Active \n\n References geometry \n3 Willis et al. (2015) POINT (-16.58 81.16) \n4 Howat et al. (2015); Palmer et al. (2015) POINT (-48.709 67.61114) \n5 Bowling et al. (2019) POINT (-48.4506 63.54186) \n6 Bowling et al. (2019) POINT (-48.20663 63.26025) \n61 Livingstone et al. (2019) POINT (-50.188 67.18) \n62 Livingstone et al. (2019) POINT (-50.149 67.178) \n63 Livingstone et al. (2019) POINT (-50.128 67.18) "},"execution_count":6,"metadata":{},"output_type":"execute_result"}],"execution_count":6},{"id":"2f8b6465-dfff-4c1a-bf4c-44adee10cda1","cell_type":"markdown","source":"Now let's plot the lake locations to ensure our data read-in went as expected. But first, we need to make sure all projections for the data we want to show are the same. ","metadata":{"trusted":true}},{"id":"14dc8db1-be7f-4933-8b1f-64cbc6af90bc","cell_type":"markdown","source":"## What is a CRS/EPSG?\n\n- A Coordinate Reference System (CRS) tells you how the Earth's 3-D surface is projected onto a 2-D plane map. Below are examples of various projections of continguous USA from an excellent [Data Carpentry tutorial on the CRS topic](https://datacarpentry.org/organization-geospatial/03-crs/): \n\n![Coordinate Reference System comparison](images/DataCarpentryCRS.jpg)\n\n- A particular CRS can be referenced by its EPSG code (e.g., epsg:4326 as we used in the GeoPandas GeoDataFrame example above). The EPSG is a structured dataset of CRS and Coordinate Transformations. It was originally compiled by the now defunct European Petroleum Survey Group (EPSG) but continues to be one common way of representing a specific CRS.\n- Most map projections make land areas look proportionally larger or smaller than they actually are. Below is intuitive visualization of this from another excellent site of tutorials on geospatial topics called [Earth Lab](https://www.earthdatascience.org/courses/earth-analytics/spatial-data-r/intro-to-coordinate-reference-systems/): \n\n![How projections distort a human head](images/EarthLabProjectionDistortion.jpg)\n\n- Because of this distortion, we select a projection that is best suited for the geographic region we are studying to minimize distortions.\n- Previously we used epsg:4326, which is a geographic coordinate system that makes use of the World Geodetic System 1984 (WGS84) ellipsoid as a datum reference elevation. A datum consists in an ellipsoid relative to which the latitude and longitude of points are defined, with a geoid defining the surface at zero height (visual from [ESA's navipedia](https://gssc.esa.int/navipedia/index.php/Regional_Datums_and_Map_Projections)):\n\n![What is a datum](images/ESANavipediaDatum.png)\n\n- A geographic coordinate system is more than just the ellipsoid. It adds a coordinate system and units of measurement. epsg:4326 uses the very familiar longitude and latitude and degrees as the coordinate system and units. We selected epsg:4326 because longitude and latitude were the coordinates in the dataset.\n- There are numerous formats that are used to document a CRS. Three common formats include: proj.4, EPSG, and Well-known Text (WKT) formats.\n- Useful websites to look up CRS strings are [spatialreference.org](Spatialreference.org) and [espg.io](https://epsg.io/). You can use the search on these sites to find an EPSG code.\n- Often you have data in one format or projection (CRS) and you need to transform it to a more regionally accurate CRS or match it to another datasets' CRS to plot them together. Let’s transform our geopandas data to the NSIDC Sea Ice North Polar Stereographic projection (epsg:3413) easily visualize our lakes on a projection that minimizes distortion of our area of interest (Greenland). ","metadata":{"tags":[],"trusted":true}},{"id":"fa8fb714-b51f-44e6-b707-9e6ebba9c662","cell_type":"code","source":"# Create a figure with two subplots: one with Plate Carree projection (EPSG:4326), one with Stereographic projection (EPSG:3413)\nfig, axs = plt.subplots(1, 2, figsize=(6, 3), subplot_kw={'projection': ccrs.PlateCarree()})\n\n# Define Greenland's extent (rough bounding box around Greenland)\ngreenland_extent = [-75, -10, 55, 85] # [west, east, south, north]\n\n# Plot Greenland in EPSG:4326\naxs[0].set_extent(greenland_extent)\naxs[0].add_feature(cfeature.LAND)\naxs[0].add_feature(cfeature.COASTLINE)\naxs[0].add_feature(cfeature.BORDERS)\naxs[0].set_title(\"EPSG:4326 (WGS84) Projection\")\n\n# Now plot Greenland in EPSG:3413 (Polar Stereographic)\naxs[1] = plt.subplot(122, projection=ccrs.Stereographic(central_latitude=90, central_longitude=-45))\naxs[1].set_extent(greenland_extent, crs=ccrs.PlateCarree())\naxs[1].add_feature(cfeature.LAND)\naxs[1].add_feature(cfeature.COASTLINE)\naxs[1].add_feature(cfeature.BORDERS)\naxs[1].set_title(\"EPSG:3413 (Polar Stereographic Projection)\")\n\nplt.suptitle('Greenland Boundaries in Two Projections')\nplt.show()","metadata":{"trusted":true},"outputs":[{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"e6b5e1dfdaa84f5f9dfced6c28dcdb40","version_major":2,"version_minor":0},"image/png":"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","text/html":"\n
\n
\n Figure\n
\n \n
\n ","text/plain":"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"},"metadata":{},"output_type":"display_data"}],"execution_count":7},{"id":"38bccee8-6a13-40dd-b59e-ad96602b54d7","cell_type":"markdown","source":"## Using the Shapely Polygon geometry to create a search radius and subset data\n- The Shapely points used before are useful to tell us the centroid of the lakes.\n- However, we'd like to be able to create a search radius around that point to search for and subset data. \n- Some datasets are massive, so using Shapely polygons as a search radius around your region of interest will speed up your computation.","metadata":{"trusted":true}},{"id":"24e94b90-a04d-4d8a-9a8b-fb499f9bbc53","cell_type":"code","source":"# Create GeoSeries of our GeoDataFrame that converts to Arcic polar stereographic projection \n# and makes 10-km radius buffered polygon around each lake point\ngs = gdf.to_crs('3413').buffer(10000)\n\n# Create a copy of the original GeoPandas GeoDataFrame so that we don't alter the original\ngdf_polys = gdf.copy(deep=True)\n\n# Create new GeoDataFrame to store the polygons\ngdf_polys = gpd.GeoDataFrame(gdf, \n # We use the GeoDataFrame (gdf) copy, gdf_polys, and replaced its geometry with the GeoSeries of polygons\n geometry=gs, \n # We must specify the crs, so we use the one used to create the GeoSeries of polygons\n crs='epsg:3413'\n # But then we switch the crs back to good ol' 4623 lon, lat\n ).to_crs('4623')\n\n# Look at active lakes to ensure it worked as expected\ngdf_polys[gdf_polys['Lake Type'] == 'Active']","metadata":{"tags":[],"trusted":true},"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
Name / LocationLat. oNLon. oELake TypeReferencesgeometry
3Flade Isblink ice cap81.160000-16.580000ActiveWillis et al. (2015)POLYGON ((-16.06723 81.1139, -16.09787 81.1062...
4Inuppaat Quuat67.611136-48.709000ActiveHowat et al. (2015); Palmer et al. (2015)POLYGON ((-48.4764 67.61446, -48.47613 67.6057...
5Sioqqap Sermia, [SS1]63.541856-48.450597ActiveBowling et al. (2019)POLYGON ((-48.25472 63.54482, -48.25457 63.536...
6Sioqqap Sermia, [SS2]63.260248-48.206633ActiveBowling et al. (2019)POLYGON ((-48.01287 63.26285, -48.01281 63.254...
61Isunguata Sermia 167.180000-50.188000ActiveLivingstone et al. (2019)POLYGON ((-49.96016 67.18562, -49.95932 67.176...
62Isunguata Sermia 267.178000-50.149000ActiveLivingstone et al. (2019)POLYGON ((-49.92117 67.18356, -49.92035 67.174...
63Isunguata Sermia 367.180000-50.128000ActiveLivingstone et al. (2019)POLYGON ((-49.90015 67.18552, -49.89933 67.176...
\n
","text/plain":" Name / Location Lat. oN Lon. oE Lake Type \\\n3 Flade Isblink ice cap 81.160000 -16.580000 Active \n4 Inuppaat Quuat 67.611136 -48.709000 Active \n5 Sioqqap Sermia, [SS1] 63.541856 -48.450597 Active \n6 Sioqqap Sermia, [SS2] 63.260248 -48.206633 Active \n61 Isunguata Sermia 1 67.180000 -50.188000 Active \n62 Isunguata Sermia 2 67.178000 -50.149000 Active \n63 Isunguata Sermia 3 67.180000 -50.128000 Active \n\n References \\\n3 Willis et al. (2015) \n4 Howat et al. (2015); Palmer et al. (2015) \n5 Bowling et al. (2019) \n6 Bowling et al. (2019) \n61 Livingstone et al. (2019) \n62 Livingstone et al. (2019) \n63 Livingstone et al. (2019) \n\n geometry \n3 POLYGON ((-16.06723 81.1139, -16.09787 81.1062... \n4 POLYGON ((-48.4764 67.61446, -48.47613 67.6057... \n5 POLYGON ((-48.25472 63.54482, -48.25457 63.536... \n6 POLYGON ((-48.01287 63.26285, -48.01281 63.254... \n61 POLYGON ((-49.96016 67.18562, -49.95932 67.176... \n62 POLYGON ((-49.92117 67.18356, -49.92035 67.174... \n63 POLYGON ((-49.90015 67.18552, -49.89933 67.176... "},"execution_count":8,"metadata":{},"output_type":"execute_result"}],"execution_count":8},{"id":"e1ac86c8-710f-4c6b-926d-7cac63c69572","cell_type":"markdown","source":"Now that we know our active lake locations, let’s grab data to study the filling and draining of the lakes. We will use ICESat-2 surface elevations to investigate.","metadata":{"trusted":true}},{"id":"96604dff-c7d7-4117-b859-326545f486bc","cell_type":"markdown","source":"## What is ICESat-2?\n\nICESat-2 (Ice, Cloud, and land Elevation Satellite 2), part of NASA's Earth Observing System, is a satellite mission for measuring ice sheet elevation and sea ice thickness, as well as land topography, vegetation characteristics, and clouds. It does so using an altimeter or an altitude meter, which is an instrument used to measure the altitude of an object above a fixed level (the datum we talked about earlier). This is typically achieved by measuring the time it takes for a lidar or radar pulse, released by a satellite-based altimeter, to travel to a surface, reflect, and return to be recorded by an onboard instrument. ICESat-2 uses three pairs of laser pulsers and the detector to count the reflected photons. \n\nICESat-2 laser configuration (from [Smith and others, 2019](https://doi.org/10.1016/j.rse.2019.111352)): \n\n![ICESat-2 laser configuration](images/Smith_2019_fig1.jpg)","metadata":{"trusted":true}},{"id":"5f3c610d-4406-49a5-85be-b26c98a32af0","cell_type":"markdown","source":"## What is ATL14/15?\nATL15 is one of the various [ICESat-2 data products](https://icesat-2.gsfc.nasa.gov/science/data-products). ATL15 provides various resolutions (1 km, 10 km, 20 km, and 40 km) of gridded raster data of height change at 3-month intervals, allowing for visualization of height-change patterns and calculation of integrated active subglacial lake volume change (Smith and others, 2022).\n\nATL14 is an accompanying high-resolution (100 m) digital elevation model (DEM) that provides spatially continuous gridded data of ice sheet surface height.\n\nLearn more about the ICESat-2 ATL14/15 Gridded Antarctic and Arctic Land Ice Height Change data product dataset [here](https://doi.org/10.5067/ATLAS/ATL15.002).","metadata":{"trusted":true}},{"id":"ca2863c3-3967-47a4-8be6-2eee3d6af0ed","cell_type":"markdown","source":"## Streaming cloud-hosted data from NASA Earth Data Cloud\nWe will be working with cloud-hosted data files. This [guide](https://nsidc.org/data/user-resources/help-center/nasa-earthdata-cloud-data-access-guide) explains how to find and access Earthdata cloud-hosted data. [Here](https://nsidc.org/data/earthdata-cloud) is a complete list of earthdata cloud-hosted data products currently available from NSIDC.","metadata":{"trusted":true}},{"id":"9da0209d-f39a-4566-8966-6798631be98d","cell_type":"markdown","source":"### Using icepyx to simplify searching for ICESat-2 data\n[icepyx](https://icepyx.readthedocs.io/en/latest/) is a community and Python software library that simplifies the process of searching (querying), accessing (via download or in the cloud), and working with (including subsetting, visualizing, and reading in) ICESat-2 data products. A series of [examples](https://github.com/icesat2py/icepyx/tree/main/doc/source/example_notebooks) introduce users to its functionality, and the icepyx community always welcomes new members, feature requests, bug reports, etc.\n\nTo search for data spatially, icepyx accepts shapefiles, kml files, and geopackage files, as well as bounding boxes and polygons, as input bounding regions. We have two options for supplying this information: (1) save one of the lakes' geometries as a geopackage or (2) extract the exterior coordinates and supply them directly. You may run either of the next two cells; then we'll use the spatial information to query ICESat-2 data for that region.","metadata":{"trusted":true}},{"id":"a6ea8f8c-ce47-4090-919f-d30863309495","cell_type":"code","source":"# (1) save one of the lakes' geometries as a geopackage\n# Export to geopackage to subset ICESat-2 data\ngdf_polys[gdf_polys['Name / Location'] == 'Flade Isblink ice cap'].to_file(os.getcwd() + '/Flade_Isblink_poly.gpkg')\nspatial_extent = 'Flade_Isblink_poly.gpkg'","metadata":{"tags":[],"trusted":true},"outputs":[],"execution_count":9},{"id":"3f3f1628-0fc1-407c-a8e5-a85cb8735345","cell_type":"code","source":"# (2) use the shapely package to supply the polygon coordinates directly as a list\nfrom shapely.geometry import mapping\nspatial_extent = list(mapping(gdf_polys[gdf_polys['Name / Location'] == 'Flade Isblink ice cap'].geometry.iloc[0])[\"coordinates\"][0])","metadata":{"tags":[],"trusted":true},"outputs":[],"execution_count":10},{"id":"3e15602f-3fc1-40de-9519-a75ae5b3b4b1","cell_type":"code","source":"# Specifying the necessary icepyx parameters\nshort_name = 'ATL15' # The data product we would like to query\ndate_range = ['2018-09-15','2023-03-02']","metadata":{"tags":[],"trusted":true},"outputs":[],"execution_count":11},{"id":"1a352b60-b203-47d6-9785-2cfdbcfdeb6b","cell_type":"code","source":"# Setup the Query object\nregion = ipx.Query(short_name, spatial_extent, date_range)","metadata":{"tags":[],"trusted":true},"outputs":[],"execution_count":12},{"id":"cb7f484f-f476-4547-ac9b-6637fe880758","cell_type":"markdown","source":"We can visualize our spatial extent on an interactive map with background imagery.","metadata":{"tags":[],"trusted":true}},{"id":"e852347c-fafd-4db0-b81e-e70e3e98ed98","cell_type":"code","source":"# Visualize area of interest\nregion.visualize_spatial_extent()","metadata":{"tags":[],"trusted":true},"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.2'.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.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.3/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.3/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.3/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.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.2.min.js\", \"https://cdn.holoviz.org/panel/1.2.3/dist/panel.min.js\", \"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));","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.2'.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.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.3/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.3/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.3/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.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.2.min.js\", \"https://cdn.holoviz.org/panel/1.2.3/dist/panel.min.js\", \"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":"\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n }) \n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n","application/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":{"text/html":"\n
\n\n\n\n \n \n\n\n\n\n
\n"},"metadata":{},"output_type":"display_data"},{"data":{},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.holoviews_exec.v0+json":"","text/html":"
\n
\n
\n","text/plain":":Overlay\n .WMTS.I :WMTS [Longitude,Latitude]\n .Path.I :Path [Longitude,Latitude]"},"execution_count":13,"metadata":{"application/vnd.holoviews_exec.v0+json":{"id":"p1005"}},"output_type":"execute_result"}],"execution_count":13},{"id":"b68bdc52-4de8-44fa-8f8e-fcdd89da01bf","cell_type":"code","source":"# Let's find out some information about the available data granuales (files)\nregion.avail_granules()","metadata":{"tags":[],"trusted":true},"outputs":[{"data":{"text/plain":"{'Number of available granules': 4,\n 'Average size of granules (MB)': 226.04341173171997,\n 'Total size of all granules (MB)': 904.1736469268799}"},"execution_count":14,"metadata":{},"output_type":"execute_result"}],"execution_count":14},{"id":"87dc30f0-dc2e-4dc4-a13b-305944246691","cell_type":"code","source":"# Let's see the granule IDs and cloud access urls\ngran_ids = region.avail_granules(ids=True, cloud=True)\ngran_ids","metadata":{"tags":[],"trusted":true},"outputs":[{"data":{"text/plain":"[['ATL15_GL_0321_40km_004_01.nc',\n 'ATL15_GL_0321_20km_004_01.nc',\n 'ATL15_GL_0321_10km_004_01.nc',\n 'ATL15_GL_0321_01km_004_01.nc'],\n ['s3://nsidc-cumulus-prod-protected/ATLAS/ATL15/004/ATL15_GL_0321_40km_004_01.nc',\n 's3://nsidc-cumulus-prod-protected/ATLAS/ATL15/004/ATL15_GL_0321_20km_004_01.nc',\n 's3://nsidc-cumulus-prod-protected/ATLAS/ATL15/004/ATL15_GL_0321_10km_004_01.nc',\n 's3://nsidc-cumulus-prod-protected/ATLAS/ATL15/004/ATL15_GL_0321_01km_004_01.nc']]"},"execution_count":15,"metadata":{},"output_type":"execute_result"}],"execution_count":15},{"id":"bc3e741b-9f35-4598-accf-827e4eb6b447","cell_type":"code","source":"# Let's grab the s3 URL of the highest resolution available product\ns3url = gran_ids[1][3]\ns3url","metadata":{"tags":[],"trusted":true},"outputs":[{"data":{"text/plain":"'s3://nsidc-cumulus-prod-protected/ATLAS/ATL15/004/ATL15_GL_0321_01km_004_01.nc'"},"execution_count":16,"metadata":{},"output_type":"execute_result"}],"execution_count":16},{"id":"3bd249ae-dbe8-49c9-90e4-b291613659bf","cell_type":"markdown","source":"You can manually find s3 URL's for cloud-hosted data from [NASA Earth Data](https://www.earthdata.nasa.gov/)\n\nLearn more about finding cloud-hosted data from NASA Earth data cloud [here](https://nsidc.org/data/user-resources/help-center/nasa-earthdata-cloud-data-access-guide)","metadata":{"trusted":true}},{"id":"3ba938e7-0ac0-4c6f-99f1-854a57ac2779","cell_type":"markdown","source":"The next step (accessing data in the cloud) requires a NASA Earthdata user account.\nYou can register for a free account [here](https://www.earthdata.nasa.gov/eosdis/science-system-description/eosdis-components/earthdata-login).\nWe provide two options for reading in your data: (1) by setting up an s3 file system and using Xarray directly; or (2) by using icepyx (which uses Xarray under the hood).\nCurrently, the read time is similar with both methods.\nThe h5coro library will soon be available to help speed up this process.\n\nThe file system method requires you complete a login step.\nicepyx will automatically ask for your credentials when you perform a task that needs them.\nIf you do not have them stored as environment variables or in a .netrc file, you will be prompted to enter them.","metadata":{"trusted":true}},{"id":"b2af9f40-c9a8-48ed-9f81-c93d52d960e6","cell_type":"code","source":"# (1) authenticate\nauth = earthaccess.login()","metadata":{"tags":[],"trusted":true},"outputs":[],"execution_count":17},{"id":"e16e81f6-9092-4523-8565-34a75d8631f1","cell_type":"code","source":"# (1) set up our s3 file system using our credentials\ns3 = earthaccess.get_s3fs_session(daac='NSIDC')","metadata":{"tags":[],"trusted":true},"outputs":[],"execution_count":18},{"id":"7377ae88-8552-4ee8-8595-d15b786b003c","cell_type":"code","source":"# (1) Open s3url data file and store in Xarray Dataset\n# This cell takes 10s of secs to load\nwith s3.open(s3url,'rb') as f:\n ATL15_dh = xr.open_dataset(f, group='delta_h').load()\n\n# View Xarray Dataset\nATL15_dh","metadata":{"tags":[],"trusted":true},"outputs":[{"data":{"text/html":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
<xarray.Dataset> Size: 2GB\nDimensions:              (x: 1541, y: 2741, time: 21)\nCoordinates:\n  * x                    (x) float64 12kB -6.7e+05 -6.69e+05 ... 8.7e+05\n  * y                    (y) float64 22kB -3.35e+06 -3.349e+06 ... -6.1e+05\n  * time                 (time) datetime64[ns] 168B 2019-01-01T06:00:00 ... 2...\nData variables:\n    Polar_Stereographic  int8 1B -127\n    ice_area             (time, y, x) float32 355MB nan nan nan ... nan nan nan\n    delta_h              (time, y, x) float32 355MB nan nan nan ... nan nan nan\n    delta_h_sigma        (time, y, x) float32 355MB nan nan nan ... nan nan nan\n    data_count           (time, y, x) float32 355MB nan nan nan ... nan nan nan\n    misfit_rms           (time, y, x) float32 355MB nan nan nan ... nan nan nan\n    misfit_scaled_rms    (time, y, x) float32 355MB nan nan nan ... nan nan nan\nAttributes:\n    description:  delta_h group includes variables describing height differen...
","text/plain":" Size: 2GB\nDimensions: (x: 1541, y: 2741, time: 21)\nCoordinates:\n * x (x) float64 12kB -6.7e+05 -6.69e+05 ... 8.7e+05\n * y (y) float64 22kB -3.35e+06 -3.349e+06 ... -6.1e+05\n * time (time) datetime64[ns] 168B 2019-01-01T06:00:00 ... 2...\nData variables:\n Polar_Stereographic int8 1B -127\n ice_area (time, y, x) float32 355MB nan nan nan ... nan nan nan\n delta_h (time, y, x) float32 355MB nan nan nan ... nan nan nan\n delta_h_sigma (time, y, x) float32 355MB nan nan nan ... nan nan nan\n data_count (time, y, x) float32 355MB nan nan nan ... nan nan nan\n misfit_rms (time, y, x) float32 355MB nan nan nan ... nan nan nan\n misfit_scaled_rms (time, y, x) float32 355MB nan nan nan ... nan nan nan\nAttributes:\n description: delta_h group includes variables describing height differen..."},"execution_count":19,"metadata":{},"output_type":"execute_result"}],"execution_count":19},{"id":"f4e72f9a-c6bc-448c-891a-3b4870c0ecea","cell_type":"code","source":"# (2) create a Read object; you'll be asked to authenticate at this step if you haven't already\nreader = ipx.Read(s3url)","metadata":{"tags":[],"trusted":true},"outputs":[],"execution_count":20},{"id":"cc752711-13aa-4d0a-b15d-b21a79894b21","cell_type":"code","source":"# (2) see what variables are available\nreader.vars.avail()","metadata":{"scrolled":true,"tags":[],"trusted":true},"outputs":[{"data":{"text/plain":"['delta_h/Polar_Stereographic',\n 'delta_h/time',\n 'delta_h/x',\n 'delta_h/y',\n 'dhdt_lag1/dhdt/Bands',\n 'dhdt_lag1/dhdt_sigma/Bands',\n 'dhdt_lag1/ice_area/Bands',\n 'dhdt_lag1/Polar_Stereographic',\n 'dhdt_lag1/time',\n 'dhdt_lag1/x',\n 'dhdt_lag1/y',\n 'dhdt_lag12/dhdt/Bands',\n 'dhdt_lag12/dhdt_sigma/Bands',\n 'dhdt_lag12/ice_area/Bands',\n 'dhdt_lag12/Polar_Stereographic',\n 'dhdt_lag12/time',\n 'dhdt_lag12/x',\n 'dhdt_lag12/y',\n 'dhdt_lag16/dhdt/Bands',\n 'dhdt_lag16/dhdt_sigma/Bands',\n 'dhdt_lag16/ice_area/Bands',\n 'dhdt_lag16/Polar_Stereographic',\n 'dhdt_lag16/time',\n 'dhdt_lag16/x',\n 'dhdt_lag16/y',\n 'dhdt_lag20/dhdt/Bands',\n 'dhdt_lag20/dhdt_sigma/Bands',\n 'dhdt_lag20/ice_area/Bands',\n 'dhdt_lag20/Polar_Stereographic',\n 'dhdt_lag20/time',\n 'dhdt_lag20/x',\n 'dhdt_lag20/y',\n 'dhdt_lag4/dhdt/Bands',\n 'dhdt_lag4/dhdt_sigma/Bands',\n 'dhdt_lag4/ice_area/Bands',\n 'dhdt_lag4/Polar_Stereographic',\n 'dhdt_lag4/time',\n 'dhdt_lag4/x',\n 'dhdt_lag4/y',\n 'dhdt_lag8/dhdt/Bands',\n 'dhdt_lag8/dhdt_sigma/Bands',\n 'dhdt_lag8/ice_area/Bands',\n 'dhdt_lag8/Polar_Stereographic',\n 'dhdt_lag8/time',\n 'dhdt_lag8/x',\n 'dhdt_lag8/y',\n 'orbit_info/bounding_polygon_dim1',\n 'orbit_info/bounding_polygon_lat1',\n 'orbit_info/bounding_polygon_lon1',\n 'quality_assessment/phony_dim_1',\n 'quality_assessment/qa_granule_fail_reason',\n 'quality_assessment/qa_granule_pass_fail',\n 'tile_stats/N_bias',\n 'tile_stats/N_data',\n 'tile_stats/Polar_Stereographic',\n 'tile_stats/RMS_bias',\n 'tile_stats/RMS_d2z0dx2',\n 'tile_stats/RMS_d2zdt2',\n 'tile_stats/RMS_d2zdx2dt',\n 'tile_stats/RMS_data',\n 'tile_stats/sigma_tt',\n 'tile_stats/sigma_xx0',\n 'tile_stats/sigma_xxt',\n 'tile_stats/x',\n 'tile_stats/y']"},"execution_count":21,"metadata":{},"output_type":"execute_result"}],"execution_count":21},{"id":"52e93f16-b98e-4690-b273-aeeadb5bfdb4","cell_type":"code","source":"# (2) Indicate which variables you'd like to read in.\n# More information on managing ICESat-2 variables is available in the icepyx documentation and examples.\nreader.vars.append(keyword_list=[\"delta_h\"])\n# view the variables that will be loaded into memory in your DataSet\nreader.vars.wanted","metadata":{"tags":[],"trusted":true},"outputs":[{"data":{"text/plain":"{'Polar_Stereographic': ['delta_h/Polar_Stereographic'],\n 'time': ['delta_h/time'],\n 'x': ['delta_h/x'],\n 'y': ['delta_h/y']}"},"execution_count":22,"metadata":{},"output_type":"execute_result"}],"execution_count":22},{"id":"5475a92f-4b55-4307-acca-1c16f76144c5","cell_type":"code","source":"# (2) load your data into memory\n# if you are asked if you want to proceed, enter 'y' and press return/enter\n# Depending on your hub settings, the warning letting you know this operation will take a moment may or may not show up\nATL15_dh = reader.load()","metadata":{"tags":[],"trusted":true},"outputs":[{"name":"stdin","output_type":"stream","text":"Do you wish to proceed (not recommended) y/[n]? y\n"}],"execution_count":23},{"id":"e589974d-78ec-4747-a4de-223d17252dfe","cell_type":"code","source":"ATL15_dh","metadata":{"tags":[],"trusted":true},"outputs":[{"data":{"text/html":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
<xarray.Dataset> Size: 2GB\nDimensions:              (x: 1541, y: 2741, time: 21)\nCoordinates:\n  * x                    (x) float64 12kB -6.7e+05 -6.69e+05 ... 8.7e+05\n  * y                    (y) float64 22kB -3.35e+06 -3.349e+06 ... -6.1e+05\n  * time                 (time) datetime64[ns] 168B 2019-01-01T06:00:00 ... 2...\nData variables:\n    Polar_Stereographic  int8 1B ...\n    ice_area             (time, y, x) float32 355MB ...\n    delta_h              (time, y, x) float32 355MB ...\n    delta_h_sigma        (time, y, x) float32 355MB ...\n    data_count           (time, y, x) float32 355MB ...\n    misfit_rms           (time, y, x) float32 355MB ...\n    misfit_scaled_rms    (time, y, x) float32 355MB ...\nAttributes:\n    description:  delta_h group includes variables describing height differen...
","text/plain":" Size: 2GB\nDimensions: (x: 1541, y: 2741, time: 21)\nCoordinates:\n * x (x) float64 12kB -6.7e+05 -6.69e+05 ... 8.7e+05\n * y (y) float64 22kB -3.35e+06 -3.349e+06 ... -6.1e+05\n * time (time) datetime64[ns] 168B 2019-01-01T06:00:00 ... 2...\nData variables:\n Polar_Stereographic int8 1B ...\n ice_area (time, y, x) float32 355MB ...\n delta_h (time, y, x) float32 355MB ...\n delta_h_sigma (time, y, x) float32 355MB ...\n data_count (time, y, x) float32 355MB ...\n misfit_rms (time, y, x) float32 355MB ...\n misfit_scaled_rms (time, y, x) float32 355MB ...\nAttributes:\n description: delta_h group includes variables describing height differen..."},"execution_count":24,"metadata":{},"output_type":"execute_result"}],"execution_count":24},{"id":"3b0e5f8a-a7fb-4f76-b70d-cd9c55c94f08","cell_type":"markdown","source":"We can acquaint ourselves with this dataset in a few ways: \n- The data product's [overview page](https://doi.org/10.5067/ATLAS/ATL15.002) (Smith and others, 2022) to get the very basics such as geographic coverage, CRS, and what the data product tells us (quarterly height changes).\n- The Xarray Dataset read-in metadata: clicking on the written document icon of each data variable will expand metadata including a data variable's dimensions, datatype, etc. \n- The data product's [data dictionary](https://nsidc.org/sites/default/files/documents/technical-reference/icesat2_atl15_data_dict_v002.pdf) (Smith and others, 2021) to do a deep dive on what individual variables tell us. \n- The data product's [Algorithm Theoretical Basis Document](https://icesat-2.gsfc.nasa.gov/sites/default/files/page_files/ICESat2_ATL14_ATL15_ATBD_r001.pdf)\n\nWe'll be plotting the delta_h data variable in this tutorial, here's what we can learn about from these sources:\n- [ATL14/15's overview page](https://doi.org/10.5067/ATLAS/ATL15.002): this is likely the 'quarterly height changes' described, but let's dive deeper to be sure\n- ATL14/15's Xarray Dataset imbedded metadata tells us a couple things: delta_h =height change at 1 km (the resolution selected earlier) and height change relative to the datum (Jan 1, 2020) surface\n- [ATL14/15's data dictionary](https://nsidc.org/sites/default/files/documents/technical-reference/icesat2_atl15_data_dict_v002.pdf): delta_h = quarterly height change at 40 km\n\nOk, since the data is relative to a datum, we have two options: \n1) Difference individual time slices to subtract out the datum, like so: \n\n (time$_0$ - datum) - (time$_1$ - datum) = time$_0$ - datum - time$_1$ + datum = time$_0$ - time$_1$\n\n2) Subtract out the datum directly. The datum is the complementary dataset high-resolution DEM surface contained in tha accompanying dataset ATL14.\n\nIn this tutorial we'll use the first method. We'll use some explanatory data analysis to illustrate this. ","metadata":{"trusted":true}},{"id":"ced9c230-1b92-4468-8231-5f90a9f119ff","cell_type":"code","source":"# # Let's make a simple plot of the first minus the zeroth time slices\n# fig, ax = plt.subplots(figsize=(6,3))\n# dhdt = ATL15_dh['delta_h'][1,:,:] - ATL15_dh['delta_h'][0,:,:]\n# cb = ax.imshow(dhdt, origin='lower', norm=colors.CenteredNorm(), cmap='coolwarm_r', \n# extent=[Greenland.bounds.minx.values[0], Greenland.bounds.maxx.values[0], Greenland.bounds.miny.values[0], Greenland.bounds.maxy.values[0]])\n# ax.set_xlabel('longitude'); ax.set_ylabel('latitude')\n# plt.colorbar(cb, fraction=0.02, label='height change [m]')\n# plt.show()","metadata":{"tags":[],"trusted":true},"outputs":[],"execution_count":25},{"id":"8e79268f-cfe8-498f-a695-b98bf0177c1c","cell_type":"code","source":"# Let's make a simple plot of the first minus the zeroth time slices\nfig, ax = plt.subplots(figsize=(5,3))\ndhdt = ATL15_dh['delta_h'][1,:,:] - ATL15_dh['delta_h'][0,:,:]\ncb = ax.imshow(dhdt, origin='lower', norm=colors.CenteredNorm(), cmap='coolwarm_r', \n extent = [greenland_extent[0], # minx (west)\n greenland_extent[1], # maxx (east)\n greenland_extent[2], # miny (south)\n greenland_extent[3]] # maxy (north)\n )\nax.set_xlabel('longitude'); ax.set_ylabel('latitude')\nplt.colorbar(cb, fraction=0.02, label='height change [m]')\nplt.show()","metadata":{"tags":[],"trusted":true},"outputs":[{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"9b9cd2c03a6744f3808b98b6d78e19fe","version_major":2,"version_minor":0},"image/png":"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xQq/7ZFHHpGcc7lnzx6/7f/9v/8na2pqZFtbW29MMxXZbFYef/zx8ic/+Ulsn3K9N8W4cePkf/7nf8YeL/f7e+SRR+S0adPkK6+8IgHIjRs3ho6V872Z/OpXv5KMMdnZ2SmlrKz7u/nmm+WECRP8z5Vyb+vWrZODBg2KtFfK/fUEZHI/gjz88MN48803MX/+fL/t2Wefxcknn4zRo0f7beeddx46OjqwYcOGXphlOl588UXs2bMHnHPMmDEDo0aNwgUXXIBXXnnF71Ou96azevVqDBkyBKeeeipuuummkFmvnO/vtddew4IFC3DvvfeiX79+kePlfG8mb7/9Nn72s5/hzDPPRFVVFYDKur+2tjYMHjzY/1xJ92aj0u+vO5BAP4LceeedOO+880I7vLW2tmLEiBGhfscddxyqq6vR2tp6pKeYmh07dgAAli9fjm9961v4zW9+g+OOOw5z587F22+/DaB8701xzTXX4H/+53/wxBNP4Oqrr8att96Kq666yj9ervcnpcT8+fNx5ZVX+q4fk3K9N53rrrsOxxxzDIYMGYJdu3bhV7/6lX+sEu4PAJqamnDbbbfhyiuv9Nsq5d7iqPT76w4k0LvA8uXLY4Pd1OuFF14InfPqq6/i0UcfxZe+9KXIeLbd3qSUPb4LnI209yaEAABcf/31uOiiizBz5kysW7cOjDH87//+rz9eX7o3oLi/3aJFizB37ly85z3vwZe//GWsXbsWd955J9566y1/vL50f2nv7bbbbkN7ezuWLl2aOF5fujeg+P93//7v/46NGzfiscceg+M4uPTSS0P7a/el++vKM2Xv3r04//zzcfHFF+PLX/5y6Fhfujega/eXRF+7v74CBcV1gauvvhqXXHJJYp/x48eHPq9btw5DhgzBxz/+8VD7yJEj8de//jXUtn//fmSz2cgq9EiQ9t7UfvInnnii315TU4OJEydi165dAPrevQFd+9spzjjjDABAY2MjhgwZ0ufuL+293XjjjVi/fn2krOasWbPw+c9/Hvfcc0+fuzeg+L/d0KFDMXToUEyZMgXTp0/HmDFjsH79esyZM6fP3V+x97Z3717MmzcPc+bMwY9//ONQv752b0D3/t+Z9MX76zP0mvf+KEIIISdMmCC//vWvR46pAI+9e/f6bf/zP//T5wM82traZE1NTSgoTgX93XHHHVLK8r23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","text/html":"\n
\n
\n Figure\n
\n \n
\n ","text/plain":"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"},"metadata":{},"output_type":"display_data"}],"execution_count":26},{"id":"00c743f6-7df7-4bd4-a407-547179f985d3","cell_type":"markdown","source":"Hmmm...doesn't look like much change over this quarter. Why? Check out the bounds of the colorbar, we've got some pretty extreme values (colorbar is defaulting to ±10 m!) that appear to be along the margin. It's making more sense now. We can change the bounds of the colorbar to plot see more of the smaller scale change in the continental interior.","metadata":{"trusted":true}},{"id":"1e2b2eae-00fc-4a4b-8343-28b38688433a","cell_type":"code","source":"# Let's calculate some basic stats to determine appropriate coloarbar bounds\nprint(dhdt.min().values)\nprint(dhdt.max().values)","metadata":{"tags":[],"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"-5.8791504\n6.1810913\n"}],"execution_count":27},{"id":"f5eb944c-b268-44cb-a4f3-690e8a7ae8ef","cell_type":"markdown","source":"We can use a TwoSlopeNorm to achieve different mapping for positive and negative values while still keeping the center at zero:","metadata":{"trusted":true}},{"id":"faf7223f-02fa-4570-9704-9c631b3b996b","cell_type":"code","source":"# We can make that same plot with more representative colorbar bounds\nfig, ax = plt.subplots(figsize=(6,3))\ndhdt = ATL15_dh['delta_h'][1,:,:] - ATL15_dh['delta_h'][0,:,:]\ndivnorm = colors.TwoSlopeNorm(vmin=dhdt.min(), vcenter=0, vmax=dhdt.max())\ncb = ax.imshow(dhdt, origin='lower', norm=divnorm, cmap='coolwarm_r', \n extent = [greenland_extent[0], # minx (west)\n greenland_extent[1], # maxx (east)\n greenland_extent[2], # miny (south)\n greenland_extent[3]] # maxy (north)\n )\nax.set_xlabel('longitude'); ax.set_ylabel('latitude')\nplt.colorbar(cb, fraction=0.02, label='height change [m]')\nplt.show()","metadata":{"tags":[],"trusted":true},"outputs":[{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"22518f836e9f445f90e700b3d6ea41f9","version_major":2,"version_minor":0},"image/png":"iVBORw0KGgoAAAANSUhEUgAAAlgAAAEsCAYAAAAfPc2WAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAACdXklEQVR4nO2deZgVxdn27+o+s4BsAgKDIjuCCxHBIGiCmLjFJGqMSTRRiZFXP5eoaFSMChKF4GeMX0wimihuifF9oyYm6qvBLSGiIuKCbDPDsIRFXFgUYWZOV31/dFd3dXVVnz7DMMOceX6X53JOd3V1dc9h+j7Pc9dTTAghQBAEQRAEQTQbTmsPgCAIgiAIotQggUUQBEEQBNHMkMAiCIIgCIJoZkhgEQRBEARBNDMksAiCIAiCIJoZElgEQRAEQRDNDAksgiAIgiCIZoYEFkEQBEEQRDNDAosgCIIgCKKZIYFFEARBEATRzJDAIgiCIAiCaGZIYBEEQRAEQTQzJLAIgiAIgiCaGRJYBEEQBEEQzQwJLIIgCIIgiGaGBBZBEARBEEQzQwKLIAiCIAiimSGBRRAEQRAE0cyQwCIIgiAIgmhmSGARBEEQBEE0MySwCIIgCIIgmhkSWARBEARBEM0MCSyCIAiCIIhmhgQWQRAEQRBEM0MCiyAIgiAIopkhgUUQBEEQBNHMkMAiCIIgCIJoZkhgEQRBEARBNDMksAiCIAiCIJoZElgEQRAEQRDNDAksgiAIgiCIZoYEFkEQBEEQRDNDAosgCIIgCKKZIYFFEARBEATRzJDAIgiCIAiCaGZIYBEEQRAEQTQzJLAIgiAIgiCaGRJYBEEQBEEQzQwJLIIgCIIgiGaGBBZBEARBEEQzQwKLIAiCIAiimSGBRRAEQRAE0cyQwCIIgiAIgmhmSGARBEEQBEE0MySwCIIgCIIgmhkSWARBEARBEM1MSQisfD6PG264AQMHDkSHDh0waNAgzJgxA5zzsM2kSZPAGIu9jjrqqFYcNUEQBEEQpUqutQfQHMyePRtz5szBgw8+iEMOOQRvvvkmfvjDH6Jr1664/PLLw3YnnXQS5s6dG74vLy9vjeESBEEQBFHilITAWrBgAU499VSccsopAIABAwbg0UcfxZtvvhlrV1FRgT59+rTGEAmCIAiCaEeURIrwmGOOwQsvvICVK1cCAN555x3Mnz8fX/va12LtXn75ZfTq1QvDhg3D5MmTsXnz5tYYLkEQBEEQJQ4TQojWHsTuIoTA9ddfj9mzZ8N1XXieh1tvvRVTp04N2zz22GPo1KkT+vfvj7q6Otx4443I5/NYtGgRKioqEn3W19ejvr4+fM85xyeffIIePXqAMdYi10UQBEEQu4sQAp9++in69u0LxymJuErbQJQAjz76qDjggAPEo48+Kt59913x0EMPie7du4sHHnjAesyGDRtEWVmZePzxx437p02bJgDQi170ohe96FUSr3Xr1u2pxzBhoCQiWP369cN1112HSy65JNx2yy234JFHHsHy5cutxw0dOhQXXHABrr322sQ+PYK1bds2HHjggVi3bh26dOnSvBdAEARBEHuI7du3o1+/fti6dSu6du3a2sNpN5SEyf3zzz9PhD1d142VadD5+OOPsW7dOlRVVRn3V1RUGFOHXbp0IYFFEARBtDnI3tKylITA+sY3voFbb70VBx54IA455BAsXrwYd9xxB84//3wAwGeffYbp06fjjDPOQFVVFVavXo3rr78ePXv2xOmnn97KoycIgiAIotQoCYF111134cYbb8TFF1+MzZs3o2/fvrjwwgtx0003AfCjWe+99x4eeughbN26FVVVVZg4cSIee+wxdO7cuZVHTxAEQRBEqVESHqyWYPv27ejatSu2bdtGKUKCIAiizUDPr9ahJCJYBEEQBEG0Hrt27UJDQ0Nqm/LyclRWVrbQiFofElgEQRAEQTSZXbt2oUu3/dFY/0lquz59+qCurq7diCwSWARBEARBNJmGhgY01n+CL574ONzcPsY2Xn4H3njuDDQ0NJDAIgiCIAiCyEpZRRfkyswCK9/otvBoWh8SWARBEARB7DbMccAsS/HYtpcyJLAIgthrqKmtA4MAh4Ohgwe09nCIgEUrPoHLPBw+bL/Evura1fS7IgAAjgM4jrmYaTvUVySwCILY+xCgitOtzdsrPwSHg0buAnDAmMDSmg0oZ/UYMnhg2E6Kq+U16yDgQIDBEw4OG9qndQZOtBqO68JxzalAh1OKkCAIosVYUbMWAHDQkAMBRMJq2OD+rTYmIkIIhkq3ARWsHjmWB4O9bOLwIf1acGTE3ghjKSlC1v5CWCSwCIIoitraVWDgGDR4yG73JYXVipq1gbhy6UG9F7C8Zh32cb1QUDEICDAIMHC0vwcl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xo8fj7KyMgDt8z5Itm3bhu7du4fv2/O9UKH7sOcggdUGue+++3DiiSeiX79+4bZNmzahd+/esXb77rsvysvLsWnTppYe4h5j1apVAIDp06fjhhtuwN///nfsu+++mDBhAj755BMA7edeXH755fjTn/6El156CZdeeinuvPNOXHzxxeH+9nIfhBCYNGkSLrroojBlrtNe7gUAXHvttdhnn33Qo0cPrF27Fn/961/Dfe3pPqjU1tbirrvuwkUXXRRua6/3Qofuw56DBFYrMn36dKt5Xb7efPPN2DH/+c9/8Nxzz+FHP/pRoj/GWGKbEMK4fW8j673gnAMAfvrTn+KMM87A6NGjMXfuXDDG8D//8z9hf231XhTzmbjyyisxYcIEjBw5EhdccAHmzJmD++67Dx9//HHYX1u9D0D2e3HXXXdh+/btmDp1amp/bfVeFPt34ic/+QkWL16M559/Hq7r4txzz4VQFuxoq/cBaNrfzA0bNuCkk07CmWeeiQsuuCC2r63ei6bchzTa6n3Y2yGTeyty6aWX4nvf+15qmwEDBsTez507Fz169MA3v/nN2PY+ffrg9ddfj23bsmULGhsbE99O9kay3otPP/0UAHDwwQeH2ysqKjBo0CCsXbsWQNu+F035TEiOOuooAEBNTQ169OjRpu8DkP1e3HLLLXjttdcS66yNGTMG3//+9/Hggw+26XtR7GeiZ8+e6NmzJ4YNG4YRI0agX79+eO211zBu3Lg2fR+A4u/Fhg0bMHHiRIwbNw733ntvrF1bvhe783dCpy3fh72eVnN/EUXDORcDBw4UV111VWKfNCpu2LAh3PanP/2p5IyK27ZtExUVFTGTuzT933PPPUKI9nMvdP72t78JAGLNmjVCiPZzH9asWSPee++98PXcc88JAOLPf/6zWLdunRCi/dwLnbVr1woA4qWXXhJCtK/78J///EcMHTpUfO973xP5fD6xvz3dCyEKm9zby31oSUhgtSHmzZsnAIilS5cm9uXzeXHooYeKr3zlK+Ktt94S8+bNEwcccIC49NJLW2Gke5bLL79c7L///uK5554Ty5cvFz/60Y9Er169xCeffCKEaB/34tVXXxV33HGHWLx4sVi1apV47LHHRN++fcU3v/nNsE17uA8m6urqErMI28O9eP3118Vdd90lFi9eLFavXi1efPFFccwxx4jBgweLXbt2CSHax30QQoj169eLIUOGiOOOO0785z//ERs3bgxfkvZyL9asWSMWL14sbr75ZtGpUyexePFisXjxYvHpp58KIdrPfWgNSGC1Ic466ywxfvx46/41a9aIU045RXTo0EF0795dXHrppeEf1lKioaFBXHXVVaJXr16ic+fO4qtf/apYsmRJrE2p34tFixaJsWPHiq5du4rKykpx0EEHiWnTpokdO3bE2pX6fTBhElhClP69ePfdd8XEiRNF9+7dRUVFhRgwYIC46KKLxH/+859Yu1K/D0L40RoAxpdKe7gX5513nvE+yKimEO3jPrQGTAjF/UgQBEEQBEHsNjSLkCAIgiAIopkhgUUQBEEQBNHMkMAiCIIgCIJoZkhgEQRBEARBNDMksAiCIAiCIJoZElgEQRAEQRDNDAksgiAIgiCIZoYEFkEQBEEQRDNDAosgiJBjjz0WV1xxRcmcc9KkSTjttNP2SN8EQRBp5Fp7AARBtG+eeOIJlJWVhe8HDBiAK664osWFHkEQRHNCAosgiFale/furT0EgiCIZodShARBGNmyZQvOPfdc7LvvvujYsSNOPvlkVFdXh/sfeOABdOvWDc899xxGjBiBTp064aSTTsLGjRvDNvl8Hj/+8Y/RrVs39OjRA9deey3OO++8WNpOTREee+yxWLNmDa688kowxsAYAwBMnz4dhx9+eGx8d955JwYMGBC+9zwPU6ZMCc91zTXXQF9qVQiB2267DYMGDUKHDh3whS98AX/+85+b54YRBEEokMAiCMLIpEmT8Oabb+Kpp57CggULIITA1772NTQ2NoZtPv/8c9x+++14+OGH8c9//hNr167F1VdfHe6fPXs2/vCHP2Du3Ln497//je3bt+Mvf/mL9ZxPPPEEDjjgAMyYMQMbN26MibVC/OIXv8D999+P++67D/Pnz8cnn3yCJ598MtbmhhtuwNy5c3H33Xfj/fffx5VXXokf/OAHeOWVV7LfGIIgiAxQipAgiATV1dV46qmn8O9//xvjx48HAPzhD39Av3798Je//AVnnnkmAKCxsRFz5szB4MGDAQCXXnopZsyYEfZz1113YerUqTj99NMBAL/+9a/xzDPPWM/bvXt3uK6Lzp07o0+fPkWN+c4778TUqVNxxhlnAADmzJmD5557Lty/Y8cO3HHHHXjxxRcxbtw4AMCgQYMwf/583HPPPZgwYUJR5yMIgkiDBBZBEAmWLVuGXC6HsWPHhtt69OiBgw46CMuWLQu3dezYMRRXAFBVVYXNmzcDALZt24YPPvgAX/ziF8P9ruti9OjR4Jw363i3bduGjRs3hsIJAHK5HMaMGROmCZcuXYpdu3bh+OOPjx3b0NCAUaNGNet4CIIgSGARBJFA9y6p26UvCkBs9h8AMMYSx6rt0/pOw3GcxHFqqjILUtQ9/fTT2H///WP7Kioqih4TQRBEGuTBIggiwcEHH4x8Po/XX3893Pbxxx9j5cqVGDFiRKY+unbtit69e+ONN94It3meh8WLF6ceV15eDs/zYtv2228/bNq0KSay3n777di5qqqq8Nprr4Xb8vk8Fi1aFLumiooKrF27FkOGDIm9+vXrl+maCIIgskIRLIIgEgwdOhSnnnoqJk+ejHvuuQedO3fGddddh/333x+nnnpq5n4uu+wyzJo1C0OGDMHw4cNx1113YcuWLYmolsqAAQPwz3/+E9/73vdQUVGBnj174thjj8WHH36I2267Dd/+9rfxv//7v3j22WfRpUuX8LjLL78cP//5zzF06FCMGDECd9xxB7Zu3Rru79y5M66++mpceeWV4JzjmGOOwfbt2/Hqq6+iU6dOOO+885p0rwiCIExQBIsgCCNz587F6NGj8fWvfx3jxo2DEALPPPNMIi2YxrXXXouzzjoL5557LsaNG4dOnTrhxBNPRGVlpfWYGTNmYPXq1Rg8eDD2228/AMCIESPw29/+Fr/5zW/whS98AW+88UZstiIAXHXVVTj33HMxadIkjBs3Dp07dw7N9ZKf/exnuOmmmzBr1iyMGDECJ554Iv72t79h4MCBRdwZgiCIwjDRFEMEQRBEE+CcY8SIEfjOd76Dn/3sZ609HIIgiD0GpQgJgthjrFmzBs8//zwmTJiA+vp6/PrXv0ZdXR3OPvvs1h4aQRDEHoVShARB7DEcx8EDDzyAI488EkcffTTee+89zJs3L7NRniAIoq1CKUKCIAiCIIhmhiJYBEEQBEEQzQwJLIIgCIIgiGaGBBZBEARBEEQzQwKLIAiCIAiimfn/A1csUOFfbdEAAAAASUVORK5CYII=","text/html":"\n
\n
\n Figure\n
\n \n
\n ","text/plain":"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"},"metadata":{},"output_type":"display_data"}],"execution_count":28},{"id":"6d3b76be-6df8-4cb1-b475-d962a7d7eb06","cell_type":"markdown","source":"Now the colorbar bounds are more representative, but we still have the issue that extreme values along the margin are swapping any signals we might see in the continental interior. ","metadata":{"trusted":true}},{"id":"82678fa1-fd9a-469f-9eac-2254624f5e3e","cell_type":"code","source":"# Let's use the Xarray DataArray quantile method to find the 1% and 99% quantiles (Q1 and Q3) of the data\ndhdt.quantile([0.01,0.99])","metadata":{"tags":[],"trusted":true},"outputs":[{"data":{"text/html":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
<xarray.DataArray 'delta_h' (quantile: 2)> Size: 16B\narray([-0.28271484,  2.78289673])\nCoordinates:\n  * quantile  (quantile) float64 16B 0.01 0.99
","text/plain":" Size: 16B\narray([-0.28271484, 2.78289673])\nCoordinates:\n * quantile (quantile) float64 16B 0.01 0.99"},"execution_count":29,"metadata":{},"output_type":"execute_result"}],"execution_count":29},{"id":"f0ff22ef-89ee-4f85-9b14-e46dfe528978","cell_type":"markdown","source":"We can use these quantiles as the colorbar bounds so that we see the data variability by plotting the most extreme values at the maxed out value of the colorbar. We'll adjust the caps of the colorbar (using `extend`) to express that there are data values beyond the bounds. ","metadata":{"trusted":true}},{"id":"8320be7d-73dd-45ec-8a7f-7efdb9b629d3","cell_type":"code","source":"# Let's make the same plot but using the quantiles as the colorbar bounds\nfig, ax = plt.subplots(figsize=(6,3))\ndhdt = ATL15_dh['delta_h'][1,:,:] - ATL15_dh['delta_h'][0,:,:]\ndivnorm = colors.TwoSlopeNorm(vmin=dhdt.quantile(0.01), vcenter=0, vmax=dhdt.quantile(0.99))\ncb = ax.imshow(dhdt, origin='lower', norm=divnorm, cmap='coolwarm_r', \n extent = [greenland_extent[0], # minx (west)\n greenland_extent[1], # maxx (east)\n greenland_extent[2], # miny (south)\n greenland_extent[3]] # maxy (north)\n )\nax.set_xlabel('longitude'); ax.set_ylabel('latitude')\nplt.colorbar(cb, fraction=0.02, extend='both', label='height change [m]')\nplt.tight_layout()\nplt.show()","metadata":{"tags":[],"trusted":true},"outputs":[{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"f9d9c39c4fbb4e90bb18fc25666fca6e","version_major":2,"version_minor":0},"image/png":"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15k/f/4Yh/6ZtibbbbfdmH8jn/vc5zqOmWlrUqXVarH77rsjhOCBBx7o2DfT1uX9738/r3/966nVaixZsoRjjjmG5557ruOYmbQmTzzxBB//+MfZfvvtqdfr7LDDDnzxi18c83xn0poUnHfeeey777709PRMaLw9E9dlMpl2Ng0zhX333Zfnn3++Y9vZZ5/NLbfcwl577QWA1pr3ve99LFiwgLvuuovVq1dz3HHHYa3lkksu2RK3vdm59tprOfHEEzn//PM58MADsdby4IMPlvtn4poArFixghNPPLH8ua+vr/x+pq5JwWc/+1m22WYbfvOb33Rsn4nrcsABB3DWWWexZMkSnn32WU4//XQ+9KEP8Ytf/AKYeWvyyCOPYIzh8ssvZ8cdd+Shhx7ixBNPZGRkhK985SvAzFuTgiRJOOqoo1i+fDlXXnnlmP0zdV0mFeuZFiRJYhcuXGhXrFhRbvvJT35ipZT22WefLbf967/+q43j2K5fv35L3OZmJU1Tu+2229p/+Zd/mfCYmbYm1lq7bNky+9WvfnXC/TNxTQp+8pOf2De96U324YcftoBdtWpVx76Zui4FP/jBD6wQwiZJYq31a2KttRdeeKHdfvvty59n+pqsXLnSzpo1a8z2mb4uk4FPEU4TbrjhBl5++WWOP/74ctsvf/lL3vKWt7DNNtuU2w466CBarRb33XffFrjLzcv999/Ps88+i5SSPfbYgyVLlnDIIYfw8MMPl8fMtDUpuOCCC5g3bx6777475513XkeYfqauyYsvvsiJJ57It771LXp6esbsn6nrUrBmzRq+/e1vs++++xKGIeDXBNyA47lz55Y/+zUZH78urx4vsKYJV155JQcddBBLly4tt73wwgssWrSo47g5c+YQRREvvPDCVN/iZufPf/4zAOeccw5f+MIX+NGPfsScOXPYf//9WbNmDTDz1gTgU5/6FN/97ne5/fbbOeWUU7j44os5+eSTy/0zcU2stRx//PGcdNJJZUq9m5m4LgBnnHEGvb29zJs3j6eeeoof/OAH5b6ZuiYFjz32GJdccgknnXRSuW2mr8lE+HV59XiBNcmcc845ExavF1+//vWvOx7zzDPPcNNNN/Hxj398zPmEEGO2WWvH3T5d2dQ1McYA8PnPf54jjzySPffck5UrVyKE4N///d/L882kNQE49dRT2X///dltt9044YQTuOyyy7jyyitZvXp1eb6tYU1g09flkksuYXBwkDPPPHOD59sa1uWVvqf84z/+I6tWreLmm29GKcWxxx6LrQzsmIlrAvDcc89x8MEHc9RRR3HCCSd07Nsa1gT+unXZEFvLumwpfJH7JHPKKafwkY98ZIPHbLfddh0/r1y5knnz5vH+97+/Y/vixYu55557OratXbuWNE3H/GYxndnUNRkaGgJg1113LbfHccwb3vAGnnrqKWDmrcl4vO1tbwPgT3/6E/Pmzdtq1gQ2fV2+9KUvcffdd4+ZobbXXnvxsY99jG984xtbzbq80n8r8+fPZ/78+ey8887ssssuLF26lLvvvpvly5fP2DV57rnnOOCAA1i+fDlXXHFFx3Fby5rAq3tf6WZrWpctxhar/vJYa601xtjtt9/efuYznxmzrygyfO6558pt3/3ud7faIsP169fbOI47ityL4v/LL7/cWjvz1mQ8fvjDH1rAPvnkk9bambkmTz75pH3wwQfLr5tuuskC9nvf+559+umnrbUzc126eeqppyxgb7/9dmvtzFyTZ555xu600072Ix/5iM2ybMz+mbgmVTZW5D5T12Uy8AJrC3PLLbdYwP7ud78bsy/LMvuWt7zF/v3f/729//777S233GJf97rX2VNOOWUL3OnU8KlPfcpuu+229qabbrKPPPKI/fjHP24XLlxo16xZY62deWvyi1/8wl500UV21apV9s9//rO95ppr7DbbbGPf//73l8fMtDUZj8cff3xMF+FMW5d77rnHXnLJJXbVqlX2iSeesLfddpt9+9vfbnfYYQfbbDattTNvTZ599lm744472gMPPNA+88wz9vnnny+/CmbamhQ8+eSTdtWqVfbcc8+1fX19dtWqVXbVqlV2aGjIWjtz12Uy8QJrC/PRj37U7rvvvhPuf/LJJ+373vc+W6/X7dy5c+0pp5xSvllujSRJYj/zmc/YhQsX2v7+fvuud73LPvTQQx3HzKQ1ue++++w+++xjZ82aZWu1mn3jG99ov/jFL9qRkZGO42bSmozHeALL2pm1Lr/97W/tAQccYOfOnWvjOLbbbbedPemkk+wzzzzTcdxMWpOVK1daYNyvKjNpTQqOO+64cdeliHZaOzPXZTIR1laqHz0ej8fj8Xg8rxrfRejxeDwej8czyXiB5fF4PB6PxzPJeIHl8Xg8Ho/HM8l4geXxeDwej8czyXiB5fF4PB6PxzPJeIHl8Xg8Ho/HM8l4geXxeDwej8czyXiB5fF4PB6PxzPJeIHl8cxg3vnOd/LpT396q7nm8ccfzwc+8IHNcm6Px+N5JQRb+gY8Hs/M4vvf/z5hGJY/b7fddnz605+ecqHn8Xg8mxMvsDwez5Qyd+7cLX0LHo/Hs9nxKUKPxwPA2rVrOfbYY5kzZw49PT0ccsghPProo+X+q6++mtmzZ3PTTTexyy670NfXx8EHH8zzzz9fHpNlGZ/85CeZPXs28+bN44wzzuC4447rSNtVU4TvfOc7efLJJzn11FMRQiCEAOCcc85h991377i/iy++mO222678WWvNaaedVl7rs5/9LN2jVa21XHjhhbzhDW+gXq/z1re+le9973uTs2Aej8ezAbzA8ng8gKtf+vWvf80NN9zAL3/5S6y1vPe97yVN0/KY0dFRvvKVr/Ctb32Ln/3sZzz11FOcfvrp5f4LLriAb3/726xcuZKf//znDA4Ocv311094ze9///u87nWvY8WKFTz//PMdYm1j/M//+T+56qqruPLKK7nrrrtYs2YN1113XccxX/jCF1i5ciWXXnopDz/8MKeeeir/8A//wJ133rnpC+PxeDx/BT5F6PF4ePTRR7nhhhv4+c9/zr777gvAt7/9bZYuXcr111/PUUcdBUCaplx22WXssMMOAJxyyimsWLGiPM8ll1zCmWeeyQc/+EEAvva1r/GTn/xkwuvOnTsXpRT9/f0sXrz4Fd3zxRdfzJlnnsmRRx4JwGWXXcZNN91U7h8ZGeGiiy7itttuY/ny5QC84Q1v4K677uLyyy9n//33f0XX83g8nleCF1gej4ff//73BEHAPvvsU26bN28eb3zjG/n9739fbuvp6SnFFcCSJUt46aWXAFi/fj0vvvgif/d3f1fuV0qx5557YoyZ1Ptdv349zz//fCmcAIIgYK+99irThL/73e9oNpu8+93v7nhskiTssccek3o/Ho/H040XWB6PZ0ztUnV7URcFdHT/AQghxjy2evyGzr0hpJRjHldNVW4Khaj78Y9/zLbbbtuxL47jV3xPHo/H80rwNVgej4ddd92VLMu45557ym2rV6/mj3/8I7vssssmnWPWrFksWrSIe++9t9ymtWbVqlUbfFwURWitO7YtWLCAF154oUNkPfDAAx3XWrJkCXfffXe5Lcsy7rvvvo7nFMcxTz31FDvuuGPH19KlSzfpOXk8Hs9fi49geTwedtppJw4//HBOPPFELr/8cvr7+/nc5z7Htttuy+GHH77J5/nEJz7Bl7/8ZXbccUfe9KY3cckll7B27doxUa0q2223HT/72c/4yEc+QhzHzJ8/n3e+85385S9/4cILL+RDH/oQP/3pT7nxxhsZGBgoH/epT32Kf/7nf2annXZil1124aKLLmLdunXl/v7+fk4//XROPfVUjDG8/e1vZ3BwkF/84hf09fVx3HHH/VVr5fF4PJuCj2B5PB4AVq5cyZ577smhhx7K8uXLsdbyk5/8ZExacEOcccYZfPSjH+XYY49l+fLl9PX1cdBBB1Gr1SZ8zIoVK3jiiSfYYYcdWLBgAQC77LIL/+f//B++/vWv89a3vpV77723o1sR4DOf+QzHHnssxx9/PMuXL6e/v78sri/4p3/6J/7H//gffPnLX2aXXXbhoIMO4oc//CHbb7/9K1gZj8fjeeUI+9cUSHg8Hs8mYIxhl1124cMf/jD/9E//tKVvx+PxeKYMnyL0eDyTxpNPPsnNN9/M/vvvT6vV4mtf+xqPP/44Rx999Ja+NY/H45lSfIrQ4/FMGlJKrr76avbee2/2228/HnzwQW655ZZNLpT3eDyerQWfIvR4PB6Px+OZZHwEy+PxeDwej2eS8QLL4/F4PB6PZ5LxAsvj8Xg8Ho9nkvECy+PxeDwej2eS8QLL4/F4PB6PZ5LxAsvj8Xg8Ho9nkvECy+PxeDwej2eS8QLL4/F4PB6PZ5LxAsvj8Xg8Ho9nkvECy+PxeDwej2eS8QLL4/F4PB6PZ5LxAsvj8Xg8Ho9nkvECy+PxeDwej2eS8QLL4/F4PB6PZ5LxAsvj8Xg8Ho9nkvn/AQhDC5zJWm2PAAAAAElFTkSuQmCC","text/html":"\n
\n
\n Figure\n
\n \n
\n ","text/plain":"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"},"metadata":{},"output_type":"display_data"}],"execution_count":30},{"id":"b53dab15-820d-45d9-bf17-72a8702af057","cell_type":"code","source":"# Let's make the same plot but for all the available time slices and let's turn it in a function so that we can reuse this code for a smaller subset of data\n# create empty lists to store data\ndef plot_icesat2_atl15(xmin, xmax, ymin, ymax, dataset):\n # subset data using bounding box in epsg:3134 x,y\n mask_x = (dataset.x >= xmin) & (dataset.x <= xmax)\n mask_y = (dataset.y >= ymin) & (dataset.y <= ymax)\n ds_sub = dataset.where(mask_x & mask_y, drop=True)\n \n # Create empty lists to store data\n vmins_maxs = []\n\n # Find the min's and max's of each inter time slice comparison and store into lists\n for idx in range(len(ds_sub['time'].values)-1): \n dhdt = ds_sub['delta_h'][idx+1,:,:] - ds_sub['delta_h'][idx,:,:]\n vmin=dhdt.quantile(0.01)\n vmins_maxs += [vmin]\n vmax=dhdt.quantile(0.99)\n vmins_maxs += [vmax]\n if (min(vmins_maxs)<0) & (max(vmins_maxs)>0):\n vcenter = 0\n else: \n vcenter = max(vmins_maxs) - min(vmins_maxs)\n divnorm = colors.TwoSlopeNorm(vmin=min(vmins_maxs), vcenter=vcenter, vmax=max(vmins_maxs))\n\n # create fig, ax\n fig, axs = plt.subplots(7,2, sharex=True, sharey=True, figsize=(10,10))\n\n idx = 0\n for ax in axs.ravel(): \n ax.set_aspect('equal')\n dhdt = ds_sub['delta_h'][idx+1,:,:] - ds_sub['delta_h'][idx,:,:]\n cb = ax.imshow(dhdt, origin='lower', norm=divnorm, cmap='coolwarm_r', \n extent=[xmin[0], xmax[0], ymin[0], ymax[0]])\n # Change polar stereographic m to km\n km_scale = 1e3\n ticks_x = ticker.FuncFormatter(lambda x, pos: '{0:g}'.format(x/km_scale))\n ax.xaxis.set_major_formatter(ticks_x)\n ticks_y = ticker.FuncFormatter(lambda x, pos: '{0:g}'.format(x/km_scale))\n ax.yaxis.set_major_formatter(ticks_y)\n # Create common axes labels\n fig.supxlabel('easting (km)'); fig.supylabel('northing (km)')\n # Increment the idx\n idx = idx + 1\n \n fig.colorbar(cb, extend='both', ax=axs.ravel().tolist(), label='height change [m]')\n plt.show()","metadata":{"tags":[],"trusted":true},"outputs":[],"execution_count":31},{"id":"277c6fa1-5013-46d8-80a9-1ca545e17611","cell_type":"markdown","source":"Let's zoom into an individual active lake to see more detail. First let's remind ourselves of the Greenland active subglacial lakes by filtering on lake type:","metadata":{"trusted":true}},{"id":"7eb6cefc-7794-45e3-a5d6-3900d7204d85","cell_type":"code","source":"gdf_polys_active = gdf_polys[gdf_polys['Lake Type'] == 'Active']\ngdf_polys_active","metadata":{"tags":[],"trusted":true},"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
Name / LocationLat. oNLon. oELake TypeReferencesgeometry
3Flade Isblink ice cap81.160000-16.580000ActiveWillis et al. (2015)POLYGON ((-16.06723 81.1139, -16.09787 81.1062...
4Inuppaat Quuat67.611136-48.709000ActiveHowat et al. (2015); Palmer et al. (2015)POLYGON ((-48.4764 67.61446, -48.47613 67.6057...
5Sioqqap Sermia, [SS1]63.541856-48.450597ActiveBowling et al. (2019)POLYGON ((-48.25472 63.54482, -48.25457 63.536...
6Sioqqap Sermia, [SS2]63.260248-48.206633ActiveBowling et al. (2019)POLYGON ((-48.01287 63.26285, -48.01281 63.254...
61Isunguata Sermia 167.180000-50.188000ActiveLivingstone et al. (2019)POLYGON ((-49.96016 67.18562, -49.95932 67.176...
62Isunguata Sermia 267.178000-50.149000ActiveLivingstone et al. (2019)POLYGON ((-49.92117 67.18356, -49.92035 67.174...
63Isunguata Sermia 367.180000-50.128000ActiveLivingstone et al. (2019)POLYGON ((-49.90015 67.18552, -49.89933 67.176...
\n
","text/plain":" Name / Location Lat. oN Lon. oE Lake Type \\\n3 Flade Isblink ice cap 81.160000 -16.580000 Active \n4 Inuppaat Quuat 67.611136 -48.709000 Active \n5 Sioqqap Sermia, [SS1] 63.541856 -48.450597 Active \n6 Sioqqap Sermia, [SS2] 63.260248 -48.206633 Active \n61 Isunguata Sermia 1 67.180000 -50.188000 Active \n62 Isunguata Sermia 2 67.178000 -50.149000 Active \n63 Isunguata Sermia 3 67.180000 -50.128000 Active \n\n References \\\n3 Willis et al. (2015) \n4 Howat et al. (2015); Palmer et al. (2015) \n5 Bowling et al. (2019) \n6 Bowling et al. (2019) \n61 Livingstone et al. (2019) \n62 Livingstone et al. (2019) \n63 Livingstone et al. (2019) \n\n geometry \n3 POLYGON ((-16.06723 81.1139, -16.09787 81.1062... \n4 POLYGON ((-48.4764 67.61446, -48.47613 67.6057... \n5 POLYGON ((-48.25472 63.54482, -48.25457 63.536... \n6 POLYGON ((-48.01287 63.26285, -48.01281 63.254... \n61 POLYGON ((-49.96016 67.18562, -49.95932 67.176... \n62 POLYGON ((-49.92117 67.18356, -49.92035 67.174... \n63 POLYGON ((-49.90015 67.18552, -49.89933 67.176... "},"execution_count":32,"metadata":{},"output_type":"execute_result"}],"execution_count":32},{"id":"eb54bca1-def0-46cd-b2c0-d08a1e79611d","cell_type":"code","source":"# We can call the bounds of the geometry of the Shapely Polygon we created earlier\ngdf_sub = gdf_polys_active[gdf_polys_active['Name / Location'] == 'Inuppaat Quuat']","metadata":{"tags":[],"trusted":true},"outputs":[],"execution_count":33},{"id":"64cb4599-4193-4c0e-8a9e-e96a01fcdb01","cell_type":"markdown","source":"Now using these geometry bounds we can plot the area immediately around the active subglacial lake. ","metadata":{"trusted":true}},{"id":"5e949e39-f84f-42ff-8e7f-7b45270d9a39","cell_type":"code","source":"# If the figure doesn't pop up, it is because the holoviews plot was run immediately after and interferred with \n# matplotlib. Just rerun this cell and it will be fixed\n%matplotlib widget\n\n# Assigning the min, max lon, lat coords of the lower-left and upper-right corners of our bounding box \n# around the lake's buffer polygon\nlon_min = gdf_sub.geometry.bounds.minx\nlon_max = gdf_sub.geometry.bounds.maxx\nlat_min = gdf_sub.geometry.bounds.miny\nlat_max = gdf_sub.geometry.bounds.maxy\n\n# Now we re-project the lon, lat into x, y coords in the 3413 CRS, which ATL15 uses\nxmin, ymin = ll2ps(lon_min, lat_min)\nxmax, ymax = ll2ps(lon_max, lat_max)\n\n# Use our plotting fuction to plot up the data based on min, max x, y bounds\nplot_icesat2_atl15(xmin, xmax, ymin, ymax, ATL15_dh)","metadata":{"tags":[],"trusted":true},"outputs":[{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"104995cb384c4bfe850c75b2d1e43509","version_major":2,"version_minor":0},"image/png":"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Ujqd1qhRozR//nxdffXVXdYHAABAT/Lcc8/pW9/6lq688sqs9h/84AeZW9uOGTNG999/PwV6D0OBDvRCI0aMkJ/nddr7OtB7rP1OmjRJkyZN6nRfAAAguHrakvKg+c///E/dfffdTvvZZ5+t6667TpL0+c9/XrNnzz7cQ0OBUaAD6Fa8dEpe2g0q21c65IYbWULppNNmBcdJUtozwn/C7hL9tNztrNC0lBH0JrnHFTM+AFnv9eVepxYNJYw+pFCeH6oinvvzsfgdbgjS8TmAYInHw4rHP5pHUil3Tkgm3WC1SMSde8r7um3GZbMf9uO2vW/cnbesxLru1t0uZEw1VgBbNOweix3U6e4vHrf/3rSn3PenjWC3kpjbt3UsHUPncv0M0XsMGDBAjz/+uOrr67PaH3/8cQ0YMECS9MEHHzgZQ+j+KNABAAAAIEDmzp2rf/iHf1BjY6NOPPFEeZ6nF198UU8++aSWLl0qSVq5cqVOP/30Io8UXY0CHQAAAEDePPnyjFuDFlNPW3JfV1enT37yk1q8eLF++ctfyvd9HX300frNb36jU045RZIyS93Rs1CgAwAAAEDAnHrqqTr11FOLPQwcZhToAAAAABAw6XRa69ev1zvvvKN0OjvP4DOf+UyRRoVCK1iBPnLkSHk5Ei5CoZD69eunT3/60/rmN7+pY445plDDANDDpOLlSpX0yTxPh91pLB1xg95SYTc4Lh1y32uFrXVG0jf26bv7DHtu8JAVJrc75QbRWVNr2HODiOwgOsmXu6112EljtaAVHBfxEvt9DiBYwmFP4X0S0aIxd+5JGhNA2EhRSxt394hZaWuSwvaU5Gg38iljxidWKxDOWnZtBcJFQu486IfccSeS+YdeWn1bP4poxO071vFn077/MNRi8+QHbkl50MZzqFavXq1p06bpjTfecO6Q43meUlbqInqEgkXtnn766fJ9X2+99ZZGjBihk046ScOHD9dbb72lVCqlYcOG6Ze//KXGjx+vl156qVDDAAAAAIBu5corr9T48eP1hz/8Qe+995527NiRebz33nvFHh4KqGBn0CdOnKjVq1dr/fr1GjZsWKZ906ZNOuecc/SFL3xBDz/8sM444wzddttteuKJJwo1FAAAAABdhDPohffaa6/p3//93/Xxj3+82EPBYVawM+h33nmnbr/99qziXJJqamp066236jvf+Y4qKytVX1+v559/vlDDAAAAAIBu5aSTTtL69euLPQwUQcHOoK9fv16VlZXma/3799ef//xnSdKIESPU0tJSqGEAAAAAQLfyjW98Q9ddd522bt2q0aNHKxrNztIZM2ZMkUaGQitYgT58+HA9/PDDmjx5svPaj370I9XU1EiStm/frgEDBhRqGAAAAAC6WE9bUh40559/viTpa1/7WqbN8zz5vk9IXA9XsAL9+uuv19e//nW9+eab+tKXvqTBgwdr27Zt+vnPf64XXnhBP/zhDyVJjY2NGj9+fKGGAaCHScTLlIiXZZ77npE+HDZS3ENGirvnRgrn+sBhtfvGVUK706XueIw0dSstvi3ljjFlJMBb6cPxsJuc7oXsYwkZie9pYzwJ302QT8s9lpCyPyTkSo8HEAzhcEiRSGif5+42IeN2EdYdJKztIjk+XYaNCyvb2t02q+6IGGOMRtw5Lm4kpIeNudCaR620986wEttTxjQcSrsbhowEePRuGzduLPYQUCQFK9Dr6urk+75uv/12zZo1K9NeVVWlpUuX6oorrpAk3XzzzYrH3Q+BAAAAANAbDR8+vNhDQJEUrECXpBkzZqiurk6vvvqqtm/froEDB+oTn/hE1v3RBw8eXMghAAAAAOhCpLgfPq+88oo2bdqk9vbs5Sa1tbVFGhEKrWAp7nt5nqejjz5ap556qo4++uis4hxAcSQSCd10000aPXq0ysrKVF1drUsvvVRbtmwxt/d9X5MnT5bneXrssceyXhsxYoQ8z8t6zJ49O2ubTZs2acqUKSorK9OgQYP0zW9+0/lDAwAAgD1ef/11HXfccTr22GN17rnn6gtf+IK+8IUv6Itf/KK++MUvFnt4KKCCnkHftWuXnnrqKb3xxhvavXt31mue52nu3LmF7B5ADi0tLWpqatLcuXN13HHHaceOHZo5c6Zqa2v10ksvOdsvXLhwv1+uzZ8/X3V1dZnnffv2zfw7lUrp3HPP1RFHHKHnnntO27dv12WXXSbf97Vo0aKuPTAAAIAe4Nprr9XIkSP161//WqNGjdKLL76o7du367rrrtO9995b7OGhgApWoL/wwgs699xz9d5775mvU6ADxVNZWamVK1dmtS1atEgnnniiNm3alLnLgiStW7dOCxYs0Jo1azRkyBBzf+Xl5aqqqjJfe/rpp/XKK69o8+bNqq6uliR973vf0+WXX64777xTFRUVnRp7MlqiRNQNYsuW30odO/jNfm8y5AbPfZAuc9qsoDdrn4m0m3j011a3j7++7243pL+7+iAaclOVch2L1R6R+/6wESZnBd513J0VJAcgODzPDnzbV1kfd5FlSYn7poo+9v4tbW6WpYycTzNMLpZnIFw84s5lfSLunNmedj8CdyYkztoyaownZvydsfpJdwgE7fg8aPYscXePt5h62hL3559/Xg0NDTriiCMUCoUUCoX0t3/7t7rrrrv0zW9+U2vXri32EFEgBVviXl9fr6FDh+rFF19Ua2ur0ul01oNbAwDBsnPnTnmep379+mXaWlpadNFFF2nx4sU5C3BJuvvuuzVw4ECNHTtWd955Z9by9eeff17HHntspjiXpIkTJ6qtrU2//e1vc+6zra1Nzc3NWQ8AQP6YR4EDW7JkiUaOHKmSkhKdcMIJevbZZ/e7/W9+8xudcMIJKikp0ahRo7R06dKCjCuVSmVWJA4aNChzGeLw4cP16quvFqRPBEPBzqD//ve/189+9jNuoQZ0A62trZo9e7amTZuWdUa7vr5ep5xyis4777yc77322ms1btw49e/fXy+++KLmzJmjjRs36oEHHpAkbd261QmD7N+/v2KxmLZu3Zpzv3fddZfmzZt3iEcGAL0X8ygKxvPlBe3WcAcxnmXLlmnmzJlasmSJTj31VP3gBz/Q5MmT9corr2StJtxr48aN+vznP6+6ujr9y7/8i/77v/9bV111lY444ojMfcu7yrHHHqvf/e53GjVqlE466SR997vfVSwW0w9/+EONGjWqS/tCsBTsDPoRRxxRqF0D6KRHHnlEffv2zTz2/XY4kUjowgsvVDqd1pIlSzLty5cvV0NDgxYuXLjffdfX1+v000/XmDFjNH36dC1dulQPPvigtm/fntnGun7d9/39Xtc+Z84c7dy5M/PYvHlzJ44YAMA8CuzfggULdMUVV2j69Ok65phjtHDhQg0bNkz//M//bG6/dOlS1dTUaOHChTrmmGM0ffp0fe1rXyvINeG33HKL0uk9lxF861vf0htvvKHTTjtNTz75pO6///4u7w/BUbAz6N/4xje0dOlS/d3f/R3J7UCR1dbW6qSTTso8Hzp0qKQ9xfkFF1ygjRs3qqGhIevseUNDgzZs2JC15F2Szj//fJ122ml65plnzL5OPvlkSdL69es1cOBAVVVV6YUXXsjaZseOHUokEvu9zWI8Hlc8Hu/MYQIA9sE8it7G933nUo5cvwft7e367W9/69x55pxzztH//M//mPt//vnndc4552S1TZw4UQ8++KASiYSiUTeH5mBNnDgx8+9Ro0bplVde0Xvvvaf+/ftTW/VwBSvQ0+m0/vSnP+n444/Xueeeq4EDB2a97nme6uvrC9U9gH2Ul5ervLw8q21vcf7aa6+psbHR+R2dPXu2pk+fntU2evRo3XfffZoyZUrOvvaGluwNlJswYYLuvPNOvf3225m2p59+WvF4XCeccMIhH5vnGwE8YXdqS3tucJlvpBPlClaz3t+WckPdrJC4sBXgZgQAhY3leWUlbghPeazNaYsYfeQKzEkZQW9J3/2ZhT13n1EvabS17/c5gGCJRDxFIh/NQaUl7lxoff4vcac8lcbdOSoStueePnF3px+0GvOw8faSmNsYDbt9W++15mUrWDNkzMERow9Jak+54/6gzZ1bwyFr3EY/oex+wqFgBbB15Pm++fe3mDzf19atW1VZWZnVftttt+n22293tn/33XeVSqWckwWDBw/OeQmeddne4MGDlUwm9e677+YM0+0qAwYMKOj+EQwFK9BvuOGGzL9/97vfOa9ToAPFk0wmNXXqVDU1NWnFihVKpVKZP0YDBgxQLBZTVVWVGQxXU1OjkSNHStrzTfLq1at15plnqrKyUmvWrFF9fb1qa2sz126dc845+uQnP6lLLrlE99xzj9577z1df/31qqur63SCOwAAQC5VVVVOgNqBVpF0PBt9oEvwrO2t9kP1wQcf6Dvf+Y5WrVqld955J7Pcfa/XX3+9S/tDcBSsQN+4cWOhdg3gEL355ptavny5JGns2LFZrzU2NuqMM87Iaz/xeFzLli3TvHnz1NbWpuHDh6uurk433nhjZptwOKwnnnhCV111lU499VSVlpZq2rRp3MMTAAB0Kc/z8v7yf9CgQQqHw87Z8nfeeSfnJXhVVVXm9pFIxFmJeKimT5+u3/zmN7rkkks0ZMgQlrX3IgUr0IcPH16oXQM4RCNGjMh849sZHd8zbtw4rV69+oDvq6mp0YoVKzrdHwAACB5PwbvveGfL11gsphNOOEErV67UF7/4xUz7ypUrc969ZsKECXr88cez2p5++mmNHz++S68/l6SnnnpKTzzx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AoABOgAAAAAAAcAAHQAAAACAAGCADgAAAABAADBABwAAAAAgABigAwAAAAAQAAzQAQAAAAAIAAboAAAAAAAEAAN0AAAAAAACgAE6AAAAAAABwAAdAAAAAIAAYIAOAAAAAEAAMEAHAAAAACAAGKADAAAAABAADNABAAAAAAgABugAAAAAAAQAA3QAAAAAAAKAAToAAAAAAAHAAB0AAAAAgABggA4AAAAAQAAwQAcAAAAAIAAYoAMAAAAAEAAM0AEAAAAACAAG6AAAAAAABAADdAAAAAAAAoABOgAAAAAAAcAAHQAAAACAAGCADgAAAABAADBABwAAAAAgABigAwAAAAAQAAzQAQAAAAAIAAboAACcJnV1dVq0aJF27Njhe23RokVyHOf0N+oYX/nKVzRp0qTM802bNslxHP3oRz/q1OP+8Y9/VCwW07Zt2zr1OAAABB0DdAAATpO6ujotXrzYHKDPnj1bmzdvPv2Net/27dv1+OOP65vf/OZpP/aHP/xhXXvttZo3b95pPzYAAEHCAB0AgAAYPHiwxo0b12XH//a3v60xY8Zo9OjRXXL8uXPn6j/+4z/0q1/9qkuODwBAEDBABwAUrF27dmnmzJk688wzFY/H9bGPfUz/+I//mFWnublZCxYsUGVlpUpLS9WvXz+NHz9e//7v/+7b35NPPqmxY8eqtLRUJSUlOvvss/WVr3xFUtty8YsuukiS9OUvf1mO48hxHC1atEiSvcR9+PDh+uxnP6tnn31Wo0aNUnFxsT760Y/q+9//vu/Yv/zlLzV+/HgVFRXprLPO0t13362HH35YjuPojTfe6PB9ePvtt/WTn/xE11133Qe+Z42Njbryyis1cOBAvfTSS1lt/+1vf6urr7468z7Nnz9fqVRKr776qiZNmqREIqHhw4frH/7hH3z7/cQnPqGPfexjWr169Qe2AQCAnirS1Q0AAKArvPLKK5owYYKGDh2qBx54QOXl5Xruuef09a9/Xfv27dM999wjSWppadG7776r2267TWeddZZaW1v185//XJ///Of16KOPatasWZKkzZs36wtf+IK+8IUvaNGiRSoqKtKf/vQn1dTUSJJGjRqlRx99VF/+8pd111136TOf+YyktpnzjuzcuVMLFixQdXW1Bg4cqIcfflhf/epXde655+qTn/ykJOm3v/2t/uZv/kYf/vCH9fjjj6ukpESrV6/WD37wg7zei+eff17JZFKXXXZZh/XefPNNffrTn1Zra6s2b96ss88+O+v16dOn64tf/KJuvPFGbdy4Uf/wD/+gZDKpn//857rpppt022236Yc//KHuuOMOnXvuufr85z+ftf3EiRP15JNPyvO8Lr8eHwCALuEBAFCArrzySm/w4MFeQ0NDVvncuXO9oqIi79133zW3S6VSXjKZ9L761a96H//4xzPl3/nOdzxJ3l/+8pecx9y6dasnyXv00Ud9r91zzz1e+4/lYcOGeUVFRd6f/vSnTNnhw4e9fv36eTfeeGOm7Oqrr/Z69erlvfPOO5mydDrtnXfeeZ4kb/fu3Tnb5Hme97Wvfc0rLi72XNfNKq+trfUkeU8++aS3fft2r6Kiwrvkkku8/fv3m21/4IEHssorKys9Sd5TTz2VKUsmk94ZZ5zhff7zn/e145//+Z89Sd7vf//7DtsLAEBPxRJ3AEDBaW5u1gsvvKDPfe5zKikpUSqVyjw+/elPq7m5WVu2bMnUf/LJJ3XxxRerd+/eikQiikajeuSRR/T73/8+U+fI8vXp06fr3/7t3/Q///M/p6StlZWVGjp0aOZ5UVGRPvzhD+tPf/pTpuwXv/iFPvWpT2nAgAGZslAopOnTp+d1jLq6Op1xxhk5Z62fe+45XXLJJfrkJz+pjRs3ql+/fma9z372s1nPP/axj8lxHE2ePDlTFolEdO6552a1/4gzzzxTkk7ZewcAQHfDAB0AUHD279+vVCqllStXKhqNZj0+/elPS5L27dsnSXrqqac0ffp0nXXWWfrBD36gzZs3a+vWrfrKV76i5ubmzD4/+clPat26dUqlUpo1a5YGDx6s888/X//6r/96Um3t37+/rywej+vw4cNZ5zNw4EBfPavMcvjwYRUVFeV8fd26dTp8+LC+9rWvKR6P56zXfuAei8VUUlLi23csFst67444Uu/YcwMAoJBwDToAoOD07dtX4XBY1113nW6++WazzogRIyRJP/jBDzRixAitXbs2a4a5paXFt83UqVM1depUtbS0aMuWLVq2bJlmzpyp4cOHa/z48Z1zMmobxL/99tu+8vr6+ry2HzBgQIf3IF++fLnWrl2ryZMn6yc/+YmuuOKKE25rR959991MewAAKEQM0AEABaekpESXXXaZtm/frgsuuECxWCxnXcdxFIvFsgbn9fX1Zor7EfF4XJdeeqnKysr03HPPafv27Ro/fnxm9vlUzxBfeuml+tnPfqZ9+/ZlBreu6+rJJ5/Ma/uPfvSj+td//Vc1NDSotLTU93pRUZGeeuopffGLX1RVVZXWrl2rqVOnntJzkKT//u//VigU0kc+8pFTvm8AALoDlrgDAArS//k//0d79uzRJZdcoscee0ybNm3S008/reXLl+tTn/pUpt5nP/tZvfrqq7rppptUU1Ojxx9/XP/rf/0vDRo0KGt/3/jGN/SVr3xFa9as0S9+8Qv9+7//u+bNm6doNKpLL71UknTOOeeouLhYa9as0aZNm/Tyyy+rrq7upM/lzjvvVDqd1uWXX65/+7d/09NPP60pU6bo0KFDktquR+/IxIkT5Xmefv3rX+esE41G9a//+q+aOXOmpk2bdtJL9y1btmxRZWWl+vbte8r3DQBAd8AAHQBQkM477zxt27ZN559/vu666y5dccUV+upXv6of/ehHuvzyyzP1vvzlL+vb3/62nnnmGX3605/Wfffdp+rqas2cOTNrf2PHjlV9fb3uuOMOXXHFFbrhhhtUXFysmpoa/dVf/ZWktpn773//+9q/f7+uuOIKXXTRRfre97530udy4YUXauPGjSouLtasWbN0ww036K/+6q900003SZI5K36siy++WMOHD+9wVYDUNtB/5JFHdNNNN+mLX/yiHn744ZNu+xHvvfeeXnjhBV177bWnbJ8AAHQ3jud5Xlc3AgAAnHpXXHGF3njjDf3xj3/8wLoPPPCAli5dqv/5n/9RcXHxaWhdtkceeUS33HKL9u7dyww6AKBgMYMOAEAPMH/+fD3xxBPatGmTnnrqKV111VXauHGjqqur89r+5ptvVmlpqf7xH/+xk1vql0qldN9992nhwoUMzgEABY2QOAAAeoB0Oq1vfOMbqq+vl+M4Ou+88/TEE0/oi1/8Yl7bFxUV6YknntD27ds7uaV+e/fu1Re/+EUtWLDgtB8bAIAgYYk7AAAAAAABwBJ3AAAAAAACgAE6AAAAAAABwAAdAAAAAIAAYIAOAAAAAEAAMEAHAAAAACAAGKADAAAAABAADNABAAAAAAgABugAAAAAAAQAA3QAAAAAAALg/wdXR3c59SMW9AAAAABJRU5ErkJggg==","text/html":"\n
\n
\n Figure\n
\n \n
\n ","text/plain":"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"},"metadata":{},"output_type":"display_data"}],"execution_count":34},{"id":"f6a59c54-792e-4a6b-8cbb-590d555405a3","cell_type":"code","source":"# Let's explore plotting the data interactively using Xarray and Holoviews\nhvplot.extension('matplotlib')\ndivnorm = colors.TwoSlopeNorm(vmin=-0.25, vcenter=0, vmax=1.25)\nATL15_dh['delta_h'].hvplot(groupby='time', cmap='coolwarm_r', norm=divnorm, invert=True, \n width=(ATL15_dh['x'].max()-ATL15_dh['x'].min())/3e3, height=(ATL15_dh['y'].max()-ATL15_dh['y'].min())/3e3, \n widget_type='scrubber', widget_location='bottom')","metadata":{"tags":[],"trusted":true},"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.2'.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.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.3/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.3/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.3/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.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.2.min.js\", \"https://cdn.holoviz.org/panel/1.2.3/dist/panel.min.js\", \"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));","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.2'.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.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.3/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.3/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.3/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.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.2.min.js\", \"https://cdn.holoviz.org/panel/1.2.3/dist/panel.min.js\", \"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":"\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n }) \n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n","application/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":{},"metadata":{},"output_type":"display_data"},{"data":{},"metadata":{},"output_type":"display_data"},{"data":{"application/vnd.holoviews_exec.v0+json":"","text/html":"
\n
\n
\n","text/plain":"Column\n [0] HoloViews(DynamicMap, widget_location='bottom', widget_type='scrubber')\n [1] WidgetBox(align=('center', 'end'))\n [0] Player(end=20, width=550)"},"execution_count":35,"metadata":{"application/vnd.holoviews_exec.v0+json":{"id":"p1084"}},"output_type":"execute_result"}],"execution_count":35},{"id":"64f4a56e-23dd-492d-b433-14412e22590a","cell_type":"code","source":"# clean up environment by deleting intermediary files\nos.remove('Flade_Isblink_poly.gpkg')","metadata":{"tags":[],"trusted":true},"outputs":[],"execution_count":36},{"id":"373dba30-f76d-4eea-8a04-8105531fab0a","cell_type":"markdown","source":"## Streaming cloud-hosted data via earthaccess\nWe will next use earthaccess to authenicate for NASA EarthData, and search and stream cloud-hosted data directly. ","metadata":{"trusted":true}},{"id":"869a0c7c-cb2f-4594-90f0-1210e0c8f812","cell_type":"markdown","source":"\n","metadata":{"trusted":true}},{"id":"339bcb88-0bcc-40bc-8a83-fdef598b0c91","cell_type":"code","source":"# Import earthaccess Library and view version\nimport earthaccess\nprint(f\"Using earthaccess v{earthaccess.__version__}\")","metadata":{"tags":[],"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"Using earthaccess v0.10.0\n"}],"execution_count":37},{"id":"9669aa7c-325b-4ce3-850f-01d272c73b01","cell_type":"markdown","source":"### Log into NASA's Earthdata using the earthaccess package","metadata":{"trusted":true}},{"id":"16c436c5-9a3c-487c-b196-a67e80e01b3f","cell_type":"markdown","source":"There are multiple ways to provide your Earthdata credentials via [earthaccess](https://nsidc.github.io/earthaccess/). The [earthaccess authentication class](https://nsidc.github.io/earthaccess/tutorials/restricted-datasets/#auth) automatically tries three methods for getting user credentials to log in:\n1) with `EARTHDATA_USERNAME` and `EARTHDATA_PASSWORD` environment variables\n2) through an interactive, in-notebook login (used below); passwords are not shown plain text\n3) with stored credentials in a .netrc file (not recommended for security reasons)","metadata":{"trusted":true}},{"id":"4be86745-179a-4010-b033-3e2e10438fdd","cell_type":"code","source":"# Try to authenticate\nauth = earthaccess.login()\nprint(auth.authenticated)","metadata":{"tags":[],"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"True\n"}],"execution_count":38},{"id":"51385d73-f828-48ba-9b69-a93473adfea0","cell_type":"markdown","source":"### Search for cloud-available datasets from NASA","metadata":{"trusted":true}},{"id":"c0e74d67-7dc5-4404-a8fe-fbec06801bca","cell_type":"code","source":"# Using a keyword search\n\nfrom pprint import pprint\ndatasets = earthaccess.search_datasets(keyword=\"SENTINEL\",\n cloud_hosted=True)\n\nfor dataset in datasets[0:2]:\n pprint(dataset.summary())","metadata":{"tags":[],"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"{'concept-id': 'C1595422627-ASF',\n 'file-type': '',\n 'get-data': [],\n 'short-name': 'SENTINEL-1_INTERFEROGRAMS',\n 'version': '1'}\n{'cloud-info': {'Region': 'us-west-2',\n 'S3BucketAndObjectPrefixNames': ['s3://lp-prod-protected/HLSS30.020',\n 's3://lp-prod-public/HLSS30.020'],\n 'S3CredentialsAPIDocumentationURL': 'https://data.lpdaac.earthdatacloud.nasa.gov/s3credentialsREADME',\n 'S3CredentialsAPIEndpoint': 'https://data.lpdaac.earthdatacloud.nasa.gov/s3credentials'},\n 'concept-id': 'C2021957295-LPCLOUD',\n 'file-type': \"[{'Format': 'Cloud Optimized GeoTIFF (COG)', 'FormatType': \"\n \"'Native', 'Media': ['Earthdata Cloud', 'HTTPS'], \"\n \"'AverageFileSize': 20, 'AverageFileSizeUnit': 'MB', \"\n \"'TotalCollectionFileSizeBeginDate': \"\n \"'2015-11-28T00:00:00.000Z'}]\",\n 'get-data': ['https://search.earthdata.nasa.gov/search?q=C2021957295-LPCLOUD',\n 'https://appeears.earthdatacloud.nasa.gov/'],\n 'short-name': 'HLSS30',\n 'version': '2.0'}\n"}],"execution_count":39},{"id":"197a6bb3-9ca7-4353-99e8-b3acb0691f53","cell_type":"code","source":"# Using a known short name\ndatasets = earthaccess.search_datasets(short_name=\"HLSS30\",\n cloud_hosted=True)\nfor dataset in datasets:\n pprint(dataset.summary())\n pprint(dataset.abstract())","metadata":{"tags":[],"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"{'cloud-info': {'Region': 'us-west-2',\n 'S3BucketAndObjectPrefixNames': ['s3://lp-prod-protected/HLSS30.020',\n 's3://lp-prod-public/HLSS30.020'],\n 'S3CredentialsAPIDocumentationURL': 'https://data.lpdaac.earthdatacloud.nasa.gov/s3credentialsREADME',\n 'S3CredentialsAPIEndpoint': 'https://data.lpdaac.earthdatacloud.nasa.gov/s3credentials'},\n 'concept-id': 'C2021957295-LPCLOUD',\n 'file-type': \"[{'Format': 'Cloud Optimized GeoTIFF (COG)', 'FormatType': \"\n \"'Native', 'Media': ['Earthdata Cloud', 'HTTPS'], \"\n \"'AverageFileSize': 20, 'AverageFileSizeUnit': 'MB', \"\n \"'TotalCollectionFileSizeBeginDate': \"\n \"'2015-11-28T00:00:00.000Z'}]\",\n 'get-data': ['https://search.earthdata.nasa.gov/search?q=C2021957295-LPCLOUD',\n 'https://appeears.earthdatacloud.nasa.gov/'],\n 'short-name': 'HLSS30',\n 'version': '2.0'}\n('The Harmonized Landsat Sentinel-2 (HLS) project provides consistent surface '\n 'reflectance data from the Operational Land Imager (OLI) aboard the joint '\n 'NASA/USGS Landsat 8 satellite and the Multi-Spectral Instrument (MSI) aboard '\n 'Europe’s Copernicus Sentinel-2A and Sentinel-2B satellites. The combined '\n 'measurement enables global observations of the land every 2–3 days at '\n '30-meter (m) spatial resolution. The HLS project uses a set of algorithms to '\n 'obtain seamless products from OLI and MSI that include atmospheric '\n 'correction, cloud and cloud-shadow masking, spatial co-registration and '\n 'common gridding, illumination and view angle normalization, and spectral '\n 'bandpass adjustment. \\r\\n'\n '\\r\\n'\n 'The HLSS30 product provides 30-m Nadir Bidirectional Reflectance '\n 'Distribution Function (BRDF)-Adjusted Reflectance (NBAR) and is derived from '\n 'Sentinel-2A and Sentinel-2B MSI data products. The HLSS30 and HLSL30 '\n 'products are gridded to the same resolution and Military Grid Reference '\n 'System (MGRS) '\n '(https://hls.gsfc.nasa.gov/products-description/tiling-system/) tiling '\n 'system, and thus are “stackable” for time series analysis.\\r\\n'\n '\\r\\n'\n 'The HLSS30 product is provided in Cloud Optimized GeoTIFF (COG) format, and '\n 'each band is distributed as a separate COG. There are 13 bands included in '\n 'the HLSS30 product along with four angle bands and a quality assessment (QA) '\n 'band. See the User Guide for a more detailed description of the individual '\n 'bands provided in the HLSS30 product.\\r\\n')\n"}],"execution_count":40},{"id":"86364ad2-5b96-4619-b283-82e56e9b6790","cell_type":"markdown","source":"### Searching for granules (files) from a given collection (dataset)\nearthaccess has two different ways of querying for data:\n1) We can build a query object or \n2) we can use the top level API. \n\nThe difference is that the query object is a bit more flexible and we don't retrieve the metadata from CMR until we execute the `.get()` or `.get_all()` methods.","metadata":{"trusted":true}},{"id":"76f6b3bc-7c40-43af-b03d-31616f0fae7d","cell_type":"markdown","source":"Let's use [bboxfinder.com](http://bboxfinder.com) to get the extent of our bounding box and enter it into our bounding box input below. You are also welcome to put in a bounding box you already have available. You can uncomment the Iceland bounding box if you don't want to find your own. Order should be: `min_lon, min_lat, max_lon, max_lat`","metadata":{"trusted":true}},{"id":"c61b74b9-6a08-4938-8ed1-3ef8545eae43","cell_type":"code","source":"# Using a specific concept-id, which is unique to the specific product and version\n\n# bbox for ~Iceland is -22.1649, 63.3052, -11.9366, 65.5970 \ngranules_query = earthaccess.granule_query().cloud_hosted(True) \\\n .concept_id(\"C2021957295-LPCLOUD\") \\\n .bounding_box(-22.1649, 63.3052, -11.9366, 65.5970) \\\n .temporal(\"2020-01-01\",\"2023-01-01\")\ngranules_query.params","metadata":{"tags":[],"trusted":true},"outputs":[{"data":{"text/plain":"{'concept_id': ['C2021957295-LPCLOUD'],\n 'bounding_box': '-22.1649,63.3052,-11.9366,65.597',\n 'temporal': ['2020-01-01T00:00:00Z,2023-01-01T23:59:59Z']}"},"execution_count":41,"metadata":{},"output_type":"execute_result"}],"execution_count":41},{"id":"ef5ba481-f579-4a5c-a34b-8f19097ae1b6","cell_type":"code","source":"granules_query.hits()","metadata":{"tags":[],"trusted":true},"outputs":[{"data":{"text/plain":"5380"},"execution_count":42,"metadata":{},"output_type":"execute_result"}],"execution_count":42},{"id":"38559fcd-4e61-4b7c-bcfb-f8e15ac3b6e6","cell_type":"markdown","source":"Earthaccess has many methods we can use for our search. For a complete list of the parameters we can use, go to [https://nsidc.github.io/earthaccess/user-reference/granules/granules-query/](https://nsidc.github.io/earthaccess/user-reference/granules/granules-query/)","metadata":{"trusted":true}},{"id":"c92d48d0-524c-4a08-8845-4c1a8326c4d1","cell_type":"code","source":"granule = granules_query.get(1)[0]\ngranule.data_links()","metadata":{"tags":[],"trusted":true},"outputs":[{"data":{"text/plain":"['https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B09.tif',\n 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B05.tif',\n 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B10.tif',\n 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B03.tif',\n 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B08.tif',\n 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B06.tif',\n 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B07.tif',\n 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.Fmask.tif',\n 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B8A.tif',\n 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.SAA.tif',\n 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.VAA.tif',\n 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.SZA.tif',\n 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B02.tif',\n 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B01.tif',\n 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B11.tif',\n 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B04.tif',\n 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.VZA.tif',\n 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B12.tif']"},"execution_count":43,"metadata":{},"output_type":"execute_result"}],"execution_count":43},{"id":"4065b490-7f8d-46be-b35e-3b5e90c734b4","cell_type":"markdown","source":"### Downloading granules","metadata":{"trusted":true}},{"id":"873ef4ad-f8b9-4032-b9e2-0272f096b9a9","cell_type":"markdown","source":"**IMPORTANT**: Some datasets will require users to accept an EULA (end user license agreement), it is advisable trying to download a single granule using our browser first and see if we get redirected to a NASA form.\n![NASA end user license agreement)](images/EULA.png)","metadata":{"jp-MarkdownHeadingCollapsed":true,"tags":[],"trusted":true}},{"id":"945e661c-baf1-4d5a-8821-07ef9446829a","cell_type":"markdown","source":"### Streaming data with earthaccess\nIf we have enough RAM (memory), we can load our granules from an S3 bucket into memory. Earthaccess works with fsspec (xarray, h5netcdf) at the moment, so this is task is better suited for Level 3 and Level 4 netcdf datasets.\n\nWe are going to select a few granules for the same day in February for 5 years.","metadata":{"trusted":true}},{"id":"a7f173ef-fb02-4d83-8c35-2fc1b4efd699","cell_type":"code","source":"iceland_bbox = (-22.1649, 63.3052, -11.9366, 65.5970)\n# We are going to save our granules for each year on this list\ngranule_list = []\n\nfor year in range(2018, 2023):\n print(f\"Querying {year}\")\n granules = earthaccess.search_data(\n short_name = \"HLSS30\",\n bounding_box = iceland_bbox,\n temporal = (f\"{year}-02-17\", f\"{year}-02-18\")\n )\n granule_list.extend(granules)","metadata":{"tags":[],"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"Querying 2018\nQuerying 2019\nQuerying 2020\nQuerying 2021\nQuerying 2022\n"}],"execution_count":44},{"id":"55302fcc-8396-420f-b3ea-f0587ee5efa1","cell_type":"code","source":"scene = granule_list[0]\nscene","metadata":{"tags":[],"trusted":true},"outputs":[{"data":{"text/html":"\n
\n \n
\n \n ","text/plain":"Collection: {'EntryTitle': 'HLS Sentinel-2 Multi-spectral Instrument Surface Reflectance Daily Global 30m v2.0'}\nSpatial coverage: {'HorizontalSpatialDomain': {'Geometry': {'GPolygons': [{'Boundary': {'Points': [{'Longitude': -20.77975676, 'Latitude': 63.04157071}, {'Longitude': -19.80583813, 'Latitude': 64.02224734}, {'Longitude': -21.00040929, 'Latitude': 64.02715388}, {'Longitude': -21.00039541, 'Latitude': 63.041742}, {'Longitude': -20.77975676, 'Latitude': 63.04157071}]}}]}}}\nTemporal coverage: {'RangeDateTime': {'BeginningDateTime': '2018-02-17T13:12:50.460Z', 'EndingDateTime': '2018-02-17T13:12:50.460Z'}}\nSize(MB): 72.62060165405273\nData: ['https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.VAA.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B06.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B8A.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B10.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B08.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B07.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.SZA.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B02.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B04.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B12.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B05.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B09.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.SAA.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B01.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.VZA.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.Fmask.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B03.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B11.tif']"},"execution_count":45,"metadata":{},"output_type":"execute_result"}],"execution_count":45},{"id":"92001133-79db-416f-8664-3ba9b8d6e5d0","cell_type":"markdown","source":"Retrieve the data link. \"Direct\" indicates an S3 bucket in the cloud, which you can stream from. \"External\" indicates an HTTPS link which is not cloud-based. Direct access link will allow you to stream the data, but you can also open from HTTPS into memory if it's the right file format (generally formats that Xarray can open). ","metadata":{"trusted":true}},{"id":"1fcca3fa-1319-4a1c-94de-50fb071e06c0","cell_type":"code","source":"print(\"Direct access links: \", scene.data_links(access=\"direct\")[0])\nprint(\"External links: \", scene.data_links(access=\"external\")[0])","metadata":{"tags":[],"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":"Direct access links: s3://lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.VAA.tif\nExternal links: https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.VAA.tif\n"}],"execution_count":46},{"id":"41e1cbfc-8bdc-4a10-b7de-14185ab86c1d","cell_type":"code","source":"%matplotlib widget\nimport rasterio as rio\nfrom rasterio.plot import show\nimport xarray as xr\n\n# Read and plot with grid coordinates \nwith rio.open(earthaccess.open(granule_list[1:2])[0]) as src:\n fig, ax = plt.subplots(figsize=(9,8))\n\n # To plot\n show(src,1)\n\n # To open data into a numpy array\n profile = src.profile\n arr = src.read(1)","metadata":{"tags":[],"trusted":true},"outputs":[{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"1f3c032272394847a6f096cadb22fd79","version_major":2,"version_minor":0},"text/plain":"QUEUEING TASKS | : 0%| | 0/18 [00:00\n
\n Figure\n
\n \n \n ","text/plain":"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"},"metadata":{},"output_type":"display_data"}],"execution_count":47},{"id":"d55122f3-3989-4589-9b0f-9c378a782e21","cell_type":"code","source":"hls_scene = xr.open_dataset(earthaccess.open(granule_list[1:2])[0], engine='rasterio')\nhls_scene","metadata":{"tags":[],"trusted":true},"outputs":[{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"61ed02c346354a78bff31d32305836d8","version_major":2,"version_minor":0},"text/plain":"QUEUEING TASKS | : 0%| | 0/18 [00:00\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
<xarray.Dataset> Size: 54MB\nDimensions:      (band: 1, x: 3660, y: 3660)\nCoordinates:\n  * band         (band) int64 8B 1\n  * x            (x) float64 29kB 4e+05 4e+05 4e+05 ... 5.097e+05 5.097e+05\n  * y            (y) float64 29kB 7.1e+06 7.1e+06 7.1e+06 ... 6.99e+06 6.99e+06\n    spatial_ref  int64 8B ...\nData variables:\n    band_data    (band, y, x) float32 54MB ...
","text/plain":" Size: 54MB\nDimensions: (band: 1, x: 3660, y: 3660)\nCoordinates:\n * band (band) int64 8B 1\n * x (x) float64 29kB 4e+05 4e+05 4e+05 ... 5.097e+05 5.097e+05\n * y (y) float64 29kB 7.1e+06 7.1e+06 7.1e+06 ... 6.99e+06 6.99e+06\n spatial_ref int64 8B ...\nData variables:\n band_data (band, y, x) float32 54MB ..."},"execution_count":48,"metadata":{},"output_type":"execute_result"}],"execution_count":48},{"id":"ee74d663-1699-4ea6-88e2-14eeba18f97b","cell_type":"markdown","source":"### Working with legacy data formats","metadata":{"trusted":true}},{"id":"4f915ebe-ff0f-425d-8594-ba89cd9dbb52","cell_type":"markdown","source":"**MOD07_L2** is an HDF EOS dataset providing atmospheric profiles from the MODerate Resolution Imaging Spectroradiometer instrument on the Terra satelite. You could use this data for providing an atmospheric correction for imagery to get a surface reflectance measurement. \n\nIt is in a very old HDF data format and although streaming is technically possible, the only libraries that can open HDF EOS expect file paths not remote file systems like the one used by xarray (fsspec). So instead will access the netCDF endpoint via Opendap to download the granules instead of streaming them.","metadata":{"trusted":true}},{"id":"b5577154-f15c-464c-b68a-57a280d484d1","cell_type":"code","source":"iceland_bbox = (-22.1649, 63.3052, -11.9366, 65.5970)\n\ngranules = earthaccess.search_data(\n short_name = \"MOD07_L2\",\n bounding_box = iceland_bbox,\n temporal = (f\"2020-01-01\", f\"2020-01-02\")\n)","metadata":{"tags":[],"trusted":true},"outputs":[],"execution_count":3},{"id":"a89d0974-ecfd-45c5-9c6d-7a1595c167b2","cell_type":"code","source":"print(\"Direct access link: \", granules[0].data_links(access=\"direct\"))\nprint(\"External link: \", granules[0].data_links(access=\"external\"))","metadata":{"tags":[],"trusted":true},"outputs":[{"name":"stdout","text":"Direct access link: ['s3://prod-lads/MOD07_L2/MOD07_L2.A2020001.0015.061.2020002183420.hdf']\nExternal link: ['https://data.laadsdaac.earthdatacloud.nasa.gov/prod-lads/MOD07_L2/MOD07_L2.A2020001.0015.061.2020002183420.hdf']\n","output_type":"stream"}],"execution_count":4},{"id":"cfbfb54d-798a-4bda-88c0-6461bb2c026c","cell_type":"markdown","source":"If we try to open these HDF files in Xarray:","metadata":{"trusted":true}},{"id":"53a520f7-fb86-40ba-aee6-6a98e7615ce7","cell_type":"code","source":"# This creates an anticipated error\nmod07 = xr.open_mfdataset(earthaccess.open(granules[0:3]), engine='rasterio')","metadata":{"tags":[],"trusted":true},"outputs":[{"output_type":"display_data","data":{"text/plain":"QUEUEING TASKS | : 0%| | 0/3 [00:00 2\u001b[0m mod07 \u001b[38;5;241m=\u001b[39m \u001b[43mxr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen_mfdataset\u001b[49m\u001b[43m(\u001b[49m\u001b[43mearthaccess\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgranules\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m:\u001b[49m\u001b[38;5;241;43m3\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mengine\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mrasterio\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n","File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.11/site-packages/xarray/backends/api.py:1077\u001b[0m, in \u001b[0;36mopen_mfdataset\u001b[0;34m(paths, chunks, concat_dim, compat, preprocess, engine, data_vars, coords, combine, parallel, join, attrs_file, combine_attrs, **kwargs)\u001b[0m\n\u001b[1;32m 1074\u001b[0m open_ \u001b[38;5;241m=\u001b[39m open_dataset\n\u001b[1;32m 1075\u001b[0m getattr_ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m\n\u001b[0;32m-> 1077\u001b[0m datasets \u001b[38;5;241m=\u001b[39m \u001b[43m[\u001b[49m\u001b[43mopen_\u001b[49m\u001b[43m(\u001b[49m\u001b[43mp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mopen_kwargs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mp\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mpaths\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 1078\u001b[0m closers \u001b[38;5;241m=\u001b[39m [getattr_(ds, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_close\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mfor\u001b[39;00m ds \u001b[38;5;129;01min\u001b[39;00m datasets]\n\u001b[1;32m 1079\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m preprocess \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n","File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.11/site-packages/xarray/backends/api.py:1077\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1074\u001b[0m open_ \u001b[38;5;241m=\u001b[39m open_dataset\n\u001b[1;32m 1075\u001b[0m getattr_ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m\n\u001b[0;32m-> 1077\u001b[0m datasets \u001b[38;5;241m=\u001b[39m [\u001b[43mopen_\u001b[49m\u001b[43m(\u001b[49m\u001b[43mp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mopen_kwargs\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m p \u001b[38;5;129;01min\u001b[39;00m paths]\n\u001b[1;32m 1078\u001b[0m closers \u001b[38;5;241m=\u001b[39m [getattr_(ds, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_close\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mfor\u001b[39;00m ds \u001b[38;5;129;01min\u001b[39;00m datasets]\n\u001b[1;32m 1079\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m preprocess \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n","File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.11/site-packages/xarray/backends/api.py:588\u001b[0m, in \u001b[0;36mopen_dataset\u001b[0;34m(filename_or_obj, engine, chunks, cache, decode_cf, mask_and_scale, decode_times, decode_timedelta, use_cftime, concat_characters, decode_coords, drop_variables, inline_array, chunked_array_type, from_array_kwargs, backend_kwargs, **kwargs)\u001b[0m\n\u001b[1;32m 576\u001b[0m decoders \u001b[38;5;241m=\u001b[39m _resolve_decoders_kwargs(\n\u001b[1;32m 577\u001b[0m decode_cf,\n\u001b[1;32m 578\u001b[0m open_backend_dataset_parameters\u001b[38;5;241m=\u001b[39mbackend\u001b[38;5;241m.\u001b[39mopen_dataset_parameters,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 584\u001b[0m decode_coords\u001b[38;5;241m=\u001b[39mdecode_coords,\n\u001b[1;32m 585\u001b[0m )\n\u001b[1;32m 587\u001b[0m overwrite_encoded_chunks \u001b[38;5;241m=\u001b[39m kwargs\u001b[38;5;241m.\u001b[39mpop(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124moverwrite_encoded_chunks\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m)\n\u001b[0;32m--> 588\u001b[0m backend_ds \u001b[38;5;241m=\u001b[39m \u001b[43mbackend\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen_dataset\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 589\u001b[0m \u001b[43m \u001b[49m\u001b[43mfilename_or_obj\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 590\u001b[0m \u001b[43m \u001b[49m\u001b[43mdrop_variables\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdrop_variables\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 591\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mdecoders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 592\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 593\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 594\u001b[0m ds \u001b[38;5;241m=\u001b[39m _dataset_from_backend_dataset(\n\u001b[1;32m 595\u001b[0m backend_ds,\n\u001b[1;32m 596\u001b[0m filename_or_obj,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 606\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs,\n\u001b[1;32m 607\u001b[0m )\n\u001b[1;32m 608\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ds\n","File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.11/site-packages/rioxarray/xarray_plugin.py:58\u001b[0m, in \u001b[0;36mRasterioBackend.open_dataset\u001b[0;34m(self, filename_or_obj, drop_variables, parse_coordinates, lock, masked, mask_and_scale, variable, group, default_name, decode_coords, decode_times, decode_timedelta, band_as_variable, open_kwargs)\u001b[0m\n\u001b[1;32m 56\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m open_kwargs \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 57\u001b[0m open_kwargs \u001b[38;5;241m=\u001b[39m {}\n\u001b[0;32m---> 58\u001b[0m rds \u001b[38;5;241m=\u001b[39m \u001b[43m_io\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen_rasterio\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 59\u001b[0m \u001b[43m \u001b[49m\u001b[43mfilename_or_obj\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 60\u001b[0m \u001b[43m \u001b[49m\u001b[43mparse_coordinates\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparse_coordinates\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 61\u001b[0m \u001b[43m \u001b[49m\u001b[43mcache\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 62\u001b[0m \u001b[43m \u001b[49m\u001b[43mlock\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlock\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 63\u001b[0m \u001b[43m \u001b[49m\u001b[43mmasked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmasked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 64\u001b[0m \u001b[43m \u001b[49m\u001b[43mmask_and_scale\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmask_and_scale\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 65\u001b[0m \u001b[43m \u001b[49m\u001b[43mvariable\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mvariable\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 66\u001b[0m \u001b[43m \u001b[49m\u001b[43mgroup\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgroup\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 67\u001b[0m \u001b[43m \u001b[49m\u001b[43mdefault_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdefault_name\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 68\u001b[0m \u001b[43m \u001b[49m\u001b[43mdecode_times\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdecode_times\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 69\u001b[0m \u001b[43m \u001b[49m\u001b[43mdecode_timedelta\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdecode_timedelta\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 70\u001b[0m \u001b[43m \u001b[49m\u001b[43mband_as_variable\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mband_as_variable\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 71\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mopen_kwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 72\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 73\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(rds, xarray\u001b[38;5;241m.\u001b[39mDataArray):\n\u001b[1;32m 74\u001b[0m dataset \u001b[38;5;241m=\u001b[39m rds\u001b[38;5;241m.\u001b[39mto_dataset()\n","File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.11/site-packages/rioxarray/_io.py:1128\u001b[0m, in \u001b[0;36mopen_rasterio\u001b[0;34m(filename, parse_coordinates, chunks, cache, lock, masked, mask_and_scale, variable, group, default_name, decode_times, decode_timedelta, band_as_variable, **open_kwargs)\u001b[0m\n\u001b[1;32m 1126\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1127\u001b[0m manager \u001b[38;5;241m=\u001b[39m URIManager(file_opener, filename, mode\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m\"\u001b[39m, kwargs\u001b[38;5;241m=\u001b[39mopen_kwargs)\n\u001b[0;32m-> 1128\u001b[0m riods \u001b[38;5;241m=\u001b[39m \u001b[43mmanager\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43macquire\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1129\u001b[0m captured_warnings \u001b[38;5;241m=\u001b[39m rio_warnings\u001b[38;5;241m.\u001b[39mcopy()\n\u001b[1;32m 1131\u001b[0m \u001b[38;5;66;03m# raise the NotGeoreferencedWarning if applicable\u001b[39;00m\n","File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.11/site-packages/rioxarray/_io.py:263\u001b[0m, in \u001b[0;36mURIManager.acquire\u001b[0;34m(self, needs_lock)\u001b[0m\n\u001b[1;32m 259\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_local\u001b[38;5;241m.\u001b[39mthread_manager \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 260\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_local\u001b[38;5;241m.\u001b[39mthread_manager \u001b[38;5;241m=\u001b[39m ThreadURIManager(\n\u001b[1;32m 261\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_opener, \u001b[38;5;241m*\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_args, mode\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_mode, kwargs\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_kwargs\n\u001b[1;32m 262\u001b[0m )\n\u001b[0;32m--> 263\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_local\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mthread_manager\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfile_handle\u001b[49m\n","File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.11/site-packages/rioxarray/_io.py:219\u001b[0m, in \u001b[0;36mThreadURIManager.file_handle\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 217\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_file_handle \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 218\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_file_handle\n\u001b[0;32m--> 219\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_file_handle \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_opener\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_args\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_mode\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 220\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_file_handle\n","File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.11/site-packages/rasterio/env.py:451\u001b[0m, in \u001b[0;36mensure_env_with_credentials..wrapper\u001b[0;34m(*args, **kwds)\u001b[0m\n\u001b[1;32m 448\u001b[0m session \u001b[38;5;241m=\u001b[39m DummySession()\n\u001b[1;32m 450\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m env_ctor(session\u001b[38;5;241m=\u001b[39msession):\n\u001b[0;32m--> 451\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n","File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.11/site-packages/rasterio/__init__.py:242\u001b[0m, in \u001b[0;36mopen\u001b[0;34m(fp, mode, driver, width, height, count, crs, transform, dtype, nodata, sharing, **kwargs)\u001b[0m\n\u001b[1;32m 240\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m mode \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(fp, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mread\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[1;32m 241\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m have_vsi_plugin:\n\u001b[0;32m--> 242\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mFilePath\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfp\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdriver\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdriver\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msharing\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msharing\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 243\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 244\u001b[0m memfile \u001b[38;5;241m=\u001b[39m MemoryFile(fp\u001b[38;5;241m.\u001b[39mread())\n","File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.11/site-packages/rasterio/env.py:398\u001b[0m, in \u001b[0;36mensure_env..wrapper\u001b[0;34m(*args, **kwds)\u001b[0m\n\u001b[1;32m 395\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(f)\n\u001b[1;32m 396\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapper\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwds):\n\u001b[1;32m 397\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m local\u001b[38;5;241m.\u001b[39m_env:\n\u001b[0;32m--> 398\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 399\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 400\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m Env\u001b[38;5;241m.\u001b[39mfrom_defaults():\n","File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.11/site-packages/rasterio/io.py:236\u001b[0m, in \u001b[0;36m_FilePath.open\u001b[0;34m(self, driver, sharing, **kwargs)\u001b[0m\n\u001b[1;32m 233\u001b[0m \u001b[38;5;66;03m# Assume we were given a non-empty file-like object\u001b[39;00m\n\u001b[1;32m 234\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mVSI path: \u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(mempath\u001b[38;5;241m.\u001b[39mpath))\n\u001b[0;32m--> 236\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mDatasetReader\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmempath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdriver\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdriver\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msharing\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msharing\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n","File \u001b[0;32mrasterio/_base.pyx:312\u001b[0m, in \u001b[0;36mrasterio._base.DatasetBase.__init__\u001b[0;34m()\u001b[0m\n","\u001b[0;31mRasterioIOError\u001b[0m: '/vsipythonfilelike/e7d572c7-7383-4b3d-88be-c88b34e9ff24/e7d572c7-7383-4b3d-88be-c88b34e9ff24' not recognized as being in a supported file format."],"ename":"RasterioIOError","evalue":"'/vsipythonfilelike/e7d572c7-7383-4b3d-88be-c88b34e9ff24/e7d572c7-7383-4b3d-88be-c88b34e9ff24' not recognized as being in a supported file format.","output_type":"error"}],"execution_count":5},{"id":"1d208b07-e4cf-4eb7-bb40-7a3da46db3e4","cell_type":"markdown","source":"We notice that the access occurs quickly, but xarray is unable to recognize the legacy file format. HDF files are remarkably hard to open. You must download the files and open using pyhdf to open them using code like this: \\\n`from pyhdf.SD import SD,SDC` \\\n`mod07_l2 = SD(MODfile, SDC.READ)`","metadata":{"trusted":true}},{"id":"ec910c79-4b11-43d9-9dbd-7c1d5113ebd3","cell_type":"markdown","source":"We do have another option to convert hdf to nc4 files during download so that we can open the files in Xarray.","metadata":{"trusted":true}},{"id":"05800373-0640-44e2-9f7b-09c39ce03059","cell_type":"code","source":"# We are going to retrieve the html endpoint link for one granule\ngranules[0]._filter_related_links(\"USE SERVICE API\")","metadata":{"tags":[],"trusted":true},"outputs":[{"execution_count":23,"output_type":"execute_result","data":{"text/plain":"['https://ladsweb.modaps.eosdis.nasa.gov/opendap/RemoteResources/laads/allData/61/MOD07_L2/2020/001/MOD07_L2.A2020001.0015.061.2020002183420.hdf.html']"},"metadata":{}}],"execution_count":23},{"id":"82568336-a8be-4fa2-9135-c5bebb4148c2","cell_type":"code","source":"netcdf_list = [g._filter_related_links(\"USE SERVICE API\")[0].replace(\".html\", \".nc4\") for g in granules]\nnetcdf_list[0]","metadata":{"tags":[],"trusted":true},"outputs":[{"execution_count":24,"output_type":"execute_result","data":{"text/plain":"'https://ladsweb.modaps.eosdis.nasa.gov/opendap/RemoteResources/laads/allData/61/MOD07_L2/2020/001/MOD07_L2.A2020001.0015.061.2020002183420.hdf.nc4'"},"metadata":{}}],"execution_count":24},{"id":"5116ef2f-e27f-49a2-9e3f-07f70337226f","cell_type":"code","source":"# This is going to be slow as we are asking Opendap to format HDF into NetCDF4 so we only processing 3 granules\n# and Opendap is very prone to failures due concurrent connections, not ideal.\n# Convert the list from HDF to netcdf4, then download.\nfile_handlers = earthaccess.download(netcdf_list[0:3], local_path=\"test_data\", threads=4)","metadata":{"tags":[],"trusted":true},"outputs":[{"output_type":"display_data","data":{"text/plain":"QUEUEING TASKS | : 0%| | 0/3 [00:00 3\u001b[0m dir_list \u001b[38;5;241m=\u001b[39m \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlistdir\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28mprint\u001b[39m(dir_list)\n","\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'test_data'"],"ename":"FileNotFoundError","evalue":"[Errno 2] No such file or directory: 'test_data'","output_type":"error"}],"execution_count":26},{"id":"9ec69a26-cde6-4d9f-8d7a-1092b548910a","cell_type":"code","source":"cd test_data","metadata":{"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"id":"207cc666-1583-4040-98d6-ae8dd041ddef","cell_type":"code","source":"# Open a file into xarray for analysis\nds = xr.open_dataset(dir_list[0])\nds","metadata":{"tags":[],"trusted":true},"outputs":[{"execution_count":14,"output_type":"execute_result","data":{"text/plain":" Size: 146MB\nDimensions: (Band_Number: 12, Pressure_Level: 20,\n Cell_Along_Swath: 406,\n Cell_Across_Swath: 270,\n Output_Parameter: 10,\n Water_Vapor_QA_Bytes: 5)\nCoordinates:\n * Band_Number (Band_Number) int32 48B 24 25 ... 35 36\n * Pressure_Level (Pressure_Level) float32 80B 5.0 ... 1...\n Latitude (Cell_Along_Swath, Cell_Across_Swath) float32 438kB ...\n Longitude (Cell_Along_Swath, Cell_Across_Swath) float32 438kB ...\n * Output_Parameter (Output_Parameter) int32 40B 0 1 ... 8 9\n * Water_Vapor_QA_Bytes (Water_Vapor_QA_Bytes) int32 20B 0 ... 4\nDimensions without coordinates: Cell_Along_Swath, Cell_Across_Swath\nData variables: (12/29)\n Pressure_Levels (Pressure_Level) int16 40B ...\n Scan_Start_Time (Cell_Along_Swath, Cell_Across_Swath) datetime64[ns] 877kB ...\n Solar_Zenith (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n Solar_Azimuth (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n Sensor_Zenith (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n Sensor_Azimuth (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n ... ...\n Water_Vapor (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n Water_Vapor_Direct (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n Water_Vapor_Low (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n Water_Vapor_High (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n Quality_Assurance (Cell_Along_Swath, Cell_Across_Swath, Output_Parameter) float64 9MB ...\n Quality_Assurance_Infrared (Cell_Along_Swath, Cell_Across_Swath, Water_Vapor_QA_Bytes) float64 4MB ...\nAttributes:\n HDFEOSVersion: HDFEOS_V2.19\n ScaleFactor_AddOffset_Application: Value=scale_factor*(stored integer - ...\n Pressure_Levels: 5, 10, 20, 30, 50, 70, 100, 150, 200,...\n title: MODIS Level 2 Atmospheric Profiles ...\n identifier_product_doi: 10.5067/MODIS/MOD07_L2.061\n identifier_product_doi_authority: http://dx.doi.org\n history: $Id: MOD07.V2.CDL,v 1.1 2005/12/14 16...\n history_json: [{\"$schema\":\"https:\\/\\/harmony.earthd...","text/html":"
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
<xarray.Dataset> Size: 146MB\nDimensions:                            (Band_Number: 12, Pressure_Level: 20,\n                                        Cell_Along_Swath: 406,\n                                        Cell_Across_Swath: 270,\n                                        Output_Parameter: 10,\n                                        Water_Vapor_QA_Bytes: 5)\nCoordinates:\n  * Band_Number                        (Band_Number) int32 48B 24 25 ... 35 36\n  * Pressure_Level                     (Pressure_Level) float32 80B 5.0 ... 1...\n    Latitude                           (Cell_Along_Swath, Cell_Across_Swath) float32 438kB ...\n    Longitude                          (Cell_Along_Swath, Cell_Across_Swath) float32 438kB ...\n  * Output_Parameter                   (Output_Parameter) int32 40B 0 1 ... 8 9\n  * Water_Vapor_QA_Bytes               (Water_Vapor_QA_Bytes) int32 20B 0 ... 4\nDimensions without coordinates: Cell_Along_Swath, Cell_Across_Swath\nData variables: (12/29)\n    Pressure_Levels                    (Pressure_Level) int16 40B ...\n    Scan_Start_Time                    (Cell_Along_Swath, Cell_Across_Swath) datetime64[ns] 877kB ...\n    Solar_Zenith                       (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n    Solar_Azimuth                      (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n    Sensor_Zenith                      (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n    Sensor_Azimuth                     (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n    ...                                 ...\n    Water_Vapor                        (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n    Water_Vapor_Direct                 (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n    Water_Vapor_Low                    (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n    Water_Vapor_High                   (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n    Quality_Assurance                  (Cell_Along_Swath, Cell_Across_Swath, Output_Parameter) float64 9MB ...\n    Quality_Assurance_Infrared         (Cell_Along_Swath, Cell_Across_Swath, Water_Vapor_QA_Bytes) float64 4MB ...\nAttributes:\n    HDFEOSVersion:                      HDFEOS_V2.19\n    ScaleFactor_AddOffset_Application:  Value=scale_factor*(stored integer - ...\n    Pressure_Levels:                    5, 10, 20, 30, 50, 70, 100, 150, 200,...\n    title:                              MODIS Level 2 Atmospheric Profiles   ...\n    identifier_product_doi:             10.5067/MODIS/MOD07_L2.061\n    identifier_product_doi_authority:   http://dx.doi.org\n    history:                            $Id: MOD07.V2.CDL,v 1.1 2005/12/14 16...\n    history_json:                       [{"$schema":"https:\\/\\/harmony.earthd...
"},"metadata":{}}],"execution_count":14},{"id":"6fc7f36c-b9b9-442e-a9eb-2154cd051534","cell_type":"markdown","source":"Now we can remove the test data files and the test_data:\n1) in file browser on the left, navigate to 'test_data' folder\n2) delete downloaded files\n3) navigate one folder up\n4) delete the 'test_data' folder","metadata":{"trusted":true}},{"id":"7cb5dacc-e93d-4d13-b760-e0bdfb944bf4","cell_type":"markdown","source":"## Summary\n\nCongratulations! You’ve completed the tutorial. In this tutorial you have gained the skills to:\n\n- Transfrom Coordinate Reference Systems, \n\n- Open data into Pandas, GeoPandas and Xarray DataFrames/Arrays,\n\n- Use Shapely geometries to define an area of interest and subset data,\n\n- Learned to use icepyx and earthaccess for streamlining data access, \n\n- Search and access optimized and non-optimized cloud data, non-cloud-hosted data ","metadata":{"trusted":true}},{"id":"6ac6962a-9f21-418b-adfc-f8af64d127f1","cell_type":"markdown","source":"## References\n\nLivingstone, S.J., Li, Y., Rutishauser, A. et al. Subglacial lakes and their changing role in a warming climate. Nat Rev Earth Environ 3, 106–124 (2022). doi:[10.1038/s43017-021-00246-9](https://doi.org/10.1038/s43017-021-00246-9)\n\nSmith, B., Fricker, H. A., Holschuh, N., Gardner, A. S., Adusumilli, S., Brunt, K. M., et al. (2019). Land ice height-retrieval algorithm for NASA’s ICESat-2 photon-counting laser altimeter. Remote Sensing of Environment, 233, 111352. doi:[10.1016/j.rse.2019.111352](https://doi.org/10.1016/j.rse.2019.111352)\n\nSmith, B., T. Sutterley, S. Dickinson, B. P. Jelley, D. Felikson, T. A. Neumann, H. A. Fricker, A. Gardner, L. Padman, T. Markus, N. Kurtz, S. Bhardwaj, D. Hancock, and J. Lee. (2022). ATLAS/ICESat-2 L3B Gridded Antarctic and Arctic Land Ice Height Change, Version 2 [Data Set]. Boulder, Colorado USA. NASA National Snow and Ice Data Center Distributed Active Archive Center. [https://doi.org/10.5067/ATLAS/ATL15.002](https://doi.org/10.5067/ATLAS/ATL15.002). Date Accessed 2023-03-16.\n\nSmith, B., T. Sutterley, S. Dickinson, B. P. Jelley, D. Felikson, T. A. Neumann, H. A. Fricker, A. Gardner, L. Padman, T. Markus, N. Kurtz, S. Bhardwaj, D. Hancock, and J. Lee. “ATL15 Data Dictionary (V01).” National Snow and Ice Data Center (NSIDC), 2021-11-29. [https://nsidc.org/data/documentation/atl15-data-dictionary-v01](https://nsidc.org/data/documentation/atl15-data-dictionary-v01). Date Accessed 2023-03-16.","metadata":{"trusted":true}}]} \ No newline at end of file +{ + "cells": [ + { + "cell_type": "markdown", + "id": "927cf40c-fe04-439b-a065-07daa155b522", + "metadata": {}, + "source": [ + "# Using ICESat-2 ATL15 (Gridded Arctic Land Ice Height) to investigate ice-surface height anomalies\n", + "\n", + "### Written by \n", + "- Wilson Sauthoff (https://wsauthoff.github.io)\n", + "- Luis Lopez (https://betolink.dev/)\n", + "- Jessica Scheick (https://eos.unh.edu/person/jessica-scheick)\n", + "- Tasha Snow (https://tsnow03.github.io)\n", + "\n", + "### Key learning outcomes:\n", + "- How to gather data from disparate sources.\n", + "- What is a Coordinate Reference System (CRS) and why it matters.\n", + "- How to use geometries including Points and Polygons to define an area of interest and subset data. \n", + "- The basics of how the icepyx library simplifies obtaining and interacting with ICESat-2 data. \n", + "- How Xarray can simplify the import of multi-dimensional data.\n", + "- Open, plot, and explore gridded raster data." + ] + }, + { + "cell_type": "markdown", + "id": "7aa3fc55-9a2e-458e-a0a9-3354be7420a5", + "metadata": { + "tags": [] + }, + "source": [ + "## Computing environment" + ] + }, + { + "cell_type": "markdown", + "id": "e452d675-7c0a-4081-8e85-300a53997e2c", + "metadata": {}, + "source": [ + "We will set up our computing environment with library imports and utility functions\n", + "\n", + "Tip: If you need to import a library that is not pre-installed, use `%pip install ` alone within a Jupyter notebook cell to install it for this instance of CryoCloud (the pip installation will not presist between logins. All of the libraries we intend to use are pre-installed so we can skip this step. " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "0e226454-c730-4656-ae88-19297a8a855a", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: openpyxl in /srv/conda/envs/notebook/lib/python3.11/site-packages (3.1.5)\n", + "Requirement already satisfied: et-xmlfile in /srv/conda/envs/notebook/lib/python3.11/site-packages (from openpyxl) (1.1.0)\n", + "Note: you may need to restart the kernel to use updated packages.\n", + "Requirement already satisfied: icepyx in /srv/conda/envs/notebook/lib/python3.11/site-packages (1.2.0)\n", + "Requirement already satisfied: backoff in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (2.2.1)\n", + "Requirement already satisfied: dask[dataframe] in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (2024.8.0)\n", + "Requirement already satisfied: datashader in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (0.16.3)\n", + "Requirement already satisfied: earthaccess>=0.5.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (0.10.0)\n", + "Requirement already satisfied: fiona in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (1.9.6)\n", + "Requirement already satisfied: geopandas in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (1.0.1)\n", + "Requirement already satisfied: h5netcdf in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (1.3.0)\n", + "Requirement already satisfied: h5py in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (3.11.0)\n", + "Requirement already satisfied: holoviews in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (1.18.3)\n", + "Requirement already satisfied: hvplot in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (0.10.0)\n", + "Requirement already satisfied: matplotlib in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (3.9.1)\n", + "Requirement already satisfied: numpy in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (1.26.4)\n", + "Requirement already satisfied: requests in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (2.32.3)\n", + "Requirement already satisfied: s3fs in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (2024.6.1)\n", + "Requirement already satisfied: shapely in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (2.0.5)\n", + "Requirement already satisfied: xarray in /srv/conda/envs/notebook/lib/python3.11/site-packages (from icepyx) (2024.7.0)\n", + "Requirement already satisfied: fsspec>=2022.11 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from earthaccess>=0.5.1->icepyx) (2024.6.1)\n", + "Requirement already satisfied: importlib-resources>=6.3.2 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from earthaccess>=0.5.1->icepyx) (6.4.0)\n", + "Requirement already satisfied: multimethod>=1.8 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from earthaccess>=0.5.1->icepyx) (1.12)\n", + "Requirement already satisfied: pqdm>=0.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from earthaccess>=0.5.1->icepyx) (0.2.0)\n", + "Requirement already satisfied: python-cmr>=0.10.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from earthaccess>=0.5.1->icepyx) (0.11.0)\n", + "Requirement already satisfied: tinynetrc<2.0.0,>=1.3.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from earthaccess>=0.5.1->icepyx) (1.3.1)\n", + "Requirement already satisfied: typing_extensions>=4.10.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from earthaccess>=0.5.1->icepyx) (4.12.2)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from requests->icepyx) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from requests->icepyx) (3.7)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from requests->icepyx) (1.26.19)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from requests->icepyx) (2024.7.4)\n", + "Requirement already satisfied: aiobotocore<3.0.0,>=2.5.4 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from s3fs->icepyx) (2.13.2)\n", + "Requirement already satisfied: aiohttp!=4.0.0a0,!=4.0.0a1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from s3fs->icepyx) (3.10.3)\n", + "Requirement already satisfied: click>=8.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from dask[dataframe]->icepyx) (8.1.7)\n", + "Requirement already satisfied: cloudpickle>=1.5.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from dask[dataframe]->icepyx) (3.0.0)\n", + "Requirement already satisfied: packaging>=20.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from dask[dataframe]->icepyx) (24.1)\n", + "Requirement already satisfied: partd>=1.4.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from dask[dataframe]->icepyx) (1.4.2)\n", + "Requirement already satisfied: pyyaml>=5.3.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from dask[dataframe]->icepyx) (6.0.2)\n", + "Requirement already satisfied: toolz>=0.10.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from dask[dataframe]->icepyx) (0.12.1)\n", + "Requirement already satisfied: importlib-metadata>=4.13.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from dask[dataframe]->icepyx) (8.0.0)\n", + "Requirement already satisfied: pandas>=2.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from dask[dataframe]->icepyx) (2.2.2)\n", + "Requirement already satisfied: dask-expr<1.2,>=1.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from dask[dataframe]->icepyx) (1.1.10)\n", + "Requirement already satisfied: colorcet in /srv/conda/envs/notebook/lib/python3.11/site-packages (from datashader->icepyx) (3.1.0)\n", + "Requirement already satisfied: multipledispatch in /srv/conda/envs/notebook/lib/python3.11/site-packages (from datashader->icepyx) (0.6.0)\n", + "Requirement already satisfied: numba in /srv/conda/envs/notebook/lib/python3.11/site-packages (from datashader->icepyx) (0.60.0)\n", + "Requirement already satisfied: param in /srv/conda/envs/notebook/lib/python3.11/site-packages (from datashader->icepyx) (1.13.0)\n", + "Requirement already satisfied: pillow in /srv/conda/envs/notebook/lib/python3.11/site-packages (from datashader->icepyx) (10.2.0)\n", + "Requirement already satisfied: pyct in /srv/conda/envs/notebook/lib/python3.11/site-packages (from datashader->icepyx) (0.5.0)\n", + "Requirement already satisfied: scipy in /srv/conda/envs/notebook/lib/python3.11/site-packages (from datashader->icepyx) (1.14.0)\n", + "Requirement already satisfied: attrs>=19.2.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from fiona->icepyx) (23.2.0)\n", + "Requirement already satisfied: click-plugins>=1.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from fiona->icepyx) (1.1.1)\n", + "Requirement already satisfied: cligj>=0.5 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from fiona->icepyx) (0.7.2)\n", + "Requirement already satisfied: six in /srv/conda/envs/notebook/lib/python3.11/site-packages (from fiona->icepyx) (1.16.0)\n", + "Requirement already satisfied: pyogrio>=0.7.2 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from geopandas->icepyx) (0.9.0)\n", + "Requirement already satisfied: pyproj>=3.3.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from geopandas->icepyx) (3.6.1)\n", + "Requirement already satisfied: pyviz-comms>=0.7.4 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from holoviews->icepyx) (3.0.3)\n", + "Requirement already satisfied: panel>=1.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from holoviews->icepyx) (1.2.3)\n", + "Requirement already satisfied: bokeh>=1.0.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from hvplot->icepyx) (3.2.2)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from matplotlib->icepyx) (1.2.1)\n", + "Requirement already satisfied: cycler>=0.10 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from matplotlib->icepyx) (0.12.1)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from matplotlib->icepyx) (4.53.1)\n", + "Requirement already satisfied: kiwisolver>=1.3.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from matplotlib->icepyx) (1.4.5)\n", + "Requirement already satisfied: pyparsing>=2.3.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from matplotlib->icepyx) (3.1.2)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from matplotlib->icepyx) (2.8.2)\n", + "Requirement already satisfied: botocore<1.34.132,>=1.34.70 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from aiobotocore<3.0.0,>=2.5.4->s3fs->icepyx) (1.34.131)\n", + "Requirement already satisfied: wrapt<2.0.0,>=1.10.10 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from aiobotocore<3.0.0,>=2.5.4->s3fs->icepyx) (1.16.0)\n", + "Requirement already satisfied: aioitertools<1.0.0,>=0.5.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from aiobotocore<3.0.0,>=2.5.4->s3fs->icepyx) (0.11.0)\n", + "Requirement already satisfied: aiohappyeyeballs>=2.3.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->s3fs->icepyx) (2.3.6)\n", + "Requirement already satisfied: aiosignal>=1.1.2 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->s3fs->icepyx) (1.3.1)\n", + "Requirement already satisfied: frozenlist>=1.1.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->s3fs->icepyx) (1.4.1)\n", + "Requirement already satisfied: multidict<7.0,>=4.5 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->s3fs->icepyx) (6.0.5)\n", + "Requirement already satisfied: yarl<2.0,>=1.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->s3fs->icepyx) (1.9.4)\n", + "Requirement already satisfied: Jinja2>=2.9 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from bokeh>=1.0.0->hvplot->icepyx) (3.1.4)\n", + "Requirement already satisfied: tornado>=5.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from bokeh>=1.0.0->hvplot->icepyx) (6.4.1)\n", + "Requirement already satisfied: xyzservices>=2021.09.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from bokeh>=1.0.0->hvplot->icepyx) (2024.6.0)\n", + "Requirement already satisfied: pyarrow>=7.0.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from dask-expr<1.2,>=1.1->dask[dataframe]->icepyx) (17.0.0)\n", + "Requirement already satisfied: zipp>=0.5 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from importlib-metadata>=4.13.0->dask[dataframe]->icepyx) (3.19.2)\n", + "Requirement already satisfied: pytz>=2020.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from pandas>=2.0->dask[dataframe]->icepyx) (2024.1)\n", + "Requirement already satisfied: tzdata>=2022.7 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from pandas>=2.0->dask[dataframe]->icepyx) (2024.1)\n", + "Requirement already satisfied: markdown in /srv/conda/envs/notebook/lib/python3.11/site-packages (from panel>=1.0->holoviews->icepyx) (3.6)\n", + "Requirement already satisfied: markdown-it-py in /srv/conda/envs/notebook/lib/python3.11/site-packages (from panel>=1.0->holoviews->icepyx) (3.0.0)\n", + "Requirement already satisfied: linkify-it-py in /srv/conda/envs/notebook/lib/python3.11/site-packages (from panel>=1.0->holoviews->icepyx) (2.0.3)\n", + "Requirement already satisfied: mdit-py-plugins in /srv/conda/envs/notebook/lib/python3.11/site-packages (from panel>=1.0->holoviews->icepyx) (0.4.1)\n", + "Requirement already satisfied: tqdm>=4.48.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from panel>=1.0->holoviews->icepyx) (4.66.5)\n", + "Requirement already satisfied: bleach in /srv/conda/envs/notebook/lib/python3.11/site-packages (from panel>=1.0->holoviews->icepyx) (6.1.0)\n", + "Requirement already satisfied: locket in /srv/conda/envs/notebook/lib/python3.11/site-packages (from partd>=1.4.0->dask[dataframe]->icepyx) (1.0.0)\n", + "Requirement already satisfied: bounded-pool-executor in /srv/conda/envs/notebook/lib/python3.11/site-packages (from pqdm>=0.1->earthaccess>=0.5.1->icepyx) (0.0.3)\n", + "Requirement already satisfied: llvmlite<0.44,>=0.43.0dev0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from numba->datashader->icepyx) (0.43.0)\n", + "Requirement already satisfied: jmespath<2.0.0,>=0.7.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from botocore<1.34.132,>=1.34.70->aiobotocore<3.0.0,>=2.5.4->s3fs->icepyx) (1.0.1)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from Jinja2>=2.9->bokeh>=1.0.0->hvplot->icepyx) (2.1.5)\n", + "Requirement already satisfied: webencodings in /srv/conda/envs/notebook/lib/python3.11/site-packages (from bleach->panel>=1.0->holoviews->icepyx) (0.5.1)\n", + "Requirement already satisfied: uc-micro-py in /srv/conda/envs/notebook/lib/python3.11/site-packages (from linkify-it-py->panel>=1.0->holoviews->icepyx) (1.0.3)\n", + "Requirement already satisfied: mdurl~=0.1 in /srv/conda/envs/notebook/lib/python3.11/site-packages (from markdown-it-py->panel>=1.0->holoviews->icepyx) (0.1.2)\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# Pip install libraries that are not pre-installed\n", + "%pip install openpyxl # Needed for pandas read_excel\n", + "%pip install icepyx" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "1a2db536-38fa-40b2-b01e-6f2f97881789", + "metadata": { + "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.2'.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.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.3/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.3/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.3/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.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.2.min.js\", \"https://cdn.holoviz.org/panel/1.2.3/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.2'.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.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.3/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.3/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.3/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.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.2.min.js\", \"https://cdn.holoviz.org/panel/1.2.3/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.2'.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.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.3/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.3/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.3/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 = [];\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.2'.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.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.3/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.3/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.3/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 = [];\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": [ + "%matplotlib widget\n", + "\n", + "# Import internal libraries\n", + "import earthaccess\n", + "import cartopy.crs as ccrs\n", + "import cartopy.feature as cfeature\n", + "import geopandas as gpd\n", + "import h5py\n", + "import hvplot.xarray\n", + "import icepyx as ipx\n", + "from IPython.display import Image, display\n", + "import matplotlib.colors as colors\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib.ticker as ticker\n", + "from mpl_toolkits.axes_grid1 import make_axes_locatable\n", + "import numpy as np\n", + "import pandas as pd\n", + "import os\n", + "from pyproj import CRS, Transformer\n", + "import rioxarray\n", + "import s3fs\n", + "import xarray as xr\n", + "\n", + "# define utility function\n", + "def ll2ps(lon, lat):\n", + " \"\"\"\n", + " Transform coordinates from geodetic coordinates (lon, lat)\n", + " to Greenland (epsg:3413) coordinates (x, y)\n", + " x, y = ll2ps(lon, lat)\n", + " Inputs\n", + " * lon, lat in decimal degrees (lon: W is negative; lat: S is negative)\n", + " Outputs\n", + " * x, y in [m]\n", + " \"\"\"\n", + " crs_ll = CRS(\"EPSG:4326\")\n", + " crs_xy = CRS(\"EPSG:3413\")\n", + " ll_to_xy = Transformer.from_crs(crs_ll, crs_xy, always_xy = True)\n", + " x, y = ll_to_xy.transform(lon, lat)\n", + " return x, y" + ] + }, + { + "cell_type": "markdown", + "id": "19ded922-7e2e-42a4-9435-5399d92fb289", + "metadata": {}, + "source": [ + "## Greenland subglacial lakes\n", + "\n", + "There are two classes of subglacial lakes: stable and active. Stable lakes have had a stable volume over the observational record whereas active episodically drain and fill. We can observe active subglacial lakes using ice-surface deformation time series. \n", + "\n", + "In this tutorial, we will focus on Greenland where active subglacial lakes have been inferred from surface height changes. \n", + "\n", + "Northern hemisphere subglacial lakes compiled in a global inventory by Livingstone and others (2020):\n", + "\n", + "![N. hemisphere subglacial lakes](images/Livingstone_2020_Fig3a.png)\n", + "\n", + "We can investigate active subglacial lakes using ice surface height anomalies as the overlying ice deforms when active lakes drain and fill episodically. [These videos](https://svs.gsfc.nasa.gov/4913) from NASA's Science Visualization Studio illustrate how we observe active lakes filling and draining through time. " + ] + }, + { + "cell_type": "markdown", + "id": "0488386a-e802-49bc-b93e-bd5d031eec55", + "metadata": {}, + "source": [ + "### Locating the Greenland subglacial lakes\n", + "Consulting the supplementary data of the [Livingstone and others (2020) inventory](https://www.nature.com/articles/s43017-021-00246-9#Sec16), we can construct a [geopandas geodataframe](https://geopandas.org/en/stable/gallery/create_geopandas_from_pandas.html) to investigate Greenland's subglacial lakes." + ] + }, + { + "cell_type": "markdown", + "id": "37fd201d-2c1a-492f-ab82-4582787f8236", + "metadata": {}, + "source": [ + "## Opening non-cloud-hosted data uploaded to your CryoCloud Jupyter hub" + ] + }, + { + "cell_type": "markdown", + "id": "c36750e1-eb53-426b-bc86-d09d9cf0c3cb", + "metadata": {}, + "source": [ + "If we are working with a dataset that is not cloud hosted or unavailable via a URL, we can upload that dataset to CryoCloud. \n", + "\n", + "First, decide where the uploaded data will live on your CryoCloud hub. It could be a data directory folder that you create in your CryoCloud's base directory or put the data into your working directory (whichever file management technique you prefer). \n", + "\n", + "Second, download the paper's supplementary data by [clicking here](https://static-content.springer.com/esm/art%3A10.1038%2Fs43017-021-00246-9/MediaObjects/43017_2021_246_MOESM1_ESM.xlsx). \n", + "\n", + "Third, upload the supplementary data spreadsheet into your new data directory folder or your working directory. The supplementary data spreadsheet (.xlsx) is already uploaded to our working directory. " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "7a5d4ad8-cef2-4d6e-bc88-2ee1d3673c8e", + "metadata": { + "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", + "
Name / LocationLat. oNLon. oELake TypeReferences
0NaN78.000000-48.000000NaNEkholm et al. (1998)
1L278.005022-68.393971StablePalmer et al. (2013)
2L177.969500-68.440875StablePalmer et al. (2013)
3Flade Isblink ice cap81.160000-16.580000ActiveWillis et al. (2015)
4Inuppaat Quuat67.611136-48.709000ActiveHowat et al. (2015); Palmer et al. (2015)
\n", + "
" + ], + "text/plain": [ + " Name / Location Lat. oN Lon. oE Lake Type \\\n", + "0 NaN 78.000000 -48.000000 NaN \n", + "1 L2 78.005022 -68.393971 Stable \n", + "2 L1 77.969500 -68.440875 Stable \n", + "3 Flade Isblink ice cap 81.160000 -16.580000 Active \n", + "4 Inuppaat Quuat 67.611136 -48.709000 Active \n", + "\n", + " References \n", + "0 Ekholm et al. (1998) \n", + "1 Palmer et al. (2013) \n", + "2 Palmer et al. (2013) \n", + "3 Willis et al. (2015) \n", + "4 Howat et al. (2015); Palmer et al. (2015) " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Read in spreadsheet using pandas read_excel\n", + "use_cols = ['Name / Location', 'Lat. oN', 'Lon. oE', 'Lake Type', 'References']\n", + "import_rows = np.arange(0,65)\n", + "# You may add a path/to/file if you'd like to try reading spreadsheet from where you saved it in a data directory \n", + "df = pd.read_excel('43017_2021_246_MOESM1_ESM.xlsx', 'Greenland', usecols=use_cols, skiprows = lambda x: x not in import_rows)\n", + "\n", + "# View pandas dataset head (first 5 rows)\n", + "df.head()" + ] + }, + { + "cell_type": "markdown", + "id": "0b979f8c-8bb5-446c-8511-283025ff945d", + "metadata": {}, + "source": [ + "However, since this data has a direct download URL, so we can read the data directly into CryoCloud skipping the download and upload steps, like so: " + ] + }, + { + "cell_type": "markdown", + "id": "fff870cc-3b5e-42df-8ce0-a3c256ad4ffd", + "metadata": {}, + "source": [ + "## Open data directly via URL" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "047bbc78-a049-4055-8002-425d6881b70a", + "metadata": { + "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", + "
Name / LocationLat. oNLon. oELake TypeReferences
0NaN78.000000-48.000000NaNEkholm et al. (1998)
1L278.005022-68.393971StablePalmer et al. (2013)
2L177.969500-68.440875StablePalmer et al. (2013)
3Flade Isblink ice cap81.160000-16.580000ActiveWillis et al. (2015)
4Inuppaat Quuat67.611136-48.709000ActiveHowat et al. (2015); Palmer et al. (2015)
\n", + "
" + ], + "text/plain": [ + " Name / Location Lat. oN Lon. oE Lake Type \\\n", + "0 NaN 78.000000 -48.000000 NaN \n", + "1 L2 78.005022 -68.393971 Stable \n", + "2 L1 77.969500 -68.440875 Stable \n", + "3 Flade Isblink ice cap 81.160000 -16.580000 Active \n", + "4 Inuppaat Quuat 67.611136 -48.709000 Active \n", + "\n", + " References \n", + "0 Ekholm et al. (1998) \n", + "1 Palmer et al. (2013) \n", + "2 Palmer et al. (2013) \n", + "3 Willis et al. (2015) \n", + "4 Howat et al. (2015); Palmer et al. (2015) " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Read in spreadsheet using pandas read_excel\n", + "url = 'https://static-content.springer.com/esm/art%3A10.1038%2Fs43017-021-00246-9/MediaObjects/43017_2021_246_MOESM1_ESM.xlsx'\n", + "use_cols = ['Name / Location', 'Lat. oN', 'Lon. oE', 'Lake Type', 'References']\n", + "import_rows = np.arange(0,65)\n", + "df = pd.read_excel(url, sheet_name='Greenland', usecols=use_cols, skiprows = lambda x: x not in import_rows)\n", + "\n", + "# View pandas dataset head (first 5 rows)\n", + "df.head()" + ] + }, + { + "cell_type": "markdown", + "id": "539d0285-380e-4e16-9979-73f73170e1cd", + "metadata": {}, + "source": [ + "This is looking good, but we can make it even better by storing the data in a GeoPandas GeoDataFrame which offers additional functionality beyond pandas. You can add a geometry column of Shapely objects that make geospatial data processing and visualization easier. Here we have Shapely points:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "0a7195c0-606b-4467-8b2d-1deb94030b04", + "metadata": { + "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", + "
Name / LocationLat. oNLon. oELake TypeReferencesgeometry
0NaN78.000000-48.000000NaNEkholm et al. (1998)POINT (-48 78)
1L278.005022-68.393971StablePalmer et al. (2013)POINT (-68.39397 78.00502)
2L177.969500-68.440875StablePalmer et al. (2013)POINT (-68.44088 77.9695)
3Flade Isblink ice cap81.160000-16.580000ActiveWillis et al. (2015)POINT (-16.58 81.16)
4Inuppaat Quuat67.611136-48.709000ActiveHowat et al. (2015); Palmer et al. (2015)POINT (-48.709 67.61114)
.....................
59Sermeq Kujalleq (Jakobshavn)69.109843-42.055159StableBowling et al. (2019)POINT (-42.05516 69.10984)
60Sermeq Kujalleq (Jakobshavn)69.108047-41.954370StableBowling et al. (2019)POINT (-41.95437 69.10805)
61Isunguata Sermia 167.180000-50.188000ActiveLivingstone et al. (2019)POINT (-50.188 67.18)
62Isunguata Sermia 267.178000-50.149000ActiveLivingstone et al. (2019)POINT (-50.149 67.178)
63Isunguata Sermia 367.180000-50.128000ActiveLivingstone et al. (2019)POINT (-50.128 67.18)
\n", + "

64 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " Name / Location Lat. oN Lon. oE Lake Type \\\n", + "0 NaN 78.000000 -48.000000 NaN \n", + "1 L2 78.005022 -68.393971 Stable \n", + "2 L1 77.969500 -68.440875 Stable \n", + "3 Flade Isblink ice cap 81.160000 -16.580000 Active \n", + "4 Inuppaat Quuat 67.611136 -48.709000 Active \n", + ".. ... ... ... ... \n", + "59 Sermeq Kujalleq (Jakobshavn) 69.109843 -42.055159 Stable \n", + "60 Sermeq Kujalleq (Jakobshavn) 69.108047 -41.954370 Stable \n", + "61 Isunguata Sermia 1 67.180000 -50.188000 Active \n", + "62 Isunguata Sermia 2 67.178000 -50.149000 Active \n", + "63 Isunguata Sermia 3 67.180000 -50.128000 Active \n", + "\n", + " References geometry \n", + "0 Ekholm et al. (1998) POINT (-48 78) \n", + "1 Palmer et al. (2013) POINT (-68.39397 78.00502) \n", + "2 Palmer et al. (2013) POINT (-68.44088 77.9695) \n", + "3 Willis et al. (2015) POINT (-16.58 81.16) \n", + "4 Howat et al. (2015); Palmer et al. (2015) POINT (-48.709 67.61114) \n", + ".. ... ... \n", + "59 Bowling et al. (2019) POINT (-42.05516 69.10984) \n", + "60 Bowling et al. (2019) POINT (-41.95437 69.10805) \n", + "61 Livingstone et al. (2019) POINT (-50.188 67.18) \n", + "62 Livingstone et al. (2019) POINT (-50.149 67.178) \n", + "63 Livingstone et al. (2019) POINT (-50.128 67.18) \n", + "\n", + "[64 rows x 6 columns]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create GeoPandas GeoDataFrame from Pandas DataFrame\n", + "gdf = gpd.GeoDataFrame(\n", + " df, geometry=gpd.points_from_xy(df['Lon. oE'], df['Lat. oN']))\n", + "\n", + "# Set the Coordinate Reference System (CRS) of the geodataframe\n", + "if gdf.crs is None: \n", + " # set CRS WGS84 in lon, lat\n", + " gdf.set_crs('epsg:4326', inplace=True)\n", + " \n", + "# Display GeoDataFrame\n", + "gdf" + ] + }, + { + "cell_type": "markdown", + "id": "aa5c3f03-ffe6-44fa-9128-b83d7d88af33", + "metadata": {}, + "source": [ + "Let's look at Greenland's active subglacial lake inventory by filtering on the Lake Type column:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "9d1751a6-f1fa-4e66-9bc4-c0fed6dcf6ba", + "metadata": { + "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", + "
Name / LocationLat. oNLon. oELake TypeReferencesgeometry
3Flade Isblink ice cap81.160000-16.580000ActiveWillis et al. (2015)POINT (-16.58 81.16)
4Inuppaat Quuat67.611136-48.709000ActiveHowat et al. (2015); Palmer et al. (2015)POINT (-48.709 67.61114)
5Sioqqap Sermia, [SS1]63.541856-48.450597ActiveBowling et al. (2019)POINT (-48.4506 63.54186)
6Sioqqap Sermia, [SS2]63.260248-48.206633ActiveBowling et al. (2019)POINT (-48.20663 63.26025)
61Isunguata Sermia 167.180000-50.188000ActiveLivingstone et al. (2019)POINT (-50.188 67.18)
62Isunguata Sermia 267.178000-50.149000ActiveLivingstone et al. (2019)POINT (-50.149 67.178)
63Isunguata Sermia 367.180000-50.128000ActiveLivingstone et al. (2019)POINT (-50.128 67.18)
\n", + "
" + ], + "text/plain": [ + " Name / Location Lat. oN Lon. oE Lake Type \\\n", + "3 Flade Isblink ice cap 81.160000 -16.580000 Active \n", + "4 Inuppaat Quuat 67.611136 -48.709000 Active \n", + "5 Sioqqap Sermia, [SS1] 63.541856 -48.450597 Active \n", + "6 Sioqqap Sermia, [SS2] 63.260248 -48.206633 Active \n", + "61 Isunguata Sermia 1 67.180000 -50.188000 Active \n", + "62 Isunguata Sermia 2 67.178000 -50.149000 Active \n", + "63 Isunguata Sermia 3 67.180000 -50.128000 Active \n", + "\n", + " References geometry \n", + "3 Willis et al. (2015) POINT (-16.58 81.16) \n", + "4 Howat et al. (2015); Palmer et al. (2015) POINT (-48.709 67.61114) \n", + "5 Bowling et al. (2019) POINT (-48.4506 63.54186) \n", + "6 Bowling et al. (2019) POINT (-48.20663 63.26025) \n", + "61 Livingstone et al. (2019) POINT (-50.188 67.18) \n", + "62 Livingstone et al. (2019) POINT (-50.149 67.178) \n", + "63 Livingstone et al. (2019) POINT (-50.128 67.18) " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Let's look at Greenland's active subglacial lake inventory\n", + "gdf[gdf['Lake Type'] == 'Active']" + ] + }, + { + "cell_type": "markdown", + "id": "2f8b6465-dfff-4c1a-bf4c-44adee10cda1", + "metadata": {}, + "source": [ + "Now let's plot the lake locations to ensure our data read-in went as expected. But first, we need to make sure all projections for the data we want to show are the same. " + ] + }, + { + "cell_type": "markdown", + "id": "14dc8db1-be7f-4933-8b1f-64cbc6af90bc", + "metadata": { + "tags": [] + }, + "source": [ + "## What is a CRS/EPSG?\n", + "\n", + "- A Coordinate Reference System (CRS) tells you how the Earth's 3-D surface is projected onto a 2-D plane map. Below are examples of various projections of continguous USA from an excellent [Data Carpentry tutorial on the CRS topic](https://datacarpentry.org/organization-geospatial/03-crs/): \n", + "\n", + "![Coordinate Reference System comparison](images/DataCarpentryCRS.jpg)\n", + "\n", + "- A particular CRS can be referenced by its EPSG code (e.g., epsg:4326 as we used in the GeoPandas GeoDataFrame example above). The EPSG is a structured dataset of CRS and Coordinate Transformations. It was originally compiled by the now defunct European Petroleum Survey Group (EPSG) but continues to be one common way of representing a specific CRS.\n", + "- Most map projections make land areas look proportionally larger or smaller than they actually are. Below is intuitive visualization of this from another excellent site of tutorials on geospatial topics called [Earth Lab](https://www.earthdatascience.org/courses/earth-analytics/spatial-data-r/intro-to-coordinate-reference-systems/): \n", + "\n", + "![How projections distort a human head](images/EarthLabProjectionDistortion.jpg)\n", + "\n", + "- Because of this distortion, we select a projection that is best suited for the geographic region we are studying to minimize distortions.\n", + "- Previously we used epsg:4326, which is a geographic coordinate system that makes use of the World Geodetic System 1984 (WGS84) ellipsoid as a datum reference elevation. A datum consists in an ellipsoid relative to which the latitude and longitude of points are defined, with a geoid defining the surface at zero height (visual from [ESA's navipedia](https://gssc.esa.int/navipedia/index.php/Regional_Datums_and_Map_Projections)):\n", + "\n", + "![What is a datum](images/ESANavipediaDatum.png)\n", + "\n", + "- A geographic coordinate system is more than just the ellipsoid. It adds a coordinate system and units of measurement. epsg:4326 uses the very familiar longitude and latitude and degrees as the coordinate system and units. We selected epsg:4326 because longitude and latitude were the coordinates in the dataset.\n", + "- There are numerous formats that are used to document a CRS. Three common formats include: proj.4, EPSG, and Well-known Text (WKT) formats.\n", + "- Useful websites to look up CRS strings are [spatialreference.org](Spatialreference.org) and [espg.io](https://epsg.io/). You can use the search on these sites to find an EPSG code.\n", + "- Often you have data in one format or projection (CRS) and you need to transform it to a more regionally accurate CRS or match it to another datasets' CRS to plot them together. Let’s transform our geopandas data to the NSIDC Sea Ice North Polar Stereographic projection (epsg:3413) easily visualize our lakes on a projection that minimizes distortion of our area of interest (Greenland). " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "fa8fb714-b51f-44e6-b707-9e6ebba9c662", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "e6b5e1dfdaa84f5f9dfced6c28dcdb40", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "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", + "text/html": [ + "\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " + ], + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Create a figure with two subplots: one with Plate Carree projection (EPSG:4326), one with Stereographic projection (EPSG:3413)\n", + "fig, axs = plt.subplots(1, 2, figsize=(6, 3), subplot_kw={'projection': ccrs.PlateCarree()})\n", + "\n", + "# Define Greenland's extent (rough bounding box around Greenland)\n", + "greenland_extent = [-75, -10, 55, 85] # [west, east, south, north]\n", + "\n", + "# Plot Greenland in EPSG:4326\n", + "axs[0].set_extent(greenland_extent)\n", + "axs[0].add_feature(cfeature.LAND)\n", + "axs[0].add_feature(cfeature.COASTLINE)\n", + "axs[0].add_feature(cfeature.BORDERS)\n", + "axs[0].set_title(\"EPSG:4326 (WGS84) Projection\")\n", + "\n", + "# Now plot Greenland in EPSG:3413 (Polar Stereographic)\n", + "axs[1] = plt.subplot(122, projection=ccrs.Stereographic(central_latitude=90, central_longitude=-45))\n", + "axs[1].set_extent(greenland_extent, crs=ccrs.PlateCarree())\n", + "axs[1].add_feature(cfeature.LAND)\n", + "axs[1].add_feature(cfeature.COASTLINE)\n", + "axs[1].add_feature(cfeature.BORDERS)\n", + "axs[1].set_title(\"EPSG:3413 (Polar Stereographic Projection)\")\n", + "\n", + "plt.suptitle('Greenland Boundaries in Two Projections')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "38bccee8-6a13-40dd-b59e-ad96602b54d7", + "metadata": {}, + "source": [ + "## Using the Shapely Polygon geometry to create a search radius and subset data\n", + "- The Shapely points used before are useful to tell us the centroid of the lakes.\n", + "- However, we'd like to be able to create a search radius around that point to search for and subset data. \n", + "- Some datasets are massive, so using Shapely polygons as a search radius around your region of interest will speed up your computation." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "24e94b90-a04d-4d8a-9a8b-fb499f9bbc53", + "metadata": { + "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", + "
Name / LocationLat. oNLon. oELake TypeReferencesgeometry
3Flade Isblink ice cap81.160000-16.580000ActiveWillis et al. (2015)POLYGON ((-16.06723 81.1139, -16.09787 81.1062...
4Inuppaat Quuat67.611136-48.709000ActiveHowat et al. (2015); Palmer et al. (2015)POLYGON ((-48.4764 67.61446, -48.47613 67.6057...
5Sioqqap Sermia, [SS1]63.541856-48.450597ActiveBowling et al. (2019)POLYGON ((-48.25472 63.54482, -48.25457 63.536...
6Sioqqap Sermia, [SS2]63.260248-48.206633ActiveBowling et al. (2019)POLYGON ((-48.01287 63.26285, -48.01281 63.254...
61Isunguata Sermia 167.180000-50.188000ActiveLivingstone et al. (2019)POLYGON ((-49.96016 67.18562, -49.95932 67.176...
62Isunguata Sermia 267.178000-50.149000ActiveLivingstone et al. (2019)POLYGON ((-49.92117 67.18356, -49.92035 67.174...
63Isunguata Sermia 367.180000-50.128000ActiveLivingstone et al. (2019)POLYGON ((-49.90015 67.18552, -49.89933 67.176...
\n", + "
" + ], + "text/plain": [ + " Name / Location Lat. oN Lon. oE Lake Type \\\n", + "3 Flade Isblink ice cap 81.160000 -16.580000 Active \n", + "4 Inuppaat Quuat 67.611136 -48.709000 Active \n", + "5 Sioqqap Sermia, [SS1] 63.541856 -48.450597 Active \n", + "6 Sioqqap Sermia, [SS2] 63.260248 -48.206633 Active \n", + "61 Isunguata Sermia 1 67.180000 -50.188000 Active \n", + "62 Isunguata Sermia 2 67.178000 -50.149000 Active \n", + "63 Isunguata Sermia 3 67.180000 -50.128000 Active \n", + "\n", + " References \\\n", + "3 Willis et al. (2015) \n", + "4 Howat et al. (2015); Palmer et al. (2015) \n", + "5 Bowling et al. (2019) \n", + "6 Bowling et al. (2019) \n", + "61 Livingstone et al. (2019) \n", + "62 Livingstone et al. (2019) \n", + "63 Livingstone et al. (2019) \n", + "\n", + " geometry \n", + "3 POLYGON ((-16.06723 81.1139, -16.09787 81.1062... \n", + "4 POLYGON ((-48.4764 67.61446, -48.47613 67.6057... \n", + "5 POLYGON ((-48.25472 63.54482, -48.25457 63.536... \n", + "6 POLYGON ((-48.01287 63.26285, -48.01281 63.254... \n", + "61 POLYGON ((-49.96016 67.18562, -49.95932 67.176... \n", + "62 POLYGON ((-49.92117 67.18356, -49.92035 67.174... \n", + "63 POLYGON ((-49.90015 67.18552, -49.89933 67.176... " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create GeoSeries of our GeoDataFrame that converts to Arcic polar stereographic projection \n", + "# and makes 10-km radius buffered polygon around each lake point\n", + "gs = gdf.to_crs('3413').buffer(10000)\n", + "\n", + "# Create a copy of the original GeoPandas GeoDataFrame so that we don't alter the original\n", + "gdf_polys = gdf.copy(deep=True)\n", + "\n", + "# Create new GeoDataFrame to store the polygons\n", + "gdf_polys = gpd.GeoDataFrame(gdf, \n", + " # We use the GeoDataFrame (gdf) copy, gdf_polys, and replaced its geometry with the GeoSeries of polygons\n", + " geometry=gs, \n", + " # We must specify the crs, so we use the one used to create the GeoSeries of polygons\n", + " crs='epsg:3413'\n", + " # But then we switch the crs back to good ol' 4623 lon, lat\n", + " ).to_crs('4623')\n", + "\n", + "# Look at active lakes to ensure it worked as expected\n", + "gdf_polys[gdf_polys['Lake Type'] == 'Active']" + ] + }, + { + "cell_type": "markdown", + "id": "e1ac86c8-710f-4c6b-926d-7cac63c69572", + "metadata": {}, + "source": [ + "Now that we know our active lake locations, let’s grab data to study the filling and draining of the lakes. We will use ICESat-2 surface elevations to investigate." + ] + }, + { + "cell_type": "markdown", + "id": "96604dff-c7d7-4117-b859-326545f486bc", + "metadata": {}, + "source": [ + "## What is ICESat-2?\n", + "\n", + "ICESat-2 (Ice, Cloud, and land Elevation Satellite 2), part of NASA's Earth Observing System, is a satellite mission for measuring ice sheet elevation and sea ice thickness, as well as land topography, vegetation characteristics, and clouds. It does so using an altimeter or an altitude meter, which is an instrument used to measure the altitude of an object above a fixed level (the datum we talked about earlier). This is typically achieved by measuring the time it takes for a lidar or radar pulse, released by a satellite-based altimeter, to travel to a surface, reflect, and return to be recorded by an onboard instrument. ICESat-2 uses three pairs of laser pulsers and the detector to count the reflected photons. \n", + "\n", + "ICESat-2 laser configuration (from [Smith and others, 2019](https://doi.org/10.1016/j.rse.2019.111352)): \n", + "\n", + "![ICESat-2 laser configuration](images/Smith_2019_fig1.jpg)" + ] + }, + { + "cell_type": "markdown", + "id": "5f3c610d-4406-49a5-85be-b26c98a32af0", + "metadata": {}, + "source": [ + "## What is ATL14/15?\n", + "ATL15 is one of the various [ICESat-2 data products](https://icesat-2.gsfc.nasa.gov/science/data-products). ATL15 provides various resolutions (1 km, 10 km, 20 km, and 40 km) of gridded raster data of height change at 3-month intervals, allowing for visualization of height-change patterns and calculation of integrated active subglacial lake volume change (Smith and others, 2022).\n", + "\n", + "ATL14 is an accompanying high-resolution (100 m) digital elevation model (DEM) that provides spatially continuous gridded data of ice sheet surface height.\n", + "\n", + "Learn more about the ICESat-2 ATL14/15 Gridded Antarctic and Arctic Land Ice Height Change data product dataset [here](https://doi.org/10.5067/ATLAS/ATL15.002)." + ] + }, + { + "cell_type": "markdown", + "id": "ca2863c3-3967-47a4-8be6-2eee3d6af0ed", + "metadata": {}, + "source": [ + "## Streaming cloud-hosted data from NASA Earth Data Cloud\n", + "We will be working with cloud-hosted data files. This [guide](https://nsidc.org/data/user-resources/help-center/nasa-earthdata-cloud-data-access-guide) explains how to find and access Earthdata cloud-hosted data. [Here](https://nsidc.org/data/earthdata-cloud) is a complete list of earthdata cloud-hosted data products currently available from NSIDC." + ] + }, + { + "cell_type": "markdown", + "id": "9da0209d-f39a-4566-8966-6798631be98d", + "metadata": {}, + "source": [ + "### Using icepyx to simplify searching for ICESat-2 data\n", + "[icepyx](https://icepyx.readthedocs.io/en/latest/) is a community and Python software library that simplifies the process of searching (querying), accessing (via download or in the cloud), and working with (including subsetting, visualizing, and reading in) ICESat-2 data products. A series of [examples](https://github.com/icesat2py/icepyx/tree/main/doc/source/example_notebooks) introduce users to its functionality, and the icepyx community always welcomes new members, feature requests, bug reports, etc.\n", + "\n", + "To search for data spatially, icepyx accepts shapefiles, kml files, and geopackage files, as well as bounding boxes and polygons, as input bounding regions. We have two options for supplying this information: (1) save one of the lakes' geometries as a geopackage or (2) extract the exterior coordinates and supply them directly. You may run either of the next two cells; then we'll use the spatial information to query ICESat-2 data for that region." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "a6ea8f8c-ce47-4090-919f-d30863309495", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# (1) save one of the lakes' geometries as a geopackage\n", + "# Export to geopackage to subset ICESat-2 data\n", + "gdf_polys[gdf_polys['Name / Location'] == 'Flade Isblink ice cap'].to_file(os.getcwd() + '/Flade_Isblink_poly.gpkg')\n", + "spatial_extent = 'Flade_Isblink_poly.gpkg'" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "3f3f1628-0fc1-407c-a8e5-a85cb8735345", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# (2) use the shapely package to supply the polygon coordinates directly as a list\n", + "from shapely.geometry import mapping\n", + "spatial_extent = list(mapping(gdf_polys[gdf_polys['Name / Location'] == 'Flade Isblink ice cap'].geometry.iloc[0])[\"coordinates\"][0])" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "3e15602f-3fc1-40de-9519-a75ae5b3b4b1", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Specifying the necessary icepyx parameters\n", + "short_name = 'ATL15' # The data product we would like to query\n", + "date_range = ['2018-09-15','2023-03-02']" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "1a352b60-b203-47d6-9785-2cfdbcfdeb6b", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Setup the Query object\n", + "region = ipx.Query(short_name, spatial_extent, date_range)" + ] + }, + { + "cell_type": "markdown", + "id": "cb7f484f-f476-4547-ac9b-6637fe880758", + "metadata": { + "tags": [] + }, + "source": [ + "We can visualize our spatial extent on an interactive map with background imagery." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "e852347c-fafd-4db0-b81e-e70e3e98ed98", + "metadata": { + "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.2'.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.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.3/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.3/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.3/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.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.2.min.js\", \"https://cdn.holoviz.org/panel/1.2.3/dist/panel.min.js\", \"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.2'.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.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.3/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.3/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.3/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.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.2.min.js\", \"https://cdn.holoviz.org/panel/1.2.3/dist/panel.min.js\", \"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": { + "text/html": [ + "\n", + "
\n", + "\n", + "\n", + "\n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": {}, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.holoviews_exec.v0+json": "", + "text/html": [ + "
\n", + "
\n", + "
\n", + "" + ], + "text/plain": [ + ":Overlay\n", + " .WMTS.I :WMTS [Longitude,Latitude]\n", + " .Path.I :Path [Longitude,Latitude]" + ] + }, + "execution_count": 13, + "metadata": { + "application/vnd.holoviews_exec.v0+json": { + "id": "p1005" + } + }, + "output_type": "execute_result" + } + ], + "source": [ + "# Visualize area of interest\n", + "region.visualize_spatial_extent()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "b68bdc52-4de8-44fa-8f8e-fcdd89da01bf", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'Number of available granules': 4,\n", + " 'Average size of granules (MB)': 226.04341173171997,\n", + " 'Total size of all granules (MB)': 904.1736469268799}" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Let's find out some information about the available data granuales (files)\n", + "region.avail_granules()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "87dc30f0-dc2e-4dc4-a13b-305944246691", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[['ATL15_GL_0321_40km_004_01.nc',\n", + " 'ATL15_GL_0321_20km_004_01.nc',\n", + " 'ATL15_GL_0321_10km_004_01.nc',\n", + " 'ATL15_GL_0321_01km_004_01.nc'],\n", + " ['s3://nsidc-cumulus-prod-protected/ATLAS/ATL15/004/ATL15_GL_0321_40km_004_01.nc',\n", + " 's3://nsidc-cumulus-prod-protected/ATLAS/ATL15/004/ATL15_GL_0321_20km_004_01.nc',\n", + " 's3://nsidc-cumulus-prod-protected/ATLAS/ATL15/004/ATL15_GL_0321_10km_004_01.nc',\n", + " 's3://nsidc-cumulus-prod-protected/ATLAS/ATL15/004/ATL15_GL_0321_01km_004_01.nc']]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Let's see the granule IDs and cloud access urls\n", + "gran_ids = region.avail_granules(ids=True, cloud=True)\n", + "gran_ids" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "bc3e741b-9f35-4598-accf-827e4eb6b447", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'s3://nsidc-cumulus-prod-protected/ATLAS/ATL15/004/ATL15_GL_0321_01km_004_01.nc'" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Let's grab the s3 URL of the highest resolution available product\n", + "s3url = gran_ids[1][3]\n", + "s3url" + ] + }, + { + "cell_type": "markdown", + "id": "3bd249ae-dbe8-49c9-90e4-b291613659bf", + "metadata": {}, + "source": [ + "You can manually find s3 URL's for cloud-hosted data from [NASA Earth Data](https://www.earthdata.nasa.gov/)\n", + "\n", + "Learn more about finding cloud-hosted data from NASA Earth data cloud [here](https://nsidc.org/data/user-resources/help-center/nasa-earthdata-cloud-data-access-guide)" + ] + }, + { + "cell_type": "markdown", + "id": "3ba938e7-0ac0-4c6f-99f1-854a57ac2779", + "metadata": {}, + "source": [ + "The next step (accessing data in the cloud) requires a NASA Earthdata user account.\n", + "You can register for a free account [here](https://www.earthdata.nasa.gov/eosdis/science-system-description/eosdis-components/earthdata-login).\n", + "We provide two options for reading in your data: (1) by setting up an s3 file system and using Xarray directly; or (2) by using icepyx (which uses Xarray under the hood).\n", + "Currently, the read time is similar with both methods.\n", + "The h5coro library will soon be available to help speed up this process.\n", + "\n", + "The file system method requires you complete a login step.\n", + "icepyx will automatically ask for your credentials when you perform a task that needs them.\n", + "If you do not have them stored as environment variables or in a .netrc file, you will be prompted to enter them." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "b2af9f40-c9a8-48ed-9f81-c93d52d960e6", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# (1) authenticate\n", + "auth = earthaccess.login()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "e16e81f6-9092-4523-8565-34a75d8631f1", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# (1) set up our s3 file system using our credentials\n", + "s3 = earthaccess.get_s3fs_session(daac='NSIDC')" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "7377ae88-8552-4ee8-8595-d15b786b003c", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 2GB\n",
+       "Dimensions:              (x: 1541, y: 2741, time: 21)\n",
+       "Coordinates:\n",
+       "  * x                    (x) float64 12kB -6.7e+05 -6.69e+05 ... 8.7e+05\n",
+       "  * y                    (y) float64 22kB -3.35e+06 -3.349e+06 ... -6.1e+05\n",
+       "  * time                 (time) datetime64[ns] 168B 2019-01-01T06:00:00 ... 2...\n",
+       "Data variables:\n",
+       "    Polar_Stereographic  int8 1B -127\n",
+       "    ice_area             (time, y, x) float32 355MB nan nan nan ... nan nan nan\n",
+       "    delta_h              (time, y, x) float32 355MB nan nan nan ... nan nan nan\n",
+       "    delta_h_sigma        (time, y, x) float32 355MB nan nan nan ... nan nan nan\n",
+       "    data_count           (time, y, x) float32 355MB nan nan nan ... nan nan nan\n",
+       "    misfit_rms           (time, y, x) float32 355MB nan nan nan ... nan nan nan\n",
+       "    misfit_scaled_rms    (time, y, x) float32 355MB nan nan nan ... nan nan nan\n",
+       "Attributes:\n",
+       "    description:  delta_h group includes variables describing height differen...
" + ], + "text/plain": [ + " Size: 2GB\n", + "Dimensions: (x: 1541, y: 2741, time: 21)\n", + "Coordinates:\n", + " * x (x) float64 12kB -6.7e+05 -6.69e+05 ... 8.7e+05\n", + " * y (y) float64 22kB -3.35e+06 -3.349e+06 ... -6.1e+05\n", + " * time (time) datetime64[ns] 168B 2019-01-01T06:00:00 ... 2...\n", + "Data variables:\n", + " Polar_Stereographic int8 1B -127\n", + " ice_area (time, y, x) float32 355MB nan nan nan ... nan nan nan\n", + " delta_h (time, y, x) float32 355MB nan nan nan ... nan nan nan\n", + " delta_h_sigma (time, y, x) float32 355MB nan nan nan ... nan nan nan\n", + " data_count (time, y, x) float32 355MB nan nan nan ... nan nan nan\n", + " misfit_rms (time, y, x) float32 355MB nan nan nan ... nan nan nan\n", + " misfit_scaled_rms (time, y, x) float32 355MB nan nan nan ... nan nan nan\n", + "Attributes:\n", + " description: delta_h group includes variables describing height differen..." + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# (1) Open s3url data file and store in Xarray Dataset\n", + "# This cell takes 10s of secs to load\n", + "with s3.open(s3url,'rb') as f:\n", + " ATL15_dh = xr.open_dataset(f, group='delta_h').load()\n", + "\n", + "# View Xarray Dataset\n", + "ATL15_dh" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "f4e72f9a-c6bc-448c-891a-3b4870c0ecea", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# (2) create a Read object; you'll be asked to authenticate at this step if you haven't already\n", + "reader = ipx.Read(s3url)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "cc752711-13aa-4d0a-b15d-b21a79894b21", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['delta_h/Polar_Stereographic',\n", + " 'delta_h/time',\n", + " 'delta_h/x',\n", + " 'delta_h/y',\n", + " 'dhdt_lag1/dhdt/Bands',\n", + " 'dhdt_lag1/dhdt_sigma/Bands',\n", + " 'dhdt_lag1/ice_area/Bands',\n", + " 'dhdt_lag1/Polar_Stereographic',\n", + " 'dhdt_lag1/time',\n", + " 'dhdt_lag1/x',\n", + " 'dhdt_lag1/y',\n", + " 'dhdt_lag12/dhdt/Bands',\n", + " 'dhdt_lag12/dhdt_sigma/Bands',\n", + " 'dhdt_lag12/ice_area/Bands',\n", + " 'dhdt_lag12/Polar_Stereographic',\n", + " 'dhdt_lag12/time',\n", + " 'dhdt_lag12/x',\n", + " 'dhdt_lag12/y',\n", + " 'dhdt_lag16/dhdt/Bands',\n", + " 'dhdt_lag16/dhdt_sigma/Bands',\n", + " 'dhdt_lag16/ice_area/Bands',\n", + " 'dhdt_lag16/Polar_Stereographic',\n", + " 'dhdt_lag16/time',\n", + " 'dhdt_lag16/x',\n", + " 'dhdt_lag16/y',\n", + " 'dhdt_lag20/dhdt/Bands',\n", + " 'dhdt_lag20/dhdt_sigma/Bands',\n", + " 'dhdt_lag20/ice_area/Bands',\n", + " 'dhdt_lag20/Polar_Stereographic',\n", + " 'dhdt_lag20/time',\n", + " 'dhdt_lag20/x',\n", + " 'dhdt_lag20/y',\n", + " 'dhdt_lag4/dhdt/Bands',\n", + " 'dhdt_lag4/dhdt_sigma/Bands',\n", + " 'dhdt_lag4/ice_area/Bands',\n", + " 'dhdt_lag4/Polar_Stereographic',\n", + " 'dhdt_lag4/time',\n", + " 'dhdt_lag4/x',\n", + " 'dhdt_lag4/y',\n", + " 'dhdt_lag8/dhdt/Bands',\n", + " 'dhdt_lag8/dhdt_sigma/Bands',\n", + " 'dhdt_lag8/ice_area/Bands',\n", + " 'dhdt_lag8/Polar_Stereographic',\n", + " 'dhdt_lag8/time',\n", + " 'dhdt_lag8/x',\n", + " 'dhdt_lag8/y',\n", + " 'orbit_info/bounding_polygon_dim1',\n", + " 'orbit_info/bounding_polygon_lat1',\n", + " 'orbit_info/bounding_polygon_lon1',\n", + " 'quality_assessment/phony_dim_1',\n", + " 'quality_assessment/qa_granule_fail_reason',\n", + " 'quality_assessment/qa_granule_pass_fail',\n", + " 'tile_stats/N_bias',\n", + " 'tile_stats/N_data',\n", + " 'tile_stats/Polar_Stereographic',\n", + " 'tile_stats/RMS_bias',\n", + " 'tile_stats/RMS_d2z0dx2',\n", + " 'tile_stats/RMS_d2zdt2',\n", + " 'tile_stats/RMS_d2zdx2dt',\n", + " 'tile_stats/RMS_data',\n", + " 'tile_stats/sigma_tt',\n", + " 'tile_stats/sigma_xx0',\n", + " 'tile_stats/sigma_xxt',\n", + " 'tile_stats/x',\n", + " 'tile_stats/y']" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# (2) see what variables are available\n", + "reader.vars.avail()" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "52e93f16-b98e-4690-b273-aeeadb5bfdb4", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'Polar_Stereographic': ['delta_h/Polar_Stereographic'],\n", + " 'time': ['delta_h/time'],\n", + " 'x': ['delta_h/x'],\n", + " 'y': ['delta_h/y']}" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# (2) Indicate which variables you'd like to read in.\n", + "# More information on managing ICESat-2 variables is available in the icepyx documentation and examples.\n", + "reader.vars.append(keyword_list=[\"delta_h\"])\n", + "# view the variables that will be loaded into memory in your DataSet\n", + "reader.vars.wanted" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "5475a92f-4b55-4307-acca-1c16f76144c5", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdin", + "output_type": "stream", + "text": [ + "Do you wish to proceed (not recommended) y/[n]? y\n" + ] + } + ], + "source": [ + "# (2) load your data into memory\n", + "# if you are asked if you want to proceed, enter 'y' and press return/enter\n", + "# Depending on your hub settings, the warning letting you know this operation will take a moment may or may not show up\n", + "ATL15_dh = reader.load()" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "e589974d-78ec-4747-a4de-223d17252dfe", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 2GB\n",
+       "Dimensions:              (x: 1541, y: 2741, time: 21)\n",
+       "Coordinates:\n",
+       "  * x                    (x) float64 12kB -6.7e+05 -6.69e+05 ... 8.7e+05\n",
+       "  * y                    (y) float64 22kB -3.35e+06 -3.349e+06 ... -6.1e+05\n",
+       "  * time                 (time) datetime64[ns] 168B 2019-01-01T06:00:00 ... 2...\n",
+       "Data variables:\n",
+       "    Polar_Stereographic  int8 1B ...\n",
+       "    ice_area             (time, y, x) float32 355MB ...\n",
+       "    delta_h              (time, y, x) float32 355MB ...\n",
+       "    delta_h_sigma        (time, y, x) float32 355MB ...\n",
+       "    data_count           (time, y, x) float32 355MB ...\n",
+       "    misfit_rms           (time, y, x) float32 355MB ...\n",
+       "    misfit_scaled_rms    (time, y, x) float32 355MB ...\n",
+       "Attributes:\n",
+       "    description:  delta_h group includes variables describing height differen...
" + ], + "text/plain": [ + " Size: 2GB\n", + "Dimensions: (x: 1541, y: 2741, time: 21)\n", + "Coordinates:\n", + " * x (x) float64 12kB -6.7e+05 -6.69e+05 ... 8.7e+05\n", + " * y (y) float64 22kB -3.35e+06 -3.349e+06 ... -6.1e+05\n", + " * time (time) datetime64[ns] 168B 2019-01-01T06:00:00 ... 2...\n", + "Data variables:\n", + " Polar_Stereographic int8 1B ...\n", + " ice_area (time, y, x) float32 355MB ...\n", + " delta_h (time, y, x) float32 355MB ...\n", + " delta_h_sigma (time, y, x) float32 355MB ...\n", + " data_count (time, y, x) float32 355MB ...\n", + " misfit_rms (time, y, x) float32 355MB ...\n", + " misfit_scaled_rms (time, y, x) float32 355MB ...\n", + "Attributes:\n", + " description: delta_h group includes variables describing height differen..." + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ATL15_dh" + ] + }, + { + "cell_type": "markdown", + "id": "3b0e5f8a-a7fb-4f76-b70d-cd9c55c94f08", + "metadata": {}, + "source": [ + "We can acquaint ourselves with this dataset in a few ways: \n", + "- The data product's [overview page](https://doi.org/10.5067/ATLAS/ATL15.002) (Smith and others, 2022) to get the very basics such as geographic coverage, CRS, and what the data product tells us (quarterly height changes).\n", + "- The Xarray Dataset read-in metadata: clicking on the written document icon of each data variable will expand metadata including a data variable's dimensions, datatype, etc. \n", + "- The data product's [data dictionary](https://nsidc.org/sites/default/files/documents/technical-reference/icesat2_atl15_data_dict_v002.pdf) (Smith and others, 2021) to do a deep dive on what individual variables tell us. \n", + "- The data product's [Algorithm Theoretical Basis Document](https://icesat-2.gsfc.nasa.gov/sites/default/files/page_files/ICESat2_ATL14_ATL15_ATBD_r001.pdf)\n", + "\n", + "We'll be plotting the delta_h data variable in this tutorial, here's what we can learn about from these sources:\n", + "- [ATL14/15's overview page](https://doi.org/10.5067/ATLAS/ATL15.002): this is likely the 'quarterly height changes' described, but let's dive deeper to be sure\n", + "- ATL14/15's Xarray Dataset imbedded metadata tells us a couple things: delta_h =height change at 1 km (the resolution selected earlier) and height change relative to the datum (Jan 1, 2020) surface\n", + "- [ATL14/15's data dictionary](https://nsidc.org/sites/default/files/documents/technical-reference/icesat2_atl15_data_dict_v002.pdf): delta_h = quarterly height change at 40 km\n", + "\n", + "Ok, since the data is relative to a datum, we have two options: \n", + "1) Difference individual time slices to subtract out the datum, like so: \n", + "\n", + " (time$_0$ - datum) - (time$_1$ - datum) = time$_0$ - datum - time$_1$ + datum = time$_0$ - time$_1$\n", + "\n", + "2) Subtract out the datum directly. The datum is the complementary dataset high-resolution DEM surface contained in tha accompanying dataset ATL14.\n", + "\n", + "In this tutorial we'll use the first method. We'll use some explanatory data analysis to illustrate this. " + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "ced9c230-1b92-4468-8231-5f90a9f119ff", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# # Let's make a simple plot of the first minus the zeroth time slices\n", + "# fig, ax = plt.subplots(figsize=(6,3))\n", + "# dhdt = ATL15_dh['delta_h'][1,:,:] - ATL15_dh['delta_h'][0,:,:]\n", + "# cb = ax.imshow(dhdt, origin='lower', norm=colors.CenteredNorm(), cmap='coolwarm_r', \n", + "# extent=[Greenland.bounds.minx.values[0], Greenland.bounds.maxx.values[0], Greenland.bounds.miny.values[0], Greenland.bounds.maxy.values[0]])\n", + "# ax.set_xlabel('longitude'); ax.set_ylabel('latitude')\n", + "# plt.colorbar(cb, fraction=0.02, label='height change [m]')\n", + "# plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "8e79268f-cfe8-498f-a695-b98bf0177c1c", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "9b9cd2c03a6744f3808b98b6d78e19fe", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "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xQq/7ZFHHpGcc7lnzx6/7f/9v/8na2pqZFtbW29MMxXZbFYef/zx8ic/+Ulsn3K9N8W4cePkf/7nf8YeL/f7e+SRR+S0adPkK6+8IgHIjRs3ho6V872Z/OpXv5KMMdnZ2SmlrKz7u/nmm+WECRP8z5Vyb+vWrZODBg2KtFfK/fUEZHI/gjz88MN48803MX/+fL/t2Wefxcknn4zRo0f7beeddx46OjqwYcOGXphlOl588UXs2bMHnHPMmDEDo0aNwgUXXIBXXnnF71Ou96azevVqDBkyBKeeeipuuummkFmvnO/vtddew4IFC3DvvfeiX79+kePlfG8mb7/9Nn72s5/hzDPPRFVVFYDKur+2tjYMHjzY/1xJ92aj0u+vO5BAP4LceeedOO+880I7vLW2tmLEiBGhfscddxyqq6vR2tp6pKeYmh07dgAAli9fjm9961v4zW9+g+OOOw5z587F22+/DaB8701xzTXX4H/+53/wxBNP4Oqrr8att96Kq666yj9ervcnpcT8+fNx5ZVX+q4fk3K9N53rrrsOxxxzDIYMGYJdu3bhV7/6lX+sEu4PAJqamnDbbbfhyiuv9Nsq5d7iqPT76w4k0LvA8uXLY4Pd1OuFF14InfPqq6/i0UcfxZe+9KXIeLbd3qSUPb4LnI209yaEAABcf/31uOiiizBz5kysW7cOjDH87//+rz9eX7o3oLi/3aJFizB37ly85z3vwZe//GWsXbsWd955J9566y1/vL50f2nv7bbbbkN7ezuWLl2aOF5fujeg+P93//7v/46NGzfiscceg+M4uPTSS0P7a/el++vKM2Xv3r04//zzcfHFF+PLX/5y6Fhfujega/eXRF+7v74CBcV1gauvvhqXXHJJYp/x48eHPq9btw5DhgzBxz/+8VD7yJEj8de//jXUtn//fmSz2cgq9EiQ9t7UfvInnnii315TU4OJEydi165dAPrevQFd+9spzjjjDABAY2MjhgwZ0ufuL+293XjjjVi/fn2krOasWbPw+c9/Hvfcc0+fuzeg+L/d0KFDMXToUEyZMgXTp0/HmDFjsH79esyZM6fP3V+x97Z3717MmzcPc+bMwY9//ONQv752b0D3/t+Z9MX76zP0mvf+KEIIISdMmCC//vWvR46pAI+9e/f6bf/zP//T5wM82traZE1NTSgoTgX93XHHHVLK8r23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", + "text/html": [ + "\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " + ], + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Let's make a simple plot of the first minus the zeroth time slices\n", + "fig, ax = plt.subplots(figsize=(5,3))\n", + "dhdt = ATL15_dh['delta_h'][1,:,:] - ATL15_dh['delta_h'][0,:,:]\n", + "cb = ax.imshow(dhdt, origin='lower', norm=colors.CenteredNorm(), cmap='coolwarm_r', \n", + " extent = [greenland_extent[0], # minx (west)\n", + " greenland_extent[1], # maxx (east)\n", + " greenland_extent[2], # miny (south)\n", + " greenland_extent[3]] # maxy (north)\n", + " )\n", + "ax.set_xlabel('longitude'); ax.set_ylabel('latitude')\n", + "plt.colorbar(cb, fraction=0.02, label='height change [m]')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "00c743f6-7df7-4bd4-a407-547179f985d3", + "metadata": {}, + "source": [ + "Hmmm...doesn't look like much change over this quarter. Why? Check out the bounds of the colorbar, we've got some pretty extreme values (colorbar is defaulting to ±10 m!) that appear to be along the margin. It's making more sense now. We can change the bounds of the colorbar to plot see more of the smaller scale change in the continental interior." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "1e2b2eae-00fc-4a4b-8343-28b38688433a", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-5.8791504\n", + "6.1810913\n" + ] + } + ], + "source": [ + "# Let's calculate some basic stats to determine appropriate coloarbar bounds\n", + "print(dhdt.min().values)\n", + "print(dhdt.max().values)" + ] + }, + { + "cell_type": "markdown", + "id": "f5eb944c-b268-44cb-a4f3-690e8a7ae8ef", + "metadata": {}, + "source": [ + "We can use a TwoSlopeNorm to achieve different mapping for positive and negative values while still keeping the center at zero:" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "faf7223f-02fa-4570-9704-9c631b3b996b", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "22518f836e9f445f90e700b3d6ea41f9", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAEsCAYAAAAfPc2WAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAACdXklEQVR4nO2deZgVxdn27+o+s4BsAgKDIjuCCxHBIGiCmLjFJGqMSTRRiZFXP5eoaFSMChKF4GeMX0wimihuifF9oyYm6qvBLSGiIuKCbDPDsIRFXFgUYWZOV31/dFd3dXVVnz7DMMOceX6X53JOd3V1dc9h+j7Pc9dTTAghQBAEQRAEQTQbTmsPgCAIgiAIotQggUUQBEEQBNHMkMAiCIIgCIJoZkhgEQRBEARBNDMksAiCIAiCIJoZElgEQRAEQRDNDAksgiAIgiCIZoYEFkEQBEEQRDNDAosgCIIgCKKZIYFFEARBEATRzJDAIgiCIAiCaGZIYBEEQRAEQTQzJLAIgiAIgiCaGRJYBEEQBEEQzQwJLIIgCIIgiGaGBBZBEARBEEQzQwKLIAiCIAiimSGBRRAEQRAE0cyQwCIIgiAIgmhmSGARBEEQBEE0MySwCIIgCIIgmhkSWARBEARBEM0MCSyCIAiCIIhmhgQWQRAEQRBEM0MCiyAIgiAIopkhgUUQBEEQBNHMkMAiCIIgCIJoZkhgEQRBEARBNDMksAiCIAiCIJoZElgEQRAEQRDNDAksgiAIgiCIZoYEFkEQBEEQRDNDAosgCIIgCKKZIYFFEARBEATRzJDAIgiCIAiCaGZIYBEEQRAEQTQzJLAIgiAIgiCaGRJYBEEQBEEQzQwJLIIgCIIgiGaGBBZBEARBEEQzQwKLIAiCIAiimSGBRRAEQRAE0cyQwCIIgiAIgmhmSGARBEEQBEE0MySwCIIgCIIgmhkSWARBEARBEM1MSQisfD6PG264AQMHDkSHDh0waNAgzJgxA5zzsM2kSZPAGIu9jjrqqFYcNUEQBEEQpUqutQfQHMyePRtz5szBgw8+iEMOOQRvvvkmfvjDH6Jr1664/PLLw3YnnXQS5s6dG74vLy9vjeESBEEQBFHilITAWrBgAU499VSccsopAIABAwbg0UcfxZtvvhlrV1FRgT59+rTGEAmCIAiCaEeURIrwmGOOwQsvvICVK1cCAN555x3Mnz8fX/va12LtXn75ZfTq1QvDhg3D5MmTsXnz5tYYLkEQBEEQJQ4TQojWHsTuIoTA9ddfj9mzZ8N1XXieh1tvvRVTp04N2zz22GPo1KkT+vfvj7q6Otx4443I5/NYtGgRKioqEn3W19ejvr4+fM85xyeffIIePXqAMdYi10UQBEEQu4sQAp9++in69u0LxymJuErbQJQAjz76qDjggAPEo48+Kt59913x0EMPie7du4sHHnjAesyGDRtEWVmZePzxx437p02bJgDQi170ohe96FUSr3Xr1u2pxzBhoCQiWP369cN1112HSy65JNx2yy234JFHHsHy5cutxw0dOhQXXHABrr322sQ+PYK1bds2HHjggVi3bh26dOnSvBdAEARBEHuI7du3o1+/fti6dSu6du3a2sNpN5SEyf3zzz9PhD1d142VadD5+OOPsW7dOlRVVRn3V1RUGFOHXbp0IYFFEARBtDnI3tKylITA+sY3voFbb70VBx54IA455BAsXrwYd9xxB84//3wAwGeffYbp06fjjDPOQFVVFVavXo3rr78ePXv2xOmnn97KoycIgiAIotQoCYF111134cYbb8TFF1+MzZs3o2/fvrjwwgtx0003AfCjWe+99x4eeughbN26FVVVVZg4cSIee+wxdO7cuZVHTxAEQRBEqVESHqyWYPv27ejatSu2bdtGKUKCIAiizUDPr9ahJCJYBEEQBEG0Hrt27UJDQ0Nqm/LyclRWVrbQiFofElgEQRAEQTSZXbt2oUu3/dFY/0lquz59+qCurq7diCwSWARBEARBNJmGhgY01n+CL574ONzcPsY2Xn4H3njuDDQ0NJDAIgiCIAiCyEpZRRfkyswCK9/otvBoWh8SWARBEARB7DbMccAsS/HYtpcyJLAIgthrqKmtA4MAh4Ohgwe09nCIgEUrPoHLPBw+bL/Evura1fS7IgAAjgM4jrmYaTvUVySwCILY+xCgitOtzdsrPwSHg0buAnDAmMDSmg0oZ/UYMnhg2E6Kq+U16yDgQIDBEw4OG9qndQZOtBqO68JxzalAh1OKkCAIosVYUbMWAHDQkAMBRMJq2OD+rTYmIkIIhkq3ARWsHjmWB4O9bOLwIf1acGTE3ghjKSlC1v5CWCSwCIIoitraVWDgGDR4yG73JYXVipq1gbhy6UG9F7C8Zh32cb1QUDEICDAIMHC0vwcl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xo8fj7KyMgDt8z5Itm3bhu7du4fv2/O9UKH7sOcggdUGue+++3DiiSeiX79+4bZNmzahd+/esXb77rsvysvLsWnTppYe4h5j1apVAIDp06fjhhtuwN///nfsu+++mDBhAj755BMA7edeXH755fjTn/6El156CZdeeinuvPNOXHzxxeH+9nIfhBCYNGkSLrroojBlrtNe7gUAXHvttdhnn33Qo0cPrF27Fn/961/Dfe3pPqjU1tbirrvuwkUXXRRua6/3Qofuw56DBFYrMn36dKt5Xb7efPPN2DH/+c9/8Nxzz+FHP/pRoj/GWGKbEMK4fW8j673gnAMAfvrTn+KMM87A6NGjMXfuXDDG8D//8z9hf231XhTzmbjyyisxYcIEjBw5EhdccAHmzJmD++67Dx9//HHYX1u9D0D2e3HXXXdh+/btmDp1amp/bfVeFPt34ic/+QkWL16M559/Hq7r4txzz4VQFuxoq/cBaNrfzA0bNuCkk07CmWeeiQsuuCC2r63ei6bchzTa6n3Y2yGTeyty6aWX4nvf+15qmwEDBsTez507Fz169MA3v/nN2PY+ffrg9ddfj23bsmULGhsbE99O9kay3otPP/0UAHDwwQeH2ysqKjBo0CCsXbsWQNu+F035TEiOOuooAEBNTQ169OjRpu8DkP1e3HLLLXjttdcS66yNGTMG3//+9/Hggw+26XtR7GeiZ8+e6NmzJ4YNG4YRI0agX79+eO211zBu3Lg2fR+A4u/Fhg0bMHHiRIwbNw733ntvrF1bvhe783dCpy3fh72eVnN/EUXDORcDBw4UV111VWKfNCpu2LAh3PanP/2p5IyK27ZtExUVFTGTuzT933PPPUKI9nMvdP72t78JAGLNmjVCiPZzH9asWSPee++98PXcc88JAOLPf/6zWLdunRCi/dwLnbVr1woA4qWXXhJCtK/78J///EcMHTpUfO973xP5fD6xvz3dCyEKm9zby31oSUhgtSHmzZsnAIilS5cm9uXzeXHooYeKr3zlK+Ktt94S8+bNEwcccIC49NJLW2Gke5bLL79c7L///uK5554Ty5cvFz/60Y9Er169xCeffCKEaB/34tVXXxV33HGHWLx4sVi1apV47LHHRN++fcU3v/nNsE17uA8m6urqErMI28O9eP3118Vdd90lFi9eLFavXi1efPFFccwxx4jBgweLXbt2CSHax30QQoj169eLIUOGiOOOO0785z//ERs3bgxfkvZyL9asWSMWL14sbr75ZtGpUyexePFisXjxYvHpp58KIdrPfWgNSGC1Ic466ywxfvx46/41a9aIU045RXTo0EF0795dXHrppeEf1lKioaFBXHXVVaJXr16ic+fO4qtf/apYsmRJrE2p34tFixaJsWPHiq5du4rKykpx0EEHiWnTpokdO3bE2pX6fTBhElhClP69ePfdd8XEiRNF9+7dRUVFhRgwYIC46KKLxH/+859Yu1K/D0L40RoAxpdKe7gX5513nvE+yKimEO3jPrQGTAjF/UgQBEEQBEHsNjSLkCAIgiAIopkhgUUQBEEQBNHMkMAiCIIgCIJoZkhgEQRBEARBNDMksAiCIAiCIJoZElgEQRAEQRDNDAksgiAIgiCIZoYEFkEQBEEQRDNDAosgiJBjjz0WV1xxRcmcc9KkSTjttNP2SN8EQRBp5Fp7AARBtG+eeOIJlJWVhe8HDBiAK664osWFHkEQRHNCAosgiFale/furT0EgiCIZodShARBGNmyZQvOPfdc7LvvvujYsSNOPvlkVFdXh/sfeOABdOvWDc899xxGjBiBTp064aSTTsLGjRvDNvl8Hj/+8Y/RrVs39OjRA9deey3OO++8WNpOTREee+yxWLNmDa688kowxsAYAwBMnz4dhx9+eGx8d955JwYMGBC+9zwPU6ZMCc91zTXXQF9qVQiB2267DYMGDUKHDh3whS98AX/+85+b54YRBEEokMAiCMLIpEmT8Oabb+Kpp57CggULIITA1772NTQ2NoZtPv/8c9x+++14+OGH8c9//hNr167F1VdfHe6fPXs2/vCHP2Du3Ln497//je3bt+Mvf/mL9ZxPPPEEDjjgAMyYMQMbN26MibVC/OIXv8D999+P++67D/Pnz8cnn3yCJ598MtbmhhtuwNy5c3H33Xfj/fffx5VXXokf/OAHeOWVV7LfGIIgiAxQipAgiATV1dV46qmn8O9//xvjx48HAPzhD39Av3798Je//AVnnnkmAKCxsRFz5szB4MGDAQCXXnopZsyYEfZz1113YerUqTj99NMBAL/+9a/xzDPPWM/bvXt3uK6Lzp07o0+fPkWN+c4778TUqVNxxhlnAADmzJmD5557Lty/Y8cO3HHHHXjxxRcxbtw4AMCgQYMwf/583HPPPZgwYUJR5yMIgkiDBBZBEAmWLVuGXC6HsWPHhtt69OiBgw46CMuWLQu3dezYMRRXAFBVVYXNmzcDALZt24YPPvgAX/ziF8P9ruti9OjR4Jw363i3bduGjRs3hsIJAHK5HMaMGROmCZcuXYpdu3bh+OOPjx3b0NCAUaNGNet4CIIgSGARBJFA9y6p26UvCkBs9h8AMMYSx6rt0/pOw3GcxHFqqjILUtQ9/fTT2H///WP7Kioqih4TQRBEGuTBIggiwcEHH4x8Po/XX3893Pbxxx9j5cqVGDFiRKY+unbtit69e+ONN94It3meh8WLF6ceV15eDs/zYtv2228/bNq0KSay3n777di5qqqq8Nprr4Xb8vk8Fi1aFLumiooKrF27FkOGDIm9+vXrl+maCIIgskIRLIIgEgwdOhSnnnoqJk+ejHvuuQedO3fGddddh/333x+nnnpq5n4uu+wyzJo1C0OGDMHw4cNx1113YcuWLYmolsqAAQPwz3/+E9/73vdQUVGBnj174thjj8WHH36I2267Dd/+9rfxv//7v3j22WfRpUuX8LjLL78cP//5zzF06FCMGDECd9xxB7Zu3Rru79y5M66++mpceeWV4JzjmGOOwfbt2/Hqq6+iU6dOOO+885p0rwiCIExQBIsgCCNz587F6NGj8fWvfx3jxo2DEALPPPNMIi2YxrXXXouzzjoL5557LsaNG4dOnTrhxBNPRGVlpfWYGTNmYPXq1Rg8eDD2228/AMCIESPw29/+Fr/5zW/whS98AW+88UZstiIAXHXVVTj33HMxadIkjBs3Dp07dw7N9ZKf/exnuOmmmzBr1iyMGDECJ554Iv72t79h4MCBRdwZgiCIwjDRFEMEQRBEE+CcY8SIEfjOd76Dn/3sZ609HIIgiD0GpQgJgthjrFmzBs8//zwmTJiA+vp6/PrXv0ZdXR3OPvvs1h4aQRDEHoVShARB7DEcx8EDDzyAI488EkcffTTee+89zJs3L7NRniAIoq1CKUKCIAiCIIhmhiJYBEEQBEEQzQwJLIIgCIIgiGaGBBZBEARBEEQzQwKLIAiCIAiimfn/A1csUOFfbdEAAAAASUVORK5CYII=", + "text/html": [ + "\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " + ], + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# We can make that same plot with more representative colorbar bounds\n", + "fig, ax = plt.subplots(figsize=(6,3))\n", + "dhdt = ATL15_dh['delta_h'][1,:,:] - ATL15_dh['delta_h'][0,:,:]\n", + "divnorm = colors.TwoSlopeNorm(vmin=dhdt.min(), vcenter=0, vmax=dhdt.max())\n", + "cb = ax.imshow(dhdt, origin='lower', norm=divnorm, cmap='coolwarm_r', \n", + " extent = [greenland_extent[0], # minx (west)\n", + " greenland_extent[1], # maxx (east)\n", + " greenland_extent[2], # miny (south)\n", + " greenland_extent[3]] # maxy (north)\n", + " )\n", + "ax.set_xlabel('longitude'); ax.set_ylabel('latitude')\n", + "plt.colorbar(cb, fraction=0.02, label='height change [m]')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "6d3b76be-6df8-4cb1-b475-d962a7d7eb06", + "metadata": {}, + "source": [ + "Now the colorbar bounds are more representative, but we still have the issue that extreme values along the margin are swapping any signals we might see in the continental interior. " + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "82678fa1-fd9a-469f-9eac-2254624f5e3e", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'delta_h' (quantile: 2)> Size: 16B\n",
+       "array([-0.28271484,  2.78289673])\n",
+       "Coordinates:\n",
+       "  * quantile  (quantile) float64 16B 0.01 0.99
" + ], + "text/plain": [ + " Size: 16B\n", + "array([-0.28271484, 2.78289673])\n", + "Coordinates:\n", + " * quantile (quantile) float64 16B 0.01 0.99" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Let's use the Xarray DataArray quantile method to find the 1% and 99% quantiles (Q1 and Q3) of the data\n", + "dhdt.quantile([0.01,0.99])" + ] + }, + { + "cell_type": "markdown", + "id": "f0ff22ef-89ee-4f85-9b14-e46dfe528978", + "metadata": {}, + "source": [ + "We can use these quantiles as the colorbar bounds so that we see the data variability by plotting the most extreme values at the maxed out value of the colorbar. We'll adjust the caps of the colorbar (using `extend`) to express that there are data values beyond the bounds. " + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "8320be7d-73dd-45ec-8a7f-7efdb9b629d3", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "f9d9c39c4fbb4e90bb18fc25666fca6e", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "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15k/f/4Yh/6ZtibbbbfdmH8jn/vc5zqOmWlrUqXVarH77rsjhOCBBx7o2DfT1uX9738/r3/966nVaixZsoRjjjmG5557ruOYmbQmTzzxBB//+MfZfvvtqdfr7LDDDnzxi18c83xn0poUnHfeeey777709PRMaLw9E9dlMpl2Ng0zhX333Zfnn3++Y9vZZ5/NLbfcwl577QWA1pr3ve99LFiwgLvuuovVq1dz3HHHYa3lkksu2RK3vdm59tprOfHEEzn//PM58MADsdby4IMPlvtn4poArFixghNPPLH8ua+vr/x+pq5JwWc/+1m22WYbfvOb33Rsn4nrcsABB3DWWWexZMkSnn32WU4//XQ+9KEP8Ytf/AKYeWvyyCOPYIzh8ssvZ8cdd+Shhx7ixBNPZGRkhK985SvAzFuTgiRJOOqoo1i+fDlXXnnlmP0zdV0mFeuZFiRJYhcuXGhXrFhRbvvJT35ipZT22WefLbf967/+q43j2K5fv35L3OZmJU1Tu+2229p/+Zd/mfCYmbYm1lq7bNky+9WvfnXC/TNxTQp+8pOf2De96U324YcftoBdtWpVx76Zui4FP/jBD6wQwiZJYq31a2KttRdeeKHdfvvty59n+pqsXLnSzpo1a8z2mb4uk4FPEU4TbrjhBl5++WWOP/74ctsvf/lL3vKWt7DNNtuU2w466CBarRb33XffFrjLzcv999/Ps88+i5SSPfbYgyVLlnDIIYfw8MMPl8fMtDUpuOCCC5g3bx6777475513XkeYfqauyYsvvsiJJ57It771LXp6esbsn6nrUrBmzRq+/e1vs++++xKGIeDXBNyA47lz55Y/+zUZH78urx4vsKYJV155JQcddBBLly4tt73wwgssWrSo47g5c+YQRREvvPDCVN/iZufPf/4zAOeccw5f+MIX+NGPfsScOXPYf//9WbNmDTDz1gTgU5/6FN/97ne5/fbbOeWUU7j44os5+eSTy/0zcU2stRx//PGcdNJJZUq9m5m4LgBnnHEGvb29zJs3j6eeeoof/OAH5b6ZuiYFjz32GJdccgknnXRSuW2mr8lE+HV59XiBNcmcc845ExavF1+//vWvOx7zzDPPcNNNN/Hxj398zPmEEGO2WWvH3T5d2dQ1McYA8PnPf54jjzySPffck5UrVyKE4N///d/L882kNQE49dRT2X///dltt9044YQTuOyyy7jyyitZvXp1eb6tYU1g09flkksuYXBwkDPPPHOD59sa1uWVvqf84z/+I6tWreLmm29GKcWxxx6LrQzsmIlrAvDcc89x8MEHc9RRR3HCCSd07Nsa1gT+unXZEFvLumwpfJH7JHPKKafwkY98ZIPHbLfddh0/r1y5knnz5vH+97+/Y/vixYu55557OratXbuWNE3H/GYxndnUNRkaGgJg1113LbfHccwb3vAGnnrqKWDmrcl4vO1tbwPgT3/6E/Pmzdtq1gQ2fV2+9KUvcffdd4+ZobbXXnvxsY99jG984xtbzbq80n8r8+fPZ/78+ey8887ssssuLF26lLvvvpvly5fP2DV57rnnOOCAA1i+fDlXXHFFx3Fby5rAq3tf6WZrWpctxhar/vJYa601xtjtt9/efuYznxmzrygyfO6558pt3/3ud7faIsP169fbOI47ityL4v/LL7/cWjvz1mQ8fvjDH1rAPvnkk9bambkmTz75pH3wwQfLr5tuuskC9nvf+559+umnrbUzc126eeqppyxgb7/9dmvtzFyTZ555xu600072Ix/5iM2ybMz+mbgmVTZW5D5T12Uy8AJrC3PLLbdYwP7ud78bsy/LMvuWt7zF/v3f/729//777S233GJf97rX2VNOOWUL3OnU8KlPfcpuu+229qabbrKPPPKI/fjHP24XLlxo16xZY62deWvyi1/8wl500UV21apV9s9//rO95ppr7DbbbGPf//73l8fMtDUZj8cff3xMF+FMW5d77rnHXnLJJXbVqlX2iSeesLfddpt9+9vfbnfYYQfbbDattTNvTZ599lm744472gMPPNA+88wz9vnnny+/CmbamhQ8+eSTdtWqVfbcc8+1fX19dtWqVXbVqlV2aGjIWjtz12Uy8QJrC/PRj37U7rvvvhPuf/LJJ+373vc+W6/X7dy5c+0pp5xSvllujSRJYj/zmc/YhQsX2v7+fvuud73LPvTQQx3HzKQ1ue++++w+++xjZ82aZWu1mn3jG99ov/jFL9qRkZGO42bSmozHeALL2pm1Lr/97W/tAQccYOfOnWvjOLbbbbedPemkk+wzzzzTcdxMWpOVK1daYNyvKjNpTQqOO+64cdeliHZaOzPXZTIR1laqHz0ej8fj8Xg8rxrfRejxeDwej8czyXiB5fF4PB6PxzPJeIHl8Xg8Ho/HM8l4geXxeDwej8czyXiB5fF4PB6PxzPJeIHl8Xg8Ho/HM8l4geXxeDwej8czyXiB5fF4PB6PxzPJeIHl8cxg3vnOd/LpT396q7nm8ccfzwc+8IHNcm6Px+N5JQRb+gY8Hs/M4vvf/z5hGJY/b7fddnz605+ecqHn8Xg8mxMvsDwez5Qyd+7cLX0LHo/Hs9nxKUKPxwPA2rVrOfbYY5kzZw49PT0ccsghPProo+X+q6++mtmzZ3PTTTexyy670NfXx8EHH8zzzz9fHpNlGZ/85CeZPXs28+bN44wzzuC4447rSNtVU4TvfOc7efLJJzn11FMRQiCEAOCcc85h991377i/iy++mO222678WWvNaaedVl7rs5/9LN2jVa21XHjhhbzhDW+gXq/z1re+le9973uTs2Aej8ezAbzA8ng8gKtf+vWvf80NN9zAL3/5S6y1vPe97yVN0/KY0dFRvvKVr/Ctb32Ln/3sZzz11FOcfvrp5f4LLriAb3/726xcuZKf//znDA4Ocv311094ze9///u87nWvY8WKFTz//PMdYm1j/M//+T+56qqruPLKK7nrrrtYs2YN1113XccxX/jCF1i5ciWXXnopDz/8MKeeeir/8A//wJ133rnpC+PxeDx/BT5F6PF4ePTRR7nhhhv4+c9/zr777gvAt7/9bZYuXcr111/PUUcdBUCaplx22WXssMMOAJxyyimsWLGiPM8ll1zCmWeeyQc/+EEAvva1r/GTn/xkwuvOnTsXpRT9/f0sXrz4Fd3zxRdfzJlnnsmRRx4JwGWXXcZNN91U7h8ZGeGiiy7itttuY/ny5QC84Q1v4K677uLyyy9n//33f0XX83g8nleCF1gej4ff//73BEHAPvvsU26bN28eb3zjG/n9739fbuvp6SnFFcCSJUt46aWXAFi/fj0vvvgif/d3f1fuV0qx5557YoyZ1Ptdv349zz//fCmcAIIgYK+99irThL/73e9oNpu8+93v7nhskiTssccek3o/Ho/H040XWB6PZ0ztUnV7URcFdHT/AQghxjy2evyGzr0hpJRjHldNVW4Khaj78Y9/zLbbbtuxL47jV3xPHo/H80rwNVgej4ddd92VLMu45557ym2rV6/mj3/8I7vssssmnWPWrFksWrSIe++9t9ymtWbVqlUbfFwURWitO7YtWLCAF154oUNkPfDAAx3XWrJkCXfffXe5Lcsy7rvvvo7nFMcxTz31FDvuuGPH19KlSzfpOXk8Hs9fi49geTwedtppJw4//HBOPPFELr/8cvr7+/nc5z7Htttuy+GHH77J5/nEJz7Bl7/8ZXbccUfe9KY3cckll7B27doxUa0q2223HT/72c/4yEc+QhzHzJ8/n3e+85385S9/4cILL+RDH/oQP/3pT7nxxhsZGBgoH/epT32Kf/7nf2annXZil1124aKLLmLdunXl/v7+fk4//XROPfVUjDG8/e1vZ3BwkF/84hf09fVx3HHH/VVr5fF4PJuCj2B5PB4AVq5cyZ577smhhx7K8uXLsdbyk5/8ZExacEOcccYZfPSjH+XYY49l+fLl9PX1cdBBB1Gr1SZ8zIoVK3jiiSfYYYcdWLBgAQC77LIL/+f//B++/vWv89a3vpV77723o1sR4DOf+QzHHnssxx9/PMuXL6e/v78sri/4p3/6J/7H//gffPnLX2aXXXbhoIMO4oc//CHbb7/9K1gZj8fjeeUI+9cUSHg8Hs8mYIxhl1124cMf/jD/9E//tKVvx+PxeKYMnyL0eDyTxpNPPsnNN9/M/vvvT6vV4mtf+xqPP/44Rx999Ja+NY/H45lSfIrQ4/FMGlJKrr76avbee2/2228/HnzwQW655ZZNLpT3eDyerQWfIvR4PB6Px+OZZHwEy+PxeDwej2eS8QLL4/F4PB6PZ5LxAsvj8Xg8Ho9nkvECy+PxeDwej2eS8QLL4/F4PB6PZ5LxAsvj8Xg8Ho9nkvECy+PxeDwej2eS8QLL4/F4PB6PZ5LxAsvj8Xg8Ho9nkvECy+PxeDwej2eS8QLL4/F4PB6PZ5LxAsvj8Xg8Ho9nkvECy+PxeDwej2eS8QLL4/F4PB6PZ5LxAsvj8Xg8Ho9nkvn/AQhDC5zJWm2PAAAAAElFTkSuQmCC", + "text/html": [ + "\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " + ], + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Let's make the same plot but using the quantiles as the colorbar bounds\n", + "fig, ax = plt.subplots(figsize=(6,3))\n", + "dhdt = ATL15_dh['delta_h'][1,:,:] - ATL15_dh['delta_h'][0,:,:]\n", + "divnorm = colors.TwoSlopeNorm(vmin=dhdt.quantile(0.01), vcenter=0, vmax=dhdt.quantile(0.99))\n", + "cb = ax.imshow(dhdt, origin='lower', norm=divnorm, cmap='coolwarm_r', \n", + " extent = [greenland_extent[0], # minx (west)\n", + " greenland_extent[1], # maxx (east)\n", + " greenland_extent[2], # miny (south)\n", + " greenland_extent[3]] # maxy (north)\n", + " )\n", + "ax.set_xlabel('longitude'); ax.set_ylabel('latitude')\n", + "plt.colorbar(cb, fraction=0.02, extend='both', label='height change [m]')\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "b53dab15-820d-45d9-bf17-72a8702af057", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Let's make the same plot but for all the available time slices and let's turn it in a function so that we can reuse this code for a smaller subset of data\n", + "# create empty lists to store data\n", + "def plot_icesat2_atl15(xmin, xmax, ymin, ymax, dataset):\n", + " # subset data using bounding box in epsg:3134 x,y\n", + " mask_x = (dataset.x >= xmin) & (dataset.x <= xmax)\n", + " mask_y = (dataset.y >= ymin) & (dataset.y <= ymax)\n", + " ds_sub = dataset.where(mask_x & mask_y, drop=True)\n", + " \n", + " # Create empty lists to store data\n", + " vmins_maxs = []\n", + "\n", + " # Find the min's and max's of each inter time slice comparison and store into lists\n", + " for idx in range(len(ds_sub['time'].values)-1): \n", + " dhdt = ds_sub['delta_h'][idx+1,:,:] - ds_sub['delta_h'][idx,:,:]\n", + " vmin=dhdt.quantile(0.01)\n", + " vmins_maxs += [vmin]\n", + " vmax=dhdt.quantile(0.99)\n", + " vmins_maxs += [vmax]\n", + " if (min(vmins_maxs)<0) & (max(vmins_maxs)>0):\n", + " vcenter = 0\n", + " else: \n", + " vcenter = max(vmins_maxs) - min(vmins_maxs)\n", + " divnorm = colors.TwoSlopeNorm(vmin=min(vmins_maxs), vcenter=vcenter, vmax=max(vmins_maxs))\n", + "\n", + " # create fig, ax\n", + " fig, axs = plt.subplots(7,2, sharex=True, sharey=True, figsize=(10,10))\n", + "\n", + " idx = 0\n", + " for ax in axs.ravel(): \n", + " ax.set_aspect('equal')\n", + " dhdt = ds_sub['delta_h'][idx+1,:,:] - ds_sub['delta_h'][idx,:,:]\n", + " cb = ax.imshow(dhdt, origin='lower', norm=divnorm, cmap='coolwarm_r', \n", + " extent=[xmin[0], xmax[0], ymin[0], ymax[0]])\n", + " # Change polar stereographic m to km\n", + " km_scale = 1e3\n", + " ticks_x = ticker.FuncFormatter(lambda x, pos: '{0:g}'.format(x/km_scale))\n", + " ax.xaxis.set_major_formatter(ticks_x)\n", + " ticks_y = ticker.FuncFormatter(lambda x, pos: '{0:g}'.format(x/km_scale))\n", + " ax.yaxis.set_major_formatter(ticks_y)\n", + " # Create common axes labels\n", + " fig.supxlabel('easting (km)'); fig.supylabel('northing (km)')\n", + " # Increment the idx\n", + " idx = idx + 1\n", + " \n", + " fig.colorbar(cb, extend='both', ax=axs.ravel().tolist(), label='height change [m]')\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "277c6fa1-5013-46d8-80a9-1ca545e17611", + "metadata": {}, + "source": [ + "Let's zoom into an individual active lake to see more detail. First let's remind ourselves of the Greenland active subglacial lakes by filtering on lake type:" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "7eb6cefc-7794-45e3-a5d6-3900d7204d85", + "metadata": { + "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", + "
Name / LocationLat. oNLon. oELake TypeReferencesgeometry
3Flade Isblink ice cap81.160000-16.580000ActiveWillis et al. (2015)POLYGON ((-16.06723 81.1139, -16.09787 81.1062...
4Inuppaat Quuat67.611136-48.709000ActiveHowat et al. (2015); Palmer et al. (2015)POLYGON ((-48.4764 67.61446, -48.47613 67.6057...
5Sioqqap Sermia, [SS1]63.541856-48.450597ActiveBowling et al. (2019)POLYGON ((-48.25472 63.54482, -48.25457 63.536...
6Sioqqap Sermia, [SS2]63.260248-48.206633ActiveBowling et al. (2019)POLYGON ((-48.01287 63.26285, -48.01281 63.254...
61Isunguata Sermia 167.180000-50.188000ActiveLivingstone et al. (2019)POLYGON ((-49.96016 67.18562, -49.95932 67.176...
62Isunguata Sermia 267.178000-50.149000ActiveLivingstone et al. (2019)POLYGON ((-49.92117 67.18356, -49.92035 67.174...
63Isunguata Sermia 367.180000-50.128000ActiveLivingstone et al. (2019)POLYGON ((-49.90015 67.18552, -49.89933 67.176...
\n", + "
" + ], + "text/plain": [ + " Name / Location Lat. oN Lon. oE Lake Type \\\n", + "3 Flade Isblink ice cap 81.160000 -16.580000 Active \n", + "4 Inuppaat Quuat 67.611136 -48.709000 Active \n", + "5 Sioqqap Sermia, [SS1] 63.541856 -48.450597 Active \n", + "6 Sioqqap Sermia, [SS2] 63.260248 -48.206633 Active \n", + "61 Isunguata Sermia 1 67.180000 -50.188000 Active \n", + "62 Isunguata Sermia 2 67.178000 -50.149000 Active \n", + "63 Isunguata Sermia 3 67.180000 -50.128000 Active \n", + "\n", + " References \\\n", + "3 Willis et al. (2015) \n", + "4 Howat et al. (2015); Palmer et al. (2015) \n", + "5 Bowling et al. (2019) \n", + "6 Bowling et al. (2019) \n", + "61 Livingstone et al. (2019) \n", + "62 Livingstone et al. (2019) \n", + "63 Livingstone et al. (2019) \n", + "\n", + " geometry \n", + "3 POLYGON ((-16.06723 81.1139, -16.09787 81.1062... \n", + "4 POLYGON ((-48.4764 67.61446, -48.47613 67.6057... \n", + "5 POLYGON ((-48.25472 63.54482, -48.25457 63.536... \n", + "6 POLYGON ((-48.01287 63.26285, -48.01281 63.254... \n", + "61 POLYGON ((-49.96016 67.18562, -49.95932 67.176... \n", + "62 POLYGON ((-49.92117 67.18356, -49.92035 67.174... \n", + "63 POLYGON ((-49.90015 67.18552, -49.89933 67.176... " + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gdf_polys_active = gdf_polys[gdf_polys['Lake Type'] == 'Active']\n", + "gdf_polys_active" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "eb54bca1-def0-46cd-b2c0-d08a1e79611d", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# We can call the bounds of the geometry of the Shapely Polygon we created earlier\n", + "gdf_sub = gdf_polys_active[gdf_polys_active['Name / Location'] == 'Inuppaat Quuat']" + ] + }, + { + "cell_type": "markdown", + "id": "64cb4599-4193-4c0e-8a9e-e96a01fcdb01", + "metadata": {}, + "source": [ + "Now using these geometry bounds we can plot the area immediately around the active subglacial lake. " + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "5e949e39-f84f-42ff-8e7f-7b45270d9a39", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "104995cb384c4bfe850c75b2d1e43509", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "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Ujqd1qhRozR//nxdffXVXdYHAABAT/Lcc8/pW9/6lq688sqs9h/84AeZW9uOGTNG999/PwV6D0OBDvRCI0aMkJ/nddr7OtB7rP1OmjRJkyZN6nRfAAAguHrakvKg+c///E/dfffdTvvZZ5+t6667TpL0+c9/XrNnzz7cQ0OBUaAD6Fa8dEpe2g0q21c65IYbWULppNNmBcdJUtozwn/C7hL9tNztrNC0lBH0JrnHFTM+AFnv9eVepxYNJYw+pFCeH6oinvvzsfgdbgjS8TmAYInHw4rHP5pHUil3Tkgm3WC1SMSde8r7um3GZbMf9uO2vW/cnbesxLru1t0uZEw1VgBbNOweix3U6e4vHrf/3rSn3PenjWC3kpjbt3UsHUPncv0M0XsMGDBAjz/+uOrr67PaH3/8cQ0YMECS9MEHHzgZQ+j+KNABAAAAIEDmzp2rf/iHf1BjY6NOPPFEeZ6nF198UU8++aSWLl0qSVq5cqVOP/30Io8UXY0CHQAAAEDePPnyjFuDFlNPW3JfV1enT37yk1q8eLF++ctfyvd9HX300frNb36jU045RZIyS93Rs1CgAwAAAEDAnHrqqTr11FOLPQwcZhToAAAAABAw6XRa69ev1zvvvKN0OjvP4DOf+UyRRoVCK1iBPnLkSHk5Ei5CoZD69eunT3/60/rmN7+pY445plDDANDDpOLlSpX0yTxPh91pLB1xg95SYTc4Lh1y32uFrXVG0jf26bv7DHtu8JAVJrc75QbRWVNr2HODiOwgOsmXu6112EljtaAVHBfxEvt9DiBYwmFP4X0S0aIxd+5JGhNA2EhRSxt394hZaWuSwvaU5Gg38iljxidWKxDOWnZtBcJFQu486IfccSeS+YdeWn1bP4poxO071vFn077/MNRi8+QHbkl50MZzqFavXq1p06bpjTfecO6Q43meUlbqInqEgkXtnn766fJ9X2+99ZZGjBihk046ScOHD9dbb72lVCqlYcOG6Ze//KXGjx+vl156qVDDAAAAAIBu5corr9T48eP1hz/8Qe+995527NiRebz33nvFHh4KqGBn0CdOnKjVq1dr/fr1GjZsWKZ906ZNOuecc/SFL3xBDz/8sM444wzddttteuKJJwo1FAAAAABdhDPohffaa6/p3//93/Xxj3+82EPBYVawM+h33nmnbr/99qziXJJqamp066236jvf+Y4qKytVX1+v559/vlDDAAAAAIBu5aSTTtL69euLPQwUQcHOoK9fv16VlZXma/3799ef//xnSdKIESPU0tJSqGEAAAAAQLfyjW98Q9ddd522bt2q0aNHKxrNztIZM2ZMkUaGQitYgT58+HA9/PDDmjx5svPaj370I9XU1EiStm/frgEDBhRqGAAAAAC6WE9bUh40559/viTpa1/7WqbN8zz5vk9IXA9XsAL9+uuv19e//nW9+eab+tKXvqTBgwdr27Zt+vnPf64XXnhBP/zhDyVJjY2NGj9+fKGGAaCHScTLlIiXZZ77npE+HDZS3ENGirvnRgrn+sBhtfvGVUK706XueIw0dSstvi3ljjFlJMBb6cPxsJuc7oXsYwkZie9pYzwJ302QT8s9lpCyPyTkSo8HEAzhcEiRSGif5+42IeN2EdYdJKztIjk+XYaNCyvb2t02q+6IGGOMRtw5Lm4kpIeNudCaR620986wEttTxjQcSrsbhowEePRuGzduLPYQUCQFK9Dr6urk+75uv/12zZo1K9NeVVWlpUuX6oorrpAk3XzzzYrH3Q+BAAAAANAbDR8+vNhDQJEUrECXpBkzZqiurk6vvvqqtm/froEDB+oTn/hE1v3RBw8eXMghAAAAAOhCpLgfPq+88oo2bdqk9vbs5Sa1tbVFGhEKrWAp7nt5nqejjz5ap556qo4++uis4hxAcSQSCd10000aPXq0ysrKVF1drUsvvVRbtmwxt/d9X5MnT5bneXrssceyXhsxYoQ8z8t6zJ49O2ubTZs2acqUKSorK9OgQYP0zW9+0/lDAwAAgD1ef/11HXfccTr22GN17rnn6gtf+IK+8IUv6Itf/KK++MUvFnt4KKCCnkHftWuXnnrqKb3xxhvavXt31mue52nu3LmF7B5ADi0tLWpqatLcuXN13HHHaceOHZo5c6Zqa2v10ksvOdsvXLhwv1+uzZ8/X3V1dZnnffv2zfw7lUrp3HPP1RFHHKHnnntO27dv12WXXSbf97Vo0aKuPTAAAIAe4Nprr9XIkSP161//WqNGjdKLL76o7du367rrrtO9995b7OGhgApWoL/wwgs699xz9d5775mvU6ADxVNZWamVK1dmtS1atEgnnniiNm3alLnLgiStW7dOCxYs0Jo1azRkyBBzf+Xl5aqqqjJfe/rpp/XKK69o8+bNqq6uliR973vf0+WXX64777xTFRUVnRp7MlqiRNQNYsuW30odO/jNfm8y5AbPfZAuc9qsoDdrn4m0m3j011a3j7++7243pL+7+iAaclOVch2L1R6R+/6wESZnBd513J0VJAcgODzPDnzbV1kfd5FlSYn7poo+9v4tbW6WpYycTzNMLpZnIFw84s5lfSLunNmedj8CdyYkztoyaownZvydsfpJdwgE7fg8aPYscXePt5h62hL3559/Xg0NDTriiCMUCoUUCoX0t3/7t7rrrrv0zW9+U2vXri32EFEgBVviXl9fr6FDh+rFF19Ua2ur0ul01oNbAwDBsnPnTnmep379+mXaWlpadNFFF2nx4sU5C3BJuvvuuzVw4ECNHTtWd955Z9by9eeff17HHntspjiXpIkTJ6qtrU2//e1vc+6zra1Nzc3NWQ8AQP6YR4EDW7JkiUaOHKmSkhKdcMIJevbZZ/e7/W9+8xudcMIJKikp0ahRo7R06dKCjCuVSmVWJA4aNChzGeLw4cP16quvFqRPBEPBzqD//ve/189+9jNuoQZ0A62trZo9e7amTZuWdUa7vr5ep5xyis4777yc77322ms1btw49e/fXy+++KLmzJmjjRs36oEHHpAkbd261QmD7N+/v2KxmLZu3Zpzv3fddZfmzZt3iEcGAL0X8ygKxvPlBe3WcAcxnmXLlmnmzJlasmSJTj31VP3gBz/Q5MmT9corr2StJtxr48aN+vznP6+6ujr9y7/8i/77v/9bV111lY444ojMfcu7yrHHHqvf/e53GjVqlE466SR997vfVSwW0w9/+EONGjWqS/tCsBTsDPoRRxxRqF0D6KRHHnlEffv2zTz2/XY4kUjowgsvVDqd1pIlSzLty5cvV0NDgxYuXLjffdfX1+v000/XmDFjNH36dC1dulQPPvigtm/fntnGun7d9/39Xtc+Z84c7dy5M/PYvHlzJ44YAMA8CuzfggULdMUVV2j69Ok65phjtHDhQg0bNkz//M//bG6/dOlS1dTUaOHChTrmmGM0ffp0fe1rXyvINeG33HKL0uk9lxF861vf0htvvKHTTjtNTz75pO6///4u7w/BUbAz6N/4xje0dOlS/d3f/R3J7UCR1dbW6qSTTso8Hzp0qKQ9xfkFF1ygjRs3qqGhIevseUNDgzZs2JC15F2Szj//fJ122ml65plnzL5OPvlkSdL69es1cOBAVVVV6YUXXsjaZseOHUokEvu9zWI8Hlc8Hu/MYQIA9sE8it7G933nUo5cvwft7e367W9/69x55pxzztH//M//mPt//vnndc4552S1TZw4UQ8++KASiYSiUTeH5mBNnDgx8+9Ro0bplVde0Xvvvaf+/ftTW/VwBSvQ0+m0/vSnP+n444/Xueeeq4EDB2a97nme6uvrC9U9gH2Ul5ervLw8q21vcf7aa6+psbHR+R2dPXu2pk+fntU2evRo3XfffZoyZUrOvvaGluwNlJswYYLuvPNOvf3225m2p59+WvF4XCeccMIhH5vnGwE8YXdqS3tucJlvpBPlClaz3t+WckPdrJC4sBXgZgQAhY3leWUlbghPeazNaYsYfeQKzEkZQW9J3/2ZhT13n1EvabS17/c5gGCJRDxFIh/NQaUl7lxoff4vcac8lcbdOSoStueePnF3px+0GvOw8faSmNsYDbt9W++15mUrWDNkzMERow9Jak+54/6gzZ1bwyFr3EY/oex+wqFgBbB15Pm++fe3mDzf19atW1VZWZnVftttt+n22293tn/33XeVSqWckwWDBw/OeQmeddne4MGDlUwm9e677+YM0+0qAwYMKOj+EQwFK9BvuOGGzL9/97vfOa9ToAPFk0wmNXXqVDU1NWnFihVKpVKZP0YDBgxQLBZTVVWVGQxXU1OjkSNHStrzTfLq1at15plnqrKyUmvWrFF9fb1qa2sz126dc845+uQnP6lLLrlE99xzj9577z1df/31qqur63SCOwAAQC5VVVVOgNqBVpF0PBt9oEvwrO2t9kP1wQcf6Dvf+Y5WrVqld955J7Pcfa/XX3+9S/tDcBSsQN+4cWOhdg3gEL355ptavny5JGns2LFZrzU2NuqMM87Iaz/xeFzLli3TvHnz1NbWpuHDh6uurk433nhjZptwOKwnnnhCV111lU499VSVlpZq2rRp3MMTAAB0Kc/z8v7yf9CgQQqHw87Z8nfeeSfnJXhVVVXm9pFIxFmJeKimT5+u3/zmN7rkkks0ZMgQlrX3IgUr0IcPH16oXQM4RCNGjMh849sZHd8zbtw4rV69+oDvq6mp0YoVKzrdHwAACB5PwbvveGfL11gsphNOOEErV67UF7/4xUz7ypUrc969ZsKECXr88cez2p5++mmNHz++S68/l6SnnnpKTzzx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AoABOgAAAAAAAcAAHQAAAACAAGCADgAAAABAADBABwAAAAAgABigAwAAAAAQAAzQAQAAAAAIAAboAAAAAAAEAAN0AAAAAAACgAE6AAAAAAABwAAdAAAAAIAAYIAOAAAAAEAAMEAHAAAAACAAGKADAAAAABAADNABAAAAAAgABugAAAAAAAQAA3QAAAAAAAKAAToAAAAAAAHAAB0AAAAAgABggA4AAAAAQAAwQAcAAAAAIAAYoAMAAAAAEAAM0AEAAAAACAAG6AAAAAAABAADdAAAAAAAAoABOgAAAAAAAcAAHQAAAACAAGCADgAAAABAADBABwAAAAAgABigAwAAAAAQAAzQAQAAAAAIAAboAACcJnV1dVq0aJF27Njhe23RokVyHOf0N+oYX/nKVzRp0qTM802bNslxHP3oRz/q1OP+8Y9/VCwW07Zt2zr1OAAABB0DdAAATpO6ujotXrzYHKDPnj1bmzdvPv2Net/27dv1+OOP65vf/OZpP/aHP/xhXXvttZo3b95pPzYAAEHCAB0AgAAYPHiwxo0b12XH//a3v60xY8Zo9OjRXXL8uXPn6j/+4z/0q1/9qkuODwBAEDBABwAUrF27dmnmzJk688wzFY/H9bGPfUz/+I//mFWnublZCxYsUGVlpUpLS9WvXz+NHz9e//7v/+7b35NPPqmxY8eqtLRUJSUlOvvss/WVr3xFUtty8YsuukiS9OUvf1mO48hxHC1atEiSvcR9+PDh+uxnP6tnn31Wo0aNUnFxsT760Y/q+9//vu/Yv/zlLzV+/HgVFRXprLPO0t13362HH35YjuPojTfe6PB9ePvtt/WTn/xE11133Qe+Z42Njbryyis1cOBAvfTSS1lt/+1vf6urr7468z7Nnz9fqVRKr776qiZNmqREIqHhw4frH/7hH3z7/cQnPqGPfexjWr169Qe2AQCAnirS1Q0AAKArvPLKK5owYYKGDh2qBx54QOXl5Xruuef09a9/Xfv27dM999wjSWppadG7776r2267TWeddZZaW1v185//XJ///Of16KOPatasWZKkzZs36wtf+IK+8IUvaNGiRSoqKtKf/vQn1dTUSJJGjRqlRx99VF/+8pd111136TOf+YyktpnzjuzcuVMLFixQdXW1Bg4cqIcfflhf/epXde655+qTn/ykJOm3v/2t/uZv/kYf/vCH9fjjj6ukpESrV6/WD37wg7zei+eff17JZFKXXXZZh/XefPNNffrTn1Zra6s2b96ss88+O+v16dOn64tf/KJuvPFGbdy4Uf/wD/+gZDKpn//857rpppt022236Yc//KHuuOMOnXvuufr85z+ftf3EiRP15JNPyvO8Lr8eHwCALuEBAFCArrzySm/w4MFeQ0NDVvncuXO9oqIi79133zW3S6VSXjKZ9L761a96H//4xzPl3/nOdzxJ3l/+8pecx9y6dasnyXv00Ud9r91zzz1e+4/lYcOGeUVFRd6f/vSnTNnhw4e9fv36eTfeeGOm7Oqrr/Z69erlvfPOO5mydDrtnXfeeZ4kb/fu3Tnb5Hme97Wvfc0rLi72XNfNKq+trfUkeU8++aS3fft2r6Kiwrvkkku8/fv3m21/4IEHssorKys9Sd5TTz2VKUsmk94ZZ5zhff7zn/e145//+Z89Sd7vf//7DtsLAEBPxRJ3AEDBaW5u1gsvvKDPfe5zKikpUSqVyjw+/elPq7m5WVu2bMnUf/LJJ3XxxRerd+/eikQiikajeuSRR/T73/8+U+fI8vXp06fr3/7t3/Q///M/p6StlZWVGjp0aOZ5UVGRPvzhD+tPf/pTpuwXv/iFPvWpT2nAgAGZslAopOnTp+d1jLq6Op1xxhk5Z62fe+45XXLJJfrkJz+pjRs3ql+/fma9z372s1nPP/axj8lxHE2ePDlTFolEdO6552a1/4gzzzxTkk7ZewcAQHfDAB0AUHD279+vVCqllStXKhqNZj0+/elPS5L27dsnSXrqqac0ffp0nXXWWfrBD36gzZs3a+vWrfrKV76i5ubmzD4/+clPat26dUqlUpo1a5YGDx6s888/X//6r/96Um3t37+/rywej+vw4cNZ5zNw4EBfPavMcvjwYRUVFeV8fd26dTp8+LC+9rWvKR6P56zXfuAei8VUUlLi23csFst67444Uu/YcwMAoJBwDToAoOD07dtX4XBY1113nW6++WazzogRIyRJP/jBDzRixAitXbs2a4a5paXFt83UqVM1depUtbS0aMuWLVq2bJlmzpyp4cOHa/z48Z1zMmobxL/99tu+8vr6+ry2HzBgQIf3IF++fLnWrl2ryZMn6yc/+YmuuOKKE25rR959991MewAAKEQM0AEABaekpESXXXaZtm/frgsuuECxWCxnXcdxFIvFsgbn9fX1Zor7EfF4XJdeeqnKysr03HPPafv27Ro/fnxm9vlUzxBfeuml+tnPfqZ9+/ZlBreu6+rJJ5/Ma/uPfvSj+td//Vc1NDSotLTU93pRUZGeeuopffGLX1RVVZXWrl2rqVOnntJzkKT//u//VigU0kc+8pFTvm8AALoDlrgDAArS//k//0d79uzRJZdcoscee0ybNm3S008/reXLl+tTn/pUpt5nP/tZvfrqq7rppptUU1Ojxx9/XP/rf/0vDRo0KGt/3/jGN/SVr3xFa9as0S9+8Qv9+7//u+bNm6doNKpLL71UknTOOeeouLhYa9as0aZNm/Tyyy+rrq7upM/lzjvvVDqd1uWXX65/+7d/09NPP60pU6bo0KFDktquR+/IxIkT5Xmefv3rX+esE41G9a//+q+aOXOmpk2bdtJL9y1btmxRZWWl+vbte8r3DQBAd8AAHQBQkM477zxt27ZN559/vu666y5dccUV+upXv6of/ehHuvzyyzP1vvzlL+vb3/62nnnmGX3605/Wfffdp+rqas2cOTNrf2PHjlV9fb3uuOMOXXHFFbrhhhtUXFysmpoa/dVf/ZWktpn773//+9q/f7+uuOIKXXTRRfre97530udy4YUXauPGjSouLtasWbN0ww036K/+6q900003SZI5K36siy++WMOHD+9wVYDUNtB/5JFHdNNNN+mLX/yiHn744ZNu+xHvvfeeXnjhBV177bWnbJ8AAHQ3jud5Xlc3AgAAnHpXXHGF3njjDf3xj3/8wLoPPPCAli5dqv/5n/9RcXHxaWhdtkceeUS33HKL9u7dyww6AKBgMYMOAEAPMH/+fD3xxBPatGmTnnrqKV111VXauHGjqqur89r+5ptvVmlpqf7xH/+xk1vql0qldN9992nhwoUMzgEABY2QOAAAeoB0Oq1vfOMbqq+vl+M4Ou+88/TEE0/oi1/8Yl7bFxUV6YknntD27ds7uaV+e/fu1Re/+EUtWLDgtB8bAIAgYYk7AAAAAAABwBJ3AAAAAAACgAE6AAAAAAABwAAdAAAAAIAAYIAOAAAAAEAAMEAHAAAAACAAGKADAAAAABAADNABAAAAAAgABugAAAAAAAQAA3QAAAAAAALg/wdXR3c59SMW9AAAAABJRU5ErkJggg==", + "text/html": [ + "\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " + ], + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# If the figure doesn't pop up, it is because the holoviews plot was run immediately after and interferred with \n", + "# matplotlib. Just rerun this cell and it will be fixed\n", + "%matplotlib widget\n", + "\n", + "# Assigning the min, max lon, lat coords of the lower-left and upper-right corners of our bounding box \n", + "# around the lake's buffer polygon\n", + "lon_min = gdf_sub.geometry.bounds.minx\n", + "lon_max = gdf_sub.geometry.bounds.maxx\n", + "lat_min = gdf_sub.geometry.bounds.miny\n", + "lat_max = gdf_sub.geometry.bounds.maxy\n", + "\n", + "# Now we re-project the lon, lat into x, y coords in the 3413 CRS, which ATL15 uses\n", + "xmin, ymin = ll2ps(lon_min, lat_min)\n", + "xmax, ymax = ll2ps(lon_max, lat_max)\n", + "\n", + "# Use our plotting fuction to plot up the data based on min, max x, y bounds\n", + "plot_icesat2_atl15(xmin, xmax, ymin, ymax, ATL15_dh)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "f6a59c54-792e-4a6b-8cbb-590d555405a3", + "metadata": { + "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.2'.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.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.3/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.3/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.3/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.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.2.min.js\", \"https://cdn.holoviz.org/panel/1.2.3/dist/panel.min.js\", \"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.2'.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.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.3/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.3/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.3/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.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.2.min.js\", \"https://cdn.holoviz.org/panel/1.2.3/dist/panel.min.js\", \"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": {}, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": {}, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.holoviews_exec.v0+json": "", + "text/html": [ + "
\n", + "
\n", + "
\n", + "" + ], + "text/plain": [ + "Column\n", + " [0] HoloViews(DynamicMap, widget_location='bottom', widget_type='scrubber')\n", + " [1] WidgetBox(align=('center', 'end'))\n", + " [0] Player(end=20, width=550)" + ] + }, + "execution_count": 35, + "metadata": { + "application/vnd.holoviews_exec.v0+json": { + "id": "p1084" + } + }, + "output_type": "execute_result" + } + ], + "source": [ + "# Let's explore plotting the data interactively using Xarray and Holoviews\n", + "hvplot.extension('matplotlib')\n", + "divnorm = colors.TwoSlopeNorm(vmin=-0.25, vcenter=0, vmax=1.25)\n", + "ATL15_dh['delta_h'].hvplot(groupby='time', cmap='coolwarm_r', norm=divnorm, invert=True, \n", + " width=(ATL15_dh['x'].max()-ATL15_dh['x'].min())/3e3, height=(ATL15_dh['y'].max()-ATL15_dh['y'].min())/3e3, \n", + " widget_type='scrubber', widget_location='bottom')" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "64f4a56e-23dd-492d-b433-14412e22590a", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# clean up environment by deleting intermediary files\n", + "os.remove('Flade_Isblink_poly.gpkg')" + ] + }, + { + "cell_type": "markdown", + "id": "373dba30-f76d-4eea-8a04-8105531fab0a", + "metadata": {}, + "source": [ + "## Streaming cloud-hosted data via earthaccess\n", + "We will next use earthaccess to authenicate for NASA EarthData, and search and stream cloud-hosted data directly. " + ] + }, + { + "cell_type": "markdown", + "id": "869a0c7c-cb2f-4594-90f0-1210e0c8f812", + "metadata": {}, + "source": [ + "\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "339bcb88-0bcc-40bc-8a83-fdef598b0c91", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Using earthaccess v0.10.0\n" + ] + } + ], + "source": [ + "# Import earthaccess Library and view version\n", + "import earthaccess\n", + "print(f\"Using earthaccess v{earthaccess.__version__}\")" + ] + }, + { + "cell_type": "markdown", + "id": "9669aa7c-325b-4ce3-850f-01d272c73b01", + "metadata": {}, + "source": [ + "### Log into NASA's Earthdata using the earthaccess package" + ] + }, + { + "cell_type": "markdown", + "id": "16c436c5-9a3c-487c-b196-a67e80e01b3f", + "metadata": {}, + "source": [ + "There are multiple ways to provide your Earthdata credentials via [earthaccess](https://nsidc.github.io/earthaccess/). The [earthaccess authentication class](https://nsidc.github.io/earthaccess/tutorials/restricted-datasets/#auth) automatically tries three methods for getting user credentials to log in:\n", + "1) with `EARTHDATA_USERNAME` and `EARTHDATA_PASSWORD` environment variables\n", + "2) through an interactive, in-notebook login (used below); passwords are not shown plain text\n", + "3) with stored credentials in a .netrc file (not recommended for security reasons)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "4be86745-179a-4010-b033-3e2e10438fdd", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n" + ] + } + ], + "source": [ + "# Try to authenticate\n", + "auth = earthaccess.login()\n", + "print(auth.authenticated)" + ] + }, + { + "cell_type": "markdown", + "id": "51385d73-f828-48ba-9b69-a93473adfea0", + "metadata": {}, + "source": [ + "### Search for cloud-available datasets from NASA" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "c0e74d67-7dc5-4404-a8fe-fbec06801bca", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'concept-id': 'C1595422627-ASF',\n", + " 'file-type': '',\n", + " 'get-data': [],\n", + " 'short-name': 'SENTINEL-1_INTERFEROGRAMS',\n", + " 'version': '1'}\n", + "{'cloud-info': {'Region': 'us-west-2',\n", + " 'S3BucketAndObjectPrefixNames': ['s3://lp-prod-protected/HLSS30.020',\n", + " 's3://lp-prod-public/HLSS30.020'],\n", + " 'S3CredentialsAPIDocumentationURL': 'https://data.lpdaac.earthdatacloud.nasa.gov/s3credentialsREADME',\n", + " 'S3CredentialsAPIEndpoint': 'https://data.lpdaac.earthdatacloud.nasa.gov/s3credentials'},\n", + " 'concept-id': 'C2021957295-LPCLOUD',\n", + " 'file-type': \"[{'Format': 'Cloud Optimized GeoTIFF (COG)', 'FormatType': \"\n", + " \"'Native', 'Media': ['Earthdata Cloud', 'HTTPS'], \"\n", + " \"'AverageFileSize': 20, 'AverageFileSizeUnit': 'MB', \"\n", + " \"'TotalCollectionFileSizeBeginDate': \"\n", + " \"'2015-11-28T00:00:00.000Z'}]\",\n", + " 'get-data': ['https://search.earthdata.nasa.gov/search?q=C2021957295-LPCLOUD',\n", + " 'https://appeears.earthdatacloud.nasa.gov/'],\n", + " 'short-name': 'HLSS30',\n", + " 'version': '2.0'}\n" + ] + } + ], + "source": [ + "# Using a keyword search\n", + "\n", + "from pprint import pprint\n", + "datasets = earthaccess.search_datasets(keyword=\"SENTINEL\",\n", + " cloud_hosted=True)\n", + "\n", + "for dataset in datasets[0:2]:\n", + " pprint(dataset.summary())" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "197a6bb3-9ca7-4353-99e8-b3acb0691f53", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'cloud-info': {'Region': 'us-west-2',\n", + " 'S3BucketAndObjectPrefixNames': ['s3://lp-prod-protected/HLSS30.020',\n", + " 's3://lp-prod-public/HLSS30.020'],\n", + " 'S3CredentialsAPIDocumentationURL': 'https://data.lpdaac.earthdatacloud.nasa.gov/s3credentialsREADME',\n", + " 'S3CredentialsAPIEndpoint': 'https://data.lpdaac.earthdatacloud.nasa.gov/s3credentials'},\n", + " 'concept-id': 'C2021957295-LPCLOUD',\n", + " 'file-type': \"[{'Format': 'Cloud Optimized GeoTIFF (COG)', 'FormatType': \"\n", + " \"'Native', 'Media': ['Earthdata Cloud', 'HTTPS'], \"\n", + " \"'AverageFileSize': 20, 'AverageFileSizeUnit': 'MB', \"\n", + " \"'TotalCollectionFileSizeBeginDate': \"\n", + " \"'2015-11-28T00:00:00.000Z'}]\",\n", + " 'get-data': ['https://search.earthdata.nasa.gov/search?q=C2021957295-LPCLOUD',\n", + " 'https://appeears.earthdatacloud.nasa.gov/'],\n", + " 'short-name': 'HLSS30',\n", + " 'version': '2.0'}\n", + "('The Harmonized Landsat Sentinel-2 (HLS) project provides consistent surface '\n", + " 'reflectance data from the Operational Land Imager (OLI) aboard the joint '\n", + " 'NASA/USGS Landsat 8 satellite and the Multi-Spectral Instrument (MSI) aboard '\n", + " 'Europe’s Copernicus Sentinel-2A and Sentinel-2B satellites. The combined '\n", + " 'measurement enables global observations of the land every 2–3 days at '\n", + " '30-meter (m) spatial resolution. The HLS project uses a set of algorithms to '\n", + " 'obtain seamless products from OLI and MSI that include atmospheric '\n", + " 'correction, cloud and cloud-shadow masking, spatial co-registration and '\n", + " 'common gridding, illumination and view angle normalization, and spectral '\n", + " 'bandpass adjustment. \\r\\n'\n", + " '\\r\\n'\n", + " 'The HLSS30 product provides 30-m Nadir Bidirectional Reflectance '\n", + " 'Distribution Function (BRDF)-Adjusted Reflectance (NBAR) and is derived from '\n", + " 'Sentinel-2A and Sentinel-2B MSI data products. The HLSS30 and HLSL30 '\n", + " 'products are gridded to the same resolution and Military Grid Reference '\n", + " 'System (MGRS) '\n", + " '(https://hls.gsfc.nasa.gov/products-description/tiling-system/) tiling '\n", + " 'system, and thus are “stackable” for time series analysis.\\r\\n'\n", + " '\\r\\n'\n", + " 'The HLSS30 product is provided in Cloud Optimized GeoTIFF (COG) format, and '\n", + " 'each band is distributed as a separate COG. There are 13 bands included in '\n", + " 'the HLSS30 product along with four angle bands and a quality assessment (QA) '\n", + " 'band. See the User Guide for a more detailed description of the individual '\n", + " 'bands provided in the HLSS30 product.\\r\\n')\n" + ] + } + ], + "source": [ + "# Using a known short name\n", + "datasets = earthaccess.search_datasets(short_name=\"HLSS30\",\n", + " cloud_hosted=True)\n", + "for dataset in datasets:\n", + " pprint(dataset.summary())\n", + " pprint(dataset.abstract())" + ] + }, + { + "cell_type": "markdown", + "id": "86364ad2-5b96-4619-b283-82e56e9b6790", + "metadata": {}, + "source": [ + "### Searching for granules (files) from a given collection (dataset)\n", + "earthaccess has two different ways of querying for data:\n", + "1) We can build a query object or \n", + "2) we can use the top level API. \n", + "\n", + "The difference is that the query object is a bit more flexible and we don't retrieve the metadata from CMR until we execute the `.get()` or `.get_all()` methods." + ] + }, + { + "cell_type": "markdown", + "id": "76f6b3bc-7c40-43af-b03d-31616f0fae7d", + "metadata": {}, + "source": [ + "Let's use [bboxfinder.com](http://bboxfinder.com) to get the extent of our bounding box and enter it into our bounding box input below. You are also welcome to put in a bounding box you already have available. You can uncomment the Iceland bounding box if you don't want to find your own. Order should be: `min_lon, min_lat, max_lon, max_lat`" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "c61b74b9-6a08-4938-8ed1-3ef8545eae43", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'concept_id': ['C2021957295-LPCLOUD'],\n", + " 'bounding_box': '-22.1649,63.3052,-11.9366,65.597',\n", + " 'temporal': ['2020-01-01T00:00:00Z,2023-01-01T23:59:59Z']}" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Using a specific concept-id, which is unique to the specific product and version\n", + "\n", + "# bbox for ~Iceland is -22.1649, 63.3052, -11.9366, 65.5970 \n", + "granules_query = earthaccess.granule_query().cloud_hosted(True) \\\n", + " .concept_id(\"C2021957295-LPCLOUD\") \\\n", + " .bounding_box(-22.1649, 63.3052, -11.9366, 65.5970) \\\n", + " .temporal(\"2020-01-01\",\"2023-01-01\")\n", + "granules_query.params" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "ef5ba481-f579-4a5c-a34b-8f19097ae1b6", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "5380" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "granules_query.hits()" + ] + }, + { + "cell_type": "markdown", + "id": "38559fcd-4e61-4b7c-bcfb-f8e15ac3b6e6", + "metadata": {}, + "source": [ + "Earthaccess has many methods we can use for our search. For a complete list of the parameters we can use, go to [https://nsidc.github.io/earthaccess/user-reference/granules/granules-query/](https://nsidc.github.io/earthaccess/user-reference/granules/granules-query/)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "c92d48d0-524c-4a08-8845-4c1a8326c4d1", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B09.tif',\n", + " 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B05.tif',\n", + " 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B10.tif',\n", + " 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B03.tif',\n", + " 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B08.tif',\n", + " 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B06.tif',\n", + " 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B07.tif',\n", + " 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.Fmask.tif',\n", + " 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B8A.tif',\n", + " 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.SAA.tif',\n", + " 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.VAA.tif',\n", + " 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.SZA.tif',\n", + " 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B02.tif',\n", + " 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B01.tif',\n", + " 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B11.tif',\n", + " 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B04.tif',\n", + " 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.VZA.tif',\n", + " 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2020048T131259.v2.0/HLS.S30.T27VWL.2020048T131259.v2.0.B12.tif']" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "granule = granules_query.get(1)[0]\n", + "granule.data_links()" + ] + }, + { + "cell_type": "markdown", + "id": "4065b490-7f8d-46be-b35e-3b5e90c734b4", + "metadata": {}, + "source": [ + "### Downloading granules" + ] + }, + { + "cell_type": "markdown", + "id": "873ef4ad-f8b9-4032-b9e2-0272f096b9a9", + "metadata": { + "jp-MarkdownHeadingCollapsed": true, + "tags": [] + }, + "source": [ + "**IMPORTANT**: Some datasets will require users to accept an EULA (end user license agreement), it is advisable trying to download a single granule using our browser first and see if we get redirected to a NASA form.\n", + "![NASA end user license agreement)](images/EULA.png)" + ] + }, + { + "cell_type": "markdown", + "id": "945e661c-baf1-4d5a-8821-07ef9446829a", + "metadata": {}, + "source": [ + "### Streaming data with earthaccess\n", + "If we have enough RAM (memory), we can load our granules from an S3 bucket into memory. Earthaccess works with fsspec (xarray, h5netcdf) at the moment, so this is task is better suited for Level 3 and Level 4 netcdf datasets.\n", + "\n", + "We are going to select a few granules for the same day in February for 5 years." + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "a7f173ef-fb02-4d83-8c35-2fc1b4efd699", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Querying 2018\n", + "Querying 2019\n", + "Querying 2020\n", + "Querying 2021\n", + "Querying 2022\n" + ] + } + ], + "source": [ + "iceland_bbox = (-22.1649, 63.3052, -11.9366, 65.5970)\n", + "# We are going to save our granules for each year on this list\n", + "granule_list = []\n", + "\n", + "for year in range(2018, 2023):\n", + " print(f\"Querying {year}\")\n", + " granules = earthaccess.search_data(\n", + " short_name = \"HLSS30\",\n", + " bounding_box = iceland_bbox,\n", + " temporal = (f\"{year}-02-17\", f\"{year}-02-18\")\n", + " )\n", + " granule_list.extend(granules)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "55302fcc-8396-420f-b3ea-f0587ee5efa1", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
\n", + " \n", + "
\n", + " \n", + " " + ], + "text/plain": [ + "Collection: {'EntryTitle': 'HLS Sentinel-2 Multi-spectral Instrument Surface Reflectance Daily Global 30m v2.0'}\n", + "Spatial coverage: {'HorizontalSpatialDomain': {'Geometry': {'GPolygons': [{'Boundary': {'Points': [{'Longitude': -20.77975676, 'Latitude': 63.04157071}, {'Longitude': -19.80583813, 'Latitude': 64.02224734}, {'Longitude': -21.00040929, 'Latitude': 64.02715388}, {'Longitude': -21.00039541, 'Latitude': 63.041742}, {'Longitude': -20.77975676, 'Latitude': 63.04157071}]}}]}}}\n", + "Temporal coverage: {'RangeDateTime': {'BeginningDateTime': '2018-02-17T13:12:50.460Z', 'EndingDateTime': '2018-02-17T13:12:50.460Z'}}\n", + "Size(MB): 72.62060165405273\n", + "Data: ['https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.VAA.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B06.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B8A.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B10.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B08.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B07.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.SZA.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B02.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B04.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B12.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B05.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B09.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.SAA.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B01.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.VZA.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.Fmask.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B03.tif', 'https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.B11.tif']" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "scene = granule_list[0]\n", + "scene" + ] + }, + { + "cell_type": "markdown", + "id": "92001133-79db-416f-8664-3ba9b8d6e5d0", + "metadata": {}, + "source": [ + "Retrieve the data link. \"Direct\" indicates an S3 bucket in the cloud, which you can stream from. \"External\" indicates an HTTPS link which is not cloud-based. Direct access link will allow you to stream the data, but you can also open from HTTPS into memory if it's the right file format (generally formats that Xarray can open). " + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "1fcca3fa-1319-4a1c-94de-50fb071e06c0", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Direct access links: s3://lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.VAA.tif\n", + "External links: https://data.lpdaac.earthdatacloud.nasa.gov/lp-prod-protected/HLSS30.020/HLS.S30.T27VWL.2018048T131249.v2.0/HLS.S30.T27VWL.2018048T131249.v2.0.VAA.tif\n" + ] + } + ], + "source": [ + "print(\"Direct access links: \", scene.data_links(access=\"direct\")[0])\n", + "print(\"External links: \", scene.data_links(access=\"external\")[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "41e1cbfc-8bdc-4a10-b7de-14185ab86c1d", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "1f3c032272394847a6f096cadb22fd79", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "QUEUEING TASKS | : 0%| | 0/18 [00:00\n", + "
\n", + " Figure\n", + "
\n", + " \n", + " \n", + " " + ], + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib widget\n", + "import rasterio as rio\n", + "from rasterio.plot import show\n", + "import xarray as xr\n", + "\n", + "# Read and plot with grid coordinates \n", + "with rio.open(earthaccess.open(granule_list[1:2])[0]) as src:\n", + " fig, ax = plt.subplots(figsize=(9,8))\n", + "\n", + " # To plot\n", + " show(src,1)\n", + "\n", + " # To open data into a numpy array\n", + " profile = src.profile\n", + " arr = src.read(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "d55122f3-3989-4589-9b0f-9c378a782e21", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "61ed02c346354a78bff31d32305836d8", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "QUEUEING TASKS | : 0%| | 0/18 [00:00\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 54MB\n",
+       "Dimensions:      (band: 1, x: 3660, y: 3660)\n",
+       "Coordinates:\n",
+       "  * band         (band) int64 8B 1\n",
+       "  * x            (x) float64 29kB 4e+05 4e+05 4e+05 ... 5.097e+05 5.097e+05\n",
+       "  * y            (y) float64 29kB 7.1e+06 7.1e+06 7.1e+06 ... 6.99e+06 6.99e+06\n",
+       "    spatial_ref  int64 8B ...\n",
+       "Data variables:\n",
+       "    band_data    (band, y, x) float32 54MB ...
" + ], + "text/plain": [ + " Size: 54MB\n", + "Dimensions: (band: 1, x: 3660, y: 3660)\n", + "Coordinates:\n", + " * band (band) int64 8B 1\n", + " * x (x) float64 29kB 4e+05 4e+05 4e+05 ... 5.097e+05 5.097e+05\n", + " * y (y) float64 29kB 7.1e+06 7.1e+06 7.1e+06 ... 6.99e+06 6.99e+06\n", + " spatial_ref int64 8B ...\n", + "Data variables:\n", + " band_data (band, y, x) float32 54MB ..." + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hls_scene = xr.open_dataset(earthaccess.open(granule_list[1:2])[0], engine='rasterio')\n", + "hls_scene" + ] + }, + { + "cell_type": "markdown", + "id": "ee74d663-1699-4ea6-88e2-14eeba18f97b", + "metadata": {}, + "source": [ + "### Working with legacy data formats" + ] + }, + { + "cell_type": "markdown", + "id": "4f915ebe-ff0f-425d-8594-ba89cd9dbb52", + "metadata": {}, + "source": [ + "**MOD07_L2** is an HDF EOS dataset providing atmospheric profiles from the MODerate Resolution Imaging Spectroradiometer instrument on the Terra satelite. You could use this data for providing an atmospheric correction for imagery to get a surface reflectance measurement. \n", + "\n", + "It is in a very old HDF data format and although streaming is technically possible, the only libraries that can open HDF EOS expect file paths not remote file systems like the one used by xarray (fsspec). So instead will access the netCDF endpoint via Opendap to download the granules instead of streaming them." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "b5577154-f15c-464c-b68a-57a280d484d1", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "iceland_bbox = (-22.1649, 63.3052, -11.9366, 65.5970)\n", + "\n", + "granules = earthaccess.search_data(\n", + " short_name = \"MOD07_L2\",\n", + " bounding_box = iceland_bbox,\n", + " temporal = (f\"2020-01-01\", f\"2020-01-02\")\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "a89d0974-ecfd-45c5-9c6d-7a1595c167b2", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Direct access link: ['s3://prod-lads/MOD07_L2/MOD07_L2.A2020001.0015.061.2020002183420.hdf']\n", + "External link: ['https://data.laadsdaac.earthdatacloud.nasa.gov/prod-lads/MOD07_L2/MOD07_L2.A2020001.0015.061.2020002183420.hdf']\n" + ] + } + ], + "source": [ + "print(\"Direct access link: \", granules[0].data_links(access=\"direct\"))\n", + "print(\"External link: \", granules[0].data_links(access=\"external\"))" + ] + }, + { + "cell_type": "markdown", + "id": "cfbfb54d-798a-4bda-88c0-6461bb2c026c", + "metadata": {}, + "source": [ + "If we try to open these HDF files in Xarray:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "53a520f7-fb86-40ba-aee6-6a98e7615ce7", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ac6b37eb38ca45cab0f90f40eb5b2443", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "QUEUEING TASKS | : 0%| | 0/3 [00:00 2\u001b[0m mod07 \u001b[38;5;241m=\u001b[39m \u001b[43mxr\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen_mfdataset\u001b[49m\u001b[43m(\u001b[49m\u001b[43mearthaccess\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen\u001b[49m\u001b[43m(\u001b[49m\u001b[43mgranules\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m:\u001b[49m\u001b[38;5;241;43m3\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mengine\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mrasterio\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.11/site-packages/xarray/backends/api.py:1077\u001b[0m, in \u001b[0;36mopen_mfdataset\u001b[0;34m(paths, chunks, concat_dim, compat, preprocess, engine, data_vars, coords, combine, parallel, join, attrs_file, combine_attrs, **kwargs)\u001b[0m\n\u001b[1;32m 1074\u001b[0m open_ \u001b[38;5;241m=\u001b[39m open_dataset\n\u001b[1;32m 1075\u001b[0m getattr_ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m\n\u001b[0;32m-> 1077\u001b[0m datasets \u001b[38;5;241m=\u001b[39m \u001b[43m[\u001b[49m\u001b[43mopen_\u001b[49m\u001b[43m(\u001b[49m\u001b[43mp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mopen_kwargs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mp\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mpaths\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 1078\u001b[0m closers \u001b[38;5;241m=\u001b[39m [getattr_(ds, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_close\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mfor\u001b[39;00m ds \u001b[38;5;129;01min\u001b[39;00m datasets]\n\u001b[1;32m 1079\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m preprocess \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.11/site-packages/xarray/backends/api.py:1077\u001b[0m, in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1074\u001b[0m open_ \u001b[38;5;241m=\u001b[39m open_dataset\n\u001b[1;32m 1075\u001b[0m getattr_ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m\n\u001b[0;32m-> 1077\u001b[0m datasets \u001b[38;5;241m=\u001b[39m [\u001b[43mopen_\u001b[49m\u001b[43m(\u001b[49m\u001b[43mp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mopen_kwargs\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m p \u001b[38;5;129;01min\u001b[39;00m paths]\n\u001b[1;32m 1078\u001b[0m closers \u001b[38;5;241m=\u001b[39m [getattr_(ds, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_close\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mfor\u001b[39;00m ds \u001b[38;5;129;01min\u001b[39;00m datasets]\n\u001b[1;32m 1079\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m preprocess \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.11/site-packages/xarray/backends/api.py:588\u001b[0m, in \u001b[0;36mopen_dataset\u001b[0;34m(filename_or_obj, engine, chunks, cache, decode_cf, mask_and_scale, decode_times, decode_timedelta, use_cftime, concat_characters, decode_coords, drop_variables, inline_array, chunked_array_type, from_array_kwargs, backend_kwargs, **kwargs)\u001b[0m\n\u001b[1;32m 576\u001b[0m decoders \u001b[38;5;241m=\u001b[39m _resolve_decoders_kwargs(\n\u001b[1;32m 577\u001b[0m decode_cf,\n\u001b[1;32m 578\u001b[0m open_backend_dataset_parameters\u001b[38;5;241m=\u001b[39mbackend\u001b[38;5;241m.\u001b[39mopen_dataset_parameters,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 584\u001b[0m decode_coords\u001b[38;5;241m=\u001b[39mdecode_coords,\n\u001b[1;32m 585\u001b[0m )\n\u001b[1;32m 587\u001b[0m overwrite_encoded_chunks \u001b[38;5;241m=\u001b[39m kwargs\u001b[38;5;241m.\u001b[39mpop(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124moverwrite_encoded_chunks\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m)\n\u001b[0;32m--> 588\u001b[0m backend_ds \u001b[38;5;241m=\u001b[39m \u001b[43mbackend\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen_dataset\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 589\u001b[0m \u001b[43m \u001b[49m\u001b[43mfilename_or_obj\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 590\u001b[0m \u001b[43m \u001b[49m\u001b[43mdrop_variables\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdrop_variables\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 591\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mdecoders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 592\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 593\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 594\u001b[0m ds \u001b[38;5;241m=\u001b[39m _dataset_from_backend_dataset(\n\u001b[1;32m 595\u001b[0m backend_ds,\n\u001b[1;32m 596\u001b[0m filename_or_obj,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 606\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs,\n\u001b[1;32m 607\u001b[0m )\n\u001b[1;32m 608\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m ds\n", + "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.11/site-packages/rioxarray/xarray_plugin.py:58\u001b[0m, in \u001b[0;36mRasterioBackend.open_dataset\u001b[0;34m(self, filename_or_obj, drop_variables, parse_coordinates, lock, masked, mask_and_scale, variable, group, default_name, decode_coords, decode_times, decode_timedelta, band_as_variable, open_kwargs)\u001b[0m\n\u001b[1;32m 56\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m open_kwargs \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 57\u001b[0m open_kwargs \u001b[38;5;241m=\u001b[39m {}\n\u001b[0;32m---> 58\u001b[0m rds \u001b[38;5;241m=\u001b[39m \u001b[43m_io\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen_rasterio\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 59\u001b[0m \u001b[43m \u001b[49m\u001b[43mfilename_or_obj\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 60\u001b[0m \u001b[43m \u001b[49m\u001b[43mparse_coordinates\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparse_coordinates\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 61\u001b[0m \u001b[43m \u001b[49m\u001b[43mcache\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 62\u001b[0m \u001b[43m \u001b[49m\u001b[43mlock\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlock\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 63\u001b[0m \u001b[43m \u001b[49m\u001b[43mmasked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmasked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 64\u001b[0m \u001b[43m \u001b[49m\u001b[43mmask_and_scale\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmask_and_scale\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 65\u001b[0m \u001b[43m \u001b[49m\u001b[43mvariable\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mvariable\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 66\u001b[0m \u001b[43m \u001b[49m\u001b[43mgroup\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgroup\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 67\u001b[0m \u001b[43m \u001b[49m\u001b[43mdefault_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdefault_name\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 68\u001b[0m \u001b[43m \u001b[49m\u001b[43mdecode_times\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdecode_times\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 69\u001b[0m \u001b[43m \u001b[49m\u001b[43mdecode_timedelta\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdecode_timedelta\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 70\u001b[0m \u001b[43m \u001b[49m\u001b[43mband_as_variable\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mband_as_variable\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 71\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mopen_kwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 72\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 73\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(rds, xarray\u001b[38;5;241m.\u001b[39mDataArray):\n\u001b[1;32m 74\u001b[0m dataset \u001b[38;5;241m=\u001b[39m rds\u001b[38;5;241m.\u001b[39mto_dataset()\n", + "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.11/site-packages/rioxarray/_io.py:1128\u001b[0m, in \u001b[0;36mopen_rasterio\u001b[0;34m(filename, parse_coordinates, chunks, cache, lock, masked, mask_and_scale, variable, group, default_name, decode_times, decode_timedelta, band_as_variable, **open_kwargs)\u001b[0m\n\u001b[1;32m 1126\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1127\u001b[0m manager \u001b[38;5;241m=\u001b[39m URIManager(file_opener, filename, mode\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m\"\u001b[39m, kwargs\u001b[38;5;241m=\u001b[39mopen_kwargs)\n\u001b[0;32m-> 1128\u001b[0m riods \u001b[38;5;241m=\u001b[39m \u001b[43mmanager\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43macquire\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1129\u001b[0m captured_warnings \u001b[38;5;241m=\u001b[39m rio_warnings\u001b[38;5;241m.\u001b[39mcopy()\n\u001b[1;32m 1131\u001b[0m \u001b[38;5;66;03m# raise the NotGeoreferencedWarning if applicable\u001b[39;00m\n", + "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.11/site-packages/rioxarray/_io.py:263\u001b[0m, in \u001b[0;36mURIManager.acquire\u001b[0;34m(self, needs_lock)\u001b[0m\n\u001b[1;32m 259\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_local\u001b[38;5;241m.\u001b[39mthread_manager \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 260\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_local\u001b[38;5;241m.\u001b[39mthread_manager \u001b[38;5;241m=\u001b[39m ThreadURIManager(\n\u001b[1;32m 261\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_opener, \u001b[38;5;241m*\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_args, mode\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_mode, kwargs\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_kwargs\n\u001b[1;32m 262\u001b[0m )\n\u001b[0;32m--> 263\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_local\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mthread_manager\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfile_handle\u001b[49m\n", + "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.11/site-packages/rioxarray/_io.py:219\u001b[0m, in \u001b[0;36mThreadURIManager.file_handle\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 217\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_file_handle \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 218\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_file_handle\n\u001b[0;32m--> 219\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_file_handle \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_opener\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_args\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_mode\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 220\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_file_handle\n", + "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.11/site-packages/rasterio/env.py:451\u001b[0m, in \u001b[0;36mensure_env_with_credentials..wrapper\u001b[0;34m(*args, **kwds)\u001b[0m\n\u001b[1;32m 448\u001b[0m session \u001b[38;5;241m=\u001b[39m DummySession()\n\u001b[1;32m 450\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m env_ctor(session\u001b[38;5;241m=\u001b[39msession):\n\u001b[0;32m--> 451\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.11/site-packages/rasterio/__init__.py:242\u001b[0m, in \u001b[0;36mopen\u001b[0;34m(fp, mode, driver, width, height, count, crs, transform, dtype, nodata, sharing, **kwargs)\u001b[0m\n\u001b[1;32m 240\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m mode \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(fp, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mread\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[1;32m 241\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m have_vsi_plugin:\n\u001b[0;32m--> 242\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mFilePath\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfp\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopen\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdriver\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdriver\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msharing\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msharing\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 243\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 244\u001b[0m memfile \u001b[38;5;241m=\u001b[39m MemoryFile(fp\u001b[38;5;241m.\u001b[39mread())\n", + "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.11/site-packages/rasterio/env.py:398\u001b[0m, in \u001b[0;36mensure_env..wrapper\u001b[0;34m(*args, **kwds)\u001b[0m\n\u001b[1;32m 395\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(f)\n\u001b[1;32m 396\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapper\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwds):\n\u001b[1;32m 397\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m local\u001b[38;5;241m.\u001b[39m_env:\n\u001b[0;32m--> 398\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 399\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 400\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m Env\u001b[38;5;241m.\u001b[39mfrom_defaults():\n", + "File \u001b[0;32m/srv/conda/envs/notebook/lib/python3.11/site-packages/rasterio/io.py:236\u001b[0m, in \u001b[0;36m_FilePath.open\u001b[0;34m(self, driver, sharing, **kwargs)\u001b[0m\n\u001b[1;32m 233\u001b[0m \u001b[38;5;66;03m# Assume we were given a non-empty file-like object\u001b[39;00m\n\u001b[1;32m 234\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mVSI path: \u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(mempath\u001b[38;5;241m.\u001b[39mpath))\n\u001b[0;32m--> 236\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mDatasetReader\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmempath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdriver\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdriver\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msharing\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msharing\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32mrasterio/_base.pyx:312\u001b[0m, in \u001b[0;36mrasterio._base.DatasetBase.__init__\u001b[0;34m()\u001b[0m\n", + "\u001b[0;31mRasterioIOError\u001b[0m: '/vsipythonfilelike/e7d572c7-7383-4b3d-88be-c88b34e9ff24/e7d572c7-7383-4b3d-88be-c88b34e9ff24' not recognized as being in a supported file format." + ] + } + ], + "source": [ + "# This creates an anticipated error\n", + "mod07 = xr.open_mfdataset(earthaccess.open(granules[0:3]), engine='rasterio')" + ] + }, + { + "cell_type": "markdown", + "id": "1d208b07-e4cf-4eb7-bb40-7a3da46db3e4", + "metadata": {}, + "source": [ + "We notice that the access occurs quickly, but xarray is unable to recognize the legacy file format. HDF files are remarkably hard to open. You must download the files and open using pyhdf to open them using code like this: \\\n", + "`from pyhdf.SD import SD,SDC` \\\n", + "`mod07_l2 = SD(MODfile, SDC.READ)`" + ] + }, + { + "cell_type": "markdown", + "id": "ec910c79-4b11-43d9-9dbd-7c1d5113ebd3", + "metadata": {}, + "source": [ + "We do have another option to convert hdf to nc4 files during download so that we can open the files in Xarray." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "05800373-0640-44e2-9f7b-09c39ce03059", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['https://ladsweb.modaps.eosdis.nasa.gov/opendap/RemoteResources/laads/allData/61/MOD07_L2/2020/001/MOD07_L2.A2020001.0015.061.2020002183420.hdf.html']" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# We are going to retrieve the html endpoint link for one granule\n", + "granules[0]._filter_related_links(\"USE SERVICE API\")" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "82568336-a8be-4fa2-9135-c5bebb4148c2", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'https://ladsweb.modaps.eosdis.nasa.gov/opendap/RemoteResources/laads/allData/61/MOD07_L2/2020/001/MOD07_L2.A2020001.0015.061.2020002183420.hdf.nc4'" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "netcdf_list = [g._filter_related_links(\"USE SERVICE API\")[0].replace(\".html\", \".nc4\") for g in granules]\n", + "netcdf_list[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "5116ef2f-e27f-49a2-9e3f-07f70337226f", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "4e07683e3ab74d7385c6671a397fff3a", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "QUEUEING TASKS | : 0%| | 0/3 [00:00 3\u001b[0m dir_list \u001b[38;5;241m=\u001b[39m \u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlistdir\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpath\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28mprint\u001b[39m(dir_list)\n", + "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'test_data'" + ] + } + ], + "source": [ + "# Get the file names\n", + "path = \"test_data\"\n", + "dir_list = os.listdir(path)\n", + "print(dir_list)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9ec69a26-cde6-4d9f-8d7a-1092b548910a", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "cd test_data" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "207cc666-1583-4040-98d6-ae8dd041ddef", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset> Size: 146MB\n",
+       "Dimensions:                            (Band_Number: 12, Pressure_Level: 20,\n",
+       "                                        Cell_Along_Swath: 406,\n",
+       "                                        Cell_Across_Swath: 270,\n",
+       "                                        Output_Parameter: 10,\n",
+       "                                        Water_Vapor_QA_Bytes: 5)\n",
+       "Coordinates:\n",
+       "  * Band_Number                        (Band_Number) int32 48B 24 25 ... 35 36\n",
+       "  * Pressure_Level                     (Pressure_Level) float32 80B 5.0 ... 1...\n",
+       "    Latitude                           (Cell_Along_Swath, Cell_Across_Swath) float32 438kB ...\n",
+       "    Longitude                          (Cell_Along_Swath, Cell_Across_Swath) float32 438kB ...\n",
+       "  * Output_Parameter                   (Output_Parameter) int32 40B 0 1 ... 8 9\n",
+       "  * Water_Vapor_QA_Bytes               (Water_Vapor_QA_Bytes) int32 20B 0 ... 4\n",
+       "Dimensions without coordinates: Cell_Along_Swath, Cell_Across_Swath\n",
+       "Data variables: (12/29)\n",
+       "    Pressure_Levels                    (Pressure_Level) int16 40B ...\n",
+       "    Scan_Start_Time                    (Cell_Along_Swath, Cell_Across_Swath) datetime64[ns] 877kB ...\n",
+       "    Solar_Zenith                       (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n",
+       "    Solar_Azimuth                      (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n",
+       "    Sensor_Zenith                      (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n",
+       "    Sensor_Azimuth                     (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n",
+       "    ...                                 ...\n",
+       "    Water_Vapor                        (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n",
+       "    Water_Vapor_Direct                 (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n",
+       "    Water_Vapor_Low                    (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n",
+       "    Water_Vapor_High                   (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n",
+       "    Quality_Assurance                  (Cell_Along_Swath, Cell_Across_Swath, Output_Parameter) float64 9MB ...\n",
+       "    Quality_Assurance_Infrared         (Cell_Along_Swath, Cell_Across_Swath, Water_Vapor_QA_Bytes) float64 4MB ...\n",
+       "Attributes:\n",
+       "    HDFEOSVersion:                      HDFEOS_V2.19\n",
+       "    ScaleFactor_AddOffset_Application:  Value=scale_factor*(stored integer - ...\n",
+       "    Pressure_Levels:                    5, 10, 20, 30, 50, 70, 100, 150, 200,...\n",
+       "    title:                              MODIS Level 2 Atmospheric Profiles   ...\n",
+       "    identifier_product_doi:             10.5067/MODIS/MOD07_L2.061\n",
+       "    identifier_product_doi_authority:   http://dx.doi.org\n",
+       "    history:                            $Id: MOD07.V2.CDL,v 1.1 2005/12/14 16...\n",
+       "    history_json:                       [{"$schema":"https:\\/\\/harmony.earthd...
" + ], + "text/plain": [ + " Size: 146MB\n", + "Dimensions: (Band_Number: 12, Pressure_Level: 20,\n", + " Cell_Along_Swath: 406,\n", + " Cell_Across_Swath: 270,\n", + " Output_Parameter: 10,\n", + " Water_Vapor_QA_Bytes: 5)\n", + "Coordinates:\n", + " * Band_Number (Band_Number) int32 48B 24 25 ... 35 36\n", + " * Pressure_Level (Pressure_Level) float32 80B 5.0 ... 1...\n", + " Latitude (Cell_Along_Swath, Cell_Across_Swath) float32 438kB ...\n", + " Longitude (Cell_Along_Swath, Cell_Across_Swath) float32 438kB ...\n", + " * Output_Parameter (Output_Parameter) int32 40B 0 1 ... 8 9\n", + " * Water_Vapor_QA_Bytes (Water_Vapor_QA_Bytes) int32 20B 0 ... 4\n", + "Dimensions without coordinates: Cell_Along_Swath, Cell_Across_Swath\n", + "Data variables: (12/29)\n", + " Pressure_Levels (Pressure_Level) int16 40B ...\n", + " Scan_Start_Time (Cell_Along_Swath, Cell_Across_Swath) datetime64[ns] 877kB ...\n", + " Solar_Zenith (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n", + " Solar_Azimuth (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n", + " Sensor_Zenith (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n", + " Sensor_Azimuth (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n", + " ... ...\n", + " Water_Vapor (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n", + " Water_Vapor_Direct (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n", + " Water_Vapor_Low (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n", + " Water_Vapor_High (Cell_Along_Swath, Cell_Across_Swath) float64 877kB ...\n", + " Quality_Assurance (Cell_Along_Swath, Cell_Across_Swath, Output_Parameter) float64 9MB ...\n", + " Quality_Assurance_Infrared (Cell_Along_Swath, Cell_Across_Swath, Water_Vapor_QA_Bytes) float64 4MB ...\n", + "Attributes:\n", + " HDFEOSVersion: HDFEOS_V2.19\n", + " ScaleFactor_AddOffset_Application: Value=scale_factor*(stored integer - ...\n", + " Pressure_Levels: 5, 10, 20, 30, 50, 70, 100, 150, 200,...\n", + " title: MODIS Level 2 Atmospheric Profiles ...\n", + " identifier_product_doi: 10.5067/MODIS/MOD07_L2.061\n", + " identifier_product_doi_authority: http://dx.doi.org\n", + " history: $Id: MOD07.V2.CDL,v 1.1 2005/12/14 16...\n", + " history_json: [{\"$schema\":\"https:\\/\\/harmony.earthd..." + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Open a file into xarray for analysis\n", + "ds = xr.open_dataset(dir_list[0])\n", + "ds" + ] + }, + { + "cell_type": "markdown", + "id": "6fc7f36c-b9b9-442e-a9eb-2154cd051534", + "metadata": {}, + "source": [ + "Now we can remove the test data files and the test_data:\n", + "1) in file browser on the left, navigate to 'test_data' folder\n", + "2) delete downloaded files\n", + "3) navigate one folder up\n", + "4) delete the 'test_data' folder" + ] + }, + { + "cell_type": "markdown", + "id": "7cb5dacc-e93d-4d13-b760-e0bdfb944bf4", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "Congratulations! You’ve completed the tutorial. In this tutorial you have gained the skills to:\n", + "\n", + "- Transfrom Coordinate Reference Systems, \n", + "\n", + "- Open data into Pandas, GeoPandas and Xarray DataFrames/Arrays,\n", + "\n", + "- Use Shapely geometries to define an area of interest and subset data,\n", + "\n", + "- Learned to use icepyx and earthaccess for streamlining data access, \n", + "\n", + "- Search and access optimized and non-optimized cloud data, non-cloud-hosted data " + ] + }, + { + "cell_type": "markdown", + "id": "6ac6962a-9f21-418b-adfc-f8af64d127f1", + "metadata": {}, + "source": [ + "## References\n", + "\n", + "Livingstone, S.J., Li, Y., Rutishauser, A. et al. Subglacial lakes and their changing role in a warming climate. Nat Rev Earth Environ 3, 106–124 (2022). doi:[10.1038/s43017-021-00246-9](https://doi.org/10.1038/s43017-021-00246-9)\n", + "\n", + "Smith, B., Fricker, H. A., Holschuh, N., Gardner, A. S., Adusumilli, S., Brunt, K. M., et al. (2019). Land ice height-retrieval algorithm for NASA’s ICESat-2 photon-counting laser altimeter. Remote Sensing of Environment, 233, 111352. doi:[10.1016/j.rse.2019.111352](https://doi.org/10.1016/j.rse.2019.111352)\n", + "\n", + "Smith, B., T. Sutterley, S. Dickinson, B. P. Jelley, D. Felikson, T. A. Neumann, H. A. Fricker, A. Gardner, L. Padman, T. Markus, N. Kurtz, S. Bhardwaj, D. Hancock, and J. Lee. (2022). ATLAS/ICESat-2 L3B Gridded Antarctic and Arctic Land Ice Height Change, Version 2 [Data Set]. Boulder, Colorado USA. NASA National Snow and Ice Data Center Distributed Active Archive Center. [https://doi.org/10.5067/ATLAS/ATL15.002](https://doi.org/10.5067/ATLAS/ATL15.002). Date Accessed 2023-03-16.\n", + "\n", + "Smith, B., T. Sutterley, S. Dickinson, B. P. Jelley, D. Felikson, T. A. Neumann, H. A. Fricker, A. Gardner, L. Padman, T. Markus, N. Kurtz, S. Bhardwaj, D. Hancock, and J. Lee. “ATL15 Data Dictionary (V01).” National Snow and Ice Data Center (NSIDC), 2021-11-29. [https://nsidc.org/data/documentation/atl15-data-dictionary-v01](https://nsidc.org/data/documentation/atl15-data-dictionary-v01). Date Accessed 2023-03-16." + ] + } + ], + "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.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}